Bối cảnh

Website chạy WP và bị tấn cổng kiểu “Random URL“.

Đặc điểm nhận diện:

  • Sử dụng method GET
  • URL random bộ charset “a-z” và “A-Z”, không chứa số, ký tự đặc biệt
  • Độ dài từ 4-10 ký tự
  • HTTP version 2.0
  • IP phần lớn nước ngoài
  • User-Agent, Referer đều random
  • Số lượng khoảng hơn 5000 IP

Giải quyết

Có nhiều hướng tiếp cận để giải quyết:

  • Chặn theo GeoIP
  • Limit rate để lọc IP => chặn theo
  • Limit rate IP quốc tế
  • Challenge IP quốc tế
  • Chặn Header Proxy

Tuy nhiên vì không có nhiều thời gian, nên ở đây mình chọn hướng tiếp cận nhanh gọn: parse log realtime và đẩy vào firewall. Mình chọn hướng này vì các bạn có xem stream của mình về DDoS sẽ dễ dàng nhận kiểu attack này thông qua proxy, số lượng IP là hữu hạn (vì không fake được IP). Chặn hết IP botnet là xong.

Vì số lượng IP lớn, nên mình dùng ipset:

Khởi tạo set


ipset create BLACKLIST hash:ip

Inject rule vào iptables (table filter – chain INPUT): match IP trong BLACKLIST thì DROP

iptables -A INPUT -p tcp -m set --match-set BLACKLIST src -j DROP

Câu lệnh quan trọng nhất và cũng là trick mình muốn chia sẻ hôm nay: tail log realtime kết hợp với grep để đẩy IP vào firewall

tail abc.com-access_log -f | egrep --line-buffered "GET (/[a-zA-Z]{4,10} HTTP/2.0)" | egrep --line-buffered -v "admin|login" | awk '{print $1}' | while read ip ; do echo "Blocking: $ip"; ipset -exist add BLACKLIST $ip; done

Giải thích:

  • tail abc.com-access_log -f: theo dõi log realtime, cập nhật các dòng log mới
  • egrep –line-buffered “GET (/[a-zA-Z]{4,10} HTTP/2.0)”: lọc ra các request có dấu hiệu giống với tấn công như mô tả ở trên. Tham số cần lưu ý là “line-buffered” để chạy realtime kết hợp với “tail -f”. Nếu ko có cái này, lệnh egrep chỉ chạy 1 lần và ko cập nhật entry mới
  • egrep –line-buffered -v “admin|login”: whitelist các URL false positive
  • awk ‘{print $1}’ | while read ip ; do echo “Blocking: $ip”; ipset -exist add BLACKLIST $ip; done: Lấy IP và cập nhật vào danh sách BLACKLIST

Trích: Nguyễn Hưng (Bo) – Admin Vietnix

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.