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

Trong bối cảnh an ninh mạng hiện nay, các phần mềm độc hại (malware) liên tục gia tăng về số lượng lẫn biến thể, đồng thời áp dụng nhiều kỹ thuật tinh vi nhằm qua mặt các hệ thống phòng thủ. Phần lớn các giải pháp phòng chống mã độc truyền thống hiện nay hoạt động dựa trên phương pháp nhận dạng đặc trưng (signature-based) của các mẫu mã độc đã được phân tích từ trước. Hạn chế cốt lõi của hướng tiếp cận này là các tác giả mã độc có thể dễ dàng khai thác các lỗ hổng Zero-day (0-day) hoặc thực hiện chỉnh sửa, làm biến dạng mã nguồn cũ để tạo ra các biến thể mới mang chữ ký hoàn toàn khác biệt, từ đó đánh lừa hệ thống bảo vệ. Để khắc phục hạn chế này, các hướng nghiên cứu hiện đại chứng minh rằng việc phân tích các phân đoạn mã lệnh (opcode sequences) có khả năng nhận diện hiệu quả các phần mềm độc hại chưa từng được nhận diện trước đó.

Khóa luận tốt nghiệp của tác giả Nguyễn Dương Hoàng Duy (ngành Kỹ thuật Phần mềm, Trường Đại học Công nghệ Thông tin – ĐHQG TP.HCM, dưới sự hướng dẫn của ThS. Mai Trọng Khang) được thực hiện nhằm giải quyết các nhiệm vụ và mục tiêu nghiên cứu cụ thể:

  1. Tìm hiểu các kỹ thuật phân tích phần mềm độc hại ở định dạng tập tin Portable Executable (PE) trên hệ điều hành Windows với kiến trúc dòng vi xử lý x86.
  2. Xây dựng bộ dữ liệu mã độc trích xuất từ bộ dữ liệu BIG2015 và VX Heavens với định dạng tinh gọn hơn, cùng bộ dữ liệu mã sạch từ hệ thống thực tế.
  3. Xây dựng đồ thị luồng điều khiển (Control Flow Graph - CFG) với các cải tiến về mặt kỹ thuật nhằm đảm bảo luồng thực thi của chương trình được duy trì thông suốt.
  4. Rút trích và biểu diễn các đặc trưng dựa trên mã lệnh kết hợp lý thuyết đồ thị (n-gram, TF-IDF, Page-Rank) và áp dụng kỹ thuật giảm chiều dữ liệu Principal Component Analysis (PCA).
  5. Huấn luyện và đánh giá thực nghiệm 14 phương pháp máy học có giám sát trên tập đặc trưng đã xây dựng để phân loại nhị phân mã sạch và mã độc.
  6. Hiện thực hóa ứng dụng hoàn chỉnh hỗ trợ các tính năng tự động thu thập dữ liệu, huấn luyện mô hình, quét tập tin và quét tiến trình đang hoạt động trong hệ thống.

Về đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Cấu trúc phân đoạn mã lệnh (.text section) trong các tập tin thực thi Portable Executable (PE), các kỹ thuật trích xuất đặc trưng opcode và các thuật toán máy học phân lớp nhị phân phát hiện phần mềm độc hại.
  • Phạm vi không gian và hệ thống: Các tập tin thực thi PE 32-bit trên nền tảng hệ điều hành Microsoft Windows kiến trúc x86.
  • Phạm vi dữ liệu: Dữ liệu mã độc thu thập từ cuộc thi Microsoft Malware Classification Challenge (BIG2015) trên Kaggle và kho mã độc VX Heavens; dữ liệu mã sạch được thu thập từ hệ điều hành Windows 10 (bản dựng 1703 64-bit) và 30 phần mềm ứng dụng thông dụng.

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

