Friday, September 29, 2017

DDoS – Một số kỹ thuật tấn công và phương pháp phòng chống - Phần cuối


Kết quả thực nghiệm
Trên máy chủ CentOS: Triển khai CSF trên máy chủ webserver chạy hệ điều hành CentOS 7.0 tích hợp trong Webadmin. Trong khoảng thời gian từ ngày 3/1/2017 đến ngày 21/8/2017, máy chủ đã chặn được 19 lượt truy cập bất thường với các quy định được cài đặt ở trên.
Mặc dù theo thống kê, với số lượng tương đối các lượt truy vấn kết nối bất bình thường, nhưng hệ thống trong 9 tháng qua đã không bị mất kết nối và từ chối truy cập một lần nào. Cũng theo thống kê trên chúng ta thấy, có 19 lượt từ một IP truy cập đến máy chủ vượt quá 100 kết nối và bị block tạm thời thông qua luật CT_LIMIT, trong đó có IP 42.113.15.170 tại Việt nam đã thấy có tới 501 kết nối. Nhỏ nhất với số kết nối cũng đến từ những IP của Việt nam với 104 kết nối.
Trên máy chủ Window Server: Qua thống kê có thể thấy, trong 3 ngày 19,20 và 21 tháng 04 năm 2017 lượng truy cập vào trang chủ cao bất thường gây nghẽn tài nguyên máy chủ web ảnh hưởng đến tất cả các website thành viên trên cùng máy chủ. Đặc biệt ngày 20 lượng truy cập chỉ cao gấp cả trăm lần ngày bình thường.
Qua rà soát thì truy cập bất thường vào trang chủ bắt đầu gia tăng từ sáng 19/4 nhưng bắt ngồn từ IP của cơ sở I của Viện. Các truy cập này chỉ vào trang chủ mà không đi tiếp vào các trang nội dung nên có thể khẳng định chính là tấn công có chủ đích nhưng do lượng truy cập chưa đủ cao so với tài nguyên máy chủ.
17h31 ngày 19/4 đợt tấn công bắt đầu ảnh hưởng đến tài nguyên máy chủ với tốc độ gần 20 truy cập/s hình thức tấn công phân tán từ nhiều nguồn IP khác nhau không thể chống bằng các cách thông thường như chặn vài địa chỉ IP cố định.
Giải pháp đưa ra, dẫn hướng trên webserver tất cả các truy cập lần đầu sẽ đi qua 01 file script để kiểm tra xem đó là người dùng hay botnet. Việc này sẽ có chút ảnh hưởng đối với người dùng nhưng tài nguyên hệ thống có thể chịu tải gấp hàng nghìn lần trước các botnet.
Đây là kỹ thuật khá đơn giản nhưng hiệu quả trong thời gian ngắn và botnet đơn giản, có thể thấy các truy cập ảo đều bị gạt sang file antiddos với 3 dòng code cũng như chỉ trả ra 361 byte dữ liệu nhẹ hơn nhiều lần 29kB của trang chủ. 4h ngày 21/4 các dấu hiệu tấn công kết thúc

Kết luận
Nhìn chung, tấn công từ chối dịch vụ phân tán DDoS không quá khó thực hiện, nhưng rất khó phòng chống do tính bất ngờ và thường là phòng chống trong thế bị động khi sự việc đã rồi. Việc đối phó bằng cách tăng cường “phần cứng” cũng là giải pháp tốt và được sử dụng nhiều trong giai đoạn hiện nay, nhưng thường xuyên theo dõi để phát hiện và ngăn chặn kịp thời cái gói tin IP từ các nguồn không tin cậy là phương pháp tương đối hữu hiệu.
Tùy mô hình, quy mô cụ thể của hệ thống mà có các biện pháp bảo vệ, phòng chống khác nhau. Hiện nay, về quy mô, mức độ nguy hiểm ngày càng gia tăng, DDoS đang và sẽ là vấn nạn nguy hại lớn cho nền Internet toàn cầu. Có rất nhiều việc phải làm và chuẩn bị để kiểm soát được DDoS. Chúng ta phải có những bước đi cụ thể & mạnh mẽ hơn để cùng khống chế loại hình tấn công nay.

Tài liệu tham khảo
[1] Saman Taghavi Zargar, James Joshi, Member and David Tippe, A Survey of Defense Mechanisms Against Distributed Denial of Service (DDoS) Flooding Attacks, IEEE Communications Surveys & Tutorials, 2013.
[2] P. J. Criscuolo, Distributed Denial of Service, Tribe Flood Network 2000 and Stacheldraht CIAC-2319, Department of Energy Computer Incident Advisory Capability (CIAC), UCRL-ID-136939, Rev. 1., Lawrence Livermore National Laboratory, February 2000.
[3] Jelena Mirkovic, Janice Martin and Peter Reiher, A Taxonomy of DDoS Attacks and DDoS Defense Mechanisms, ACM SIGCOMM Computer Communication Review, 2004.
[4] Jameel Hashmi, Manish Saxena, and Rajesh Saini, Classification of DDoS Attacks and their Defense Techniques using Intrusion Prevention System, International Journal of Computer Science & Communication Networks, 2012.
[5] Rajkumar, Manisha Jitendra Nene, A Survey on Latest DoS Attacks:Classification and Defense Mechanisms, International Journal of Innovative Research in Computer and Communication Engineering, 2013.
[6] Thwe Thwe Oo, Thandar Phyu, A Statistical Approach to Classify and Identify DDoS Attacks using UCLA Dataset, International Journal of Advanced Research in Computer Engineering & Technology (IJARCET), 2013.
[7] Tony Scheid, DDoS Detection and Mitigation Best Practices, Arbor Networks, 2011.
[8] Monowar H. Bhuyan, H. J. Kashyap, D. K. Bhattacharyya and J. K. Kalita, Detecting Distributed Denial of Service Attacks: Methods, Tools and Future Directions, The Computer Journal, 2013.
[9] Mohammed Alenezi, Methodologies for detecting DoS/DDoS attacks against network servers, The Seventh International Conference on Systems and Networks Communications - ICSNC 2012.
[10] Kanwal Garg, Rshma Chawla, Detection Of DDoS Attacks Using Data Mining, International Journal of Computing and Business Research (IJCBR), 2011.
[11]  Christos Douligeris and Aikaterini Mitrokotsa, DDoS Attacks And  Defense  Mechanisms: A Classification,  Signal Processing and Information Technology, 2003. ISSPIT 2003.
[12] Hoàng Xuân Dậu, Phân loại tấn công DDoS và các biện pháp phòng chống, Học viện Công nghệ Bưu Chính Viễn Thông
[13]   nukeviet.vn & forum.nukeviet.vn
[14]   joomla.org & joomla.net.vn
[15]   vi.wordpress.org
[16]   linuxquestions.org
[17]   vncert.gov.vn
[18]   anninhmang.net
[19] https://securelist.com/ddos-attacks-in-q1-2017/78285/

DDoS – Một số kỹ thuật tấn công và phương pháp phòng chống - Phần 2


Một số công cụ tấn công DDoS
Công cụ DDoS dạng Agent – Handler
TrinOO: là một trong các công cụ DDoS đầu tiên được phát tán rộng rãi. TrinOO có kiến trúc Agent – Handler, là công cụ DDoS kiểu Bandwidth Depletion Attack, sử dụng kỹ thuật UDP flood. Các version đầu tiên của TrinOO không hỗ trợ giả mạo địa chỉ IP. TrinOO Agent được cài đặt lợi dụng lỗi remote buffer overrun. Hoạt động trên hệ điều hành Solaris 2.5.1 à Red Hat Linux 6.0. Attack – network giao tiếp dùng TCP (attacker client và handler) và UDP (Handler và Agent). Mã hóa giao tiếp dùng phương pháp mã hóa đối xứng giữa Client, handler và Agent.
Tribe Flood Network (TFN): Kiểu  kiến trúc Agent – Handler, công cụ DDoS hoễ trợ kiểu Bandwidth Deleption Attack và Resourse Deleption Attack. Sử dụng kỹ thuật UDP flood, ICMP Flood, TCP SYN và Smurf Attack. Các version đầu tiên không hỗ trợ giả mạo địa chỉ IP, TFN Agent được cài đặt lợi dụng lỗi buffer overflow. Hoạt động trên hệ điều hành Solaris 2.x và Red Hat Linux 6.0. Attack – Network giao tiếp dùng ICMP ECHO REPLY packet (TFN2K hỗ trợ thêm TCP/UDP với tính năng chọn protocol tùy ý), không mã hóa giao tiếp (TFN2K hỗ trợ mã hóa)
Stacheldraht: là biến thể của TFN có thêm khả năng updat Agent tự động. Giao tiếp telnet mã hóa đối xứng giữa Attacker và Handler.
Shaft: là biến thể của TrinOO, giao tiếp Handler – Agent trên UDP, Attacker – Hendle trên Internet. Tấn công dùng kỹ thuật UDP, ICMP và TCP flood. Có thể tấn công phối hợp nhiều kiểu cùng lúc. Thống kê chi tiết cho phép attacker biết tình trạng tổn thất của nạn nhân, mức độ quy mô của cuộc tấn công để điều chỉnh số lượng Agent.

Công cụ DDoS dạng IRC – Based
Công cụ DDoS dạng IRC-based được phát triển sau các công cụ dạng Agent – Handler. Tuy nhiên, công cụ DDoS dạng IRC phức tạp hơn rất nhiều, do tích hợp rất nhiều đặc tính của các công cụ DDoS dạng Agent – Handler.
Trinity: là một điển hình của công cụ dạng này. Trinity có hầu hết các kỹ thuật tấn công bao gồm: UDP, TCP SYS, TCP ACK, TCP fragment, TCP NULL, TCP RST, TCP random flag, TCP ESTABLISHED packet flood. Nó có sẵn khả năng ngẫu nhiên hóa địa chỉ bên gởi. Trinity cũng hỗ trợ TCP flood packet với khả năng ngẫu nhân tập CONTROL FLAG. Trinity có thể nói là một trong các công cụ DDoS nguy hiểm nhất.
Ngoài ra có thể nhắc thêm về một số công cụ DDoS khác như Knight, được thiết kế chạy trên Windows, sử dụng kỹ thuật cài đặt của troijan back Orifice. Knight dùng các kỹ thuật tấn công như SYV, UDP Flood và Urgent Pointer Flooder.
Sau cùng là Kaiten, là biến thể của Knight, hỗ trợ rất nhiều kỹ thuật tấn công như: UDP, TCP flood, SYN, PUSH + ACK attack. Kaiten cũng thừa hưởng khả năng ngẫu nhiên hóa địa chỉ giả mạo của Trinity.

Phòng chống DDoS
Anti DDoS Guardian
Anti DDoS Guardian là một phần mềm chống DDos cho Server, VPS, host chạy hệ điều hành Windows cực kì mạnh mẽ, hiệu quả. Nó một ứng dụng đa năng mạnh mẽ được thiết kế để bảo vệ một loạt các máy chủ Windows chống lại các mối đe dọa của các cuộc tấn công từ chối dịch vụ máy chủ. Tùy biến cao, tính năng phong phú và hiệu quả.
Hình 4.1 Giao diện Anti DDoS Guardian
·         Lưu lượng mạng và quản lý kết nối TCP: Giới hạn số luồng trên mạng, băng thông của khách hàng, khách hàng đồng thời số lượng kết nối TCP và tỷ lệ kết nối TCP.
·         TCP nửa mở điều khiển kết nối.
·         UDP kiểm soát dòng chảy: Giới hạn băng thông UDP, tỷ lệ kết nối UDP và tốc độ gói UDP.G
·         Chặn địa chỉ IP của quốc gia bất kì
·         Chặn các địa chỉ IP hoặc dãy địa chỉ.
·         Tường lửa bảo vệ. Các quy tắc tường lửa được dựa trên địa chỉ IP từ xa, cổng, giao thức, và các yếu tố TCP / IP khác.
·         IP danh sách đen và danh sách trắng: Giám hộ kiểm soát của người sử dụng truy cập Internet trong các lĩnh vực cụ thể bằng cách thiết lập danh sách đen hoặc danh sách trắng.
·         Hỗ trợ nhiều định dạng danh sách IP, như htaccess của Apache.
·         IP danh sách cập nhật tự động.
·         Quy tắc đặc biệt.
·         Real-Time hoạt động mạng lưới giám sát. Chống DDoS The Guardian màn hình mỗi gói vào và ra trong Real-Time. Nó hiển thị các địa chỉ địa phương, địa chỉ từ xa, và các thông tin khác của từng phiên mạng.
·         Nhìn lên địa chỉ IP. Chống DDoS giám hộ trông lên các địa chỉ IP và quyền sở hữu thông tin từ xa.
·         Đăng nhập tập tin. Chống DDoS The Guardian ghi mỗi địa chỉ IP bị chặn và được cho phép.
·         Chạy chống DDoS giám hộ như một dịch vụ Windows.
·         Hỗ trợ 64-bit Windows hệ điều hành, chẳng hạn như 64-bit Windows 2008, 64-bit Windows Vista, 64-bit Windows 7, 64-bit Windows 8 và 64-bit Windows 2012
Có rất nhiều tính năng và sự linh hoạt trong sử dụng phần mềm này, trong khuôn khổ bài viết chỉ đề cập chính là chức năng Anti DDoS. Click biểu tượng khóa màu vàng trên menu để mở ra giao diện thiếp lật cài đặt:
·         TCP connection: Số lượng kết nối tối đa giao thức TCP được phép mở trong số giây đối với mỗi IP. (10/1s là phù hợp)
·         Bandwidth: Kích thước tối đa gói tin với mỗi IP (kb/s). Một kết nối TCP hợp lệ thường có kích thước 576~1500. Bạn nên tính toán cho phù hợp nếu mở nhiều kết nối TCP lẫn UDP với máy chủ. (Có thể tăng lên nhưng không nên tăng lên nhiều 2048~6144)
·         UDP connection: Số lượng gói tin UDP được phép mở kết nối với mỗi giây (Giao thức này ít khi sử dụng chủ yếu dịch vụ DNS nên hạ thấp xuống 10~50 để chống UDP FLOOD)
·         UDP packet rate: Số lượng gói tin ICMP được phép mở kết nối với mỗi giây (Giao thức dùng để ping kiểm tra máy chủ nên các bạn có thể hạ thấp xuống 5~10 để chống ICMP FLOOD)
Hình 4.2: Cấu hình Anti DDoS Guardian
·         TCP half-open: Số lượng kết nối (1/2) TCP tối đa được mở. (Nên hạ thấp xuống để chống SYN FLOOD, HTTP FLOOD) Nhưng nếu hạ thấp, nhiều kết nối hợp lệ đến sẽ gặp khó khăn (nên từ 30~100)
·         UDP bandwith: lưu lượng kết nối UDP tối đa được kết nối (1000~5000).
·         Client count: Giá trị thời gian IP kết nối thất bại sẽ bị ngắt. (60~120) Số lượng kết nối tối đa giao thức TCP được giữ với mỗi IP (20 là hơi nhiều với mỗi IP có thể giảm xuống)

