Bối cảnh và vấn đề nghiên cứu

Trong kỹ thuật phần mềm hiện đại, việc đảm bảo chất lượng và an toàn thông tin là ưu tiên xuyên suốt chu kỳ phát triển cũng như vận hành hệ thống. Sự gia tăng liên tục về quy mô và độ phức tạp của các ứng dụng phần mềm kéo theo nguy cơ xuất hiện nhiều điểm yếu kỹ thuật, trở thành mục tiêu cho các cuộc tấn công có chủ đích. Khi hệ thống tồn tại lỗ hổng mà người quản lý không kịp thời phát hiện và áp dụng bản vá trước khi bị tin tặc khai thác, hậu quả có thể dẫn đến việc rò rỉ dữ liệu nhạy cảm, tấn công từ chối dịch vụ (DoS), hoặc nghiêm trọng nhất là hệ thống bị chiếm quyền kiểm soát hoàn toàn để phát tán mã độc.

Để giải quyết bài toán phát hiện sớm khiếm khuyết phần mềm, hai phương pháp tiếp cận chủ đạo được ứng dụng trong thực tế gồm:

  1. Phương pháp phân tích tĩnh: Phân tích trực tiếp cấu trúc mã nguồn hoặc mã dịch ngược của ứng dụng mà không cần thực thi chương trình. Phương pháp này đánh giá các đặc trưng mã nguồn nhằm tìm kiếm các điểm yếu bảo mật tiềm ẩn.
  2. Phương pháp phân tích động: Tự động phát hiện lỗ hổng thông qua việc theo dõi hành vi thực thi thực tế của chương trình, phân tích phản hồi và trạng thái hệ thống trước các tác động đầu vào.

Mặc dù phương pháp phân tích tĩnh mang lại hiệu quả phòng ngừa cao từ giai đoạn phát triển, các công cụ phân tích mã nguồn truyền thống hiện nay bộc lộ nhược điểm lớn khi tạo ra tỷ lệ kết quả dương tính giả (false positive) và âm tính giả (false negative) cao. Tình trạng này đòi hỏi chuyên viên an ninh phải tiêu tốn nhiều thời gian và chi phí rà soát thủ công. Xuất phát từ thực tế đó, đồ án tập trung nghiên cứu đề tài “Phát hiện lỗ hổng sử dụng phương pháp xử lý ngôn ngữ tự nhiên”.

  • Mục tiêu nghiên cứu: Nghiên cứu và đề xuất phương pháp phân tích tĩnh mã nguồn dựa trên kỹ thuật Xử lý ngôn ngữ tự nhiên (NLP) và mô hình Học sâu (Deep Learning), nhằm tự động hóa quy trình phân loại và dự đoán các lỗ hổng phần mềm.
  • Nhiệm vụ nghiên cứu:
    1. Hệ thống hóa các khái niệm, cơ chế phát sinh, tiêu chuẩn phân loại lỗ hổng phần mềm và các giải pháp phân tích mã nguồn hiện nay.
    2. Đánh giá các nghiên cứu liên quan về phát hiện lỗ hổng dựa trên luật (rule-based) và học máy/học sâu.
    3. Xây dựng quy trình tiền xử lý mã nguồn và đề xuất các mô hình phân loại: Word2vec kết hợp mạng nơ-ron hồi quy (LSTM/Bidirectional LSTM) và mô hình Transformer (BERT).
    4. Thực nghiệm, đối sánh hiệu quả giữa các kịch bản thử nghiệm để xác định mô hình tối ưu.
  • Đối tượng và phạm vi nghiên cứu:
    • Đối tượng: Lỗ hổng bảo mật phần mềm thể hiện qua các đoạn mã nguồn chương trình (ngôn ngữ C/C++, Java).
    • Phạm vi: Tiếp cận mã nguồn dưới dạng văn bản tĩnh; sử dụng tập dữ liệu mã nguồn đã được gán nhãn theo các lỗ hổng chuẩn hóa; ứng dụng kỹ thuật nhúng từ và học sâu hai chiều.

Cơ sở lý thuyết và phương pháp

Khung lý thuyết và khái niệm chuẩn hóa

