Gần đây, mình đang tìm hiểu về các ứng dụng của AI trong lĩnh vực an toàn bảo mật. Điều này khiến mình có suy nghĩ: “Cuộc đời mình có lẽ giống như một bộ phim vậy, cụ thể là phim UpStream”

Quay trở lại nội dung chính của bài blog này, có hai ứng dụng của AI trong lĩnh vực An Toàn Bảo Mật mà mình đang thấy rất thú vị:

  • Ứng dụng AI để tự động review source code, phát hiện các lỗ hổng bảo mật.
  • Sử dụng AI để tự động tấn công các trang web (LLM Agents can Autonomously Hack Websites).

Khi nhắc đến AI, nhiều người sẽ nghĩ ngay đến ChatGPT. Khác với các hệ thống chỉ phân tích và nhận diện mẫu từ dữ liệu có sẵn, ChatGPT có khả năng tạo ra nội dung mới dựa trên những gì nó đã học. Điều này khiến ChatGPT trở thành một ví dụ điển hình của Generative AI – Trí tuệ nhân tạo Tạo sinh (khái niệm này sẽ được đề cập nhiều lần trong bài viết, vì vậy hãy ghi nhớ nhé).

Để hiểu rõ hơn về cách hoạt động của Generative AI và sự khác biệt của nó so với các mô hình AI truyền thống, hãy xem hình minh họa dưới đây.

Hiểu đơn giản, Generative AI tập trung vào khả năng tạo nội dung mới dựa trên các mẫu dữ liệu đã học, với kiến trúc chính dựa trên các mô hình mạng neural như Transformer, GAN, VAE và Diffusion models. Trong đó, ChatGPT là một ứng dụng cụ thể của Generative AI, được xây dựng dựa trên kiến trúc Transformer, nổi bật là mô hình GPT (Generative Pre-trained Transformer). Mô hình này được huấn luyện trên một lượng dữ liệu khổng lồ nhằm hiểu và tạo ra văn bản giống con người.

Bài toán 1

💡

Ứng dụng AI để tự động review source code, phát hiện các lỗ hổng bảo mật

Bắt kịp xu hướng công nghệ hiện nay, việc ứng dụng AI vào quy trình đánh giá mã nguồn (code review) mang lại nhiều lợi ích, bao gồm tăng tốc độ phân tích, nâng cao độ chính xác, giảm thiểu sai sót của con người và phát hiện lỗ hổng bảo mật một cách hiệu quả. Đây được xem là xu hướng tất yếu trong lĩnh vực bảo mật phần mềm.

Trong quá trình tìm hiểu, mình đã khám phá một số công cụ được giới thiệu là có tích hợp AI trong việc đánh giá mã nguồn

MagickPen Security Code Scanner

💡

MagickPen Security Code Scanner là một công cụ trực tuyến sử dụng trí tuệ nhân tạo (AI) để phân tích bảo mật mã nguồn, giúp xác định các lỗ hổng và cải thiện tính an toàn của ứng dụng.

MagickPen Security Code Scanner mang đến một giao diện trực quan và thân thiện, giúp người dùng dễ dàng sử dụng AI để quét mã nguồn tìm lỗ hổng bảo mật. Công cụ này sử dụng GPT-4 và cung cấp 20 credits miễn phí, đồng thời tích hợp Framework R.O.D.E.S, cho phép người dùng chọn sẵn vai trò (Developer), giọng điệu (Neutral, Formal, v.v.), và độ dài văn bản (Short, Medium, Long) mà không cần tinh chỉnh prompt thủ công. Những cải tiến này giúp đơn giản hóa quy trình, đặc biệt hữu ích cho những ai không chuyên về prompt engineering.

Mặc dù MagickPen Security Code Scanner nhìn khá là tiện ích, nhưng công cụ này cũng có một số hạn chế đáng kể.

 

Thứ nhất, khi phân tích mã nguồn, AI chủ yếu phát hiện các lỗi theo mô típ sách giáo khoa, tức là những lỗ hổng phổ biến và đơn giản. Nếu lỗ hổng có mức độ phức tạp cao hơn, AI thường không xác định chính xác nguyên nhân gốc rễ của vấn đề.

Ví dụ, xét đoạn code dưới đây:

Đoạn code này có thể dẫn đến lỗ hổng Path Traversal. Nếu kẻ tấn công truyền vào fileName một đường dẫn tuyệt đối, chẳng hạn "C:/https/wwwroot/attacker.png", thì Path.Combine(uploadPath, fileName) sẽ trả về chính giá trị của fileName, cho phép kẻ tấn công ghi file vào bất kỳ vị trí nào trong hệ thống.

Hình dưới đây là kết quả mà công cụ trả về sau khi phân tích đoạn code chứa lỗ hổng. Không thể phủ nhận rằng các khuyến nghị sửa lỗi mà nó đưa ra rất chính xác. Tuy nhiên, công cụ hoàn toàn không xác định được root cause của lỗ hổng, điều này làm giảm giá trị của việc phân tích.

Thứ hai, do giới hạn token của model, người dùng chỉ có thể dán từng đoạn code nhỏ thay vì tải lên toàn bộ codebase để đánh giá tổng thể. Điều này dẫn đến việc công cụ không thể xem xét ngữ cảnh rộng hơn và có nguy cơ bỏ sót các mối liên kết quan trọng giữa các thành phần trong hệ thống.

Theo quan điểm của mình, đây vẫn là một điểm trừ đáng kể, đặc biệt khi phân tích các lỗ hổng bảo mật phức tạp yêu cầu đánh giá toàn diện trên nhiều file, lớp (class) hoặc module trong một ứng dụng lớn.

Tuy nhiên, nếu được huấn luyện trên dữ liệu chính xác, AI hoàn toàn có thể xác định lỗ hổng trong source code. Mình đã thử triển khai một kiến trúc Retrieval-Augmented Generation (RAG) chạy cục bộ, và kết quả khá tích cực. Công cụ có thể phát hiện lỗ hổng trong đoạn code UploadFile sau khi được mình “tận tình chỉ dạy”, nhưng để áp dụng vào thực tế, vẫn cần một bộ dữ liệu chất lượng cao để huấn luyện.

DeepCode AI (Snyk)

💡

DeepCode AI sử dụng nhiều mô hình fine-tuned AI cùng với dữ liệu bảo mật chuyên biệt.

DeepCode AI, hiện được tích hợp trong nền tảng Snyk, sử dụng một mô hình AI hybird kết hợp giữa AI biểu tượng (symbolic AI)AI tạo sinh (generative AI), cùng với các phương pháp học máy (machine learning). Sự kết hợp này giúp tăng cường độ chính xác trong việc phân tích mã nguồn và phát hiện lỗ hổng bảo mật

Symbolic AI là phương pháp AI dựa trên logic, quy tắc và ký hiệu để biểu diễn tri thức và suy luận. Nó sử dụng luật IF-THEN, đồ thị tri thức, và logic hình thức (như Prolog) để mô hình hóa các vấn đề

Mô hình hoạt động

1️⃣Phân tích cú pháp (Parsing)

  • Chuyển đổi mã nguồn thành cây cú pháp trừu tượng (AST – Abstract Syntax Tree) để trích xuất cấu trúc logic của chương trình.
  • Biểu diễn mã dưới dạng đồ thị luồng dữ liệu (data flow graph) để xác định cách dữ liệu di chuyển qua chương trình.

