DoS即Denial of Service拒绝服务攻击,DDoS即Distributed Denial of Service分布式拒绝服务攻击。介绍就不多说了,直接上笔记。
DoS种类:
1、Smurf攻击:
结合了IP欺骗和ICMP回复方法,攻击者冒充受害主机IP向受害者主机所在的网络广播ICMP应答请求(ping)数据包,导致该网络所有主机都应答从而拒绝服务攻击了受害主机。
2、Land攻击:
使用相同的源、目的主机及端口发送数据包到某台机器,使存在漏洞的主机崩溃;发送源、目的地址为同一服务器地址的SYN包给服务器,其会向自己发送SYN/ACK又发送ACK,从而创建一个空连接,直至超时掉进而消耗掉资源。
3、Teardrop攻击:
基于UDP的病态分片数据包的攻击,向受害者发送多个分片的IP包,某些操作系统收到含有重叠偏移的伪造分片数据包时会崩溃。
4、Ping of Death攻击:
发送大于65535字节的IP数据包给受害主机,导致内存溢出从而崩溃。
5、SYN Flood攻击:
利用TCP三次握手进行,攻击者使用无效IP向受害主机发送SYN包,受害主机回复SYN/ACK包给无效的IP,故只进行到三次握手的第二步而收不到ACK包,从而受害主机必须等待连接超时而消耗资源。
DRDoS:
即Distributed Reflect Denial of Service分布式反射拒绝服务攻击,是指利用路由器、服务器等设施对请求产生应答,从而反射攻击流量并隐藏攻击来源的一种分布式拒绝服务攻击技术。与Dos、DDoS不同,方式是发送大量带有被害者IP的数据包给攻击主机,攻击主机对IP源做大量回应。与DDoS不同在于不需要大量的“肉机”;攻击原理与Smurf攻击类似,但DRDoS可在广域网进行而Smurf攻击只能在局域网进行。原理为伪造源地址的SYN包发送给其他主机,这些主机会向源IP发SYN/ACK包从而导致拒绝服务。
僵尸网络:
僵尸网络是那些受感染计算机所组成的网络,攻击者可以远程控制每一台机器来执行恶意指令。
主要特点:受感染计算机组成的网络、能远程调度、用来进行恶意活动
知名的僵尸网络:ZeroAccess(使用rootkit隐藏,主要为点击欺诈)、Zeus(主要用于监控受害者机器,进行键盘记录等)、Pushdo/Cutwail(垃圾邮件僵尸网络)、Mariposa(蝴蝶僵尸网络,主要用于窃取信用卡和其他有价值的数据以及DDoS等)、Waledac(主要发送垃圾邮件)
命令与控制信道C&C:C&C是僵尸主控机对僵尸网络的接口,是僵尸网络最为关键的组件,一旦没有了C&C,僵尸网络将不再存活。
僵尸网络的组建:
节点:PC、服务器、移动设备
控制:IRC型(集中式C&C)、HTTP型(集中式C&C)、P2P型(分散式C&C)
僵尸网络的危害:DDoS攻击、发送垃圾邮件、点击欺诈、窃取敏感信息、抢占系统资源
僵尸网络的保护机制:关键在于保护C&C,可通过防弹主机、动态DNS、Fast-Fluxing技术、域名变化地址等。
DDoS攻击方式:
攻击网络带宽资源:
直接攻击:
ICMP/IGMP洪水攻击、UDP洪水攻击
反射和放大攻击:
ACK反射攻击、DNS放大攻击、NTP放大攻击(Network Time Protocol网络时间协议,攻击者使用伪造源IP的monlist请求大量NTP服务器,放大倍数较DNS的更大)、SNMP放大攻击(攻击者使用伪造源IP的GetBulk请求大量开启SNMP服务的网络设备)
攻击链路:
Coremelt攻击
攻击系统资源:
攻击TCP连接:
TCP连接洪水攻击、SYN洪水攻击、PSH+ACK洪水攻击(PSH+ACK报文意味着当前数据传输完毕,要求接收端将数据递交给服务进程并清空接收缓冲区,和SYN洪水攻击结合攻击效果更好)、RST洪水攻击(大量肉机盲打尝试成功触发TCP RST攻击)、Sockstress攻击(慢速攻击,TCP窗口大小设置为0或非常小的值来维持连接消耗资源)
攻击SSL连接(SSL协议的加解密、密钥协商等过程会消耗系统资源):
THC SSL DoS攻击(利用Renegotiation选项重复进行密钥协商过程)、SSL洪水攻击(发送大量假的SSL信息给服务器解密验证来消耗大量资源)
攻击应用资源:
攻击DNS服务:
DNS QUERY洪水攻击(向DNS服务器发送大量查询请求,攻击要点在于每个DNS解析请求的域名都是不一样的)、DNS NXDOMAIN洪水攻击(和前者区别在于查询一个不存在的域名)
攻击Web服务:
HTTP洪水攻击、Slowloris攻击(header字段不发送“\r\n\r\n”结束标志来保持连接不中断而占用资源)、慢速POST请求攻击(缓慢发送HTTP BODY来消耗资源)、数据处理过程攻击(如ReDoS正则表达式拒绝服务攻击和哈希冲突拒绝服务攻击)
分类整合:
DDoS攻击的工具:
1、Hping3:
除了之前用到的进行端口扫描的功能外,hping3还可以进行网络压力测试,如命令:hping3 -c 100 -a 1.2.3.4 -i -u1 -S -p 80 192.168.220.128,其中-c参数指定发送数据包的数量,-a参数伪造源IP,-i u1参数指定每个数据包发送间隔为1us,-S参数指定SYN标识,-p参数指定端口。
2、PenTBox:
基于Ruby
3、Zarp:
基于Python,仅限于在Linux平台运行
4、LOIC:
低轨道离子炮,可以实现TCP、UDP、HTTP GET洪水攻击,缺点是不能伪造源IP。界面如图:
5、HOIC:
高轨道离子炮,能够发动高速多线程的HTTP FLOOD洪水攻击,可自行修改配置进行不同强度的压力测试,缺点是无法改变端口、不支持代理、无法隐藏源IP。
6、HULK:
HTTP Unbearable Load King,基于Python的Web压力测试工具,通过启动500线程对目标发起高频率HTTP GET FLOOD请求,且每次请求都是独一的以绕过服务端的缓存措施。
7、Slowloris:
Perl程序,需要Perl运行环境,缺点是并不是对所有的Web服务端都有效。
8、R.U.D.Y:
Python编写,利用请求的body部分来进行慢速HTTP POST请求攻击。
9、THC SSL DOS:
利用SSL中已知的的弱点进行拒绝服务攻击,运行后会先探测目标是否开启renegotiation机制,若开启则进行攻击。
DDoS攻击的预防:
1、僵尸网络的清除:
理论上为最有效的防御方法,需要先检测出异常流量才能找到僵尸网络,接着逆向分析,可以根据分析结果编写清除工具来清除僵尸网络,但不一定都能清除干净;也可以接管或摧毁整个僵尸网络,但往往是需要多方合作、比较困难。
2、地址伪造攻击的防御:
CERT Advisory CA-1996-21(路由过滤)、RFC 2827(对下游流量中的地址欺骗流量进行过滤)、Unicast Reverse Path Forwarding单播反向路径转发(查看数据包的源地址和源端口是否在路由表中,若在则正常转发)、分布式过滤方法(路由器根据数据包的源地址和目的地址判断其转发路径是否经过自己,若没有则丢弃)
3、攻击反射点的防御:
提高DNS服务器的安全性,具体方法如Open Resolver Project、RRL(Response Rate Limiting响应速率限制模块)、NIST SP 800-81
DDoS攻击的缓解(主要有攻击流量稀释和流量清洗):
1、CDN:
内容分发网络,用户可以通过智能DNS利用CDN的节点来快速获取所需要的资源和服务,同时由于CDN节点的缓存作用,在一定程度上对DDoS的攻击流量起到稀释的作用。但如果攻击者使用IP而不是域名进行攻击,则无法将攻击流量分散到各个CDN节点。
2、Anycast:
任播技术,一种网络寻址和路由的方法,一组提供特定服务的主机可以使用相同的IP,同时服务访问方的请求报文会被IP网络路由到这一组目标中拓扑结构最近的一台主机上,进而可以稀释DDoS的攻击流量、将其稀释到最近的节点上。当任播组中某些成员被攻击时,负责报文转发的路由可以根据各个组成员的响应时间来决定报完应该转发到哪个成员上,但由于受攻击的成员并没有响应,所以报文就不会转发到那里。
3、IP信誉检查:
优先处理信誉高的IP,丢弃信誉低的IP(如作为僵尸网络经常发送垃圾邮件或者DoS攻击的IP),如IP黑白名单。
4、攻击特征匹配:
根据攻击流量的特征指纹进行过滤。
5、速度检查与限制
最基本的流量清洗方法,对发送速度过快的包进行过滤。
6、TCP代理和验证:
即流量清洗设备充当服务器的TCP代理,流量清洗设备对连接表操作进行了专门的优化,使之可以处理大量的连接请求。当一个TCP的SYN请求到达流量清洗设备后,设备并不将它交给后面的服务器,而是直接回复一个SYN/ACK并等待客户端的回复,若合法用户进行响应则流量清洗设备会替代用户和服务器建立TCP连接,并将该连接加入信任列表中;若是攻击者则不会响应,流量清洗设备会暂时保持该半连接至短暂的超时。此外,还能进行TCP协议的一些交互性验证,即当收到SYN请求时,通过直接丢弃、发送RST包或错误序列号的ACK包中断连接,再观察客户端的行为来进行验证。
7、协议完整性验证:
大多数的攻击都只发送攻击请求而不会去处理响应数据。如DNS解析过程中,若响应数据中Flags字段的Truncated位被置位,正常用户会使用TCP 53端口重新发送域名解析请求而攻击者不接收或不处理该请求,从而实现有效的区分过滤。
8、客户端真实性验证:
若攻击工具含有协议库,则协议完整性验证的方法就不奏效,就需要对客户端程序进行挑战-应答式的交互验证,检测客户端是否完成特定的功能,从而确定请求数据是否来自真实的客户端。基于页面的Web服务,通过验证客户端是否支持JavaScript来验证是否合法用户,若是真实的浏览器发出的请求则会进行JS的相关操作,否则过滤;当然攻击者可以在工具中添加JS相关功能来绕过,此时可以使用验证码CAPTCHA来进一步地进行过滤。
防火墙防范DoS攻击原理:
1、单包攻击的防御:
(1)Ping of Death攻击的防御:
通过判断报文的大小是否大于65535字节来防御,若大于该字节则丢弃该报文。
(2)Land攻击的防御:
检查TCP报文的源地址和目的地址是否相同,或者TCP报文的源地址是否为环回地址,若是则直接丢弃该报文。
(3)IP地址扫描攻击的防御:
对收到的TCP、UDP、ICMP报文进行检测,某个源IP地址连续发送报文时,若该IP发送的报文的目的地址与其发送的前一个报文的目的地址不一样,则记为一次异常。当异常次数超过阈值时,则认为该源IP正在进行IP地址扫描攻击,防火墙会将该源IP地址加入黑名单,后续收到来自该源IP地址的报文时直接丢弃。
2、流量型攻击SYN Flood攻击的防御:
(1)TCP代理:
TCP代理是指防火墙部署在客户端和服务器中间,当客户端向服务器发送的SYN报文经过防火墙时,防火墙会替代服务器与客户端建立TCP三次握手。防火墙先对SYN报文进行统计,如果发现连续一段时间内去往同一目的地址的SYN报文超过预先设定的阈值,则启动TCP代理。启动后,防火墙收到SYN报文将会替代服务器回应SYN/ACK报文,接下来如果防火墙没有收到客户端回应的ACK报文,则判定此SYN报文为非正常报文,防火墙替代服务器保持半连接一定时间后放弃此连接。若防火墙收到了客户端回应的ACK报文,则判定此SYN报文为正常报文,此时防火墙会替代客户端和服务器建立TCP三次握手,该客户端的后续报文将直接发送到服务器。显然,TCP代理的本质是利用防火墙的高性能。如图:
(2)TCP源探测:
防火墙先对SYN报文进行统计,如果发现连续一段时间内去往同一目的地址的SYN报文超过预先设定的阈值,则启动TCP源探测。启动后,防火墙收到SYN报文将会响应一个带有错误确认号的SYN/ACK报文,接下来如果防火墙没有收到客户端回应的RST报文,则判定此SYN报文为非法报文,客户端为虚假源。若防火墙收到了客户端回应的RST报文,则判定此SYN报文为正常报文,客户端为真实源。防火墙将该客户端的IP地址列入白名单,在白名单老化之前,这个客户端发出的报文都会被认为是合法的报文。较TCP代理的方法相比,对客户端的真实性只进行一次验证,大大提高了防御效率和性能,同时也缓解了防火墙的性能压力。如图:
3、流量型攻击UDP Flood攻击的防御:
(1)限流:
通过限流将链路中的UDP报文控制在合理的带宽范围之内。主要有4中方式,基于流量入接口的限流、基于目的IP地址的限流、基于目的安全区域的限流、基于会话的限流等。
(2)指纹学习:
指纹学习是指通过分析客户端向服务器发送的UDP报文载荷是否有大量的一致内容,来判定这个UDP报文是否异常。防火墙对去往目标服务器的UDP报文进行统计,当UDP报文达到告警阈值时,开始对UDP报文的指纹进行学习。若相同的特征频繁出现,就会被学习成指纹。后续匹配指纹的UDP报文将被防火墙判定为攻击报文而丢弃,没有匹配指纹的UDP报文将被防火墙转发。原理即是基于UDP Flood攻击报文通常是拥有相同的特征字段,攻击报文具有很高的相似性。如图:
4、应用层攻击DNS Flood攻击的防御:
利用DNS协议的一个机制:
DNS服务器可以设置让客户端使用TCP协议来发起解析请求。当客户端向DNS服务器发起解析请求时,DNS服务器回应的报文中有一个TC标志位,若TC标志位置为1,就表示DNS服务器要求客户端使用TCP协议发起解析请求。防火墙就是利用这一机制对DNS Flood攻击进行防御的。过程如图:
5、应用层攻击HTTP Flood攻击的防御:
利用HTTP重定向:
防火墙先对HTTP请求报文进行统计,若发现连续一段时间内去往同一目的地的HTTP请求报文超过预先设置的阈值,则启动HTTP源探测。启动后,防火墙收到HTTP请求,会替代HTTP服务器回应HTTP请求,将客户端的访问重定向到一个新的虚构的URI。接下来如果防火墙没有收到客户端访问该URI的请求,则判定客户端为虚假源。若防火墙收到了客户端访问该URI的请求,则判定此客户端为真实源,并将客户端的IP地址加入白名单,然后防火墙继续向客户端发送HTTP重定向命令,将客户端的访问重定向到原始URI。在白名单老化之前,后续这个客户端发出的HTTP请求报文都被认为是合法的报文。如图: