Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số, an toàn không gian mạng trở thành bài toán sống còn đối với các tổ chức và doanh nghiệp. Theo các báo cáo an ninh mạng toàn cầu, mạng máy tính ma (Botnet) tiếp tục là một trong những vũ khí nguy hiểm nhất được tin tặc khai thác nhằm phục vụ tấn công từ chối dịch vụ phân tán (DDoS), đánh cắp dữ liệu mật và tống tiền (Ransomware). Để duy trì mạng lưới điều khiển các máy tính bị lây nhiễm (Zombies), tin tặc triển khai các máy chủ Lệnh và Điều khiển (Command & Control - C&C).

flowchart LR
    A[Botmaster] -->|Điều khiển| B[C&C Server]
    B -->|Phát lệnh| C[Bot/Zombie 1]
    B -->|Phát lệnh| D[Bot/Zombie 2]
    B -->|Phát lệnh| E[Bot/Zombie n]
    C & D & E -->|Tấn công phân tán| F[Target Server / Dịch vụ]

Nhằm vượt qua các giải pháp phòng vệ truyền thống như danh sách đen (Blacklist) hay tường lửa, tin tặc phát triển thuật toán sinh tên miền tự động (Domain Generation Algorithm - DGA). DGA thế hệ đầu (Character-based DGA) sinh chuỗi ký tự ngẫu nhiên giả lập (ví dụ: 29cqdf6obnq462yv.com), dễ dàng bị nhận diện bởi độ hỗn loạn thông tin (Shannon Entropy) cao. Tuy nhiên, sự xuất hiện của Word-based DGA (ghép các từ có nghĩa từ từ điển, ví dụ: williamseasily.com, shoulderracerecognizeblue.com) đã làm vô hiệu hóa các mô hình phân loại dựa trên Entropy và chữ ký cố định do tên miền độc hại có cấu trúc từ vựng tương tự tên miền người dùng hợp lệ.

Bài toán nghiên cứu (Problem Statement)

Các hệ thống giám sát an ninh mạng hiện hành gặp các điểm nghẽn nghiêm trọng:

  • Tỷ lệ dương tính giả (FPR) và âm tính giả (FNR) cao: Các công cụ phân tích từ vựng truyền thống không phân biệt được tên miền sinh tự động từ từ điển (Word-based) với tên miền doanh nghiệp tự nhiên.
  • Tính trễ trong phản ứng: Phương pháp dựa trên Blacklist chỉ có tác dụng sau khi tên miền đã bị gán nhãn, không thể ngăn chặn chủ động các tên miền mới được sinh theo thời gian thực (Zero-day DGA).
  • Hạn chế của mô hình thống kê Entropy: Tên miền Word-based có phân phối ký tự chuẩn tự nhiên, vượt qua các bộ lọc Entropy ký tự cơ bản.

Mục tiêu dự án

  1. Khảo sát và phân tích chuyên sâu: Làm rõ cơ chế hoạt động, kiến trúc của mạng Botnet và đặc trưng của 5 họ Word-based DGA Botnet phổ biến: Gozi, Bigviktor, Matsnu, Pizd, Suppobox.
  2. Xây dựng bộ đặc trưng tối ưu: Trích xuất 13 đặc trưng từ vựng và ngôn ngữ học (Lexical and Linguistic Features) phản ánh bản chất của tên miền Word-based DGA.
  3. Thử nghiệm và đánh giá đa thuật toán: Huấn luyện, tối ưu và so sánh hiệu năng của 5 mô hình học máy: Máy vectơ hỗ trợ (SVM), Rừng ngẫu nhiên (Random Forest), K láng giềng gần nhất (kNN), Naive Bayes và Hồi quy Logistic (Logistic Regression).
  4. Đóng gói giải pháp thực nghiệm: Xây dựng mô-đun phát hiện có khả năng phân loại nhị phân tên miền với độ chính xác cao và độ trễ thấp.

Phạm vi và giới hạn

  • Phạm vi dữ liệu: Tập dữ liệu chuẩn gồm 50.000 tên miền lành tính (Alexa Top Domains) và 50.000 tên miền độc hại từ 5 họ Word-based DGA.
  • Giới hạn kỹ thuật: Đồ án tập trung vào phân tích từ vựng tên miền tĩnh (Static Lexical Analysis), chưa kết hợp hành vi luồng mạng DNS động (DNS Traffic Dynamics).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Giải pháp Cơ chế hoạt động Ưu điểm Nhược điểm
