freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

攻击模式库—Dos攻击测试
adone 2023-11-13 20:46:49 76622

1.概念

Dos(拒绝服务)攻击就是攻击者通过资源消耗(包括系统资源、网络资源)导致业务无法正常提供服务,只要能够对目标造成耗尽系统或网络资源,使某些服务被暂停甚至主机死机,都属于拒绝服务攻击。另一种达到相同目的的攻击是DDOS(分布式拒绝服务),顾名思义,DDOS是在DOS攻击的基础之上,产生的一种新的攻击方式,利用控制成百上千台“肉鸡”组成一个DDOS攻击群,在同一时刻对目标主机发起攻击。攻击区别简单来说就是DOS是一对一单打,DDOS是群殴一个目标。

2.攻击原理

DOS攻击可以分为三种类型:带宽攻击;协议攻击;逻辑攻击

(1)带宽攻击是一种短时间内产生大量通信流量占满网络带宽,使网络瘫痪的攻击。

攻击方法:这种攻击方法就是消耗网络带宽资源,占满带宽,导致正常的流量无法进来。常见的攻击方法包括TCP SYN Flooding(TCP泛洪攻击),Ping Flood(ICMP洪水攻击)、UDP Flood(UDP泛洪攻击)等,这种直接攻击流量是对等的,在消耗对方带宽的同时,也会消耗自己大量的带宽资源,所以需要大量的“肉鸡”。

防御方式:基于内容、IP和其他参数的流量过滤是防御带宽攻击的主要方式。

(2)协议攻击:利用协议本身的破绽,反复发送畸形的攻击数据引发系统错误,大量系统资源被占用导致服务进程挂起不可用,又或者利用协议重复连接的缺陷,构造大量的连接请求占用系统网络连接资源,使得正常的请求无法获取网络连接,主要攻击方式有http慢速攻击、Land攻击、死亡之ping、泪滴、Smurf攻击。

攻击方法:许多操作系统的TCP/IP协议栈都规定ICMP的包大小不超过64KB,"Ping of Death"就是故意产生畸形的测试Ping(Packet Internet Groper)包,声称自己的尺寸超过ICMP上限,也就是加载的尺寸超过64KB上限,使未采取保护措施的网络系统出现内存分配错误,导致TCP/IP协议栈崩溃,最终接收方宕机。泪滴攻击利用在TCP/IP协议栈实现中信任IP碎片中的包的标题头所包含的信息来实现的攻击。Local Area Network Denial attack,局域网拒绝服务攻击。攻击者构造了一个TCP SYN数据包,导致被攻击主机创建了大量空连接从而拒绝正常的连接。

防御方式:禁止ICMP报文通过网络安全设备,在防火墙或路由器配置规则识别攻击报文,过滤源地址和目的地址相同的包、病态分片数据包等。

(3)逻辑攻击:也可以说是对应用服务的攻击,通过应用存在一些溢出漏洞或其他资源耗尽的罗技漏洞导致拒绝服务或服务重启。

攻击方法:通过大报文攻击和请求放大攻击等请求Dos攻击、文件Dos攻击,端口连接Dos攻击来耗尽应用和系统资源,导致服务不可用。

防御:针对Dos的根因对应用进行加固。

3.测试验证:

3.1 协议攻击-端口Dos测试

应用服务连接数中间件可以进行配置,例如tomcat中会有maxConnections、maxThread等配置,可以限制请求连接数和线程数。如果没有限制或限制不合理,攻击者可以不断建立请求连接消耗服务端资源,导致超过服务内存配置最终崩溃。

端口连接测试,主要是通过高并发创建连接消耗网络连接资源,脚本如下:

import sys

import socket



s = list()

def connect_attack(ip, port):

for i in range(60000):

s.append(socket.socket(socket.AF_INET, socket.SOCK_STREAM))

s[i].connect((ip, port))

if(i % 100 == 0):

print("connect num: %d", i)

其他如TCP泛洪攻击脚本,可以在网上搜一下,看看有什么区别。

3.2协议攻击-Http慢速攻击

HTTP慢速攻击是利用HTTP合法机制,以极低的速度往服务器发送HTTP请求,尽量长时间保持连接,不释放,若是达到了Web Server对于并发连接数的上限,同时恶意占用的连接没有被释放,那么服务器端将无法接受新的请求,导致拒绝服务。

HTTP协议的报文都是一行一行的,每一行结束都会有回车换行符,\r\n代表一行报文的结束也被称为空行(CRLF),而\r\n\r\n代表整个报文的结束。当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