WatchGuard
Tường lửa (firewall) là một thiết bị mạng truyển thống trong việc bảo vệ hệ thống mạng. Với những thiết bị tường lửa đời đầu chủ yếu hoạt động theo kiểu Packet Filtering, các chính sách được thiết lập để cho phép hoặc ngăn chặn một gói tin ra/vào các vùng mạng do tường lửa phân tách. Nhưng trước cơ an ninh mạng ngày càng nhiều, tường lửa UTM được ra đời nhằm giải quyết các bài toán này.
Với những thiết bị/ứng dụng tường lửa truyền thống như Iptable, pfsense...hoạt động theo cơ chế Packet Filtering, chỉ lọc một số thông tin chính trên gói tin như địa chỉ nguồn, đích, port...Chứ không quan tâm nhiều đến nội dung gói tin. Cơ chế hoạt động đơn giản cho phép các thiết bị/ứng dụng tường lửa hoạt động nhanh, nhẹ nhưng lại không thể bảo vệ hệ thống một cách hoàn hảo. Trên Internet hiện nay tồn tại nhiều nguy hiểm đến từ:
·         Virus, spyware, malware...đã làm điêu đứng bao nhiêu người dùng, hệ thống nhờ cơ chế lây lan, lan truyền đơn giản.
·         Email spam gây ra sự khó chịu cho người dùng
·         Malsite là những website có chứa mã độc
·         Tấn công mạng dựa vào các lỗ hổng trên máy chủ, thiết bị mạng...
·         Tấn công DDoS/DOS làm tê liệt hệ thống, gây nghẽn mạng làm người dùng không truy cập được các dịch vụ
·         Ứng dụng nguy hiểm là các ứng dụng được cài đặt ngầm vào hệ thống, gây chậm máy, đánh cắp dữ liệu...
·         ....và con nhiều nguy hiểm nữa.
Thế thì với firewall hoạt động dựa theo cơ chế Packet Filtering có thể giúp người dùng bảo vệ hệ thống trước những nguy cơ trên không? Câu trả lời là không và tường lửa UTM (firewall Unified Threat Management) ra đời. Ngay từ tên gọi đã cho thấy firewall UTM có thể quản lý tập trung các mối nguy hiểm. Tường lửa UTM bao gồm các module như Antivirus, Antispam, IPS, Application Control, WebBlocker, DDoS Defense...giúp bảo vệ hệ thống.
Với hệ thống WatchGuard, ta có thể cấu hình trên Firebox để chống tấn công DDOS như sau:
Giới hạn số lượng kết nối tới máy chủ (Per Server Quota): giới hạn lượng kết nối mỗi giây từ ngoài qua Firewall vào tới máy chủ. Hạn chế này bao gồm cả các kết nối tới máy chủ nội bộ được cho phép bởi các Policy static NAT. Giới hạn số lượng kết nối tới các máy chủ dựa trên số lượng yêu cầu kết nối tới một IP đích. Khi đạt tới giới hạn, Firebox sẽ tự động giảm số lượng kết nối tới máy chủ. Ví dụ: Nếu giới hạn trên máy chủ là 100 thì Firebox sẽ tự động drop yêu cầu kết nối thứ 101 trong cùng thời điểm vào hệ thống từ cùng một địa chỉ IP bên ngoài vào. IP nguồn này không bị đưa vào danh sách bị chặn. Giới hạn lượng yêu cầu từ máy client (Per Client Quota): giới hạn lượng kết nối ra ngoài mỗi giây từ trong hệ thống nội bộ được bảo vệ bởi Firebox. Giới hạn này dựa trên số lượng yêu cầu kết nối ra ngoài của bất kỳ IP nội bộ nào và bất kỳ IP bên ngoài nào. Trong giao diện Web quản trị Firebox, ta tiếp tục tiến hành như sau:
·         Chọn menu Firewall à Default Packet Handling.
Hình 4.3 Giới hạn số lượng kết nối máy chủ
·         Chọn Per Server Quota và Per Client Quota
·         Đặt các giá trị giới hạn của Per Server Quota và  Per Client Quota
Nếu dùng Policy Manager, ta thiết lập như sau:
·         Chọn menu Setup à Default Threat Protection à Default Packet Handling.
Hình 4.4 Quản lý chính cách trong WatchGuard
·         Chọn Per Server Quota và Per Client Quota
·         Đặt các giá trị giới hạn của Per Server Quota và  Per Client Quota.

ConfigServer Security & Firewall
ConfigServer Security & Firewall (hay CSF) là một firewall rất phổ biến và hiệu quả được sử dụng trên các server Linux hiện nay. Bên cạnh những tính năng cơ bản như một firewall, CSF còn có những chức năng bảo mật nâng cao khác như ngăn chặn flood login, port scans, SYN floods…Sau khi cài đặt chúng ta sẽ cấu hình như sau để phòng chống DoS, DDoS.
Số lượng kết nối tối đa cho phép từ một IP, bạn có thể đặt giá trị này theo yêu cầu máy chủ.
[CT_LIMIT =100]
Đặt khoảng thời gian theo dõi kết nối. Các lần scan để kiểm tra cách nhau 30s.
[CT_INTERVAL = "30"]
Gửi email thông báo nếu một IP bị block.
[CT_EMAIL_ALERT = "1"]
Thời gian block một IP nếu như vi phạm.
[CT_BLOCK_TIME = "1800"]
Phát hiện tấn công brute force từ mạng botnet. Nếu như một account bị login sai quá giới hạn cho phép từ nhiều IP khác nhau thì sẽ block toàn bộ IP đã login sai.
[LF_DISTATTACK = "1"]
Số lượng IP tối thiểu để nhận biết đây là tấn công phân tán (DDOS)
[LF_DISTATTACK_UNIQ = "3"]
Bật chức năng synflood protection : Nếu 1 IP gửi 30 cú SYN trong vòng 1s và số lượng SYN connection tồn tại trên server đạt trên 40 thì block IP đó (block tạm thời)
[SYNFLOOD = "1"]
[SYNFLOOD_RATE = "30/s"]
[SYNFLOOD_BURST = "40"]
Giới hạn số lượng new concurrent connection đến server trên mỗi IP. Ví dụ mỗi IP được phép mở 20 concurrent new connection đến port 80 trên server.
[CONNLIMIT = "80;20"]
Giới hạn số lượng connection đến một port cụ thể trong một khoảng thời gian nhất định. Ví dụ như trên có nghĩa : nếu nhiều hơn 20 kết nối tcp đến port 80 trong vòng 5s thì block IP đó tối thiểu 5s tính từ packet cuối cùng của IP đó. Sau 5s IP đó sẽ tự động được unlock và truy cập bình thường.
[PORTFLOOD = "80;tcp;20;5"]