Khóa luận thiết lập nền tảng dựa trên các lý thuyết nền tảng về cấu trúc tệp thực thi, lý thuyết đồ thị và học máy có giám sát:

  • Cấu trúc tập tin Portable Executable (PE): Tập tin PE tuân theo định dạng Common Object File Format (COFF) chuẩn hóa bởi Microsoft, bao gồm MS-DOS Header (chứa dấu hiệu nhận biết e_magic mang giá trị MZ\0\0 tương ứng 4 byte 0x4D, 0x5A, 0x00, 0x00 và độ lệch e_lfanew trỏ đến PE Header), PE Header (chứa chữ ký PE\0\0 0x50, 0x45, 0x00, 0x00, File Header, Optional Header), Section Table và các phân vùng dữ liệu: .text (phân vùng mã lệnh thực thi chương trình), .data (dữ liệu khởi tạo), .idata (Import Table chứa hàm liên kết động), .edata (Export Table chứa hàm xuất cho chương trình khác), .rdata (Resource) và .reloc (Relocation Table phục vụ tái định vị địa chỉ). Đề tài tập trung toàn bộ vào việc khai thác phân vùng thực thi .text.
  • Lý thuyết đồ thị và thuật toán duyệt: Sử dụng đơn đồ thị có hướng $G = (V, E)$ để biểu diễn dòng chảy chương trình. Đồ thị được lưu trữ dưới dạng danh sách kề (Adjacency List) nhằm tối ưu bộ nhớ $O(|V| + |E|)$. Áp dụng thuật toán tìm kiếm theo chiều sâu (Depth-First Search - DFS) và tìm kiếm theo chiều rộng (Breadth-First Search - BFS) với độ phức tạp $O(\max(|V|, |E|))$ trên cấu trúc danh sách kề để phân tích và truy vết đường đi.
  • Khung lý thuyết học máy: Áp dụng bài toán phân lớp nhị phân (Binary Classification) thuộc nhóm học máy có giám sát (Supervised Learning), gán nhãn dữ liệu thành hai lớp: lớp 0 (mã sạch) và lớp 1 (mã độc). Các phương pháp đánh giá sử dụng ma trận quyết định (Confusion Matrix), các chỉ số True Positive (TP), True Negative (TN), False Positive (FP), False Negative (FN), độ chính xác (Accuracy), Precision, Recall, F1-score, đường cong ROC (Receiver Operating Characteristic) và diện tích dưới đường cong AUC (Area Under the Curve).

Phương pháp nghiên cứu thực tế bao gồm:

  • Phân tích tĩnh và phân giải mã máy: Sử dụng thư viện Capstone Engine để dịch ngược các tập tin PE thành chuỗi chỉ thị Assembly (Address, Opcode value, Opcode name, Operands). Đối với dữ liệu định dạng .asm, sử dụng các kỹ thuật xử lý chuỗi để bóc tách byte thực thi thuộc phân vùng .text trước khi đưa qua Capstone Engine.
  • Xây dựng biểu diễn đồ thị luồng điều khiển (CFG): Xây dựng thuật toán tạo lập CFG với các cơ chế bổ sung đỉnh đại diện thanh ghi và kỹ thuật lính canh kết hợp truy vết ngược DFS để bảo toàn dòng chảy lệnh.
  • Trích xuất đặc trưng chuỗi và đồ thị: Khai thác n-gram (chuỗi n phần tử opcode liên tiếp), tần suất xuất hiện của từ Term Frequency (TF - chuẩn hóa với tần số tăng cường $K$), nghịch đảo tần suất tài liệu Inverse Document Frequency (IDF), kết hợp TF-IDF và thuật toán tính độ quan trọng đỉnh Page-Rank (PR với hệ số suy giảm $d = 0.85$).
  • Kỹ thuật giảm chiều dữ liệu: Sử dụng phân tích thành phần chính (Principal Component Analysis - PCA) nhằm loại bỏ nhiễu từ các đặc trưng có tần suất xuất hiện thấp.
  • Nguồn dữ liệu thực nghiệm:
    • Bộ dữ liệu mã độc: Cuộc thi BIG2015 của Microsoft (16.890 mẫu thuộc 9 chủng mã độc dưới dạng tập tin IDA .asm) và tập dữ liệu VX Heavens (chọn lọc 1.145 mẫu PE x86 từ 2.584 mẫu ban đầu). Tổng số mẫu mã độc không trùng lặp thu được là 18.035 mẫu.
    • Bộ dữ liệu mã sạch: 6.013 mẫu không trùng lặp trích xuất từ thư mục %Windows% của hệ điều hành Windows 10 phiên bản 1703 64-bit và từ thư mục cài đặt (%ProgramFiles%, %ProgramData%, %UserProfile%) của 30 phần mềm thông dụng: AIMP, Any Video Converter, Audacity, BlueStacks App Player, Driver Easy, Free Download Manager, FxSound Enhancer, GIMP, Google Chrome, Google Earth Pro, ImgBurn, Internet Download Manager, IrfanView, iTunes, Java 8, Microsoft Edge, Microsoft OneDrive, Microsoft Teams, Mozilla Firefox, Opera, PotPlayer, SHAREit, Skype, TeamViewer, Microsoft Office 365, VLC media player, WhatsApp, Winamp, WinRAR, WordWeb.

