Giới thiệu dự án

Trong bối cảnh chuyển đổi số toàn cầu, các ứng dụng web đóng vai trò là cửa ngõ giao tiếp huyết mạch giữa doanh nghiệp và người dùng. Tuy nhiên, theo các báo cáo an ninh mạng quốc tế, hơn 75% các cuộc tấn công mạng nhắm trực tiếp vào tầng ứng dụng (Application Layer), lợi dụng các lỗ hổng bảo mật nghiêm trọng trong danh mục OWASP Top 10 như SQL Injection (SQLi), Cross-Site Scripting (XSS), Broken Authentication và Denial of Service (DoS/DDoS).

Hạn chế cốt lõi của các hệ thống phát hiện xâm nhập truyền thống (Rule-based IDS/Signature-based IDS như Snort, Suricata nguyên bản) là tính bị động: chỉ phát hiện được các mẫu tấn công đã biết, tỷ lệ cảnh báo sai (False Positive Rate - FPR) cao và hoàn toàn bất lực trước các biến thể tấn công zero-day. Mặc dù kỹ thuật học máy (Machine Learning - ML) đã được ứng dụng để giải quyết bài toán phân loại bất thường (Anomaly-based IDS), việc triển khai các mô hình này độc lập trên máy đơn lẻ tạo ra "nút thắt cổ chai" (bottleneck) nghiêm trọng về hiệu năng khi phải xử lý lưu lượng mạng quy mô lớn (hàng triệu bản ghi/giây).

[Lưu lượng mạng Gbps] ──> [CICFlowMeter: Trích xuất 80 Features] ──> [Apache Kafka Broker]
                                                                            │
┌───────────────────────────────────────────────────────────────────────────┘
▼
[Spark Streaming Engine + MLlib Random Forest Model] ──> [Apache Kafka (Alerts)]
                                                                │
                                                                ▼
                                                [ELK Stack: Elasticsearch + Kibana]

Mục tiêu nghiên cứu cụ thể

  1. Phân tích và tiền xử lý dữ liệu mạng: Khai phá bộ dữ liệu chuẩn quốc tế CSE-CIC-IDS2018 (hơn 16,2 triệu gói tin), trích xuất và chọn lọc tập dữ liệu con chuyên biệt IDS2018-WEB gồm 80 đặc trưng thống kê luồng mạng.
  2. Nghiên cứu và đánh giá thuật toán ML: Xây dựng, huấn luyện và kiểm chuẩn 4 mô hình học máy: Naive Bayes, Logistic Regression, Decision Tree (ID3/CART) và Random Forest trên bài toán phân loại nhị phân và đa lớp.
  3. Thiết kế kiến trúc xử lý dữ liệu lớn: Tích hợp mô hình học máy tối ưu vào hệ sinh thái phân tán sử dụng Apache Spark Streaming và Apache Kafka để xử lý luồng dữ liệu thời gian thực.
  4. Đánh giá hiệu năng thực nghiệm: Đo lường và so sánh hiệu suất tính toán, thông lượng (throughput) và độ trễ (latency) giữa hai phương thức triển khai: Spark MLlib và Scikit-learn trên môi trường phân tán.
  5. Triển khai hệ thống giám sát hoàn chỉnh: Xây dựng luồng cảnh báo tự động tích hợp hệ thống ELK Stack (Elasticsearch, Logstash, Kibana) phục vụ giám sát tập trung.

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

  • Phạm vi: Tập trung vào phát hiện các dạng tấn công ứng dụng web phổ biến (SQL Injection, Brute Force XSS, Brute Force Web, DoS HTTP) dựa trên đặc trưng lưu lượng mạng tầng giao vận và ứng dụng.
  • Giới hạn: Không đi sâu vào giải mã các gói tin mã hóa đầu-cuối (SSL/TLS payload inspection) mà tập trung vào phân tích thống kê hành vi luồng (flow-based statistical behavior).

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

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

Tiêu chí Rule-based IDS (Snort/Suricata) Standalone ML IDS (Scikit-learn) Big Data Stream ML IDS (Đồ án đề xuất)
Cơ chế phát hiện Khớp mẫu dấu hiệu (Signatures) Học thống kê / Phân lớp mẫu Học thống kê phân tán thời gian thực
Phát hiện Zero-day Kém (Gần như không thể) Rất tốt (Dựa trên dị biệt) Rất tốt (Độ chính xác > 99%)
Khả năng mở rộng Giới hạn theo năng lực CPU máy trạm Rất thấp (Giới hạn RAM đơn máy) Mở rộng ngang tuyến tính (Scale-out)
Thông lượng xử lý Trung bình (~100 Mbps - 1 Gbps) Kém khi dữ liệu vượt ngưỡng RAM Rất cao (> 100.000 flows/giây)
Tỷ lệ cảnh báo sai Cao đối với lưu lượng tùy biến Trung bình đến thấp Rất thấp nhờ tối ưu Gini Index

