Danh sách các công cụ được sử dụng

Một phần của tài liệu Nghiên cứu và phát triển công cụ sử dụng học máy tìm kiếm lỗ hổng bảo mật trong ứng dụng web (Trang 54 - 56)

7 Tổng kết

5.1Danh sách các công cụ được sử dụng

Tên công cụ Phiên bản (version) Software Docker Gradle >= 3.5.1 PHP >= 7.2 Python >= 3.6 PHPJoern Joern

Thư viện Python cho module Tạo đồ thị CPG

pygraphviz >= 1.7.0

Thư viện Python cho để tương tác với Cơ sở dữ liệu

SQLAlchemy >= 1.4.11

psycopg2 >= 2.8.6

neo4j-driver >= 4.1.1

neo4j >= 4.2.1

Thư viện Python cho module Bộ phân loại Học máy

pandas >= 1.2.4

scikit-learn >= 0.22.2

Các thư viện Python khác

lxml >= 4.5.0

configparser >= 5.0.2

Nhận xét. Việc áp dụng các công cụ này giúp quá trình xây dựng công cụ trở nên đơn giản và nhanh chóng hơn rất nhiều. Điển hình như việc sử dụng Docker để chạy các cơ sở dữ liệu PostgreSQL và Neo4j giúp bỏ qua bước cài đặt phức tạp và giảm bớt đáng kể vấn đề về tài nguyên thiết bị. PHPJoern cũng là công cụ có vai trò đặc biệt quan trọng do xử lí phần lớn công việc trong bước tạo đồ thị CPG, giúp chúng tôi có thể tập trung vào xây dựng các module khai thác mẫu đồ thị và module bộ phân loại học máy.

Chương 5

5.2 Thiết kế cơ sở dữ liệu

Dữ liệu về đồ thị CPG sinh ra bởi công cụ PHPJoern được lưu trữ trong cơ sở dữ liệu PostgreSQL. Cấu trúc của cơ sở dữ liệu này được thiết kế như trong Hình 5.2.

Hình 5.2: Thiết kế cơ sở dữ liệu Thông tin chi tiết về từng bảng dữ liệu như sau:

Bảng CPG dùng để lưu các thông tin liên quan của đồ thị CPG, bao gồm ID của đồ thị, đường dẫn tới file chứa mã nguồn, loại lỗ hổng của đồ thị, dòng chứa lỗ hổng trong đồ thị.

Bảng Node chứa trường GraphId được dùng để xác định đồ thị CPG mà nút này thuộc về, trường NodeId đánh số nút trong đồ thị và trường IsVuln để xác định nút này có nằm trên dòng chứa lỗ hổng bảo mật hay không. Các trường còn lại chính là các thuộc tính chứa thông tin được PHPJoern trích xuất từ mã nguồn và lưu trữ trong các nút này.

Bảng Edge chứa thông tin về các cạnh có hướng của đồ thị. Tương tự như trong Bảng Node, trường GraphId được dùng để xác định đồ thị CPG mà cạnh thuộc về, EdgeID để đánh số cạnh, StartNode và EndNode lần lượt là Số định danh tương ứng với trường NodeID của các nút bắt đầu và kết thúc của cạnh. Để phân biệt các cạnh biểu diễn quan hệ AST hay luồng dữ liệu, luồng thực thi, cần căn cứ vào hai trường còn lại trong bảng là Type và Var.

Nhận xét. Việc lưu trữ đồ thị CPG ở dạng các bảng dữ liệu như trên là cần thiết do trong các module sau, tần suất cần tương tác với các đồ thị CPG là rất nhiều, trong khi bản thân quá trình sinh bộ dữ liệu đồ thị CPG bởi công cụ PHPJoern tiêu tốn rất nhiều thời gian (Bảng 5.2). Do đó, thay vì chỉ lưu trữ thông tin các file mã nguồn thuần túy trong bộ dữ liệu, phương pháp lưu trữ này giúp tiết kiệm thời gian và tài nguyên tính toán khi tạo đi tạo lại nhiều lần đồ thị CPG.

Một phần của tài liệu Nghiên cứu và phát triển công cụ sử dụng học máy tìm kiếm lỗ hổng bảo mật trong ứng dụng web (Trang 54 - 56)