Thiết kế và triển khai

Hệ thống được thiết kế theo quy trình khép kín gồm 4 bước kỹ thuật: Thu thập dữ liệu $\rightarrow$ Rút trích đặc trưng $\rightarrow$ Xây dựng mô hình máy học $\rightarrow$ Kiểm thử và đóng gói ứng dụng.

Thiết kế thuật toán Control Flow Graph (CFG) cải tiến

Mỗi chỉ thị trong chương trình được xem là một đỉnh trong đồ thị có hướng $G = (V, E)$. Một chương trình có $n$ lệnh sẽ tạo ra đồ thị có số lượng đỉnh $|V| = n + 15$. Trong đó, 15 đỉnh được bổ sung thêm gồm có 1 đỉnh đặc biệt $X$ (đại diện cho đích nhảy không xác định) và 14 đỉnh đặc biệt $Y(reg)$ tương ứng với 14 loại thanh ghi của kiến trúc x86.

Thứ tự Loại thanh ghi trực thuộc Tên các thanh ghi cụ thể Mô tả chức năng
1 Accumulator eax, ax, ah, al Dùng cho thao tác I/O, tính toán số học
2 Base ebx, bx, bh, bl Dùng cho thao tác truy cập địa chỉ bộ nhớ
3 Counter ecx, cx, ch, cl Biến đếm trong vòng lặp và phép dịch bit
4 Data edx, dx, dh, dl Tương tự Accumulator, phối hợp nhân/chia
5 Stack Pointer esp, sp, spl Giữ địa chỉ đỉnh của vùng nhớ ngăn xếp (stack)
6 Stack Base Pointer ebp, bp, bpl Giữ địa chỉ nền của khung ngăn xếp
7 Source Index esi, si, sil Dùng cho các thao tác chuỗi/sao chép nguồn
8 Destination Index edi, di, dil Dùng cho các thao tác chuỗi/sao chép đích
9 Stack Segment ss Giữ địa chỉ phân đoạn ngăn xếp
10 Code Segment cs Giữ địa chỉ phân đoạn mã thực thi
11 Data Segment ds Giữ địa chỉ phân đoạn dữ liệu
12 Extra Segment es Dùng cho thao tác con trỏ xa (far pointer)
13 FS fs Phân đoạn bổ trợ xử lý dữ liệu hệ thống (far)
14 GS gs Phân đoạn bổ trợ xử lý dữ liệu hệ thống (far)

Quy tắc sinh cạnh và duy trì luồng chạy:

  • Lệnh nhảy không điều kiện (jmp): Tạo 1 cạnh nối tới đỉnh có địa chỉ đích. Nếu không có địa chỉ cụ thể, trỏ đến đỉnh đặc biệt $X$. Nếu lệnh nhảy qua giá trị thanh ghi, trỏ đến đỉnh đặc biệt $Y(reg)$ tương ứng.
  • Lệnh rẽ nhánh có điều kiện: Hỗ trợ toàn bộ 31 loại lệnh rẽ nhánh x86 (jno, js, jns, je, jz, jne, jnz, jb, jnae, jc, jnb, jae, jnc, jbe, jna, ja, jnbe, jl, jnge, jge, jnl, jle, jng, jg, jnle, jp, jpe, jnp, jpo, jcxz, jecxz). Đỉnh này có 2 cạnh nối ra: 1 cạnh tới lệnh tuyến tính kế tiếp và 1 cạnh tới địa chỉ nhảy đến.
  • Lệnh gọi hàm (call): Tạo 1 cạnh nối đến đỉnh hàm đích được gọi, đồng thời lưu vết vào danh sách các lệnh call.
  • Lệnh trả về (ret): Áp dụng thuật toán DFS kết hợp kỹ thuật lính canh để duyệt ngược trên toàn bộ nhánh tìm lệnh call có đường dẫn đến, sau đó bổ sung cạnh nối từ ret đến lệnh tuyến tính nằm ngay sau lệnh call. Tác giả tích hợp thêm kỹ thuật "truy vết trực tiếp" đến đỉnh nhánh (đỉnh có bậc vào $> 1$) để tăng tốc quá trình duyệt ở các lần tiếp theo.
  • Các lệnh thông thường: Chỉ có duy nhất 1 cạnh nối tới lệnh tuyến tính kế tiếp.

