- Để kiểm chứng khả năng phát hiện mã độc bằng AI, nhóm nghiên cứu đã cấy backdoor nhân tạo vào nhiều tệp nhị phân máy chủ mã nguồn mở và tiến hành thử nghiệm phát hiện bằng tác tử AI cùng Ghidra
- Các mô hình mới như Claude Opus 4.6 đã tìm ra một số backdoor đơn giản, nhưng tỷ lệ phát hiện là 49% và tỷ lệ dương tính giả là 28%, ở mức chưa phù hợp để sử dụng thực tế
- Thử nghiệm sử dụng các dự án nền tảng C·Rust như lighttpd, dnsmasq, Dropbear, Sozu, và AI thực hiện phân tích chỉ với công cụ dịch ngược mà không có mã nguồn
- Một số mô hình cho thấy khả năng phán đoán còn hạn chế, như nhầm các lời gọi độc hại rõ ràng (
execl("/bin/sh", ...)) là chức năng bình thường hoặc tập trung vào đoạn mã không liên quan
- Nhóm nghiên cứu đánh giá rằng AI vẫn chưa phải là công cụ bảo mật hoàn chỉnh, nhưng đã phát triển đến mức ngay cả người không chuyên cũng có thể thực hiện kiểm tra bảo mật ban đầu
Bối cảnh nghiên cứu
- Gần đây, các sự cố như cuộc tấn công chuỗi cung ứng Shai Hulud 2.0 và vụ chiếm đoạt tệp nhị phân Notepad++ đã làm nổi bật rủi ro của các tệp thực thi không đáng tin cậy
- Kẻ tấn công chèn mã độc vào phần mềm hợp pháp để đánh cắp thông tin xác thực hoặc thực thi lệnh từ xa
- Cũng đã có báo cáo về các trường hợp trong firmware hoặc thiết bị phần cứng tồn tại mô-đun liên lạc ẩn hoặc tài khoản backdoor
- Để đối phó với các mối đe dọa này, nghiên cứu đã thử nghiệm xem AI có thể phát hiện hành vi độc hại ở cấp độ nhị phân hay không
Tổng quan phân tích nhị phân
- Lập trình thông thường xử lý mã nguồn, nhưng phân tích mã độc phải giải thích tệp nhị phân ở mức mã máy
- Trong quá trình biên dịch, các thông tin cấp cao như tên hàm và tên biến biến mất, đồng thời cấu trúc mã bị méo do tối ưu hóa
- Việc phân tích trải qua quy trình dịch ngược chuyển đổi
mã máy → assembly → mã giả C
- Công cụ mã nguồn mở: Ghidra, Radare2
- Công cụ thương mại: IDA Pro, Binary Ninja
- Các công cụ này khôi phục ý nghĩa của mã, nhưng kết quả thường đầy những định danh vô nghĩa như
FUN_00130550, bVar49
Cấu hình benchmark BinaryAudit
- Nhóm nghiên cứu đã chèn backdoor dùng cho thử nghiệm vào nhiều máy chủ mã nguồn mở (lighttpd, dnsmasq, Dropbear, Sozu)
- Ví dụ: thực thi lệnh thông qua header HTTP hoặc thực thi lệnh shell thông qua tùy chọn DHCP
- AI chỉ được cung cấp tệp thực thi đã biên dịch, không có mã nguồn, và phân tích bằng Ghidra·Radare2·binutils
- Mục tiêu là xác định có tồn tại backdoor hay không và địa chỉ bắt đầu của hàm tương ứng
- Một số bài toán được thiết kế để chỉ yêu cầu phân biệt tệp nào bị nhiễm trong số nhiều tệp nhị phân
Các trường hợp phát hiện thành công
- Claude Opus 4.5 đã phát hiện trong 5 phút backdoor dựa trên header
X-Forwarded-Debug được cấy vào máy chủ lighttpd
- Mô hình phát hiện lời gọi
popen() và dùng Radare2 để dịch ngược, xác nhận logic thực thi lệnh
- Nó còn xác định được cấu trúc trả kết quả thông qua header phản hồi
X-Request-Trace
- Mô hình đã thực hiện quy trình phân tích tự động bằng cách kết hợp các lệnh
nm, strings, grep, r2
Các trường hợp phát hiện thất bại
- Claude Opus 4.6 đã đánh giá nhầm là chức năng bình thường một backdoor thực thi
/bin/sh được chèn vào mã xử lý DHCP của dnsmasq
- Mô hình phát hiện lời gọi
execl("/bin/sh", "sh", "-c", ...), nhưng nhầm đó là việc thực thi script DHCP
- Trên thực tế, đó là đoạn mã dễ bị tấn công, thực thi nguyên nội dung của gói tin từ client
- Dù đã tìm đúng vị trí, mô hình vẫn phủ nhận mức độ nguy hiểm và chuyển sang hàm khác, dẫn đến bỏ sót phát hiện
Giới hạn của AI và vấn đề dương tính giả
- Với tỷ lệ dương tính giả trung bình 28%, có nhiều trường hợp AI báo nhầm backdoor ngay cả trong tệp nhị phân sạch
- Ví dụ: Gemini 3 Pro nhầm đoạn mã phân tích tùy chọn dòng lệnh bình thường là “backdoor thực thi lệnh”
- Trong cộng đồng bảo mật, chất lượng báo cáo do AI tạo ra giảm sút cũng đang bị chỉ ra là vấn đề
- Dự án curl cho biết phần lớn báo cáo lỗi do AI tạo ra là vô nghĩa
- Để được dùng như công cụ bảo mật thực tiễn, cần tỷ lệ dương tính giả dưới 0,001%
Hạn chế của công cụ mã nguồn mở
- Ghidra và Radare2 hữu ích cho phân tích mã C, nhưng hiệu năng suy giảm với tệp nhị phân Rust·Go
- Ví dụ: máy chủ Caddy viết bằng Go (50MB) mất 40 phút để Ghidra tải, và kết quả không chính xác
- Trong khi đó, IDA Pro tải trong vòng 5 phút và cung cấp mã chính xác
- Trong thử nghiệm, để loại trừ khác biệt về chất lượng công cụ, nghiên cứu chủ yếu tập trung vào tệp nhị phân nền tảng C
Kết quả và triển vọng
- Tỷ lệ phát hiện được ghi nhận là Claude Opus 4.6: 49%, Gemini 3 Pro: 44%, Claude Opus 4.5: 37%
- AI vẫn yếu trước các tệp nhị phân lớn hoặc backdoor bắt chước hành vi bình thường
- Tuy nhiên, AI đã phát triển đến mức có thể trực tiếp thao tác Ghidra để thực hiện dịch ngược
- Ngay cả người không chuyên cũng có thể kiểm tra bước đầu các tệp thực thi đáng ngờ
- Hướng phát triển tương lai được đề xuất là tích hợp với công cụ thương mại và phân tích bảo mật dựa trên mô hình cục bộ
- Toàn bộ benchmark và kết quả đã được công bố trên GitHub tại QuesmaOrg/BinaryAudit
1 bình luận
Ý kiến trên Hacker News
Dù họ nói là không làm rối mã, nhưng nếu ẩn import và symbol, rồi làm rối chuỗi, thì tỷ lệ phát hiện sẽ lập tức về 0
Trong trường hợp đó, thứ mà LLM phát hiện chỉ đơn giản là các mẫu bất thường về ngôn ngữ có liên quan đến hành vi độc hại, nên cũng không quá ấn tượng
Ví dụ, các mô hình hiểu được tooling như Ghidra hay Radare2 chỉ có khoảng Opus 4.5, 4.6, Gemini 3 Pro và GLM 5
Có thể xem benchmark liên quan tại đây
Đây chỉ là điểm khởi đầu để AI có thể làm việc với binary, và vẫn còn rất xa mới tới được một giải pháp hoàn chỉnh
Trong reverse engineering phần mềm thực tế, nó có thể loay hoay một lúc, nhưng khi nhận ra đó là obfuscation thì từ đó trở đi tiến trình khá mượt, vừa làm vừa cập nhật kết quả vào các tài liệu như CLAUDE.md
Có thể tham khảo các bản vá ví dụ như dnsmasq-backdoor và dropbear-brokenauth
Tuy nhiên, thứ tôi xử lý không phải backdoor cấp quốc gia mà chỉ ở mức crack phần mềm
Ngược lại, logic phức tạp mới là thứ đánh gục LLM, nhưng các mô hình tốt sẽ tự nhận ra độ phức tạp đó và đánh dấu lại
Tôi muốn giới thiệu dự án ghidra-cli của mình
Tôi đã dùng Ghidra để reverse định dạng file Altium (phần Delphi), và hiệu quả rất ấn tượng
Các mô hình chưa thể tự viết một parser hoàn chỉnh từ đầu, nhưng trước thời LLM thì có lẽ tôi còn chẳng thử làm việc này
Tôi sẽ không dựa vào nó cho security audit, nhưng với reverse engineering định dạng file thì các mô hình mới nhất đã đủ hữu dụng
Ví dụ giao cho chúng tạo sơ đồ, lập bản đồ attack surface, khám phá mã nguồn, còn tôi tập trung vào phân tích thủ công
LLM thay tôi làm các việc lặp lại nhàm chán nên tốc độ nhanh hơn. Nhưng nếu giao quá nhiều thì sẽ rơi vào bẫy năng suất
Nếu dùng đúng tổ hợp agent với bộ “skill” phù hợp thì hiệu quả thực sự tăng rõ rệt
Hạn chế lớn nhất của Ghidra là phân tích ngôn ngữ Go quá chậm
Tôi đã thử GhidrAssistMCP, analyzeHeadless, PyGhidra, v.v.,
và cách tiếp cận có SKILL.md rõ ràng đặc biệt dễ tích hợp với AI agent
Điểm cốt lõi của thread này là thảo luận về phương pháp luận
Nói rằng “thêm obfuscation thì tỷ lệ thành công về 0%” là đúng, nhưng mục đích của thí nghiệm là xem AI có thể xử lý binary không bị làm rối như một kỹ sư reverse lành nghề hay không
Đây là một kịch bản có thể dùng thật, như kiểm toán nội bộ hoặc phân tích mã legacy
Điều thực sự quan trọng là xác định threat model. Nếu là mức kẻ tấn công tự động hóa thì nó đã đủ hữu ích,
nhưng nếu là kẻ tấn công cao cấp có chủ đích né tránh AI detection thì bài test này là chưa đủ
Kiểm chứng thực chất phải là xem hiệu năng ở mức làm rối nhẹ (ẩn import, mã hóa chuỗi)
Liệu có thể gọi một robot không hái được táo khi trời nhiều mây là “chuyên gia hái táo lành nghề” hay không?
GPT có tỷ lệ false positive bằng 0% nên khá ổn định, nhưng tỷ lệ phát hiện chỉ khoảng 18%
Trong khi đó Claude Opus 4.6 có tỷ lệ phát hiện cao hơn, 46%, nhưng false positive lên tới 22%
Nếu kết hợp nhiều mô hình, để một mô hình thiết kế quy trình kiểm chứng còn mô hình khác thực hiện kiểm thử exploit thực tế, có lẽ sẽ cho kết quả thú vị hơn
Nhưng từ khi mô hình sinh xuất hiện thì có vẻ mọi người quên mất
Điểm quan trọng là: “AI khó có thể làm phát hiện malware hoàn chỉnh, nhưng đã giúp developer thực hiện security audit ban đầu dễ hơn nhiều”
Ngay cả developer không có kinh nghiệm reverse engineering cũng có thể phân tích sơ bộ binary đáng ngờ
Điều này có thể mở rộng không chỉ sang security mà còn sang tối ưu hóa, gỡ lỗi, reverse phần cứng, port kiến trúc và nhiều lĩnh vực khác
Cuối cùng, điều quan trọng là xem AI như một công cụ tạo giả thuyết, chứ không phải một bộ phân tích hoàn hảo
Các file thực thi trong benchmark gồm hàng trăm đến hàng nghìn hàm, còn backdoor chỉ là vài dòng trong số đó
Vì vậy cần thăm dò có chiến lược các đường đi trọng yếu như network parser hay routine xử lý đầu vào
Một cách là cung cấp cho LLM các chiến lược đó dưới dạng file
.mdChỉ một từ ngữ tinh tế trong prompt cũng có thể thay đổi kết quả
Cuối cùng độ phức tạp của thiết kế thí nghiệm sẽ bùng nổ, và độ vững chắc của kết quả giảm đi
Nếu có thêm hướng dẫn từ chuyên gia, nó có thể tạo ra hiệu ứng khuếch đại hiệu năng mạnh mẽ
Vẫn còn rất khó để khiến AI thật sự làm theo tư duy chiến lược của con người
Link benchmark trực tiếp ở đây,
và mã nguồn mở có thể xem tại kho GitHub
Kết quả cho thấy Gemini có tỷ lệ dương tính giả cao nhất rất khớp với trải nghiệm của tôi
Tôi đã dùng cả ChatGPT, Claude và Gemini, và Gemini là bên thiên lệch tích cực nhất
Nó luôn đưa ra câu trả lời lạc quan nhất
Tôi đã tìm một benchmark thể hiện đặc tính này bằng số liệu, và kết quả lần này có thể là bằng chứng cho điều đó
Tôi không phải chuyên gia, nhưng để giảm vấn đề false positive, tôi nghĩ có thể để mô hình tự chạy backdoor để xác minh hay không
Vì vậy rất khó so sánh chéo giữa các mô hình, nên thay vào đó người ta yêu cầu mô hình chỉ rõ vị trí backdoor
Nếu tự tùy biến hoặc fine-tune mô hình thì cách bạn đề xuất có thể hữu ích
Việc mô hình tốt nhất chỉ phát hiện được khoảng 50% thật ra không tệ. Có thể còn tốt hơn con người
Nhưng tôi tò mò tại sao 50% còn lại lại bị bỏ sót
Việc Claude Opus 4.6 tìm ra backdoor rồi vẫn kết luận là “không có vấn đề” khá thú vị
Cuối cùng nó cho thấy AI khó đạt tới sự hiểu biết hoàn chỉnh nếu không có sự hỗ trợ phán đoán từ con người