7 Tổng kết
5.2 Thời gian tạo đồ thị CPG cho bộ dữ liệu
Phân loại Số lượng file Thời gian
SQLi 9552 3 tiếng 13 phút
XSS 10080 3 tiếng 56 phút
5.3 Hiện thực các thành phần5.3.1 Tạo đồ thị CPG 5.3.1 Tạo đồ thị CPG
Input.File mã nguồn PHP.
Output.Đồ thị CPG tương ứng biểu diễn mã nguồn.
Như đã đề cập trong Tiểu mục 4.3.2, chúng tôi sử dụng công cụ mã nguồn mở PH- PJoern là “khung xương sống” để xây dựng module này. Đối với bước thống nhất thông tin về các hàm, biến đặc biệt bằng các tag được đề xuất ở Bảng 4.2, chúng tôi can thiệp trực tiếp vào mã nguồn của PHPJoern để xử lí. Cụ thể, ở giai đoạn công cụ này thực hiện parse mã nguồn thành cây AST và thực hiện duyệt đến từng nút trong cây, chúng tôi đối chiếu trường thông tin trong nút đang được kiểm tra đổi thay thế các tên hàm / biến thành tag được định nghĩa riêng của mình.
5.3.2 Vector hóa đồ thị
Input.Đồ thị CPG biểu diễn mã nguồn thu được từ bước tạo đồ thị.
Output.Vector đặc trưng tương ứng của mã nguồn.
Module này là sự tổng hợp của các bước khai thác mẫu đồ thị, khai thác tập mẫu đồ thị (hoặc có thể coi là bước chọn lọc đặc trưng) và bước tạo vector đặc trưng từ các mẫu được chọn ra. Chúng tôi thực hiện thử nghiệm nhiều lần để chọn ra các giá trị phù hợp cho các tham số đặc biệt (hyperparameter) của các giải thuật được sử dụng trong bước này. Sau đó các đồ thị lần lượt được lưu vào cơ sở dữ liệu Neo4j. Việc kiểm tra sự xuất hiện của mẫu đặc trưng trong đồ thị được thực hiện thông qua các câu lệnh truy vấn Cypher.
5.3.3 Xây dựng mô hình phân loại.
Input. Tập hợp các vector đặc trưng tương ứng với các file mã nguồn trong bộ dữ liệu huấn luyện.
Chương 5
Tương tự như ở module Vector hóa đồ thị, ở module này, chúng tôi cũng thực hiện thư nghiệm nhiều lần để chọn ra bộ giá trị hyperparameter phù hợp với các model được sử dụng là Decision Tree, Random Forest và SVM. Các model sinh ra ở bước này sẽ được lưu trữ trong các file hệ thống. Như vậy, khi tiến hành sử dụng các bộ phân loại đã được huấn luyện, hệ thống chỉ cần load model từ file và trực tiếp thực hiện dự đoán mà không cần phải chạy toàn bộ các module lại từ đầu. Cả ba bộ phân loại đều chúng tôi hiện thực bằng thư viện hỗ trợ scikit-learning.
5.4 Thiết kế giao diện
Sau khi hoàn tất các module và hoàn thành việc huấn luyện các mô hình học máy, chúng tôi tiến hành hiện thực giao diện cho chức năng dự đoán lỗ hổng bảo mật của công cụ. Vì mục tiêu của công cụ là hỗ trợ quá trình kiểm tra lỗ hổng được thuận tiện và chính xác hơn, việc sử dụng trên terminal làm hạn chế một số ưu điểm mà phương pháp hiện thực công cụ mang lại.
Giao diện gồm các thành phần chính: Bảng tùy chỉnh, Vùng hiển thị kết quả, Vùng biểu diễn thông tin. Bảng tùy chỉnh (Hình 5.3) bao gồm các tùy chọn về loại lỗ hổng cần kiểm tra, bộ phân loại sử dụng, chức năng import mã nguồn cần kiểm tra để người dùng có thể lựa chọn.
Sau khi thực hiện phân tích mã nguồn với các tùy chọn trên bảng điều khiển, kết quả dự đoán sẽ xuất hiện trên vùng hiển thị kết quả như Hình 5.4.
Hình 5.4: Giao diện hiển thị kết quả dự đoán lỗ hổng
Vùng biểu diễn thông tin có hai chế độ: Code Editor và Graph. Chế độ Code Editor (Hình 5.5) sẽ hiển thị toàn bộ mã nguồn lên màn hình để thuận tiện cho người dùng thực hiện kiểm tra, chỉnh sửa mã nguồn và lưu thay đổi trực tiếp trên giao diện. Trong khi đó, chế độ Graph (Hình 5.6) sẽ hiển thị giao diện để tương tác với đồ thị CPG của mã nguồn. Người dùng có thể thực hiện thu giảm / mở rộng các nút để dễ dàng theo dõi và sử dụng câu lệnh truy vấn cho đồ thị trên giao diện này.
Chương 5
6
Đánh giá
Trong chương này, chúng tôi thực hiện đánh giá mức độ hoạt động hiệu quả của phương pháp hiện thực các thành phần trong công cụ được xây dựng.
6.1 Tạo đồ thị CPG
Bước tạo đồ thị CPG được xử lí chủ yếu bằng công cụ PHPJoern. Trong mục này, chúng tôi sẽ phân tích hoạt động của công cụ PHPJoern để đánh giá mức độ hiệu quả khi sử dụng. Hình 6.1 minh họa tương quan giữa kích thước đồ thị CPG (số lượng nút) được tạo ra so với kích thước của mã nguồn (số dòng lệnh).
Hình 6.1: Kích thước các biểu đồ được tạo so với kích thước của mã nguồn
Có thể thấy số lượng nút được tạo ra nhiều gấp hai đến ba lần số lượng dòng lệnh trong mã nguồn. Tuy nhiên, nếu so sánh với số lượng token cần xem xét khi lựa chọn biểu
Chương 6
diễn mã nguồn như một ngôn ngữ tự nhiên, thì biểu diễn dạng cấu trúc được tạo bởi PHPJoern có ưu thế về tiết kiệm tài nguyên lưu trữ và tài nguyên xử lí hơn rất nhiều. Bên canh đó, chúng tôi cũng cân nhắc đến thời gian thực thi của bước tạo đồ thị (Hình 6.2). Với các mã nguồn trong bộ dữ liệu có kích thước trong khoảng từ 40 đến 70 dòng lệnh, thời gian để tạo đồ thị CPG tương ứng tiêu tốn không quá 1.5 giây. Nếu xét riêng việc sinh đồ thị cho một file mã nguồn riêng lẻ thì thời gian thực thi này là không đáng kể. Tuy nhiên, với một số lượng lớn các file mã nguồn trong tập dữ liệu cần được biểu diễn thành đồ thị CPG, thời gian tiêu tốn là rất đáng kể (Bảng 5.2). Vì vậy, công cụ được thiết kế để hạn chế việc phải lặp lại bước taọ đồ thị cho mã nguồn bằng cách lưu trữ các đồ thị đã tạo vào cơ sở dữ liệu PostgreSQL.
6.2 Vector hóa đồ thị
Bước ánh xạ đồ thị thành các vector đặc trưng bao gồm việc khai thác các mẫu đồ thị phổ biến và lựa chọn mẫu có giá trị để làm đặc trưng. Cả hai thuật toán gSpan và MMRFS đều cần được cung cấp một số tham số do người dùng tự định nghĩa. Chúng tôi thực hiện đánh giá nhiều lần với các bộ giá trị tham số khác nhau (Bảng 6.1) để lựa chọn bộ giá trị cho kết quả phù hợp nhất.
Bảng 6.1: Tập giá trị thử nghiệm cho các tham số tùy chỉnh cho bước Vector hóa đồ thị
Giải thuật Tham số tùy chỉnh Tập giá trị thử nghiệm gSpan với lớp dữ
liệu an toàn max_supportmin_support {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}{0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}
gSpan với lớp dữ
liệu không an toàn max_supportmin_support {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}{0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}
gSpan với lớp dữ
liệu khác max_supportmin_support {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}{0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}
MMRFS δ {5, 10, 15, 20, 25, 30, 35, 40, 45, 50} Kết quả lựa chọn bộ giá trị tùy chỉnh phù hợp được thể hiện như trong Bảng 6.2.
Bảng 6.2: Giá trị được chọn cho các tham số tùy chỉnh cho bước Vector hóa đồ thị
Lỗ hỗng Giải thuật Tham số tùy chỉnh Số lượng mẫu thu được
SQLi
gSpan với lớp dữ
liệu an toàn max_support = 0.4min_support = 0.6 217
gSpan với lớp dữ
liệu không an toàn max_support = 0.3min_support = 0.6 109
gSpan với lớp dữ
liệu khác max_support = 0.1min_support = 0.8 497
MMRFS δ = 10 75
XSS
gSpan với lớp dữ
liệu an toàn max_support = 0.5min_support = 0.6 268
gSpan với lớp dữ
liệu không an toàn max_support = 0.4min_support = 0.7 305
gSpan với lớp dữ
liệu khác max_support = 0.1min_support = 0.8 542
MMRFS δ = 25 70
Kết quả của việc lựa chọn đặc trưng cho thấy ưu điểm rõ rêt, số lượng mẫu cho ra cuối cùng giảm còn khoảng 1/10 so với số lượng ban đầu khai thác được.
6.3 Hiệu suất của các bộ phân loại
Hai bộ phân loại là Decision Tree và Random Forest cũng thông qua quá trình thử nghiệm các tham số để lựa chọn ra bộ giá trị phù hợp cuối cùng. Các tham số tương ứng với mô
Chương 6
hình được cung cấp sẵn trong thư viện scikit-learning và được thể hiện cụ thể trong Bảng 6.3.
Bảng 6.3: Giá trị được chọn cho các tham số tùy chọn của mô hình phân loại
Lỗ hỗng Bộ phân loại Tham số tùy chỉnh
SQLi
Decision Tree max_depth = 30min_samples_leaf = 2 max_features = None Random Forest n_estimators = 300 max_depth = None min_samples_split = 5 min_samples_leaf = 1 max_features = sqrt SVM kernel = rbfC = 10 XSS
Decision Tree max_depth = Nonemin_samples_leaf = 10 max_features = None Random Forest n_estimators = 500 max_depth = None min_samples_leaf = 2 max_features = sqrt SVM kernel = rbf C = 100 6.3.1 Các chỉ số đánh giá
Mục 4.2 đã đề cập tới vấn đề về sự mất cân bằng của tập dữ liệu. Do đó, ta sẽ khảo sát đồng thời nhiều chỉ số để đánh giá hiệu quả của hai bộ phân loại được sử dụng. Bảng 6.4 trình bày chi tiêt kết quả kiểm tra các chỉ số.
Ở hầu hết các chỉ số, mô hình Random Forest và SVM đạt được kết quả cao hơn so với mô hình Decision Tree. Điều này có thể được lí giải nhờ sức mạnh của thuật toán học tổng hợp từ nhiều cây quyết định con trong mô hình Random Forest, dẫn đến khả năng dự đoán của mô hình cũng chính xác hơn. Bản thân SVM cũng là mô hình có đặc điểm phù hợp và có khả năng cho kết quả tốt đối với các bài toán dạng phân loại nhị phân. Một điểm nữa cần lưu ý khi quan sát các chỉ số là cả ba mô hình đều phân loại tốt đối với các file an toàn, không chứa lỗ hổng. Tuy nhiên, đối với các file có lỗ hổng, chỉ số precision chỉ đạt mức khá (0.6 - 0.7). Điều này có nghĩa một số lượng tương đối các file an toàn nằm trong tập hợp các file được phân loại là có chứa lỗ hổng bảo mật. Chỉ số recall ở tất cả các hàng đều duy trì trong khoảng 0.79 - 0.87. Con số này cho thấy phần lớn các file được phân loại theo đúng nhãn của nó. Tuy nhiên, đối với một công cụ phân loại lỗ hổng bảo mật, người sử dụng sẽ không mong muốn bị bỏ sót lỗ hổng bảo mật nào trong mã nguồn. Vậy nên hiệu quả phân loại của công cụ chỉ đang ở mức tạm chấp nhận
Bảng 6.4: Các chỉ số đánh giá độ hiệu quả của mô hình phân loại
Bộ phân loại Lỗ hổng Lớp Precision Recall F1-score Accuracy Decision
Tree
SQLi Không an toànAn toàn 0.930.68 0.810.87 0.860.77 0.83
XSS Không an toànAn toàn 0.790.73 0.800.81 0.800.77 0.78
Random Forest
SQLi Không an toànAn toàn 0.920.71 0.830.85 0.870.77 0.84
XSS Không an toànAn toàn 0.800.74 0.820.81 0.810.78 0.79
SVM SQLi
An toàn 0.90 0.84 0.87 0.84
Không an toàn 0.72 0.82 0.77
XSS Không an toànAn toàn 0.800.74 0.790.82 0.790.78 0.78
Chương 6
6.4 Kiểm thử giao diện hệ thống
Trong phần này, chúng tôi trình bày một số testcase thực hiện kiểm thử cho các chức năng trên giao diện được hiện thực. Các testcase được trình bày cụ thể ở trong Bảng 6.5.
Bảng 6.5: Các chỉ số đánh giá độ hiệu quả của mô hình phân loại
STT Nội dung Kết quả Ghi
chú Chức năng dự đoán lỗ hổng
1 Truy cập vào trang điều
khiển của công cụ Giao diện hiển thị bảng điều khiểnvà vùng hiển thị kết quả trống Pass 2 Chọn file mã nguồn cần
kiểm tra Hiển thị tên file được chọn trong ôchứa tên file Pass 3 Chọn loại lỗ hổng bảo mật
cần kiểm tra:XSS,SQLi, cả
hai (Both)
Tên của loại lỗ hổng được chọn được thay đổi từ màu trắng thành màu xanh
Pass
4 Chọn bộ phân loại để dự đoán: Decision Tree, Ran- dom Forest, SVM
Tên của loại bộ phân loại được chọn được thay đổi từ màu trắng thành màu xanh
Pass
5 Nhấn nút Scan để gửi yêu
cầu kiểm tra tới hệ thống Hệ thống kiểm tra và thực hiện dựđoán sự tồn tại của lỗ hổng trong file mã nguồn được tải lên với các lựa chọn được người dùng thiết lập. Kết quả được trả về và hiển thị trên màn hình
Pass
Chức năng hiển thị thông tin mã nguồn
1 Chọn chế độ hiển thị là Ed-
itor Nội dung mã nguồn được kiểm trahiển thị trên màn hình giao diện Pass 2 Chọn chế độ hiển thị là
CPG Đồ thị CPG của mã nguồn đượchiển thị với khả năng thu giảm, mở rộng các nút và liên kết
Pass
Chức năng tạo báo cáo
1 Nhấn nút Generate Report
để tạo báo cáo về kết quả kiểm tra mã nguồn
File báo cáo được tạo và tự động
7
Tổng kết
Chương này sẽ trình bày các kết quả đạt được từ quá trình làm luận văn. Đồng thời phân tích những hạn chế còn tồn tại và chỉ ra các hướng mở rộng phát triển cho các nghiên cứu trong cùng lĩnh vực trong tương lai.
7.1 Kết quả đạt được
Qua quá trình thực hiện đề tài “Xây dựng 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”, chúng tôi kiểm chứng khả năng áp dụng các kỹ thuật học máy và khai phá dữ liệu để phát hiện mã nguồn dễ bị tấn công trong một ngôn ngữ lập trình động, cụ thể là PHP. Kết quả chính của luận văn này là công cụ có thể nhận diện lỗ hổng bảo mật trong mã nguồn PHP bằng cách sử dụng một bộ phân loại học máy và các đặc trưng được trích xuất thông qua khai thác mẫu đồ thị. Từ đó khẳng định tiềm năng của hướng nghiên cứu áp dụng học máy vào quy trình kiểm tra mã nguồn. Bên cạnh đó, chúng tôi còn đề xuất một phương pháp để ánh xạ thông tin từ biểu diễn dạng cấu trúc của mã nguồn là đồ thị CPG thành các đặc trưng có giá trị phân loại cao cho quá trình xây dựng mô hình học máy. Điều này cung cấp thêm một hướng giải quyết khác cho vấn đề về vector hóa mã nguồn khi xây dựng công cụ kiểm tra kết hợp với các kỹ thuật định hướng dữ liệu.
7.2 Hạn chế7.2.1 Tập dữ liệu 7.2.1 Tập dữ liệu
Đối với đề tài này, tập dữ liệu có ảnh hưởng to lớn đến hai giai đoạn chính của quá trình nhận diện lỗ hổng, bao gồm bước khai thác mẫu đặc trưng và xây dựng mô hình phân loại. Mục 4.2 của luận văn đã trình bày thông tin về tập dữ liệu SARD được sử dụng. Tuy cung cấp một số lượng lớn các file được phân loại rõ ràng và có thông tin chi tiết kèm theo về lỗ hổng, tập dữ liệu này vẫn còn nhiều khuyết điểm khiến khiến nó không tương thích hoàn toàn với mục đích sử dụng trong luận văn.
Thứ nhất, mã nguồn có chứa lỗ hổng trong tập dữ liệu này được tạo ra bởi công cụ do nhóm tác giả của nghiên cứu [27] hiện thực. Điều này đồng nghĩa với việc các mã
Chương 7
nguồn này không thực sự phản ánh sự tồn tại của lỗ hổng bảo mật trong các chương trình thực tế. Mỗi mẫu dữ liệu chỉ gói gọn trong một file nên không bao quát sự được đa dạng và phức tạp của một ứng dụng web thực sự.
Thứ hai, tập dữ liệu được phân thành các tập con theo loại lỗ hổng bảo mật bao quát nhất. Thực tế, mỗi một loại lỗ hổng bảo mật có thể được phân tích thành nhiều loại chi tiết hơn, ví dụ lỗ hổng SQLi có thể chia thành các loại chính là In-band SQLi (Classic), Inferential SQLi (Blind) và Out-of-band SQLi. Nếu có thể phân loại dữ liệu thành các lớp cụ thể như trên và cho công cụ học các đặc trưng để dự đoán, tính ứng dụng và hiệu