Sau khi xây dựng CFG, miền giá trị của chuỗi mã lệnh rút trích nằm trong khoảng nguyên $[0, 270]$ (gồm 256 giá trị đại diện mã lệnh thực tế và 15 giá trị đại diện cho các đỉnh thanh ghi và đỉnh đặc biệt).

Thiết kế kiến trúc ứng dụng minh họa

Ứng dụng được hiện thực hóa với 5 giao diện chức năng chính:

  1. Giao diện thu thập dữ liệu (Data Collection): Cho phép nạp các tập tin PE từ thư mục hệ thống hoặc phần mềm để tự động bóc tách phân vùng .text và lưu trữ nhãn vào định dạng CSV.
  2. Giao diện huấn luyện mô hình (Model Training): Cho phép lựa chọn thuật toán, tùy biến các siêu tham số và chạy quy trình huấn luyện kiểm thử chéo 5-fold trên bộ dữ liệu đã tạo.
  3. Giao diện cài đặt mô hình (Model Settings): Thiết lập mô hình máy học tối ưu nhất làm bộ phân loại mặc định cho ứng dụng.
  4. Giao diện quét tập tin tĩnh (File Scanning): Cho phép người dùng chọn tập tin thực thi trên đĩa, ứng dụng phân rã opcode, tính toán đặc trưng và xuất kết luận mã sạch hoặc mã độc kèm xác suất.
  5. Giao diện quét tiến trình hệ thống (Process Scanning): Liệt kê danh sách các tiến trình đang thực thi trong bộ nhớ Windows, trích xuất mã thực thi từ bộ nhớ để đưa qua bộ phân lớp phát hiện tiến trình độc hại theo thời gian thực.

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

Chương 1: Giới thiệu tổng quan

Chương 1 trình bày tính cấp thiết của bài toán phát hiện phần mềm độc hại không xác định. Tác giả phân tích các nghiên cứu đã công bố trước đây:

  • Santos và cộng sự: Sử dụng đặc trưng tần suất thuật ngữ (TF) cho từng opcode kết hợp thuật toán bán giám sát Learning with Local and Global Consistency (LLGC).
  • Sun, Zhi và cộng sự: Sử dụng đặc trưng TF-IDF kết hợp phương pháp chọn lọc $k$ cặp mã lệnh có tần suất xuất hiện cao nhất để huấn luyện với các mô hình máy học kinh điển.
  • Manavi, Farnoush và cộng sự: Xây dựng ma trận kề biểu diễn các cặp lệnh n-gram ($n = 2$) và tối ưu hóa bằng thuật toán tiến hóa (Evolutionary Algorithms).
  • Anh Viet Phan và cộng sự: Xây dựng Control Flow Graph (CFG) để phân lớp chương trình vào 4 bài toán khác nhau bằng mạng nơ-ron tích chập (CNN). Từ đó, tác giả chỉ ra các điểm mới cần tập trung giải quyết: tối ưu hóa bộ dữ liệu mã độc từ BIG2015, cải tiến kỹ thuật dựng CFG đảm bảo luồng thực thi thông suốt, khảo sát diện rộng 14 mô hình phân lớp và xây dựng ứng dụng có tính năng tự động huấn luyện, quét tĩnh lẫn quét động tiến trình.

Chương 2: Các lý thuyết và kiến thức liên quan

