Công cụ phát hiện mã độc từ mã nguồn mở bằng phương pháp học sâu

A Deep Learning-Based Tool for Detecting Malware in Open Source Code

Sự phổ biến của các hệ sinh thái mã nguồn mở, đặc biệt là Python và PyPI (Python Package Index), đã đem lại nhiều lợi ích to lớn cho cộng đồng lập trình và phát triển phần mềm. Tuy nhiên, điều này cũng mở ra cơ hội cho kẻ tấn công lợi dụng để phát tán mã độc một cách dễ dàng và nhanh chóng. Các phương pháp phát hiện mã độc truyền thống chủ yếu dựa vào chữ ký và các quy tắc cố định đang dần bộc lộ rõ hạn chế, đặc biệt khi đối mặt với các kỹ thuật tấn công phức tạp như làm rối mã (obfuscation), tải payload từ xa, che giấu mã độc trong hình ảnh, và các chiến thuật thực thi đa giai đoạn (multi-stage)
Trước thực trạng đó, khóa luận này nghiên cứu và đề xuất một mô hình học sâu nhằm phát hiện hiệu quả mã độc trong các dự án phần mềm mã nguồn mở Python. Cụ thể, luận văn đã tập trung vào việc xử lý mã nguồn thông qua biểu diễn cây cú pháp trừu tượng (AST – Abstract Syntax Tree), nhằm khai thác các đặc trưng ngữ nghĩa và cấu trúc sâu sắc của đoạn mã. Các node trong cây AST được ánh xạ thành các vector số học bằng kỹ thuật Skip-gram thuộc nhóm Word2Vec. Kỹ thuật embedding này cho phép mô hình học sâu hiểu rõ mối quan hệ ngữ nghĩa giữa các thành phần trong mã nguồn, từ đó nâng cao khả năng phát hiện các mẫu mã độc tiềm ẩn.
Sau bước embedding, luận văn sử dụng mô hình BiLSTM (Bidirectional Long ShortTerm Memory) để huấn luyện và phân loại các đoạn mã thành hai nhóm: mã độc hoặc mã an toàn. BiLSTM được lựa chọn vì khả năng đặc biệt hiệu quả trong việc xử lý các chuỗi dữ liệu phức tạp và có tính tuần tự cao như mã nguồn. Nhờ cấu trúc hai chiều, BiLSTM có thể đọc và phân tích dữ liệu embedding theo cả hướng thuận và ngược, từ đó nắm bắt đầy đủ các đặc điểm ngữ nghĩa và cấu trúc quan trọng.
Tập dữ liệu thực nghiệm được xây dựng kỹ lưỡng, gồm các mẫu mã nguồn Python từ PyPI và các nguồn dữ liệu uy tín khác, trong đó có sự đa dạng về hành vi và kỹ thuật tấn công như điều khiển từ xa, đánh cắp thông tin, thực thi mã động, thực thi lệnh độc hại, và thao tác tệp trái phép. Ngoài ra, luận văn cũng đặc biệt chú trọng vào phân tích các kỹ thuật né tránh mà kẻ tấn công sử dụng để vượt qua các công cụ phát hiện hiện tại, giúp mô hình được huấn luyện một cách toàn diện và hiệu quả hơn.
Kết quả thực nghiệm cho thấy, mô hình đề xuất đạt hiệu quả cao với các chỉ số đánh giá như Accuracy, Loss, Log Loss và ROC AUC đều ở mức khả quan. Điều này chứng tỏ khả năng tổng quát hóa tốt của mô hình, có thể phát hiện chính xác các biến thể mã độc mới chưa từng gặp trước đó.
Khóa luận không chỉ góp phần nâng cao khả năng phát hiện mã độc cho cộng đồng phát triển phần mềm mã nguồn mở, mà còn cung cấp một quy trình rõ ràng và hiệu quả để ứng dụng các kỹ thuật học sâu tiên tiến vào lĩnh vực an toàn thông tin. Trong tương lai, nghiên cứu này có thể mở rộng hơn nữa bằng cách tích hợp vào các công cụ hỗ trợ lập trình viên và xây dựng các hệ thống kiểm tra mã nguồn tự động, giúp tăng cường an ninh cho hệ sinh thái mã nguồn mở ngày càng phát triển mạnh mẽ