Nghiên cứu tổng hợp các định nghĩa học thuật và tiêu chuẩn công nghiệp về lỗ hổng bảo mật từ các tổ chức quốc tế:

  • ISO 27005: Định nghĩa lỗ hổng là điểm yếu của một tài sản hoặc nhóm tài sản có thể bị khai thác bởi một hoặc nhiều mối đe dọa gây tổn hại đến hoạt động của tổ chức.
  • IETF RFC 2828: Lỗ hổng là điểm yếu trong thiết kế, phát triển hoặc quản lý hệ thống có thể bị khai thác để vi phạm chính sách bảo mật.
  • NIST, ENISA, ISACA: Xác định lỗ hổng là khiếm khuyết trong thủ tục kiểm soát, thiết kế hoặc triển khai nội bộ, dẫn tới các sự kiện bất ngờ ảnh hưởng đến tính an toàn, toàn vẹn và sẵn sàng của hệ thống.

Về cơ chế phát sinh, nghiên cứu phân chia lỗ hổng thành các nhóm sai sót phần mềm điển hình:

  • Vi phạm an toàn bộ nhớ (Memory Safety): Lỗi tràn bộ đệm (buffer overflow), lỗi quản lý bộ nhớ động và con trỏ, biến chưa được khởi tạo, tràn ngăn xếp (stack overflow), lỗi cấp phát (allocation failures).
  • Lỗi xác thực đầu vào (Input Validation): Không kiểm tra chặt chẽ tính hợp lệ của dữ liệu nhập.
  • Điều kiện thực hiện (Race Condition): Lỗi logic khi đầu ra phụ thuộc vào trình tự hoặc thời gian của các sự kiện không được kiểm soát.
  • Lỗi phân quyền: Phân quyền lẫn lộn (privilege confusion) và chiếm quyền thực thi (privilege escalation theo chiều dọc hoặc chiều ngang).

Về mặt tiêu chuẩn định lượng, đồ án sử dụng:

  • Hệ thống CVE (Common Vulnerabilities and Exposures): Chương trình của MITRE thiết lập từ năm 1999 nhằm định danh chuẩn hóa các lỗ hổng theo cấu trúc CVE-Năm-Số_định_danh, tích hợp cùng chuẩn SCAP.
  • Hệ thống CVSS (Common Vulnerability Scoring System): Thang điểm từ NVD phản ánh mức độ nghiêm trọng của lỗ hổng theo phiên bản 3.0: Không nghiêm trọng (0), Thấp (0.1–3.9), Trung bình (4.0–6.9), Cao (7.0–8.9), và Nghiêm trọng (9.0–10.0).
Dải điểm CVSS (CVSS Scores) Số lượng lỗ hổng ghi nhận Tỷ lệ phần trăm (%)
0 – 1 616 0.5
10 19.029 11.1

Nguồn: Tổng hợp thống kê trích từ Bảng 1.1 trong văn bản đồ án.

Phương pháp nghiên cứu và mô hình đề xuất

Đồ án tiếp cận theo phương pháp thực nghiệm khoa học, kết hợp phân tích văn bản tĩnh và học sâu:

  • Xử lý mã nguồn như văn bản: Mỗi tệp mã nguồn được xem là một chuỗi ký tự. Quy trình tiền xử lý bao gồm việc loại bỏ thành phần gây nhiễu (chú thích/comment), chuẩn hóa danh xưng (đổi tên biến và hàm đại diện), tách từ và coi các dấu cú pháp (ngoặc, dấu chấm, toán tử) là các từ con riêng biệt.
  • Biểu diễn từ vựng (Word Embedding): Sử dụng mô hình Word2vec với kiến trúc Skip-gram (dự đoán các từ ngữ cảnh dựa vào từ đích) nhằm ánh xạ các từ/từ con trong mã nguồn thành các vectơ đặc trưng trong không gian hình học nhiều chiều.
  • Mô hình chuỗi thời gian (Sequential Models):
    • LSTM (Long Short-Term Memory): Sử dụng cơ chế trạng thái tế bào (cell state) cùng 3 cổng tương tác (cổng quên - forget gate, cổng vào - input gate, cổng ra - output gate) để duy trì thông tin phụ thuộc xa.
    • Bidirectional LSTM (BiLSTM): Mở rộng cấu trúc gồm 2 mạng LSTM độc lập đọc dữ liệu tuần tự theo hai chiều xuôi (forward) và ngược (backward), giúp nắm bắt ngữ cảnh toàn diện trước và sau của vị trí mã nguồn đang xét.
  • Mô hình Transformer (BERT): Áp dụng kiến trúc bộ mã hóa hai chiều (Bidirectional Encoder Representations from Transformers) với cơ chế chú ý (Attention mechanism), tinh chỉnh từ điển và mô hình đã được đào tạo trước (pre-training / fine-tuning) cho bài toán phân loại nhãn lỗ hổng. Lớp phân loại cuối cùng sử dụng hàm Softmax để xuất ra phân phối xác suất dự đoán.

