ASLR là gì và nó giữ máy tính của bạn an toàn như thế nào?
Địa chỉ ngẫu nhiên bố trí không gian địa chỉ (ASLR) là một kỹ thuật bảo mật được sử dụng trong các 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) có tính năng bảo vệ ASLR. Nhưng trong tuần qua, một phương pháp mới bỏ qua ASLR đã được tìm thấy. Vì vậy, bạn 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 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ẽ hoạt động mọi lúc hoặc cần truy cập đồng thời vào RAM đó.
Hệ điều hành phân bổ các khối bộ nhớ cho các chương trình được gọi là trang. Nếu không có đủ RAM để lưu trữ 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ữ 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à cho mượn tên của nó vào 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 họ dễ dàng hơn và cũng khiến 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 còn lại bao nhiêu RAM. Họ chỉ có thể yêu cầu hệ điều hành cho bộ nhớ bổ sung (hoặc trả lại bộ nhớ không sử dụng) khi cần thiết. Tất cả các chương trình nhìn thấy là một khối đị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 xem 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ó cung cấp cho hệ điều hành một địa chỉ ảo. Hệ điều hành liên lạc với đơn vị quản lý bộ nhớ của CPU (MMU). MMU dịch giữa các địa chỉ ảo và 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ì?
Ngẫu nhiên bố trí không gian địa chỉ (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 một lỗi tràn bộ đệm, kẻ tấn công cung cấp một hàm nhiều dữ liệu rác nhất có thể, sau đó là một trọng tải độc hại. Tải trọng sẽ ghi đè lên dữ liệu mà chương trình dự định truy cập. Hướng dẫn để nhảy đến một điểm khác trong mã là một tải trọng phổ biến. Ví dụ, phương pháp bẻ khóa nổi tiếng của JailbreakMe là iOS 4, đã sử dụng một cuộc tấn công tràn bộ đệm, khiến Apple thêm ASLR vào iOS 4.3.
Bộ đệm tràn yêu cầu kẻ tấn công biết vị trí của từng phần của chương trình trong bộ nhớ. Tìm ra điều này thường là một quá trình khó khăn của thử nghiệm và lỗi. 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, có thể khó hoặc không thể khai thác nó.
ASLR hoạt động cùng với quản lý bộ nhớ ảo để chọn ngẫu nhiên các 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) sẽ đượ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 mục tiêu của chúng ở đâu thông qua thử và sai, bởi 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 sự hỗ trợ ASLR, nhưng điều này đang trở thành mặc định và thậm chí còn được yêu cầu trên Android 5.0 trở lên.
ASLR vẫn bảo vệ bạn?
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 Jump Over ASLR: Tấn công các dự đoán chi nhánh để vượt qua ASLR. Bài viết chi tiết một cách để tấn công Bộ đệm mục tiêu chi nhánh (BTB). BTB là một phần của bộ xử lý tăng tốc nếu báo cáo bằng cách dự đoán kết quả. Sử dụng phương pháp của tác giả, có thể xác định vị trí của các hướng dẫn chi 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áy Linux có bộ xử lý Intel Haswell (phát hành lần đầu tiên vào năm 2013), nhưng có khả nă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 viết đưa ra một vài 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ạt mịn hơn sẽ đòi hỏi nhiều nỗ lực hơn từ kẻ tấn công và việc tăng lượng entropy (tính ngẫu nhiên) có thể khiến cho cuộc tấn công Jump Over không thể thực hiện được. Nhiều khả năng, các hệ điều hành và bộ xử lý mới hơn sẽ miễn nhiễm với cuộc tấn công này.
Vì vậy, những gì còn lại cho bạn làm? Đường tránh 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ẽ tăng khả năng gây sát thương 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 chưa từng có; Microsoft và Apple chỉ triển khai ASLR trong các hệ điều hành được phát hành năm 2007 trở đi. Ngay cả khi phong cách tấn công này trở nên phổ biến, bạn sẽ không trở nên tồi tệ hơn so với thời kỳ Windows XP trở lại.
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 thực tiễn tốt nhất về bảo mậ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 và luôn 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ẽ an toàn như bạn đã từng.
Tín dụng hình ảnh: Steve / Flickr