01/10/2018, 14:05
Lỗ hổng bảo mật Meltdown và Spectre là gì?
ai có thể giải thích cho em hiểu lỗ hổng trên là gì được không ạ , sao có thể lấy được dữ liệu thông qua việc tấn công vào chip xử lý được ạ , em nghĩ dữ liệu được lưu ở ổ cứng hoặc ram chứ nhỉ…
Bài liên quan
Giải thích đơn giản thì: Khi chương trình được thực hiện thì sẽ được nạp một phần vào RAM, và OS sẽ quản lý những vùng bộ nhớ của các chương trình này, không cho phép chương trình này truy cập vào vùng nhớ của chương trình khác (nếu bạn đã từng gặp lỗi segmentation fault thì sẽ rõ - đó là OS ngăn bạn truy cập vào bộ nhớ mà bạn không được truy cập). Meltdown lợi dụng sơ hở này, nghĩa là nó sẽ làm cách nào đó để lấy được data mà qua mặt vụ kiểm duyệt của cả OS. Điều này cũng có nghĩa là Meltdown có quyền truy cập vào cả vùng nhớ của OS, hardware drivers, tất cả những gì có trong RAM (bởi vì kernel cũng được nạp vào RAM khi boot)
Meltdown: yêu cầu truy nhập bất hợp lệ -> dữ liệu từ vùng nhớ cấm sẽ được nạp vào cache trước (speculative) khi CPU xác định đây là vùng nhớ cấm -> văng lỗi nhưng vẫn còn dấu vết trên cache -> đọc trên cache.
Ta có thể biết là một ô nhớ đã cached hay chưa bằng cách đo thời gian truy cập :v. Phần chi tiết kĩ thuật bạn đọc có thể tìm ở đây: https://spectreattack.com/ kết hợp với Wiki sẽ dễ hiểu hơn.
Đoạn mã tấn công gồm cả 5 dòng asm (arXiv:1801.01207 [cs.CR], trang 8) [spoiler](ban đầu mình cứ nghĩ là chỉ có 2 dòng :v)[/spoiler] Đầu tiên, CPU tranh thủ đọc luôn 1 byte X ở vùng nhớ cấm trước khi đi kiểm tra. Đọc xong CPU tính ra địa chỉ truy cập mảng probe, và nếu nhanh nhẩu nữa sẽ cache luôn một ô nhớ ứng với X. Đây chính là cốt lõi của exploit này.
Thực ra Meltdown và Spectre đều lợi dụng sự “tài lanh” cả, nhưng Spectre lợi dụng branch misprediction: nhánh thua sẽ truy cập vào vùng nhớ cấm và CPU bị “dụ” vào nhánh này. Dạng cơ bản nhất của Spectre (và cũng là Meltdown):
tmp = pod[* (char*)forbidden * 4096 + base]; //cache lines size = 64 bytes
hay
tmp = pod[* (short*)forbidden * 256 + base];
Tuy nhiên Spectre chấp luôn cả xóa cache. Bạn đọc xem tài liệu còn lại.
Tóm lại, điều lạ lùng nhất là tại sao đến bây giờ người ta mới đặt vấn đề với speculative execution?
Vậy đọc vùng nhớ ấy ntn? Đọc từ một ô nhớ được cache thì luộn nhanh hơn nhiều so với một ô không cache. Vì vậy ta chạy for từ base+0 đến base+… và đo thời gian chạy của mỗi câu lệnh trong vòng lặp.
Cái này có gì khác với cheat engine nhỉ? Hồi giờ cheat engine đọc memory của process khác ngon ơ mà?
Memory này hình như là cache trên chip. Không phải trên RAM.
Meltdown & Spectre không cần phải “leo quyền” (escalation) vẫn đọc được kernel. Cheat Engine có quyền kernel.
Spectre nghiêm trọng hơn nhiều và phổ rất rộng; Meltdown không áp dụng được trên AMD do nó nạp xong X là văng lỗi ngay.
sửa lại một ít.