ADSL DoS
Trong bài trước tôi có nói về ý tưởng làm luận văn tốt nghiệp với đề tài bàn về những điểm yếu trong cơ sở hạ tầng mạng có thể ảnh hưởng đến sự an toàn của người sử dụng Internet ở VN. Trong bài này tôi sẽ trình bày một điểm yếu nhỏ trong dịch vụ ADSL hay Cable Internet -1- của các ISP. Tận dụng điểm yếu này, bạn có thể tấn công theo kiểu từ chối dịch vụ, ngăn cản một người nào đó sử dụng dịch vụ ADSL khi bạn biết được địa chỉ MAC -2- của họ.
Tôi đã kiểm tra và xác nhận lỗ hổng này tồn tại trong dịch vụ Cable Internet của SCTV. Tôi chưa kiểm tra các ISP khác như FPT, MegaVNN hay Vietel nên không biết liệu họ có bị vấn đề này hay không. Nếu có điều kiện, tôi sẽ kiểm tra thử và cập nhật trên blog này.
Theo tôi được biết, tất cả các nhà cung cấp dịch vụ ADSL ở VN đều sử dụng giao thức PPPoE - Point to Point Protocol Over Ethernet để kết nối máy tính của bạn vào hệ thống mạng của họ. PPPoE, được miêu tả trong RFC 2516, là giao thức cho phép truyền frame PPP qua mạng Ethernet bằng cách nhúng frame PPP vào frame Ethernet. Sở dĩ các ISP đều sử dụng PPPoE vì họ muốn tận dụng lại hệ thống trang thiết bị đã được xây dựng để phục vụ cho mạng Dial-Up, vốn dĩ sử dụng giao thức PPP. Một frame Ethernet có cấu trúc như sau:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| DESTINATION_ADDR
| (6 octets)
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SOURCE_ADDR
| (6 octets)
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ETHER_TYPE (2 octets)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
~
~ payload
~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| CHECKSUM
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Trong đó phần payload sẽ có cấu trúc như sau nếu nó là frame PPPoE:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| VER | TYPE | CODE | SESSION_ID
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| LENGTH | payload
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Bạn chú ý trường SESSION_ID:
The SESSION_ID field is sixteen bits. It is an unsigned value in network byte order. It's value is defined below for Discovery packets. The value is fixed for a given PPP session and, in fact, defines a PPP session along with the Ethernet SOURCE_ADDR and DESTINATION_ADDR. A value of 0xffff is reserved for future use and MUST NOT be used
Khi bạn gửi một frame PPPoE, máy chủ PPPoE ở ISP sẽ nhìn vào SESSION_ID và SOURCE_ADDR để xác định kết nối của bạn. Đây chính là điểm yếu của PPPoE, nếu bạn biết được địa chỉ MAC và đoán được SESSION_ID của một người nào đó, bạn sẽ có toàn quyền điều khiển kết nối PPPoE của họ. Trên thực tế, tôi có thể ngắt kết nối PPPoE của bất kì người nào sử dụng dịch vụ Cable Internet của SCTV khi đã biết được địa chỉ MAC của họ.
Do SESSION_ID chỉ có 16 bit nên bạn không cần đoán nó làm gì mà chỉ cần gửi hàng loạt SESSION_ID khác nhau đến máy chủ PPPoE của ISP. Trong trường hợp xấu nhất, bạn sẽ phải gửi 2^16-1 PADT frame khác nhau, mỗi frame dài 20 byte. Tôi có viết thử một chương trình nhỏ để làm chuyện này và thấy rằng sử dụng một máy tính, tôi mất khoảng trên dưới 20 phút để gửi 2^16-1 PADT frame. Bạn có thể dựa vào đặc tính luôn tăng tuyến tính theo thời gian của SESSION_ID để giảm bớt số lượng PADT cần gửi. Trên thực tế, tôi thường chỉ mất dưới 5 phút để kết liễu một phiên PPPoE.
Bạn có thể thấy rằng, nhiệm vụ khó nhất là tìm địa chỉ MAC của nạn nhân. Tôi nghĩ cách tấn công hiệu quả nhất trong trường hợp này là sử dụng social engineering. Bạn giả làm người của ISP, gọi điện cho nạn nhân, yêu cầu họ cung cấp địa chỉ MAC. Tôi tin xác suất thành công của social engineering sẽ trên 50% bởi vì địa chỉ MAC không phải là thứ nhạy cảm như mật khẩu, người ta sẽ sẵn sàng cung cấp nó cho bạn. Một khi đã biết địa chỉ MAC rồi, nạn nhân cũng khó lòng mà thay đổi nó như đổi mật khẩu. Hihi, đọc bài này xong thì nếu ai gọi điện thoại cho bạn kêu bạn cung cấp địa chỉ MAC thì nhớ báo công an nhen :-d.
-Thái
-----
Ghi chú
-1-: Do ở đây cả ADSL và Cable Internet đều sử dụng giao thức PPPoE nên từ đây về sau tôi sẽ gọi chung là ADSL.
-2-: Tùy thuộc vào mỗi người, địa chỉ MAC này có thể là địa chỉ MAC trên máy tính cá nhân hay địa chỉ MAC của modem ADSL.