Chương 2 cung cấp toàn bộ nền tảng toán học và kỹ thuật:

  • Khái niệm và phân loại máy học: Học không giám sát (Clustering, Association), học bán giám sát, học củng cố và học có giám sát (phân loại nhị phân, hồi quy).
  • Cơ sở lý thuyết của 14 thuật toán phân lớp: K-Nearest Neighbor (KNN), Support Vector Machine (SVM phân tách siêu phẳng với biên cực đại), Logistic Regression (hàm Sigmoid), Multi-layer Perceptron (MLP mạng nơ-ron nhiều tầng ẩn với hàm kích hoạt phi tuyến ReLU), Naive Bayes (định lý Bayes với giả định độc lập), Linear Discriminant Analysis (LDA) và Quadratic Discriminant Analysis (QDA), Decision Tree (DT), Random Forest (RF với kỹ thuật bootstrap và voting), Extra Trees, AdaBoost và Gradient Boosting.
  • Hệ thống chỉ số đánh giá: Accuracy, Confusion Matrix, ROC-AUC, Precision, Recall và F1-score (trung bình điều hòa).
  • Cơ sở lý thuyết đồ thị: Biểu diễn đồ thị bằng ma trận kề, danh sách cạnh, danh sách kề; thuật toán tìm kiếm DFS và BFS cùng độ phức tạp thuật toán.
  • Cấu trúc tập tin Portable Executable: Chi tiết cấu trúc MS-DOS Header, PE Header, Section Table và các phân vùng .text, .data, .idata, .edata, .rdata, .reloc.

Chương 3: Xây dựng mô hình máy học

Chương 3 trình bày chi tiết quy trình thực nghiệm:

  • Thu thập và chuẩn hóa bộ dữ liệu: Kết hợp 18.035 mẫu mã độc (16.890 mẫu từ BIG2015 và 1.145 mẫu từ VX Heavens) cùng 6.013 mẫu mã sạch từ hệ thống Windows và 30 ứng dụng. Sử dụng Capstone Engine để bóc tách phân vùng .text.
  • Rút trích đặc trưng: Triển khai giải thuật CFG cải tiến với 14 đỉnh thanh ghi x86 và kỹ thuật DFS lính canh xử lý ret/call. Trích xuất n-gram, TF, IDF, TF-IDF và Page-Rank; áp dụng PCA để giảm chiều không gian vector.
  • Huấn luyện mô hình: Phân chia 80% huấn luyện và 20% kiểm thử, kiểm định chéo 5-fold cross-validation. Tối ưu hóa siêu tham số bằng kỹ thuật tìm kiếm lưới trên từng thuật toán, tập trung tối đa hóa chỉ số Recall để tránh bỏ sót mã độc.

Chương 4: Đánh giá hệ thống

Chương 4 tập trung phân tích hiệu năng của các bộ phân lớp thông qua đường cong ROC, chỉ số diện tích dưới đường cong AUC trên từng fold kiểm định và hiển thị giao diện phần mềm hoàn chỉnh. Tác giả thực hiện đánh giá các thuật toán trên tập kiểm thử độc lập, chứng minh tính khả thi của giải pháp phân tích chuỗi mã lệnh và trình bày chi tiết các kịch bản thực thi trên ứng dụng máy trạm (quét tập tin PE và quét vùng nhớ tiến trình).

Chương 5: Kết luận và hướng phát triển

Chương 5 đúc kết các mục tiêu đã hoàn thành của đề tài: giải quyết triệt để bài toán trích xuất đặc trưng opcode từ tập tin PE thực tế, hiện thực thành công mô hình biểu diễn đồ thị CFG cải tiến không đứt đoạn, xác định mô hình máy học phù hợp nhất cho bài toán phát hiện mã độc và triển khai thành công ứng dụng thực nghiệm. Đồng thời, chương trình bày thẳng thắn các giới hạn về hạ tầng dữ liệu và đề xuất định hướng nghiên cứu mở rộng trong tương lai.


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

Kết quả định lượng thực nghiệm

Quy trình thực nghiệm được tiến hành trên tập dữ liệu tổng cộng 24.048 mẫu (tỷ lệ mất cân bằng giữa nhãn 1 và nhãn 0 được kiểm soát bằng việc ưu tiên độ đo Recall và F1-score thay vì Accuracy).