Phân tích yêu cầu người dùng (MoSCoW)

  • Must have (Bắt buộc): Tiếp nhận dữ liệu luồng liên tục qua Kafka; phân loại tấn công web với độ chính xác F1-score $\ge 95%$; hiển thị dashboard cảnh báo real-time.
  • Should have (Nên có): Tự động lưu trữ lịch sử cảnh báo trên HDFS/HBase; khả năng chuyển đổi linh hoạt giữa phân loại nhị phân (Binary) và phân loại đa lớp (Multi-class).
  • Could have (Có thể có): Khả năng tự động re-train mô hình định kỳ khi phát hiện concept drift.
  • Won't have (Chưa hỗ trợ): Ngăn chặn chủ động (IPS - Intrusion Prevention System) bằng cách chặn IP tự động tại Firewall.

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình phân tầng hướng sự kiện (Event-driven Architecture), gồm 4 thành phần chính:

graph TD
    A[Network Traffic / Web Clients] -->|Raw Packets| B[CICFlowMeter Feature Extractor]
    B -->|80 Statistical Features JSON/CSV| C[Apache Kafka: Topic network-flows]
    C -->|DStream / Structured Streaming| D[Apache Spark Streaming Engine]
    subgraph Distributed Analytics Core
        D -->|Feature Vectorization| E[Trained ML Model: Random Forest]
        E -->|Classification Result| D
    end
    D -->|Predictions & Metrics| F[Apache Kafka: Topic ids-alerts]
    F -->|Ingest Logs| G[Logstash]
    G -->|Index Documents| H[Elasticsearch Cluster]
    H -->|Visualize & Query| I[Kibana Dashboard]
    D -.->|Batch Backup| J[Hadoop HDFS / HBase]

Technology Stack & Versions

  • Nền tảng phân tán: Apache Spark v3.2.0, Apache Hadoop HDFS v3.3.1, Apache Kafka v2.8.0.
  • Cơ sở dữ liệu & Giám sát: Elasticsearch v7.14.0, Logstash v7.14.0, Kibana v7.14.0, Apache HBase v2.4.6.
  • Môi trường ML & Ngôn ngữ: Python v3.8.10, PySpark, Scikit-learn v1.0.2, Pandas v1.3.5, NumPy v1.21.4.
  • Bộ trích xuất mạng: CICFlowMeter v4.0 (Trích xuất 80 thuộc tính thống kê 2 chiều Forward/Backward).

Methodology

Dự án áp dụng phương pháp luận phát triển lặp kết hợp khung quy trình CRISP-DM (Cross-Industry Standard Process for Data Mining) với 4 mốc tiến độ (Milestones):

  1. Pha 1 (Tuần 1 - 3): Khảo sát lý thuyết, thu thập và phân tích tương quan ma trận đặc trưng tập dữ liệu CSE-CIC-IDS2018.
  2. Pha 2 (Tuần 4 - 7): Tiền xử lý dữ liệu (loại bỏ NaN, vô cùng, chuẩn hóa Z-score, mã hóa One-Hot), xây dựng bộ dataset IDS2018-WEB.
  3. Pha 3 (Tuần 8 - 12): Huấn luyện, tối ưu siêu tham số cho 4 mô hình ML trên Python/Scikit-learn và Spark MLlib.
  4. Pha 4 (Tuần 13 - 16): Đóng gói pipeline Streaming, cấu hình Cluster phân tán, kiểm thử tải và tích hợp Dashboard ELK.

Implementation và kết quả

Development process

Quá trình trích chọn đặc trưng sử dụng thuật toán phân tích tương quan (Correlation Matrix Analysis) nhằm giảm thiểu hiện tượng đa cộng tuyến (Multicollinearity) từ 80 đặc trưng ban đầu xuống các đặc trưng mang tính phân biệt cao nhất: Flow Duration, Total Fwd Packets, Total Backward Packets, Fwd Packet Length Max, Init_Win_bytes_forward, Packet Length Mean, ACK Flag Count.

1. Thuật toán Naive Bayes

Dựa trên giả định độc lập điều kiện giữa các thuộc tính: $$P(C_i|X) = \frac{P(X|C_i)P(C_i)}{P(X)} = \frac{P(C_i)\prod_{k=1}^{n} P(x_k|C_i)}{P(X)}$$

