Nhiều công trình nghiên cứu được triển khai để cung cấp một phương phápphát hiện lỗ hong bảo mật một cách tự động, trong đó có ứng dụng mô hình học sâu Deep Learning.. Theo khảo sát của
Trang 1ĐẠI HỌC QUỐC GIA HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG
CHAU THUẬN PHAT - 19520827
VŨ LE ANH QUAN - 19520233
A STUDY ON DEEP LEARNING APPROACH FOR SOFTWARE
VULNERABILITY DETECTION
KY SU NGANH AN TOAN THONG TIN
GIANG VIEN HUGNG DAN:
ThS Phan Thé Duy
ThS Nguyễn Văn Kiệt
TP.Hồ Chí Minh - 2023
Trang 2LỜI CẢM ƠN
Trong quá trình nghiên cứu và hoàn thành khóa luận, nhóm đã nhận được sự
định hướng, giúp đỡ, các ý kiến đóng góp quý báu và những lời động viên của
các giáo viên hướng dẫn và giáo viên bộ môn Nhóm xin bày tỏ lời cảm ơn tới
thầy Phan Thế Duy, thầy Nguyễn Văn Kiệt đã tận tình trực tiếp hướng dẫn,
giúp đỡ trong quá trình nghiên cứu.
Nhóm xin gửi lời cảm ơn đến gia đình và bạn bè đã động viên, đóng góp ý
kiến trong quá trình làm khóa luận.
Nhóm cũng chân thành cảm ơn các quý thầy cô trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM, đặc biệt là các thầy cô khoa Mang máy tính và Truyền thông, các thầy cô thuộc bộ môn An toàn Thông tin đã giúp đỡ nhóm.
Châu Thuận Phát Vũ Lê Anh Quân
Trang 3CHUGNG 1 TONG QUAN DE TAI 2
11 Giới thiệu van đỀ ee 2
1.2 Giới thiệu những nghiên cứu liên quan 3
121 Mô hình họcsâu ẶẶẶẶ 3
1.2.2 Sơ đồ Program Dependence Graph (PDG) va Control Flow
Graph (CFG) 6 eee 4
1.2.3 Kithuật Program Slicing 5
1.2.4 Trích xuất các mẫu từ mã nguồn để làm dữ liệu huấn luyện 6
1.3 Những thách thức ee ee 6
1.4 Cấu trúc khóa luận tốt nghiệp 8
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 9
2.1 Lỗ hổng phần mềm SSS 9
21.1 Khái nệm Q2 9 2.1.2 Thực trạng hiện nay 2 00.00- 9
Trang 42.3 Mô hình học sâu 000000 2 ee ee 13
2.3.1 Mô hình RNN (Recurrent Neural Network) 13
2.3.2 Mô hình LSTM (Long short-term memory) 15
2.3.3 Mô hình BiLSTM (Bi-directional long short-term memory) 17 2.3.4 Mô hình GRU (Gated Recurrent Unit) và BiGRU (Bidi-rectional Gated Recurrent Unit) 18
2.3.5 Mô hình Transformer 0 21
2.3.6 Mohinh BERT 22
2.3.7 Mô hình CodeBERT 23
2.3.8 Mô hình GNN (Graph Neural Network) 24
2.3.9 Mô hình GCN (Graph Convolutional Network) 26
2.4 Các công trình nghiên cứu liên quan 28
2.4.1 Hướng 1 - Tu động hóa việc học các biểu diễn ngữ nghĩa của chương trình để dự đoán lỗ hổng 28
2.4.2 Hướng 2 - Dự đoán end-to-end lỗ hổng tràn bộ đệm từ mã nguồn thô thông qua mạng nơron 29
2.4.3 Hướng 3- Trích xuất từ mã nguồn các mẫu (code pattern) chứa lỗ hong để huấn luyện mô hình 30
2.4.4 Hướng 4- Giải pháp phát hiện 16 hổng cho mã nhị phân 31 CHƯƠNG 3 PHƯƠNG PHÁP PHÁT HIỆN LỖ HỒNG BẰNG HỌC SÂU 33 3.1 Ý tưởng chính cv 33 3.2 Phương pháp trích xuất các SeVC (Semantics-based Vulnerability Candidate) từ mã nguồn 2 0 0000000000 ee 36 3.2.1 Các định nghĩa cơ bản ee 37 3.2.2 Trích xuất SyVC từ mã nguồn 37
3.23 Chuyển đổi SyVC thành Se€VC 39
3.2.4 Gắn nhãn cho SeVC 2 ee 44 3.3 Token hóa các SeVC và nhúng vào các vectlor 45
Trang 53.4 Huấn luyện mô hình hoc sâu 47
CHƯƠNG 4 THÍ NGHIỆM VÀ ĐÁNH GIÁ 51
4.1 Thiết lập thínghiệm 0.00.00 eee eee 51
4.2 Bộ dữ liệu và phương pháp trích xuất 51
4.21 Bộ dữ 4.2.2 Bộ dữ 4.3 Xây dựng mô
4.4 Xây dựng mô
lệu SySeVR cv 52 lệu Vuldeepecke 54 tình nhúng vector Ặ 56
nình học sâu để phát hiện và phân loại mã nguồn chứa lỗ hong c2 Sa 57
441 Mô hình GCN 000.000.0005 58 4.4.2 Mô hình RNN, LSTM, BLSTM, GRU, BGRU_ 59
TÀI LIỆU THAM KHẢO 73
Trang 6DANH MỤC CÁC KÝ HIỆU, CÁC CHU VIET TAT
AST Cây cú phap trừu tượng
PDG Program Dependence Graph
CFG Control Flow Graph
CVE Common Vulnerabilities and Exposures
NVD_ National Vulnerability Database
SyVC Syntax-based Vulnerability Candidate SeVC Semantics-based Vulnerability Candidate
fs Forward Slice
bs Backward Slice fs’ Forward Slice lién thu tuc bs’ Backward Slice lién thu tuc
ps Program Slice
Trang 7DANH MỤC CÁC HINH VE
Hình 11 Ví dụ về Control Flow Graph 5
Hình 1.2 Ví dụ về Program Dependence Graph - 6
Hình 1.3 Ví dụ về Program Slicing 7
Hình 2.1 Cay cấu trúc trừu tượng dựa trên thuật toán Euclid 12
Hình 2.2 Cấu trúc trải phẳng của mang nơ-ron truy hồi 13
Hình 23 Cau trúc của mô hình LSTM 15
Hình 2.4 Hình ảnh mô tả một cổng của mô-đun 17
Hình 25 Hình ảnh mô tả mô hình BLSETM 18
Hình 26 Cấu trúc về một mô-đun của GRU 19
Hình 2.7 Kiến trúc của mô hình Transformer 21
Hình 2.8 Mô hình huấn luyện BEBRT 23
Hình 29 Mô hình huấn luyện CodeBERT 24
Hình 2.10 Mô hinhGNN 2 2 2 so 25 Hình 2.11 Minh họa cách biểu diễn nút của GCN 27
Hình 3.1 Kiến trúc phương pháp đề xuất XGraphVulBERT phát hiện lỗ hổng bằng phương pháp học sâu 35
Hình 3.2 So đồ trích xuất các đặc điểm cú pháp và ngttnghia 36
Hình 3.3 Trích xuất SyVC từ chương trình 38
Hình 3.4 Tạo sơ đồ PDG cho SyVC 'data`” 42
Hình 3.5 Tạo program slice cho SyVC 'data` 43
Hình 3.6 Chuyển đổi program slice thành SeVC 43 Hình 3.7 Các bước sử dung mô hình đề xuất GCN để huấn luyện va
dự đoán kết qua 2 Q Q Q Q TQ Q 48
Trang 8Hình 4.1 Biểu đồ phan bố ty lệ gán nhãn cho bộ dữ liệu SeVC_ 5ã
Hình 4.2 Biểu đồ phân bố tỷ lệ gán nhãn cho bộ dữ liệu Vuldeepecker 57
Hình 43 Biểu đồ so sánh kết quả đánh giá các phương pháp nhúng
vector trên bộ dữ liệu Vuldeepecker [l4] - 62
Hình 44 Biểu đồ so sánh các chỉ số đánh giá của các mô hình học
sâu huấn luyên sử dụng phương pháp nhúng CodeBERT trên tap
dữ liệu Vuldeepecker [l4] ẶẶ So 64
Hình 4.5 Biểu đồ so sánh kết quả đánh giá các phương pháp nhúng
vector trên bộ dữ liệu SySeVR [l5] 65
Hình 46 Biểu đồ so sánh các chỉ số đánh giá của các mô hình học
sâu huấn luyên sử dụng phương pháp nhúng CodeBERT trên tập
dữ liệu 5y5eVRAD⁄27 416 Ses G7
Trang 9DANH MUC CAC BANG BIEU
Bang 2.1 Bảng thống kê các bai báo theo hướng l 29
Bang 2.2 Bảng thống kê các bài báo theo hướng 2_ 30
Bảng 2.3 Bảng thống kê các bài báo theo hướng 3_ 31
Bảng 2.4 Bảng thống kê các bài báo theo hướng 4 32
Bang 4.1 Bảng thống kê số lượng SeVC sau khi được gán nhãn 54
Bảng 4.2 Bảng thống kê số lượng code gadget sau khi được gán nhãn 56 Bảng 4.3 Bảng so sánh kết quả đánh giá các phương pháp nhúng vector trên bộ dữ liệu Vuldeepecker [H4] 61
Bang 4.4 Bảng so sánh kết quả đánh giá các mô hình sử dụng phương pháp nhúng CodeBERT trên bộ dữ liệu Vuldeepecker [14| 63
Bảng 4.5 Bảng so sánh kết quả đánh giá các phương pháp nhúng vector trên bộ dữ liệu SySeVR[l5|} 64
Bảng 4.6 Bảng kết quả đánh giá phân loại mã nguồn chứa lỗ hong dựa trên bộ dữ liệu SySeVR [ö] 66
Trang 10TÓM TẮT ĐỀ TÀI
Trong thời gian gần đây, việc phát hiện các lỗ hổng bảo mật trong ứng dụngthu hút được nhiều sự quan tâm vì sự nguy hiểm của các lỗ hồng Tác động của
chúng gây ảnh hưởng không nhỏ đến việc bảo mật và đảm bảo an toàn thông
tin Nhiều công trình nghiên cứu được triển khai để cung cấp một phương phápphát hiện lỗ hong bảo mật một cách tự động, trong đó có ứng dụng mô hình
học sâu (Deep Learning) Deep Learning là một bộ phận của Machine Learning
và có tác dụng hỗ trợ cho máy tính tự huấn luyện để có thể thực hiện mọi tác
vụ tương tự như con người Đối với công việc yêu cầu cao về độ chính xác như
phát hiện lỗ hồng thì Deep Learning rất phù hợp do khả năng xử lí các dữ liệu
về ngôn ngữ rất tốt và có độ chính xác cao Các nghiên cứu vẫn đang được phát
triển để phát hiện được nhiều loại lỗ hổng ở nhiều ngôn ngữ khác nhau
Sau khi nghiên cứu, nhóm chúng tôi nhận thấy đây là một trong những đề tài
có tiềm năng và có tính ứng dụng thực tế Do đó, chúng tôi mong muốn cung
cấp phương pháp phát hiển 16 hong bảo mật tối ưu và có độ chính xác cao thông
qua những kết quả thực nghiệm mà chúng tôi đã thực hiện.
Trang 11CHƯƠNG 1 TONG QUAN DE TÀI
Chương này giới thiệu về van đề và các nghiên cứu liên quan Đồng thời,
trong chương này chúng tôi cũng trình bày phạm vi và cấu trúc của Đồ án.
1.1 Giới thiệu vẫn đề
Trong những năm gần đây, với sự phát triển không ngừng của công nghệ,
ngày càng có nhiều phần mềm được phát triển bởi con người Trong khi mọi người tận hưởng sự tiện lợi do phần mềm mang lại, họ cũng bị đe dọa bởi các
lỗ hong phần mềm Có thể nói, lỗ hong phần mềm là một trong những vấn đề
lớn nhất đe dọa đến hoạt động bình thường của phần mềm Đối với người dùng
phần mềm, thiệt hại kinh tế trực tiếp và gián tiếp do lỗ hong phần mềm trên
toàn thế giới gây ra đã vượt quá hàng chục tỷ đô la.
Thật vậy, một thực tế không thể chối cãi là hầu hết các phần mềm đều có
nhiều 16 hổng khác nhau Có nhiều loại lỗ hong phần mềm, chang hạn nhưCVE-2015-8558 [21], được giải thích chỉ tiết trên CVE [4] Lỗ hong tồn tại cànglâu thì càng dễ bị tin tặc khai thác và thiệt hại cho công ty, tổ chức càng lớn[26] nên khả năng tự động phát hiện lỗ hồng trong phần mềm trong một khoảng
thời gian nhất định đã trở thành một trong những những nghiên cứu tiên tiến
nhất hiện nay.
Trong khi đó, công nghệ học sâu cho chúng ta khả năng tự động phát hiện
các lỗ hổng chính xác hơn Với sự cải cách và phát triển liên tục của công nghệ
học sâu trong những năm gần đây, đã có những tiến bộ vượt bậc trong lĩnh vực
xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) Đặc biệt, hàng
loạt mô hình như GPT [22] và BERT [7] đã đưa công nghệ NLP tiến một bước
dài Mã nguồn thực chất là một văn bản ở định dạng đặc biệt Việc sử dụng
Trang 12công nghệ NLP để xử lý mã là khả thi về mặt logic Trên thực tế, các mô hình
như CodeBERT [8] đã được đề xuất bởi một số hoc giả và một số nhiệm vụ ở mức code-level đã được giải quyết và đã đạt được một số kết quả nhất định.
Những kết quả này cho thấy việc sử dụng công nghệ NLP để nghiên cứu côngnghệ phát hiện lỗ hồng tự động có rất nhiều tiềm năng để phát triển
Tuy nhiên, có rất nhiều hướng nghiên cứu sử dụng học sâu để phát hiện lỗ
hồng bảo mật Theo khảo sát của Peng Zeng, Guanjun Lin và các cộng sự [33],
có 4 hướng nghiên cứu chính: Đầu tiên là sử dụng mô hình học sâu để học các
biểu diễn ngữ nghĩa của chương trình của Wang [30], thứ hai là giải pháp có thểphát hiện 16 hồng Buffer Overflow end-to-end của Choi [3], thứ ba là trích xuất
từ mã nguồn các mẫu (code pattern) chứa lỗ hồng để huấn luyện mô hình của
Li [14], thứ tư là giải pháp phát hiện lỗ hong cho mã nhị phân của Linu [19]
Các hướng nghiên cứu nêu trên đều có ưu điểm và nhược điểm riêng Từ
những kết quả nghiên cứu, nhóm nhận thấy hướng nghiên cứu trích xuất các
mẫu chứa lỗ hồng để làm bộ dữ liệu huấn luyện đạt được kết quả rất khả quan,
có hiệu quả tương đối tốt và eó khả năng phát triển thêm trong tương lai Tiêubiểu cho hướng nghiên cứu này ngoài bài báo về VulDeePecker của Li [14], còn
có SySeVR của Li [15], VulDeBERT của Kim [1]], Do đó, nhóm muốn đề xuất một mô hình nghiên cứu sử dụng một mô hình pre-train là CodeBERT để thực
hiện nhúng các vector, sau đó đưa các vector vào các mô hình cơ bản như LSTM,
BiLSTM và đánh giá kết quả mô hình của nhóm với các bài báo trước đó.
1.2 Giới thiệu những nghiên cứu liên quan
1.2.1 Mô hành học sâu
Deep Learning, hay học sâu, là một lĩnh vực con của Machine Learning, nơi
mà các máy tính có khả năng tự học và cải thiện bản thân thông qua việc ấp
dụng các thuật toán Deep Learning đã đạt được những thành tựu đáng kể trong
nhiều lĩnh vực như nhận dạng hình ảnh, nhận dạng giọng nói, dịch máy, và thậm
Trang 13chí chơi game.
Deep Learning được xây dựng dựa trên các khái niệm phức tạp hơn nhiều
so với Machine Learning và chủ yếu hoạt động bằng cách sử dụng mạng nơ-ron
nhân tạo được thiết kế để xử lý thông tin theo cách tương tự như hệ thốngnơ-ron trong não người Các mạng nơ-ron này bao gồm nhiều lớp an (hiddenlayers) để xử lý dữ liệu phức tap Các lớp an này giúp mạng nơ-ron hoc đượccác mức độ trừu tượng và biểu diễn dữ liệu theo cách phức tạp hơn Điều này
cho phép Deep Learning giải quyết các vấn đề phức tạp hơn so với các phương pháp Machine Learning truyền thống.
Một trong những lợi ích quan trọng của Deep Learning là khả năng học từ dữ
liệu lớn Với sự phát triển của công nghệ và khả năng tính toán, Deep Learning
đã trở thành một công cu mạnh mẽ để giúp cải thiện tự động hóa quá trình
phân tích dữ liệu, nhận diện mẫu, dự đoán và thực hiện nhiều tác vụ khác nhau.
1.2.2 Sơ đồ Program Dependence Graph (PDG) va Control Flow
Graph (CFG)
Sơ đồ Phụ thuộc Dữ liệu (Program Dependence Graph - PDG) và Sơ đồ Ngữ
nghĩa Diéu khiển (Control Flow Graph - CFG) là hai công cụ phân tích mã
nguồn được đề xuất bởi Jeanne Ferrante vào năm 1987 [9] Cả hai sơ đồ này
được sử dụng giúp biểu diễn và phân tích các đặc điểm ngữ nghĩa quan trọng
từ các hàm trong của mã nguồn chương trình.
Trang 14int isabsequal(int x, int y)
Hình 1.1: Ví du vé Control Flow Graph
1.2.3 Ki thuật Program Slicing
Program Slicing là ki thuật trích xuất các slice từ chương trình Ki thuật này được công bố bởi Frank [27] năm 1995 Slice được trích xuất sử dụng trong
nghiên cứu này sẽ bao gồm các đặc điểm et pháp và ngữ nghĩa của chương trình
Slice sau đó sẽ được chuyển thành vector làm đầu vào để huấn luyện cho mô
hình học sâu.
Trang 15Hinh 1.2: Vi du vé Program Dependence Graph
1.2.4 Trích xuất các mau từ mã nguồn để lam dữ liệu huấn luyện
Ngoài việc chọn mô hình học sâu hiệu quả thì việc trích xuất các mẫu làm dữ
liệu đầu vào cũng quan trọng không kém, do nó sẽ ảnh hướng đến kết quả đầu
ra của mô hình Với nghiên cứu này, nhóm chúng tôi chọn phương pháp trích
xuất các mẫu của Li [15] bằng việc sử dụng cây cú pháp trừu tượng (Abstract
syntax tree - AST) nhằm tách các đặc điểm về cú pháp (syntax) của các đoạn
mã chứa lỗ hồng, sử dụng hai sơ đồ Program Dependence Graph (PDG) để diễn
tả sự phụ thuộc dữ liệu, Control Flow Graph (CFG) nhằm tách các đặc điểm
về ngữ nghĩa (semantic) cùng với kĩ thuật Program Slicing để tách các slice từ
mã nguồn làm đầu vào cho mô hình.
1.3 Những thách thức
Dù có thể phát hiện lỗ hồng với độ chính xác cao, tuy nhiên hầu hết các nghiên cứu chỉ hoạt động với những mã nguồn C và C++ và chỉ phát hiện được
Trang 17một số loại lỗ hổng nhất định Nguyên nhân chủ yếu là do việc thiếu số lượng
dữ liệu mã nguồn chứa lỗ hồng của những ngôn ngữ khác và việc trích xuất cácmẫu từ mã nguồn chỉ hoạt động với vài loại lỗ hổng Do là những thách thức
mà hiện tại nhóm chúng tôi vẫn đang tiếp tục nghiên cứu.
1.4 Cau trúc khóa luận tốt nghiệp
Chúng tôi xin trình bày nội dung của Luận án theo cấu trúc như sau:
e Chương 1: TONG QUAN DE TÀI
Giới thiệu tổng quan về đề tài của Khóa luận và những nghiên cứu liên
quan.
e Chương 2: CƠ SỞ LY THUYET
Trình bày cơ sở lý thuyết và kiến thức nền tảng liên quan đến đề tài.
e Chương 3: PHƯƠNG PHÁP PHÁT HIEN LO HỒNG BẢO MAT
PHAN MEM BẰNG HỌC SÂU
Trình bày phương pháp phát hiện lỗ hồng bằng học sâu.
e Chương 4: THÍ NGHIỆM VÀ ĐÁNH GIÁ
Trình bày thực nghiệm và đánh giá.
e Chương 5: KET LUẬN
Kết luận và hướng phát triển của đề tài
Trang 18CHƯƠNG 2 CƠ SỞ LÝ THUYET
Chương này trình bày cơ sở lý thuyết của nghiên cứu: Bao gồm lỗ hổng phần
mềm, cây cú pháp trừu tượng (AST), kỹ thuật chuyển đổi từ đoạn mã sang
vector và mô hình học sâu.
2.1 Lỗ hồng phần mềm
2.1.1 Khái niệm
Lỗ hồng phần mềm là một lỗi, một điểm yếu hoặc một khuyết điểm trong
phần mềm hoặc hệ điều hành và có thể bị ảnh hưởng bởi các tấn công hoặc các hành động gây hại cho hệ thống hoặc thông tin mà phần mềm đó đang xử lý.
Các lỗ hổng phần mềm có thể bị khai thác bởi các kẻ tấn công để thực hiện các
hành vi như truy cập trái phép hệ thống, đánh cắp các thông tin nhạy cẩm, can trở hoạt động bình thường của hệ thống hay tạo điều kiện để thực hiện các tấn
công khác.
Với tốc độ phát triển của các kỹ thuật tấn công mới, mức độ nghiêm trọngcủa lỗ hong phần mềm ngày càng gia tăng Tất cả các hệ thống đều tiềm anchứa các lỗ hổng, tuy nhiên, câu hỏi đặt ra là liệu những lỗ hồng này có bị khai
thác và gây ra thiệt hại hay không.
2.1.2 Thực trạng hién nay
Ngày càng có nhiều cuộc tấn công mạng bắt nguồn từ lỗ hong phần mềm,dẫn đến rò ri dữ liệu người dùng và ton hại danh tiếng của công ty [17] Mặc dùnhiều nghiên cứu đã được đề xuất để hỗ trợ phát hiện lỗ hổng, lỗ hong vẫn làmối đe dọa đối với hoạt động an toàn của cơ sở hạ tầng CNTT [29] Số 16 hồng
Trang 19được tiết lộ trong Common Vulnerabilities and Exposures (CVE) va National
Vulnerability Database (NVD) dai diện cho các kho lưu trữ dữ liệu lỗ hong đã
tăng từ khoảng 4.600 trong năm 2010 lên 8.000 vào năm 2014 trước khi tăng
vọt lên hơn 17.000 vào năm 2017 [14], [23] Những lỗ hổng này có thể đã gây ra
các mối đe dọa tiềm an đối với việc sử dụng an toàn các sản phẩm và thiết bị
kỹ thuật số trên toàn thé giới [5].
2.1.3 Cách thức khai thác lỗ hổng
Khi một lỗ hồng bảo mật được phát hiện, kẻ tấn công có thể tận dụng nóbằng cách viết các chương trình để xâm nhập và kiểm soát thiết bị đó Khithành công trong việc truy cập vào mục tiêu, những kẻ tấn công có thể tiếnhành nghiên cứu hệ thống để tìm hiểu về nó Từ đó, chúng có thể thực hiện
nhiều hành vi khác nhau như truy cập vào các tệp tin quan trọng hoặc thực thi
các chương trình độc hại Nhờ vào quyền kiểm soát đó, kẻ tấn công có thể kiểm
soát máy tính và lấy cắp dit liệu từ thiết bị của nạn nhân.
Các lỗ hồng đôi khi được phát hiện chính bởi các nhà phát triển phần mềm
hoặc nhờ cảnh báo từ người dùng và nhà nghiên cứu Tuy nhiên, trong một số
trường hợp, tin tặc hoặc các tổ chức gián điệp có thể khám phá cách thức xâmnhập vào hệ thống nhưng không thông báo cho nhà phát triển Những lỗ hổngnhư thế được gọi là "zero day", bởi vì nhà phát triển chưa có cơ hội để vá chúng
Kết quả là, phần mềm hoặc phần cứng tiếp tục bị đe dọa cho đến khi có bản vá hoặc sửa lỗi được phân phối cho người dùng.
Lỗ hổng phần mềm có thể dẫn đến hậu quả nghiêm trọng, như cho phép tintặc tiếp cận và chiếm quyền kiểm soát thiết bị Để ngăn chặn điều này, việc pháthiện và vá lỗ hong là cực kỳ quan trọng Tuy nhiên, đôi khi 16 hong chi được
phát hiện sau khi bị khai thác, gây thiệt hại lớn cho người dùng Để giảm thiểu
rủi ro, việc cập nhật phần mềm và phần cứng thường xuyên để áp dụng các bản
vá và bản sửa lỗi là cần thiết.
Trang 202.2 Cây cú pháp trừu tượng (Abstract Syntax Tree
-AST)
2.2.1 Khai niém
Trong lĩnh vực khoa học máy tinh, cây cú pháp trừu tượng (Abstract Syntax
Tree) là một biểu diễn cây của cấu trúc cú pháp trừu tượng của một đoạn văn
bản (thường là mã nguồn) được viết bằng ngôn ngữ chính thức Mỗi nút trong cây đại diện cho một cấu trúc xuất hiện trong văn bản.
Sự trừu tượng trong cây cú pháp được thể hiện bởi việc nó không biểu diễn
mọi chỉ tiết xuất hiện trong cú pháp thực, mà chỉ tập trung vào các chỉ tiết liên quan đến cấu trúc và nội dung Ví dụ, các dấu ngoặc đơn không cần thiết trong
cấu trúc cây không được biểu điễn dưới dạng các nút riêng biệt Tương tự, một
cấu trúc cú pháp như câu lệnh điều kiện "if" eó thể được biểu diễn bằng một
nút đơn có ba nhánh.
Cây cú pháp trừu tượng là một công cụ quan trọng trong phân tích cú phấp
của ngôn ngữ lập trình Ñó cung cấp một biểu diễn cấu trúc trừu tượng của mãnguồn, giúp các chương trình phân tích và biên dịch hiểu và xử lý mã nguồn một
cách dễ dàng Sự trừu tượng trong cây cú pháp cho phép chúng ta tập trung
vào các thành phần cú pháp quan trọng và bỏ qua các chỉ tiết không cần thiết.
Điều này giúp quá trình phân tích và xử lý ngôn ngữ đơn giản hơn, đồng thời
cung cấp một cấu trúc dễ dàng để làm việc và tương tác với mã nguồn
Trang 21b:=b<a return a
Hinh 2.1: Cay cấu trúc trừu tượng dua trên thuật toán Euclid
2.2.2 Thiết kế của AST
Thiết kế của AST thường được liên kết chặt chẽ với thiết kế của trình biên dịch Yêu cầu cốt lõi của thiết kế bao gồm những điều sau đây:
e Các biến phải được giữ nguyên, cũng như vị trí khai báo của chúng trong
mã nguồn.
e Thứ tự của các câu lệnh thực thi phải được biểu diễn và xác định rõ ràng
e Các thành phần bên trái và bên phải của toán tử nhị phân phải được lưu
trữ và xác định chính xác.
e Các định danh và giá trị được gán của chúng phải được lưu trữ trong các
Trang 22RNN là một lớp mang nơ-ron trong đó các kết nối giữa các nút có thể tao ra
một chu kỳ, cho phép đầu ra từ một số nút ảnh hưởng đến đầu vào tiếp theo
đến cùng một nút RNN được thiết kế đặc biệt để đáp ứng yêu cầu biểu diễn
ngôn ngữ bằng cách kết nối các từ trong quá khứ với các từ hiện tại, từ đó tạo
ra một mối liên hệ chuỗi Nếu chúng ta xem xét mỗi từ một cách độc lập, chúng
ta sẽ không thể hiểu được ý nghĩa của câu nói Tuy nhiên, thông qua việc sửdụng các từ xung quanh, chúng ta có thể hiểu rõ trọn vẹn một câu hoàn chỉnh
đ) ® @® @® đ)
Hình 2.2: Cấu trúc trải phẳng của mạng no-ron truy hồi
Trong cấu trúc mô tả ở Hình 2.2, mạng nơ-ron sử dụng đầu vào là một vector
+; và tao ra một đầu ra là một giá trị ẩn hy Đầu vào x; được truyền vào một
mạng no-ron A có tính chất truy hồi Sau đó, kết quả của mạng nơ-ron này được
chuyển tiếp đến đầu ra hy
Công thức cho trạng thái hiện tại của ñh¿ là:
Trang 23Ap dung thém ham Activation tanh:
hy = tanh(Wrphs-1 + Went) (2.2)
Trong đó, W là trong số của mô hình, b là vector an đơn lẻ, Why, là trọng
số của trạng thái an trước đó, W/„„ là trọng số của trạng thái đầu vào hiện tai,
tanh là ham Activation.
Kết quả dau ra:
Trong đó, là trang thái đầu ra, Wp, là trọng số tại trạng thái dau ra.
Trong mạng nơ-ron truy hồi, vòng lặp A đóng vai trò không thể thiếu va là
một phan quan trọng trong cách mạng nơ-ron hoạt động N6 tao ra một chuỗi
lặp lại của cùng một cấu trúc, cho phép các thành phần kết nối với nhau một cách liền mạch theo mô hình chuỗi Mỗi vòng lặp nhận đầu ra từ vòng lặp trước làm đầu vào và tiếp tục quá trình này.
Kiến trúc RNN được ứng dụng vào nhiều công việc như: Nhận diện giọng nói,
các tác vụ ngôn ngữ, chú thích hình ảnh,
2.3.1.2 Hạn chế
Hạn chế lớn nhất của RNN là không thể giải quyết được những phụ thuộc
dai hạn (long-term dependecies), Ví dụ: "Trời hôm nay rất nắng Tôi đang di
đến trường Toi đang rất néng" Để điền được từ móng, chúng ta cần phải xét
ngữ cảnh dài hơn so với một câu, tức là phải biết được ngữ cảnh "trời rất nắng"
Trang 24thì ta mới điền được Thực nghiệm cho thấy, RNN giải quyết các liên kết ngữ
nghĩa dài hạn này rất kém.
2.3.2 Mô hành LSTM (Long short-term memory)
2.3.2.1 Tong quan vé LSTM
LSTM là một phiên bản sửa đổi của RNN, được sinh ra dé giúp ghi nhớ dit
liệu quá khứ trong bộ nhớ dễ dang hơn LSTM được công bố bởi Hochreiter và
Schmidhuber [10] và sau đó được cải tiến và pho biến nhờ sự đóng góp của nhiềunhà nghiên cứu khác LSTM hiện nay là một trong những mô hình học sâu phổ
biến nhất do hiệu quả cao của nó với nhiều bài toán khác nhau.
Cấu trúc của LSTM giống như RNN, là một mạng hồi quy gồm một chuỗi các module lặp lại của mạng nơ-ron Tuy nhiên, module trong LSTM có cấu
trúc khác biệt so với RNN, với ba cổng (gate) bao gồm:
Input Gate Output Gate
Hình 2.3: Cấu trúc của mô hình LSTM
Trang 252.9.2.2 Cấu trúc của mô hành LSTM
Ý tưởng cốt lõi của LSTM là sử dụng trạng thái tế bào (cell state), biểu diễn
bởi một đường ngang chạy qua phía trên của module trong Hình 2.3.
LSTM có khả năng loại bỏ hoặc bổ sung thông tin vào trạng thái tế bào mộtcách linh hoạt, và điều này được thực hiện thông qua các cổng (gate) được điềuchỉnh một cách can thận Các cổng hoạt động như bộ lọc thông tin, và chúng
được thực hiện bằng cách kết hợp một lớp mang sigmoid và một phép nhân.
Input Gate là cổng đầu tiên trong LSTM, có chức năng xác định giá trị nào
từ dữ liệu đầu vào sẽ được sử dụng để điều chỉnh bộ nhớ Hàm sigmoid được
sử dụng để quyết định giá trị nào sẽ được truyền qua cổng (có giá trị từ 0 đến1), và hàm tanh được sử dụng để tạo ra các trọng số cho các giá trị truyền quacổng, quyết định mức độ quan trọng của chúng trong khoảng từ -1 đến 1
y= ơ(W; k [hi—-1, #:] + b;) (2.4)
C, = tanh(We + [hị~1 21] + be) (2.5)
Trong đó, i đại diện cho Input Gate va Œ đại diện cho trạng thái tế bao.
Cổng tiếp theo là Forget Gate dùng để xác định các chỉ tiết cần được loại bỏ
khỏi trạng thái tế bào của khối hiện tại Các chi tiết bị loại bỏ này được quyết định bởi ham sigmoid Hàm này sẽ xem xét trạng thái trước đó h¿_¡ và đầu vào hiện tại z¿, và sẽ trả về một giá trị từ 0 đến 1 cho mỗi phan tử trong trang thái
tế bào trước đó Cy_-1.
fi = a(Wr , (he, Xt] + br) (2.6)
Trong đó, ƒ đại diện cho Forget Gate.
Cuối cùng là Output Gate, có tác dụng quyết định đầu ra dựa trên đầu vào
và bộ nhớ của khối hiện tại Hàm sigmoid được sử dụng để quyết định giá trịnào sẽ được truyền qua cổng (có giá trị từ 0 đến 1), và hàm tanh được sử dụng
Trang 26để tạo ra trọng số cho các giá trị được truyền qua cổng, quyết định mức độ quan
trọng của chúng trong khoảng từ -1 đến 1 Kết quả của ham sigmoid sau đó
được nhãn với đầu ra của hàm tanh để tao ra đầu ra cuối cùng của LSTM
Oo —= ơ(Ms : [ht-1, :] + bo) (2.7)
Trong đó, o đại diện cho Output Gate.
— `—
Hinh 2.4: Hình ảnh mô tả một cổng của mé-dun
2.3.3 Mô hành BiLSTM (Bi-directional long short-term memory)
LSTM hai chiều (Bi-directional LSTM) là mang nơ-ron hồi quy được sử dung
phổ biến trong xử lý ngôn ngữ tự nhiên Không giống như LSTM tiêu chuẩn,
đầu vào của BiLSTM chảy theo cả hai hướng và có khả năng sử dụng thông tin
từ cả hai phía Điều này cho phép mạng nơ-ron nắm bắt và sử dụng thông tin
giữa các từ và cụm từ theo cả hai hướng của chuỗi.
BiLSTM bổ sung thêm một lớp LSTM theo hướng ngược lại với lớp LSTM
ban đầu, nhằm tạo một hướng đảo ngược của luồng thông tin Lúc này, mô hình
sẽ có hai lớp LSTM với hướng ngược nhau Sau đó, kết hợp các đầu ra từ cả hai
lớp LSTM theo một số cách, chang hạn như tính trung bình, tính tổng, nhân
hoặc nối lại.
Trang 27Xt
inputs
Kiểu kiến trúc này có nhiều ưu điểm quan trọng trong việc xử lí ngôn ngữ
tự nhiên Một trong những lợi thế chính của nó là mọi thành phần trong chuỗi đầu vào đều có thông tin từ cả quá khứ và hiện tại Điều này tạo ra khả năng cho BiLSTM tao ra đầu ra có ý nghĩa hơn, bằng cách kết hợp thông tin từ cả
hai hướng sử dụng các lớp LSTM.
BiLSTM sẽ có đầu ra khác nhau cho mọi thành phần của chuỗi Do đó, mô
hình BiLSTM có lợi trong nhiều nhiệm vu xử lí ngôn ngữ tự nhiên, chang hạn
như dịch thuật, phân loại câu và nhận dạng thực thể Ngoài ra, nó còn tìm thấy
các ứng dụng của nó trong nhận dạng giọng nói, dự đoán cấu trúc protein, nhận
dạng chữ viết tay và các lĩnh vực tương tự.
2.3.4 Mô hành GRU (Gated Recurrent Unit) va BiGRU
(Bidirec-tional Gated Recurrent Unit)
2.3.4.1 Tổng quan vé GRU
GRU được giới thiệu bởi Cho [2], nhằm mục đích giải quyết van dé vanishing gradient đi kèm với mạng RNN tiêu chuẩn GRU cũng có thể được coi là một
Trang 28biến thể của LSTM vì cả hai đều được thiết kế tương tự nhau và trong nhiều
trường hợp, tạo ra kết quả xuất sắc như nhau.
Để giải quyết vấn đề vanishing gradient của RNN tiêu chuẩn, GRU sử dụnghai cổng quan trọng là cổng cập nhật (update gate) và cổng đặt lại (reset gate).Các cổng này quyết định thông tin nào sẽ được truyền đi và đóng góp vào đầu
ra của mô hình Diều đặc biệt là cổng cập nhật và cổng đặt lại có khả năng đượchuấn luyện để giữ lại thông tin quan trọng trong một khoảng thời gian dài mà
không bị mất dần theo thời gian, đồng thời loại bỏ những thông tin không cần thiết cho quá trình dự đoán.
Hình 2.6: Cấu trúc vé một mô-đun của GRU
2.3.4.2 Chi tiết vé cách hoạt động của GRU
Update Gate hoạt động tương tự như Input Gate và Forget Gate của LSTM.
Cổng này quyết định loại bỏ thông tin nào và thêm thông tin mới nào Công
thức như sau:
Trang 29Trong đó, z đại diện cho Update Gate.
Reset Gate là một cổng khác được sử dụng để quyết định lượng thông tin
trong quá khứ cần quên Công thức như sau:
Trong đó, r đại diện cho Reset Gate.
Để có thể tính toán được vector hạ, trước tiên ta cần phải tính giá tri hy trước.
Khi tính toán giá tri này, ta không xem xét toàn bộ vector h; mà sẽ thông qua
Reset Gate để quyết định lượng thông tin cần chọn từ vector hy Lúc này hy
được tính như sau:
hy = tanh(WỨ% - [re * hị—1, 04] + bạ) (2.11)
Sau khi đã có giá trị của hu, ta sử dung giá trị Update Gate z để quyết định
những thông tin nào từ hy sẽ được đưa vào h¿ và sử dụng (1 — x) để quyết định
cần giữ những thông tin gì từ vector h¿_¡ trước đó Công thức như sau:
hy = (L— 4) * hea +e * het (2.12)
2.3.4.8 Tổng quan vé BiGRU
BiGRU cũng giống như BiLSTM đưa dữ liệu đầu vào từ hai phía có chiều
ngược nhau Về cấu trúc của mô hình BiGRU thì bao gồm 2 lớp GRU có chiều
ngược nhau, sau đó kết hợp đầu ra từ hai lớp để đưa ra kết quả cuối cùng
BiGRU được tạo ra cho việc xử lý các tác vụ liên quan đến ngôn ngữ tự nhiên
và độ hiệu quả của mô hình ngang ngửa với BiLSTM.
Trang 302.3.5 Mô hành Transformer
Transformer [28] là mô hình sử dụng cơ chế attention cho phép tính toán trọng số của từng phần tử đầu vào, cho phép mô hình tập trung vào các thành phần quan trong của dữ liệu đầu vào Ngoài ra Transformer giải quyết hai vấn
đề của các mô hình dựa trên RNN bao gồm có thể xử lý các đoạn văn bản lớn
và các câu dài và cho phép huấn luyện song song, giúp tăng tốc độ huấn luyện
và cải thiện độ chính xác của mô hình.
Trang 31Cấu trúc của Transformer được xây dựng trên nền tảng kiến trúc
Encoder/De-coder Phan Encoder của Transformer bao gồm hai lớp là lớp Multi-Head
At-tention và lớp Feed Eorward Ở Decoder thì bao gồm ba lớp, ngoài hai lớp giống
ở Encoder thì còn có thêm một lớp Multi-Head Attention Một mô hình
Trans-former sẽ bao gồm nhiều Encoder va Decoder, do đó TransTrans-former có thể huấn
luyện đồng thời các từ.
Encoder va Decoder của mô hình sử dụng lớp Head Attention
Multi-Head Attention đơn giản là nhiều Self Attention hợp lại với nhau Self Attention
là cơ chế mã hóa một từ dựa vào thông tin của những từ khác liên quan đến từ
đó, hiểu đơn giản là cơ chế này sẽ tìm kiếm các từ sao cho có liên quan nhiều
nhất với từ đang được mã hóa, sau đó mã hóa tất cả thông tin trên Với một
Self Attention chúng ta chỉ mã hóa được một mẫu thông tin, để có thể mã hóa
được nhiều mẫu, chúng ta sử dụng nhiều Self Attention, tạo thành Multi-Head
Attention Lúc này, mô hình ngoài mã hóa một từ, nó còn có thể chú ý đến các
từ trước và sau từ đó, giúp cải thiện độ chính xác cho mô hình.
2.3.6 Mô hành BERT
BERT [7] là mô hình mở rộng của Transformer, sử dụng kiến trúc bao gồm
một số lượng lớn các lớp Transformer để mã hóa thông tin đầu vào Ngoài ra,
mô hình này cung cấp khả năng sử dụng mô hình đã được đào tạo trước đó
(pre-training) để điều chỉnh và tái sử dụng (ñne-tuning) mô hình trên dữ liệu
mới.
Giai đoạn pre-training đào tạo mô hình trên một lượng lớn dữ liệu văn bản
không có nhãn (unlabeled data) để học các đặc trưng ngôn ngữ tổng quát, bao
gồm cả cấu trúc ngữ pháp, từ vựng và ngữ nghĩa của các từ Sau quá trình
pre-training, mô hình đã học được kiến thức về ngôn ngữ tự nhiên và có khả
năng biểu diễn từ và câu một cách hiệu quả
Sau đó, mô hình được tiếp tục huấn luyện trong giai đoạn fine-tuning để thựchiện các tác vụ cụ thể, bao gồm việc huấn luyện trên tập dữ liệu chứa các chương
Trang 32trình phần mềm Quá trình fine-tuning này giúp tiết kiệm tài nguyên và thời
gian so với việc huấn luyện mô hình mới từ đầu.
CodeBERT [8] được giới thiệu là một mô hình BERT đào tạo trước
(pre-trained) được xây dựng bằng cách kết hợp cả mã hóa ngôn ngữ tự nhiên (NL)
và mã hóa ngôn ngữ lập trình (PL) để tạo ra mô hình tổng thể phù hợp để tinh
chỉnh cho bài toán huấn luyện trên mã nguồn Mô hình này được đào tạo trên
bộ dữ liệu lớn từ các kho lưu trữ mã nguồn và các tài liệu lập trình, nhờ đó giúp cải thiện hiệu quả trong quá trình huấn luyện trên các chương trình phần mềm
và phân tích mã nguồn.
Trong giai đoạn pre-train, dit liệu đầu vào được tạo thành là sự kết hợp của
hai phân đoạn với token phân tách đặc biệt, cụ thể là [CLS], wi, tua, tua, [SEP]
,C1, C2; +;Cm; (EOS) Trong đó, một phân đoạn là văn ban ngôn ngữ tự nhiên va
phân đoạn còn lại là mã từ một ngôn ngữ lập trình nhất định [CLS] là một
token đặc biệt ở phía trước của hai phân đoạn Theo cách xử lý văn bản tiêu
Trang 33wy ——> (MASK eet * Ww, — —- replaced
& * [MASK], —pi _ C tạ — => replaced
Hình 2.9: Mô hành huấn luyện CodeBERT
chuẩn trong Transformer thì văn bản ngôn ngữ tự nhiên là một chuỗi các từ và
chia nó thành các WordPiece [31] Chúng tôi coi một đoạn mã là một chuỗi các
token Dau ra của CodeBERT bao gồm (1) biểu diễn vector theo ngữ cảnh củatừng token, cho cả ngôn ngữ tự nhiên va mã, và (2) biểu diễn của [CLS], hoạtđộng như một chuỗi biểu diễn tổng hợp
2.3.8 Mô hành GNN (Graph Neural Network)
Dau tiên ta cần biết định nghĩa về đồ thi (graph) D6 thị là một cấu trúc dữ liệu trong khoa học máy tính bao gồm hai thành phần nút và đường G = (V,
FE) Mỗi nút có một cạnh liên kết (E) kết nối nó với moi nút khác (V) Một đồ
thị có hướng có mũi tên trên các cạnh của nó, được gọi là sự phụ thuộc hướng.
Nếu không, các đồ thị là vô hướng.
Do khả năng biểu đạt cực kỳ mạnh mẽ của chúng, đồ thị đang nhận được sựquan tâm đáng kể trong lĩnh vực Học máy Mỗi nút được nhúng vào một vector
Việc nhúng này thiết lập vị trí của nút trong không gian dữ liệu GNN là cấu trúc liên kết của các mạng neural hoạt động trên đồ thị.
Mục tiêu chính của kiến trúc GNN là tìm hiểu một vector được nhúng chứathông tin về vùng lân cận của nó Chúng ta có thể sử dụng tính năng nhúngnày để giải quyết nhiều vấn đề khác nhau, bao gồm gắn nhãn cho nút, dự đoán
Trang 34nút và cạnh,
Nói cách khác, GNN là một lớp con của các kỹ thuật Học sâu được xây dựng
đặc biệt để thực hiện suy luận trên dit liệu dựa trên đồ thị GNN được áp dụng
cho đồ thị và có khả năng thực hiện các tác vụ dự đoán ở cấp độ nút, cạnh và
Edge Training Setting Task
Embedding * Supervised + Node-level
* Semi-supervised * Edge-level
Graph
Embedding
Hinh 2.10: Mô hành GNN
GNN được chia thành ba loại:
e Recurrent Graph Neural Network: đồ thi trong mạng này là hai chiều trong
đó dữ liệu chảy theo cả hai hướng Áp dụng hàm truyền đồ thị trên các
cạnh để truyền đầu ra của hướng ban đầu trở lại các nút đồ thị, nhưng điềuchỉnh trọng số cạnh dựa trên sửa đổi độ dốc đã áp dụng trước đó cho nút
đó.
e Spectral Convolutional Network: có ý tưởng tương tự như CNN Như đã
biết trong ƠNN, tích chập được thực hiện bằng cách tính tổng các giá trịcủa các điểm dit liệu lân cận xung quanh một điểm dữ liệu trung tam bằngcách sử dụng bộ lọc và các trọng số có thể học được Mạng kết hợp khônggian hoạt động theo nguyên tắc tương tự, tổng hợp các thuộc tính của các
Trang 35nút lân cận đối với nút trung tam Tuy nhiên, các phương pháp based thường có độ phức tạp tính toán cao và đã dần bị thay thế bởi các
spectral-phương phấp spatial-based.
e Spatial Convolutional Network: cung cấp một cách tiếp cận đơn giản và
hiệu quả hơn để xử lý dữ liệu Phương pháp này thực hiện thông qua ý
tưởng nhúng các nút phụ thuộc vào các nút lân cận.
2.3.9 Mô hành GCN (Graph Convolutional Network)
GCN [12] là một kiến trúc mang neural rất mạnh mẽ dành cho máy hoc trên
đồ thị Trên thực tế, chúng mạnh đến mức ngay cả GCN hai lớp được khởi tạo
ngẫu nhiên cũng có thể tạo ra các biểu dién đặc điểm hữu ích của các nút trongmạng Hình 2.11 minh họa biểu dién hai chiều của từng nút trong mang do GCN
đó tạo ra Lưu ý rằng độ gần tương đối của các nút trong mạng được bảo toàn
trong biểu diễn hai chiều ngay cả khi chưa huấn luyện
Cu thể mô hình GCN nhận dữ liệu đầu vào là đồ thị G = (V, E), ta có:
e Một ma trận đặc điểm đầu vào N x F0, X, trong đó N là số nút và F° là
số đặc điểm đầu vào của mỗi nút.
^ A ` ^ 2 ox 4 ya x
e Một ma trận N x N, A, là ma tran biéu diễn câu trúc của đồ thị.
Do đó, một lớp an trong GCN có thé được viết là Ht = ƒ(H~!, A) trong đó
H9 = X và ƒ là quy tắc lan truyền Mỗi lớp H” tương ứng với một ma trận đặc
trưng N x Ƒ”, trong đó mỗi hàng là một đại diện đặc trưng của một nút O mỗi
lớp, các đặc điểm này được tổng hợp để tạo thành các đặc điểm của lớp tiếptheo nhờ sử dụng quy tắc lan truyền ƒ Bằng cách này, các đặc điểm ngày càngtrở nên trừu tượng hơn ở mỗi lớp liên tiếp Các biến thé của GCN chỉ khác nhau
trong việc lựa chọn quy tắc lan truyền ƒ.
Trang 372.4 Các công trình nghiên cứu liên quan
Có rất nhiều hướng nghiên cứu sử dụng học sâu để phát hiện lỗ hồng bảo
mật Theo khảo sát của Peng Zeng, Guanjun Lin và các cộng sự [33], có 4 hướng
nghiên cứu chính:
e Sử dụng mô hình học sâu để tự động học các biểu diễn ngữ nghĩa của chương
trình của Wang [80].
e Giải pháp dự đoán lỗ hồng Buffer Overflow từ mã nguồn thô của Choi [3]
e Trích xuất từ mã nguồn các mẫu (code pattern) chứa lỗ hong để huấn luyện
mô hình của Li [14].
e Giải pháp phát hiện lỗ hổng cho mã nhị phan của Liu [19]
2.4.1 Hướng 1 - Tự động hóa tiệc học các biểu diễn ngữ nghia của
chương trinh để dự đoán lỗ hổng
Nghiên cứu của Wang [30] là nghiên cứu tiên phong 4p dụng mang DBN
(Deep Belief Network) để tìm hiểu các biểu diễn ngữ nghĩa của một chương
trình Mục đích của nghiên cứu là sử dụng các biểu diễn ngữ nghĩa cấp cao được
học bởi các mạng nơ-ron như các đặc điểm chứa lỗ hồng Cu thể, nó cho phép tự
động học các đặc điểm chỉ ra mã nguồn chứa lỗ hổng mà không cần dựa vào kỹthuật thủ công Phương pháp này không chỉ phù hợp để dự đoán lổ hồng nằmbên trong dự án mà còn có thể áp dụng cho dự đoán 16 hong giữa nhiều dự án.AST được sử dụng làm đại diện cho chương trình để đưa vào DBN làm dữ liệu
đào tạo.
Một phương pháp xử lý dữ liệu được đề xuất với bốn bước.
e Bước đầu tiên là phân tích mã nguồn thành token.
e Bước thứ hai là ánh xạ token tới một nhận dạng là số nguyên.
Trang 38` _| Cac biểu | Mô hình ae Le
Bài báo Nguon dữ dién/dai | mạng Mite do phat
liéu ` hiện
diện no-ron
Wang va cong su [30] nguồn mổ AST DBN Mức độ file
Liu và cộng sự [20] nguồn nộ AST BiLSTM | Mức độ hàm
Dự án mã `
Lin và cộng sự [18] | nguồn mở na nguồa LSTM Mức độ hàm
và SARD
Bang 2.1: Bảng thống kê các bài báo theo hướng 1
e Bước thứ ba là sử dụng DBN để tự động tạo ra các đặc trưng ngữ nghĩa.
e Bước cuối cùng sử dụng DBN là thiết lập mô hình dự đoán lỗ hồng.
2.4.2 Hướng 2 - Dự đoán end-to-end lỗ hổng tràn bộ đệm từ ma
nguồn thô thông qua mang nơ-ron
Nghiên cứu của Choi [3] là sản phẩm đầu tiên cung cấp giải pháp end-to-end
để phát hiện các lỗ hồng tràn bộ đệm Các nghiên cứu thực nghiệm chứng minh
rằng mạng nơ-ron có đủ khả năng để học trực tiếp các đặc điểm liên quan đến
lỗ hong từ mã nguồn thô mà không cần phân tích mã Mạng nơ-ron được déxuất trang bị các khối bộ nhớ tích hợp để ghi nhớ các phụ thuộc mã có phạm
vi rất dài Do đó, sửa đổi mạng này là rất quan trọng để xác định lỗ hồng tràn
bộ đệm Kết quả thử nghiệm cho thấy phương pháp này có thể phát hiện chính
xác các loại tràn bộ đệm khác nhau.
Tuy nhiên, phương pháp này vẫn còn những hạn chế cần cải tiến thêm Hạn
chế đầu tiên là nó không phát hiện được các sự cố tràn bộ đệm nằm trong các hàm bên ngoài do mã trong các tệp bên ngoài bị loại trừ trong dữ liệu đầu vào.
Hạn chế thứ hai là mỗi hàng phải chứa một số phép gán dữ liệu để mô hình nàyhoạt động Không dễ để áp dụng ngay phương pháp này cho mã nguồn có chứa
Trang 39wee Nguồn dit Cac bie u|Mô hình Mức độ phát
Bài báo ` diễn/đại mạng CỐ
liệu ` hiện
diện no-ron
ws yen Cac dong ˆ
Choi và cộng sự [3] Dữ liệu tự của mã Mạng bộ Mức độ hàm
Bang 2.2: Bang thống kê các bài báo theo hướng 2
các câu điều kiện vì các giá trị chú ý được tính toán để tìm các vị trí mã có liên quan nhất.
2.4.3 Hướng 3 - Trích xuất từ ma nguồn các mau (code pattern)
chứa lỗ hổng để huấn luyện m6 hành
VulDeePecker của Li [14] là nghiên cứu đầu tiên áp dụng mô hình BiLSTM
để phát hiện lỗ hồng BiLSTM trích xuất và học các phụ thuộc tầm xa từ các chuỗi mã Dữ liệu đào tạo của công cụ được lấy từ code gadget đại diện cho
chương trình và đưa làm đầu vào của BiLSTM Có ba giai đoạn để xử lý code
gadget:
e Giai đoạn đầu tiên là trích xuất các lát cắt chương trình (slice) tương ứng
của các lệnh gọi hàm thư viện/API.
e Giai đoạn thứ hai là tạo và gắn nhãn các code gadget.
Trang 40¬= Nguồn dit Các bie u|Mô hình Mức độ phát
Bài báo ` diễn/đại mạng am
Bảng 2.3: Bảng thông kê các bài báo theo hướng ở
e Giai đoạn thứ ba là chuyển đổi code gadget thành vecto.
Kết quả thử nghiệm cho thấy VulDeePecker có thể xử lý nhiều lỗ hong vakinh nghiệm của con người có thể giúp cải thiện hiệu quả của VulDeePecker
Tuy nhiên, phương pháp này có những hạn chế cần cải thiện thêm Hạn chế đầu
tiên là VulDeePecker chỉ có thể xử lý các chương trình viết bằng C/C++ Hanchế thứ hai là VulDeePecker chỉ có thể xử lý các lỗ hồng liên quan đến lệnh gọihàm thư viện/API Hạn chế thứ ba là tập dữ liệu để đánh giá hiệu suất có quy
mô nhỏ vì nó chỉ chứa hai loại lỗ hồng
2.4.4 Hướng 4 - Giải pháp phát hiện lỗ hổng cho mã nhị phan
Nghiên cứu của Liu [19] đề xuất một công cụ phát hiện lỗ hong dựa trên họcsâu cho mã nhị phân Công cụ này được phát triển nhằm mục đích mở rộng
lĩnh vực phát hiện lỗ hong bằng cách giảm thiểu sự thiếu thốn của mã nguồn.
Dé đào tao dữ liệu, các phân đoạn nhị phân được đưa vào mạng BiLSTM có sử