Slowloris是在2009年由著名Web安全专家RSnake提出的一种攻击方法,Slowloris是一种针对Web服务器的攻击方式。它利用了服务器在处理HTTP连接时的一些弱点,通过向服务器发送大量的HTTP请求,但在每个请求的头部只发送部分数据并保持连接不断开的方式来耗尽服务器资源。
攻击者使用Slowloris攻击时,会向目标服务器发送大量的请求,但这些请求不会完全发送完整的HTTP头部信息,而是会保持未完成状态。由于这些请求未完成,服务器会为每个请求保持连接状态,但却不会响应或关闭这些连接。这导致服务器的连接资源最终被耗尽,无法响应其他正常的合法请求,使得服务器无法向合法用户提供Web服务。
在正常的HTTP包头中,是以两个CLRF1表示HTTP Headers部分结束的。如果Web Server只收到了一个\r\n,因此将认为HTTP Headers部分没有结束,并保持此连接不释放,继续等待完整的请求。此时客户端再发送任意HTTP头,保持住连接即可。
import requests
# 定义头部信息
headers = {
'User-Agent': 'My User Agent', # 用户代理信息
'Accept': 'application/json', # 接受的内容类型
'Content-Type': 'application/json', # 请求的内容类型
'Authorization': 'Bearer YOUR_TOKEN', # 授权信息
# 添加其他需要的头部信息...
}
# 构造请求
url = 'https://api.example.com/endpoint'
response = requests.get(url, headers=headers)
# 输出响应内容
print(response.text)
以python为例,在引入requests库时,requests 库会自动处理生成符合 HTTP 标准的头部信息,包括正确的 CRLF 格式。你只需提供键值对形式的头部信息,库会负责构建正确格式的头部。这样,就避免了开发人员无意间造成的慢速访问或者慢速攻击。
Slowloris攻击不会占用很大的网络带宽,只是利用看起来正常但是很慢,并且是正常的流量来消耗服务器的资源,所以被归类为“慢速”攻击。
建立连接: 攻击者利用自动化工具向目标服务器发起大量的网络连接请求。
发送部分请求头: 每个连接都会发送一个HTTP请求,但请求头部信息只会发送部分内容,保持请求处于未完成状态。
保持连接打开: 攻击者会定期向服务器发送少量数据以保持连接处于打开状态,但不会完成整个HTTP请求。这样,服务器为每个连接保持打开状态,并等待请求的完成。
耗尽服务器资源: 由于服务器在等待这些请求完成而保持连接打开,这会消耗服务器的连接资源。随着攻击者不断创建新的连接并保持它们处于未完成状态,服务器的连接资源最终会耗尽,导致合法用户无法建立新的连接或访问服务器。
拒绝服务: 一旦服务器的连接资源被耗尽,它将无法响应新的合法请求,导致服务不可用,即拒绝服务攻击(Denial of Service)。
UDP flood是指用用户数据报协议(UDP)数据包淹没目标的任何DDoS攻击。攻击的目的是攻击远程主机上的随机端口。这使得主机反复检查在该端口侦听的应用程序,并且(当没有找到应用程序时)发送一个ICMP“目的地不可达”数据包的响应。这个过程会消耗主机资源,最终导致其他用户无法访问。
与UDP flood攻击类似,ICMP flood攻击通过ICMP Echo Request (ping)报文淹没目标资源,通常以最快的速度发送报文,而不等待应答。这种类型的攻击会消耗传入和传出带宽,因为受害者的服务器通常会尝试使用ICMP Echo Reply数据包进行响应,从而导致整个系统的显著减速。
SYN flood DDoS攻击利用了TCP连接序列中的一个普遍弱点(“三次握手”),其中SYN发起到主机的TCP连接的请求必须由该主机的SYN-ACK响应响应,然后由请求者的ACK回复确认。在SYN洪水的场景中,请求者将发送多个SYN请求,但要么不响应主机的SYN- ack响应,要么从欺骗的IP地址发送SYN请求。
无论哪种方式,主机系统都会继续等待每个请求的确认,绑定资源,直到无法建立新的连接,并最终导致拒绝服务。
POD或死亡ping攻击涉及攻击者向计算机发送几个恶意或畸形的ping。IP报文的最大长度(包括报头)为65,535字节。然而,数据链路层经常对最高帧大小设置限制——例如,在以太网网络上限制为1500字节。在这种情况下,一个大的IP数据包被分成不同的IP数据包(分片),接收主机将这些IP分片重新组装成一个完整的数据包。
在Ping of Death的攻击中,在恶意操纵片段内容后,重新组装时,会给接收方留下一个大于65,535字节的IP数据包。这可能超出为数据包分配的内存缓冲区,从而导致拒绝合法数据包的服务。
NTP(Network Time Protocol)放大攻击是一种利用NTP服务器的特性来发起分布式拒绝服务(DDoS)攻击的方式。NTP是用于同步计算机系统时间的协议,攻击者利用其Monlist命令的特性来进行攻击。
攻击者向运行NTP服务器的计算机发送伪造的请求,将目标IP地址设置为受害者的IP。NTP服务器会响应这个请求,并将一个包含最多最近的客户端的IP地址的响应发送回被伪造的IP地址(即受害者的IP地址)。攻击者利用这一点,向NTP服务器发送大量伪造请求,并导致NTP服务器向受害者发送大量的响应数据,从而将其网络连接耗尽,造成拒绝服务。
攻击的效果类似于其他放大攻击(例如DNS放大攻击),攻击者发送小型请求,但服务器的响应会远远大于请求的大小,这导致了数据的放大效应,最终使受害者遭受大量的网络流量,超出其网络带宽和处理能力的承受范围。
HTTP flood攻击是一种DDoS(分布式拒绝服务)攻击,利用大量伪造的HTTP请求同时向目标服务器发送请求,目的在于超载服务器的处理能力,使其无法有效地处理合法用户的请求,导致服务不可用。攻击者通过发送大量请求,耗尽服务器的资源,如带宽、处理器等,造成网络阻塞或服务器崩溃,使合法用户无法访问或使用目标网站或服务。
Zero-day DDoS Attacks是指利用针对未知漏洞的攻击手法,针对网络系统进行分布式拒绝服务(DDoS)攻击,攻击者利用这些未被厂商或组织发现的安全漏洞,通过快速开发和利用这些漏洞来对网络设施进行攻击,导致系统服务不可用。
【网络安全】零日漏洞(0day)是什么?如何防范零日攻击?
这类攻击对于网络防御者来说尤其具有挑战性,因为攻击利用了未知漏洞,使得预防和应对变得更为困难,通常需要实时响应和快速补救措施,以最小化攻击带来的影响。
CLRF指的是"Carriage Return Line Feed"(回车换行),它是一种控制字符序列,用于表示文本中的换行操作。在不同的操作系统和文本文件中,换行的方式可能有所不同。
回车(Carriage Return):在ASCII字符集中,它的十六进制值是0x0D,通常表示为 \r。回车符指示将光标移动到当前行的开头位置。
换行(Line Feed):在ASCII字符集中,它的十六进制值是0x0A,通常表示为 \n。换行符指示将光标移动到下一行的开头位置。
在很多操作系统中,换行被表示为回车符后紧跟着一个换行符(即CRLF,\r\n),而在一些其他的系统中,可能只使用回车符(\r)或者换行符(\n)来表示换行。 ↩︎