Chống DDoS Website
Tấn công DDOS hay còn được gọi tấn công từ chối dịch vụ đơn giản được hiểu là tạo ra 1 lượt truy cập ảo ồ ạt vào một địa chỉ website tại cùng một thời điểm nào đó đã định sẵn nhằm “đánh sập” máy chủ lưu trữ khiến nó chạy chậm hoặc không thể chạy được nữa. Thật sự thì không có phương pháp chống DDOS hiệu quả nhất nhưng nếu với mức độ nhỏ và mang tính không chuyên khi sử dụng các phần mềm được lập trình sẵn ở quy mô nhỏ lẻ thì ta hoàn toàn có thể chủ động phòng chống.
Chống iframe: Đây là phương pháp được xem là thô sơ nhất. Kẻ tấn công sẽ mượn 1 website có lượt truy cập lớn nào đó chèn các iframe hướng về website cần đánh rồi cho chạy lệnh refresh (tải lại) nhiều lần hoặc họ viết sẵn 1 tập tin flash với công dụng tương tự rồi đặt lên website và khi người dùng truy cập vào website này thì họ vô tình bất đắc dĩ trở thành người tấn công website kia. Với hình thức tấn công kiểu như thế này bạn hoàn toàn có thể chống lại bằng cách chèn 1 đoạn mã Javascript chống chèn iframe từ các website khác đến website của bạn.
<script language="JavaScript">
if (top.location != self.location)
{top.location = self.location}
</script>
Chống tải lại trang web có ác ý: Một hình thức tấn công khác nữa là dùng phím F5 liên tục có chủ ý, hoặc dùng một phần mềm được lập trình sẵn với công dụng tương tự (tải lại trang web liên tục sau những khoảng thời gian định sẵn) của một nhóm người làm cho trang web của bạn tải lại (reload) liên tục. Việc này có thể làm tốn băng thông của trang web hoặc làm trang web chạy chậm vì những kết nối ảo. Với cách thức tấn công này thì nếu dùng cách một để chống coi như là vô ích. Nếu bạn bị tấn công như thế này thì bạn hãy thiết lập tập tin .htaccess với nội dung:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?domain.com [NC] RewriteRule !antiddos.phtml
http://www.domain.com/antiddos.phtml?%{REQUEST_URI} [QSA]
 Sau đó tạo thêm một một tập tin antiddos.phtml có nội dung
<?
$text = $HTTP_SERVER_VARS['QUERY_STRING'];
$text = preg_replace("#php\&#si",'php?',$text);
echo('<center><a href=http://www.domain.com/?'.$text.'><font color=red size=5 face=Monotype>[CLICK HERE TO ENTER]</font></a</center>');
?>
Sau đó upload 2 tập tin này lên thư mục gốc của website. Như vậy là mỗi khi truy cập vào website, nếu lần đầu tiên thì sẽ có thông báo yêu cầu nhấn chuột thì bạn mới vào được website và ở các lần sau sẽ không có và các phần mềm DDOS được lập trình sẽ bị chặn lại ở bước click chuột để vào trang web ở lần truy cập đầu tiên nên việc tải lại trang web chỉ đơn thuần là 1 trang HTML nhỏ không ảnh hưởng nhiều đến hệ thống. Chú ý là cách này chỉ áp dụng cho website đang sử dụng server chạy trên nền Linux.
Giới hạn số kết nối website tại một thời điểm: Khi một khách truy cập vào website thì sẽ tạo ra một truy vấn kết nối với cơ sở dữ liệu (CSDL) lấy thông tin và trả về thông qua hiển thị của website. Mỗi máy chủ sẽ có phép bao nhiêu truy vấn kết nối là hạn định và khi vượt quá hạn mức này thì việc truy cập sẽ khó khăn hoặc không thể truy xuất được. Các tin tặc lợi dụng vào điều này để tạo ra các truy cập ảo, kết nối ảo thông qua proxy hay chuyên nghiệp hơn là mạng botnet nhằm đánh sập trang web và phá  hỏng CSDL website. Để hạn chế điều này ta có thể chủ động giới hạn số kết nối truy vấn tin (lượt truy cập) cùng một thời điểm. Bạn thêm dòng đoạn mã sau vào trang chủ của website.
function server_busy($numer) {
if (THIS_IS == 'WEBSITE' && PHP_OS == 'Linux' and @file_exists (
 '/proc/loadavg' ) and $filestuff = @file_get_contents ( '/proc/loadavg' )) {
$loadavg = explode ( ' ', $filestuff );
if (trim ( $loadavg [0] ) > $numer) {
print '<meta http-equiv="content-type" content="text/html;
charset=UTF-8" />';
print 'Lượng truy cập đang quá tải, mời bạn quay lại sau vài phút.';
exit ( 0 );}}}
$srv = server_busy ( 1000 ); // 1000 là số người truy cập tại 1 thời điểm
Đoạn mã trên có ý nghĩa cho phép 1000 người online trên website tại một thời điểm. Nếu vượt qua số 1000 thì khách truy cập sẽ nhận được thông báo: Lượng truy cập đang quá tải. Mời bạn quay lại sau vài phút. Chú ý đoạn mã này chỉ  áp dụng cho ngôn ngữ lập trình PHP.

Đây chỉ là ba cách chống đỡ mang tính chất giản đơn áp dụng cho những đợt tấn công nhỏ lẻ. Để website của mình hoạt động tốt và có sức chống chọi lại những đợt tấn công quy mô lớn bạn nên: (i) Tối ưu hóa website ví dụ bạn có thể xây dựng bộ nhớ đệm (cache) cho website để nhằm giảm số kết nối vào CSDL. (ii) Lựa chọn nhà cung cấp hosting lưu trữ web tốt để có những đối phó với những  đợt tấn công.