Xem toàn văn báo cáo tại:

Tổng quan

PyPI là một ví dụ về một hệ sinh thái mã nguồn mở đang phát triển nhanh chóng và trở thành nền tảng không thể thiếu trong cộng đồng Python hiện nay. Trong nhiều lĩnh vực, việc sử dụng các gói thư viện mã nguồn mở thúc đẩy tính sáng tạo, đồng thời giảm chi phí và tăng tốc độ phát triển mã nguồn. Mặc dù mã nguồn mở mang lại nhiều lợi ích to lớn như thế, nhưng sự phổ biến của nó cũng mang lại nhiều rủi ro bảo mật do các đối tượng tấn công ngày càng tinh vi, lợi dụng sự tin cậy của cộng đồng để chèn mã độc vào các gói thư viện, khiến người dùng khó phát hiện và dễ bị tấn công chuỗi cung ứng phần mềm. Khi ghi nhận rằng hàng nghìn gói mã độc vẫn tồn tại và phát tán rộng rãi trên các kho lưu trữ và máy chủ mirror trên toàn cầu, các nghiên cứu thực nghiệm gần đây đã chứng minh tầm quan trọng và mức độ nghiêm trọng của vấn đề này. Đáng chú ý là hơn 74% các gói mã độc này xâm nhập hệ thống người dùng thông qua quá trình cài đặt từ mã nguồn[1], chủ yếu nhắm đến các hệ điều hành phổ biến như Linux. Bên cạnh đó các phương pháp phát hiện truyền thống gặp khó khăn vì các kỹ thuật che giấu, né tránh kiểm tra và các hành vi tấn công đa dạng như đánh cắp thông tin, thực thi lệnh trái phép, backdoor,…Hiện tại, phần lớn các công cụ phát hiện mã độc sử dụng quy tắc thủ công hoặc phân tích tĩnh để xác định các kỹ thuật tấn công mới. Điều này khiến khó theo kịp tốc độ phát triển của mã độc dẫn đến hiệu quả phòng thủ của cộng đồng mã nguồn mở bị suy giảm do tỷ lệ cảnh báo sai cao và sự phụ thuộc lớn vào chuyên gia phân tích. Do đó, để cải thiện năng lực phòng thủ, cần phải nghiên cứu và áp dụng các phương pháp hiện đại như học sâu (deep learning). Các phương pháp này sử dụng ưu thế tự động học đặc trưng và xác định các mẫu tấn công phức tạp trên dữ liệu thực tế. Các mô hình học sâu có cơ hội tiếp cận nguồn dữ liệu đa dạng, phong phú và bám sát thực tiễn tấn công hiện
nay, đặc biệt nhờ sự ra đời của các bộ dữ liệu quy mô lớn, được xây dựng và xác thực từ các nghiên cứu thực nghiệm quốc tế. Điều này mở ra một cách tiếp cận mới cho việc tạo ra các công cụ tự động và hiệu quả, giúp bảo vệ toàn bộ hệ sinh thái phần mềm mã nguồn mở.

Xuất phát từ những lý do trên, đề tài “Công cụ phát hiện mã độc từ mã nguồn mở bằng phương pháp học sâu” phát triển một giải pháp hiện đại, tự động và hiệu quả, nhằm hỗ trợ nhà phát triển và cộng đồng phòng chống các nguy cơ mã độc, bảo vệ sự an toàn và bền vững cho hệ sinh thái phần mềm mã nguồn mở.