Danh sách đen (Blacklist/Chữ ký) Đối chiếu tên miền với cơ sở dữ liệu đã biết Tốc độ xử lý $O(1)$, độ chính xác tuyệt đối với mẫu cũ Vô hiệu trước tên miền mới sinh, tốn chi phí cập nhật CSDL
Phát hiện theo Entropy (Anomaly-based) Đo lường độ ngẫu nhiên ký tự (Shannon Entropy) Phát hiện tốt Character-based DGA (qowhi81jvoid.biz) Thất bại hoàn toàn trước Word-based DGA do từ vựng tự nhiên
Bẫy mã độc (Honeypot) Thu thập mẫu bot và phân tích hành vi ngược Cung cấp thông tin chi tiết về mã độc và thuật toán sinh Mang tính thụ động, không chặn được lưu lượng thời gian thực
Học máy dựa trên Lexical (Đề xuất) Phân tích tổ hợp 13 đặc trưng từ vựng và từ điển Tự động hóa, bắt được biến thể mới, độ chính xác cao Cần tập dữ liệu huấn luyện chuẩn hóa và từ điển tối ưu

Yêu cầu hệ thống theo mô hình MoSCoW

  • Must have: Trích xuất tự động 13 đặc trưng từ vựng; mô hình phân loại đạt độ chính xác (Accuracy) $\ge 90%$; thời gian dự đoán $< 10\text{ms}$/domain.
  • Should have: Giao diện trực quan kiểm tra tên miền; hỗ trợ nhập dữ liệu theo lô (Batch Processing).
  • Could have: Tích hợp cơ chế cập nhật tự động tập từ điển tiếng Anh và danh sách DGA.
  • Won't have (lần này): Giải mã mã nguồn gốc của botnet trên máy nạn nhân.

Thiết kế hệ thống

flowchart TD
    subgraph Pipeline Trích xuất & Phân loại
        A[Input: Domain Name] --> B[Tiền xử lý: Tách TLD & Chuẩn hóa]
        B --> C[Bộ trích xuất 13 đặc trưng f1-f13]
        C --> D[Vector hóa đặc trưng]
        D --> E[Mô hình Rừng ngẫu nhiên / SVM]
        E --> F{Bộ phân loại nhị phân}
        F -->|Label 0| G[Tên miền Lành tính]
        F -->|Label 1| H[Cảnh báo: Word-based DGA Botnet]
    end

Technology Stack

  • Ngôn ngữ phát triển: Python (v3.10+)
  • Thư viện Khoa học dữ liệu & Học máy: Scikit-learn (v1.3.0), NumPy (v1.24.3), Pandas (v2.1.0)
  • Xử lý tên miền & Chuỗi: Tldextract (v5.1.0), NLTK (v3.8.1)
  • Giao diện & API: Tkinter / Flask (v3.0.0)

Không gian 13 Vector đặc trưng ($f_1 \to f_{13}$)

  1. $f_1$ (Length): Độ dài tên miền $f_1 = \text{len}(d)$.
  2. $f_2$ (ASCII Sum): Tổng giá trị mã ASCII của toàn bộ ký tự $f_2 = \sum_{i=1}^{\text{len}(d)} \text{ord}(d[i])$.
  3. $f_3$ (Vowel Count): Số lượng nguyên âm ($a, e, i, o, u$) trong tên miền.
  4. $f_4$ (Vowel Ratio): Tỷ lệ nguyên âm $f_4 = \frac{f_3}{\text{len}(d)}$.
  5. $f_5$ (Digit/Hyphen Count): Số lượng chữ số ($0-9$) và dấu gạch nối ($-$).
  6. $f_6$ (Digit/Hyphen Ratio): Tỷ lệ số và dấu gạch nối $f_6 = \frac{f_5}{\text{len}(d)}$.
  7. $f_7$ (English Dict Matches): Số lượng từ có trong từ điển 58.000 từ tiếng Anh thông dụng (eng_dict).
  8. $f_8 \to f_{10}$: Tỷ lệ khớp từ vựng với các tập từ điển DGA đặc thù của từng họ Botnet.
  9. $f_{11} \to f_{13}$: Tỷ lệ độ dài từ dài nhất, phân bố n-gram và chỉ số phân mảnh từ.

Implementation và kết quả

Chi tiết thuật toán và mã nguồn

1. Thuật toán sinh tên miền tự động mô phỏng (DGA Generator)

Dưới đây là cơ chế sinh tên miền giả lập dựa trên hạt nhân thời gian (Seed: Year, Month, Day):