2️⃣ Phân tích tĩnh (Static Analysis)

  • Sử dụng Symbolic AIrule-based analysis để quét mã nguồn và phát hiện lỗ hổng.
  • Áp dụng phân tích luồng dữ liệu (data flow analysis) để theo dõi cách dữ liệu di chuyển từ source → sink nhằm phát hiện các lỗ hổng bảo mật.
  • Machine Learning (AutoLearn ML) giúp nhận diện các mẫu lỗi tiềm ẩn chưa có trong tập quy tắc cố định, mở rộng phạm vi phát hiện lỗ hổng.

3️⃣ Đề xuất sửa lỗi (Fix Recommendation)

  • Khi phát hiện mã nguồn có lỗi, Generative AI (AutoFix LLM) được sử dụng để đề xuất cách sửa lỗi phù hợp với ngữ cảnh mã nguồn.
  • Các bản sửa lỗi được tinh chỉnh dựa trên dữ liệu huấn luyện và bối cảnh cụ thể của ứng dụng.
  • Nhà phát triển có thể xem xét và chọn áp dụng bản sửa lỗi phù hợ

Mô hình này khá hợp lý trong bối cảnh chuyển đổi, khi kết hợp Symbolic AIRule-based để nhận diện lỗ hổng, giúp giảm thiểu false positives cũng như chia nhỏ các đoạn code chứa lỗi để Generative AI xử lý hiệu quả hơn.

Không thể phủ nhận rằng, với những project chứa lỗ hổng theo dạng SGK, Snyk hoạt động khá hiệu quả. Trong một project Spring Boot, công cụ đã xác định chính xác sinksource của lỗ hổng SpEL Injection. Tuy nhiên, khi kiểm tra các lỗ hổng liên quan đến Business Logic, Snyk vẫn chưa thể phát hiện được.

Tiếp tục thử nghiệm Snyk với một project khác – cụ thể hơn, đây là một case study từng được đăng trên blog của VNPT (Bạn có thể xem phân tích chi tiết lỗ hổng tại Link). Hơi thất vọng khi mà Snyk không thể xác định được lỗ hổng trong source code này.

Nhìn chung, Snyk là một công cụ mạnh mẽ trong phân tích tĩnh (SAST), đặc biệt hiệu quả trong việc phát hiện các lỗ hổng phổ biến dựa trên mẫu có sẵn. Khi được sử dụng đúng cách, công cụ này không chỉ giúp phát hiện lỗ hổng bảo mật mà còn đưa ra các khuyến nghị khắc phục hữu ích. Tuy nhiên, để đạt độ chính xác cao nhất, vẫn cần kết hợp với các phương pháp kiểm tra thủ công.

 

Bài toán 2

💡

Ứng dụng AI để tự động tấn công các trang web

Ở đây, mình có tham khảo tài liệu “LLM Agents can Autonomously Hack Websites”.

LLM Agent được đề cập trong tài liệu là một hệ thống sử dụng mô hình ngôn ngữ lớn (LLM) để phân tích, lập kế hoạch và thực hiện các cuộc tấn công thử nghiệm nhằm đánh giá bảo mật hệ thống. Mô hình này kết hợp AI với các công cụ hacking, tài liệu chuyên môn và dữ liệu lịch sử để tự động phát hiện lỗ hổng, chẳng hạn như SQL Injection. LLM Agent có thể gửi payloads tấn công, thu thập phản hồi từ hệ thống mục tiêu, phân tích dữ liệu và đưa ra báo cáo chi tiết, giúp tối ưu hóa quy trình kiểm tra bảo mật và hỗ trợ nghiên cứu an ninh mạng.

Quy trình hoạt động của một LLM Agent được diễn tả như sau:

 

Về cách setup, bạn có thể tham khảo tại Link (Bài viết này sử dụng API của GPT-4). Mình đã dựng lại demo này với API của Anthropic để so sánh, nhưng sẽ không đi sâu vào phần này.

Target mình sử dụng là testphp.vulnweb.comđây là một trang web do Acunetix cung cấp để phục vụ mục đích kiểm thử bảo mật.