Phạm vi và đối tượng nghiên cứu

Phạm vi nghiên cứu bao gồm thu thập và phân tích 2 bộ dữ liệu khác nhau được viết bằng Python với các đặc điểm mã nguồn chung và mã độc. Bộ dữ được phân loại và gán nhãn thành mã lành và mã độc, sau đó được xử lý và trích xuất tính năng để phục vụ cho mô hình học sâu.

Luận văn bao gồm các chủ đề nghiên cứu chính sau:

  • Các hành vi và kỹ thuật mã độc bao gồm điều khiển từ xa, đánh cắp dữ liệu, thực thi mã động, thực thi lệnh độc hại và thao tác tệp trái phép.
  • Các phương pháp né tránh phát hiện điển hình bao gồm làm rối mã, tải payload bên ngoài, tấn công nhiều giai đoạn, import gián tiếp, che giấu mã độc trong hình ảnh và vượt qua sandbox.
  • Cây cú pháp trừu tượng (AST) được sử dụng để biểu diễn cấu trúc mã nguồn; để trích xuất đặc trưng ngữ nghĩa và tuần tự, các node AST được gắn vào mô hình Skip-gram.
  • Phát hiện và phân loại mã độc tự động sử dụng mô hình học sâu tuần tự ASTBiLSTM.

PHƯƠNG PHÁP THỰC HIỆN

Đề xuất luồng xây dựng mô hình

Quy trình xây dựng mô hình phát hiện mã độc được minh họa trong Hình 3.1 bao gồm 5 bước chính như sau:

  • Bước 1 – Thu thập và chuyển đổi dữ liệu:
    Các tập tin mã nguồn Python (.py) được thu thập từ PyPI và các kho lưu trữ khác. Mỗi tập tin được gán nhãn “benign” hoặc “malware” tùy theo tính chất hành vi. Sau đó, các tệp này được chuyển đổi sang dạng cây cú pháp trừu tượng (AST – Abstract Syntax Tree), từ đó trích xuất ra chuỗi các node và lưu dưới định dạng .csv. Mỗi node đại diện cho một thực thể cú pháp trong mã nguồn.
  • Bước 2 – Embedding node AST:
    Chuỗi node từ cây AST được đưa vào thuật toán Skip-gram (thuộc họ Word2Vec) để học biểu diễn vector cho mỗi node. Mục tiêu của embedding là ánh xạ các node cú pháp sang không gian số, sao cho các node có ngữ nghĩa tương đồng sẽ có vector gần nhau. Quá trình này giúp mô hình học sâu hiểu rõ hơn về mối liên hệ logic và ngữ nghĩa giữa các thành phần mã.
  • Bước 3 – Chuẩn bị dữ liệu huấn luyện:
    Các chuỗi vector embedding thu được từ bước 2 sẽ tạo thành đầu vào huấn luyện cho mô hình học sâu. Mỗi đoạn mã sẽ được biểu diễn dưới dạng một chuỗi các vector liên tiếp, phản ánh cấu trúc và ngữ cảnh logic của mã nguồn.
  • Bước 4 – Huấn luyện mô hình AST-LSTM:
    Chuỗi vector embedding được đưa vào mô hình LSTM (Long Short-Term Memory) hoặc BiLSTM để học và phân loại. Mô hình AST-LSTM có khả năng ghi nhớ các phụ thuộc ngữ nghĩa dài hạn trong chuỗi node, qua đó phân biệt các mẫu mã độc với mã an toàn. Mô hình sẽ được huấn luyện với tập dữ liệu đã gán nhãn để phân biệt hai lớp.
  • Bước 5 – Dự đoán và đánh giá:
    Sau khi huấn luyện, mô hình AST-LSTM có thể nhận đầu vào là một đoạn mã Python bất kỳ và trả về dự đoán “benign” hoặc “malware”. Hiệu quả mô hình được đánh giá thông qua các chỉ số như Accuracy, Precision, Recall, F1-score và ROC AUC.
image 88

Xây dựng và huấn luyện mô hình AST-LSTM để phân loại

Kiến trúc AST-LSTM được lựa chọn vì khả năng khai thác tốt đặc tính tuần tự của chuỗi các node trong AST. Đặc biệt, việc sử dụng vector embedding 128 chiều học trước bằng Skip-gram giúp mô hình tận dụng hiệu quả thông tin ngữ nghĩa và cấu trúc từ dữ liệu AST đã được tiền xử lý. Kiến trúc chính bao gồm các thành phần tuần tự như sau:

  • Embedding layer: Nhúng mỗi chỉ số node type thành vector 128 chiều, khởi tạo cố định từ ma trận embedding đã học (không fine-tune).
  • LSTM 2 tầng hai chiều: Nhận đầu vào kích thước (batch_size, seq_len, 128), sinh đầu ra (batch_size, seq_len, 512) (hidden_size=256 mỗi chiều, bidirectional).
  • Mean Pooling: Mean Pooling được sử dụng nhằm tổng hợp thông tin quan trọng nhất từ toàn bộ chuỗi các trạng thái ẩn LSTM, giúp tạo ra một biểu diễn cô đọng và hiệu quả, hạn chế độ nhiễu và khả năng overfitting. Tính trung bình trên chiều thời gian (seq_len) để gom toàn bộ thông tin chuỗi thành vector 512 chiều.
  • Fully Connected + BatchNorm + ReLU + Dropout: Các lớp Fully Connected kết hợp cùng Batch Normalization, hàm kích hoạt ReLU và Dropout được sử dụng để nâng cao khả năng biểu diễn, ổn định hóa quá trình huấn luyện, và giảm nguy cơ overfitting bằng cách cân bằng giữa hiệu suất huấn luyện và khả năng tổng quát hóa của mô hình.

o FC1: 512 → 256
o BatchNorm1d(256)
o ReLU
o Dropout(p=0.3)

  • FC2 (Output layer): 256 → 2 (nhị phân benign vs. malicious).
    Bảng tổng quan kiến trúc:
image 89

THỰC NGHIỆM, ĐÁNH GIÁ VÀ THẢO LUẬN

Chúng tôi đề xuất luồng xây dựng mô hình như sau:

image 91

Trước tiên, các gói Python được phân tích cú pháp và chuyển thành dạng cây cú pháp trừu tượng (AST). Từ AST, chuỗi node sẽ được trích xuất và ánh xạ thành vector bằng thuật toán Skip-gram (thuộc họ Word2Vec), giúp biểu diễn ngữ nghĩa của mã nguồn dưới dạng số học. Các vector đầu ra sẽ được đưa vào mô hình BiLSTM để nhận diện. Sau đó mô hình sẽ đưa ra dự đoán xem gói Python là mã độc hay an toàn.