def generate_dga_domain(year: int, month: int, day: int) -> str:
    """Sinh tên miền giả ngẫu nhiên dựa trên tham số ngày tháng (Seed)."""
    domain = ""
    for _ in range(16):
        year = ((year ^ 8 * year) >> 11) ^ ((year & 0xFFFFFFF0) << 17)
        month = ((month ^ 4 * month) >> 25) ^ 16 * (month & 0xFFFFFFF8)
        day = ((day ^ (day << 13)) >> 19) ^ ((day & 0xFFFFFFFE) << 12)
        domain += chr(((year ^ month ^ day) % 25) + 97)
    return f"{domain}.infosec"

2. Module trích xuất đặc trưng từ vựng (Feature Extraction Pipeline)

import tldextract

VOWELS = set("aeiou")
DIGITS_AND_HYPHEN = set("0123456789-")

def extract_lexical_features(domain_str: str, eng_dict: set) -> list:
    """Trích xuất vector 7 đặc trưng cơ bản đại diện cho tên miền."""
    extracted = tldextract.extract(domain_str)
    d = extracted.domain.lower()
    length = len(d)
    if length == 0:
        return [0] * 7

    # f1: Độ dài tên miền
    f1 = length
    # f2: Tổng mã ASCII
    f2 = sum(ord(c) for c in d)
    # f3: Số lượng nguyên âm
    f3 = sum(1 for c in d if c in VOWELS)
    # f4: Tỷ lệ nguyên âm
    f4 = f3 / length
    # f5: Số lượng ký tự số và dấu '-'
    f5 = sum(1 for c in d if c in DIGITS_AND_HYPHEN)
    # f6: Tỷ lệ ký tự số và '-'
    f6 = f5 / length
    # f7: Số từ khớp trong từ điển tiếng Anh
    f7 = sum(1 for i in range(length) for j in range(i + 2, length + 1) if d[i:j] in eng_dict)

    return [f1, f2, f3, f4, f5, f6, f7]

3. Huấn luyện mô hình phân loại Rừng ngẫu nhiên (Random Forest)

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import train_test_split

def train_rf_model(X, y):
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42, stratify=y
    )
    clf = RandomForestClassifier(
        n_estimators=100, max_depth=20, random_state=42, n_jobs=-1
    )
    clf.fit(X_train, y_train)
    y_pred = clf.predict(X_test)
    
    print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
    print("Report:\n", classification_report(y_test, y_pred))
    return clf

Thử nghiệm và Đánh giá kết quả

Nghiên cứu tiến hành đánh giá trên tập dữ liệu gồm 50.000 tên miền lành tính50.000 tên miền botnet (chia đều cho 5 họ: Bigviktor, Gozi, Matsnu, Pizd, Suppobox). Dữ liệu được chia theo tỷ lệ 80% Training và 20% Testing.

                  Ma trận nhầm lẫn (Confusion Matrix)
                         Dự đoán Benign      Dự đoán DGA
Thực tế Benign (0)            TN                 FP
Thực tế DGA (1)               FN                 TP

Bảng so sánh hiệu năng các thuật toán học máy

Thuật toán Accuracy (%) Precision (%) Recall (%) F1-Score (%) Thời gian huấn luyện
Rừng ngẫu nhiên (Random Forest) 96.82% 97.10% 96.50% 96.80% Trung bình
Máy vectơ hỗ trợ (SVM) 93.45% 94.20% 92.60% 93.39% Cao
K láng giềng gần nhất (kNN, k=5) 91.15% 90.80% 91.60% 91.20% Thấp (chậm khi test)
Hồi quy Logistic (Logistic) 85.30% 86.10% 84.20% 85.14% Rất thấp
Naive Bayes 81.75% 83.40% 79.20% 81.25% Rất thấp
gantt
    title Kế hoạch triển khai nghiên cứu (16 tuần)
    dateFormat  YYYY-MM-DD
    section Nghiên cứu
    Khảo sát tài liệu & Botnet DGA       :done,    des1, 2023-09-01, 2023-09-21
    Thu thập dữ liệu Alexa & DGA Feed   :done,    des2, 2023-09-22, 2023-10-15
    section Xử lý & Mô hình
    Phân tích & Trích xuất 13 đặc trưng :done,    des3, 2023-10-16, 2023-11-10
    Huấn luyện 5 thuật toán Machine Learning :done, des4, 2023-11-11, 2023-12-05
    section Tối ưu & Đóng gói
    Đánh giá Benchmark & Tối ưu mô hình :done,    des5, 2023-12-06, 2023-12-25
    Đóng gói giao diện & Viết báo cáo   :done,    des6, 2023-12-26, 2024-01-03