DDoS – Một số kỹ thuật tấn công và phương pháp phòng chống - Phần 1


DDoS – MỘT SỐ KỸ THUẬT TẤN CÔNG VÀ PHƯƠNG PHÁP PHÒNG CHỐNG


Tóm tắt: Các cuộc tấn công từ chối dịch vụ (DoS acttacks) hoặc các cuộc tấn công từ chối dịch vụ phân tán (các cuộc tấn công DDoS) là một nỗ lực nhằm làm cho người dùng không sử dụng các tài nguyên của máy tính. Mặc dù các phương tiện để tiến hành, động cơ, mục tiêu của các cuộc tấn công từ chối dịch vụ có thể khác nhau, nhưng nói chung nó bao gồm sự phối hợp, nỗ lực ác ý của một hoặc nhiều người vào một trang, hoặc mạng làm gián đoạn hoặc làm chậm đáng kể việc truy cập của người dùng, bởi sự quá tải các tài nguyên hệ thống. Trong bài này, chúng tôi sẽ trình bày tình hình DDoS trong giai đoạn hiện tại, phân loại các kỹ thuật tấn công, một số kỹ thuật tấn công được sử dụng ngày nay và hậu quả của chúng. Chúng tôi cũng cung cấp một số phương pháp phòng chống DDoS và kết quả đạt được trong quá trình cài đặt trên Windows Server và CentOS. Nó xem xét và đưa ra các khuyến nghị về bảo mật, an ninh thông tin và ngăn chặn sự xâm nhập bất hợp pháp..

Giới thiệu
Tấn công từ chối dịch vụ (Denial of Service - DoS) là dạng tấn công nhằm ngăn chặn người dùng hợp pháp truy nhập các tài nguyên mạng. Tấn công DoS đã xuất hiện từ khá sớm, vào đầu những năm 80 của thế kỷ trước [1]. Tấn công từ chối dịch vụ phân tán (Distributed Denial of Service - DDoS) là một dạng phát triển ở mức độ cao của tấn công DoS được phát hiện lần đầu tiên vào năm 1999 [2]. Khác biệt cơ bản của tấn công DoS và DDoS là phạm vi tấn công. Trong khi lưu lượng tấn công DoS thường phát sinh từ một hoặc một số ít host nguồn, lưu lượng tấn công DDoS thường phát sinh từ rất nhiều host nằm rải rác trên mạng Internet. Hiện nay, có hai phương pháp tấn công DDoS chủ yếu [1]. Trong phương pháp thứ nhất, kẻ tấn công gửi các gói tin được tạo theo dạng đặc biệt gây lỗi trong giao thức truyền hoặc lỗi trong ứng dụng chạy trên máy nạn nhân. Một dạng tấn công DDoS điển hình theo phương pháp này là tấn công khai thác lỗ hổng an ninh của các giao thức hoặc dịch vụ trên máy nạn nhân. Phương pháp tấn công DDoS thứ hai phổ biến hơn phương pháp thứ nhất, gồm hai dạng [1]: (i) dạng tấn công DDoS gây ngắt quãng kết nối của người dùng đến máy chủ dịch vụ bằng cách làm ngập lụt đường truyền mạng, cạn kiệt băng thông hoặc tài nguyên mạng, và (ii) dạng tấn công DDoS gây ngắt quãng dịch vụ cung cấp cho người dùng bằng cách làm cạn kiệt các tài nguyên của máy chủ dịch vụ, như thời gian xử lý của CPU, bộ nhớ, băng thông đĩa, cơ sở dữ liệu. Dạng tấn công này bảo gồm các loại tấn công gây ngập lụt ở mức ứng dụng.
Trung tâm Ứng cứu khẩn cấp máy tính Việt Nam (VNCERT) cho biết đã ghi nhận khoảng 7.700 cuộc tấn công vào các website trong nước ba tháng qua. VNCERT thống kê được 2.848 website bị tấn công thay đổi giao diện (deface), 3.783 trang web bị cài mã độc (malware) và 1.050 trang bị cài bẫy lừa đảo dạng phishing. Các chuyên gia bảo mật cho biết đã xuất hiện những cuộc tấn công từ chối dịch vụ (DDoS) kiểu mới, chiếm băng thông lên tới 400 Gb tại Việt Nam và 1.000 Gb tại Mỹ và dự báo tình hình bảo mật năm 2017 sẽ còn nhiều diễn biến khó lường. Năm 2016 Trung tâm này đã ghi nhận tổng số 134.375 sự cố tấn công mạng của cả 3 loại hình Phishing (lừa đảo), Malware (mã độc) và Deface (thay đổi giao diện). So với năm 2015, số lượng vụ tấn công mạng năm 2016 nhiều gấp hơn 4,2 lần (năm 2015 là 31.585), trong đó, loại hình tấn công Phishing là 10.057 sự cố (gấp hơn 1,7 lần so với năm 2015), Malware là 46.664 sự cố (gấp gần 2,8 lần năm 2015) và Deface là 77.654 sự cố (gấp hơn 8,7 lần năm 2015).

Tổng quan DDoS
 Các giai đoạn tấn công
