Technical Analysis of NTP Amplification DDoS attacks

Từ cuối 2013 cho đến nay, tấn công DDoS sử dụng NTP đang là 1 xu hướng mới. Cuộc tấn công lớn nhất ghi nhận được nhằm vào CloudFlare là 400Gbps, thật khủng khiếp.

Cách đây khoảng một tháng, chúng tôi nhận được đề nghị hỗ trợ từ System Admin của 1 công ty tại Seoul. Hiện tượng anh ta gặp phải là hệ thống mạng tại data center của công ty bị ngập lụt bởi hàng chục GB các gói tin UDP, có source port là 123. Thông tin quan trọng sau bước đầu phân tích, đó là không phải nguồn tấn công bên ngoài làm tê liệt hệ thống, mà chính là từ 4 máy chủ của công ty anh ta đang làm tràn ngập mạng.

Hacker từ xa, đã gửi tới các máy chủ này 1 lượng request NTP độc hại, kết quả là các máy chủ này sinh ra 1 lượng NTP response lớn gấp hàng trăm lần lượng request. Và các response này được phi thẳng tới webiste của các công ty khác, làm tê liệt các website đó. Thực tế, đồng thời cũng làm tê liệt data center chứa 4 máy chủ NTP này luôn, do gateway bị nghẽn.

Vậy tại sao 4 máy chủ NTP lại có thể sinh ra 1 lượng dữ liệu làm ngập lụt hệ thống mạng ? Tại sao lại gọi là khuếch đại các gói tin NTP ?  Lỗ hổng của NTP là như thế nào… ?

NTP là gì ?

Là Network Time Protocol. Theo wiki, là giao thức đồng bộ thời gian mạng. Mục đích của NTP là giúp cho các máy tính kết nối mạng luôn đồng bộ được giờ một cách chính xác. Các client gửi request đồng bộ giờ lên máy chủ, các máy chủ có thể có nhiều cấp sẽ cập nhật với nhau để đồng bộ chính xác giờ nhất cho client. Lớp cao nhất của hệ thống NTP là Stratum 0, thực chất là các đồng hồ nguyên tử có độ chính xác cực cao. Stratum 0 được kết nối bới các máy chủ Stratum 1. Các máy ở mức 1 sẽ tiếp tục cập nhật cho các máy mức 2 etc.

3Mô hình NTP theo Wiki

2Mọi máy tính có thể được đồng bộ giờ một cách chính xác nhất nhờ NTP

Lỗ hổng nằm ở đâu ?

Lỗ hổng này được ghi nhận có mã là CVE-2013-5211 hoặc VU#348126, hay còn gọi là Amplification Attack using ntpdc monlist command.

NTP là 1 giao thức thuộc loại lâu đời nhất trên thế giới cho đến nay vẫn hoạt động (từ 1982). Lỗ hổng lần này thực chất không hẳn là lỗ hổng mà là một “tính năng” của NTP. Tuy nhiên khi “tính năng” có phần hơi “cởi mở” này bị lợi dụng thì lại gây là hậu quả lớn.

Đó là tính năng Monlist của NTP server, là 1 danh sách các máy tính đã kết nối tới NTP server. Khi nhận được một request yêu cầu cung cấp monlist, NTP server sẽ “vui vẻ” cung cấp danh sách các máy tính đã kết nối tới NTP server này mà không cần quan tâm xem ai là người đã request. Cứ có hỏi là “vui vẻ” trả lời.

Ở đây chúng ta thấy ngay 1 vấn đề mà kẻ xấu đã lợi dụng để “khuếch đại”. Đó là 1 request nhỏ được gửi đi, server sẽ sinh ra 1 danh sách với kích thước lớn hơn rất nhiều so với request. Các request được gửi đi từ máy của hacker, nhưng đã làm giả source IP. Source IP sẽ bị sửa để trỏ đến địa chỉ IP của nạn nhân. Thế là các NTP server cứ thế trả các response về cho nạn nhân, trong khi máy này không hề gửi đi bất kỳ request nào. Đây giống một kiểu “ném đá giấu tay” kết hợp với “mượn gió bẻ măng”

4Khuếch đại