Công cụ được phát triển nhằm hỗ trợ việc phân loại mã nguồn Python thành malware (mã độc) hoặc benign (mã lành). Quá trình xử lý và phát hiện mã độc được thiết kế để diễn ra hoàn toàn tự động, theo một chuỗi các bước tuần tự, giúp người dùng dễ dàng nhận diện các nguy cơ bảo mật trong mã nguồn mà không cần kiến thức chuyên sâu. Các bước chính trong quy trình bao gồm:

  • Phân tích cú pháp và chuyển đổi AST: Tập tin mã nguồn Python (.py) ban đầu được thu thập từ các gói PyPI hoặc thư mục do người dùng cung cấp. Các tập tin này sẽ được phân tích cú pháp để trích xuất cây Cú pháp Trừu tượng (AST). Cây AST giúp biểu diễn cấu trúc cú pháp sâu của mã nguồn, phản ánh logic điều khiển, các khối lệnh và cấu trúc lập trình. Mỗi node trong cây AST được ghi nhận và lưu trữ thành dạng chuỗi CSV, chuẩn hóa cho bước xử lý tiếp theo.
  • Biểu diễn vector bằng Word2Vec: Sau khi trích xuất AST, các node trong – cây được coi như các “token” trong ngữ cảnh xử lý ngôn ngữ tự nhiên. Các node này được nhúng (embedding) vào không gian vector thông qua thuật toán Skip-gram (Word2Vec). Việc này giúp ánh xạ các node AST thành các vector có ý nghĩa ngữ cảnh và cấu trúc. Đầu ra là một chuỗi các vector embedding, thể hiện đầy đủ ngữ nghĩa và quan hệ giữa các thành phần trong mã nguồn.
  • Phát hiện mã độc bằng mô hình AST-LSTM: Chuỗi vector embedding sau đó được đưa vào mô hình AST-LSTM – một biến thể của LSTM có khả năng học được mối quan hệ tuần tự và cấu trúc từ chuỗi node AST. Mô hình này được huấn luyện trên một tập dữ liệu đã gán nhãn sẵn (benign / malware), giúp công cụ học được đặc trưng mã độc một cách hiệu quả. Mô hình đầu ra trả về nhãn dự đoán cho mỗi tập tin, hiển thị rõ ràng kết quả cho người dùng.
  • Giao diện dòng lệnh và đầu ra trực quan: Công cụ hoạt động qua giao diện dòng lệnh. Người dùng chỉ cần chỉ định thư mục chứa mã nguồn Python, công cụ sẽ thực hiện toàn bộ pipeline từ tiền xử lý đến nhận diện mã độc. Mô hình hoàn chỉnh sẽ hoạt động theo trình tự: Phân tích cú pháp mã nguồn Python đầu vào thành cây AST, chuyển đổi thành chuỗi vector embedding để khai thác đầy đủ thông tin cấu trúc và ngữ nghĩa. Tiếp theo, chuỗi embedding này được đưa vào mô hình ASTLSTM để phân loại một cách chính xác mã độc và mã lành.

Sau khi hoàn tất quá trình phân tích, kết quả phân loại sẽ được hiển thị một cách trực quan, cho biết từng tập tin được kiểm tra là an toàn (benign) hay độc hại (malware). Điều này giúp người dùng nhanh chóng nhận diện và xử lý các mã nguồn có nguy cơ bảo mật.

Để minh họa khả năng hoạt động thực tế của công cụ, chúng tôi trình bày ba kịch bản sử dụng điển hình dưới đây.

Kịch bản 1

image 92

Kịch bản 2

image 93
image 94

Kịch bản 3

image 95

Kết luận

Bài nghiên cứu này tập trung vào việc phát triển và đánh giá một công cụ phân loại mã độc dựa trên mã nguồn Python, nhằm cải thiện hiệu quả trong phân tích và phát hiện các mẫu mã độc từ các tập tin nguồn mở. Quá trình phát triển công cụ bao gồm các bước chính như phân tích cú pháp để xây dựng cây Cú pháp Trừu tượng (AST), biểu diễn các thành phần mã nguồn dưới dạng vector embedding, và áp dụng mô hình AST-LSTM để phân loại mã độc và mã lành. Bài nghiên cứu cũng đánh giá kết quả của công cụ thông qua việc thử nghiệm trên các tập dữ liệu mẫu, đưa ra nhận định về độ chính xác và tính hiệu quả của phương pháp tiếp cận này trong việc phát hiện mã độc. Kết quả nghiên cứu cung cấp một cơ sở thực tiễn và cơ sở lý thuyết vững chắc cho việc áp dụng công nghệ này vào thực tế trong lĩnh vực an ninh thông tin và phần mềm.Đồng thời, bài nghiên cứu cũng đề xuất các hướng phát triển tiếp theo để nâng cao tính linh hoạt và khả năng ứng dụng của công cụ, như mở rộng hỗ trợ cho các ngôn ngữ lập trình khác, tối ưu hóa hiệu năng và thời gian xử lý, và tích hợp với quy trình CI/CD. Với những kết quả và đề xuất này, bài nghiên cứu cung cấp một đóng góp quan trọng và phản ánh sự tiến bộ trong lĩnh vực an ninh phần mềm, khuyến khích sự phát triển và ứng dụng của các công nghệ phân tích mã độc mới trong cộng đồng nghiên cứu và công nghiệp.