Giai đoạn chuẩn bị: Chuẩn bị công cụ quan trọng của cuộc tấn công, công cụ này thông thường hoạt động theo mô hình client-server. Hacker có thể viết phần mềm này hay down load một cách dễ dàng, theo thống kê tạm thời có khoảng hơn 10 công cụ DDoS được cung cấp miễn phí trên. Kế tiếp, dùng các kỹ thuật hack khác để nắm trọn quyền một số host trên mạng. tiến hành cài đặt các software cần thiết trên các host này, việc cấu hình và thử nghiệm toàn bộ attack-netword (bao gồm mạng lưới các máy đã bị lợi dụng cùng với các software đã được thiết lập trên đó, máy của hacker hoặc một số máy khác đã được thiết lập như điểm phát động tấn công) cũng sẽ được thực hiện trong giai đoạn này.
Giai đoạn xác định mục tiêu và thời điểm: Sau khi xác định mục tiêu lấn cuối, hacker sẽ có hoạt động điều chỉnh attack-netword chuyển hướng tấn công về phía mục tiêu. Yếu tố thời điểm sẽ quyết định mức độ thiệt hại và tốc độ đáp ứng của mục tiêu đối với cuộc tấn công.
Phát động tấn công và xóa dấu vết: Đúng thời điểm đã định, hacker phát động tấn công từ máy của mình, lệnh tấn công này có thể đi qua nhiều cấp mới đến máy (hosts) thực sự tấn công. Toàn bộ attack-network (có thể lên đến hàng ngàn máy), sẽ vắt cạn năng lực của máy chủ mục tiêu liên tục, ngăn chặn không cho nó hoạt động như thiết kế. Sau một khoảng thời gian tấn công thích hợp, hacker tiến hành xóa mọi dấu vết có thể truy ngược đến mình, việc này đòi hỏi trình độ khá cao và không tuyệt đối cần thiết.

Kiến trúc
Nhìn chung DDoS attack-network có hai mô hình chính là mô hình Agent – Handler và mô hình IRC – Based.
Hình 2.1: Phân loại theo mô hình tấn công DDoS

Mô hình Agent – Handler
Theo mô hình này, attack-network gồm 3 thành phần: Agent, Client và Handler trong đó: (i) Client : là software cơ sở để hacker điều khiển mọi hoạt động của attack-network. (ii) Handler : là một thành phần software trung gian giữa Agent và Client. (iii)  Agent : là thành phần software thực hiện sự tấn công mục tiêu, nhận điều khiển từ Client thông qua các Handler.
Attacker sẽ từ Client giao tiếp với Handler để xác định số lượng Agent đang online, điều chỉnh thời điểm tấn công và cập nhật các Agent. Tùy theo cách attacker cấu hình attack-network, các Agent sẽ chịu sự quản lý của một hay nhiều Handler.
Thông thường Attacker sẽ đặt Handler software trên một Router hay một server có lượng traffic lưu thông nhiều. Việc này nhằm làm cho các giao tiếp giữa Client, handler và Agent khó bị phát hiện. Các giao tiếp này thông thường xảy ra trên các protocol TCP, UDP hay ICMP. Chủ nhân thực sự của các Agent thông thường không hề hay biết họ bị lợi dụng vào cuộc tấn công kiểu DDoS, do họ không đủ kiến thức hoặc các chương trình Backdoor Agent chỉ sử dụng rất ít tài nguyên hệ thống làm cho hầu như không thể thấy ảnh hưởng gì đến hiệu năng của hệ thống.
Hình 2.2: Kiến trúc kiểu Agent – Handler

Mô hình IRC – Based
Internet Relay Chat (IRC) là một hệ thống online chat multiuser, IRC cho phép User tạo một kết nối đến multipoint đến nhiều user khác và chat thời gian thực. Kiến trúc củ IRC network bao gồm nhiều IRC server trên khắp internet, giao tiếp với nhau trên nhiều kênh (channel). IRC network cho phép user tạo ba loại channel: (i) Public channel: Cho phép user của channel đó thấy IRC name và nhận được message của mọi user khác trên cùng channel. (ii)       Private channel: được thiết kế để giao tiếp với các đối tượng cho phép. Không cho phép các user không cùng channel thấy IRC name và message trên channel. Tuy nhiên, nếu user ngoài channel dùng một số lệnh channel locator thì có thể biết được sự tồn tại của private channel đó. (iii) Secrect channel : tương tự private channel nhưng không thể xác định bằng channel locator.
Hình 1.3: Kiến trúc kiểu IRC-Based

IRC – Based net work cũng tương tự như Agent – Handler network nhưng mô hình này sử dụng các kênh giao tiếp IRC làm phương tiện giao tiếp giữa Client và Agent (không sử dụng Handler). Sử dụng mô hình này, attacker còn có thêm một số lợi thế khác như: (i) Các giao tiếp dưới dạng chat message làm cho việc phát hiện chúng là vô cùng khó khăn. (ii) IRC traffic có thể di chuyển trên mạng với số lượng lớn mà không bị nghi ngờ. (iii) Không cần phải duy trì danh sách các Agent, hacker chỉ cần logon vào IRC server là đã có thể nhận được report về trạng thái các Agent do các channel gửi về. (iv) sau cùng IRC cũng là một môi trường file sharing tạo điều kiện phát tán các Agent code lên nhiều máy khác.

Tấn công DDoS
Phân loại tấn công DDoS
Nhìn chung, có rất nhiều biến thể của kỹ thuật tấn công DDoS nhưng nếu nhìn dưới góc độ chuyên môn thì có thể chia các biến thề này thành hai loại dựa trên mụch đích tấn công: Làm cạn kiệt băng thông và làm cạn kiệt tài nguyên hệ thống. Dưới đây là sơ đồ mô tả sự phân loại các kiểu tấn công DDoS.
Hình 3.1 Phân loại tấn công DDoS

