Bối cảnh và vấn đề nghiên cứu
Bước vào giai đoạn cách mạng công nghiệp 4.0, internet phát triển mạnh mẽ kéo theo nhu cầu trao đổi thông tin ngày càng lớn và đa dạng. Trong bối cảnh đó, bảo mật mạng trở thành vấn đề cấp thiết không chỉ với người dùng cá nhân mà còn với các tổ chức đặc thù yêu cầu bảo mật cao như quân sự, ngân hàng, tài chính. Các cuộc tấn công mạng ngày càng tinh vi, vượt qua các lớp bảo mật truyền thống như tường lửa (firewall), mã hóa dữ liệu và VPN, đặt ra thách thức lớn cho công tác phòng thủ hệ thống.
Các hệ thống phát hiện xâm nhập mạng (Intrusion Detection System — IDS) đã được xây dựng nhưng vẫn chưa đủ linh hoạt, khả năng mở rộng không cao và chưa đối phó hiệu quả với các cuộc tấn công mới. Một số nghiên cứu gần thời điểm thực hiện đề tài đề xuất hướng tiếp cận dựa trên học máy (machine learning) kết hợp với các nền tảng xử lý dữ liệu lớn như Apache Spark, hứa hẹn mang lại hiệu quả cao hơn so với phương pháp truyền thống.
Nhiệm vụ nghiên cứu được xác định cụ thể gồm năm hướng:
- Tìm hiểu tổng quan về phát hiện xâm nhập mạng.
- Tìm hiểu tổng quan về Apache Spark cho phân tích dữ liệu lớn.
- Tìm hiểu tổng quan các thuật toán học máy mà Spark hỗ trợ (thông qua MLlib).
- Tìm hiểu về các tập dữ liệu mạng phổ biến được sử dụng cho bài toán phát hiện xâm nhập.
- Đánh giá và so sánh một số thuật toán học máy cho bài toán phát hiện xâm nhập mạng.
Phạm vi nghiên cứu: Đề tài được thực hiện trong khoảng thời gian từ tháng 03/2019 đến tháng 07/2019, thuộc chuyên ngành Hệ thống Thông tin, Khoa Công Nghệ Thông Tin, Trường Đại học Sư Phạm Kỹ Thuật TP.HCM. Dữ liệu thực nghiệm giới hạn ở tập dữ liệu chuẩn NSL-KDD — phiên bản cải tiến từ KDD99.
Cơ sở lý thuyết và phương pháp
Khung lý thuyết và công nghệ sử dụng
Đề tài sử dụng hai trụ cột lý thuyết chính:
-
Hệ thống phát hiện xâm nhập mạng (IDS): Dựa trên định nghĩa của Kendall (1999) về xâm nhập mạng như "những hoạt động có chủ đích, lợi dụng các tổn thương của hệ thống thông tin nhằm phá vỡ tính sẵn sàng, tính toàn vẹn và tính bảo mật của hệ thống". Đề tài tập trung vào hướng Anomaly-based IDS (phát hiện dựa vào bất thường) với hai pha: huấn luyện và phát hiện.
-
Apache Spark và MLlib: Apache Spark được sử dụng như nền tảng tính toán phân tán hợp nhất, hỗ trợ xử lý dữ liệu song song trên cụm máy tính. Thư viện MLlib trong hệ sinh thái Spark cung cấp các giao diện học máy phù hợp với bài toán phân loại dữ liệu lớn.
Phương pháp nghiên cứu và thực nghiệm
Đề tài áp dụng phương pháp thực nghiệm kết hợp phân tích — tổng hợp tài liệu. Quy trình học máy trong Spark được tuân thủ theo sáu bước: thu thập và trích xuất dữ liệu → tiền xử lý → chuyển đổi thuộc tính → chia tập huấn luyện → đánh giá và so sánh mô hình → dự đoán thực tế.
Các phương pháp đánh giá mô hình được sử dụng bao gồm:
- Hold-out Validation: Chia dữ liệu thành hai phần huấn luyện và kiểm tra.
- k-fold Cross-Validation: Chia tập dữ liệu thành k fold, huấn luyện trên k−1 fold và đánh giá trên fold còn lại, lặp lại với nhiều bộ siêu tham số (hyperparameter).
- Bootstrap và Jackknife: Phương pháp lấy mẫu có hoàn lại để sinh ra các tập dữ liệu con.
- Hyperparameter Tuning: Sử dụng Grid Search và Random Search để tìm bộ tham số tối ưu cho từng thuật toán.
Thước đo chính là Accuracy (độ chính xác) tính từ confusion matrix với các khái niệm TP, TN, FP, FN.
Nguồn dữ liệu
Tập dữ liệu NSL-KDD — được tạo ra năm 2009 từ tập KDD99 (gốc là dữ liệu TCPDUMP 7 tuần từ hệ thống DARPA 1998) sau khi loại bỏ 78% bản ghi dư thừa trong tập huấn luyện và 75% trong tập kiểm tra. Tập huấn luyện NSL-KDD gồm 125.973 bản ghi, tập kiểm tra gồm 22.544 bản ghi, mỗi bản ghi có 41 thuộc tính mô tả các đặc trưng kết nối mạng.
Nội dung chính theo từng chương
Chương 1: Tổng quan đề tài
Chương này xác định bối cảnh và lý do chọn đề tài, nêu mục tiêu nghiên cứu với năm nhiệm vụ cụ thể và trình bày bố cục tổng thể của báo cáo. Đây là chương định hướng, đặt nền tảng cho toàn bộ công trình.
Chương 2: Tổng quan về phát hiện xâm nhập mạng
Chương này hệ thống hóa các kiến thức nền tảng về an toàn mạng và IDS, bao gồm:
Phân loại kiểu tấn công theo bộ dữ liệu KDD99/NSL-KDD:
| Nhóm tấn công |
Ký hiệu |
Mô tả |
Ví dụ kiểu tấn công |
| Từ chối dịch vụ |
DoS |
Làm quá tải tài nguyên, gây ngưng hoạt động |
neptune, smurf, pod, teardrop |
| Thăm dò |
Probe |
Thu thập thông tin trái phép về mạng |
ipsweep, nmap, portsweep, satan |
| Chiếm quyền root |
U2R |
Leo thang đặc quyền từ người dùng lên root |
buffer-overflow, loadmodule, perl, rootkit |
| Điều khiển từ xa |
R2L |
Khai thác lỗ hổng để truy cập trái phép từ xa |
guess-passwd, ftp-write, imap, phf |
Phân loại IDS theo cách thu thập dữ liệu:
- Network-based IDS (NIDS): Các sensor giám sát lưu lượng toàn mạng theo thời gian thực.
- Host-based IDS (HIDS): Phần mềm chạy trên từng máy trạm, ghi log hoạt động nội bộ.
Phân loại IDS theo phương pháp phân tích:
- Misuse-based IDS: So khớp với các dấu hiệu tấn công đã biết, tỷ lệ cảnh báo sai thấp nhưng không phát hiện được tấn công mới.
- Anomaly-based IDS: Xây dựng hồ sơ hành vi bình thường và phát hiện sai lệch — hướng mà đề tài tập trung.
Các kỹ thuật phòng thủ truyền thống được khảo sát gồm tường lửa (firewall), mã hóa dữ liệu và mạng riêng ảo (VPN), với phân tích về ưu — nhược điểm của từng phương pháp.
Chương 3: Tổng quan về Apache Spark trong phân tích dữ liệu lớn
Chương này giới thiệu kiến trúc và cơ chế hoạt động của Apache Spark, bao gồm:
Kiến trúc Spark Cluster: Mô hình gồm Driver Process và các Executor Process. Driver duy trì thông tin ứng dụng, phân tích và phân công tác vụ; các Executor thực thi code và báo cáo kết quả. Cluster Manager (Standalone, YARN hoặc Mesos) quản lý tài nguyên.
Các khái niệm cốt lõi:
- SparkSession: Giao diện điều khiển ứng dụng Spark, quan hệ 1-1 với mỗi ứng dụng.
- DataFrame: Cấu trúc dữ liệu bảng với Schema, được phân chia thành các partition để xử lý song song trên nhiều Worker Node.
- Transformations: Phép biến đổi dữ liệu theo cơ chế Lazy Evaluation — Spark xây dựng "plan of transformations" và chỉ thực thi khi cần thiết. Gồm hai loại: narrow dependencies (mỗi partition đầu vào cho một partition đầu ra) và wide dependencies (một partition đầu vào sinh nhiều partition).
- DAG (Logically Directed Acyclic Graph): Đồ thị có hướng không chu trình mô tả luồng xử lý, được tối ưu trước khi chuyển thành physical execution plan.
Workflow Spark Architecture gồm bốn bước: Client gửi code → Driver chuyển thành DAG → Cluster Manager phân bổ Executor → Executor thực thi song song và báo cáo về Driver.
Hệ sinh thái MLlib hỗ trợ các nhóm thuật toán:
- Tiền xử lý dữ liệu
- Học có giám sát: phân loại (Logistic Regression, Decision Trees, Random Forests, Gradient-Boosted Trees) và hồi quy
- Gợi ý (Recommendation)
- Học không có giám sát: k-means, Bisecting k-means, Gaussian Mixture Models, Latent Dirichlet Allocation
- Phân tích đồ thị
- Deep Learning
Chương 4: Kết quả ứng dụng một số thuật toán vào phát hiện xâm nhập mạng
Đây là chương thực nghiệm trọng tâm của đề tài.
Bộ dữ liệu NSL-KDD được chọn với phân bố nhãn trong tập huấn luyện (125.973 bản ghi):
| Phân lớp |
Tên tấn công |
Số bản ghi |
Tỷ lệ % |
| Normal |
— |
— |
67,45% |
| Probe |
ipsweep, nmap, portsweep, satan |
— |
11,26% |
| DoS |
back, land, neptune, pod, smurf, teardrop |
— |
45,46% |
| U2R |
buffer_overflow, loadmodule, perl, rootkit |
52 |
0,04% |
| R2L |
ftp_write, guess_passwd, imap, multihop, phf, spy, warezclient, warezmaster |
995 |
0,79% |
| Tổng |
|
125.973 |
|
Tiền xử lý dữ liệu: NSL-KDD có bốn cột phi số (cột 2: loại giao thức, cột 3: loại dịch vụ, cột 4: trạng thái cờ, cột 42: nhãn). Phương pháp One Hot Encoding được áp dụng để chuyển đổi các thuộc tính categorical mà không làm ảnh hưởng đến thứ tự giá trị. Sau mã hóa, số cột thuộc tính tăng lên 84 cột (thêm 84 cột mới, trừ 3 cột categorical gốc). Nhãn được biến đổi theo hai phương án: nhị phân (normal=0, attack=1) và đa lớp (normal=0, dos=1, probe=2, u2r=3, r2l=4).
Lựa chọn thuộc tính: Phương pháp Attribute Ratio (AR) được áp dụng, trong đó chỉ số AR của thuộc tính i bằng MAX của Class Ratio (CR) trên các class. CR được tính theo hai công thức tương ứng với dữ liệu dạng numeric và binary. Kết quả thống kê chỉ số AR cho tất cả 41 thuộc tính được lập bảng để làm cơ sở lựa chọn.
Thực nghiệm bốn thuật toán học máy trên Spark MLlib:
- Random Forest
- Neural Network
- Logistic Regression
- Support Vector Machine (SVM)
Với mỗi thuật toán, quy trình gồm: xác định 5 hyperparameter → áp dụng 5-fold Cross-Validation để tìm bộ tham số tốt nhất → đánh giá model trên tập kiểm tra. Kết quả được tổng hợp ở các bảng so sánh độ chính xác trung bình và kết quả thực nghiệm cuối cùng.
Thiết kế và triển khai
Đề tài thuộc loại thực nghiệm tính toán trên nền tảng Apache Spark, do đó có các yếu tố kỹ thuật đáng ghi nhận:
Nền tảng và công nghệ: Apache Spark với thư viện MLlib, hai package chính là org.apache.spark.ml (DataFrame API) và org.apache.spark.mllib (RDD API). Spark hỗ trợ Python, Java, Scala và R.
Quy trình pipeline học máy trong Spark:
- Thu thập và trích xuất dữ liệu liên quan
- Tiền xử lý dữ liệu (One Hot Encoding, chuẩn hóa nhãn)
- Lựa chọn thuộc tính (phương pháp AR)
- Ước lượng độ chính xác và lựa chọn tham số (5-fold CV + Grid Search/Random Search)
- Kiểm tra mô hình trên tập test
Tham số thực nghiệm: Với mỗi thuật toán, 5 bộ hyperparameter được thử nghiệm qua 5-fold Cross-Validation. Kết quả trung bình của từng bộ tham số được so sánh để chọn hyperparameter tốt nhất trước khi đánh giá chính thức.
Kết quả và đóng góp
Kết quả chính: Đề tài hoàn thành thực nghiệm bốn thuật toán học máy (Random Forest, Neural Network, Logistic Regression, Support Vector Machine) trên tập dữ liệu NSL-KDD thông qua Apache Spark MLlib. Kết quả thực nghiệm được trình bày ở bốn bảng tương ứng với mỗi thuật toán, bao gồm độ chính xác trung bình khi áp dụng 5-fold Cross-Validation và kết quả cuối cùng trên tập kiểm tra.
[!NOTE]
Phần fulltext được cung cấp kết thúc trước khi trình bày giá trị số cụ thể của từng bảng kết quả thực nghiệm. Các con số accuracy cụ thể không có đủ cơ sở trích xuất từ đoạn văn bản được cung cấp.
Giải pháp và đóng góp kỹ thuật:
- Xây dựng quy trình hoàn chỉnh từ tiền xử lý NSL-KDD đến đánh giá mô hình trên Spark MLlib.
- So sánh hiệu quả bốn thuật toán phân loại trên cùng một bộ dữ liệu và cùng điều kiện thực nghiệm, cung cấp cơ sở thực nghiệm cho việc lựa chọn thuật toán phù hợp với bài toán IDS.
- Áp dụng phương pháp AR để lựa chọn thuộc tính trên 41 đặc trưng của NSL-KDD, góp phần giảm chiều dữ liệu và tăng tốc độ xử lý.
- Đề xuất phương án biến đổi nhãn theo hai kịch bản (nhị phân và đa lớp 5 nhóm) phù hợp với các mục tiêu phân loại khác nhau.
Hạn chế và hướng nghiên cứu tiếp
Hạn chế được đề tài đề cập:
- Thời gian thực hiện ngắn (03/2019 — 07/2019) và năng lực nhóm còn hạn chế, có thể dẫn đến thiếu sót trong khảo sát toàn diện các thuật toán và cấu hình thực nghiệm.
- Tập dữ liệu NSL-KDD, dù đã cải tiến từ KDD99, vẫn là dữ liệu tổng hợp từ năm 1998 — 1999, chưa phản ánh đặc trưng của các cuộc tấn công hiện đại.
Hướng phát triển được nêu trong phần "Vấn đề tồn đọng và hướng phát triển":
- Mở rộng thực nghiệm trên các tập dữ liệu cập nhật hơn ngoài NSL-KDD.
- Nghiên cứu thêm các thuật toán và kỹ thuật tối ưu hóa khác trong MLlib, đặc biệt là Deep Learning.
- Đánh giá hiệu năng tính toán phân tán của Spark khi quy mô dữ liệu tăng lên (scale-up thực tế trên cluster nhiều node).
Giá trị tham khảo
Đề tài phù hợp làm tài liệu tham khảo cho các nhóm đối tượng sau:
- Sinh viên ngành Công nghệ Thông tin, An toàn Thông tin muốn bắt đầu tìm hiểu về IDS và ứng dụng học máy trong bảo mật mạng — đặc biệt Chương 2 cung cấp nền tảng lý thuyết có hệ thống về các kiểu tấn công và phân loại IDS.
- Sinh viên làm đồ án về Apache Spark hoặc Big Data — Chương 3 trình bày kiến trúc Spark, DataFrame, Transformations, DAG và hệ sinh thái MLlib một cách có cấu trúc, phù hợp làm tài liệu nhập môn.
- Nhóm nghiên cứu thực nghiệm học máy muốn tham khảo quy trình xử lý bộ dữ liệu NSL-KDD: tiền xử lý, mã hóa One Hot Encoding, lựa chọn thuộc tính bằng AR, và thiết lập thực nghiệm 5-fold Cross-Validation.
- Nhóm muốn so sánh thuật toán IDS trên nền tảng phân tán — đây là một trong số ít đề tài cấp cử nhân tại Việt Nam thực nghiệm đồng thời bốn thuật toán (Random Forest, Neural Network, Logistic Regression, SVM) trên Spark MLlib với cùng bộ dữ liệu chuẩn.
Câu hỏi thường gặp
1. Tại sao đề tài chọn NSL-KDD thay vì KDD99 gốc?
Năm 2009, các tác giả phân tích thống kê KDD99 phát hiện 78% bản ghi dư thừa trong tập huấn luyện và 75% trong tập kiểm tra. Lượng bản ghi trùng lặp này khiến các thuật toán thiên vị các bản ghi xuất hiện thường xuyên và bỏ qua các cuộc tấn công hiếm gặp như U2R (chỉ 52 bản ghi, chiếm 0,04%). NSL-KDD giải quyết vấn đề này bằng cách loại bỏ các bản ghi dư thừa, còn 125.973 bản ghi huấn luyện và 22.544 bản ghi kiểm tra.
2. Phương pháp One Hot Encoding được áp dụng như thế nào với NSL-KDD?
Ba cột phi số (cột 2: loại giao thức, cột 3: loại dịch vụ, cột 4: trạng thái cờ) được mã hóa theo One Hot Encoding. Sau khi mã hóa, bảng dữ liệu được bổ sung tổng cộng 84 cột mới tương ứng với tất cả các giá trị có thể của ba cột trên, đồng thời xóa 3 cột categorical gốc. Phương pháp này không làm ảnh hưởng đến thứ tự giữa các giá trị và giúp thuật toán hội tụ nhanh hơn.
3. Phương pháp Attribute Ratio (AR) được sử dụng để làm gì và tính như thế nào?
AR dùng để lựa chọn thuộc tính quan trọng từ 41 đặc trưng NSL-KDD, nhằm giảm số chiều dữ liệu, loại bỏ nhiễu và tăng tốc độ xử lý. Chỉ số AR của thuộc tính i được tính là AR(i) = MAX(CR(j)) với j chạy qua các class. CR được tính theo công thức cho dữ liệu numeric (dùng giá trị trung bình AVG) hoặc binary tùy theo loại dữ liệu của thuộc tính đó.
4. Bốn thuật toán nào được thực nghiệm và quy trình lựa chọn tham số ra sao?
Bốn thuật toán được thực nghiệm là Random Forest, Neural Network, Logistic Regression và Support Vector Machine — đều thuộc nhóm học có giám sát trong MLlib. Với mỗi thuật toán, 5 bộ hyperparameter được xác định trước, sau đó áp dụng 5-fold Cross-Validation để tính độ chính xác trung bình cho từng bộ tham số. Bộ hyperparameter cho kết quả cao nhất được chọn để đánh giá chính thức trên tập kiểm tra.
5. Đề tài sử dụng chiến lược phân loại nhị phân hay đa lớp cho bài toán IDS?
Đề tài triển khai cả hai phương án: phân loại nhị phân (normal=0, attack=1) và phân loại đa lớp 5 nhóm (normal=0, dos=1, probe=2, u2r=3, r2l=4). Phương án biến đổi nhãn này cho phép đánh giá khả năng của các thuật toán ở cả hai cấp độ phát hiện — phát hiện có xâm nhập hay không, và phân loại cụ thể kiểu tấn công.
Kết luận
Đề tài "Tìm hiểu Spark cho phân tích dữ liệu lớn và áp dụng cho bài toán phát hiện xâm nhập mạng" cung cấp một khảo sát có hệ thống về IDS, Apache Spark và MLlib, đồng thời thực nghiệm bốn thuật toán học máy (Random Forest, Neural Network, Logistic Regression, SVM) trên tập dữ liệu chuẩn NSL-KDD. Quy trình thực nghiệm được thiết kế bài bản với các bước tiền xử lý, lựa chọn thuộc tính, Hyperparameter Tuning và đánh giá bằng 5-fold Cross-Validation. Đề tài có giá trị thực tiễn trong việc xây dựng nền tảng so sánh các thuật toán IDS trên nền tảng xử lý phân tán, phù hợp làm tài liệu tham khảo cho sinh viên ngành Hệ thống Thông tin và An toàn Thông tin tại các trường đại học kỹ thuật tại Việt Nam.