Các biện pháp và công cụ giúp giảm thiểu các cuộc tấn công DDoS – Phần 1 - Whitehat.vn

Thông báo

Collapse
No announcement yet.

Các biện pháp và công cụ giúp giảm thiểu các cuộc tấn công DDoS – Phần 1

Collapse
X
  • Lọc
  • Thời gian
  • Show
Clear All
new posts

  • Các biện pháp và công cụ giúp giảm thiểu các cuộc tấn công DDoS – Phần 1

    Trong bài viết này mình sẽ nói về một số biện pháp và công cụ (mình đã từng áp dụng) trợ giúp những người quản trị hệ thống có thể giảm thiểu các cuộc tấn công DoS/DDoS.

    1. Đối với hệ thống server sử dụng nền tảng Linux.
    1.1. Dạng tấn công layer 3 (mô hình OSI)


    Với các kiểu tấn công ở layer 3, ta sẽ sử dụng iptables (công cụ mã nguồn mở và có sẵn trên linux) để giới hạn các gói tin từ kẻ tấn công gửi tới.

    - Kiểu tấn công ICMP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin icmp. Ví dụ lệnh dưới đây sẽ chỉ cho phép 1 gói tin icmp/1s từ 1 nguồn, các gói tin còn lại vượt ngưỡng sẽ bị loại bỏ.

    Mã:
    iptables -N icmp_flood
    iptables -A INPUT -p icmp -i eth0 -j icmp_flood
    iptables -A icmp_flood -i eth0 -p icmp -m limit --limit 1/s -j ACCEPT
    iptables -A icmp_flood -i eth0 -p icmp -m limit --limit 1/s -j LOG --log-prefix "iptables: limit icmp"
    iptables -A icmp_flood -i eth0 -p icmp -j DROP
    iptables -A OUTPUT -p icmp -j ACCEPT
    - Kiểu tấn công UDP Flood: ta sẽ thiết lập các rule trên iptables để limit các gói tin udp. Ví dụ lệnh dưới đây sẽ giới hạn chỉ cho phép 10 gói tin udp/1s từ 1 nguồn, các gói tin vượt quá sẽ bị drop.

    Mã:
    iptables -N udp_flood  
    iptables -A INPUT -p udp -j udp_flood
    iptables -A udp_flood -p udp -m state --state NEW -m recent --update --seconds 1 --hitcount 10 -j LOG --log-prefix "iptables: udp"
    iptables -A udp_flood -p udp -m state --state NEW -m recent --update --seconds 1 --hitcount 10 -j RETURN  
    iptables -A udp_flood -j DROP
    - Kiểu tấn công SYN Flood: tương tự ta cũng thiết lập các lệnh limit các gói tin SYN vào hệ thống

    Mã:
    iptables -N syn_flood
    iptables -A INPUT -i eth0 -p tcp --syn -j syn_flood
    iptables -A syn_flood -m limit --limit 1/s --limit-burst 10 -j LOG --log-prefix "SYN flood: "
    iptables -A syn_flood -m limit --limit 1/s --limit-burst 10 -j RETURN
    iptables -A syn_flood -j DROP
    1.2. Dạng tấn công layer 7 (mô hình OSI)

    Với kiểu tấn công ở layer 7, ta sẽ sử dụng iptables kết hợp với việc phân tíck bằng tay để chặn.
    - Tấn công nhỏ lẻ (chỉ từ 1 số nguồn ip cố định): phân tích log access để chặn các ip tấn công.
    - Tấn công lớn (từ một mạng bonet lớn):

    o B1: Hạn chế các gói tin đi vào từ tầng 3 bằng cách sử dụng iptable (mấy lệnh limit hay hitcount) -> mục đích để không bị tốn nhiều tài nguyên cho việc xử lý các gói tin cũng như có thể bị đầy bảng contractk trên iptables.

    Mã:
    iptables -N limit_new_tcp
    iptables -A INPUT -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -j limit_new_tcp
    iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
    iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j LOG --log-prefix "iptables: Limit new TCP"
    iptables -A limit_new_tcp -p tcp -i eth0 --dport 80 -m conntrack --ctstate NEW -j DROP
    o B2. Chặn các ip trên tầng 7.
    Sau khi hạn chế ở tầng 3, sẽ vấn có một số ip tấn công lọt vào được. Bạn viết một đoạn code python hay c cũng được, mục đích để chặn các ip lọt

    Ý tưởng code:
    • 1. định kỳ kiểm tra xem có những ip nào đang có kết nối nhiều tới server (lệnh này: netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort –n)
    • 2. Gưi ds ip đến iptables để drop (Việc chọn ds ip này có thể sẽ bị chặn nhầm ip thường, phụ thuộc vào việc bạn chọn mức ở trên)
    • 3. Sau khoảng 1 thời gian check lại nếu không thấy truy cập nữa thì bỏ drop nó đi

    - Với kiểu tấn công mà khi mà các nguồn tấn công đều từ nước khác. Ta có thể đưa ra giải pháp tạm thời là chặn tất cả các dải địa chỉ IP từ nước ngoài để dịch vụ lên được (Tham khảo link code ở đây nhé: https://www.cyberciti.biz/faq/block-...sing-iptables/ ).
    - Vơi dạng tấn công mà kẻ tấn công sử dụng tools tấn công có lưa lại chữ ký trên log access. Ví dụ:



    Trường hợp này ta có thể sử dụng iptables chặn theo string. Ví dụ lệnh sau sẽ block tất cả request có chứa cụm từ “$MyNick ddosim|$Lock”

    Mã:
    iptables -I INPUT -m string --algo bm --string "$MyNick ddosim|$Lock" -j DROP
    iptables -I FORWARD -m string --algo bm --string "$MyNick ddosim|$Lock" -j DROP
    - Ngoài ra sẽ có các kiểu tấn công đặc biệt khác. Với mỗi kiểu sẽ có những biện pháp xử lý khác nhau.

    Đối với hệ thống server sử dụng nền tảng Windows mình sẽ giới thiệu trong bài sau, các bạn đón xem nhé.
    File đính kèm
    Last edited by sunny; 09/01/17, 01:49 PM.

  • #2
    UDP flood thì gọi điện cho ISP là hiệu quả nhất
    Bạn chia sẻ nhiều hơn !!!
    Best Regards!

    Comment


    • #3
      Gửi bởi DiepNV88 Xem bài viết
      UDP flood thì gọi điện cho ISP là hiệu quả nhất
      Đối với trường hợp tấn công lớn thì đúng là cần ISP hỗ trợ, nhưng với kiểu nhỏ lẻ thì mình chủ động trước cho chắc cú anh ạ

      Comment

      Bạn cần đăng nhập hoặc đăng ký để viết bài
      Đăng nhập/Đăng ký
      Previously entered content was automatically saved. Restore or Discard.
      Auto-Saved
      x
      x
      Mời bạn bấm like để theo dõi Whitehat forum trên Facebook