Monthly Archives: March 2014

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

Hacking Flappy Bird for fun

Bạn muốn được bao nhiêu điểm ?

Trên iOS, Flappy Bird được cài ra 1 thư mục có cấu trúc như sau

2

Trong đó, ta lưu ý trong thư mục Documents, có 1 file mà ta rất dễ đoán được ý nghĩa có nó, đó là file score.dat. Đây là file dùng để lưu điểm mà người chơi đạt được.

Hãy cùng khám phá file score.dat này.

3

Hơi buồn 1 chút là tác giả không để định dạng text mà là 1 dạng binary. Không vấn đề gì, ta sẽ view file dưới dạng mã Hex (16)

4

Qua một vài lần chơi và kiểm tra lại file score.dat, ta sẽ đoán được 4 bytes đầu là dành để lưu điểm số, 4 byte tiếp theo là dành để ghi lại số lần từng chơi. Ví dụ trong hình trên, số điểm là 0A hệ số 16, tức là 10 điểm hệ thập phân, số lần chơi là DF lần, tức là 223 lần chơi (chơi từng đấy lần mà được có 10 điểm, quá kém nhỉ).

Bây giờ muốn điểm chơi thành bao nhiêu thì ta sẽ sửa 4 bytes đầu ở score.dat. Ví dụ tôi muốn sửa điểm chơi thành 898 điểm. Chuyển sang hệ số 16, 898 sẽ là 0382. Vì máy của chúng ta lưu trữ dữ liệu theo kiểu “little edian” nên ta sẽ ghi vào file score.dat như hình dưới

5

Và điểm chơi của bạn trên game sẽ như thế này

6

Game Atlas – Độ chim theo cách của bạn

Toàn bộ đồ họa của game nằm trong file Atlas.png

atlas

Như vậy ta thấy sẽ có 3 loại chym, 2 loại ống khói và 2 hình backgroud hiện ngày và đêm. Mỗi 1 lần chơi thì game sẽ random với chym, ống khói và backgroud.

Để load được các đối tượng từ Atlas.png, tác giả có tạo ra 1 file Atlas.txt đi kèm. File .txt sẽ chỉ rõ từng đối tượng trong file .png ở tọa độ nào

8

Trong hình dưới đây là đoạn code của Flappy Bird viết cho phiên bản android để load các đối tượng vào game

7

Vì vậy, nếu muốn thay đổi đồ họa của game, bạn có thể edit file Atlas.png. Ví dụ bạn có thể “độ” chym 1 chút để tạo ra 1 phiên bản Flappy Bird with sunglasses.

Giờ để ý thêm trong file Atlas.txt. Bạn sẽ thấy có đoạn định nghĩa về các ống nước.

9

Ta sẽ thử tạo ra 1 phiên bản game mới, “dễ chơi” hơn bằng cách làm hẹp các ống nước lại, để chym lọt qua dễ hơn.

11

 

Dù sao cũng nên cẩn thận với các game tải từ nguồn không chính thống

Hiện Flappy Bird không còn ở trên Google Play hoặc AppStore nữa, nên nếu như bạn chưa từng tải Flappy Bird từ những nguồn này thì bạn buộc phải tìm  game ở các nguồn không chính thống.

Chính vì vậy có nhiều kẻ sẽ tìm cách trục lợi bằng cách đưa lên các store những phiên bản Flappy Bird đã bị chèn thêm những đoạn mã không mong muốn đối với chúng ta.

Chẳng hạn đã từng xuất hiện các bản fake Flappy Bird có âm thầm gửi SMS tới các đầu số 87xx, để trừ tiền trong tài khoản của người dùng

10

(Nguồn Trend Micro)

Hoặc kẻ xấu có thể sử dụng 1 chiêu này mà hầu như chúng ta không thể phát hiện ra.

1

Đây là 1 đoạn code trong Flappy Bird phiên bản Android. Nếu để ý bạn sẽ thấy đối tượng thuộc lớp AdView được tạo ra dùng để hiển thị quảng cáo. Trong đó có 1 tham số là AdUnitID. Mỗi 1 ứng dụng sẽ có 1 AdUnitID riêng và ta tạm hiểu là 1 banner quảng cáo được hiện thị lên ứng với AdUnitID nào thì sẽ được tính tiền cho người sở hữu cái AdUnitID đó. Chính vì vậy, kẻ xấu có thể sẽ thay AdUnitID của Flappy Bird thành AdUnitID của 1 ứng dụng khác của hắn. Thế là từ đây, mỗi khi chúng ta sử dụng fake Flappy Bird đó mà quảng cáo được hiển thị, thì tiền có thể không nhảy vào túi Hà Đông, mà nhảy vào túi người khác.

Using Graph Database for Network Monitoring

Graph Database là gì và tại sao lại là Graph Database ?

Bạn sẽ làm gì nếu muốn xây dựng 1 hệ thống có khả năng tìm kiếm như sau: Danh sách bạn bè của tôi thích tennis và hay chơi ở sân Cầu Giấy thứ 7 hàng tuần ? (Facebook gần làm được như thế rồi đấy :D)

Nếu sử dụng hệ quản trị cơ sở dữ liệu quan hệ RDBM (MySQL, Oracle…) thì chúng ta sẽ phải tạo nhiều bảng và nhiều liên kết phức tạp: Con người, Quan hệ bạn bè, Môn thể thao, Địa điểm, Thời gian… Chưa kể câu truy vấn SQL của bạn phải khá lằng nhằng với UNION, GROUP BY, INNER JOIN…