3种攻击方式

  • Slow headers(也称slowloris):Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,Web服务器再没接收到2个连续的\r\n时,会认为客户端没有发送完头部,而持续的等等客户端发送数据,消耗服务器的连接和内存资源。
  • Slow body(也称Slow HTTP POST):攻击者发送一个HTTP POST请求,该请求的Content-Length头部值很大,使得Web服务器或代理认为客户端要发送很大的数据。服务器会保持连接准备接收数据,但攻击客户端每次只发送很少量的数据,使该连接一直保持存活,消耗服务器的连接和内存资源。
  • Slow read(也称Slow Read attack):客户端与服务器建立连接并发送了一个HTTP请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以很低的速度读取Response,比如很长一段时间客户端不读取任何数据,通过发送Zero Window到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。

测试工具推荐:

slowhttptest 攻击是一款慢速攻击工具,其擅长攻击Apache/Tomcat这里应用层服务,常用测试指令:

slowloris模式:耗尽应用的并发连接池,类似于HTTP层的syn flood 洪水攻击


slowhttptest -c 1000 -H -g -o my_header_stats -i 10 -r 200 -t GET -u https://www.xxx.com/index.html -x 24 -p 3


slow post模式:耗尽应用的并发连接池,类似于HTTP层的syn flood 洪水攻击


slowhttptest -c 3000 -B -g -o my_body_stats -i 110 -r 200 -s 8192 -t FAKEVERB -u https://www.xxx.com/index.html -x 10 -p 3


slow read模式:攻击者通过调整TCP Window窗口大小,使服务器慢速返回数据


slowhttptest -c 8000 -X -r 200 -w 512 -y 1024 -n 5 -z 32 -k 3 -u https://www.xxx.com/index.html -p 3

3.3 逻辑攻击-文件Dos测试

(1)大文件攻击

测试上传下载文件接口,是否对文件数量、大小等占用磁盘资源的指标有影响,是否导致OOM文件。例如上传文件到临时空间,上传时没有对文件数量、大小校验,构造恶意大文件上传可能会导致服务OOM,上传文件的空间没有及时清理,导致磁盘占用一直增加,从而导致服务异常不可用。还有例如日志没有配置转储策略,导致日志一直保存不断占用磁盘空间。

(2)Zip炸弹攻击

应用后台对用户精心构造的高压缩比的压缩文件进行解压缩,由于未进行有效的文件大小和文件数量检查,导致磁盘空间耗尽或内存耗尽。

3.4 逻辑攻击-内存溢出测试

(1)多线程高并发调用接口

使用工具高并发调用应用同一接口,其实也可以多个接口同时请求,如果接口没有做限流和熔断保护,短时间内会产生大量请求占用大量内存,导致OOM。当然,这也要看接口请求占用内存大小,不是说接口没有做限流和熔断保护就一定会出现内存溢出导致服务不可用和重启,只是存在很大可能导致内存占满。还有一种就是Java进程中涉及到反序列化的接口,构造大量的空反序列化对象请求,很容易导致一个请求占用大量内存,高并发请求很大概率导致OOM,服务不可用。

(2)请求放大攻击

对于某些接口参数涉及影响内存占用或数据入库,这些参数校验不合理或没有校验,就会导致请求下发后,会加载大量的数据到内存中或者查询大量的数据入库,导致内存溢出或数据库撑满,最终导致服务不可用。

(3)大报文攻击

大报文攻击是请求报文大小没有限制或限制不合理,导致请求报文很大或报文里解析对象很多,导致请求下发后占用大量内存,从而导致OOM,服务不可用重启。一般要重点测试请求body中包含json对象的报文,构造大量的json对象,高并发请求,查看进程内存消耗情况判断OOM的可能性。

(4)其他逻辑漏洞

其他如Web缓存投毒、XXE漏洞、外部输入导致代码死锁或死循环等问题也可能会导致DOS。

许多攻击测试方式本文没有给出详细测试步骤,大家感兴趣可以根据本文提到的攻击方法自己在网上搜索学习实践一下。

# web安全 # 系统安全
本文为 adone 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
adone LV.4
这家伙太懒了,还未填写个人描述!
  • 14 文章数
  • 8 关注者
安全测试技术总结-SAST_DAST_IAST_SCA
2023-12-13
网络安全工具集汇总
2023-11-28
Tomcat内存码实现原理
2023-11-23
文章目录