Nội dung chính theo từng chương

Chương 1. Tổng quan về lỗ hổng phần mềm

Chương này cung cấp bức tranh toàn diện về bảo mật phần mềm và các giải pháp rà soát lỗ hổng:

  • Phân loại và nguyên nhân: Phân loại lỗ hổng theo phạm vi (phần cứng, phần mềm, mạng, con người, site, tổ chức) và vòng đời phần mềm (lỗi thiết kế, lỗi thực hiện, lỗi sử dụng/vận hành). Nhóm 9 nguyên nhân cốt lõi gây phát sinh lỗi được làm rõ: sự phức tạp của hệ thống, thói quen tái sử dụng mã, số lượng kết nối lớn, quản lý mật khẩu yếu, khiếm khuyết kiến trúc hệ điều hành, duyệt web độc hại, thiếu kiểm tra đầu vào và sự thiếu sót trong việc rút kinh nghiệm từ lỗi cũ.
  • Các giải pháp giảm thiểu và kiểm tra: Trình bày mô hình Cây chỉ định mục tiêu an ninh (SGIT), Lược đồ kiểm tra lỗ hổng (VID) và Mô hình đồ thị hoạt động an ninh (SAG) nhằm trợ giúp rà soát logic bảo mật từ sớm.
  • Các phương pháp phát hiện:
    • Phân tích tĩnh: Phân tích đối chiếu mẫu (công cụ Grep); phân tích từ vựng (Flawfinder, ITS4, RATS); phân tích dựa trên cây cú pháp trừu tượng AST (công cụ Lint); phương pháp vòng loại (Jeffrey Foster, Shankar); phân tích luồng dữ liệu và phân tích dữ liệu vấy bẩn (taint analysis trong Perl).
    • Phân tích động: Kỹ thuật tiêm lỗi (fault injection), kỹ thuật kiểm thử mờ (fuzzing), và kỹ thuật theo dõi dữ liệu bẩn động (dynamic taint).
  • Phần mềm quét lỗ hổng: Kiến trúc 4 thành phần (Scan Engine, Scan Database, Report Module, User Interface); phân loại công cụ quét dựa trên mạng và dựa trên máy chủ, cùng các nhược điểm nội tại như chỉ có tính tức thời và phụ thuộc vào sự cấu hình của con người.

Chương 2. Nghiên cứu và đề xuất phương pháp

Chương 2 phân tích các nghiên cứu tiền đề và chi tiết hóa giải pháp công nghệ:

  • Tổng quan nghiên cứu liên quan:
    • Các nghiên cứu dựa trên luật: Thuật toán kiểm tra luật tối ưu trên cây AST cải thiện tốc độ so khớp hơn 28.7%; ứng dụng thuật toán Apriori phát hiện lỗ hổng logic trên ứng dụng web; mô hình MRVDAVE sử dụng đồ thị luồng điều khiển CFG và PCFG phát hiện lỗi quản lý bộ nhớ; mô hình 3 thành phần (Analysis, Rule process, Detection).
    • Các nghiên cứu học máy và học sâu: Ứng dụng mô hình trích xuất đặc trưng tự động từ mã nguồn C/C++; ứng dụng mô hình RNN của Karpathy trong việc học cú pháp mã nguồn; ứng dụng LSTM và mô hình BERT trong xử lý văn bản mã hóa.
  • Quy trình xử lý dữ liệu và kiến trúc đề xuất:
    • Tiền xử lý: Lược bỏ chú thích, chuẩn hóa tên biến, cấu trúc lại các khối lệnh C/C++ nhằm loại bỏ nhiễu cú pháp mà vẫn giữ nguyên luồng logic.
    • Mô hình Word2vec + LSTM/BiLSTM: Áp dụng Skip-gram để huấn luyện embedding từ tập dữ liệu; đưa chuỗi vector qua các tầng nhớ LSTM/BiLSTM; sử dụng lớp Softmax ở đầu ra để dự đoán xác suất nhãn lỗ hổng.
    • Mô hình BERT: Ứng dụng cấu trúc Transformer Encoder hai chiều, khai thác cơ chế Attention để học mối quan hệ giữa các token trong ngữ cảnh toàn cục, khắc phục hạn chế xử lý tuần tự của mạng hồi quy.

Chương 3. Thử nghiệm và đánh giá kết quả

Nội dung chương 3 tập trung vào khâu triển khai thực nghiệm kỹ thuật:

  • Dữ liệu thử nghiệm: Xây dựng tập dữ liệu mã nguồn mẫu gồm các tệp mã có chứa lỗ hổng bảo mật và các tệp mã an toàn đã được phân loại (Bảng 3.1: Các lỗ hổng trong bộ dữ liệu).
  • Kịch bản thử nghiệm: Thiết kế 3 kịch bản thực nghiệm riêng biệt:
    • Kịch bản 1: Đánh giá hiệu năng nhận diện lỗ hổng của mô hình sử dụng mạng hồi quy LSTM (Bảng 3.2: Các kết quả thử nghiệm của kịch bản 1).
    • Kịch bản 2: Thử nghiệm mô hình cải tiến với mạng hồi quy hai chiều Bidirectional LSTM (Bảng 3.3: Các kết quả thử nghiệm của kịch bản 2).
    • Kịch bản 3: Thực nghiệm mô hình ngôn ngữ dựa trên Transformer với kiến trúc BERT (Bảng 3.4: Các kết quả thử nghiệm của kịch bản 3).
  • Phương pháp đánh giá: So sánh các chỉ số phân loại giữa các mô hình để xác định giải pháp có độ chính xác cao nhất và giảm thiểu dương tính giả.

Chương 4. Kết luận

Chương kết luận tổng hợp lại toàn bộ các mục tiêu đã hoàn thành của đề tài:

  • Khẳng định tính hiệu quả của phương pháp tiếp cận mã nguồn như dữ liệu văn bản tự nhiên kết hợp các kỹ thuật học sâu tiên tiến.
  • Nêu rõ các phát hiện kỹ thuật, các điểm còn tồn đọng trong quá trình thử nghiệm và vạch ra định hướng nâng cấp hệ thống trong tương lai.

Kết quả và đóng góp

