# Nghiên cứu mới: Các cuộc tấn công chỉ nhắm vào dữ liệu dễ thực hiện hơn bạn tưởng

- Nguồn: Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung)
- Thời gian phát hành: 2026-09-24 18:48 (giờ Việt Nam)
- Điểm AI: 47/100
- Link AIHOT.vn: https://aihot.vn/items/7e759b93f911ad13
- Nguồn dữ liệu AI HOT: https://aihot.news/items/cmufhcd4o04scrolqsimqxb7g
- Link gốc: https://www.usenix.org/publications/loginonline/data-only-attacks-are-easier-you-think

## Tóm tắt AI

Nghiên cứu tại USENIX Security 2024 giới thiệu công cụ Einstein, chứng minh các cuộc tấn công chỉ nhắm vào dữ liệu (data-only attacks) có thể thực hiện dễ dàng mà không cần thay đổi luồng điều khiển của chương trình, gây rủi ro bảo mật nghiêm trọng.

## Thân bài

![Data-Only Attacks Are Easier than You Think](https://www.usenix.org/sites/default/files/usenix_2025_og_1200x630.png)

Lấy cảm hứng từ câu nói được cho là của Albert Einstein, chúng tôi giới thiệu một quy trình khai thác tấn công chỉ dựa trên dữ liệu đơn giản (nhưng không quá đơn giản), có tên là Einstein, giúp xây dựng các cuộc tấn công với sự dễ dàng đáng kinh ngạc. Nó tạo ra các cuộc tấn công chỉ dựa trên dữ liệu bằng cách sử dụng kỹ thuật không phụ thuộc vào ứng dụng, chứng minh rằng những cuộc tấn công như vậy nằm trong tầm tay của những kẻ tấn công không cần nhiều nỗ lực.

Không phụ thuộc vào ứng dụng. Thay vì cố gắng tìm hiểu ngữ nghĩa cụ thể của ứng dụng (ví dụ: các trường hợp đặc biệt của giao thức HTTP), Einstein nhắm mục tiêu vào một giao diện phổ quát mà bất kỳ chương trình nào cũng sử dụng để giao tiếp với nhân hệ điều hành: các syscall. Cụ thể, chúng tôi theo dõi dữ liệu đi vào các đối số của syscall, xác định xem kẻ tấn công có thể làm hỏng chúng để, ví dụ, thực thi mã tùy ý thông qua execve hoặc sửa đổi tệp trong hệ thống tệp thông qua write hay không.

Đơn giản. Hơn nữa, Einstein loại bỏ các phức tạp không cần thiết và thay vào đó, nhắm mục tiêu vào các lỗ hổng không chỉ đơn giản nhất để xác định mà còn hứa hẹn nhất đối với kẻ tấn công. Cụ thể, Einstein tự động tạo các khai thác cho các syscall nhạy cảm về bảo mật dọc theo đường dẫn thực thi (đã hợp lệ) của chương trình, và các đối số của chúng được sao chép (đơn giản) nguyên văn từ dữ liệu mà kẻ tấn công có thể kiểm soát. Như đã trình bày chi tiết sau đó, cách tiếp cận đơn giản này có thể tự động tạo ra một số lượng đáng ngạc nhiên các khai thác chỉ dựa trên dữ liệu thực tế trong các chương trình phổ biến ngoài đời thực.

### Cách Einstein xây dựng cuộc tấn công ví dụ

Để giải thích cách Einstein hoạt động, chúng tôi sẽ đi qua từng bước về cách nó xây dựng cuộc tấn công ví dụ và cách nó tạo ra các đối số của một syscall nhạy cảm về bảo mật. Chúng tôi giả định rằng kẻ tấn công có quyền truy cập vào một chương trình tương đương với chương trình mà nạn nhân dự kiến của họ đã triển khai, vì vậy họ có thể chạy máy chủ cục bộ để phân tích. Einstein lấy chương trình của nạn nhân làm đầu vào và hoạt động theo hai giai đoạn: thứ nhất, nó tạo ra các khai thác ứng viên; và thứ hai, nó xác nhận xem mỗi khai thác ứng viên có thực sự hoạt động hay không. Để biết giải thích về các điểm tinh tế hơn của thiết kế nằm ngoài phạm vi của ví dụ này — ví dụ: cách Einstein theo dõi dữ liệu không giới hạn, liên kết nhiều syscall với nhau, v.v. — vui lòng tham khảo bài báo [5] của chúng tôi.

Tạo khai thác ứng viên. Để tạo các khai thác ứng viên, Einstein theo dõi tất cả dữ liệu có thể bị kẻ tấn công làm hỏng trong thời gian chạy, xác định dữ liệu nào có thể ảnh hưởng đến các đối số của các syscall nhạy cảm về bảo mật. Để tạo điều kiện thuận lợi cho việc này, trước tiên chúng tôi khởi động máy chủ với công cụ đo lường cấp nhị phân của Einstein (Hình 3a, ➊). Công cụ đo lường này bổ sung hỗ trợ cho phân tích taint động, cho phép chúng tôi theo dõi bất kỳ dữ liệu chương trình "bị nhiễm" nào trong thời gian chạy [8]. Máy chủ khởi động, khởi tạo cgi_bin_path của nó và bắt đầu chờ đợi các yêu cầu. Einstein mô hình hóa một kẻ tấn công khai thác lỗi an toàn bộ nhớ bằng cách gắn nhãn duy nhất cho bất kỳ dữ liệu nào mà nó có khả năng làm hỏng, ví dụ: chuỗi "/usr/local/server/cgi-bin", cũng như tất cả các dữ liệu khác trong phạm vi của nó. Ngoài ra, chúng tôi ghi lại dữ liệu bị nhiễm vào một bản ghi nhanh bộ nhớ (➋).

Tiếp theo, Einstein tiếp tục thực thi chương trình và theo dõi cách dữ liệu bị nhiễm lan truyền trong suốt quá trình thực thi của chương trình khi máy chủ xử lý khối lượng công việc bao gồm các yêu cầu lành tính (➌). Ví dụ, nó gửi yêu cầu "POST /sort-script" từ Hình 2b. Sau đó, trong khi xử lý yêu cầu, máy chủ truyền chuỗi bị nhiễm dưới dạng đối số cho syscall execve. Einstein xác định luồng dữ liệu có thể kiểm soát bởi kẻ tấn công này vào một syscall nhạy cảm về bảo mật và ghi lại thông tin về nó, chẳng hạn như các đối số và mức độ bị nhiễm của chúng (⍟).

Sau đó, Einstein xác định rằng các tham số pathname và argv của execve không chỉ bị nhiễm với một định danh tương ứng với cgi_bin_path, mà thực tế chúng còn giống hệt với cgi_bin_path. Chúng tôi gọi loại luồng dữ liệu (rất) đơn giản này là luồng dữ liệu đồng nhất. Einstein xây dựng một khai thác ứng viên cho luồng dữ liệu đồng nhất bằng cách tạo các cặp (địa chỉ, giá trị) chỉ định rằng lỗi ghi bộ nhớ có thể khai thác execve bằng cách ghi đè cgi_bin_path từ "/usr/local/server/cgi-bin" thành "/bin" (➎).

![](https://www.usenix.org/sites/default/files/styles/article_embedded/public/bug.jpg)

![](https://www.usenix.org/sites/default/files/styles/article_embedded/public/example.jpg)

![](https://www.usenix.org/sites/default/files/styles/article_embedded/public/identification1.jpg)

![](https://www.usenix.org/sites/default/files/styles/article_embedded/public/identification2.jpg)