Hacker có thể khuếch đại lên bao nhiêu ?

Đầu tiên ta sẽ tiến hành thử nghiệm tính năng monlist để xem, khi 1 request được gửi tới 1 NTP server thì response trả về là như thế nào.

1Nhìn kết quả thì với 1 câu lệnh gửi đi là ntpdc – c monlist NTP_IP_Address mà list trả về quả là dài.

Trên thực tế thì các NTP server khác nhau sẽ có độ dài monlist khác nhau. Do số lượng máy tính kết nối với 1 NTP server ở mỗi thời điểm là khác nhau. Ở server trong ví dụ trên là 48 địa chỉ.

848 địa chỉ này được tạo thành 7 gói tin trả về. Capture bằng wireshark ta thấy, 1 gói tin NTP request có kích thước 234B, các gói tin trả về trung bình ~400. Như vậy là tổng dữ liệu trả về là 7*400/234 ~12, gấp gần 12 lần so với gói tin gửi đi.

Vậy thì chính xác theo giao thức của NTP, một monlist có thể chưa tối đa bao nhiêu địa chỉ ? Hãy cùng nhảy vào code của NTP một tí cho vui:

5Các developer của NTP gọi tên list này là MRU (most-recently-used) list. Phân tích code của NTP ta sẽ thấy, độ dài tối đa của list này sẽ là 600 địa chỉ, được trả về thành 100 response. Với mỗi 1 request có kích thước 50 byte, ta sẽ có tối đa 100 response với kích thước khoảng 500 byte. Như vậy tối đa độ khuếch đại có thể lên tới tối đa 1000 lần. Điều này có nghĩa là Nếu bạn ném đi một viên sỏi, bạn sẽ nhận về được cả một bức tường :(

Các công cụ tấn công DDoS sử dụng khuếch đại NTP

Như mọi người đã thấy nguyên lý khai thác lỗ hổng này, thực chất, hacker chỉ cần gửi hàng loạt các ntp monlist request (có fake địa chỉ IP) tới các NTP Server. Vì vậy các đoạn code để “khai thác lỗ hổng” không hề phức tạp như các exploit khác. Hãy cùng xem 1 đoạn code thuộc loại đơn giản nhất

10Đã có khá nhiều các phiên bản khác nhau, có thể viết bằng Perl, Python. Để nghiên cứu bạn có thể dễ dàng tìm các đoạn code này trên Pastepin

Có bao nhiêu NTP server trên thế giới ?

Các NTP server mở cổng 123, giao thức UDP. Ta có thể scan các bằng nmap để tìm ra danh sách các NTP server này. Tuy nhiên, có một cách thức khác nhanh chóng và tiện lợi hơn, đó là sử dụng Shodan.

Không thể tin được khi biết rằng, có tới hơn 2 triệu NTP server đang hoạt động ở khắp nơi trên thế giới.

6Mỹ, Hàn, Nhật, Nga và Trung Quốc là những quốc gia sở hữu nhiều NTP server nhất. Như vậy 4 server NTP ở Seoul bị lợi dụng mà chúng ta phân tích ở trên, cũng là điều dễ hiểu.

7Việt Nam cũng có nhiều NTP Server phết :)

Vá lỗ hổng

Nếu bạn là nạn nhân của các cuộc tấn công DDoS sử dụng NTP, có lẽ không dễ để các bạn ngăn chặn được các cuộc tấn công này. Chúng ta chỉ còn cách chặn hết các gói tin UDP có cổng nguồn là 123 phi đến hệ thống của chúng ta.

Còn đối với các công ty quản lý các NTP server, hãy cập nhật NTP phiên bản mới nhất (bản 4.2.7p26 hoặc mới hơn). Ngoài ra, chúng ta cũng có thể cấu hình firewall để chặn hết các monlist request từ các địa chỉ IP bên ngoài mạng, để tránh bị lợi dụng.

Thực tế thì Network Time Foudation cũng không mất nhiều công lắm để vá lỗ hổng này. Ta thử xem qua sự khác nhau giữa 2 phiên bản:

9

One thought on “Technical Analysis of NTP Amplification DDoS attacks

Leave a Reply

Your email address will not be published. Required fields are marked *