Nghiên cứu mang lại những kết quả và đóng góp cụ thể sau:

  • Về mặt phương pháp luận:
    • Hệ thống hóa chi tiết các phương pháp phát hiện lỗ hổng phần mềm từ truyền thống (đối chiếu chuỗi, phân tích từ vựng, phân tích AST, phân tích luồng điều khiển CFG/PCFG) đến các kỹ thuật hiện đại dựa trên học máy và xử lý ngôn ngữ tự nhiên.
    • Thiết kế quy trình tiền xử lý dữ liệu mã nguồn chuyên biệt cho mô hình học sâu, chuẩn hóa cấu trúc tệp mã thô thông qua việc lọc bỏ chú thích và chuẩn hóa định danh biến/hàm, hạn chế sự phân mảnh từ vựng.
  • Về mặt kỹ thuật và mô hình hóa:
    • Xây dựng thành công quy trình phân loại lỗ hổng bằng Word2vec (kiến trúc Skip-gram) kết hợp cùng mô hình mạng hồi quy đơn chiều (LSTM) và hai chiều (BiLSTM).
    • Ứng dụng thành công mô hình ngôn ngữ Transformer (BERT) hai chiều vào việc phân tích ngữ cảnh mã nguồn, tận dụng cơ chế Attention để ghi nhận phụ thuộc xa giữa các lệnh mà không bị giới hạn bởi cơ chế trượt tuần tự.
  • Về mặt thực nghiệm:
    • Thiết lập bộ dữ liệu mẫu đại diện cho các nhóm lỗ hổng phổ biến (ghi nhận tại Bảng 3.1).
    • Triển khai và đối sánh tường minh kết quả của 3 kịch bản thử nghiệm (Kịch bản 1 dùng LSTM, Kịch bản 2 dùng BiLSTM, Kịch bản 3 dùng BERT), cung cấp cơ sở định lượng để lựa chọn mô hình tối ưu cho các hệ thống kiểm tra mã nguồn tự động.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được ghi nhận

  • Tập dữ liệu nhúng từ Word2vec: Mô hình Word2vec trong đồ án được huấn luyện trực tiếp trên chính bộ dữ liệu thử nghiệm có quy mô giới hạn sau bước tiền xử lý, chưa được tiếp cận các kho mã nguồn mở khổng lồ, dẫn đến không gian biểu diễn từ vựng chưa thực sự phong phú.
  • Hạn chế của mô hình hồi quy (LSTM): Tốc độ tính toán của LSTM còn tương đối chậm, khả năng mở rộng xử lý phụ thuộc xa chỉ đạt mức tương đối so với kiến trúc Attention, và không thể đồng thời xem xét ngữ cảnh hai chiều nếu chỉ dùng LSTM đơn lớp.

Hướng nghiên cứu tiếp

  • Mở rộng tập dữ liệu đào tạo cho tầng biểu diễn từ vựng Word2vec bằng cách thu thập các kho mã nguồn C/C++, Java quy mô lớn nhằm tối ưu hóa trọng số embedding.
  • Thử nghiệm các kiến trúc Transformer tiên tiến hơn như XLNet (sử dụng phương pháp tự hồi quy để học ngữ cảnh hai chiều) và Transformer-XL (giải quyết triệt để vấn đề giới hạn độ dài chuỗi cố định) để xử lý các tệp mã nguồn có kích thước lớn mà không làm suy giảm hiệu năng mô hình.

Giá trị tham khảo

Đồ án là tài liệu chuyên khảo hữu ích cho:

  • Sinh viên và học viên chuyên ngành An toàn thông tin, Công nghệ thông tin: Đặc biệt là người thực hiện các đề tài nghiên cứu về kiểm thử phần mềm, an toàn mã nguồn, ứng dụng trí tuệ nhân tạo (AI/NLP) trong an ninh mạng.
  • Kỹ sư phát triển phần mềm và chuyên viên bảo mật (SecOps): Tham khảo quy trình tiền xử lý làm sạch mã nguồn (Chương 2) và cơ chế phân loại lỗ hổng để xây dựng các công cụ quét mã nguồn tĩnh (SAST) tự động tại doanh nghiệp.
  • Nội dung đáng chú ý: Toàn bộ phần tổng quan các kỹ thuật phân tích tĩnh (từ vựng, AST, CFG, taint analysis) tại Chương 1 và cấu trúc so sánh các mô hình học sâu (LSTM vs. BiLSTM vs. BERT) tại Chương 2 và Chương 3.

Câu hỏi thường gặp

1. Tại sao đồ án lại lựa chọn phương pháp phân tích văn bản (NLP) thay vì các phương pháp phân tích tĩnh truyền thống như AST hay đối chiếu mẫu?

Các phương pháp truyền thống như đối chiếu mẫu (dùng lệnh Grep) hoặc phân tích từ vựng đơn thuần (Flawfinder, ITS4) thường tạo ra tỷ lệ dương tính giả và âm tính giả rất lớn do không hiểu được ngữ nghĩa và bối cảnh sử dụng biến/hàm. Phân tích cây AST đòi hỏi thuật toán so khớp phức tạp, duyệt cây tốn thời gian. Tiếp cận mã nguồn dưới dạng văn bản và áp dụng NLP kết hợp học sâu cho phép mô hình tự động học trực tiếp các đặc trưng cú pháp và ngữ nghĩa từ dữ liệu mà không cần định nghĩa tập luật thủ công.