Nhóm dữ liệu Nguồn trích xuất Định dạng ban đầu Số lượng mẫu hợp lệ Nhãn lớp
Mã độc BIG2015 (Kaggle/Microsoft) Tập tin assembly (.asm) 16.890 mẫu 1
Mã độc VX Heavens Tập tin thực thi PE x86 1.145 mẫu (lọc từ 2.584) 1
Tổng mã độc — — 18.035 mẫu 1
Mã sạch Thư mục hệ thống %Windows% PE (.exe, .dll, .sys, ...) Trích xuất trực tiếp 0
Mã sạch 30 phần mềm người dùng PE trong %ProgramFiles%, ... Trích xuất trực tiếp 0
Tổng mã sạch — — 6.013 mẫu 0
Toàn bộ mẫu — — 24.048 mẫu —

Kết quả tinh chỉnh siêu tham số và đánh giá đường cong ROC qua 5-fold cross-validation trên các thuật toán tiêu biểu:

  • K-Nearest Neighbor (KNN): Bộ siêu tham số tối ưu {'metric': 'euclidean', 'n_neighbors': 2, 'weights': 'uniform'} đạt diện tích dưới đường cong AUC lần lượt trên 5 fold là: Fold 0: 0.97; Fold 1: 0.97; Fold 2: 0.97; Fold 3: 0.93; Fold 4: 0.93. Giá trị Mean AUC đạt mức cao ổn định trên tập kiểm thử.
  • Support Vector Machine (SVM): Cấu hình tối ưu sử dụng hàm nhân RBF {'C': 100.1, 'kernel': 'rbf'} cho kết quả phân loại vượt trội với AUC qua các fold: Fold 0: 0.95; Fold 1: 0.96; Fold 2: 0.96; Fold 3: 1.00; Fold 4: 0.98.
  • Logistic Regression: Cấu hình chuẩn hóa đạt AUC qua các fold: Fold 0: 0.88; Fold 1: 0.95; Fold 2: 0.94; Fold 3: 0.96; Fold 4: 0.98.
  • Mạng nơ-ron Multi-layer Perceptron (MLP): Thiết lập tối ưu gồm 1 tầng ẩn với 7 nơ-ron và hàm kích hoạt ReLU {'activation': 'relu', 'hidden_layer_sizes': (7,)} đạt AUC qua các fold rất đồng đều: Fold 0: 0.98; Fold 1: 0.98; Fold 2: 0.97; Fold 3: 0.98; Fold 4: 0.98.

Đóng góp khoa học và giải pháp đề xuất

  • Đóng góp so với các nghiên cứu trước: Khác với nghiên cứu của Santos hay Sun Zhi vốn chỉ phân tích tần suất chuỗi opcode tuyến tính đơn thuần, tác giả đã kết hợp cấu trúc dòng chảy lệnh dạng đồ thị CFG để nắm bắt được ngữ cảnh thực thi thực tế. So với mô hình CFG truyền thống của Anh Viet Phan, giải pháp của đề tài đã giải quyết được hiện tượng gãy luồng thực thi khi gặp các lệnh nhảy gián tiếp và lệnh gọi hàm phức tạp nhờ việc bổ sung 14 đỉnh thanh ghi và thuật toán truy vết ngược call/ret.
  • Giải pháp công nghệ: Đề xuất quy trình chuyển đổi thống nhất từ mã nhị phân PE và mã hợp ngữ .asm về chuỗi số nguyên opcode trên miền $[0, 270]$, kết hợp trích xuất đặc trưng Page-Rank trên đồ thị và n-gram/TF-IDF trên chuỗi văn bản, sau đó tinh gọn số chiều bằng PCA trước khi đưa vào bộ phân loại.
  • Sản phẩm ứng dụng: Xây dựng phần mềm hoàn chỉnh chạy trên môi trường Windows hỗ trợ trực quan hóa toàn bộ quy trình từ khâu chuẩn bị dữ liệu, huấn luyện mô hình máy học đến tính năng phân tích tĩnh tập tin và rà soát tiến trình bộ nhớ.

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

