3.4.1 Kịch bản mô phỏng
Trong luận văn này, tôi sử dụng công cụ mô phỏng chuyên dụng NS-2 [19] để xây dựng bộ mô phỏng đánh giá hiệu quả của thuật toán RRED mới với giá trị Tout động trong sự hiện diện của tấn công DoS tần suất thấp. Thuật toán RRED cũng được mô phỏng để so sánh kết quả.
` ` ` ` server 10Mbps 2ms 5Mbps 6ms Bottleneck Attacker1 Attacker20 User30 User1 10 Mbps 2ms R1 R0 Hình 11. Giao thức mạng thử nghiệm
Hình.4 cho thấy các cấu trúc liên kết thử nghiệm. Trong hình này, kích thước hàng đợi của liên kết nút cổ chai là 150 gói. Thuật toán AQM được sử dụng trong một hàng đợi nút cổ chai trong khi hàng đợi khác sử dụng thuật toán DropTail. Một luồng TCP FTP với kích thước gói 1.000 byte được tạo ra từ một trong 30 người sử dụng. Luồng DoS tần suất thấp được tạo ra bằng cách gửi các gói tin UDP với kích thước gói 50 byte từ mỗi kẻ tấn công.
Các tham số của RRED được xác định là L=2, N=23, các tham số khác của thuật toán AQM vẫn giữ nguyên trong giá trị mặc định của NS-2. Với ba tham số của tấn công DoS tần suất thấp, chúng ta có được ba bộ thí nghiệm để đánh giá và so sánh hiệu suất của các thuật toán AQM. Với mỗi bộ mô phỏng, chúng tôi giữ hai giá trị là hằng số và thay đổi các giá trị khác. Bộ ba tham số được thiết lập như sau:
Ta: chu kỳ tấn công; Tb: Độ rộng tấn công; Rb: Tốc độ tấn công.
Mỗi kịch bản mô phỏng, chúng ta thiết lập cố định hai giá trị và thay đổi một giá trị khác. Kịch bản thực nghiệm Ta (s) Tb (ms) Rb (Mbps) Kịch bản 1 [0.2, …, 2] 200 0.25 Kịch bản 2 1 [0,600] 0.25 Kịch bản 3 1 200 [0.1,0.5] Bảng 1. Các tham thực nghiệm
3.4.2 Kết quả biến thiên theo chu kỳ
Bộ mô phỏng thứ nhất, chúng tôi lựa chọn Ta (0,2-2) (s) trong khi Tb và Rb là cố định. Khác nhau của ba thông số nhằm mục đích để theo dõi sự mạnh mẽ của các thuật toán RRED nếu kẻ tấn công thay đổi hành vi của mình gửi lại trong một cuộc tấn công.
Hình 12. Kết quả thông lượng TCP dưới tấn công khi Ta = [0.2, 2] (s), Tb = 200(ms), Rb = 0.25 (Mbps)
Thuật toán RRED mới và mô phỏng được thực hiện với NS2. Dựa trên
lượng TCP gần như hoàn toàn được duy trì trong tấn công LDoS đa dạng. Kết quả cũng xác nhận rằng RRED với giá trị T* là hằng số.
Môi trường sơ đồ mạng ở trên, mô phỏng đã được thực hiện trong NS2. Kết quả được hiển thị trong bảng 1, với các tham số:
+ rate_f1_normal: biểu diễn thông lượng trung bình của luồng TCP bình thường đi qua liên kết cổ chai khi không có tấn công LDoS;
+ rate_f1_normal: biểu diễn thông lượng trung bình của luồng TCP bình thường đi qua liên kết cổ chai khi có tấn công LDoS;
+ rate_f1 = rate_f1_attack/rate_f1_normal: biểu diễn tỷ lệ duy trì thông lượng luồng TCP bình thường dưới tấn công LDoS;
Bảng 2 so sánh kết quả mô phỏng tại thời điểm Ta=1s cho thấy thuật toán RRED với giá trị Tout biến thiên có thông lượng TCP cải thiện hơn so với thuật toán RRED cũ với giá trị T* là hằng số.
Tham số mô phỏng Giá trị
(T*=10ms) Giá trị Tout Biến thiên Number of users 30 30 Attackers number 20 20 rate_f1_normal 600.870000 600.970000 rate_f1_attack 596.490000 597.350000 nth_f1 0.992711 0.993976
Bảng 2. Tham số mô phỏng và giá trị thu được tại thời điểm Ta=1s
3.4.3 Kết quả biến thiên theo độ rộng bùng nổ tấn công
Một mô phỏng thứ hai, chúng tôi chọn Tb (0, 600) (ms) trong khi Ta và R cố định. Tb được sử dụng để đánh giá thuật toán RRED mới trong một khoảng thời gian để xác định sự ổn định và hiệu quả của thuật toán. Với giá trị Ta = 1 (s), Tb = [0, 600] (ms), Rb = 0.25 (Mbps) trên các thuật toán RRED mới và thực hiện mô phỏng trong với NS2. Các kết quả thu được và minh họa trong hình 13.
Hình 13. Kết quả thông lượng TCP dưới tấn công khi Ta = 1(s), Tb = [0,600](ms), Rb = 0.25(Mbps)
Bảng 3 so sánh kết quả mô phỏng tại thời điểm Tb=200s cho thấy thuật toán RRED với giá trị Tout biến thiên có thông lượng TCP cải thiện hơn so với thuật toán RRED cũ với giá trị T* là hằng số.
Tham số mô phỏng Giá trị
(T*=10ms) Giá trị Tout Biến thiên Number of users 30 30 Attackers number 20 20 rate_f1_normal 600.870000 600.970000 rate_f1_attack 597.400000 597.580000 nth_f1 0.994225 0.994359
Bảng 3. Tham số mô phỏng và giá trị thu được tại thời điểm Tb=200s
3.4.4 Kết quả biến thiên theo tốc độ bùng nổ tấn công
kiểm tra thuật toán RRED mới với thông lượng TCP để xác định sự ổn định và hiệu quả của thuật toán khi có tấn công thay đổi tốc độ kết nối. Với giá trị Ta = 1 (s), Tb = 200 (ms), Rb = [0,1 0,5] (Mbps) trên thuật toán RRED mới và thực hiện mô phỏng trong NS2. Các kết quả thu được và thể hiện trong hình 14.
Hình 14. Kết quả thông lượng TCP dưới tấn công khi Ta = 1(s), Tb = 200(ms), Rb = [0.1,0.5] (Mbps)
Bảng 4 so sánh kết quả mô phỏng tại thời điểm Rb=0.25Mbps cho thấy thuật toán RRED với giá trị Tout biến thiên có thông lượng TCP cải thiện hơn so với thuật toán RRED cũ với giá trị T* là hằng số.
Tham số mô phỏng Giá trị
(T*=10ms) Giá trị Tout Biến thiên Number of users 30 30 Attackers number 20 20 rate_f1_normal 600.870000 600.970000 rate_f1_attack 596.640000 598.810000 nth_f1 0.992960 0.996406
Từ ba bộ kết quả thử nghiệm tương ứng với ba bộ thông số, chúng ta thấy rằng thuật toán RRED mới là tương đối hiệu quả. Những kết quả này cho thấy các thông lượng TCP được duy trì gần như hoàn toàn trong nhiều cuộc tấn công Dos tần suất thấp. Nó cũng khẳng định rằng các thuật toán hiện tương tự như RRED có thông lượng thấp hơn so với thuật toán RRED sau cải tiến.
KẾT LUẬN
Trong luận văn này, chúng tôi đề xuất cải tiến thuật toán RRED để chống các cuộc tấn công DoS tần suất thấp. Qua quá trình mô phỏng và phân tích cho thấy RRED sau khi cải tiến là tương đối hiệu quả và có cải thiện hiệu năng TCP đáng kể trong các cuộc tấn công DoS tần suất thấp. Một số kết quả thu được như sau:
- Thuật toán RRED mới sau khi cải tiến rất mạnh mẽ so với RRED đã được đề xuất.
- Thuật toán RRED mới cải thiện hiệu suất thông lượng TCP trong các cuộc tấn công LDoS.
- Thay đổi được giá trị hằng số T* trong thuật toán RRED ban đầu, nhằm kẻ tấn công khó xác định tính toán hoặc thay đổi tốc độ tấn công.
Cho đến nay, RRED chỉ tập trung vào giải quyết vấn đề liên quan đến các luồng TCP nhưng không đề cập về các gói tin UDP. Vì vậy, đây là một trong những vấn đề chính cần phải được xử lý để cải tiến các thuật toán RRED trong hướng nghiên cứu tương lai.
PHỤ LỤC A. Cài đặt trong NS2
A.1 Giới thiệu chƣơng trình mô phỏng NS2
NS-2 là phần mềm mô phỏng mạng khá mạnh, hoạt động của nó được điều khiển bởi các sự kiện rời rạc[27]. NS-2 được thiết kế và phát triển theo kiểu hướng đối tượng, được phát triển tại đại học California, Berkely. Bộ phần mềm này được viết bằng ngôn ngữ C++ và OTcl. Có thể tương thích với hệ điều hành Linux và hệ điều hành Windows. Mô phỏng cung cấp hỗ trợ rộng rãi để mô phỏng giao thức TCP, thiết bị định tuyến, …
Hình 10. Cấu trúc của NS-2
Cấu trúc của NS-2 bao gồm các thành phần được chỉ ra trên Hình 10
Tùy vào mục đích của người dùng đối với kịch bản mô phỏng OTcl mà kết quả mô phỏng có thể được lưu trữ vào tệp vết (trace file) với khuôn dạng (format) được những người phát triển NS định nghĩa trước hoặc theo khuôn dạng do người sử dụng NS quyết định khi viết kịch bản mô phỏng. Nội dung tệp vết sẽ được tải vào trong các ứng dụng khác để thực hiện phân tích.
A.2 Cài đặt NS2
Mở terminal của ubuntu thực hiện các lần lượt lệnh sau để thực hiện việc cài đặt.
Dowload bộ cài ns-allinone-2.33
+ wget http://nchc.dl.sourceforge.net/sourceforge/nsnam/ns-allinone-
Giải nén ns-allinone-2.33
tar -xzvf ns-allinone-2.33.tar.gz
Di chuyển vào thư mục ns-allinone-2.33 bằng lệnh cd ns-allinone-2.33
Cài đặt thêm các gói cần thiết
Sudo apt-get install -f build-essential libxt-dev libxt6 libsm-dev libsm6 libice-dev libice6 libxmu-de
Thực hiện lênh sau để cài đặt ./install
Sau khi cài đặt bạn cần đặt lại đường dẫn cho các gói phần mềm. Cần chỉnh sửa thêm file /.bashrc. Để mở file /.bashrc thực hiện lệnh sau
Gedit ~/.bashrc
Xuất hiện cửa sổ soạn thảo, bạn hãy thêm các dòng sau vào dưới cùng của
cửa sổ này (sau từ fi). Tùy từng bản ns-allinone khác nhau mà tên các gói là
khác nhau. Thường thì sau khi cài sẽ xuất hiện chỉ dẫn cho các đường dẫn, các bạn có thể copy từ đó xuống. Dưới là đường dẫn cho bản ns-allinone-2.33. Thư mục home của mình là /home/sun (sun chính là tến đăng nhập vào ubuntu của mình ). Tùy từng tên đăng nhập của mọi người thay cho hợp lý.
Hãy load file thiết lập đường dẫn cho NS-2 ở file đính kèm
Sau khi thiết lập đường dẫn xong bạn save file /.bashrc này lại và mở một cửa sổ terminal mới gõ lệnh ns nếu xuất hiện dấu % thì việc thiết lập là thành công.
Cuối cùng là xác mình lại việc cài đặt ns2. Di chuyển vào thư mục ns-2.33 (chú ý lúc này bạn đang ở thư mục ns2-allinone-2.33 , nếu bạn bật cửa sổ terminal mới thì bạn gõ lệnh đầy đủ
cd ~/ns-allinone-2.33/ns-2.33
thực hiện lệnh dưới để xác minh lại việc cài đặt ./validate
Trong luận văn này, chúng tôi cài đặt bộ mô phỏng dựa trên công cụ AQM&DoS Simulation Platform [1] để đánh giá, mô phỏng hiệu quả của thuật toán RRED sau khi cải tiến và so sánh thuật toán RRED ban đầu.
Cải tiến về thuật toán RRED được thực hiện trong các hàm của tệp red- robust.h và red-robust.cc và thực hiện mô phỏng tấn công từ chối dịch vụ phân tán tần suất thấp.
Kết quả mô phỏng được kiết xuất dạng tệp log. Sử dụng Matlab để vẽ đồ thị biểu diễn kết quả mô phỏng, phân tính và đánh giá cải tiến của thuật toán RRED mới.
B.1. Sao chép các tệp sau vào thư mục "ns-allinone-2.33\ns-2.33\queue". red-robust.h
red-robust.cc
B.2. Thêm các dòng sau vào cuối tệp ns-default.tcl ("ns-allinone-2.33\ns- 2.33\tcl\lib\ns-default.tcl").
# Added by leoking RobustRed config 0 Queue/RED/Robust set hash_bins_ 23 Queue/RED/Robust set hash_levels_ 2 Queue/RED/Robust set score_max_ 10 Queue/RED/Robust set score_min_ -1 Queue/RED/Robust set score_pass_ 0
Queue/RED/Robust set last_drop_time_ 0ms
Queue/RED/Robust set drop_related_period_ 10ms # Added by leoking RobustRed config 1
B.3. Chèn dòng sau vào trước đoạn mã nguồn "$(OBJ_STL)" trong tệp Makefile ("ns-allinone-2.33\ns-2.33\Makefile"):
queue/red-robust.o \
B.4. Biên dịch lại hệ thống ns-allinone-2.33 bằng các lệnh sau: make clean make depend make C. Mà nguồn tệp red-robust.cc #include <math.h> #include <sys/types.h> #include "config.h" #include "template.h"
#include "random.h" #include "flags.h" #include "delay.h" #include "red-robust.h"
static class RobustREDClass : public TclClass { public:
RobustREDClass() : TclClass("Queue/RED/Robust") {} TclObject* create(int argc, const char*const* argv) {
//printf("creating RED Queue. argc = %d\n", argc);
//mod to enable RED to take arguments if (argc==5)
return (new RobustREDQueue(argv[4])); else
return (new RobustREDQueue("Drop")); }
} class_robustred;
RobustREDQueue::RobustREDQueue(const char * trace) : REDQueue(trace) { bind("hash_bins_", &hash_bins_); bind("hash_levels_", &hash_levels_); bind("score_max_", &score_max_); bind("score_min_", &score_min_); bind("score_pass_", &score_pass_); bind_time("last_drop_time_", &last_drop_time_); bind_time("drop_related_period_", &drop_related_period_); resetBins(0); } void RobustREDQueue::enque(Packet* pkt) { if (dropAnomaly(pkt)) {
//reportDrop(pkt); //Where report? need to further thinking updateBinsDroptime(pkt); drop(pkt); //printf("\tT* =%d",pkt); } else { REDQueue::enque(pkt); } return;
void RobustREDQueue::reportDrop(Packet* pkt) { double drop_time=updateBinsDroptime(pkt); last_drop_time_=drop_time;
return; }
int RobustREDQueue::hashPkt(Packet* pkt, int ilevel) { int ibin=0;
hdr_ip* iph=hdr_ip::access(pkt);
unsigned int param1=(int)(iph->saddr()); unsigned int param2=(int)(iph->daddr()); //unsigned int param3=int(iph->sport()); //unsigned int param4=int(iph->dport());
ibin=((param1<<ilevel)+param2)%hash_bins_; return ibin; } void RobustREDQueue::resetBins(int v) { int i,j; for (i=0;i<hash_levels_;i++) { for (j=0;j<hash_bins_;j++) { bins_[i][j].score=v; bins_[i][j].last_drop_time=0; } } } void RobustREDQueue::printBins() { double now=Scheduler::instance().clock(); int i,j;
printf("%lf hash_levels_=%d hash_bins_=%d last_drop_time_=%lf\n", now, hash_levels_, hash_bins_, last_drop_time_); for (i=0;i<hash_levels_;i++) { for (j=0;j<hash_bins_;j++) { printf("[%d,%lf]\t", bins_[i][j].score, bins_[i][j].last_drop_time); }
} } double RobustREDQueue::updateBinsDroptime(Packet *pkt) { double now=Scheduler::instance().clock(); int ilevel=0; int ibin=0; for (ilevel=0;ilevel<hash_levels_;ilevel++){ ibin=hashPkt(pkt, ilevel); bins_[ilevel][ibin].last_drop_time=now; } return now; } int RobustREDQueue::dropAnomaly(Packet *pkt) { int rtn=1; double now=Scheduler::instance().clock(); #ifdef RREDDEBUG hdr_ip* iph=hdr_ip::access(pkt);
printf("%lf saddr=%d daddr=%d ", now, iph->saddr(), iph- >daddr()); #endif int ilevel=0; int ibin=0; double time_old=0.000; double T0=0.000; double T1=0.000; double T2=0.000; double T3=0.000; double Tout; for (ilevel=0;ilevel<hash_levels_;ilevel++){ ibin=hashPkt(pkt, ilevel); #ifdef RREDDEBUG
printf("ibin%d=%d ", ilevel, ibin); #endif
if (ilevel==0){
Tout=0.011; time_old=now; }
// Need further analysis if (now-MAX(last_drop_time_, bins_[ilevel][ibin].last_drop_time)<0.010) { //Tout=0.100; //if (now- bins_[ilevel][ibin].last_drop_time<drop_related_period_) { //if (now-last_drop_time_<drop_related_period_) { if (bins_[ilevel][ibin].score>score_min_){ bins_[ilevel][ibin].score=bins_[ilevel][ibin].score-1 } } else { if (bins_[ilevel][ibin].score<score_max_){ bins_[ilevel][ibin].score=bins_[ilevel][ibin].score+1; } } if (bins_[ilevel][ibin].score>=score_pass_) { rtn=0;
//time_old: thoi gian sau cung ma Router tim thay goi tin la goi tin tan cong
Tout=now-time_old;
//Tout: la thoi gian ma khoang giua 2 hang doi ky di nghi ngo goi tin tan cong
time_old=now; } #ifdef RREDDEBUG printf("[%d,%lf] ", bins_[ilevel][ibin].score, bins_[ilevel][ibin].last_drop_time); #endif } //printf("\thoipv =%f",now-MAX(last_drop_time_, bins_[ilevel][ibin].last_drop_time)); //printf("\thoipv =%f",ilevel); #ifdef RREDDEBUG printf("\n"); if (rtn==1) { printf("Anomaly Detected !!\n"); } printBins(); #endif return rtn; }
TÀI LIỆU THAM KHẢO
[1]. Changwang Zhang, Jianping Yin, Zhiping Cai, and Weifeng Chen, “RRED: Robust RED Algorithm to Counter Low-rate Denial-of-Service Attacks”, IEEE Communications Letters, vol.14, pp.489-491, 2010.
[2]. Aleksandar Kuzmanovic and Edward W. Knightly (2006). Low-Rate TCP- Targeted Denial of Service Attacksand Counter Strategies. IEEE/ACM Transactions on Networking, Vol. 14, No. 4, pages 683-696.
[3]. Haibin Sun, John C. S. Lui, David K. Y. Yau (2006). Distributed Mechanism in Detecting and Defending Against the Low-Rate TCP Attack. Computer Networks, Vol. 50, No. 3, pages 2312-2330.
[4]. Guang Yang, Mario Gerla, and M. Y. Sanadidi (2004). Defense against Low-Rate TCP-Targeted Denial-of-Service Attacks. In Proceedings of the Ninth International Symposium on Computers and Communications, Vol. 2, pages 345-350.
[5]. Jelena Mirkovic, Sven Dietrich, David Dittrich, Peter Reiher (2004); Internet Denial of Service: Attack and Defense Mechanisms.chm; Prentice Hall PTR.
[6]. Michael Glenn (2003); A Summary of DoS/DDoS Prevention, Monitoring and Mitigation Techniques in a Service Provider Environment; SANS Institute. [7]. S. Bellovin, M. Leech, and T. Taylor (October 2001), "ICMP Traceback Messages" Internet draft, work in progress.
[8]. J. Mirkovic (August 2003), D-WARD: Source-End Defense Against Distributed Denial-of-Service Attacks, PhD thesis, University of California Los Angeles, http://lasr.cs.ucla.edu/ddos/dward-thesis.pdf.
[9]. E. O'Brien. "NetBouncer: A Practical Client-Legitimacy-Based DDoS Defense via Ingress Filtering".
http://www.networkassociates.com/us/_tier0/nailabs/_media/documents/netboun cer.pdf.
[10]. J. Mirkovic, M. Robinson, P. Reiher, and G. Kuenning (August 2003), "Forming Alliance for DDoS Defenses," Proceedings of the New Security Paradigms Workshop (NSPW 2003), ACM Press, pp. 11–18.
[11]. A. Shevtekar, K. Anantharam and N. Ansari: “Low Rate TCP Denial-of- Service Attack De-tection ad Edge Routers”, IEEE Communica-tions Letters, 9, 4, pp. 363–365 (2005).
[12]. A. Yaar, A. Perrig, and D. Song, (May 2003) "Pi: A Path Identification Mechanism to Defend Against DDoS Attacks", Proceedings of the IEEE Symposium on Security and Privacy, pp. 93–107.
[13]. A. Yaar, A. Perrig, and D. Song, (May 2004) "SIFF: a stateless Internet flow filter to mitigate DDoS flooding attacks", Proceedings of the IEEE Symposium on Security and Privacy, pp. 130–143.
[14]. C. Jin, H. Wang, and K. G. Shin (October 2003), "Hop-Count Filtering: An Effective Defense Against Spoofed DDoS Traffic", Proceedings of the 10th ACM Conference on Computer and Communication Security, ACM Press, pp 30–41.
[15]. Shrews: Low-Rate TCP-Targeted Denial of Service Attacks http://www.cs.northwestern.edu/~akuzma/rice/doc/shrew.pdf
[16]. TCP congestion avoidance algorithm, Wikipedia online, http://en.wikipedia.org/wiki/TCP_congestion_avoidance_algorithm
[17]. Drop Tail, Wikipedia online http://en.wikipedia.org/wiki/Tail_drop
[18]. Bloom Filters, Wikipedia online: http://antognini.ch/papers/ BloomFilters20080620.pdf
[19]. S. Floyd and V. Jacobson, Random Early Detection Gateways for Conges- tion Avoidance, IEEE/ACM Transactions on Networking, pages 397-413, vol 1, issue 4, Aug. 1993.
[20]. R. Mahajan, S. Floyd and D. Wetherall, Controlling high-bandwidth flows at the congested router, In Proceedings of IEEE ICNP 2001, Riverside, CA, Nov. 2001.
[21]. M. Allman, S. Floyd and C. Partridge: “Increas-ing TCP’s Initial Window”, RFC3390 (2002).
[22]. M. Allman, V. Paxson and W. Stevens: “TCP Congestion Control”, RFC2581 (1999).
[23]. G. Yang, M. Gerla and M. Sanadid: “De-fence against Low-rate TCP- targeted Denial-of-Service Attacks”, Proc of ISCC2004 (2004).
[24]. Sally Floyd and Van Jacobson: “Random Early Detection Gateways for Congestion Avoidance”, August 1993 IEEE/ACM Transactions on Networking. [25]. V. Jacobson. Congestion avoidance and control. ACM Computer Comm. Review, 18(4):314–329, Aug. 1988
[26]. V. Paxson and M. Allman. Computing TCP’s retransmission timer, November 2000. Internet RFC 2988
[27]. The Network Simulator NS2: http://isi.edu/nsnam/ns/