2. Sự khác biệt cơ bản giữa việc ứng dụng mô hình LSTM tiêu chuẩn và Bidirectional LSTM (BiLSTM) trong bài toán này là gì?

Mô hình LSTM tiêu chuẩn chỉ đọc chuỗi mã theo một chiều duy nhất từ trái sang phải, do đó chỉ dự đoán nhãn dựa vào các token xuất hiện phía trước. Trong khi đó, việc đánh giá tính an toàn của một dòng mã nguồn thường phụ thuộc vào cả ngữ cảnh trước đó (khai báo, cấp phát) và các câu lệnh thực thi phía sau (sử dụng, giải phóng bộ nhớ). BiLSTM khắc phục nhược điểm này bằng cách kết hợp đồng thời hai mạng LSTM độc lập (forward và backward), giúp nắm bắt đầy đủ ngữ cảnh hai chiều của đoạn mã.

3. Quy trình tiền xử lý mã nguồn thô trong đồ án được thực hiện qua các bước nào?

Quy trình tiền xử lý bao gồm:

  1. Gán nhãn cho các tệp mã nguồn (chứa lỗ hổng hoặc an toàn).
  2. Loại bỏ các thành phần gây nhiễu như các đoạn ghi chú/chú thích (comments).
  3. Chuẩn hóa tên hàm và tên biến để tạo cấu trúc mã nhất quán, tránh việc mô hình ghi nhớ các định danh đặc thù.
  4. Tách mã thành chuỗi các từ và từ con (tokenization), trong đó các ký tự cú pháp và toán tử logic ({, }, (, ), ;, +, -, *, /) được xử lý như các từ riêng biệt.

4. Hệ thống phân loại điểm CVSS phiên bản 3.0 được phân chia theo các mức độ nào trong đồ án?

Theo tài liệu đồ án, mức độ nghiêm trọng của lỗ hổng theo điểm CVSS v3.0 được chia thành 5 cấp độ:

  • Không nghiêm trọng: 0 điểm.
  • Thấp: từ 0.1 đến 3.9 điểm.
  • Trung bình: từ 4.0 đến 6.9 điểm.
  • Cao: từ 7.0 đến 8.9 điểm.
  • Nghiêm trọng: từ 9.0 đến 10.0 điểm.

5. Mô hình BERT được cấu hình và sử dụng như thế nào để phân loại lỗ hổng phần mềm?

Đồ án sử dụng phần bộ mã hóa (Encoder) của mô hình Transformer trong kiến trúc BERT. Bộ từ điển tiếng Anh gốc được tinh chỉnh để tương thích với các từ khóa và ký hiệu cú pháp lập trình. Khác với các mô hình hồi quy duyệt tuần tự, cơ chế Attention của BERT cho phép đọc toàn bộ chuỗi token trong một lần xử lý theo cả hai chiều không gian, qua đó nắm bắt chính xác mối tương quan ngữ cảnh phức tạp của các đoạn mã. Đầu ra của BERT được kết nối với hàm Softmax để tính toán phân phối xác suất cho từng lớp lỗ hổng cần dự đoán.


Kết luận

Đồ án tốt nghiệp của tác giả Phạm Ngọc Quân đã giải quyết bài toán phát hiện lỗ hổng phần mềm bằng cách tiếp cận mã nguồn dưới góc độ ngôn ngữ tự nhiên kết hợp các mô hình học sâu hiện đại. Nghiên cứu đã hệ thống hóa đầy đủ cơ sở lý luận về lỗ hổng bảo mật, thiết lập quy trình tiền xử lý mã nguồn bài bản, đồng thời thiết kế và thử nghiệm đối sánh các kiến trúc Word2vec + LSTM/BiLSTM với mô hình Transformer (BERT). Kết quả đạt được cung cấp nền tảng học thuật và định hướng thực nghiệm rõ ràng cho việc phát triển các công cụ rà soát an toàn mã nguồn tự động trong kỹ thuật phần mềm.