• Thứ Ba, 06/03/2018 09:15 (GMT+7)

    Giải mã Spectre và Meltdown: Thảm họa từ sai sót trong thiết kế CPU

    Phan Châu
    Lỗ hổng ảnh hưởng tới hầu hết CPU Intel, AMD và ARM sản xuất 20 năm qua do sai sót nằm ở nền tảng trong thiết kế và vì tính phổ biến nên trở thành thảm họa.

    Spectre và Meltdown là những từ khóa ‘hot’ nhất những ngày đầu năm 2018, liên quan đến lỗ hổng bảo mật ẩn trong chip xử lý máy tính mới được công bố làm chấn động giới công nghệ. Lỗ hổng bảo mật này ảnh hưởng tới gần như mọi chip máy tính được sản xuất trong hơn 20 năm qua. Sai sót nảy sinh từ những tính năng tích hợp trong chip nhằm giúp chúng chạy nhanh hơn. Ngay sau đó, những bản vá phần mềm đã được phát hành, nhưng chúng lại ảnh hưởng tới hiệu năng của hệ thống. Hiện tại chưa có bằng chứng cho thấy những sai sót này đã bị khai thác, nhưng nếu có thì cũng rất khó phát hiện.

    Theo đánh giá của giới bảo mật, những sai sót này nằm ở nền tảng và vì tính phổ biến nên trở thành thảm họa.

    Spectre và Meltdown là gì?

    Spectre và Meltdown là tên được đặt cho những biến thể khác nhau của cùng một lỗ hổng bảo mật nằm ở nền tảng ảnh hưởng gần như mọi chip máy tính được sản xuất từ năm 1995 trở lại đây. Lỗ hổng này nếu bị khai thác sẽ cho phép hacker truy cập vào phần dữ liệu trong bộ nhớ vốn được xem là an toàn. Các nhà nghiên cứu bảo mật khám phá ra những sai sót vào cuối năm 2017, và công bố chúng vào đầu năm 2018.

    Về mặt kỹ thuật, có 3 biến thể của lỗ hổng, mỗi biến thể mang số hiệu CVE riêng; 2 trong 3 biến thể này (CVE-2017-5753 và CVE-2017-5715) được gom vào một gọi chung là Spectre, và Meltdown là tên của biến thể thứ ba (CVE-2017-5754).

    Cả 3 biến thể của lỗ hổng nền tảng này đều liên quan đến một chương trình hiểm độc có thể truy cập tới những dữ liệu mà nó không có quyền, nhờ có hai kỹ thuật quan trọng  thường được sử dụng để tăng tốc độ của chip máy tính, đó là thực thi suy đoán (speculative execution) và kỹ thuật caching.

    Thực thi suy đoán là gì?

    Thực thi suy đoán về cơ bản là kỹ thuật được ứng dụng cho chip đoán trước những gì sẽ phải thực thi nhằm tăng tốc độ xử lý. Nếu con chip nhận thấy một chương trình liên quan đến nhiều nhánh logic, nó sẽ bắt đầu tính toán cho tất cả các nhánh này trước khi chương trình quyết định đi theo nhánh nào. Chẳng hạn, nếu chương trình phân tích, “nếu A đúng, tính toán hàm X; nếu A sai, tính toán hàm Y”, chip có thể bắt đầu tính cả hàm X và Y song song ngay cả trước khi nó biết A đúng hay sai. Như vậy, khi biết A đúng hay sai, nó đã có một phần khởi đầu cho những gì thực hiện sau đó, nhờ thế tăng tốc độ xử lý tổng thể. Hoặc, trong một biến thể khác, nếu con chip biết rằng một chương trình thường xuyên sử dụng một hàm, nó có thể tận dụng thời gian nhàn rỗi để tính toán hàm đó thậm chí trước cả khi được yêu cầu, nhờ vậy nó có ngay câu trả lời nếu gặp đúng tình huống tiên đoán.

    Caching là gì?

    Caching là một kỹ thuật thường được sử dụng để tăng tốc truy cập bộ nhớ. So với tốc độ xử lý, CPU tốn quá nhiều thời gian để lấy dữ liệu từ RAM, vốn được đặt trên một chip riêng, do vậy chip CPU có thiết kế bao gồm một vùng nhớ đặc biệt có dung lượng nhỏ đặt ngay trên con chip, gọi là bộ nhớ cache và dữ liệu trên đó được truy cập rất nhanh. Bộ nhớ này được nạp đầy những dữ liệu mà chip sẽ cần sớm, hoặc thường sử dụng. Những gì liên quan đến tình huống của chúng ta là dữ liệu lấy ra bởi lệnh suy đoán thường nằm trong cache, và đó cũng là điều giúp tăng tốc lệnh suy đoán.   

    Vấn đề phát sinh khi caching và lệnh suy đoán bắt đầu truy cập khu vực bộ nhớ được bảo vệ (protected memory).

    Bộ nhớ được bảo vệ là gì?

    Bộ nhớ được bảo vệ là một trong những khái niệm nền tảng của bảo mật máy tính. Về bản chất, không có tiến trình nào trong máy tính có thể truy cập dữ liệu trừ khi được phép. Điều này cho phép một chương trình giữ riêng một số dữ liệu của mình không cho chương trình khác sử dụng, và cho phép hệ điều hành ngăn cản một chương trình xem dữ liệu thuộc chương trình khác. Để truy cập dữ liệu, một tiến trình cần phải được phép. 

    Nhưng việc kiểm tra đặc quyền có thể mất khá nhiều thời gian. Do vậy – và đây là điểm chính yếu dẫn tới lỗ hổng bảo mật chúng ta đang thảo luận – trong khi CPU xem xét để cho phép tiến trình được truy cập dữ liệu hay không, nhờ tính năng thực thi suy đoán, nó bắt đầu làm việc với dữ liệu ngay cả trước khi nhận được quyền làm như vậy. Về lý thuyết, điều này vẫn an toàn, vì các kết quả của lệnh đoán trước như vậy cũng được bảo vệ ở mức phần cứng. Tiến trình không được phép thấy chúng cho đến khi nó vượt qua được khâu kiểm tra đặc quyền, và nếu không vượt qua được, dữ liệu sẽ bị loại bỏ.

    Vấn đề phát sinh vì dữ liệu được bảo vệ được nạp trước vào bộ nhớ cache của CPU ngay cả khi tiến trình đang chạy không có quyền truy cập nó. Và vì CPU truy cập bộ nhớ cache trước bộ nhớ thông thường, nên tiến trình có thể truy cập địa chỉ bộ nhớ cụ thể để xem dữ liệu có trong cache hay không, dù tiến trình vẫn chưa có quyền truy cập dữ liệu. Nếu dữ liệu nằm trong cache, nỗ lực đọc dữ liệu của nó sẽ bị từ chối nhanh hơn nhiều so với được phép. Điều này tương tự như khi ta gõ vào một cái hộp xem nó có rỗng hay không. Nhưng do cách bộ nhớ máy tính hoạt động, chỉ cần biết địa chỉ nơi dữ liệu được lưu trữ có thể giúp bạn đoán được dữ liệu đó là gì. Đây là kiểu tấn công kênh biên.

    Spectre và Meltdown khác gì nhau?

    Google có bài viết “Reading privileged memory with a side-channel” đăng trên trang Project Zero vào hôm 3/1/2018, diễn giải cách thức hoạt động của Spectre và Meltdown. Nói một cách đơn giản, Spectre và Meltdown đều có thể cho phép những kẻ tấn công tiềm năng có quyền truy cập tới dữ liệu mà chúng không được phép do các kỹ thuật đã nói ở trên, nhưng hiệu quả của chúng khác nhau, cụ thể như sau:

    Meltdown có tên này vì nó làm “tan chảy” hàng rào an ninh bảo mật lớp phần cứng. Bằng cách khai thác Meltdown, kẻ tấn công có thể sử dụng chương trình đang chạy trên máy tính để truy cập dữ liệu khắp nơi mà bình thường chương trình này không thể thấy, trong đó có cả dữ liệu của các chương trình khác và những dữ liệu mà chỉ người quản trị mới có quyền truy cập. Meltdown không đòi hỏi hiểu rõ chương trình mà kẻ tấn công sử dụng, nhưng nó chỉ hoạt động với một số loại chip Intel. Đây là một vấn đề khá nghiêm trọng nhưng các bản sửa lỗi đang được tung ra.

    Đối với Spectre, bằng cách khai thác các biến thể của nó một kẻ tấn công có thể khiến một chương trình tiết lộ một số dữ liệu của chính nó mà đáng ra phải giữ bí mật. Nó đòi hỏi phải có kiến thức sâu hơn về hoạt động bên trong của chương trình bị lợi dụng, và không cho phép truy cập tới dữ liệu của các chương trình khác, nhưng nguy hiểm ở đây là diện rộng - ảnh hưởng hầu hết các loại chip máy tính. Cái tên Spectre được đặt dựa trên nguyên nhân gốc rễ, đó là thực thi suy đoán, nhưng cũng xuất phát từ thực tế là việc chặn nó sẽ phức tạp hơn nhiều – trong khi các bản vá đang được tung ra, những cuộc tấn công khác cùng họ lại tiếp tục xuất hiện. “Bóng ma” Spectre sẽ còn ám ảnh chúng ta một thời gian nữa.

    Vì sao Spectre và Meltdown lại nguy hiểm?

    Spectre và Meltdown mở ra khả năng cho các cuộc tấn công nguy hiểm. Chẳng hạn, mã JavaScript trên một website có thể sử dụng Spectre để lừa trình duyệt web tiết lộ thông tin tài khoản người dùng và mật khẩu. Những kẻ tấn công có thể khai thác Meltdown để xem dữ liệu của người dùng khác và thậm chí các máy chủ ảo khác lưu trữ trên cùng phần cứng, điều này có thể gây thảm họa cho các máy chủ đám mây. 

    Nhưng ngoài việc bị khai thác cho các cuộc tấn công, bản thân chúng cho thấy một thực tế là có các lỗ hổng nền tảng ở lớp phần cứng hoạt động bên dưới phần mềm chúng ta sử dụng hàng ngày. Ngay cả chương trình vốn tưởng là an toàn hóa ra lại dễ bị tổn thương, vì những giả định dùng làm nền tảng cho các tiến trình bảo mật tích hợp trong chương trình cũng đã sai.

    Các bản vá Spectre và Meltdown

    Các lỗ hổng nền tảng nằm ở mức phần cứng và không thể vá được. Tuy nhiên, hầu hết các nhà cung câp đã và đang phát hành các bản vá phần mềm để giải quyết các vấn đề này. Bản vá  KAISER, phát triển ngẫu nhiên trong năm 2017 để cải thiện bảo mật cho Linux, thực sự có tác dụng phụ ngăn chặn các cuộc tấn công Meltdown. Các nhà cung cấp đám mây lớn đã vá các máy chủ của họ. Các bản vá đã và đang được tung ra bởi Intel, Microsoft, Apple, Google và nhiều công ty khác.

    Đáng lưu ý là, JavaScript trong trình duyệt là một yếu tố đặc biệt nguy hiểm đối với các cuộc tấn công Spectre, nên điều quan trọng là người dùng phải cập nhật trình duyệt.

    Trong khi đó, các hệ thống cũ như Windows XP gần như chắc chắn không bao giờ được vá. Ngoài ra, còn có hàng triệu chiếc điện thoại Android giá thấp của nhiều nhà sản xuất không nhận được các bản cập nhật bảo mật từ Google. Điều đáng nói là nhiều trong số đó chưa tới mức cũ lắm.

    Tính đến ngày 11/1, Microsoft đã phát hành các bản vá hệ điều hành cho hầu hết các phiên bản Windows, từ Windows 7 trở lên, cũng như vá các trình duyệt Internet Explorer và Edge của công ty. Trên trang hỗ trợ của Microsoft cũng đồng thời đăng tải các đường link cập nhật firmware từ các nhà sản xuất phần cứng lớn. Tuy nhiên, một số hệ thống sử dụng chip AMD sau khi tải về các bản vá đã không khởi động lại được, và Microsoft đã đưa ra hướng dẫn gỡ bỏ một số bản cập nhật trước khi vá để tránh tình trạng hẩm hiu này.

    Apple cũng đã phát hành các bản vá cho các hệ điều hành của mình, gồm macOS, iOS, và  tvOS, kể cả trình duyệt Safari vào ngày 3/1/2017.
    Google thì đưa ra các danh sách liệt kê những model Chromebook đã được vá, không cần các bản vá, sẽ sớm có bản vá.

    Firefox có một bản vá phát hành vào ngày 23/1, trước đó có đưa ra bản Beta.

    Trình duyệt Google Chrome có một bản vá phát hành ngày 23/1. Trước khi được vá, người dùng có thể bật tính năng Site Isolation để tự bảo vệ mình.

    Riêng với Android do có quá nhiều biến thể nên rất khó biết điện thoại của bạn có bản vá liên quan hay không. Hầu hết điện thoại được bán trực tiếp bởi Google hay những nhà sản xuất lớn như Samsung đều được vá, nhưng nhiều trong chúng là không. Bạn có thể truy cập https://www.ricompro.it/check-security-update-brand/ để kiểm tra.

    Các bản vá Spectre và Meltdown làm chậm hệ thống?

    Các bản vá này giảm thiểu nguy cơ từ các lỗ hổng bằng cách thay đổi hay vô hiệu hóa cách chương trình phần mềm sử dụng các tính năng thực thi suy đoán và caching vốn được tích hợp trong phần cứng. Và vì các tính năng này được thiết kế để cải thiện hiệu năng hệ thống, do đó sau khi vá hệ thống chạy chậm lại. Nhiều báo cáo than phiền hiệu năng hệ thống bị giảm tới 30% sau khi vá các lỗ hổng này, nhưng theo đánh giá từ Phoronix, tỷ lệ giảm hiệu năng chủ yếu vào khoảng 5 – 10%.

    PC WORLD VN, 02/2018

    ID: A1802_35