Hạn chế

Mặc dù nghiên cứu đã phát hiện được mã độc từ mã nguồn mở bằng cách sử dụng mô hình AST-BiLSTM, nhưng vẫn còn một số hạn chế cần được cải thiện trong tương lai, như sau:

  • Giới hạn về dữ liệu huấn luyện: Bộ dữ liệu hiện tại chủ yếu được thu thập từ các nguồn công khai như PyPI và GitHub. Điều này có thể dẫn đến sự thiếu đa dạng cần thiết trong các mẫu mã độc và các kỹ thuật né tránh tinh vi hơn.
  • Hiệu năng tính toán: Việc xử lý và tích hợp AST đòi hỏi nhiều thời gian và tài nguyên tính toán, điều này khiến mô hình trở nên hạn chế trong các hệ thống có yêu cầu thời gian thực hoặc trong các môi trường có giới hạn về phần cứng.
  • Khả năng tổng quát hóa: Mặc dù mô hình hoạt động tốt với bộ dữ liệu thử nghiệm hiện tại, nhưng chưa có bằng chứng đầy đủ cho thấy nó có thể được áp dụng cho các ngôn ngữ lập trình hoặc các môi trường lưu trữ mã nguồn khác.

Hướng phát triển tương lai

Để tiếp tục cải thiện hiệu suất và mở rộng khả năng ứng dụng của công cụ phân loại mã độc, chúng tôi đề xuất một số hướng phát triển cụ thể như sau:

  • Đầu tiên, công cụ sẽ được mở rộng để hỗ trợ các ngôn ngữ lập trình khác như JavaScript, Java và C++. Điều này sẽ giúp nâng cao tính đa nền tảng và sự linh hoạt trong công tác phân tích an ninh phần mềm.
  • Thứ hai, chúng tôi đề xuất sử dụng các phương pháp nhúng hiện đại như BERT hoặc CodeBERT để cải thiện sự chính xác và khả năng phân loại của công cụ. Những phương pháp này có thể cung cấp các vector embedding sâu hơn và mang tính ngữ nghĩa cao hơn cho các thành phần mã nguồn.
  • Thứ ba, để tối ưu hóa hiệu năng và thời gian xử lý, chúng tôi đề xuất triển khai xử lý song song và sử dụng kỹ thuật cache trong quá trình phân tích AST và xử lý dữ liệu.
  • Thứ tư, chúng tôi sẽ phát triển một giao diện người dùng (GUI) thân thiện, có thể là web hoặc desktop, để giúp người dùng không chuyên dễ dàng sử dụng công cụ một cách thuận tiện.
  • Thứ năm, chúng tôi đề xuất tích hợp công cụ vào quy trình Continuous Integration/Continuous Deployment (CI/CD) của các dự án phần mềm để phát hiện sớm và ngăn chặn mã độc từ quy trình phát triển
  • Cuối cùng, chúng tôi đề xuất nghiên cứu và áp dụng các mô hình học máy tiên tiến như Transformer để cải thiện khả năng phân loại và xử lý ngôn ngữ tự nhiên trong phân tích mã độc.

Các hướng phát triển này sẽ giúp công cụ của chúng tôi phát triển mạnh mẽ hơn và đáp ứng được các yêu cầu ngày càng cao trong việc bảo vệ an ninh cho các hệ thống phần mềm hiện đại.