Tỷ lệ phát hiện chi tiết trên từng họ Botnet

  • Gozi (Word-based): Tỷ lệ phát hiện đạt 98.2% nhờ đặc trưng độ dài lớn (13–25 ký tự) và tỷ lệ nguyên âm tập trung cao ($f_3 \ge 6$).
  • Suppobox & Pizd: Tỷ lệ phát hiện đạt 96.5% nhờ nhận diện cấu trúc ghép 2 từ điển đặc trưng.
  • Matsnu & Bigviktor: Tỷ lệ phát hiện đạt 95.8%, phân biệt rõ với tên miền lành tính vốn có độ dài ngắn hơn (3–12 ký tự).

Đổi mới và đóng góp

  1. Bộ đặc trưng từ vựng chuyên biệt hóa: Khác với các nghiên cứu truyền thống chỉ tập trung vào N-gram hoặc Entropy tổng thể, đồ án kết hợp tương quan giữa bảng mã ASCII ($f_2$), nguyên âm ($f_3, f_4$) và tần suất xuất hiện trong từ điển chuẩn 58.000 từ ($f_7$).
  2. Khắc phục điểm mù của hệ thống IDS/IPS truyền thống: Cung cấp phương thức phát hiện hiệu quả trước các họ mã độc tối tân lẩn tránh bằng kỹ thuật ghép từ tự nhiên mà không cần phân giải IP thực tế.
  3. Hiệu năng vượt trội của Random Forest: Chứng minh thực nghiệm rằng mô hình học kết hợp (Ensemble Learning) phân nhánh ngẫu nhiên xử lý tốt mối quan hệ phi tuyến giữa các đặc trưng từ vựng, giảm hiện tượng quá khớp (Overfitting) so với Decision Tree đơn lẻ và vượt trội hơn SVM trên tập dữ liệu lớn.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng trong thực tế

  • Tích hợp Tường lửa DNS (DNS Firewall): Đóng vai trò là bộ lọc phân loại sớm các truy vấn DNS trước khi chuyển tiếp tới máy chủ đệ quy, lập tức chặn đứng các bản tin truy vấn tới C&C Server.
  • Hệ thống Trung tâm Giám sát Điều hành An ninh mạng (SOC/SIEM): Tự động phân tích các cảnh báo log DNS, gắn cờ các máy trạm có dấu hiệu kết nối tên miền DGA để cô lập tức thời.
+-------------------------------------------------------------+
|                      Hạ tầng Triển khai                     |
|                                                             |
|   +------------------+         +------------------------+   |
|   |  DNS Resolver /  |  Query  |  Module Học Máy        |   |
|   |  Traffic Mirror  | ------> |  (Flask/FastAPI REST)  |   |
|   +------------------+         +------------------------+   |
|                                            |                |
|                                            v                |
|                                   [Trích xuất Vector]       |
|                                            |                |
|                                            v                |
|                                   [Random Forest Model]     |
|                                            |                |
|                                +-----------+-----------+    |
|                                |                       |    |
|                                v                       v    |
|                           [Benign: PASS]        [DGA: DROP] |
+-------------------------------------------------------------+

Hướng dẫn cài đặt và Triển khai API

Yêu cầu hệ thống (System Requirements)

  • CPU: Tối thiểu 2 Cores (Khuyến nghị 4 Cores để xử lý đa luồng).
  • RAM: 4GB (Khuyến nghị 8GB cho bộ nhớ nạp từ điển và cây quyết định).
  • Hệ điều hành: Linux (Ubuntu 20.04/22.04 LTS) hoặc Windows 10/11.

REST API Endpoint

  • URL: POST /api/v1/predict
  • Request Body:
{
  "domain": "shoulderracerecognizeblue.com"
}
  • Response Body:
{
  "domain": "shoulderracerecognizeblue.com",
  "is_dga": true,
  "confidence": 0.984,
  "family_predicted": "Matsnu"
}

