Giới thiệu dự án
Tấn công giả mạo (Phishing) là một trong những hình thức tấn công phi kỹ thuật (Social Engineering) phổ biến và nguy hiểm nhất trên không gian mạng. Theo báo cáo từ Liên minh Chống Lừa đảo Trực tuyến (APWG), hàng triệu trang web giả mạo được thiết lập mỗi năm nhằm đánh cắp thông tin định danh cá nhân (PII), thông tin thẻ tín dụng, tài khoản ngân hàng và bí mật kinh doanh. Các trang web này bắt chước giao diện của các tổ chức tài chính, cổng thanh toán hoặc nền tảng mạng xã hội với độ tương đồng gần như tuyệt đối, gây thiệt hại hàng tỷ USD cho nền kinh tế toàn cầu.
Vấn đề cốt lõi nằm ở sự tinh vi và vòng đời cực ngắn của các tên miền lừa đảo (thường dưới 24–48 giờ). Các giải pháp truyền thống dựa trên danh sách đen (Blacklist-based approach) tỏ ra thụ động, có độ trễ lớn và hoàn toàn bất lực trước các cuộc tấn công Zero-day hoặc kỹ thuật biến đổi URL động (Fast-flux DNS, URL Shortener).
Đồ án tập trung nghiên cứu, thiết kế và phát triển hệ thống phát hiện website lừa đảo dựa trên mô hình học máy phân lớp Random Forest (Rừng ngẫu nhiên), kết hợp công cụ khai phá dữ liệu Weka 3.8 và ngôn ngữ lập trình Java.
+------------------------------------+
| UCI Phishing Dataset (11,055) |
+-----------------+------------------+
|
v
+------------------------------------+
| Tiền xử lý & Trích chọn 30 Feature |
+-----------------+------------------+
|
v
+---------------------------+---------------------------+
| |
v v
+---------------------------+ +---------------------------+
| Training Set (70%) | | Test Set (30%) |
+-------------+-------------+ +-------------+-------------+
| |
v v
+---------------------------+ +---------------------------+
| 10-fold Cross-Validation | | Model Evaluation |
+-------------+-------------+ +-------------+-------------+
| |
v v
+-----------------------------------------------------------------------------------+
| Mô hình Random Forest Ensemble Classifier (Weka Engine) |
+-----------------------------------------+-----------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| Ứng dụng Phân lớp & Dự đoán Unlabeled Data (Java Swing Desktop) |
+-----------------------------------------------------------------------------------+
Mục tiêu nghiên cứu
- Khảo sát và phân tích toàn diện 30 đặc trưng kỹ thuật nhận diện website lừa đảo (thuộc các nhóm: cấu trúc URL, bất thường tên miền, mã nguồn HTML/JavaScript và dịch vụ mạng).
- Xây dựng, huấn luyện và đánh giá mô hình phân lớp Random Forest trên tập dữ liệu chuẩn UCI Phishing Websites Dataset (11.055 mẫu).
- So sánh đối chuẩn hiệu năng phân lớp của Random Forest với các thuật toán phân lớp phổ biến: Naïve Bayes, k-Nearest Neighbors ($k$-NN / IBk), Support Vector Machines (SVM / SMO) và Multilayer Perceptron (MLP).
- Thiết lập quy trình đánh giá trực quan hóa hiệu năng mô hình qua đường cong ROC (Receiver Operating Characteristic) trên Weka Knowledge Flow.
- Phát triển phần mềm ứng dụng hoàn chỉnh bằng Java Swing, tích hợp mô hình Weka đã huấn luyện để dự đoán nhãn cho các bộ dữ liệu website chưa gán nhãn (Unlabeled Dataset).
Phương pháp tiếp cận và cơ sở lựa chọn
Đồ án lựa chọn mô hình học máy giám sát (Supervised Learning) với giải thuật Random Forest (RF). RF là một phương pháp học kết hợp (Ensemble Learning) áp dụng kỹ thuật Bootstrap Aggregating (Bagging) kết hợp cơ chế chọn tập con thuộc tính ngẫu nhiên (Random Subspace Method).
So với các cây quyết định đơn lẻ (Decision Tree như C4.5/J48) thường gặp hiện tượng quá khớp (Overfitting), hoặc các mô hình mạng nơ-ron đòi hỏi chi phí tính toán cao và khó giải thích, Random Forest cung cấp độ chính xác phân loại vượt trội, khả năng kiểm soát phương sai (variance reduction) hiệu quả, tính bền vững cao trước dữ liệu nhiễu và hỗ trợ xử lý dữ liệu đa chiều phân loại rất tốt.
Kết quả kỳ vọng và phạm vi nghiên cứu
- Độ chính xác phân loại (Accuracy): Đạt trên 96% trên tập kiểm thử độc lập; diện tích dưới đường cong ROC (AUC) đạt trên 0.98.
- Thời gian xử lý: Đảm bảo thời gian huấn luyện và dự đoán ở mức thời gian thực (<150ms trên mỗi lô kiểm thử).
- Phạm vi nghiên cứu: Đề tài sử dụng bộ dữ liệu chuẩn 11.055 bản ghi từ UCI Machine Learning Repository với 30 thuộc tính đặc trưng được chuẩn hóa theo thang đo rời rạc ${-1, 0, 1}$ (trong đó: $1$: Lừa đảo / Phishing, $0$: Nghi ngờ / Suspicious, $-1$: Hợp pháp / Legitimate).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Phương pháp |
Cơ chế hoạt động |
Ưu điểm |
Nhược điểm |
| Danh sách đen (Blacklist) |
So khớp URL truy cập với cơ sở dữ liệu URL lừa đảo đã biết (Google Safe Browsing, PhishTank). |
Tốc độ truy vấn nhanh $O(1)$, độ chính xác tuyệt đối với URL đã ghi nhận. |
Không phát hiện được tấn công Zero-day; độ trễ cập nhật cơ sở dữ liệu cao. |
| Heuristic dựa trên tập luật |
Định nghĩa các bộ quy tắc tĩnh thủ công dựa trên từ khóa, đuôi tên miền, độ dài URL. |
Đơn giản, trực quan, không yêu cầu tập dữ liệu huấn luyện lớn. |
Dễ bị qua mặt bởi các kỹ thuật làm mờ URL; tỷ lệ dương tính giả (False Positive) cao. |
| Học máy đơn mô hình (SVM, Naïve Bayes) |
Sử dụng một thuật toán học thống kê hoặc tối ưu hóa siêu phẳng để phân chia không gian dữ liệu. |
Tự động thích ứng với các mẫu dữ liệu mới, tính toán nhanh. |
Naïve Bayes giả định độc lập thuộc tính; SVM nhạy cảm với siêu tham số và dữ liệu nhiễu. |
| Ensemble Learning (Random Forest) |
Kết hợp biểu quyết từ hàng trăm cây quyết định độc lập được xây dựng ngẫu nhiên. |
Độ chính xác cao nhất, chống quá khớp, xử lý tốt tương tác phi tuyến giữa 30 đặc trưng. |
Chi phí tính toán bộ nhớ cao hơn cây quyết định đơn lẻ. |
Ma trận ưu tiên yêu cầu chức năng (MoSCoW)
- Must have (Bắt buộc có):
- Khả năng nạp và tiền xử lý tập dữ liệu định dạng
.arff của Weka.
- Phân tách tập dữ liệu Training/Testing theo tỷ lệ chuẩn hóa (70/30).
- Đánh giá chéo 10-fold Cross-Validation cho mô hình phân lớp.
- Xuất các chỉ số đánh giá: TP Rate, FP Rate, Precision, Recall, F-Measure, ROC Area.
- Giao diện dự đoán nhãn lớp cho tập dữ liệu Unlabeled Data.
- Should have (Nên có):
- Trực quan hóa đường cong ROC trên Knowledge Flow.
- Lưu và tải mô hình huấn luyện dưới dạng tệp nhị phân
.model.
- Could have (Có thể có):
- Tích hợp thêm các bộ lọc lựa chọn đặc trưng (Feature Selection).
- Won't have (Chưa thực hiện):
- Cơ chế tự động trích xuất trực tiếp 30 đặc trưng từ URL nhập tay theo thời gian thực (Real-time DOM scraping).
Thiết kế hệ thống
graph TD
subgraph Data Layer
A[UCI Phishing Dataset .arff] --> B[Weka Filter: RemovePercentage]
B --> C[Training Set 70%]
B --> D[Test Set 30%]
E[Unlabeled Data File]
end
subgraph Core ML Engine - Weka API
C --> F[Random Forest Trainer]
F --> G[10-fold Cross Validation]
G --> H[Trained Model .model]
D --> I[Model Evaluator]
H --> I
I --> J[ROC / AUC Analysis]
end
subgraph Presentation Layer - Java Swing
H --> K[Java Application Core Controller]
E --> K
K --> L[Batch Prediction Engine]
L --> M[JTable Prediction Results Viewer]
end
Ngăn xếp công nghệ (Technology Stack)
- Ngôn ngữ phát triển: Java SE Development Kit (JDK) phiên bản 1.8.0.
- Môi trường phát triển tích hợp (IDE): NetBeans IDE phiên bản 8.2.
- Thư viện lõi Machine Learning: Weka API (Waikato Environment for Knowledge Analysis) phiên bản 3.8.3 (
weka.jar).
- Giao diện người dùng: Java Swing / AWT GUI Components (
JFrame, JTable, JButton, JFileChooser).
- Định dạng dữ liệu: Attribute-Relation File Format (
.arff).
Cấu trúc không gian đặc trưng (Feature Space Schema)
Tập dữ liệu bao gồm 30 biến đầu vào $\vec{x} = [x_1, x_2, \dots, x_{30}]^T$ và 1 biến mục tiêu $y \in {-1, 1}$:
- Nhóm đặc trưng dựa trên URL (Lexical/Address Bar):
having_IP_Address: Tên miền chứa địa chỉ IP dạng nhị phân/thập lục phân ${-1, 1}$.
URL_Length: Độ dài URL ($<54 \rightarrow -1$; $54-75 \rightarrow 0$; $>75 \rightarrow 1$).
Shortining_Service: Sử dụng dịch vụ rút ngắn URL (TinyURL, bit.ly,...) ${-1, 1}$.
having_At_Symbol: Chứa ký tự @ làm mất hiệu lực tiền tố URL ${-1, 1}$.
double_slash_redirecting: Xuất hiện // sau vị trí ký tự thứ 7 ${-1, 1}$.
Prefix_Suffix: Tên miền chứa dấu gạch ngang - ${-1, 1}$.
having_Sub_Domain: Số lượng tên miền phụ (Sub-domain) ${-1, 0, 1}$.
HTTPS_token: Tên miền chứa chuỗi giả mạo https ${-1, 1}$.
Abnormal_URL: Tên máy chủ không khớp với hồ sơ WHOIS ${-1, 1}$.
- Nhóm đặc trưng bất thường & dịch vụ mạng (Network / Domain-based):
SSLfinal_State: Tuổi chứng chỉ SSL và mức độ tin cậy của nhà phát hành (CA) ${-1, 0, 1}$.
Domain_registeration_length: Thời hạn đăng ký tên miền còn lại ($\le 1$ năm $\rightarrow 1$, $> 1$ năm $\rightarrow -1$).
port: Cổng dịch vụ mở khác biệt với các cổng chuẩn (21, 22, 23, 80, 443, 1433, 3306) ${-1, 1}$.
age_of_domain: Tuổi đời của tên miền ($< 6$ tháng $\rightarrow 1$, $\ge 6$ tháng $\rightarrow -1$).
DNSRecord: Bản ghi máy chủ DNS có tồn tại hay không ${-1, 1}$.
web_traffic: Lưu lượng truy cập theo bảng xếp hạng Alexa ($\le 100.000 \rightarrow -1$; $> 100.000 \rightarrow 0$; Không ghi nhận $\rightarrow 1$).
Page_Rank: Giá trị Google PageRank ($< 0.2 \rightarrow 1$, $\ge 0.2 \rightarrow -1$).
Google_Index: Trang web đã được lập chỉ mục trên Google Search ${-1, 1}$.
Links_pointing_to_page: Số lượng liên kết ngoài trỏ về trang web ${-1, 0, 1}$.
Statistical_report: Tên miền/IP nằm trong danh sách đen thống kê từ PhishTank/StopBadware ${-1, 1}$.
- Nhóm đặc trưng mã nguồn HTML & JavaScript:
Favicon: Biểu tượng trang web được tải từ tên miền ngoài ${-1, 1}$.
Request_URL: Tỷ lệ phần trăm đối tượng đa phương tiện tải từ domain ngoài ($<22% \rightarrow -1$; $22%-61% \rightarrow 0$; $>61% \rightarrow 1$).
URL_of_Anchor: Tỷ lệ phần trăm thẻ <a href> trỏ ra domain khác ($<31% \rightarrow -1$; $31%-67% \rightarrow 0$; $>67% \rightarrow 1$).
Links_in_tags: Tỷ lệ liên kết trong các thẻ <meta>, <script>, <link> ${-1, 0, 1}$.
SFH (Server Form Handler): Xử lý form rỗng hoặc chuyển tiếp sang domain khác ${-1, 0, 1}$.
Submitting_to_email: Sử dụng hàm mail() hoặc mailto: để gửi dữ liệu form ${-1, 1}$.
Redirect: Số lần chuyển hướng trang web ($\le 1 \rightarrow -1$; $2-3 \rightarrow 0$; $\ge 4 \rightarrow 1$).
on_mouseover: Can thiệp sự kiện JavaScript làm thay đổi thanh trạng thái ${-1, 1}$.
RightClick: Vô hiệu hóa chuột phải (event.button == 2) ${-1, 1}$.
popUpWidnow: Mở cửa sổ Pop-up chứa các trường yêu cầu nhập văn bản ${-1, 1}$.
Iframe: Sử dụng thẻ <iframe> ẩn hoặc không viền ${-1, 1}$.
Phương pháp luận (Methodology)
Đồ án triển khai theo quy trình chuẩn khai phá tri thức CRISP-DM (Cross-Industry Standard Process for Data Mining) bao gồm 5 giai đoạn:
[Hiểu bài toán] -> [Chuẩn bị dữ liệu] -> [Huấn luyện mô hình] -> [Đánh giá ROC/K-Fold] -> [Triển khai ứng dụng]
- Hiểu bài toán (Problem Understanding): Phân tích các vector tấn công giả mạo và thiết lập bài toán phân loại nhị phân $f: \mathbb{R}^{30} \rightarrow {-1, 1}$.
- Chuẩn bị dữ liệu (Data Preparation): Làm sạch, kiểm tra tính toàn vẹn của 11.055 mẫu dữ liệu, thực hiện phân tách 70% tập huấn luyện (7.738 mẫu) và 30% tập kiểm thử (3.317 mẫu) bằng bộ lọc
weka.filters.unsupervised.instance.RemovePercentage.
- Mô hình hóa (Modeling): Huấn luyện các bộ phân lớp: Naïve Bayes, IBk ($k$-NN), SMO (SVM), MultilayerPerceptron và Random Forest.
- Đánh giá (Evaluation): Sử dụng 10-fold Cross-Validation và đánh giá trên tập kiểm thử độc lập. Phân tích ma trận nhầm lẫn (Confusion Matrix) và đồ thị ROC.
- Triển khai (Deployment): Đóng gói thành phần Weka API vào ứng dụng Java Swing, xử lý nạp model và gán nhãn cho tập dữ liệu Unlabeled Data.
Triển khai và kết quả thực nghiệm
Quy trình phát triển và thuật toán cốt lõi
Thuật toán Random Forest xây dựng một tập hợp gồm $B$ cây quyết định độc lập ${T_1(\vec{x}), T_2(\vec{x}), \dots, T_B(\vec{x})}$. Quá trình phân lớp cho một mẫu website $\vec{x}$ được tính toán dựa trên biểu quyết đa số (Majority Voting):
$$\hat{C}{rf}^B(\vec{x}) = \text{argmax}{c \in {-1, 1}} \sum_{b=1}^B I\left(T_b(\vec{x}) = c\right)$$
Tại mỗi nút phân nhánh của từng cây quyết định, một tập con gồm $m$ thuộc tính được chọn ngẫu nhiên từ tổng số $M = 30$ thuộc tính ban đầu ($m = \lfloor\sqrt{M}\rfloor = \lfloor\sqrt{30}\rfloor \approx 5$). Tiêu chuẩn phân chia dựa trên độ giảm chỉ số bất thuần Gini (Gini Impurity):
$$Gini(D) = 1 - \sum_{i=1}^{C} p_i^2$$
$$\Delta Gini(D, A) = Gini(D) - \sum_{v \in Values(A)} \frac{|D_v|}{|D|} Gini(D_v)$$
package vn.edu.hueuni.hce.phishingdetector;
import weka.classifiers.trees.RandomForest;
import weka.classifiers.Evaluation;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
import weka.core.SerializationHelper;
public class ModelTrainer {
public static void main(String[] args) {
try {
// 1. Tải tập dữ liệu huấn luyện (Training Set 70%)
DataSource source = new DataSource("data/PhishingTrainingSet.arff");
Instances trainingData = source.getDataSet();
// Thiết lập chỉ mục thuộc tính nhãn lớp (thuộc tính cuối cùng)
if (trainingData.classIndex() == -1) {
trainingData.setClassIndex(trainingData.numAttributes() - 1);
}
// 2. Khởi tạo và thiết lập siêu tham số cho Random Forest
RandomForest rfClassifier = new RandomForest();
rfClassifier.setNumIterations(100); // Số lượng cây quyết định (B = 100)
rfClassifier.setNumFeatures(5); // Số lượng đặc trưng ngẫu nhiên (m = sqrt(30))
rfClassifier.setMaxDepth(0); // Không giới hạn độ sâu (Unlimited)
rfClassifier.setNumExecutionSlots(4); // Tối ưu hóa xử lý đa luồng
// 3. Huấn luyện mô hình với 10-fold Cross-Validation
System.out.println("Đang huấn luyện mô hình Random Forest...");
rfClassifier.buildClassifier(trainingData);
Evaluation eval = new Evaluation(trainingData);
eval.crossValidateModel(rfClassifier, trainingData, 10, new java.util.Random(1));
// 4. Xuất kết quả đánh giá kiểm thử
System.out.println("=== KẾT QUẢ ĐÁNH GIÁ 10-FOLD CROSS-VALIDATION ===");
System.out.println(eval.toSummaryString());
System.out.println(eval.toClassDetailsString());
System.out.println(eval.toMatrixString("=== CONFUSION MATRIX ==="));
// 5. Lưu trữ mô hình đã huấn luyện thành tệp nhị phân
SerializationHelper.write("models/RandomForest_Phishing.model", rfClassifier);
System.out.println("Lưu mô hình thành công tại: models/RandomForest_Phishing.model");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Để dự đoán nhãn cho tập dữ liệu chưa được phân loại (Unlabeled Data), hệ thống nạp mô hình .model và thực thi duyệt từng thể hiện (Instance):
package vn.edu.hueuni.hce.phishingdetector;
import weka.classifiers.trees.RandomForest;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.SerializationHelper;
import weka.core.converters.ConverterUtils.DataSource;
public class BatchPredictor {
public static void predictUnlabeled(String modelPath, String unlabelArffPath) throws Exception {
// Tải mô hình đã lưu trữ
RandomForest loadedModel = (RandomForest) SerializationHelper.read(modelPath);
// Tải tập dữ liệu không nhãn
DataSource source = new DataSource(unlabelArffPath);
Instances unlabeled = source.getDataSet();
unlabeled.setClassIndex(unlabeled.numAttributes() - 1);
// Duyệt và dự đoán nhãn lớp
for (int i = 0; i < unlabeled.numInstances(); i++) {
Instance currentInst = unlabeled.instance(i);
double clsLabel = loadedModel.classifyInstance(currentInst);
String prediction = unlabeled.classAttribute().value((int) clsLabel);
double[] distribution = loadedModel.distributionForInstance(currentInst);
System.out.printf("Instance #%d: Dự đoán -> %s (Xác suất Lừa đảo: %.2f%%, Hợp pháp: %.2f%%)\n",
(i + 1), prediction, distribution[1] * 100, distribution[0] * 100);
}
}
}
Kiểm thử và đánh giá mô hình
Thực nghiệm được thiết lập trên tập dữ liệu chuẩn 11.055 mẫu, trong đó: 4.898 mẫu website hợp pháp ($-1$) và 6.157 mẫu website lừa đảo ($1$). Dữ liệu được chia thành:
- Tập huấn luyện (Training Set): 7.738 mẫu (70%).
- Tập kiểm thử độc lập (Test Set): 3.317 mẫu (30%).
+-------------------------------------------------------------+
1.0 | ........---| (Random Forest: AUC = 0.995)
| ...... |
0.8 | ...... | (Multilayer Perceptron: AUC = 0.984)
T | ...... |
P 0.6 | ...... | (SVM / SMO: AUC = 0.948)
| ...... |
R 0.4 | ...... | (k-NN / IBk: AUC = 0.962)
a | ...... |
t 0.2 | ...... | (Naïve Bayes: AUC = 0.953)
e |.. |
0.0 +-------------------------------------------------------------+
0.0 0.2 0.4 0.6 0.8 1.0
FPRate (False Positive Rate)
Bảng so sánh hiệu năng thực nghiệm giữa các mô hình phân lớp trên Test Set
| Tiêu chí đánh giá |
Naïve Bayes |
k-NN (IBk) |
SVM (SMO) |
Multilayer Perceptron |
Random Forest |
| Độ chính xác (Accuracy %) |
92.85% |
95.84% |
94.78% |
96.65% |
97.26% |
| Số mẫu phân lớp đúng (Correct) |
3.080 |
3.179 |
3.144 |
3.206 |
3.226 |
| Số mẫu phân lớp sai (Incorrect) |
237 |
138 |
173 |
111 |
91 |
| Độ chính xác chi tiết (Precision) |
0.929 |
0.959 |
0.948 |
0.967 |
0.973 |
| Độ nhạy phân loại (Recall) |
0.929 |
0.958 |
0.948 |
0.967 |
0.973 |
| F-Measure (Điểm F1) |
0.928 |
0.958 |
0.948 |
0.966 |
0.973 |
| Diện tích dưới ROC (ROC Area) |
0.953 |
0.962 |
0.948 |
0.984 |
0.995 |
| Thời gian huấn luyện (Giây) |
0.08s |
0.01s |
3.45s |
18.24s |
1.12s |
Phân tích kết quả
- Random Forest đạt độ chính xác cao nhất (97.26% trên tập Test Set độc lập), chỉ phân loại nhầm 91 trên tổng số 3.317 trường hợp kiểm thử.
- Chỉ số ROC Area (AUC) của Random Forest đạt đỉnh 0.995, đường cong ROC tiệm cận góc trên cùng bên trái của trục tọa độ, minh chứng cho năng lực phân tách lớp gần như hoàn hảo giữa website lừa đảo và hợp pháp mà không phụ thuộc vào ngưỡng phân định xác suất.
- So với mạng nơ-ron truyền thẳng Multilayer Perceptron (96.65%), Random Forest không chỉ đạt độ chính xác cao hơn mà còn có tốc độ huấn luyện nhanh gấp 16.2 lần (1.12 giây so với 18.24 giây), chứng minh tính khả thi vượt trội khi triển khai trên hệ thống sản xuất.
Đổi mới và đóng góp
- Chuẩn hóa khung trích chọn 30 chiều đặc trưng: Đề tài đã hệ thống hóa và chứng minh tính hiệu quả của tập 30 đặc trưng phối hợp toàn diện giữa cú pháp URL, thuộc tính máy chủ DNS, chứng chỉ SSL và hành vi JavaScript/DOM. Việc kết hợp này loại bỏ sự phụ thuộc vào nội dung trực quan (vốn dễ bị kẻ tấn công đánh lừa qua ảnh chụp màn hình hoặc Flash/Canvas).
- So sánh đa mô hình có kiểm soát: Khác với các nghiên cứu chỉ đánh giá trên một giải thuật đơn lẻ, khóa luận cung cấp bức tranh đối chuẩn thực nghiệm chi tiết giữa 5 lớp mô hình đại diện: Xác suất thống kê (Naïve Bayes), Dựa trên khoảng cách ($k$-NN), Siêu phẳng tối ưu (SVM), Phổ sinh học (MLP) và Học kết hợp (Random Forest).
- Cải thiện độ chính xác và giảm thiểu sai số: Tỷ lệ phân loại chính xác của Random Forest trong nghiên cứu (97.26%) vượt trội so với các công trình công bố trước đây sử dụng cùng bộ dữ liệu UCI:
- Cao hơn mô hình Naïve Bayes cơ sở (+4.41%).
- Tối ưu hơn so với thuật toán $k$-NN (+1.42%) và SVM (+2.48%).
- Giảm tỷ lệ dương tính giả (False Positive Rate) xuống mức thấp nhất, bảo vệ người dùng không bị chặn nhầm khi truy cập các cổng thông tin hợp pháp.
- Hiện thực hóa thành sản phẩm ứng dụng (End-to-End Delivery): Đóng gói quy trình khai phá dữ liệu học thuật thành công cụ phần mềm trực quan Java Swing, cho phép các chuyên viên an ninh mạng nạp tập dữ liệu thô chưa gán nhãn và xuất kết quả phân loại phục vụ công tác điều tra số.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Cổng phân tích an ninh mạng doanh nghiệp (Secure Web Gateway): Tích hợp vào hệ thống máy chủ Proxy/DNS của doanh nghiệp nhằm quét và chặn các truy cập của nhân viên vào các liên kết đáng ngờ được gửi qua Email hoặc ứng dụng Chat.
- Tiện ích mở rộng trình duyệt (Browser Security Extension): Sử dụng các luật heuristic trích xuất đặc trưng của URL và chạy mô hình suy luận trực tiếp để cảnh báo người dùng trước khi họ nhập mật khẩu trên các trang web lạ.
- Hệ sinh thái Ngân hàng & Fintech: Tích hợp vào hệ thống xác thực giao dịch, tự động kiểm tra nguồn gốc URL giới thiệu (Referrer URL) của các phiên chuyển tiền trực tuyến nhằm ngăn chặn tấn công Man-in-the-Middle và Phishing Gateway.
Hướng dẫn triển khai và yêu cầu hệ thống
+-----------------------------------------------------------------------------------+
| YÊU CẦU HỆ THỐNG VÀ THÔNG SỐ TRIỂN KHAI PHẦN MỀM |
+-----------------------------------------------------------------------------------+
| [1] Môi trường thực thi : Java Runtime Environment (JRE) 1.8 trở lên |
| [2] Cấu hình phần cứng : RAM tối thiểu 2GB (Khuyến nghị 4GB), CPU 2 Cores 2.0GHz|
| [3] Dung lượng ổ cứng : 100MB khả dụng cho bộ cài và tệp nhị phân mô hình |
| [4] Tệp tin phụ thuộc : weka.jar (v3.8.3), RandomForest_Phishing.model |
+-----------------------------------------------------------------------------------+
Các bước triển khai
- Cài đặt môi trường máy ảo Java (
JDK 1.8 hoặc OpenJDK 8).
- Tạo cấu trúc thư mục chứa thư viện và tệp mô hình:
mkdir -p PhishingDetector/lib PhishingDetector/models PhishingDetector/data
cp weka.jar PhishingDetector/lib/
cp RandomForest_Phishing.model PhishingDetector/models/
- Khởi chạy ứng dụng Java Swing:
java -Xmx1024m -cp "PhishingDetector/lib/weka.jar:PhishingDetector/PhishingDetector.jar" vn.edu.hueuni.hce.phishingdetector.MainUI
- Trên giao diện người dùng:
- Nhấn Open ARFF Dataset để nạp tập dữ liệu kiểm thử.
- Nhấn Load Model để trỏ tới tệp
RandomForest_Phishing.model.
- Nhấn Predict Unlabeled Set để thực thi phân lớp tự động và hiển thị kết quả chi tiết trên bảng dữ liệu.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Sự phụ thuộc vào bộ trích xuất đặc trưng tĩnh: Ứng dụng hiện tại tiếp nhận dữ liệu đầu vào đã được tiền xử lý thành 30 thuộc tính chuẩn hóa dạng
.arff. Quy trình này chưa tích hợp sẵn module tự động cào dữ liệu web (Web Crawler) và phân tích cú pháp DOM trực tiếp từ chuỗi URL thô.
- Chi phí tài nguyên khi số lượng cây tăng lớn: Mô hình Random Forest với 100 cây quyết định yêu cầu dung lượng bộ nhớ lớn hơn khi nạp vào RAM so với các mô hình tuyến tính đơn giản.
- Các thủ đoạn tấn công đối kháng (Adversarial Attacks): Kẻ tấn công có thể cố tình mua các chứng chỉ SSL hợp pháp từ các nhà cung cấp miễn phí (Let's Encrypt), gia hạn tên miền trên 1 năm và giữ nguyên cấu trúc URL chuẩn để làm sai lệch các chỉ số Heuristic.
Hướng phát triển
- Xây dựng RESTful API Microservices: Đóng gói mô hình học máy thành một dịch vụ Web Service (sử dụng Spring Boot hoặc FastAPI) chạy trong container Docker, cung cấp endpoint JSON để các hệ thống bên ngoài dễ dàng tích hợp.
- Kết hợp Học sâu (Deep Learning): Nghiên cứu tích hợp mô hình Character-level Convolutional Neural Networks (Char-CNN) hoặc Transformer (BERT-based) để phân tích trực tiếp chuỗi ký tự thô của URL mà không cần bước trích xuất đặc trưng thủ công.
- Cơ chế cập nhật mô hình trực tuyến (Active Learning): Tự động thu thập các mẫu website mới bị người dùng báo cáo, tự động gán nhãn và tái huấn luyện (Re-training) mô hình định kỳ nhằm duy trì độ chính xác trước các biến thể tấn công mới.
Đối tượng hưởng lợi
+----------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+--------------+-------------+
|
+-----------------------+---------------+-----------------------+
| | | |
v v v v
+------------------+ +-------------------+ +-------------------+ +--------------------+
| Sinh viên CNTT | | Kỹ sư phần mềm / | | Doanh nghiệp & | | Nhà nghiên cứu |
| & An toàn thông | | An ninh mạng | | Tổ chức Tài chính | | Khoa học dữ liệu |
| tin | | | | | | |
+------------------+ +-------------------+ +-------------------+ +--------------------+
| Tài liệu học tập | | Mã nguồn mẫu tích | | Mô hình tham khảo | | Dữ liệu đối chuẩn |
| chuẩn mực về quy | | hợp Weka API vào | | chi phí thấp, | | thực nghiệm và |
| trình CRISP-DM & | | hệ thống Java | | giảm thiểu rủi ro | | phân tích ROC |
| Ensemble Learning| | Enterprise | | tấn công Phishing | | chuyên sâu |
+------------------+ +-------------------+ +-------------------+ +--------------------+
- Sinh viên chuyên ngành CNTT, Hệ thống thông tin và An toàn thông tin: Tiếp cận một đồ án mẫu mực từ cơ sở lý thuyết toán học (Bagging, Gini Index, Định lý Bayes) đến quy trình triển khai phần mềm ứng dụng thực tế.
- Kỹ sư phát triển phần mềm (Software Engineers): Nắm vững kỹ thuật nhúng thư viện khai phá dữ liệu Weka API vào ứng dụng Java, quản lý luồng dữ liệu
.arff và tối ưu hóa xử lý đa luồng cho các thuật toán Ensemble.
- Doanh nghiệp vừa và nhỏ (SMEs): Sở hữu giải pháp tham khảo có khả năng phát hiện website lừa đảo với độ chính xác cao (97.26%) mà không phải trả chi phí bản quyền đắt đỏ cho các giải pháp thương mại độc quyền.
- Cộng đồng nghiên cứu Machine Learning: Cung cấp bộ thông số thực nghiệm, ma trận nhầm lẫn và đường cong ROC chi tiết của 5 thuật toán phân lớp trên tập dữ liệu UCI Phishing Dataset 11.055 mẫu.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật tối thiểu để triển khai mô hình vào hệ thống thực tế là gì?
Hệ thống chỉ yêu cầu máy chủ hoặc máy trạm có cài đặt Java Runtime Environment (JRE) phiên bản 8 trở lên, bộ nhớ RAM tối thiểu 2GB và dung lượng lưu trữ 100MB cho tệp thực thi .jar và tệp nhị phân mô hình .model.
2. Mô hình Random Forest có bị giới hạn khả năng mở rộng (Scalability) khi dữ liệu tăng cao không?
Random Forest có khả năng mở rộng rất tốt nhờ bản chất song song hóa của kỹ thuật Bagging. Các cây quyết định trong rừng có thể được huấn luyện và suy luận độc lập trên các nhân CPU khác nhau thông qua thiết lập numExecutionSlots trong Weka API. Khi xử lý hàng triệu bản ghi, hệ thống có thể chuyển đổi sang môi trường tính toán phân tán như Apache Spark (Spark MLlib).
3. Làm thế nào để tích hợp mô hình này vào một hệ thống web hiện có?
Hệ thống có thể được đóng gói thành một thư viện Java .jar nội bộ hoặc triển khai dưới dạng một RESTful API microservice sử dụng Spring Boot. Các ứng dụng web khác (viết bằng NodeJS, Python, PHP hoặc C#) có thể gửi mảng JSON chứa 30 giá trị đặc trưng của website tới API và nhận phản hồi nhãn dự đoán kèm xác suất tin cậy chỉ trong vài mili-giây.
4. Chi phí bảo trì và chu kỳ tái huấn luyện (Re-training) mô hình như thế nào?
Chi phí bảo trì hệ thống rất thấp do kiến trúc chạy cục bộ không phụ thuộc API trả phí của bên thứ ba. Tuy nhiên, để đối phó với các kỹ thuật tấn công lừa đảo mới, khuyến nghị tái huấn luyện mô hình theo chu kỳ hàng tháng bằng cách bổ sung các mẫu URL mới thu thập được từ các nguồn cấp dữ liệu mở như PhishTank hoặc OpenPhish.
5. Tại sao mô hình chọn phân loại theo 30 đặc trưng Heuristic thay vì quét trực tiếp nội dung văn bản (NLP) của trang web?
Việc sử dụng 30 đặc trưng Heuristic (cấu trúc URL, DNS, chứng chỉ SSL và thuộc tính kỹ thuật) giúp hệ thống:
- Độc lập hoàn toàn với ngôn ngữ hiển thị trên trang web (tiếng Việt, tiếng Anh, tiếng Trung,...).
- Không yêu cầu tải toàn bộ nội dung DOM, hình ảnh hay thực thi mã JavaScript độc hại trên máy người dùng, giúp tăng tốc độ xử lý và đảm bảo an toàn tuyệt đối trong quá trình phân tích.
Kết luận
Khóa luận tốt nghiệp đã giải quyết trọn vẹn bài toán phát hiện website lừa đảo thông qua việc ứng dụng mô hình học máy phân lớp Random Forest. Bằng việc khai thác sâu tập 30 đặc trưng đa chiều trên 11.055 mẫu dữ liệu chuẩn từ UCI, mô hình đã chứng minh tính ưu việt vượt trội với độ chính xác đạt 97.26%, điểm F-Measure đạt 0.973 và diện tích dưới đường cong ROC đạt 0.995, vượt xa các mô hình đối chuẩn truyền thống như Naïve Bayes, $k$-NN và SVM.
Bên cạnh đóng góp về mặt thực nghiệm học thuật, đồ án đã hoàn thiện một phần mềm ứng dụng hoàn chỉnh trên nền tảng Java Swing, tạo cầu nối trực tiếp giữa lý thuyết khai phá dữ liệu phức tạp và nhu cầu ứng dụng thực tiễn trong công tác bảo vệ an toàn thông tin người dùng trên Internet. Đây là nền tảng vững chắc để tiếp tục mở rộng phát triển thành các tiện ích bảo mật thời gian thực và dịch vụ an ninh mạng đám mây trong tương lai.