Với cùng một user prompt, AI có thể cho kết quả không ổn định. Đôi khi, nó tự động mở trình duyệt, truy cập URL mục tiêu và thử nghiệm payload, nhưng cũng có lúc chỉ phân tích lý thuyết mà không thực hiện kiểm tra thực tế, hoặc thậm chí đưa ra nhận định không chính xác.

Nguyên nhân chủ yếu xuất phát từ cách hoạt động của Generative AI, vốn tập trung vào việc tạo nội dung mới dựa trên dữ liệu đã học, dẫn đến tính ngẫu nhiên trong phản hồi. Ngoài ra, giới hạn về token cũng có thể khiến AI bỏ sót hoặc hiểu sai ngữ cảnh, dẫn đến sự không nhất quán trong kết quả.

Trường hợp xác định đúng lỗ hổng

Trường hợp xác định sai lỗ hổng – hallucination

Mặc dù bài viết LLM Agents can Autonomously Hack Websites đưa ra một luận điểm khá thú vị, nhưng môi trường thử nghiệm được sử dụng trong nghiên cứu là môi trường lab, nơi các trang web có cấu trúc đơn giản và lỗ hổng dễ khai thác. Điều này không phản ánh chính xác hiệu quả của LLM Agent khi áp dụng vào thực tế, bởi các trang web ngoài đời thực thường có quy mô lớn hơn, nhiều chức năng phức tạp hơn và đi kèm với các biện pháp bảo mật tiên tiến. Khi lượng phản hồi từ máy chủ tăng lên đáng kể, mô hình AI có thể gặp khó khăn trong việc xử lý và phân tích dữ liệu.

 

Kết luận

Với công nghệ hiện tại, Generative AI vẫn chưa thể được sử dụng hiệu quả trong việc review source codetự động khai thác lỗ hổng bảo mật do còn nhiều hạn chế. Ngoài vấn đề hallucination (ảo thông tin), các mô hình này còn bị giới hạn bởi token (độ dài ngữ cảnh), khiến chúng gặp khó khăn khi phân tích các lỗ hổng bảo mật phức tạp trải dài qua nhiều tệp, lớp (class) hoặc phương thức (method). Trong các hệ thống lớn, lỗ hổng có thể xuất phát từ sự kết hợp của nhiều thành phần khác nhau, đòi hỏi khả năng hiểu sâu về logic nghiệp vụ và luồng dữ liệu – điều mà AI hiện tại vẫn chưa làm tốt.

Bên cạnh những thách thức kỹ thuật, AI còn tiềm ẩn rủi ro an ninh như model poisoning, prompt injection, hay thậm chí bị kẻ tấn công lợi dụng. Quan trọng hơn, trong lĩnh vực An toàn Thông tin (ATTT), nguyên tắc Zero Trust luôn là yếu tố cốt lõi. Việc sử dụng phần mềm, API, hay mô hình AI của bên thứ ba đều có thể dẫn đến nguy cơ rò rỉ dữ liệu, đặc biệt là lộ lọt source code – một trong những rủi ro nghiêm trọng nhất đối với bảo mật doanh nghiệp.

Tuy nhiên, với sự phát triển nhanh chóng của AI, mình tin rằng khả năng tự động hóa trong phát hiện và khai thác lỗ hổng có thể sẽ được cải thiện đáng kể trong tương lai. Dù vậy, các mô hình này cần được kiểm chứng trên môi trường thực tế, đảm bảo hiệu quả và khả năng vượt qua các cơ chế phòng thủ tiên tiến, trước khi có thể ứng dụng rộng rãi trong bảo mật phần mềm.

 

Tham khảo

Exploring the advanced technologies behind Snyk Code | Snyk

Quick and Dirty: Building a Private RAG Conversational Agent with LM Studio, Chroma DB, and LangChain | by Ghulam Rasool | Medium

Root Cause

LLM Agents can Autonomously Hack Websites

 

34 lượt xem