Hạn chế và hướng phát triển

  • Hạn chế kỹ thuật: Mô hình phụ thuộc vào việc cập nhật các bộ từ điển. Nếu tin tặc sử dụng kỹ thuật Mixed DGA (pha trộn từ có nghĩa và chuỗi ký tự ngẫu nhiên phức tạp) hoặc từ điển tiếng địa phương hiếm, tỷ lệ phát hiện có thể suy giảm.
  • Hướng nghiên cứu tiếp theo:
    • Áp dụng các mô hình học sâu (Deep Learning) như mạng nơ-ron hồi quy hai chiều (Bi-LSTM) và kiến trúc Transformer kết hợp tự động trích xuất đặc trưng cấp độ ký tự (Character-level Embeddings).
    • Tích hợp kỹ thuật xử lý luồng dữ liệu lớn (Apache Kafka, Apache Flink) để giám sát hàng triệu bản ghi truy vấn DNS mỗi giây theo thời gian thực.

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành ATTT: Cung cấp tài liệu tham khảo hoàn chỉnh từ lý thuyết mạng Botnet, toán học thuật toán DGA đến quy trình tiền xử lý và huấn luyện mô hình học máy.
  • Kỹ sư An ninh mạng & Quản trị hệ thống: Cung cấp giải pháp mã nguồn mở và cấu trúc đặc trưng để tích hợp trực tiếp vào hệ thống phòng thủ vòng ngoài của tổ chức.
  • Doanh nghiệp & Đơn vị cung cấp dịch vụ ISP: Giảm thiểu rủi ro bị biến thành mắt xích trong mạng botnet, bảo vệ người dùng cuối khỏi các đợt tấn công nguy hiểm với chi phí vận hành tối ưu.

Câu hỏi thường gặp

1. Cần cấu hình phần cứng như thế nào để triển khai mô hình?

Hệ thống yêu cầu máy chủ tối thiểu 2 Cores CPU, 4GB RAM với môi trường Python 3.10+. Mô hình Rừng ngẫu nhiên sau khi đóng gói chỉ chiếm khoảng 150MB bộ nhớ RAM, hoàn toàn phù hợp để nhúng vào các Gateway mạng cỡ nhỏ.

2. Mô hình có khả năng mở rộng (Scalability) khi lưu lượng DNS tăng đột biến không?

Hoàn toàn có. Quá trình tính toán 13 đặc trưng từ vựng diễn ra trên bộ nhớ (In-Memory) với độ phức tạp $O(N)$ theo độ dài tên miền ($N \le 63$). Bằng cách triển khai dưới dạng Microservice đa tiến trình (Gunicorn/Uvicorn), hệ thống có thể xử lý từ 3.000 đến 5.000 truy vấn/giây trên một máy chủ tiêu chuẩn.

3. Làm thế nào để tích hợp giải pháp này với hệ thống SIEM/SOC sẵn có?

Mô-đun có thể đóng gói dưới dạng Docker Container và cung cấp cổng giao tiếp REST API hoặc Syslog. Khi phát hiện tên miền độc hại, mô-đun gửi trực tiếp bản tin JSON cảnh báo đến các nền tảng SIEM như Splunk, Elastic Security hoặc Wazuh.

4. Chi phí duy trì và yêu cầu bảo trì định kỳ là gì?

Giải pháp sử dụng 100% mã nguồn mở nên không mất phí bản quyền. Công việc bảo trì định kỳ bao gồm việc bổ sung thêm các mẫu tên miền mới vào tập dữ liệu huấn luyện và nạp lại mô hình sau mỗi 3–6 tháng.

5. Tại sao mô hình Random Forest lại đạt kết quả tốt hơn SVM trong bài toán này?

Vì các đặc trưng từ vựng của tên miền ($f_1 \to f_{13}$) bao gồm cả dữ liệu đếm rời rạc (độ dài, số lượng từ, số nguyên âm) và tỷ lệ liên tục. Cấu trúc cây quyết định phân cấp của Random Forest xử lý xuất sắc các ranh giới phi tuyến dạng bậc thang của dữ liệu bảng (Tabular Data) mà không yêu cầu chuẩn hóa khắt khe như không gian hình học của SVM.


Kết luận

Đồ án tốt nghiệp "Nghiên cứu phát hiện Word-based DGA Botnet dựa trên học máy" đã giải quyết triệt để bài toán nhận diện các tên miền botnet thế hệ mới có tính năng ngụy trang từ vựng tinh vi. Thông qua việc đề xuất không gian 13 đặc trưng ngôn ngữ và từ vựng độc đáo, kết hợp cùng thuật toán Rừng ngẫu nhiên (Random Forest), giải pháp đạt độ chính xác vượt trội 96.82%, vượt qua các hạn chế cố hữu của phương pháp dựa trên chữ ký và đo lường Entropy truyền thống. Kết quả nghiên cứu không chỉ có giá trị học thuật cao mà còn sẵn sàng ứng dụng thực tiễn vào hạ tầng an ninh mạng doanh nghiệp nhằm bảo vệ hệ thống trước các nguy cơ tấn công mạng hiện đại.