Vậy nếu chúng ta tạm quên đi các table, column, row, key… thì liệu có 1 dạng biểu diễn nào phù hợp cho kiểu dữ liệu mà có nhiều mối liên kết hay không ? Câu trả lời là có.  Đó là Graph Database

7

Hình trên là một ví dụ của Graph Database, dữ liệu được biểu diễn dạng đồ thị thông qua các node, các relation và property (của cả node và relation). Với những nơi có dữ liệu liên kết nhiều: ví dụ của mạng xã hội, thì Graph Database sẽ là 1 lựa chọn tốt hơn nhiều so với RDBM. Facebook cũng mới ra tính năng Graph Search sử dụng Graph Database.

Ngoài mạng xã hội ra, Graph Database còn được ứng dụng ở đâu nữa hay không ? Theo tôi thì chúng ta có thể áp dụng nó trong các giải pháp về security và network monitoring. Đơn giản vì các ứng dụng đó cần phân tích nhiều các kết nối từ nơi này sang nơi khác.

Graph Database trong các Hệ thống Network Monitoring

Thực tế thì các dữ liệu trong 1 hệ thống mạng là dữ liệu có nhiều kết nối. Ví dụ: Máy A truy vấn DNS tới server B để vào website C download file D…

Chính vì vậy, nếu xây dựng database của Hệ thống Network Monitoring sử dụng RDBM chắc chắn sẽ rất phức tạp. Trong tình huống này nếu ứng dụng Graph Databse thì sẽ đơn giản hơn, ví dụ các máy tính là 1 loại node, các truy vấn sẽ là relation, máy chủ hoặc thiết bị mạng có thể được xếp thêm vào 1 loại node khác.

Giả sử 1 tình huống như sau: Một số máy tính trong hệ thống mạng có phần mềm quản lý nhân sự bị xung đột bí hiểm với 1 vài phần mềm nào đó. Trong khi, các máy tính còn lại không bị xung đột. Dựa vào Graph Database ta sẽ nhanh chóng tìm ra các phần mềm trùng nhau trên các máy tính có bị xung đột. Để từ đó khoanh vùng được nguyên nhân.

6

Máy 1 và Máy 4 có phần mềm HRM bị xung đột với phần mềm nào đó, trong khi Máy 5 phần mềm HRM chạy vẫn bình thường. Ta sẽ nhanh chóng tìm ra, ngoài HRM, MSWord và Java là 2 phần mềm Máy 1 và Máy 4 cùng có, trong khi máy 5 không có. Sau khi khoanh vùng còn 2 phần mềm nghi ngờ, ta sẽ đơn giản hơn để xác định được nguyên nhân của sự xung đột.

5

4

Graph Database & Security Solution

Các giải pháp bảo mật thực sự phù hợp nếu dùng Graph Database. Chẳng hạn như FW hoặc IDS/IPS (phát hiện và ngăn chặn xâm nhập, tấn công), các hệ thống cảnh báo…

Hầu hết các giải pháp trên đều dựa vào việc phát hiện sự bất thường: trên một máy tính, trên 1 hệ thống mạng… và Graph Database phù hợp với nhu cầu đó.

Đôi khi không cần phải “visualize” như đống dữ liệu từ RDBM, vì bản chất của Graph đã là “visual” rồi.

8

Các máy tính kết nối tới 1 tên miền bất thường ? Ta sẽ thấy ngay đang có 1 chiến dịch tấn công mới trong hệ thống mạng và máy nào đang bị ảnh hưởng.

Một chiến dịch HTML Phishing mạo danh Paypal

HTML Phishing là 1 chiêu nhằm vượt qua cơ chế kiểm duyệt của các anti-virus hoặc các anti-spam. Trong đó các email lừa đảo không chưa bất kỳ một mã độc nào cũng như các link độc nào cả. Đơn giản là các email này chỉ đính kèm 1 file htm tưởng như vô hại.

Dưới đây là 1 chiến dịch mạo danh Paypal, trong đó kẻ tấn công đã sử dụng file htm đính kèm

1

Theo nguyên tắc thông thường thì file Attachment.htm này thực sự là “sạch”. Không chứa bất kỳ đoạn mã khai thác nào đáng nghi ngờ đối với Norton cả.

Thử kiểm tra với các phần mềm AV khác thì ta có thể thấy tỉ lệ phát hiện đây là mã độc rất thấp, chỉ có 7/50 phần mềm cảnh báo đây là mã độc

1a

Khi mở file htm ra nạn nhân sẽ thấy 1 giao diện rất “gần gũi” với nội dung email, là cảnh báo về vấn đề mất an toàn và đề nghị cập nhật lại thông tin account.

3

Những thông tin nếu submit, tất nhiên sẽ không được gửi đến server của Paypal, mà được gửi đến máy chủ của hacker. Các thông tin về thẻ tín dụng của nạn nhân sẽ được hacker lưu lại và tìm cách chiếm đoạt tiền trong tài khoản của nạn nhân.

4

Máy tính phát tán mail phishing này có vẻ như nằm tại Hong Kong. Đây có thể là máy của hacker nhưng cũng có thể là máy của 1 nạn nhân nào đó bị hacker lợi dụng.

5