精华内容
下载资源
问答
  • 2020-04-10 13:35:02

    放大攻击原理

    很多协议在响应包处理时,要远大于请求包,一个字节的请求十个字的响应,十个字节的请求一百个字的响应,这就是UDP反射放大攻击最根本的原理。

    而且,最重要的一点,UDP是不稳定的,不需要请求建立连接的
    那么我就有点想法了

    1. 使用SOCKRAW,伪造UDP头和IP头,是否让目标流量返回给目标自己呢?事实上 我可以一点流量都接收不到,而目标在收到请求后需要放大还要将响应返回给自己。
    1. 另外一种用法,我搜集到了很多这种服务器(当做肉鸡),我伪造UDP头和IP头,伪造为我要攻击的目标,那么这些服务器在接收到我发送的数据后,所有的响应信息全部都会返回到目标IP去,这样也可以达到攻击的效果。

    正因为UDP协议是可以伪造的,所以企业在溯源时很难找到攻击者是谁。
    如今DDoS产业已经泛滥,技术成本极低,黑产链已经相当的完善和成熟,各个人员的分工,资源获取,集中管控,需求中介,简易化操作工具,方便快速的发起攻击,已经成为黑产界最喜爱的方式之一。

    发送原始UDP封包 实现

    /*
    使用IP头包含选项
    
    创建原始套接字之后,再打开IP_HDRINCL 选项,即可在IP头中封装自己的协议,而不是仅仅使用系统预定义的协议。
    一般可以使用这种方法来发送UDP和TCP数据
    
    IP数据报格式:
    Version域:这4位指定了数据报的IP版本。对IPV4来说此域值为4.
    IHL(IP header length 的缩写):因为IP头长度不是固定的,所以需要这4位来确定IP数据报中数据部分的开始位置。大多数IP数据报不包含此选项,所以通常IP数据报有20个字节的头长度。
    Type of service(服务端类型,TOS):包含在IPV4头中,用来区分不同类型的IP数据报
    Total length:这是IP数据报的总长度,IP头加数据。这个域是16位(2字节)长,所以IP数据报大小的理论最大值是65535字节。然而数据报的长度很少有超过1500字节的。
    Identification域:用来表示已发送的IPV4封包。通常,系统每发送一次封包就增加一次这个值。
    Falgs和Fragment offset域:当IPV4分包被分割为较小的包时使用这2个域。DF代表不要分割(dont fragment),这是一个给路由器的命令,告诉他们不要分割此数据报,因为目标主机没有能力将它们恢复回来(例如:机器在启动时)。MF代表更多的分割(More Fragments)。
    Time to live(生存时间,TTL)域:包含TTL域是为了确保数据报不会永远呆在网络里打圈。每当数据报被路由器处理时,这个域就会减1,如果减到0,此数据报就会被丢弃。
    Protocol域:当IP数据报到达目的地时才使用此域,它指定了IP数据报的数据部分将要传递给哪个传输层协议,例如,值6表示数据部分要被传递给TCP,值17表示数据部分要被传递给UDP。
    Header checksum 域:头校验和帮助路由器检测接收到的IP数据报中的位错误。
    
    
    Source address 和 Destianation address域:指定此数据报的源IP地址和目的IP地址。
    Options域:选项域是一个长度可变的域,它包含了可选的信息。最大值是40字节。
    
    */
    
    #include "pch.h"
    #include <iostream>
    #include <WinSock2.h>
    #include <ws2ipdef.h>
    #include <process.h>
    #pragma warning(disable:4996)
    #pragma comment(lib,"ws2_32.lib")
    
    typedef struct _IPHeader {
    	u_char VIHL; //版本和首部长度 各占4bit
    	u_char ToS; //服务类型
    	u_short TotalLen; //总长度
    	u_short ID; //标识号
    	u_short Frag_Flags; //片偏移量
    	u_char TTL; //生存时间
    	u_char Protocol; //协议
    	u_short Checksum; //首部校验和
    	ULONG SrcIP;
    	ULONG DestIP;
    	//struct in_addr SrcIP; //源IP地址
    	//struct in_addr DestIP; //目的地址
    }IPHDR, *PIPHDR;
    
    
    /*UDP头*/
    typedef struct _udpheader {
    	USHORT sourcePort; //来源端口
    	USHORT destinationPort;//目标端口
    	USHORT len;//封包长度
    	USHORT checkSum;//校验和
    }UDP_HDR,*PUDP_HDR;
    
    
    /*
    因为UDP是不可靠协议,所以计算校验和是可选的。
    和IP的校验和不同,UDP的校验和除了包含UDP的字节外,还包含IP头中的几个域。
    计算UDP校验和所需的额外的域成为伪头。UDP校验和基于如下几个域:
    (针对ipv4)
    32位的源IP地址
    32位的目的IP地址
    8位0域
    8位协议与
    16位UDP长度
    16位源端口号
    16位目的端口号
    16位UDP长度
    16位UDP校验和(0)
    UDP静荷(payload)
    */
    
    //计算校验和
    WORD checkSum(WORD* wBuff, int nSize) {
    	DWORD dwSum = 0;;
    	//将数据以WORD为单位累加到wSum
    	while (nSize > 1) {
    		dwSum += *wBuff++;
    		nSize -= sizeof(WORD);
    	}
    
    	//若出现最后还剩一个字节继续与前面结果相加(也就是为奇数的情况)。
    	if (nSize) {
    		dwSum += *(BYTE*)wBuff++;
    	}
    	while (dwSum >> 16) { //如果有高16位,将一直与低16位相加
    		dwSum = (dwSum >> 16) + (dwSum & 0xFFFF);
    	}
    	//取反
    	return (WORD)(~dwSum);
    }
    
    
    
    //计算UDP校验和
    void ComputeUdpPseudoHeaderCchecksum(IPHDR * pIphdr, UDP_HDR * pUdphdr, char * payload, int payloadlen) {
    	char buff[1024] = { 0 };
    	char *ptr = buff;
    
    	int checksumlen = 0;
    	ULONG zero = 0;
    
    	//源IP地址
    	memcpy_s(ptr, sizeof(pIphdr->SrcIP),&pIphdr->SrcIP, sizeof(pIphdr->SrcIP));
    	ptr += sizeof(pIphdr->SrcIP);
    	checksumlen += sizeof(pIphdr->SrcIP);
    
    	//目的IP地址
    	memcpy_s(ptr, sizeof(pIphdr->DestIP), &pIphdr->DestIP, sizeof(pIphdr->DestIP));
    	ptr += sizeof(pIphdr->DestIP);
    	checksumlen += sizeof(pIphdr->DestIP);
    
    
    
    	//8位0
    	memcpy_s(ptr, 1, &zero, 1);
    	ptr += 1;
    	checksumlen += 1;
    
    
    
    	//协议
    	memcpy_s(ptr, sizeof(pIphdr->Protocol), &pIphdr->Protocol, sizeof(pIphdr->Protocol));
    	ptr += sizeof(pIphdr->Protocol);
    	checksumlen += sizeof(pIphdr->Protocol);
    
    
    
    
    
    
    	//UDP长度
    	memcpy_s(ptr, sizeof(pUdphdr->len), &pUdphdr->len, sizeof(pUdphdr->len));
    	ptr += sizeof(pUdphdr->len);
    	checksumlen += sizeof(pUdphdr->len);
    
    	//UDP源端口
    	memcpy_s(ptr, sizeof(pUdphdr->sourcePort), &pUdphdr->sourcePort, sizeof(pUdphdr->sourcePort));
    	ptr += sizeof(pUdphdr->sourcePort);
    	checksumlen += sizeof(pUdphdr->sourcePort);
    
    
    	//UDP目的端口
    	memcpy_s(ptr, sizeof(pUdphdr->destinationPort), &pUdphdr->destinationPort, sizeof(pUdphdr->destinationPort));
    	ptr += sizeof(pUdphdr->destinationPort);
    	checksumlen += sizeof(pUdphdr->destinationPort);
    
    	//又是UDP长度
    	memcpy_s(ptr, sizeof(pUdphdr->len), &pUdphdr->len, sizeof(pUdphdr->len));
    	ptr += sizeof(pUdphdr->len);
    	checksumlen += sizeof(pUdphdr->len);
    
    	//16位的UDP校验和,置为0
    	memcpy_s(ptr, sizeof(USHORT), &zero, sizeof(USHORT));
    	ptr += sizeof(USHORT);
    	checksumlen += sizeof(USHORT);
    
    	//净荷
    	memcpy_s(ptr, payloadlen, payload, payloadlen);
    	ptr += payloadlen;
    	checksumlen += payloadlen;
    
    	//补齐到下一个16位边界
    	for (int i = 0; i < payloadlen%2; i++) {
    		*ptr = 0;
    		ptr++;
    		checksumlen++;
    	}
    
    	pUdphdr->checkSum = checkSum((WORD*)buff, checksumlen);
    }
    
    //原始套接字 接收UDP封包
    unsigned int WINAPI recvThread(PVOID lpParam) {
    	SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    
    
    	SOCKADDR_IN sin;
    	sin.sin_family = AF_INET;
    	sin.sin_port = ntohs(4567);
    	sin.sin_addr.S_un.S_addr = inet_addr("192.168.0.5");
    
    	if (::bind(s, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) {
    		printf_s("绑定出错%d\n", GetLastError());
    		closesocket(s);
    		return 1;
    	}
    
    
    	char sz[256] = { 0 };
    	SOCKADDR_IN addrRemote;
    	int nLen = sizeof(addrRemote);
    	printf_s("准备接收\n");
    	int nRet = recvfrom(s, sz, 256, 0, (sockaddr*)&addrRemote, &nLen);
    	if (nRet > 0){
    		printf_s("来自ip:%s:%d,内容:%s \n", inet_ntoa(addrRemote.sin_addr), htons(addrRemote.sin_port), sz);
    	}
    	printf_s("接收线程结束");
    	return 0;
    }
    
    //原始套接字 发送udp封包
    int main()
    {
    	WSADATA wsaData;
    	WSAStartup(MAKEWORD(2, 2), &wsaData);
    
    	//先开始接收线程
    	_beginthreadex(NULL, 0, recvThread, NULL, 0, 0);
    
    	char Msg[] = "哈哈哈哈";
    	int nMsgLen = sizeof(Msg);
    
    	SOCKET sSend = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
    	if (sSend == INVALID_SOCKET) {
    		printf_s("请管理员运行\n");
    		return -1;
    	}
    
    	BOOL bIncl = TRUE;
    	if (setsockopt(sSend, IPPROTO_IP, IP_HDRINCL, (char*)&bIncl, sizeof(bIncl)) == SOCKET_ERROR) {
    		printf_s("设置失败 %d\n",WSAGetLastError());
    		closesocket(sSend);
    		return -1;
    	}
    
    
    	char buff[1024] = { 0 };
    
    	//ip头
    	IPHDR* pIphdr = (IPHDR*)buff;
    	pIphdr->VIHL = (4 << 4 | (sizeof(IPHDR) / sizeof(ULONG)));
    	pIphdr->TotalLen = htons(sizeof(IPHDR) + sizeof(UDP_HDR) + nMsgLen);
    	pIphdr->TTL = 128;
    	pIphdr->Protocol = IPPROTO_UDP;
    	pIphdr->SrcIP = inet_addr("192.168.0.5");//做测试 所以都是我
    	pIphdr->DestIP = inet_addr("192.168.0.5");
    	pIphdr->Checksum = checkSum((USHORT*)pIphdr, sizeof(IPHDR));
    
    
    	//UDP头
    	UDP_HDR* pUdphdr = (UDP_HDR*)(buff + sizeof(IPHDR));
    	pUdphdr->sourcePort = htons(8888);
    	pUdphdr->destinationPort = htons(4567);
    	pUdphdr->len = htons(sizeof(UDP_HDR) + nMsgLen);
    	pUdphdr->checkSum = 0;
    	char* pPayload = buff + sizeof(IPHDR) + sizeof(UDP_HDR);
    	memcpy_s(pPayload, 1024 - sizeof(IPHDR) - sizeof(UDP_HDR), Msg, nMsgLen);
    	ComputeUdpPseudoHeaderCchecksum(pIphdr, pUdphdr, pPayload, nMsgLen);
    	
    
    	//设置目的地址 要和UDP头中相同
    	SOCKADDR_IN sin;
    	sin.sin_family = AF_INET;
    	sin.sin_port = htons(4567);
    	sin.sin_addr.S_un.S_addr = inet_addr("192.168.0.5");
    
    	int nRet = sendto(sSend, buff, nMsgLen + sizeof(IPHDR) + sizeof(UDP_HDR), 0, (sockaddr*)&sin, sizeof(sin));
    	if (nRet == SOCKET_ERROR) {
    		printf_s("发送失败\n");
    	}
    	printf_s("发送完成\n");
    	Sleep(10000);
    	closesocket(sSend);
    	WSACleanup();
    }
    
    
    更多相关内容
  • 简单地说:中间件并没有实现TCP的标准,很多情况下只监控单向的报文,并根据数据包进行响应,其响应数据包较大,导致存在反射放大攻击。 这留下了一些问题:触发这些中间件的最佳方式是什么,我们可以从中获得哪些...

    看到“碳基体”的微博分享了这篇文章,正好感兴趣就看了一下做了一个翻译,主要是在google机翻基础上修改的,如有不恰当指出欢迎指正。

    简介

    这篇文章发表于USENIX SEC 2021,并且获得了USENIX SEC 2021 杰出论文奖。

    主要贡献:

    • 我们发现了一种新方法,攻击者可以通过滥用中间件和审查基础设施,通过 TCP 发起反射拒绝服务 (DoS) 放大攻击。与现有的基于 UDP 的攻击相比,这些攻击可以产生更多数量级的放大。
    • 这是第一次超越发送 SYN 数据包的 TCP 反射放大攻击,也是第一次基于 HTTP 的反射放大攻击。
    • 我们在野外发现了多种类型的中间件错误配置,这些错误配置可能会导致攻击者在技术上无限放大:通过发送单个数据包,攻击者可以向受害者发起源源不断的数据包流。

    总的来说,我们的结果表明审查基础设施对广阔的互联网构成的威胁比以前了解的更大。即使是在没有审查的民族国家中良性部署的防火墙和入侵防御系统,也可以使用我们发现的技术进行武器化。

    什么是反射放大攻击?

    反射放大攻击是 DoS 攻击者武器库中的强大工具。攻击者欺骗/伪造一个从受害者到开放服务器(例如,开放 DNS 解析服务器)的请求,服务器将响应发给受害者。如果响应大于欺骗/伪造的请求,服务器在 DoS 攻击中有效地放大了攻击者的带宽。

    简单地说:服务器向受害者发送的响应报文比攻击者向服务器发送的伪造的报文大

    在这里插入图片描述

    武器化中间件

    现今大多数 DoS 放大都是基于 UDP 的。这样做的原因是 TCP 需要 3 次握手,这使欺骗攻击变得复杂。每个 TCP 连接都以客户端发送 SYN 数据包开始,服务器以 SYN+ACK 响应,客户端以 ACK 数据包完成握手。3 次握手保护 TCP 应用程序免于成为放大器,因为如果攻击者发送带有欺骗性的源 IP 地址的 SYN 数据包,SYN+ACK 将发送给受害者,并且攻击者永远不会获得所需的 SYN+ACK 中包含的关键信息,来完成 3 次握手。在没有收到 SYN+ACK 的情况下,攻击者无法代表受害者发出有效请求。

    简单地说:TCP的情况下攻击者没有办法收到服务器响应的握手第二阶段报文SYN+ACK,也就缺少了对该报文进行回应的ACK所需的信息,无法建立TCP连接

    在这里插入图片描述
    3 次握手可有效防止利用 TCP 进行流量放大。但在这项工作中,我们发现大量网络中间件不符合 TCP 标准,可以被滥用来执行攻击。特别是,我们发现许多审查中间件会响应带有大块页面的欺骗审查请求,即使没有有效的 TCP 连接或握手。这些中间件可以被武器化以进行 DoS 放大攻击。

    中间件通常在设计上不符合 TCP 标准:许多中间件尝试处理非对称路由,其中中间件只能看到连接中的一个方向的数据包(例如,客户端到服务器)。但是这个特性让他们容易受到攻击:如果中间件注入的数据仅基于连接的一个方向,攻击者就可以欺骗 TCP 3 次握手的一个方向,并说服中间件存在有效连接。

    简单地说:中间件并没有实现TCP的标准,很多情况下只监控单向的报文,并根据数据包进行响应,其响应数据包较大,导致存在反射放大攻击。

    在这里插入图片描述在这里插入图片描述
    这留下了一些问题:触发这些中间件的最佳方式是什么,我们可以从中获得哪些放大因子?

    发现可以放大的中间件

    我们的目标是发现攻击者可以发送的数据包序列,以欺骗中间件注入响应,而无需完成真正的 3 次握手

    请注意,此目标不符合 TCP 标准。我们正在利用实现中的弱点,而不是 TCP 协议本身的设计。这意味着仅研究 TCP 协议是不够的,我们必须研究真正的中间件 TCP 实现。这提出了一个挑战:世界上有太多种类的中间件供我们购买,即使我们可以购买,支持民族国家审查基础设施的中间件通常也不会出售。

    因此,我们使用我们的工具 Geneva 来研究在野外审查中间件。

    为了找到要研究的中间件,我们使用了 CensoredPlanet 的 Quack 工具发布的公共数据。Quack 是一种扫描器,它在审查中间件的路径上查找 IP 地址。我们使用这些数据来识别位于世界各地的 184 个样本中间件,这些中间件通过注入块页面来执行 HTTP 审查。

    Geneva (Genetic Evasion) 是我们设计的一种遗传算法,旨在自动发现逃避审查的新方法,但从本质上讲,Geneva 是一个数据包级网络 Fuzzer。我们修改了 Geneva 的 fitness function,以奖励它使引发的响应尽可能大,然后针对所有 184 个中间件训练 Geneva。

    简单地说:奖励可以引发尽可能大的响应的情况,训练数据包级别的网络Fuzzer,Geneva

    在这里插入图片描述
    我们发现了 5 个数据包序列,这些数据包序列触发了中间件的放大响应。其中每一个都包含一个格式良好的 HTTP GET 请求,用于某些被中间件禁止的域(禁止请求)

    • SYN 包(带禁止请求)
    • PSH 数据包
    • PSH+ACK 包
    • SYN 数据包,后跟包含禁止请求的 PSH 数据包
    • SYN 数据包,后跟包含禁止请求的 PSH+ACK 数据包

    我们还发现了另外 5 个变种,它们进一步增加了一小部分中间件的放大率;攻击者可以将这些用于特定的中间件。有关这些修改的更多详细信息,请参阅我们的论文。

    为了触发这些中间件的响应,我们需要一个被每个中间件审查或禁止的域,但大多数审查中间件使用不同的阻止列表,因此很难找到一个域来触发每个中间件的阻止页面。 我们分析了 Quack 数据集以找到触发最多中间件响应的 5 个域,这些域恰好是五个不同的类型:

    • www.youporn.com(色情)
    • www.roxypalace.com(赌博)
    • plus.google.com(社交媒体)
    • www.bittorrent.com(文件共享)
    • www.survive.org.uk(性健康/教育)

    我们还使用了 example.com 和 没有域 作为对照实验。

    寻找放大器

    我们扫描了整个 IPv4 因特网以测量有多少 IP 地址允许反射放大。 为此,我们修改了 zmap 扫描器以构建由 Geneva 识别的所有五个数据包序列。

    我们总共扫描了整个 IPv4 因特网 35 次(5 个数据包序列 × 7 个测试域)。我们测量了我们得到的响应,以计算我们从每个 IP 地址得到的放大系数。

    我们的 zmap 版本是开源的,可在此处获得。

    结果

    在这里插入图片描述

    上图是我们发现的攻击类型。

    粗箭头表示放大;红色表示触发放大的数据包。

    a. 正常 TCP 反射,其中攻击者发送单个 SYN 数据包以引出 SYN+ACK。
    b. 中间件反射,其中攻击者发送数据包序列以触发阻止页面或审查响应。
    c. 组合目的地和中间件反射,其中攻击者可以从中间件和最终目的地引出响应。
    d. 路由环路反射,其中触发数据包被困在路由环路中。
    e. 受害者持续反射,其中受害者的默认响应会触发来自中间件或目的地的额外数据包。

    我们发现无限放大是由** (d) 无法减少 TTL 的路由循环 (e) 受害者持续反射引起的**。

    回想一下,我们正在寻找中间件中 TCP 实现的弱点,而不是 TCP 协议本身。 此外,每个中间件都有自己的注入策略和阻止页面:这意味着这次攻击没有单一的放大系数,因为我们触发的每个中间件都不同!

    相反,我们可以查看响应大小的分布,以了解攻击者可用的放大系数。

    在这里插入图片描述

    上图是我们在所有 35 次扫描中为每个 IP 地址收到的最大放大系数的图表,按 x 轴上的放大系数排序(放大倍数大的 IP 排在前)。 在 y 轴上,您可以看到 IP 地址提供的放大系数。

    在此图表上,您可以看到放大系数的范围很大 - 从超过 1亿 到小于 1。

    无限放大

    接下来,我们将检查上图 top 的 IP 地址,我们可以看到放大系数在 100w 到 1亿 之间。这些 IP 地址是我们的超级放大器,提供了巨大的放大系数。事实上,这些放大系数可能被低估了。这些数字来自我们的扫描停止收集数据的地方,而不是 IP 地址停止向我们发送数据的地方。这里发生了什么?

    这是我们发现技术上无限放大系数的地方。放大系数的计算方法是放大器接收的字节数除以发送的字节数。我们发现放大器一旦被攻击者的单个数据包序列触发,就会向受害者发送无休止的数据包流。在我们的测试中,其中一些数据包流持续了数天,通常是放大器链路可以提供的全带宽。

    我们发现了这种无限放大的两个原因:路由环路和受害者的持续放大。

    路由环路

    在这里插入图片描述

    当数据包在从一个 IP 地址路由到另一个 IP 地址时在穿越环路时卡住时,两个 IP 地址之间就会发生路由环路。包含审查中间件的路由循环为攻击者提供了新的好处:每次触发数据包环绕路由循环时,它们都会重新触发审查中间件

    数据包在网络中存活的跳数通常由 IP 数据包中的 TTL 字段(生存时间)调节:每次数据包从一个路由器传递到下一个路由器时,它的 TTL 值都会递减.如果 TTL 达到 0,则丢弃数据包。最大 TTL 值为 255:这意味着可以将触发序列发送到放大路由循环的攻击者可以免费获得额外的大约 250 倍的放大。

    比普通路由循环更危险的是无限路由循环。如果是一条不递减 TTL 值的循环路由路径,导致数据包永远循环(或直到发生随机数据包丢弃),则会发生无限路由循环。我们发现了少量无限路由循环,它们穿越了提供无限放大的审查基础设施(特别是在中国和俄罗斯)。

    受害者的持续放大

    在这里插入图片描述

    我们发现无限放大的第二个原因是受害者持续循环。当受害者收到意外的 TCP 数据包时,正确的客户端响应是使用 RST 数据包进行响应。我们发现少数放大器在处理来自受害者的任何额外数据包时会重新发送它们的块页面 - 包括 RST。 这会产生一个无限的数据包风暴:攻击者向受害者引出单个块页面,这会导致受害者发出 RST,从而导致放大器产生新的块页面,从而导致受害者发出 RST,不断循环

    由于两个原因,受害者持续放大的情况特别危险。首先,受害者的默认行为支持对自身的攻击。其次,这种攻击会导致受害者在淹没下行链路的同时淹没自己的上行链路。

    这些真的是中间件吗?

    是的,我们的结果表明如此。为了测试这一点,我们进行了一个 TTL 限制实验:

    我们选取了前 100 万个放大器,跟踪路由到它们以确定它们相距多少跳,然后重新发送我们的探针并降低 TTL 数。这确保了我们的探测不会到达目标主机,但可能会穿过审查中间件,所以如果我们仍然看到响应,我们就知道它们是由中间件生成的。我们确认前 100 万个放大器中约有 83% 是由中间件引起的。

    对民族国家的影响是什么?

    我们发现世界各国的民族国家审查基础设施也可以被武器化。这些民族国家中的大多数都是弱放大器(例如,中国的防火墙仅提供大约 1.5 倍的放大),但其中一些提供更具破坏性的放大,例如沙特阿拉伯(大约 20 倍的放大)。

    民族国家的真正挑战在于,它们的审查基础设施通常会处理所有进出该国的流量。 这意味着与其他放大攻击不同,受害者接收到的流量的源 IP 地址是放大器本身,中间盒后面的每个 IP 地址都可以作为流量源出现。 换句话说:放大的民族国家内的每个 IP 地址都可以是一个放大器

    攻击危害

    攻击者可以无限放大会造成多少伤害? 在这种情况下,作为指标的“放大系数”开始失效。 大多数时候,当人们询问放大系数时,他们是在问攻击者可以用给定的攻击向量造成多大的伤害。如果攻击者可以在技术上引发无限放大系数,但在链路完全饱和之前仅达到 64 kbps,则攻击者可以造成的破坏量是有限的

    **一个更好的问题:攻击者可以通过这次攻击获得的最大带宽是多少?**不幸的是,这是最难从伦理学上研究的。为了测量给定放大器的最大容量,我们必须使每个网络的链路完全饱和,这可能对该网络的用户产生真正的负面影响。目前,攻击者可从这次攻击中获得的真正能力尚不清楚。

    防御

    防御这种攻击是困难的。 传入的大量流量来自 TCP 端口 80(正常 HTTP 流量),响应通常是格式良好的 HTTP 响应。

    由于中间件会欺骗它们生成的流量的 IP 地址,这意味着攻击者可以将反射流量的源 IP 地址设置为中间件后面的任何 IP 地址。 对于某些网络,这是少量 IP 地址,但如果攻击者使用国家审查基础设施,则攻击者可以使攻击流量来自该国家/地区的任何 IP 地址。 这使得受害者很难在攻击期间丢弃来自违规 IP 地址的流量

    负责任的披露

    2020 年 9 月,我们与多个国家级 CERT(计算机应急响应小组)、DDoS 缓解服务和防火墙制造商联系并共享了我们论文的高级副本。我们还与多个 DDoS 缓解服务和美国 CERT 进行了进一步的会议,以进一步讨论缓解问题,并一直与 DDoS 缓解服务保持沟通。

    不幸的是,我们能做的只有这么多。完全解决这个问题将需要各国投资于可能削弱其审查基础设施的变革,我们认为这不太可能发生

    FAQ

    1. 谁是脆弱的?我是否需要生活在受审查的国家才能成为受害者?

      不幸的是,我们发现这种攻击几乎可以针对任何人,无论您是否生活在审查制度中。

    2. 谁容易被武器化?

      大多数民族国家审查基础设施目前都很脆弱,许多现成的商业防火墙也是如此。我们的研究旨在提供此问题的全局视图,而不是针对单个防火墙类型,因此我们尚不知道易受此攻击的活跃使用的防火墙的完整列表。

    3. 攻击者可以通过这种攻击获得多大的放大系数?

      我们正在利用中间件对 TCP 协议的实现,这与大多数利用协议规范本身的先前攻击不同。因此,我们不能只为我们的放大因子指定一个数字:它与每个中间件都不同!

      但总的来说,我们发现数十万个 IP 地址超过了 DNS 和 NTP 的放大系数,其中数百个提供的放大系数大于著名的 memcached (51,000x)。

    4. 您发现的最高放大系数是多少?

      从技术上讲,无限。放大系数的计算方法是放大器接收的字节数除以发送的字节数。我们发现放大器一旦被攻击者的单个数据包序列触发,就会向受害者发送无休止的数据包流。在我们的测试中,其中一些数据包流持续了数天,而另一些则在其链路可以提供的全部带宽下。

      然而,在这种情况下,作为度量的“放大系数”开始失效。大多数时候,当人们询问放大系数时,他们是在问攻击者可以用给定的攻击向量造成多大的伤害。如果攻击者可以引发无限放大系数,但仅以 64 kbps 的最大速度,攻击者可以造成的破坏量是有限的。

      一个更好的问题:攻击者可以通过这次攻击获得的最大带宽是多少?不幸的是,这是最难从伦理学上研究的。为了测量给定放大器的最大容量,我们必须使每个网络的链路完全饱和,这可能对该网络的用户产生真正的负面影响。目前,攻击者可从这次攻击中获得的真正能力尚不清楚。

    5. 谁需要解决这个问题?

      有两个角度可以解决这个问题:防止攻击者欺骗他们的源 IP 地址和保护中间件不被错误地注入流量。不幸的是,多年来一直在努力完全防止源 IP 地址欺骗。彻底解决这个问题将需要每个易受攻击的防火墙制造商更新他们的中间件,以及每个部署了易受攻击的中间件以升级其基础设施的组织和审查国家。

      不幸的是,这个问题不太可能很快得到完全解决。

    6. 我应该担心吗?

      大多数人可能不需要担心这种攻击,但我们一直在使用 DDoS 缓解服务,因此如果攻击在野外使用,他们可以做好准备。

    7. 这种攻击是否在野外被发现?

      还没有,据我们所知。我们正在使用不同的 DDoS 缓解服务来监控它是否被使用。

    8. 这与之前的放大攻击相比如何?

      我们的结果表明,这种攻击至少与现有最大的基于 UDP 的放大攻击一样危险。我们发现数百个带有中间盒的 IP 地址提供的放大系数大于 memcached (51,000x),以及数十万个提供放大系数大于 DNS 和 NTP 的 IP 地址。

    9. 是否负责任地披露了这次攻击?

      是的,但我们的能力是有限的。 2020 年 9 月,我们与多个国家级 CERT、DDoS 缓解服务和防火墙制造商联系并共享了我们论文的副本。我们还与多个 DDoS 缓解服务和美国 CERT 会议,以进一步讨论缓解问题。

      不幸的是,完全解决这个问题将需要各国投资于可能削弱审查基础设施的变革,我们认为这不太可能发生。

    10. 为什么你的攻击没有 logo 或花哨的名字?

      如果您有任何建议,请给我们留言!

    参考

    Weaponizing Middleboxes for TCP Reflected Amplification
    寻找可用的放大器的源码
    usenix摘要
    PDF
    PDF
    PPT
    Talk
    Weaponizing Censorship Infrastructure for Availability Attacks

    展开全文
  • 摘 要:提出了一种利用NTP反射放大攻击的特点,通过对中国大陆开放公共NTP服务的主机定期发起主动探测(执行monlist指令),利用返回信息对全球范围NTP反射类DRDoS攻击事件进行长期追踪观察和统计分析。...
  • 分布式拒绝服务攻击(Distributed Denial of Service)简称DDoS,亦称为阻断攻击或洪水攻击,是目前互联网最常见的一种攻击形式。DDoS攻击通常通过来自大量受感染的计算机(即僵尸网络)的流量,对目标网站或整个...

    本文作者为易盾实验室工程师

    一、DDoS攻击简介

    分布式拒绝服务攻击(Distributed Denial of Service)简称DDoS,亦称为阻断攻击或洪水攻击,是目前互联网最常见的一种攻击形式。DDoS攻击通常通过来自大量受感染的计算机(即僵尸网络)的流量,对目标网站或整个网络进行带宽或资源消耗,使目标无法处理大量数据包,导致服务中断或停止。

    UDP是网络通信的标准协议,由于UDP数据包是无链接状态的服务,相对TCP而言,存在更少的错误检查和验证。攻击者可以更小代价的利用UDP 协议特性攻击目标主机,使其无法响应正确请求,甚至会导致线路拥塞。而UDP反射放大攻击,更是近几年最火热,被利用最多的攻击方式。成本之低,放大倍数之高,使各企业闻D色变。

    二、UDP反射放大攻击原理

    很多协议在响应包处理时,要远大于请求包,一个字节的请求十个字的响应,十个字节的请求一百个字的响应,这就是UDP反射放大攻击最根本的原理。以下将Memcached服务作为实例进一步介绍。

    Memcached是一款开源的高性能分布式内存对象缓存服务,通过缓存来降低对数据库的访问请求,加快应用程序的响应效率,可以应用于各类缓存需求中。通过查询缓存数据库,直接返回访问请求,降低对数据库的访问次数。
    在这里插入图片描述
    也正是这种服务机制,使攻击者有了可乘之机,借用正常服务达到攻击的目的。Memcached支持UDP协议的访问请求,并且默认也会将UDP端口11211对外开放,因此攻击者只需要通过快速的端口扫描,便可以收集到全球大量没有限制的Memcached服务器,随后攻击者只需要向Memcached服务器的UDP:11211端口,发送伪造为源IP的攻击目标IP地址的特定指定请求数据包,服务器在收到该数据包后,会将返回数据发送至攻击目标的IP地址。
    在这里插入图片描述
    黑客攻击者如果利用恶意软件的传播,来控制大量僵尸网络,再利用大量僵尸网络作为请求源,向Memcached服务器发起请求,并伪造数据包和攻击目标IP,则该返回的数据包将成指数级上升,比原始请求数据包扩大几百至几万倍,从而通过反射加放大的形式,使攻击目标拥塞,无法正常提供服务。以达到低成本化,高隐蔽性的攻击手段。
    在这里插入图片描述三、常见UDP反射类型

    除了常见的DNS,NTP等UDP反射放大攻击类型,目前还有其他十多种UDP协议,均可以用于反射放大攻击,如:SSDP、QOTD、SNMP、CHARGEN、LDAP、MEMCACHE、WS-DISCOVERY 等。放大倍数从几倍到几万倍,其中部分协议今天仍然非常流行。

    此处整理了部分常见UDP反射放大协议,理论放大倍数和实际常见到的放大倍数作为对比,看看谁的放大威力更强。
    在这里插入图片描述
    由此可见,这种以小博大,四两拨千斤的效果使各企业异常头疼的,部分协议的UDP反射放大倍数,已经超越了单纯依靠技术可以防护的阶段,还需要投入大量的物料资源给予支持。

    四、常见防护方式

    针对此类强力的DDoS攻击方式,有哪些实用又性价比超高的防护手段?

    因篇幅有限,下面来介绍比较好落地的防护流程,和几个简单有效的算法措施,可根据业务情况方便的开关增减,和闭环迭代,做到事前预防部署,事中策略对抗,事后分析总结。
    在这里插入图片描述
    通告类:关注各个设备和安全厂商,cncert发布的最新安全通告,及时更新针对性防护策略;

    目标IP+源端口限速:可以用于控制反射性攻击,且可以预防未知的反射协议;

    源IP限速:单个请求源IP的整体控制;

    目标IP限速:单个攻击目标IP的整体可用性控制;

    源IP+源端口限速:可以降低部分大客户源IP在访问请求时的副作用影响;

    目标IP+目标端口限速:适用于目标IP端口开发范围较大时,可提高业务端口可用率,降低目标整体影响;

    包文长度学习:通过对业务历史包文数据的统计学习,可以描绘出正常业务包大小的正态分布图,由此可以清晰识别出构造的超大或超小包攻击包文;

    偏移字节数学习:检查学习各个UDP包文中相同偏移未知所包含的相同内容,并将此内容提出作为指纹特征,根据此指纹特征,可以判断UDP包文的丢弃或放行动作;

    源端口波动限制:通过对业务正常的流量中,已知可被利用的UDP反射源端口进行统计,对源端口的数量执行监控,在这类源端口出现快速突增的波动时,将该源端口临时封禁,待源端口数量恢复后则解除封禁,可以大大降低攻击造成的影响性;

    服务白名单:对于已知的UDP反射协议,如DNS服务器的IP地址添加为白名单,除此之外,其他源IP的53端口请求包,全部封禁,也可以大大减少反射可用点,使UDP反射放大攻击的影响面降低;

    地理位置过滤器:针对业务用户的地理位置特性,在遇到UDP反射放大攻击时,可优先从用户量最少地理位置的源IP进行封禁阻断,直到将异常地理位置的源IP请求全部封禁掉,使流量降至服务器可处理的范围之内,或可有效减轻干扰流量,便于其他算法进一步处理;

    扩容带宽服务器:增强带宽和服务器的处理能力,增加业务流量和处理极限的可容忍波动范围,可以减轻在防护过程中造成的影响;

    改进高可用架构:同上,可以增加业务流量和处理极限的可容忍波动范围,可增加分布式节点,可用性自动调度等机制,以保障有节点中断时快速切换到可用节点。

    五、总结

    UDP反射放大攻击,是一种具有超大攻击威力,且成本低廉,难以追踪的DDoS攻击方式。如今的DDoS黑产链已经相当的完善和成熟,各个人员的分工,资源获取,集中管控,需求中介,简易化操作工具,方便快速的发起攻击,已经成为黑产界最喜爱的方式之一;

    如今的DDoS攻击越来越普遍,每天都有各式各样的攻击不断在各处上演,攻击的流量也已经从G级别上升到T级别,一顿饭的价格,一支烟的时间,就可以给企业造成难以估计的经济损失和品牌受损。尤其是游戏类,金融类,电商类,都属于DDoS攻击的重灾区,如果能够充分借助大数据,人工智能技术,以及各大运营商,安全服务厂商的支持,和更有效的预警和防护处置方案,将会为企业的安全提供最有力的安全协同保障。

    展开全文
  • 浅析 DNS 反射放大攻击

    千次阅读 2019-07-11 12:00:42
    DNS 反射放大攻击分析前阵子业务上碰到了 DDOS 攻击,正好是 DNS 反射型的,之前只是听过,没自己处理过,仔细学习了一番之后做点记录。简介DNS 反射放大攻击主要...

    640?wx_fmt=jpeg


    DNS 反射放大攻击分析

    前阵子业务上碰到了 DDOS 攻击,正好是 DNS 反射型的,之前只是听过,没自己处理过,仔细学习了一番之后做点记录。


    简介


    DNS 反射放大攻击主要是利用 DNS 回复包比请求包大的特点,放大流量,伪造请求包的源 IP 地址为受害者 IP,将应答包的流量引入受害的服务器。

    简单对比下正常的 DNS 查询和攻击者的攻击方式:

    正常 DNS 查询: 源 IP 地址 -----DNS 查询----> DNS 服务器 -----DNS 回复包----> 源 IP 地址

    DNS 攻击: 伪造 IP 地址 -----DNS 查询----> DNS 服务器 -----DNS 回复包----> 伪造的 IP 地址(攻击目标)

    分析

    从服务器上抓了一些攻击包,根据这些数据包可以来看看这种攻击都是什么特点。

    • 全部是大量的 DNS 响应请求( Response 请求)

    640?wx_fmt=jpeg

    • 通常里面包含一些不存在或者生僻的域名,经过循环查询从而放大 DNS 流量

    640?wx_fmt=jpeg

    • 会将将 OPT RR 字段中的 UDP 报文大小设置为很大的值(如 4096)

    640?wx_fmt=jpeg

    通过这样放大了攻击流量。发送的 DNS 查询请求数据包大小一般为 60 字节左右,而查询返回结果的数据包大小通常为 3000 字节以上,因此,使用该方式进行放大攻击能够达到 50 倍以上的放大效果。

    • 大量的流量都来自正常的 DNS 服务器

    攻击者通过伪造 IP 向正常的 DNS 服务器发送这些恶意的查询请求,将流量引入受害者的服务器,受害者查不到攻击者的真实 IP。

    解决方案

    1. 如果没有必要可以关闭 DNS 服务(这完全是废话,哈哈)

    2. 如果有 DNS 服务,做好响应限制,DNS 服务不应对互联网上的域名解析服务,而只响公司内部网络 DNS 解析请求。

    3. 限制 DNS 响应数据包大小的阈值,直接丢弃超大的响应数据包。


    尾巴


    希望以后不要碰上这种攻击,双休还得加班修复。以上全部!

    来源:Brick713的小黑屋
    原文:http://t.cn/AiNKbVTa
    题图:
    来自谷歌图片搜索 
    版权:
    本文版权归原作者所有
    投稿:欢迎投稿,投稿邮箱: editor@hi-linux.com

    640?wx_fmt=gif


    推荐阅读


    640?wx_fmt=gif

    640?wx_fmt=png640?wx_fmt=gif

    展开全文
  • 二、攻击原理解析 DNS反射放大攻击是一种典型的分布式拒绝服务攻击,是众多反射放大攻击中的一种,攻击者利用了DNS的多种脆弱特性,发动互联网上的僵尸网络“肉鸡”(受黑客远程控制的电脑等),通过将DNS报文的源...
  • 文档名称DDos反射放大攻击全球探测分析 DDoS反射放大攻击全球探测分析 第五版 知道创宇404实验室 V 5.0 2019-05-06 1 北京知道创宇信息技术股份有限公司 第 页 文档名称DDos反射放大攻击全球探测分析 1.更新情况 ...
  • NTP反射放大攻击(一)知识点扫盲

    千次阅读 2019-03-19 14:50:53
    NTP反射放大攻击知识点扫盲 什么是NTP服务 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议 在计算机的世界里,时间非常地重要,例如对于火箭发射这种科研活动,对时间的统一...
  • 实验测试了许多域名,最终效果最好的放大了仅仅10倍。 如果有放大倍数更高的方式,请留言告诉我。 测试命令为: dig @NDS服务器 any 域名 实验: 通过dig提交 dig @114.114.114.114 any hp.com
  • NTP反射放大攻击(五)防御

    千次阅读 2019-03-19 17:19:28
    如果防御NTP反射放大攻击 查看ntp服务器版本,升级到4.2.7p5以上 ntpd -v 关闭现在 NTP 服务器的 monlist 功能,在ntp.conf配置文件末尾增加disable monitor选项 关闭服务器 udp 123端口 firewall-cmd --...
  • NTP反射放大攻击(四)开炮!

    千次阅读 2019-03-19 15:51:43
    攻击者 安装python2.7 这个不用说 2.安装scapy 从网址下载:http://www.secdev.org/projects/scapy/files/scapy-2.3.1.zip ,也可以用wget scapy.net cp ~/Downloads/scapy-2.3.1.zip /root unzip scapy-2.3.1.zip...
  • 在2017年8月3日到2017年8月6日期间ZoomEye网络空间探测引擎对全网进行第一轮的探测,统计可被利用进行DDoS反射放大攻击的主机数,发布了《DDoS反射放大攻击全球探测分析-第一版》,之后在2017年8月11日到2017年8月13...
  • 2月28日,Memcache服务器被曝出存在UDP反射放大攻击漏洞。攻击者可利用这个漏洞来发起大规模的DDoS攻击,从而影响网络正常运行。漏洞的形成原因为Memcache 服务器UDP 协议支持的方式不安全、默认配置中将 UDP 端口...
  • 图1 安全公告 6月29日,百度安全智云盾团队首次定位到一种反射源名称为SmartZone的新型反射放大攻击。经过安全专家进一步分析,确认是Ruckus公司的SmartZone系列设备存在安全风险。通知厂商后,他们积极组织技术...
  • NTP DDoS反射放大攻击实验

    千次阅读 2020-06-08 17:50:55
    NTP:Network Time Protocol 网络时间协议(NTP)是一种通过因特网服务于计算机时钟的同步时间协议。它提供了一种同步时间机制,能...NTP 反射放大攻击 无论是基于 DNS 还是基于 NTP,其最终都是基于 UDP 协议的。在
  • DNS反射放大攻击分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E5%8D%95%E5%88%86%E6%9E%90/ 简介 DNS反射放大攻击主要是利用DNS回复包比请求包大的特点,放大...
  • https://cloud.tencent.com/developer/article/1463080
  • 转自:https://www.us-cert.gov/ncas/alerts/TA14-017A ProtocolBandwidth Amplification Factor DNS 28 to 54 NTP 556.9 SNMPv2 6.3 NetBIOS 3.8 ...CharGEN...
  • NTP反射放大攻击场景搭建 原理 攻击者冒充受害者(NTP客户端)的ip地址,向NTP服务器发送请求消息(很小),ntp服务器收到消息后向受害者返回响应数据包(很大) 安装NTP服务器 一般情况下,选择基本的桌面版安装...
  • 反射攻击放大攻击 与DDoS不同,中间系统是未被感染的。反射/放大攻击利用网络系统正常的功能。 攻击程序: 攻击者送出一个伪造来源IP地址的封包给在某一个服务器上执行的服务。 服务器回复一个封包给...
  • 反射放大攻击是一种具有巨大攻击力的DDoS攻击方式。攻击者只需要付出少量的代价,即可对需要攻击的目标产生巨大的流量,对网络带宽资源(网络层)、连接资源(传输层)和计算机资源(应用层)造成巨大的压力。2016年...
  • NTP反射放大攻击是一种分布式拒绝服务(DDoS)攻击,其中攻击者利用网络时间协议(NTP)服务器功能,以便用一定数量的UDP流量压倒目标网络或服务器,使常规流量无法访问目标及其周围的基础设施。 标准NTP 服务提供...
  • 记一次ntp反射放大ddos攻击

    千次阅读 2018-03-27 17:09:00
    后续解决办法:通过跳板登录生产服务器,通过抓包可看出是NTP反射放大攻击,直接关闭ntp服务,如果需要用到ntp服务,之后再在安全组和防火墙设置屏蔽规则,拦截目的或者源端口为相应服务端口(123)...
  • TFTP反射放大攻击浅析

    2018-03-08 11:06:38
    Larry · 2016/03/23 10:300x00 前言经由@杀戮提示,让我看看softpedia上的这篇报道,咱就来研究一下文中的使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)进行反射型DDOS攻击。在报道的最后提到了...
  • 反射放大攻击是一种具有巨大攻击力的DDoS攻击方式。攻击者只需要付出少量的代价,即可对需要攻击的目标产生巨大的流量,对网络带宽资源(网络层)、连接资源(传输层)和计算机资源(应用层)造成巨大的压力。2016年...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,645
精华内容 1,058
关键字:

反射放大攻击