Dựa trên phạm vi kỹ thuật và các nội dung được văn bản đề cập, nghiên cứu tồn tại một số hạn chế và hướng mở:

  • Hạn chế của đề tài:

    • Nghiên cứu chỉ tập trung giải quyết bài toán trên các tập tin thực thi Portable Executable (PE) 32-bit của hệ điều hành Windows với kiến trúc vi xử lý dòng x86, chưa mở rộng phân tích chuyên sâu cho các tập tin thực thi 64-bit (x64) hoặc các hệ điều hành khác (như ELF trên Linux, Mach-O trên macOS).
    • Phương pháp phân tích dựa trên phân vùng thực thi .text. Trong trường hợp mã độc sử dụng các kỹ thuật nén vỏ bọc phức tạp (packing), mã hóa đa hình (polymorphic) hoặc kỹ thuật làm rối mã nguồn ở mức độ cao (obfuscation) mà không thể giải nén tự động về mã gốc, luồng opcode trích xuất sẽ bị sai lệch so với hành vi thực tế.
    • Quá trình xây dựng CFG và thực hiện thuật toán DFS truy vết ngược kết hợp tính toán Page-Rank đòi hỏi tài nguyên tính toán đáng kể khi kích thước tập tin hoặc số lượng lệnh thực thi quá lớn.
  • Hướng phát triển trong tương lai:

    • Mở rộng tập dữ liệu huấn luyện và kiểm thử với các biến thể mã độc mới hơn, bao gồm cả kiến trúc x64 và các định dạng tập tin kịch bản/thực thi khác.
    • Tích hợp thêm các mô-đun phát hiện packer và tự động giải nén (unpacking) trước khi trích xuất chuỗi mã lệnh.
    • Tối ưu hóa thuật toán duyệt đồ thị luồng điều khiển và phân tích song song đa luồng nhằm rút ngắn thời gian quét tập tin và giám sát bộ nhớ thời gian thực.

Giá trị tham khảo

Báo cáo khóa luận là tài liệu học thuật có cấu trúc mẫu mực, hữu ích cho:

  • Sinh viên, học viên ngành Kỹ thuật Phần mềm, An toàn Thông tin và Khoa học Máy tính: Cung cấp tài liệu tham khảo chi tiết từ lý thuyết cấu trúc tệp nhị phân Windows PE, kỹ thuật dịch ngược bằng Capstone Engine đến cách ánh xạ một chương trình thực thi thành đồ thị toán học CFG.
  • Người nghiên cứu các đề tài ứng dụng Trí tuệ nhân tạo trong An toàn mạng: Có thể tham khảo phương pháp xử lý dữ liệu mất cân bằng, kỹ thuật biểu diễn vector đặc trưng kết hợp giữa xử lý ngôn ngữ tự nhiên (n-gram, TF-IDF) và cấu trúc liên kết mạng (Page-Rank), cùng quy trình kiểm định chéo 5-fold chặt chẽ.
  • Lập trình viên phát triển công cụ an ninh: Tham khảo mã giả và kiến trúc thiết kế mô-đun của ứng dụng máy trạm trong việc tương tác trực tiếp với API hệ thống Windows để kiểm tra mã thực thi của các tiến trình đang chạy trong bộ nhớ RAM.

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

1. Tại sao trong thuật toán xây dựng đồ thị luồng điều khiển (CFG), đồ thị lại có số đỉnh $|V| = n + 15$ thay vì chỉ bằng số lệnh $n$?
Bên cạnh $n$ lệnh thực thi trong chương trình (mỗi lệnh là một đỉnh), tác giả chủ động bổ sung thêm 15 đỉnh đặc biệt nhằm đảm bảo tính liên tục của luồng điều khiển: gồm 1 đỉnh đặc biệt $X$ (đại diện cho đích nhảy không xác định) và 14 đỉnh đặc biệt $Y(reg)$ tương ứng với 14 loại thanh ghi của kiến trúc x86 (Accumulator, Base, Counter, Data, Stack Pointer, Stack Base Pointer, Source Index, Destination Index, Stack Segment, Code Segment, Data Segment, Extra Segment, FS, GS) khi chương trình thực hiện các lệnh nhảy gián tiếp thông qua thanh ghi.