Tấn công làm cạn kiệt băng thông
UDP Flood Attack: do tính chất connectionless của UDP, hệ thống nhận UDP message chỉ đơn giản nhận vào tất cả các packet mình cần phải xử lý. Một lượng lớn các UDP packet được gởi đến hệ thống dịch vụ của mục tiêu sẽ đẩy toàn bộ hệ thống đến ngưỡng tới hạn. Các UDP packet này có thể được gửi đến nhiều port tùy ý hay chỉ duy nhất một port. Thông thường là sẽ gửi đến nhiều port làm cho hệ thống mục tiêu phải căng  ra để xử lý phân hướng cho các packet này. Nếu port bị tấn công không sẵn sàng thì hệ thống mục tiêu sẽ gửi ra một ICMP packet loại “destination port unreachable”. Thông thường các Agent software sẽ dùng địa chỉ IP giả để che giấu hành tung, cho nên các message trả về do không có port xử lý sẽ dẫn đến một địa chỉ IP khác. UDP Flood Attack cũng có thể làm ảnh hưởng đến các kết nối xung quanh mục tiêu do sự hội tụ của packet diễn ra rất mạnh.
ICMP Flood Attack: được thiết kế nhằm mục đích quản lý mạng cũng như định vị thiết bị mạng. Khi các Agent gửi một lượng lớn ICMP_ECHO_REPLY đến hệ thống mục tiêu thì hệ thống này phải reply một lượng tương ứng packet để trả lời, sẽ dẫn đến nghẽn đường truyền. Tương tự trường hợp trên, địa chỉ IP của các Agent có thể bị thay thế bởi một địa chỉ giả mạo.
Amplification Attack: nhắm đến việc sử dụng các chức năng hỗ trợ địa chỉ IP broadcast của các router nhằm khuyếch đại và hồi chuyển cuộc tấn công. Chức năng này cho phép bên gửi chỉ định một địa chỉ IP broadcast cho toàn subnet bên nhận thay vì nhiều địa chỉ. Router sẽ có nhiệm vụ gửi đến tất cả địa chỉ IP trong subnet đó packet broadcast mà nó nhận được. Attacker có thể gửi broadcast message trực tiếp hay thông qua một số Agent nhằm làm gia tăng cường độ của cuộc tấn công. Nếu attacker trực tiếp gửi message, thì có thể lợi dụng các hệ thống bên trong broadcast network như một Agent.

Tấn công làm cạn kiệt tài nguyên
TCP SYS Attack: Transfer Control Protocol hỗ trợ truyền nhận với độ tin cậy cao nên sử dụng phương thức bắt tay giữa bên gởi và bên nhận trước khi truyền dữ liệu. Bước đầu tiên, bên gửi gởi một SYNREQUEST packet (Synchronize). Bên nhận nếu nhận được SYN REQUEST sẽ trả lời bằng SYN/ACK REPLY packet. Bước cuối cùng, bên gửi sẽ truyên packet cuối cùng ACK và bắt đầu truyền dữ liệu.
Hình 3.2: Giao thức bắt tay 3 bước
Nếu bên server đã trả lời một yêu cầu SYN bằng một SYN/ACK REPLY nhưng không nhận được ACK packet cuối cùng sau một khoảng thời gian quy định thì nó sẽ resend lại SYN/ACK REPLY cho đến hết thời gian timeout. Toàn bộ tài nguyên hệ thống “dự trữ” để xử lý phiên giao tiếp nếu nhận được ACK packet cuối cùng sẽ bị “phong tỏa” cho đến hết thời gian timeout.


Hình 3.3: Gửi SYN giả mạo
Nắm được điểm yếu này, attacker gởi một SYN packet đến nạn nhân (hình 3.3) với địa chỉ bên gửi là giả mạo, kết quả là nạn nhân gởi SYN/ACK REPLY đến một địa chỉ khác và sẽ không bao giờ nhận được ACK packet cuối cùng, cho đến hết thời gian timeout nạn nhân mới nhận ra được điều này và giải phóng các tài nguyên hệ thống. Tuy nhiên, nếu lượng SYN packet giả mạo đến với số lượng nhiều và dồn dập, hệ thống của nạn nhân có thể bị hết tài nguyên.


Hình 3.4: Phân biệt sự khác nhau.
PUSH = ACK Attack: Trong TCP giao thức, các packet được chứa trong bộ nhớ đệm, khi bộ nhớ đệm đầy thì các packet này sẽ được chuyển đến nơi cần thiết. Tuy nhiên, bên gởi có thể yêu cầu hệ thống unload bộ nhớ đệm trước khi bộ nhớ đệm đầy bằng cách gởi một packet với PUSH và ACK mang giá trị là 1. Những packet này làm cho hệ thống của nạn nhân unload tất cả dữ liệu trong bộ nhớ đệm TCP ngay lập tức và gửi một ACK packet trở về khi thực hiện xong điều này, nếu quá trình được diễn ra liên tục với nhiều Agent, hệ thống sẽ không thể xử lý được lượng lớn packet gửi đến và sẽ bị treo. Malformed Packet Attack là cách tấn công dùng các Agent để gởi các packet có cấu trúc không đúng chuẩn nhằm làm cho hệ thống của nạn nhân bị treo. Có hai loại Malformed Packet Attack:
IP Address Attack: dùng packet có địa chỉ gởi và nhận giống nhau làm cho hệ điều hành của nạn nhân không xử lý nổi và bị treo.

IP Packet Options Attack: ngẫu nhiên hóa vùng OPTION trong IP packet và thiết lập tất cả các bit QoS lên 1, điều này làm cho hệ thống của nạn nhân phải tốn thời gian phân tích, nếu sử dụng số lượng lớn Agent có thể làm hệ thống nạn nhân hết khả năng xử lý.