Mạng sập trong 10 giây: Tìm hiểu về DHCP Starvation
DHCP Starvation là một kiểu khai thác cổ điển nhưng vẫn cực kỳ hiệu quả. Nó nhắm vào cách các mạng nội bộ cấp phát địa chỉ IP. Kẻ tấn công sử dụng các công cụ như Yersinia để làm tràn ngập máy chủ DHCP với hàng nghìn yêu cầu sử dụng địa chỉ MAC giả mạo.
Trong một mạng /24 điển hình, một chiếc laptop duy nhất có thể làm cạn kiệt tất cả 254 địa chỉ IP khả dụng trong chưa đầy hai giây. Khi kho địa chỉ trống rỗng, các thiết bị hợp lệ không thể kết nối. Điều này thường tạo tiền đề cho một cuộc tấn công Man-in-the-Middle (MitM), nơi kẻ tấn công triển khai một máy chủ DHCP giả mạo để chiếm đoạt dữ liệu của bạn.
Các switch doanh nghiệp thường có sẵn các tùy chọn để ngăn chặn điều này. Tuy nhiên, nhiều hệ thống hiện đại—như cụm Proxmox, máy chủ KVM và các edge gateway—dựa vào Linux Bridge. Tôi đã triển khai các biện pháp phòng thủ bằng phần mềm này trong các môi trường sản xuất với hàng trăm VM. Kết quả rất ổn định, mang lại khả năng bảo mật cấp phần cứng mà không tốn kém như các switch quản lý (managed switch) đắt tiền.
Lựa chọn chiến lược phòng thủ
Bạn có ba hướng chính để bảo vệ mạng khỏi các mối đe dọa DHCP. Mỗi phương pháp có một trường hợp sử dụng cụ thể tùy thuộc vào phần cứng và quy mô của bạn.
- Snooping dựa trên phần cứng: Có sẵn trên các dòng máy của Cisco hoặc Juniper. Phương pháp này nhanh và đơn giản nhưng khiến bạn bị phụ thuộc vào các nhà cung cấp cụ thể và các hợp đồng hỗ trợ đắt đỏ.
- Lọc trên Linux Bridge (ebtables/nftables): Đây là cách tiếp cận thủ công nhưng cực kỳ linh hoạt. Nó hoạt động trên bất kỳ máy Linux nào, và là tiêu chuẩn vàng cho các nhà cung cấp đám mây và các router tự xây dựng.
- Giới hạn MAC (MAC Limiting): Cách này ngăn chặn cuộc tấn công ngay từ nguồn. Bằng cách giới hạn một cổng ảo chỉ được phép sử dụng một hoặc hai địa chỉ MAC, bạn sẽ dập tắt nỗ lực gây cạn kiệt IP trước khi gói tin đầu tiên chạm tới máy chủ.
Phòng thủ dựa trên Linux có phù hợp với bạn không?
Lợi ích
- Không tốn phí bản quyền: Bạn đang sử dụng các công cụ tiêu chuẩn như
ebtablesđã có sẵn trong kernel. - Kiểm soát chi tiết: Bạn có thể viết các script tự động cập nhật quy tắc khi một VM mới được khởi tạo.
- Kiểm tra (Auditing) tốt hơn: Sử dụng
journalctlđể kích hoạt cảnh báo ngay khi một cổng bắt đầu loại bỏ các gói tin khả nghi.
Hạn chế
- Rào cản kỹ thuật: Bạn cần hiểu về stack mạng của Linux. Nó không đơn giản như việc nhấn một nút trên giao diện web.
- Ảnh hưởng đến CPU: Trên các liên kết 10Gbps+ với lượng gói tin khổng lồ, việc lọc bằng phần mềm sẽ làm tăng độ trễ một chút. Đối với hầu hết các mạng văn phòng hoặc LAN quản lý, tác động này gần như bằng không.
Kiến trúc bảo mật đa lớp
Đừng chỉ dựa vào một quy tắc tường lửa duy nhất. Tôi khuyên bạn nên sử dụng chiến lược hai lớp: Giới hạn địa chỉ MAC kết hợp với mô phỏng DHCP Snooping. Giới hạn MAC ngăn một cổng duy nhất chiếm dụng toàn bộ kho IP. Trong khi đó, DHCP Snooping đảm bảo rằng chỉ máy chủ được ủy quyền của bạn mới có thể cấp phát địa chỉ IP. Thiết lập này giúp chặn đứng cả những kẻ tấn công có ý đồ xấu lẫn những chiếc “router lạ” do nhân viên vô tình cắm vào mạng.
Hướng dẫn triển khai từng bước
1. Chuẩn bị Kernel
Trước khi bắt đầu, hãy xác nhận rằng bridge của bạn được cấu hình để chuyển lưu lượng qua iptables và ebtables. Hầu hết các bản phân phối hiện đại như Debian hoặc Ubuntu đều đã bật tính năng này theo mặc định.
# Kiểm tra xem tính năng lọc bridge có đang hoạt động không
sysctl net.bridge.bridge-nf-call-iptables
# Nếu kết quả trả về 0, hãy kích hoạt nó ngay lập tức
sudo sysctl -w net.bridge.bridge-nf-call-iptables=1
2. Khóa địa chỉ MAC
Cách hiệu quả nhất để ngăn chặn giả mạo là gắn một địa chỉ MAC cụ thể vào một cổng. Nếu bạn biết rằng veth-customer1 thuộc về một VM cụ thể, hãy loại bỏ tất cả các gói tin khác. Điều này ngăn VM gửi đi hàng nghìn yêu cầu với các danh tính ngẫu nhiên.
# Loại bỏ bất kỳ gói tin nào từ veth-customer1 không khớp với địa chỉ MAC được ủy quyền
ebtables -A FORWARD -i veth-customer1 -s ! 52:54:00:12:34:56 -j DROP
3. Mô phỏng DHCP Snooping
Chúng ta cần xác định vùng “Tin cậy” (Trusted) và “Không tin cậy” (Untrusted). Máy chủ DHCP thực sự của bạn nằm trên một cổng Tin cậy. Mọi thứ khác là Không tin cậy. Mục tiêu của chúng ta là chặn bất kỳ gói tin DHCP “OFFER” hoặc “ACK” nào nếu chúng xuất phát từ một cổng Không tin cậy.
Trong ví dụ này, eth0 là đường uplink tới máy chủ, và br0 quản lý các máy khách.
# 1. Tạo một chain riêng cho lưu lượng DHCP
ebtables -N DHCP_SNOOPING
ebtables -P DHCP_SNOOPING RETURN
# 2. Chuyển hướng các phản hồi từ DHCP Server (UDP port 67) sang chain mới
ebtables -A FORWARD -p IPv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DHCP_SNOOPING
# 3. Quy tắc vàng: Nếu phản hồi DHCP đến từ bất kỳ đâu NGOẠI TRỪ eth0, hãy loại bỏ nó
ebtables -A DHCP_SNOOPING -i ! eth0 -j DROP
4. Thêm lớp bảo vệ với giới hạn tốc độ (Rate Limiting)
Nếu bạn không thể khóa địa chỉ MAC—chẳng hạn vì một cổng kết nối với một switch phụ—hãy sử dụng giới hạn tốc độ. Điều này làm chậm cuộc tấn công xuống mức tối thiểu. Nó biến một sự cố sập mạng trong 2 giây thành một sự kiện mất hàng giờ mới có thể thành công, giúp các công cụ giám sát có đủ thời gian để cảnh báo cho bạn.
# Giới hạn yêu cầu DHCP ở mức 5 yêu cầu/giây. Mức này là đủ cho nhu cầu sử dụng bình thường.
iptables -A FORWARD -p udp --dport 67 -m limit --limit 5/s -j ACCEPT
iptables -A FORWARD -p udp --dport 67 -j DROP
Kiểm tra hệ thống phòng thủ
Khi các quy tắc đã có hiệu lực, hãy thử phá vỡ chúng. Sử dụng một script để tạo các gói tin DHCP DISCOVER giả mạo. Bạn sẽ thấy các bộ đếm DROP tăng lên trong khi laptop hợp lệ của bạn vẫn nhận được IP mà không bị chậm trễ.
# Kiểm tra số liệu thống kê để xem các quy tắc đang hoạt động
sudo ebtables -L --lc
Nếu chỉ số DROP trong chain DHCP_SNOOPING tăng lên trong quá trình kiểm tra, bộ lọc đang hoạt động tốt. Các máy khách hợp lệ của bạn sẽ không bị ảnh hưởng và vẫn duy trì kết nối.
Tổng kết
Bảo mật một Linux Bridge đòi hỏi nhiều nỗ lực thủ công hơn so với việc sử dụng switch quản lý, nhưng sự kiểm soát mà bạn có được là hoàn toàn xứng đáng. Bằng cách kết hợp lọc MAC với ebtables, bạn biến một bridge phần mềm cơ bản thành một người gác cổng có khả năng nhận biết bảo mật. Tôi đã sử dụng chính thiết lập này để chặn đứng các cơn bão broadcast và những kẻ tấn công có ý đồ xấu. Điều đó chứng minh rằng với cấu hình đúng đắn, các công cụ mã nguồn mở có thể cung cấp sự bảo vệ cấp doanh nghiệp.