2. Tác giả đã xử lý cặp lệnh call và ret như thế nào để đồ thị CFG không bị đứt gãy luồng thực thi?
Do lệnh call mang tính chất gọi hàm khứ hồi và trả về thông qua lệnh ret, tác giả lưu lại danh sách các lệnh call trong quá trình duyệt. Khi gặp lệnh ret, hệ thống sử dụng thuật toán tìm kiếm theo chiều sâu (DFS) kết hợp kỹ thuật lính canh để truy vết ngược trên toàn bộ nhánh tìm ra lệnh call đã gọi nó, sau đó bổ sung một cạnh nối trực tiếp từ đỉnh ret đến lệnh tuyến tính nằm ngay sau lệnh call tương ứng. Tác giả cũng bổ sung thêm kỹ thuật "truy vết trực tiếp" đến các đỉnh nhánh có bậc vào lớn hơn 1 để đẩy nhanh tốc độ duyệt.

3. Tại sao khóa luận sử dụng độ đo Precision, Recall và F1-score để tinh chỉnh siêu tham số thay vì dựa vào độ chính xác (Accuracy)?
Bộ dữ liệu nghiên cứu có sự chênh lệch lớn về mặt số lượng giữa hai lớp: 18.035 mẫu mã độc (nhãn 1) so với chỉ 6.013 mẫu mã sạch (nhãn 0). Trong điều kiện tập dữ liệu mất cân bằng, độ đo Accuracy không phản ánh chính xác chất lượng mô hình. Đồng thời, đối với bài toán an ninh phát hiện mã độc, mục tiêu tối thượng là hạn chế tối đa việc bỏ sót mã độc (giảm False Negative), do đó chỉ số Recall và F1-score được lựa chọn làm tiêu chí ưu tiên hàng đầu để tối ưu hóa.

4. Khóa luận đã thử nghiệm bao nhiêu thuật toán máy học và mô hình nào đạt hiệu năng cao qua kiểm định ROC-AUC?
Nghiên cứu đã tiến hành khảo sát và hiệu chỉnh siêu tham số trên 14 thuật toán phân lớp có giám sát. Trong đó, mô hình Support Vector Machine (sử dụng hàm nhân RBF, $C = 100.1$) và mạng nơ-ron Multi-layer Perceptron (1 tầng ẩn gồm 7 nơ-ron, hàm kích hoạt ReLU) đạt hiệu năng cao nhất và ổn định nhất, với giá trị diện tích dưới đường cong AUC qua cả 5 fold kiểm định chéo đều đạt mức từ 0.95 đến 1.00.

5. Ứng dụng minh họa của khóa luận cung cấp các chức năng cụ thể nào trên hệ thống máy tính người dùng?
Ứng dụng minh họa được xây dựng hoàn chỉnh với 5 mô-đun chức năng giao diện: (1) Thu thập bộ dữ liệu mã thực thi từ các thư mục hệ thống/phần mềm; (2) Tự động huấn luyện mô hình máy học với các tùy biến tham số; (3) Cài đặt mô hình phân lớp mặc định cho hệ thống; (4) Quét phân tích tĩnh các tập tin PE lưu trữ trên đĩa; (5) Quét phân tích động các tiến trình đang hoạt động trong bộ nhớ RAM của hệ điều hành Windows.


Kết luận

Khóa luận tốt nghiệp của tác giả Nguyễn Dương Hoàng Duy đã giải quyết trọn vẹn bài toán phát hiện phần mềm độc hại không xác định trên hệ điều hành Windows x86 thông qua kỹ thuật phân tích chuỗi mã lệnh và đồ thị luồng điều khiển CFG cải tiến. Bằng việc kết hợp hiệu quả các đặc trưng opcode, Page-Rank và giảm chiều dữ liệu PCA trên tập mẫu thực nghiệm lớn gồm 24.048 mẫu, nghiên cứu đã chứng minh các mô hình máy học như SVM và MLP đạt độ chính xác và chỉ số AUC vượt trội. Hệ thống không chỉ dừng lại ở mặt lý thuyết thực nghiệm mà còn được hoàn thiện thành một ứng dụng có giao diện trực quan, đáp ứng đầy đủ các yêu cầu quét tập tin tĩnh và giám sát tiến trình hệ thống trong thực tế.