TÓM TẮT KHÓA LUẬNĐề tài này tập trung vào việc nghiên cứu va phát triển hệ thống phát hiện 16hong bảo mật trong phần mềm bằng cách sử dụng các mô hình xử lý ngôn ngữ tự nhiên.. Để xác đị
TONG QUAN 2
Giới thiệu những nghiên cứu liên quan
1.2.1 Mô hành xử lí ngôn ngữ tự nhiên
Mô hình xử lí ngôn ngữ tự nhiên mà nhóm sử dụng và trình bày đều là mô hình ngôn ngữ lập trình được đào tạo trước, là mô hình đa ngôn ngữ lập trình được dao tạo trước trên cặp NL-PL của 6 ngôn ngữ lập trình (Python, Java, JavaScript, PHP, Ruby, Go).
Mô hình học sâu (deep learning) là một phương pháp học máy trong lĩnh vực trí tuệ nhân tạo (AT), nó được xây dựng dựa trên cấu trúc mạng nơ-ron nhân tạo sâu Đặc trưng chính của mô hình hoc sâu là khả năng học và trích xuất các đặc trưng phức tạp từ đữ liệu đầu vào thông qua việc xử lý các tầng nơ-ron ẩn.
Tính ứngdụng Qua 3
Đề tài này trích xuất các đặc trưng của mã nguồn bằng mô hình đã được huấn luyện trước tạo ra các đầu vào thực tế cho các mô hình học sâu Các đặc trưng được tạo ra sẽ qua hàng loạt các nơ-ron Vì vậy kết quả sau khi thực nghiệm sẽ nêu lên tính ứng dụng của hệ thống, khác với các mô hình trước, chỉ dừng lại ở việc sử dụng word2vec hoặc các mô hình học sâu thông thường.
Những thách thức Lo 3
Mặc dù mô hình huấn luyện trước có khả năng hiểu và biểu diễn cú pháp,ngữ nghĩa và cấu trúc của mã nguồn, nhưng nó không thể hiểu ngữ cảnh và
4 ý nghĩa toàn bộ chương trình Điều này có thể gây ra hiểu lầm hoặc thiếu sót trong việc trích xuất đặc trưng Cũng như việc những mô hình này đòi hỏi nhiều tài nguyên tính toán do cấu trúc phức tạp của nó.
Mục tiêu, đối tượng, và phạm vi nghiên cứu
Nghiên cứu, thiết kế, xây dựng hệ thống phát hiện lỗ hổng phần mềm dựa trên khả năng trích xuất các đặc trưng, ngữ nghĩa mã nguồn của mô hình xử lý ngôn ngữ tự nhiên.
Đối tượng nghiên cứu
Đối tượng nghiên cứu: e Các lỗ hồng trong phần mềm. e Kiến trúc và cách hoạt động mô hình được huấn luyện sẵn. e Kiến trúc và cách hoạt động mô hình học sâu. e Dưa ra phương pháp xây dựng và triển khai huấn luyện mô hình. e Dánh giá hiệu suất của các phương pháp.
1.5.8 Pham vi nghién cứu e Nghiên cứu các lỗ hổng bảo mat phổ biến trong phan mềm có thể gây nguy hiểm đến tính bảo mật của hệ thống. e Nghiên cứu các phương pháp và mô hình xử lý ngôn ngữ tự nhiên để trích xuất thông tin từ mã nguồn phần mềm, bao gồm trích xuất các đặc trưng, phân tích cú pháp, phân loại, rút trích thông tin, và xử lý ngôn ngữ tự nhiên khác có liên quan đến phân tích phần mềm.
3) e Mô hình hóa lỗ hong bảo mat phần mềm: Xây dung mô hình hoặc hệ thống để mô hình hóa và đại diện cho các lỗ hồng bảo mật phần mềm Các mô hình này có thể dựa trên các mô hình học máy và mô hình xử lý ngôn ngữ tự nhiên để nhận diện và phân loại lỗ hổng trong mã nguồn phần mềm. e Nghiên cứu cách triển khai các phương pháp và mô hình để xây dựng một hệ thống phát hiện lỗ hổng bảo mật phần mềm, dựa trên việc phân tích các đặc trưng được trích xuất từ mã nguồn. e Nghiên cứu và thực hiện các cải tiến và tối uu hóa cho hệ thống nhằm nâng cao độ chính xác, độ tin cậy và hiệu suất của hệ thống.
1.5.4 Câu 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 VỀ DE TÀI VA TINH HÌNH NGHIÊN CỨU
Trình bày khái quát định hướng nghiên cứu của khóa luận mà chúng tôi muốn hướng tél Sơ lược một số công trình liên quan có cùng hướng nghiên cứu mà đề tài có tham khảo. e Chương 2: CƠ SỞ LÝ THUYET
Trình bày các định nghĩa, khái niệm cũng như những kiến thức nền tang để có thể thực hiện được nghiên cứu. e Chương 3: PHƯƠNG PHÁP THỰC HIỆN
Là phần trọng tâm của khoá luận, trình bày những nội dung chính về phương pháp thực hiện và mô hình được sử dụng. e Chương 4: KET QUA VÀ THẢO LUẬN Đề cập đến quá trình thực nghiệm cùng với kết quả thu được Đưa ra nhận xét cho những công việc đã thực hiện ở Chương 3.
6 e Chương 5: KET LUẬN VÀ HƯỚNG PHÁT TRIEN Đưa ra kết luận về đề tài, đề xuất một số hướng phát triển mở rộng cho các nghiên cứu trong tương la.
CƠ SỞ LÝ THUYÊT 7
Phương pháp phân tích tĩnh
Kỹ thuật dò tìm và phát hiện lỗ hổng phần mềm sử dụng phương pháp phân tích tĩnh có nghĩa là phát hiện lỗ hồng phần mềm không thông qua việc phải chạy thực thi chương trình, mà chỉ tiến hành thực hiện việc ra soát mã nguồn thủ công hoặc bằng công cụ để tìm ra việc sử dụng những lỗ hồng như cấp phát tài nguyên không hợp lí, sử dụng những lời gọi hàm có chứa lỗ hồng, kiểm tra tính toàn vẹn của mã nguồn cũng như có thể xác định lỗ hồng phần mềm qua kinh nghiệm.
2.2.2 Phương pháp phân tích động
Phương pháp phân tích động là một kỹ thuật phát hiện mã độc dựa trên các hành vi của tập tin được thực thi trong thời gian thực Trình chống mã độc thực hiện việc giám sát các hành động, khối lệnh của tập tin này Để thực hiện kỹ thuật này, hệ thống nên được thiết lập môi trường thử nghiệm để thực thi mã độc và quan sát, theo đõi hành vi của chúng trên môi trường này Các hành động đáng chú ý như: hoạt động của các tiến trình, thông tin về thanh ghi, sự thay đổi của các thư mục, tập tin, lưu lượng mạng và các yêu cầu kết nối giao tiếp giữa mã độc ra bên ngoài Những hành vi đáng ngờ được cho là hoạt động của mã độc sẽ được lưu dưới dạng các nhật ký phục vụ cho mục đích phân tích và điều tra về sau.
Hệ thống phát hiện lỗ hổng bảo mật phần mềm ngoài ra còn có thể sử dụng các phương pháp và công nghệ như máy hoc, phân loại dt liệu, phân tích ngữ nghĩa, và cơ sở dữ liệu chứa thông tin về các lỗ hồng đã biết Kết quả của hệ thống có thể là các cảnh báo hoặc báo cáo về các 16 hổng đã tìm thấy, giúp nhà phát triển và nhà quản lý bảo mật phần mềm có cái nhìn tổng quan về các lỗ hồng và hỗ trợ trong việc vá lỗi và tăng cường bảo mật hệ thống phần mềm.
Mô hình xử lý ngôn ngữ tự nhiên
Mô hình xử lý ngôn ngữ tự nhiên (Natural Language Processing - NLP) là một dang mô hình trong trí tuệ nhân tao (Artificial Intelligence - AI) nghiên cứu và phát triển các phương pháp và công nghệ để máy tính có thể hiểu, nắm bắt xử lí các ngữ nghĩa và tương tác với ngôn ngữ tự nhiên như con người.
Mô hình NLP đóng vai trò quan trọng trong việc xử lý, phân tích và tổ chức thông tin từ các nguồn dữ liệu dang văn bản, giúp máy tính có khả năng đọc, hiểu và trích xuất thông tin từ văn bản, phân loại và phân tích ý kiến, dịch máy, sáng tạo nội dung, giải đáp các thắc mắc và tương tác, trò chuyện với con người thông qua ngôn ngữ tự nhiên.
Mô hình xử lý ngôn ngữ tự nhiên sử dung các phương pháp va kỹ thuật như: e Tokenization: Quá trình chia câu và văn bản thành các đơn vị nhỏ hơn như từ, câu, hoặc ký tự để phân tích và xử lý. e Parsing: Phân tích cú pháp để hiểu cấu trúc ngữ pháp của câu hoặc văn bản. e Phân loại và gán nhãn: Xác định và phân loại các thành phần ngữ pháp, ý kiến, hoặc thực thể trong văn bản. e Rút trích thông tin: Trích xuất thông tin cụ thể từ văn bản, ví dụ: tên, địa chỉ, ngày tháng. e Trích xuất ý kiến: Phân tích và xác định ý kiến, cảm xúc trong văn bản. e Dịch máy: Dịch một ngôn ngữ tự nhiên sang ngôn ngữ khác. e Tạo nội dung tự động: Tự động tạo ra nội dung văn bản như bài viết, tin tức, mô tả sản phẩm, v.v e Tương tác ngôn ngữ tự nhiên: Hiểu và phản hồi tự động theo ngôn ngữ tự nhiên, như chatbot hoặc trợ lý ảo.
Mô hình được sử dung trong nghiên cứu này chính là CodeBERT:
CodeBERT là một mô hình ngôn ngữ tự nhiên (NLP) dựa trên học sâu (deep learning) được phát triển dựa trên mô hình BERT (Bidirectional Encoder Rep- resentations from Transformers) nhằm xử lý và hiểu các đoạn mã nguồn.
BERT là một mô hình học sâu dựa trên kiến trúc Transformer, đã được huấn luyện trên một lượng lớn dữ liệu từ các nguồn ngôn ngữ tự nhiên Nó đã đạt được kết quả ấn tượng trong các nhiệm vụ xử lý ngôn ngữ tự nhiên như dịch máy, phân loại văn bản, và gợi ý từ.
CodeBERT sử dụng BERT như một mô hình cơ sở để huấn luyện trên các tap dữ liệu chứa mã nguồn Quá trình huấn luyện này giúp CodeBERT học
14 cách biểu diễn các cú pháp, ngữ nghĩa và thông tin cấu trúc của mã nguồn. CodeBERT có khả năng hiểu và trích xuất thong tin quan trọng từ các đoạn mã, bao gồm cú pháp, biến, hàm, lớp, gọi hàm, và quan hệ giữa các thành phần trong mã.
Với việc sử dụng CodeBERT, người dùng có thể áp dung mô hình này để thực hiện các nhiệm vụ như phân loại, gợi ý, dịch mã, tạo mã tự động, tìm kiếm, và phân tích đoạn mã CodeBERT cung cấp một cách tiếp cận tiện lợi và hiệu quả để làm việc với mã nguồn và tận dụng sức mạnh của học sâu trong lĩnh vực phân tích và xử lý mã nguồn.
Mô hình học sâu 000000000 cee eee ee 14
Mô hình học sâu (deep learning) là một lớp mô hình học máy (machine learning) được thiết kế để mô phỏng cách con người học và xử lý thông tin Mô hình này sử dụng một cấu trúc lớn, được gọi là mạng nơ-ron nhân tạo (artificial neural network), để hoc và tổ chức các đặc trưng từ dữ liệu đầu vào.
Mạng nơ-ron nhân tạo (hay neural network) được xây dựng từ các lớp nơ-ron kết nối với nhau thông qua các trọng số Mỗi nơ-ron trong mạng nhận đầu vào, thực hiện một phép tính trên đầu vào đó, và truyền kết quả tới các nơ-ron khác.
Các trọng số của mạng được điều chỉnh trong quá trình huấn luyện để mô hình có thể tự học và tìm hiểu các đặc trưng quan trọng trong dữ liệu.
Mô hình học sâu có khả năng học và biểu diễn mối quan hệ phức tạp giữa các đặc trưng trong dữ liệu Nó có thể tự động tìm hiểu và rút trích các đặc trưng cấp cao từ dữ liệu không gian rộng, mở ra khả năng xử lý và hiểu thông tin phức tạp hơn so với các mô hình truyền thống.
Mô hình học sâu đã và đang đạt được nhiều thành tựu đáng kể trong nhiều lĩnh vực, bao gồm thị giác máy tính, xử lý ngôn ngữ tự nhiên, nhận dạng giọng nói, xe tự hành, và nhiều ứng dụng khác Đặc điểm chính của mô hình học sâu là khả năng tự học dit liệu và tự điều chỉnh các kiến thức tiếp nhận được thông
15 qua việc xử lý lớp lớp thông tin và trích xuất đặc trưng phức tap từ dữ liệu đầu vào
Trong phần này, nhóm sẽ đề cập đến 4 mô hình deep learning được ứng dụng phổ biến trong các dạng đề tài về phát hiện lỗ hong phần mềm:
CNN (Convolutional Neural Network)
e CNN là một loại mô hình học sâu phổ biến trong xử ly dữ liệu không gian như hình ảnh, âm thanh. e CNN sử dụng các lớp tích chập (convolutional layers) để tìm kiếm và rút trích các đặc trưng cục bộ từ dữ liệu đầu vào. e Các lớp tích chập sử dụng các bộ loc (filters) để thực hiện phép tích chập trên các vùng nhỏ của dt liệu và tao ra các feature map. e CNN cũng sử dụng các lớp pooling để giảm kích thước của feature map và giữ lại các đặc trưng quan trọng. e CNN thường được sử dụng trong các bài toán nhận dạng, phân loại và phân đoạn dữ liệu không gian.
Kiến trúc mô hình CNN được thể hiện ở Hình 2.1.
Hình 2.1: Kiến trúc mô hành CNN.
Input Layer Hidden Layers Output Layer Recurrent Neural Network
Hình 2.2: Kiến trúc mô hành RNN.
2.4.2 RNN (Recurrent Neural Network): e RNN (Hình 2.2) là một loại mô hình hoc sâu được sử dung chủ yếu trong xử lý dữ liệu theo trình tự liên tục như dữ liệu ngôn ngữ tự nhiên, chuỗi thời gian. e RNN có kha năng duy trì trạng thái an (hidden state) để lưu trữ thông tin từ các input trước đó và sử dụng thông tin đó để xử lý input hiện tại. e Mỗi đơn vị RNN sử dụng cùng một trọng số và hàm kích hoạt để tính toán trạng thái an mới từ đầu vào và trạng thái an trước đó. e RNN giúp xử ly dit liệu có tính tuần tự, nhưng có thể gặp van đề với việc mất đi thông tin xa trong quá trình lan truyền ngược (vanishing gradient problem).
2.4.3 Transformer: e Transformer là một mô hình học sâu mang bước tiến lớn trong nhiệm vụ xử lý ngôn ngữ tự nhiên, đặc biệt là trong bài toán dịch máy. e Transformer không sử dung các lớp RNN hoặc CNN, mà dựa trên cơ chế chú ý (attention mechanism) để tìm hiểu mối quan hệ giữa các từ trong câu.
Multi- Head Attention ee, iy
Hình 2.3: Kiến trúc mô hành Transformer e Mô hình Transformer bao gồm các lớp mã hóa (encoder) và giải mã (de- coder), mỗi lớp có nhiều mô-đun chú ý để xử lý thông tin đầu vào và tính toán kết quả đầu ra (xem Hình 2.3). e Transformer có khả năng xử lý đồng thời các phần tử đầu vào và tận dụng cấu trúc tỷ lệ thời gian của dữ liệu tuần tự.
2.4.4 BiLSTM (Bidirectional Long Short-Term Memory) e BiLSTM là một biến thể của mạng LSTM (Long Short-Term Memory), một loại RNN được cải tiến để xử lý dữ liệu dài và mất mát thông tin xa.
Hành 2.4: Kiến trúc mô hành BiLSTM e DiLSTM kết hợp hai lớp LSTM song song, một lớp xử lý theo chiều thuận
(forward direction) và một lớp xử lý theo chiều ngược (backward direction). e Mỗi lớp LSTM trong BiLSTM giữ trang thái an riêng, và đầu ra của BiL-
STM là kết hợp của đầu ra từ cả hai lớp LSTM. e BiLSTM cho phép mô hình hoc thông tin từ cả hai phía của dữ liệu tuần tự, giúp nắm bắt các mối quan hệ xa giữa các đặc trưng (xem Hình 2.4).
Tập dữ liệu Q Q 02 ee 18 P5) K4 18
Tại phần này, nhóm sẽ giải thích một số khái niệm cơ bản về những thành phần liên quan trong tập dữ liệu được dùng trong nghiên cứu
Code Slices (Doan mã) là một khái niệm chỉ một phan của mã nguồn, thường là một đoạn code liên quan đến một chức năng hoặc một khối lệnh cụ thể CodeSlices được sử dụng để tăng cường quá trình phân tích mã nguồn và tìm kiếm lỗ
19 hong phần mềm bằng cách tạo ra các đoạn mã nhỏ để kiểm tra tinh đúng đắn và an toàn của mã nguồn.
Code Gadgets là tập hợp các code slices có liên quan đến nhau trong một phương điện nào đó ví dụ như liên quan đến lời gọi hàm hệ thống, hoặc về các biến được định nghĩa bởi người dùng Code gadgets sẽ được đánh nhãn là chứa lỗ hong hoặc không chứa lỗ hồng để hỗ trợ cho việc huấn luyện mô hình học sâu nhằm mục dich phát hiện lỗ hong phần mềm.
Các công trình nghiên cứu liên quan
Theo nghiên cứu của nhóm Software Security and Protection thuộc trường đại học quốc gia Singapore VulDeePecker [7] có thể đồng thời phát hiện nhiều loại lỗ hổng khác nhau, với độ chính xác lên tới 91.37% trên bộ dataset có
17725 đoạn code chứa lỗ hồng trên tổng cộng 61638 đoạn code Theo so sánh thì VulDeePecker cũng đạt hiệu quả tốt hơn với điểm F1 cao hơn rất nhiều so với các mô hình phát hiện lỗ hồng dựa trên pattern và dựa trên sự tương đồng giữa các đoạn code Tuy nhiên, nghiên cứu của nhóm hiện đang chỉ giới hạn vào mô hình BiLTSM và lượng dataset sử dụng hiện tại vẫn chưa đủ lớn.
Theo nghiên cứu nay của Zhen Li và cộng sự thi hệ thống SySeVR ngoài việc thực hiện huấn luyện trên mô hình BiLSTM thì còn có thể huấn luyện trên các mô hình khác như BGRU, RNN, DBN và cho ra kết quả tốt hơn khoảng 3% so với VulDeePecker trên cùng 1 tập dataset SeVCs của SySeVR với nhiều mẫu lỗ hồng hơn liên quan đến lệnh gọi hàm, sử dụng mảng, sử dụng con trỏ và biểu
20 thức số học Hạn chế của nghiên cứu theo tác giả cho biết thì hệ thống này thực hiện việc đánh nhãn tự động điều đó có thể dẫn tới việc 1 số nhãn không chuẩn, cũng như dataset được lấy từ các chương trình chứa 16 hong của SARD, những lỗ hong này có thể không sát với thực tế [8].
'Theo nghiên cứu này của nhóm nghiên cứu thuộc đại học Sungkyunkwan Hàn
Quốc [5], ho sử dụng bộ dataset tương tự với VulDeePecker với 2 loại lỗ hổng phần mềm CWE-119 và CWE-399 nhưng có nhiều mẫu code hơn, huấn luyện cho mô hình BERT và BiLSTM Kết quả nhận được tuy tốt hơn khi cùng sử dụng mô hình này trên tap dataset của VulDeePecker, nhưng được biết BERT được pre-trained trên ngôn ngữ Tiếng Anh nên việc hoc và phân loại lỗ hồng sẽ không đạt hiệu quả cao.
2.6.4 POSTER: Vulnerability Discovery with Function Represen- tation Learning from Unlabeled Projects
Nghiên cứu này sử dung mô hình BiLSTM để học cách biểu diễn các ham dưới dạng vector sau đó gom nhóm các vector tương tự nhau và đưa ra dự đoán về 16 hong [9] Nghiên cứu này có điểm hay ở chỗ không yêu cầu label dữ liệu và có thể tự học cách biểu diễn các hàm, nhưng đi kèm với đó thì cũng do không yêu cầu label nên vẫn tồn tại tình trạng false positive cao và hạn chế trong việc phát hiện lỗi khi chỉ nhận biết được những lỗ hổng tương tự nhau, dễ bị nhiễu nếu như dữ liệu đầu vào quá phức tạp.
2.6.5 Automatically Learning Semantic Features for Defect Pre- diction
Nghiên cứu nay giới thiệu việc sử dung thuật toán representation-learning và
Deep Belief Networks (DBN) để học các ngữ nghĩa trực tiếp từ mã nguồn và áp
21 dụng chúng để dự đoán lỗi phần mềm Phương pháp này nhằm cải thiện quá trình dự đoán lỗi không chỉ trong các dự án riêng lẻ (within-project) mà còn cả giữa các dự án khác nhau (eross-project) [12] Ưu điểm của phương pháp được đề cập là khả năng học và tự động trích xuất các đặc trưng ngữ nghĩa từ mã nguồn, giúp tăng độ chính xác trong việc dự đoán lỗi Ngoài ra, việc sử dụng
DBN cũng mang lại khả năng học sâu và khả năng biểu diễn tốt các mối quan hệ phức tạp trong mã nguồn.
Tuy nhiên, trong quá trình nghiên cứu này cũng đối diện với một số khó khăn Đầu tiên, việc huấn luyện mô hình representation-learning và DBN đòi hỏi nhiều thời gian và tài nguyên tính toán, đặc biệt khi xử lý các tap dit liệu lớn Thứ hai, sự thành công của phương pháp nay còn phụ thuộc vào tính da dạng của tập dữ liệu Nếu tập dữ liệu không đủ đa dạng, mô hình có thể gặp khó khăn trong việc đưa ra dự đoán chính xác và tổng quát hóa cho các trường hợp mới.
2.6.6 Software Defect Prediction via Convolutional Neural Net- work
Dé tài nghiên cứu này tập trung vào việc trình bày một framework dự đoán lỗi phần mềm thông qua việc sử dụng mô hình CNN để học các đặc trưng từ mã nguồn chương trình Framework này đã được thử nghiệm trên 7 dự án mã nguồn mở khác nhau và đã gặt hái được kết quả ấn tượng, với hiệu suất F-measure vượt trội hơn so với các phương pháp truyền thống và phương pháp dựa trên
Một trong những ưu điểm chính của framework này là khả năng học và trích xuất các đặc trưng từ mã nguồn chương trình một cách tự động Tuy nhiên,trong quá trình nghiên cứu, còn tồn tại một số thách thức cần được vượt qua.Đầu tiên, việc thu thập và xây dựng một tập dữ liệu lớn và đa dạng là cần thiết.Hiện tại, dataset vẫn chưa đủ lớn và thiếu tính khái quát, mô hình CNN hiện tại mới chỉ tập trung vào việc học các đặc trưng cục bộ trong mã nguồn, chưa
22 khai thác được các đặc trưng toàn cục hoặc toàn ngữ cảnh Điều này có thể giới hạn khả năng phát hiện những lỗ hổng phần mềm mới [6].
Các công trình kể trên đều làm tốt một số phần trong việc tạo dựng ra hệ thống phát hiện lỗ hong phần mềm, nhưng ở một góc độ nào đó, nó sử dụng bộ dataset chưa đủ lớn, hoặc chưa ứng dụng lên đa dạng các mô hình Nhận thấy điều này, nên nhóm chúng tôi quyết định nghiên cứu và xây dựng mô hình phát hiện lỗ hổng phần mềm dựa trên CodeBERT được pre-trained trên source code.
CHƯƠNG 3 PHƯƠNG PHÁP THỰC HIỆN Ỏ chương này chúng tôi sẽ trình bày cách triển khai, sử dụng mô hình xử lý ngôn ngữ tự nhiên để trích xuất các đặc trưng của mã nguồn và các cách tiếp cận để huấn luyện mô hình học sâu, để phát hiện các lỗ hong phần mềm.
3.1 Hệ thống phát hiện lỗ hồng phần mềm
Tại phần này, nhóm sẽ nói về quy trình hoạt động của hệ thống phát hiện lỗ hổng phần mềm kết hợp giữa mô hình ngôn ngữ tự nhiên đóng vai trò tạo embedding và mô hình deep learning để học và thực hiên phát hiện lỗ hong phan mềm.
Nghiên cứu này có hai giai đoạn: giai đoạn học tập (nghĩa là training phase) và giai đoạn phát hiện (nghĩa là tiến hành test lại quá trình học) Đầu vào của giai đoạn training là một số lượng lớn các mã nguồn chương trình dùng để đào tạo, một số chương trình chứa lỗ hổng phần mềm và những chương trình khác thì không "Lỗ hổng" có nghĩa là một chương trình chứa một hoặc nhiều lỗ hồng đã biết Đầu ra của giai đoạn training là các mô hình deep learning đã được huấn luyện với các đặc trưng của các đoạn code có chứa 16 hồng phần mềm va sẵn sàng thực thi nhiệm vụ phát hiện lỗ hồng phần mềm.
Về tổng thể, giai đoạn này có 3 bước chính
1 Trích xuất các code gadgets từ mã nguồn chương trình đầu vào
2 Embedding các code gadgets đó để chuyển thành các vector
3 Dùng các vector vừa nhận được làm đầu vào cho việc huấn luyện mô hình deep learning
Tiếp theo sẽ đến với phần chỉ tiết của giai đoạn này với 3 bước chính ban đầu đưa chia làm 8 bước nhỏ:
1 Đầu tiên tại bước 1, để chuẩn bị cho quá trình trích xuất, đầu tiên sẽ xử lý đầu vào là các file mã nguồn (Hình 3.1) Mô hình tiến hành loại bỏ các phần bình luận (comment) cũng như các ký tự không thuộc bảng mã ASCII trong các file mã nguồn đó để quá trình trích xuất code gadgets được diễn ra trơn tru, đạt hiệu quả cao, tránh sự nhập nhằng trong việc xử lý các đoạn mã.
TL <4 21 CHƯƠNG 3 PHƯƠNG PHAP THUC HIEN 23
Giai đoạn huấn luyện
3.1.2 Giai đoạn phát hiện (Detection Phase)
Sau khi có mô hình deep learning đã được huấn luyện trên tập dit liệu các lỗ hổng phần mềm, ta tiến đến giai đoạn phát hiện (Hình 3.8) Trong giai đoạn này, mô hình sẽ nhận đầu vào là các mã nguồn chương trình và trải qua các bước sau:
1 Trích xuất code gadgets: Mô hình sẽ trích xuất các đoạn code liên quan đến nhau từ mã nguồn chương trình thành các code gadgets không được đánh nhãn tại giai doan này.
2 Biến đổi code gadgets thành vector: Các code gadgets trích xuất được sẽ được biến đổi thành các vector đại diện Quá trình biến đổi này sẽ giúp mô hình hiểu và xử lý các đoạn code.
3 Sử dụng kiến thức huấn luyện: Mô hình sẽ áp dụng những kiến thức đã được huấn luyện từ quá trình trước đó vào việc phát hiện lỗ hồng phần mềm trong các đoạn code đầu vào Kiến thức này bao gồm các đặc trưng và mối liên hệ giữa các loại lỗ hồng phần mềm.
Mô hình sẽ tiến hành phân loại các đoạn code dựa trên các lỗ hong phần mềm đã được huấn luyện và đưa ra dự đoán về việc có tồn tại 16 hong trong các đoạn code đầu vào hay không Qua quá trình này, mô hình sẽ đóng góp vào việc phát hiện và bảo mật phần mềm bằng cách xác định các điểm yếu tiềm tàng trong mã nguồn.
Input into code gadgets and vector
Target : programs : Remove comment Extracting Computing program va eee h and non-ASCII library/API islices and transform tol>| Vectors similar to
: |charactor similar to function calls code gadgets similar
Applying the trained deep step 6 learning neural network to step 1 imilar to step to step 3 and 4 p classify the code gadgets of
Deep learning target programs in vector neural representation Code gadgets network with are vulnerable fine-tuned or not model
Hành 3.8: Giai đoạn phát hiện.
Tiền xử lí dữ liệu với Word2Vec
Dưới đây là cách embedding của hai phương pháp Skip-gram và CBOW trong
3.2.1 Skip-gram: e Dau vao: Mot token trong code gadget e Mục tiêu: Dự đoán các token xung quanh token đã cho. e Quá trình: Mỗi token trong mã nguồn được chuyển đổi thành một vector one-hot Các vector one-hot này được nhúng thành vector nhúng (word embeddings) bằng lớp nhúng từ Một từ trung tâm (center word) được chọn từ mã nguồn và mô hình sẽ tiến hành dự đoán các từ xung quanh từ trung tâm đó Mô hình sử dụng một lớp an (hidden layer) với các trọng số để tính toán xác suất các từ xung quanh từ trung tâm Khi huấn luyện mô hình, các trọng số trong lớp an được điều chỉnh để tối đa hóa xác suất của các từ xung quanh. e Kết quả: Mô hình (Hình 3.9) sẽ học được các vector nhúng cho từng từ, đại diện cho đặc trưng ngữ nghĩa của từ đó.
3.2.2 CBOW (Continuous Bag-oƒ- Words): e Dau vào: Một câu hoặc một chuỗi các từ. e Mục tiêu: Dự đoán từ trung tâm dựa trên các từ xung quanh. e Quá trình: Tương tự như Skip-gram, mỗi từ trong câu được chuyển đổi thành một vector one-hot và được nhúng thành vector nhúng. e Thay vì dự đoán các từ xung quanh từ trung tam, CBOW dự đoán từ trung tâm dựa trên các từ xung quanh (Hình 3.10) Các vector nhúng của các
Hidden Layer Probability that the word at a
Linear Neurons randomly chosen, nearby Input Vector position is “abandon”
A‘t’ in the position 0 — =‹ “able” corresponding to the —* ra word “ants”
Hình 3.9: Biéu diễn cách embedding của Word2Vec kiểu Skip-gram.
Word2vec CBOW Model for Training
Probability Score (Target Word Probability)
Hình 3.10: Biéu diễn cách embedding của Word2Vec kiểu CBOW. từ xung quanh được kết hợp lại và truyền qua một lớp ẩn Lớp ẩn tính toán xác suất của từ trung tâm dựa trên vector kết hợp Huấn luyện mô hình để điều chỉnh trọng số trong lớp an để tối ưu hóa xác suất dự đoán. e Kết quả: Các vector nhúng của các từ sẽ được học thông qua quá trình huấn luyện và có thể sử dụng để biểu diễn đặc trưng ngữ nghĩa của từ đó. Các phương pháp Skip-gram và CBOW là hai phương pháp trong Word2Vec dé tạo ra các vector nhúng từ Sự khác biệt chính giữa chúng là trong Skip-gram,
38 mô hình cố gắng dự đoán các từ xung quanh từ trung tam, trong khi CBOW cố gắng dự đoán từ trung tâm dựa trên các từ xung quanh.
Tiền xử lí dữ liệu với CodeBẳBRT
Quá trình nhúng (embedding) của CodeBERT [3| là quá trình chuyển đổi mã nguồn mã hóa ngôn ngữ lập trình thành các vector số học có kích thước cố định. Đây là quá trình biểu diễn mã nguồn thành dạng số học để mô hình có thể hiểu và xử lý dữ liệu mã nguồn.
CodeBERT sử dụng mô hình Transformer để biểu diễn mã nguồn tương tự với BERT [1][2] Quá trình nhúng của CodeBERT bao gồm việc chia mã nguồn thành các token, nhúng các token này thành các veetor số học, thêm thông tin về phân đoạn và vị trí của các token trong mã nguồn.
Sau khi các từ đã được nhúng, CodeBERT sử dụng kiến trúc Transformer để xử lý chuỗi từ đã nhúng và xây dựng biểu diễn ngữ cảnh Các lớp attention trong Transformer được sử dụng để tập trung vào các thành phần quan trọng trong code, bao gồm các biến, hàm, cấu trúc điều khiển và mối quan hệ giữa chúng Các lớp attention giúp xác định mức độ quan trọng và tương tấc giữa các thành phần khác nhau trong mã nguồn.
Các vectơ biểu diễn của CodeBERT có khả năng giữ ngữ nghĩa từng từ trong không gian vectơ và bao gồm cả thông tin về ngữ cảnh xung quanh Điều này giúp CodeBERT hiểu được các mối quan hệ ngữ nghĩa và ngữ cảnh giữa các từ trong mã nguồn Cách nhúng (embedding) của CodeBERT bao gồm các bước sau (Hình 3.11): e Input: Đầu vào của CodeBERT là một đoạn văn bản được mã hóa dưới dạng các token Doan văn ban này sẽ được chia thành các token (từ hoặc phần từ) để được xử lý bởi mô hình. e Tokenization: Mã nguồn được chia thành các token nhỏ hơn, ví dụ như tên
Input [CLS] my dog is | cute || [SEP] he | likes | play |Í ##ing | [SEP]
Embeddings cis) Eny E bog E Eue Ei sep] Ene Elikes clay Evang E sep)
Embeddings | Ey EA Ea | Ea Ea Ea | Ep Es ES EB Es
Embeddings Eọ E; E; E, E, Es Es E; Eg E, Exo
Hình 3.11: Biéu diễn cách embedding của CodeBERT. biến, tên hàm, từ khóa, toán tử, v.v Các token này thường có độ dài cố định và được biểu diễn bằng các mã số hoặc véc-tơ Quá trình này có thể sử dụng các phương pháp như lexical analysis hoặc syntax analysis để tạo ra các token.
Token Embeddings: Các token được nhúng vào không gian vector Mỗi token được biểu diễn bằng một vector số học có kích thước cố định Quá trình nhúng này có thể sử dụng các phương pháp như Word2Vec, GloVe hoặc
Transformers để tao ra các vector nhúng.
Segment Embeddings: CodeBERT sử dung segment embeddings để phân biệt giữa các phan khác nhau trong mã nguồn, chang han như phân biệt g1ữa mã nguồn trong hàm chính và các phan mã khác Segment embeddings cung cấp cho mô hình thông tin về cấu trúc và ngữ cảnh của mã nguồn.
Position Embeddings: Các position embeddings được sử dụng để biểu diễn vị trí của các token trong mã nguồn Như mã nguồn thường có thứ tự và vị trí cụ thể của các token có ý nghĩa, position embeddings giúp mô hình nhận biết và học được thông tin về vị trí của các token trong câu.
Sau khi có được các nhúng (embeddings) của mã nguồn, các vector này có thể được đưa vào mô hình CodeBERT để thực hiện các tác vụ như phân loại, gan nhãn hoặc dự đoán lỗ hổng phần mềm Mô hình CodeBERT sẽ học cách sử dụng thông tin từ các embeddings để thực hiện các tác vụ này.
Qua việc kết hợp các thành phần Token Embeddings, Segment Embeddings va Position Embeddings, CodeBERT có khả năng hiểu ngữ nghĩa, vị trí và ngữ cảnh của từng token trong mã nguồn một cách toàn diện.
CHUONG 4 KET QUA VA THAO LUAN
O chương này chúng tôi tiến tạo môi trường, cài đặt và đưa ra các tiêu chí đánh giá về mức độ hiệu quả của mô hình.
Hệ thống phát hiện lỗ hong phần mềm của nhóm được thực hiện trên môi trường Google Colab với cau hình RAM là 12GB, GPU RAM 16GB va dung lượng disk 80GB Ngoài ra, ngôn ngữ chính được sử dụng để xây dựng hệ thống là Python 3.10.12.
4.2 Setup mô hình đánh giá
Dưới đây là các thông số, các hàm, sử dụng trong nghiên cứu: e loss— categorical_ crossentropy' e optimizer = Adamax(learning_ rate=0.002) e batch_ size = 16 e epochs = 30
4.3 Thong số để đánh giá mô hình
Nhóm nghiên cứu sử dụng các chỉ số được sử dụng rộng rãi là false positive rate(FPR), false negative rate (FNR), true positive rate(TPR) hoặc Recall (R),
Precision (P) và F1 score (F1) để đánh giá các hệ thống phát hiện lỗ hong Goi
TP là số mẫu có lỗ hồng được phát hiện chính xác, FP là số mẫu không có lỗ hổng nhưng được đánh dấu là có 16 hồng, FN là số mẫu có lỗ hồng thực sự nhưng hệ thống không phát hiện ra và TN là số mẫu không có lỗ hồng thật Tỷ lệ dương tinh giả được tính với Công thức (4.1), đo lường tỷ lệ lỗ hong dương tính giả trên toàn bộ mẫu không chứa lỗ hồng.
Ty lệ âm tính giả do lường tỷ lệ lỗ hong âm tính giả trên toàn bộ mau chứa lỗ hong, được tính như Công thức x.x.
Ty lệ dương tinh that (TPR) hoặc độ phủ (R) do lường tỷ lệ lỗ hổng dương tính đúng trên tổng số mẫu chứa 16 hồng, đồng thời lưu ý rằng TPR = 1 FNR.
TPR= 7p FN (4.3) TP Độ chính xác đo lường tính chính xác của các lỗ hong được phát hiện.
Số điểm F1 xem xét cả độ chính xác và độ phủ.
Lý tưởng nhất là hệ thống phát hiện lỗ hong không bỏ sót lỗ hổng (tức là FNR
= 0 và TPR = 1) cũng như không kích hoạt cảnh báo sai (tức là FPR = 0 và P
= 1), nghĩa là F1 = 1 Tuy nhiên, đây là khó đạt được trong thực tế và thường buộc người ta phải đánh đổi tính hiệu quả theo một thước đo này để lấy hiệu quả xét theo một thước đo khác Trong nghiên cứu này, nhóm nghiên cứu hướng đến việc đạt được FNR va FPR thấp.
Nhóm nghiên cứu sử dụng bộ dataset của SySeVR [8]! vì bộ dataset này khá lớn và bao gồm nhiều mẫu lỗ hồng liên quan đến lệnh gọi hàm, sử dụng mảng, sử dụng con trỏ và biểu thức số học, tạo sự đa dạng cho việc huấn luyện mô hình.