Address Space Layout Randomization (ASLR) là một kỹ thuật bảo mật được sử dụng trong hệ điều hành, được triển khai lần đầu tiên vào năm 2001. Các phiên bản hiện tại của tất cả các hệ điều hành chính (iOS, Android, Windows, macOS và Linux) đều có tính năng bảo vệ ASLR. Nhưng trong tuần qua, một phương pháp mới để vượt qua ASLR đã được tìm thấy. Vì vậy, bạn có nên lo lắng?
Đối với những người không có nền tảng lập trình cấp thấp, ASLR có thể gây nhầm lẫn. Để hiểu nó, trước tiên bạn phải hiểu bộ nhớ ảo.
Bộ nhớ ảo là gì?
Bộ nhớ ảo là một kỹ thuật quản lý bộ nhớ với nhiều lợi ích, nhưng nó chủ yếu được tạo ra để giúp lập trình dễ dàng hơn. Hãy tưởng tượng bạn có Google Chrome, Microsoft Word và một số chương trình khác đang mở trên máy tính có RAM 4 GB. Nhìn chung, các chương trình trên máy tính này sử dụng nhiều hơn 4 GB RAM. Tuy nhiên, không phải tất cả các chương trình sẽ luôn hoạt động hoặc cần truy cập đồng thời vào RAM đó.
Hệ điều hành phân bổ nhiều phần bộ nhớ cho các chương trình được gọi là trang. Nếu không có đủ RAM để lưu tất cả các trang cùng một lúc, các trang ít có khả năng cần thiết nhất sẽ được lưu trên ổ cứng chậm hơn (nhưng rộng rãi hơn). Khi cần các trang được lưu trữ, chúng sẽ chuyển đổi không gian với các trang ít cần thiết hơn hiện có trong RAM. Quá trình này được gọi là phân trang và đặt tên của nó cho tệp pagefile.sys trên Windows.
Bộ nhớ ảo giúp các chương trình quản lý bộ nhớ của chính chúng dễ dàng hơn và cũng giúp chúng an toàn hơn. Các chương trình không cần phải lo lắng về nơi các chương trình khác đang lưu trữ dữ liệu hoặc dung lượng RAM còn lại. Họ chỉ có thể yêu cầu hệ điều hành cung cấp thêm bộ nhớ (hoặc trả lại bộ nhớ không sử dụng) khi cần thiết. Tất cả những gì chương trình nhìn thấy là một đoạn địa chỉ bộ nhớ liên tục duy nhất để sử dụng riêng, được gọi là địa chỉ ảo. Chương trình không được phép nhìn vào bộ nhớ của chương trình khác.
Khi một chương trình cần truy cập bộ nhớ, nó sẽ cung cấp cho hệ điều hành một địa chỉ ảo. Hệ điều hành liên hệ với đơn vị quản lý bộ nhớ của CPU (MMU). MMU chuyển đổi giữa địa chỉ ảo và địa chỉ vật lý, trả lại thông tin đó cho hệ điều hành. Chương trình không tương tác trực tiếp với RAM.
ASLR là gì?
Địa chỉ bố trí không gian ngẫu nhiên (ASLR) chủ yếu được sử dụng để bảo vệ chống lại các cuộc tấn công tràn bộ đệm. Trong sự cố tràn bộ đệm, những kẻ tấn công cung cấp cho một chức năng nhiều dữ liệu rác mà nó có thể xử lý, theo sau là một tải trọng độc hại. Trọng tải sẽ ghi đè lên dữ liệu mà chương trình dự định truy cập. Hướng dẫn để chuyển đến một điểm khác trong mã là một trọng tải phổ biến. Ví dụ, phương pháp JailbreakMe nổi tiếng để bẻ khóa iOS 4 đã sử dụng một cuộc tấn công tràn bộ đệm, khiến Apple phải thêm ASLR vào iOS 4.3.
Tràn bộ đệm yêu cầu kẻ tấn công biết từng phần của chương trình nằm ở đâu trong bộ nhớ. Việc tìm ra điều này thường là một quá trình khó khăn thử và sai. Sau khi xác định điều đó, họ phải tạo ra một trọng tải và tìm một nơi thích hợp để tiêm nó. Nếu kẻ tấn công không biết mã mục tiêu của chúng nằm ở đâu, thì rất khó hoặc không thể khai thác được.
ASLR hoạt động cùng với quản lý bộ nhớ ảo để ngẫu nhiên hóa vị trí của các phần khác nhau của chương trình trong bộ nhớ. Mỗi khi chương trình được chạy, các thành phần (bao gồm ngăn xếp, heap và thư viện) được chuyển đến một địa chỉ khác trong bộ nhớ ảo. Những kẻ tấn công không còn có thể biết được mục tiêu của chúng ở đâu thông qua thử và sai, vì địa chỉ sẽ khác nhau mỗi lần. Nói chung, các ứng dụng cần được biên dịch với hỗ trợ ASLR, nhưng điều này đang trở thành mặc định và thậm chí được yêu cầu trên Android 5.0 trở lên.
Vậy ASLR có còn bảo vệ bạn không?
Thứ Ba tuần trước, các nhà nghiên cứu từ SUNY Binghamton và Đại học California, Riverside, đã trình bày một bài báo có tên Nhảy qua ASLR: Tấn công các dự đoán nhánh để vượt qua ASLR. Bài báo trình bày chi tiết cách tấn công Bộ đệm Mục tiêu Nhánh (BTB). BTB là một phần của bộ xử lý giúp tăng tốc các câu lệnh if bằng cách dự đoán kết quả. Sử dụng phương pháp của các tác giả, có thể xác định vị trí của các lệnh rẽ nhánh đã biết trong một chương trình đang chạy. Cuộc tấn công được đề cập được thực hiện trên một máy Linux có bộ xử lý Intel Haswell (phát hành lần đầu vào năm 2013), nhưng có thể được áp dụng cho bất kỳ hệ điều hành và bộ xử lý hiện đại nào.
Điều đó nói rằng, bạn không nhất thiết phải tuyệt vọng. Bài báo đã đưa ra một số cách mà các nhà phát triển phần cứng và hệ điều hành có thể giảm thiểu mối đe dọa này. Các kỹ thuật ASLR mới hơn, hạt mịn sẽ đòi hỏi nhiều nỗ lực hơn từ kẻ tấn công và việc tăng số lượng entropy (tính ngẫu nhiên) có thể khiến cuộc tấn công Jump Over không khả thi. Nhiều khả năng các hệ điều hành và bộ vi xử lý mới hơn sẽ miễn nhiễm với cuộc tấn công này.
Vậy còn lại để làm gì bạn làm? Đường vòng Jump Over là mới và chưa được phát hiện trong tự nhiên. Khi kẻ tấn công khai thác nó, lỗ hổng sẽ làm tăng thiệt hại tiềm ẩn mà kẻ tấn công có thể gây ra trên thiết bị của bạn. Mức độ truy cập này không phải là chưa từng có; Microsoft và Apple chỉ triển khai ASLR trong hệ điều hành của họ được phát hành từ năm 2007 trở lên. Ngay cả khi kiểu tấn công này trở nên phổ biến, bạn sẽ không tệ hơn những ngày còn lại của Windows XP.
Hãy nhớ rằng những kẻ tấn công vẫn phải lấy mã của chúng trên thiết bị của bạn để gây hại. Lỗ hổng này không cung cấp cho họ bất kỳ cách bổ sung nào để lây nhiễm cho bạn. Như mọi khi, bạn nên tuân theo các phương pháp bảo mật tốt nhất. Sử dụng phần mềm chống vi-rút, tránh xa các trang web và chương trình sơ sài, đồng thời cập nhật phần mềm của bạn. Bằng cách làm theo các bước này và giữ các tác nhân độc hại khỏi máy tính của bạn, bạn sẽ được an toàn như trước đây.
Tín dụng hình ảnh: Steve / Flickr