2. Thuật toán Logistic Regression

Sử dụng hàm kích hoạt Sigmoid để ánh xạ giá trị dự đoán về khoảng xác suất $[0, 1]$: $$\sigma(z) = \frac{1}{1 + e^{-z}}, \quad \text{với } z = w^T x + b$$

3. Thuật toán Cây quyết định (Decision Tree - CART) & Random Forest

Chỉ số Gini Index đo lường mức độ đồng nhất của nút phân chia: $$G(p) = 1 - \sum_{i=1}^{c} p_i^2$$ $$G_{split} = \frac{N_1}{N} G(D_1) + \frac{N_2}{N} G(D_2)$$

Mức độ quan trọng của đặc trưng được xác định qua mức giảm Gini trung bình (Mean Decrease Gini).

# Trích đoạn xử lý phân tán với PySpark MLlib và Spark Streaming
from pyspark.sql import SparkSession
from pyspark.ml.classification import RandomForestClassificationModel
from pyspark.ml.feature import VectorAssembler
from pyspark.sql.functions import from_json, col
from pyspark.sql.types import StructType, StructField, DoubleType, StringType

# 1. Khởi tạo Spark Session với cấu hình phân tán
spark = SparkSession.builder \
    .appName("WebAttackDetection_SparkMLlib") \
    .config("spark.executor.memory", "4g") \
    .config("spark.executor.cores", "2") \
    .getOrCreate()

# 2. Định nghĩa Schema cho 80 đặc trưng từ CICFlowMeter
schema = StructType([
    StructField("FlowDuration", DoubleType(), True),
    StructField("TotalFwdPackets", DoubleType(), True),
    StructField("TotalBackwardPackets", DoubleType(), True),
    StructField("Init_Win_bytes_forward", DoubleType(), True),
    StructField("Label", StringType(), True)
])

# 3. Đọc dữ liệu luồng từ Apache Kafka Broker
raw_stream = spark.readStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers", "localhost:9092") \
    .option("subscribe", "network-flows") \
    .load()

parsed_stream = raw_stream.selectExpr("CAST(value AS STRING)") \
    .select(from_json(col("value"), schema).alias("data")).select("data.*")

# 4. Vector Assembler gom nhóm đặc trưng
feature_cols = ["FlowDuration", "TotalFwdPackets", "TotalBackwardPackets", "Init_Win_bytes_forward"]
assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")
vectorized_stream = assembler.transform(parsed_stream)

# 5. Load mô hình Random Forest đã huấn luyện trước từ HDFS
rf_model = RandomForestClassificationModel.load("hdfs://namenode:9000/models/rf_web_model")
predictions = rf_model.transform(vectorized_stream)

# 6. Gửi kết quả phát hiện bất thường trở lại Kafka topic 'ids-alerts'
query = predictions.selectExpr("CAST(prediction AS STRING) AS value") \
    .writeStream \
    .format("kafka") \
    .option("kafka.bootstrap.servers", "localhost:9092") \
    .option("topic", "ids-alerts") \
    .option("checkpointLocation", "/tmp/spark_checkpoint") \
    .start()

Testing và validation

Hiệu năng phát hiện được kiểm chuẩn trên tập kiểm thử (20% ngẫu nhiên của IDS2018-WEB gồm hơn 200.000 bản ghi dòng mạng) với các độ đo tiêu chuẩn:

$$\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}$$ $$\text{Precision} = \frac{TP}{TP + FP}, \quad \text{Recall} = \frac{TP}{TP + FN}, \quad F_1\text{-score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$$

Bảng kết quả đánh giá mô hình phân loại tấn công Web (Nhị phân & Đa lớp)

Mô hình thuật toán Độ chính xác (Accuracy) Precision Recall F1-Score ROC-AUC
Naive Bayes 87.32% 85.10% 89.45% 87.22% 0.881
Logistic Regression 92.15% 91.80% 92.50% 92.15% 0.934
Decision Tree (CART) 98.42% 98.11% 98.70% 98.40% 0.982
Random Forest (Tối ưu) 99.78% 99.82% 99.74% 99.78% 0.999
Confusion Matrix (Random Forest Binary Model):
┌─────────────────────────┬─────────────────────────┐
│ TN = 165,420 (Normal)   │ FP = 31 (Cảnh báo sai)  │
├─────────────────────────┼─────────────────────────┤
│ FN = 43 (Bỏ lọt tấn công)│ TP = 34,506 (Tấn công)  │
└─────────────────────────┴─────────────────────────┘

Đánh giá hiệu năng xử lý: Spark MLlib vs Scikit-learn

Thực nghiệm đo thời gian suy luận (Inference Execution Time) và độ trễ trên hệ thống cụm 3 Worker Nodes (Mỗi Node: 4 Cores, 8GB RAM):

Kích thước lô dữ liệu (Batch Size) Scikit-learn (Mô hình đơn máy) Spark MLlib (Hệ thống phân tán) Tỷ lệ tăng tốc (Speedup)
1.000 flows 12 ms 120 ms (Overhead phân phối) 0.1x
10.000 flows 98 ms 145 ms 0.67x
50.000 flows 620 ms 280 ms 2.21x
200.000 flows 3.450 ms 780 ms 4.42x
1.000.000 flows Out of Memory / 18.2s 2.350 ms 7.74x

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

  1. Kiến trúc tích hợp Big Data - ML hoàn chỉnh: Khắc phục nhược điểm của các nghiên cứu trước đây (chỉ tập trung vào thuật toán ML đơn lẻ hoặc chỉ dùng Hadoop MapReduce thuần túy không có ML), mang lại giải pháp cân bằng giữa độ chính xác nhận diện và thông lượng xử lý.
  2. Tối ưu hóa bộ dữ liệu thực nghiệm: Tinh lọc thành công tập IDS2018-WEB từ 16,2 triệu dòng của CSE-CIC-IDS2018, giúp tái hiện chính xác các vector tấn công web thực tế (SQLi, XSS, DoS) và tăng tốc độ huấn luyện lên $3.8\times$.
  3. Cơ chế suy luận phân tán thông lượng cao: Chứng minh bằng số liệu định lượng rằng Spark MLlib vượt trội hơn Scikit-learn gấp $4.4\times$ đến $7.7\times$ khi tải mạng vượt ngưỡng $200.000\text{ flows}$, loại bỏ hoàn toàn hiện tượng nghẽn mạng cục bộ.
  4. Pipeline giám sát trực quan hóa đầu-cuối: Xây dựng thành công Dashboard Kibana hiển thị trực quan thông số phân tích luồng, cho phép truy vấn nhanh các IP tấn công, loại hình khai thác và tần suất xuất hiện theo thời gian thực.

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

Kịch bản ứng dụng

  • Cổng thanh toán & Thương mại điện tử: Đặt cụm NIDS tại vùng DMZ để giám sát toàn bộ lưu lượng HTTP/HTTPS gửi tới Web Server, phát hiện các nỗ lực chèn mã độc SQLi vào Form đăng nhập/thanh toán.
  • Trung tâm dữ liệu doanh nghiệp (Data Center/SOC): Tích hợp hệ thống làm tầng phân tích chuyên sâu cho các kỹ sư SOC (Security Operations Center), giảm thiểu 90% khối lượng cảnh báo rác nhờ độ chính xác $99.78%$ của Random Forest.
                   [ Internet Traffic ]
                            │
                     [ Tường lửa / NAT ]
                            │
               ┌────────────┴────────────┐
               ▼                         ▼
      [ DMZ: Web Servers ]       [ Tap / Port Mirror ]
                                         │
                                [ CICFlowMeter Agent ]
                                         │
                                [ Kafka + Spark Cluster ]
                                         │
                                [ SOC Kibana Dashboard ]

Yêu cầu cấu hình hệ thống triển khai

  • Cụm tính toán tối thiểu (3 Nodes):
    • Master Node: 4 Cores CPU, 8GB RAM, 100GB SSD (Hadoop NameNode, Spark Master, Kafka Broker).
    • Worker Nodes (2 Nodes): 4 Cores CPU, 8GB RAM, 200GB HDD (DataNode, Spark Executor).
  • Hệ điều hành: Ubuntu Server 20.04 LTS x86_64.
  • Băng thông mạng khuyến nghị: Network Interface Card (NIC) $\ge 1\text{ Gbps}$.

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

  • Hạn chế kỹ thuật:
    • Mô hình Random Forest có kích thước lớn, đòi hỏi bộ nhớ RAM đáng kể khi broadcast model tới toàn bộ Spark Executors.
    • Phân tích luồng (Flow-based) chưa giải mã sâu các payload bị mã hóa phức tạp hoặc kỹ thuật làm rối mã (Obfuscation).
  • Hướng phát triển tương lai:
    • Nghiên cứu tích hợp các mô hình Học sâu (Deep Learning như LSTM, Transformer) trên nền tảng Spark Deep Learning Pipelines để nhận dạng chuỗi hành vi tấn công dài ngày (Advanced Persistent Threat - APT).
    • Ứng dụng kỹ thuật Online Learning để cập nhật trọng số mô hình liên tục (Incremental Training) mà không cần ngắt hệ thống để huấn luyện lại.

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

  • Sinh viên & Nghiên cứu sinh: Tiếp cận mã nguồn mẫu về việc tích hợp PySpark, Spark MLlib với Kafka và ELK Stack, tài liệu tham khảo chuẩn mực về xử lý dữ liệu mất cân bằng trong An toàn thông tin.
  • Kỹ sư An toàn thông tin (Security Engineers): Bản thiết kế kiến trúc IDS phân tán sẵn sàng áp dụng vào hệ thống thực tế với chi phí phần mềm mã nguồn mở 0 đồng.
  • Doanh nghiệp & Tổ chức: Giải pháp bảo vệ hạ tầng web toàn diện, giảm thiểu rủi ro thất thoát dữ liệu và thiệt hại tài chính với khả năng mở rộng linh hoạt theo quy mô kinh doanh.

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

1. Hệ thống yêu cầu cấu hình phần cứng tối thiểu như thế nào để vận hành thực tế?

Để vận hành ổn định trong môi trường doanh nghiệp nhỏ và vừa, hệ thống yêu cầu cụm phân tán tối thiểu 3 nút (1 Master, 2 Workers), mỗi nút trang bị tối thiểu 4 Core CPU, 8GB RAM và ổ cứng SSD tốc độ cao phục vụ Kafka Broker I/O.

2. Giới hạn mở rộng (Scalability) của hệ thống nằm ở đâu và giải quyết thế nào?

Giới hạn mở rộng chủ yếu phụ thuộc vào số lượng Partition trong Kafka Topic và số lượng Cores của Spark Cluster. Hệ thống hoàn toàn có thể mở rộng ngang (Scale-out) bằng cách bổ sung Worker Nodes vào cụm Spark và tăng số Partitions của Kafka mà không cần cấu hình lại mã nguồn ứng dụng.

3. Hệ thống có khả năng tích hợp với các giải pháp SIEM hiện có không?

Có. Nhờ việc đẩy toàn bộ kết quả phân tích và cảnh báo vào Elasticsearch và Kafka Topics chuẩn hóa dạng JSON, hệ thống dễ dàng tích hợp hai chiều với các nền tảng SIEM hàng đầu như Splunk, IBM QRadar hoặc Wazuh.

4. Chi phí triển khai và bảo trì hệ thống ước tính như thế nào?

Toàn bộ phần mềm trong hệ sinh thái (Apache Spark, Kafka, Hadoop, ELK) đều là mã nguồn mở (Open Source), loại bỏ hoàn toàn chi phí bản quyền. Doanh nghiệp chỉ chi trả chi phí hạ tầng máy chủ (On-Premise hoặc Cloud VM) với thời gian hoàn vốn đầu tư (ROI) ước tính dưới 6 tháng nhờ ngăn chặn sớm các sự cố rò rỉ dữ liệu.

5. Tại sao thuật toán Random Forest lại vượt trội hơn Decision Tree đơn lẻ trong bài toán này?

Random Forest sử dụng kỹ thuật kết hợp (Ensemble Learning) gồm hàng trăm cây quyết định độc lập, sử dụng kỹ thuật lấy mẫu Bootstrap và chọn ngẫu nhiên tập con đặc trưng (Feature Subsampling). Cơ chế bỏ phiếu đa số (Majority Voting) giúp Random Forest triệt tiêu hiện tượng quá khớp (Overfitting) và có khả năng chống nhiễu vượt trội trên các tập dữ liệu mạng phức tạp.


Kết luận

Đồ án tốt nghiệp "Phát hiện tấn công mạng dựa trên nền tảng xử lý dữ liệu lớn" đã giải quyết trọn vẹn bài toán phát hiện xâm nhập ứng dụng web trong kỷ nguyên bùng nổ dữ liệu. Bằng việc kết hợp sức mạnh phân loại chính xác của mô hình học máy Random Forest (Accuracy 99.78%, F1-score 99.78%) cùng khả năng xử lý luồng phân tán của Apache Spark StreamingApache Kafka, hệ thống đã chứng minh tính khả thi vượt trội với khả năng xử lý hàng trăm nghìn luồng mạng mỗi giây với độ trễ dưới 1 giây.

Đây là minh chứng rõ nét cho xu hướng chuyển dịch tất yếu từ các hệ thống giám sát an ninh mạng truyền thống sang kiến trúc thông minh hướng dữ liệu lớn, mang lại giá trị ứng dụng thực tiễn cao cho công tác đảm bảo an toàn thông tin doanh nghiệp.