3.3.1 Giới thiệu về môi trƣờng cài đặt
Chương trình được viết bằng ngôn ngữ C#.Net trong bộ Visual Studio 2010 sử dụng phiên bản .Net Framework 4.0. Các thuộc tính của dữ liệu đầu vào được lưu thành các trường dữ liệu của chương trình, lưu trữ trong hệ quản trị cơ sở dữ liệu Sql Server 2008 R2.
Thuật toán K-mean là thuật toán kinh điển đã được cài đặt và sử dụng rộng rãi. Trong bài ta sử dụng thư viện thuật toán K-Means ứng dụng cho bài toán phát hiện cụm di biệt. các thư viện sử dụng có tên IKVM.OpenJDK.Core.dll, IKVM.OpenJDK.Util.dll, IKVM.OpenJDK.Text.dll, IKVM.Runtime.JNI.dll, WekaSharp.dll.
3.3.2 Các chức năng của chƣơng trình Lƣu đồ thực hiện chƣơng trình
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
54
a. Đọc file dữ liệu đầu vào
Cho phép nhập dữ liệu từ tệp có cấu trúc như trong mô tả ở mục 3.2. Trước khi nhập dữ liệu cho chương trình, người dùng có thể chỉnh sửa trên giao diệ phần mềm Weka 3. Để nhập dữ liệu, người dùng nhấn vào nút “Chọn...”, sau đó tìm đến tệp dữ liệu có cấu trúc lưu trữ trên máy tính có đuôi dạng *.arff. Sau khi chọn tệp, dữ liệu sẽ được lấy thông tin cần thiết về các thuộc tính và thực hiện đưa vào cơ sở dữ liệu và hiển thị lên ở nhóm “Chi tiết dữ liệu” để phục vụ cho việc thực hiện các thuật toán tiếp theo được dễ dàng hơn
Hình 3.5: Giao diện chọn bộ dữ liệu
b. Chi tiết dữ liệu
Nhóm chi tiết dữ liệu: hiển thị thông tin về các bản ghi kết nối trong file dữ liệu đầu vào, số dòng là thứ tự bản ghi, mỗi cột là một thuộc tính và chi tiết về nội dung của dữ liệu trong các bản ghi.
Do số lượng bản ghi trong dữ liệu đầu thường khá lớn nên việc hiển thị chi tiết dữ liệu chỉ được thực hiện với một số lượng nhỏ để tránh ảnh hưởng tới tốc độ thực thi. Mặc định dữ liệu hiển thị được đặt từ 1 tới 100, Nếu muốn xem chi tiết của các bản ghi ta đánh số vào textbox dữ liệu từ và đến rồi nhấn hiển thị để xem:
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
55
Hình 3.6: Hiển thị chi tiết dữ liệu đầu vào.
Sau khi đã chọn được file dữ liệu đầu vào ta click vào button “Thực hiện K- Means” để chuyển sang form thực hiện thuật toán phân cụm các bản ghi thông thường và dị biệt.
c. Tham số phân cụm K-Means
Cho phép người dùng nhập các tham số điều khiển cho thuật toán K-Means bao gồm: số cụm cần phân. Theo phân tích ở chương 2 thì việc phân cụm phát hiện các phần tử dị biệt thì ta chọn số cụm cần phân là 2. Chương trình cho phép thực hiện hàm khoảng cách theo Euclid. Sau khi lựa chọn đầy đủ các tham số, người dùng nhấn nút “Thực hiện K-Means” để chương trình xử lý tính toán.
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
56
Hình 3.7: Form thực hiện thuật toán K-Means.
Do số lượng bản ghi khá lớn nên việc thực hiện hết khoảng 3 phút trên máy tính có cấu hình CPU Celeron D 1,6GHZ bộ nhớ Ram 1GB cho bộ dữ liệu có 49402 bản ghi kết nối. Và khoảng 20 phút cho bộ dữ liệu có 49402 bản ghi (1/10) bộ dữ liệu KDD đầy đủ.
Sau khi thực hiện xong thuật toán các thông tin về chi tiết phân cụm từng bản ghi sẽ được hiển thị trong bảng bên trái. Ta có thể chọn chi tiết phân cụm từ bản ghi x đến y và chọn hiển thị để xem chi tiết trong khoảng đó.
Thông tin về số lần lặp, tổng bình phương lỗi do khai căn khi tính khoảng cách Euclid trong các cụm sẽ được hiển thị trong “Kết quả phân cụm K-Means” ở phía trên bên phải của form. Các giá trị bị mất đó sẽ được thay thế bằng giá trị trung bình khi tính lại trọng tâm cho cụm
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
57
Hình 3.8: Kết quả thực hiện thuật toán K-Means.
Bảng phân cụm sẽ cho ta thông tin chi tiết về các trọng tâm của thuộc tính trong mỗi cụm, số bản ghi trong mỗi cụm. Từ đó ta có thể nhận thấy các thông tin trong cụm 1 thể hiện nhiều biểu hiện của cụm các bản ghi dị biệt, có thể lấy ví dụ như: đăng nhập không thành công (login giá trị =0), Số giây của mỗi kết nối duration rất ngắn, số kết nối tới 1 host ở thời điểm hiện tại và trong khoản thời gian 2 s trước cùng với số kết nối tới có cùng loại dịch vụ ở thời điểm hiện tại và trong khoản thời gian 2 s trước đó là rất lớn (biểu hiện cho các cuộc tấn công)...v.v. Còn các phần tử được đánh dấu là 0 là các bản ghi kết nối bình thường. Việc nhận biết cụm bình thường và dị biệt phụ thuộc vào giá trị các thuộc tính chứ không phải vào con số 0 hay 1 do thuật toán K-Means không có khả năng nhận biết cụm có giá trị thuộc tính bao nhiêu thì thuộc về dạng nào.
Ở cuối bảng phân cụm là thông số về tỉ lệ % của các bản ghi thuộc cụm bình thường hay dị biệt và cụ thể số bản ghi trong mỗi cụm:
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
58
Hình 3.9: Số bản ghi kết nối thuộc về mỗi cụm.
Ảnh dưới đây cho ta thấy kết quả khi thực hiện thuật toán K-Means trên bộ dữ liệu lớn hơn 49402 bản ghi bằng 1/10 bộ dữ liệu KDD cup. Kết quả cho thấy cụm dữ liệu được đánh số là 0 mới là cụm chứa các bản ghi kết nối thông thường còn cụm dữ liệu được đánh số là 1 là cụm các bản ghi kết nối dị biệt.
Hình 3.10: Kết quả thực hiện thuật toán K-Means với bộ dữ liệu có 494020 bản ghi
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
59
Ngoài ra chương trình cho phép lưu các kết quả ra định dạng file text ta nhấn vào “Lưu kết quả ra file”, chọn đường dẫn, tên file và save.
3.4. Nhận xét, đánh giá chƣơng trình thử nghiệm
Chương trình cài đặt dựa trên thuật toán K-Meana, sử dụng hai hàm khoảng cách phổ biến là khoảng cách Euclid. Cho phép người dùng tùy chọn số cụm, Khoảng cách tối đa seed là một thông số ảnh hưởng tới số lần lặp để ra được kết quả cuối cùng. Kết quả thu được là các phần tử được phân theo các cụm được đánh số từ 1 đến số cụm . Nhược điểm của chương trình là kết quả hiển thị chưa trực quan.
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
60
KẾT LUẬN VÀ HƢỚNG NGHIÊN CỨU KẾT LUẬN
Trong bản luận văn này tôi đã tìm hiểu, nghiên cứu một số vấn đề sau: - Luận văn trình bày lý thuyết cơ bản tấn công mạng và các kiểu tấn công, về phân cụm dữ liệu, và thuật toán K-Means trong phân cụm dữ liệu dựa vào cụm trung tâm để ứng dụng vào phân cụm các phần tự dị biệt trong kết nối.
- Giới thiệu về cấu trúc, thuộc tính của bộ dữ liệu KDD Cup 1999 và phương pháp giảm số bản ghi trong bộ dữ liệu đầu vào.
- Luận văn cài đặt thuật toán phân cụm K-means để minh họa cho việc phân loại các kết nối thông thường và dị biệt. Tuy nhiên chương trình có nhiều hạn chế như kết quả hiển thị chưa trực quan và định dạng tệp hỗ trợ đầu vào chỉ là tệp *.arff.
HƢỚNG NGHIÊN CỨU
Trong tương lai đề tài phát triển theo hướng nghiên cứu phần thu thập được trực tiếp các bản ghi kết nối từ mạng, thực hiện phân loại nó và có các modul phát hiện được đâu là kết nối thông thường, đâu là các kết nối dị biệt từ đó cảnh báo các kết nối không an toàn khi lượng các bản ghi kết nối thuộc nhóm dị biệt xuất hiện nhiều.
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
61
TÀI LIỆU THAM KHẢO Tiếng việt:
[1] Vũ Lan Phương, “Nghiên cứu và cài đặt một số giải thuật phân cụm phân lớp”, 2006 (Đại học Bách khoa Hà Nội)
[2] Hoàng Thị Toàn (2012), Nghiên cứu cơ sở dữ liệu KDD 99 và ứng dụng
cho bảo mật mạng, Đề tài nghiên cứu khoa học.
Tiếng Anh:
[3] Han J. and Kamber M, Data Mining: Concepts and Techniques 3rd Edition, Morgan Kaufman, Academic Press. 2011.
[4] Tapas Kanungo, An Efficient K-Means Clustering Algorithm: Analysis
and Implementation, 2002..
[5] Andrew Moore: “K-means and Hierarchical Clustering– TutorialSlides”,http://www2.cs.cmu.edu/~awm/tutorials/kmeans.html
[6] IATAC , Intrusion Detection Systems - The Information Assurance
Technology Analysis Center - Sixth Edition September 25, 2009 [7] Gerhard M¨unz, Sa Li, Georg Carle, Wilhelm Schickard, Traffic
Anomaly Detection Using K-Means Clustering, University of Tuebingen, Germany,
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
62
PHẦN PHỤ LỤC
Xử lý trên giao diện người dùng phần thuật toán K-Means
using System.Configuration; using System; using weka; using WekaSharp; using weka.core; using weka.clusterers; using weka.core.matrix; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace GSSL {
public partial class frmMain : Form
{
public string sFilePath;
public int[] assignments;
public frmMain()
{
InitializeComponent(); }
private void btnThucHien_Click(object sender,
EventArgs e)
{
int
numberOfClusters=Convert.ToInt16(txtNumCluster.Text);
Scripting.FileSystemObject MyFile = new
Scripting.FileSystemObject(); string sFileName; Scripting.TextStream msgStream; string sContents; string strR="";
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
63
Instances insts = new Instances(new
java.io.BufferedReader(new java.io.FileReader(sFilePath)));
weka.filters.unsupervised.attribute.StringToNominal filter =
new weka.filters.unsupervised.attribute.StringToNominal();
filter.setAttributeRange("first"); filter.setInputFormat(insts);
weka.filters.Filter.useFilter(insts, filter);
SimpleKMeans kmeans = new SimpleKMeans();
kmeans.setSeed(Convert.ToInt16(txtSeed.Text));
// This is the important parameter to set
kmeans.setPreserveInstancesOrder(true);
kmeans.setNumClusters(numberOfClusters); kmeans.buildClusterer(insts);
ClusterEvaluation eval = new ClusterEvaluation();
eval.setClusterer(kmeans);
eval.evaluateClusterer(new Instances(insts));
kmeans.getClusterCentroids();
sContents= eval.clusterResultsToString(); sFileName = @"D:\DE TAI THAC
SI\BoCai\Manguon\IDS\KDDCupOutPut.txt"; msgStream =
MyFile.CreateTextFile(sFileName,true,true);
msgStream.Write(sContents); msgStream.Close(); sContents = ""; //msgStream = MyFile.OpenTextFile(sFileName,Scripting.IOMode.ForReading,fal se,Scripting.Tristate.TristateTrue ); int i=0; string[] words;
words = File.ReadAllLines(sFileName,
Encoding.Default);
for (i = 0; i < words.Length; i++)
{ //i = i + 1; string t = words[i].Trim(); t.Replace(" ", " "); t.Replace(" ", " "); t.Replace(" ", " "); t.Replace(" ", " "); t.Replace(" ", " "); t.Replace(" ", " "); string[] strlv = t.Split(' ');
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
64
t = t.Replace("Attribute", "Thuộc tính");
t = t.Replace("Number of iteration", "Số lần lặp"); t = t.Replace("Missing values globally replaced with
mean/mode", "Toàn bộ giá trị bị mất thay thế bằng trung
bình/mode");
t = t.Replace("Full Data", "Dữ liệu đầy đủ");
t = t.Replace("Cluster centroids", "Trọng tâm cụm");t = t.Replace("Cluster", "Cụm ");
t = t.Replace("Within cluster sum of squared errors", "Tổng
bình phương lỗi trong cụm");
t = t.Replace("Clustered Instances", "Các cụm đã phân");
if (i == 11)
{
ListViewItem lvt = new ListViewItem("Số bản ghi");
for (int j = 0; j < strlv.Length; j++)
{ if (strlv.ElementAt(j).ToString() != "") { ListViewItem.ListViewSubItem lvt1 = new ListViewItem.ListViewSubItem(lvt, strlv[j].ToString()); lvt.SubItems.Add(lvt1); } } lvtResullt.Items.Add(lvt); } if (i > 12) { //t.Replace("\t", "\t\t\t\t"); strR = "";
for (int j = 0; j < strlv.Length; j++)
{ if (strlv.ElementAt(j).ToString() != "") { strR = strR + strlv[j].ToString() + " "; } } string[] strv = strR.Split(' ');
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ 65 lvtResullt.Items.Add(lvt); } if (i > 3 && i < 7) { txtEvalue.Text = txtEvalue.Text + " \r\n " + t; } }
//while (msgStream.AtEndOfStream == false);
msgStream.Close(); assignments = kmeans.getAssignments(); DataDetail();
}
private void txtKetQua_TextChanged(object sender,
EventArgs e)
{ }
private void txtEvalue_TextChanged(object sender,
EventArgs e)
{ }
private void groupBox1_Enter(object sender, EventArgs e)
{ }
private void groupBox2_Enter(object sender, EventArgs e)
{ }
private void DataDetail()
{
int i, start, stop;
start = 0; stop = 100;
start = Convert.ToInt32(txtFrom.Text);
stop = Convert.ToInt32(txtTo.Text);
if (start < 1 || stop < start)
{
MessageBox.Show("Giá trị bắt đầu cần > 0, Giá
trị kết thúc cần > = giá trị bắt đầu", "Thông Báo",
MessageBoxButtons.OK);
return;
}
for (i = 0; i < assignments.Length; i++)
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
66
ListViewItem lvt = new ListViewItem("Bản ghi
" + i.ToString()); ListViewItem.ListViewSubItem lvt1 = new ListViewItem.ListViewSubItem(lvt, assignments[i].ToString()); lvt.SubItems.Add(lvt1); lvDetail.Items.Add(lvt); } }
private void label2_Click(object sender, EventArgs e)
{ }
private void btnLuuKQ_Click(object sender, EventArgs
e)
{
saveFileDialog.ShowDialog(); }
private void txtEvalue_TextChanged_1(object sender,
EventArgs e)
{ }
private void groupBox3_Enter(object sender, EventArgs
e)
{ }
private void btnHienthi_Click(object sender,
EventArgs e) { DataDetail(); } } }