服务器防护ddos(服务器防护系统)

工具https://github . com/poor nigga/tfn2k . git https://github . com/cquechen/falcon . git//TFN2K网页版https://github.com/Ginjachris/Pentmenu.git https://github

本文最后更新时间:  2023-02-28 20:35:49

工具

https://github . com/poor nigga/tfn2k . git https://github . com/cquechen/falcon . git//TFN2K网页版https://github.com/Ginjachris/Pentmenu.git https://github.com/ offensive python/Saddam . git https://github . com/649/mem crashed-DDoS-exploit pcpsin FLOOD

SYN FLOOD攻击是在TCP三次握手过程中产生的。通过发送大量带有SYN标志位的伪造TCP消息,攻击者与目标主机建立了许多虚假的半开连接。在服务器返回SYN+ACK包后,攻击者没有响应,也就是没有向服务器返回ACK包,这样服务器就会一直等到超时。这种攻击会使目标服务器的连接资源耗尽,链接阻塞,从而达到拒绝服务的目的。

ACK洪水

ACK泛洪攻击是使用TCP三次握手过程。可以分为两种。第一种:攻击者伪造大量SYN+ACK数据包,发送给目标主机。每次目标主机收到SYN+ACK包时,它都会检查自己的TCP连接表,看是否已经与ACK的发送方建立了连接。如果是,它将发送ACK包来完成TCP连接;如果没有,它将发送ACK+RST断开连接。但是在查询的过程中,会消耗一些cpu的计算资源。如果瞬间收到大量的SYN+ACK包,会消耗服务器大量的cpu资源,无法建立正常连接或增加延迟,甚至会导致服务器瘫痪、崩溃。

其次,利用TCP三次握手的ACK+SYN响应,攻击者向不同的服务器发送大量的SYN请求。这些SYN请求包的源IP是受害主机的IP,这样就会有大量的SYN+ACK响应包发送到受害主机,从而占用目标网络带宽资源,造成拒绝服务。

TCP RST FloodTCP协议头部有一个标志位称为“RST”位,正常的数据包中该位为0,一旦该位设置为1,则接收该数据包的主机将立即断开TCP会话。TCP Reset攻击中,攻击者可以伪造TCP连接其中的一方给另一方发送带有RST位的包来断开TCP连接,但是要确保这个数据包的源IP地址、源端口号、目的IP地址、目的端口号、序列号等特征符合已有TCP连接的特征。

TCP RST泛洪TCP协议报头有一个标志位,称为“RST”位,在正常数据包中为0。一旦该位设置为1,接收该数据包的主机将立即断开TCP会话。在TCP Reset攻击中,攻击者可以假冒TCP连接的一方向另一方发送一个带有RST位的数据包来断开TCP连接,但要确保这个数据包的源IP地址、源端口号、目的IP地址、目的端口号、序列号等特征符合现有TCP连接的特征。

UDP洪水

与TCP不同,UDP是一种无连接协议。在使用UDP协议传输数据之前,客户端和服务器之间没有连接。UDP Flood是一种带宽攻击。黑客通过僵尸网络向目标服务器发送大量UDP报文,这些报文可以被小数据包(64字节)或大数据包(大于1500字节,以太网MTU为1500字节)攻击。大量的小数据包会增加网络设备处理数据包的压力;对于大数据包,网络设备需要分片重组,很快造成链路拥塞。

ICMPICMP Echo FloodICMP协议位于IP层,主要通过含有ICMP功能的主机与路由器之间发送ICMP数据包,来达到实现信息查询和错误通知的功能。因此攻击者利用icmp获取主机信息,时间、路由信息等。所以为攻击者创造了极大得便利条件。攻击者通过足够快的数据包速度和足够的带宽,对目标发出攻击请求,造成网络拥堵。

ICMP echo flood ICMP协议位于IP层,主要是在具有ICMP功能的主机和路由器之间发送internet控制消息协议,实现信息查询和错误通知的功能。因此,攻击者利用icmp获取主机信息、时间、路由信息等。所以给攻击者创造了极大的便利。攻击者通过足够快的数据包速度和带宽向目标发送攻击请求,造成网络拥塞。

ICMP黑人护士

黑护士攻击基于类型3(目的地不可达)代码3(端口不可达)-端口不可达。当目的端口不可达时,发出的ICMP数据包将全部返回到源端口。攻击者可以通过发送这种特定的ICMP数据包来使大多数服务器防火墙的CPU过载。一旦设备丢弃的数据包达到临界值15Mbps到18Mbps(每秒40000到50000个数据包),设备将直接停止响应。

ICMP Smurf攻击

攻击者向网关发送ICMP请求报文,将ICMP请求报文的源地址伪造成受害主机的IP地址,目的地址就是广播地址。当路由器收到数据包并发现目的地址是广播地址时,它将广播该数据包。LAN中所有幸存的主机都会收到一个ICMP请求数据包,其源地址为受害主机的IP地址。接下来,受害主机会收到来自网络中所有主机的ICMP响应消息,用大量返回的ICMP响应消息淹没受害主机,最终导致网络拥塞和受害主机崩溃。

应用层反射DNS反射(放大28到54倍)NTP反射(放大556.9倍)Memcached反射(放大10000到51000倍)等等(LDAP反射/TFTP反射/SSDP反射/SNMP反射)。

防御:SYNCheck:使用保护装置,3次握手变成6次握手。保护设备检测SYN请求是否合法,然后保护设备将消息转发给服务器。后续消息仍由保护设备表示。微块:管理员可以在内存中为每个SYN请求创建一个小索引(小于16字节),而不必将整个连接对象存储在内存中。RST cookie:在客户端发起第一个SYN请求后,服务器故意响应一个错误的SYN+ACK消息。如果合法用户收到此消息,它将向服务器响应RST消息。服务器收到这条消息,就把这个主机的IP记录到合法IP列表中,下次主机发起SYN请求,就可以直接通过了。栈调整:管理员可以调整TCP栈来减缓SYN泛洪攻击的影响。这包括减少超时,等待堆栈释放并放入,然后分配连接,否则随机删除传入的连接。

起初,防火墙对UDP Flood的防御是限流,将链路中的UDP消息控制在合理的带宽内。目前防火墙上对UDP泛洪有三种限制:

基于目的IP地址的流量限制:即以某个IP地址为统计对象,对到达该IP地址的UDP流量进行统计和限制,超出部分丢弃。基于目的安全区域的流量限制:即以某个安全区域为统计对象,对到达该安全区域的UDP流量进行统计和限制,超出部分丢弃。基于会话的限流:即计算每个UDP会话的消息速率。如果会话的UDP消息速率达到警报阈值,会话将被锁定,命中该会话的后续UDP消息将被丢弃。当此会话中没有流量持续3秒或更长时间时,防火墙将解锁此会话,并且命中此会话的后续消息可以继续通过。

UDP Flood的指纹学习功能。

从下面的数据包捕获中可以看出,到达同一目的IP地址的两条UDP消息的有效载荷完全相同。如果防火墙收到大量类似这样的UDP消息,那么可能会有UDP Flood攻击。不难发现,UDP Flood攻击消息具有一定的特征。这些攻击消息通常具有相同的特征字段,例如,它们都包含某个字符串,或者整个消息内容是一致的。这些字段来自DDoS工具附带的默认字符串,因此防火墙通过收集这些字符串来检测UDP泛洪。这种防御算法在当前网络中被广泛使用,主要是因为黑客为了增加攻击频率,快速、长时间地占用目标所在网络的带宽。在使用攻击工具时,他们直接在内存中存储一段内容,然后高频发送给目标,因此攻击消息具有很高的相似度。而正常业务的UDP消息,一般每个消息都有不同的净荷内容,可以减少误判。

指纹学习是通过分析客户端发送给服务器的UDP报文载荷是否有大量一致的内容来判断UDP报文是否异常。统计防火墙到达指定目的地的UDP报文,当UDP报文达到报警阈值时,开始学习UDP报文的指纹。如果相同的特征频繁出现,将被学习为指纹,后续命中指纹的消息将被判断为攻击消息,并被过滤为攻击特征。

防御UDP Flood攻击的方法主要有两种:限流和指纹学习,这两种方法各有优缺点。限流方式比较暴力,可以快速的将UDP流量限制在合理的范围内,但是不分青红皂白。如果超出限制,将被丢弃,一些正常的消息可能会被丢弃。指纹学习是理性的,不会随意丢弃消息,但是受到攻击后需要有一个指纹学习的过程。指纹学习功能是目前防御UDP Flood攻击的主流,在华为防火墙产品中应用广泛。

提炼过程大概是:

第一步,检查消息的合法性,过滤一些畸形消息攻击;第二步是特征过滤,即基于报文特征匹配的过滤,主要过滤一些UDP Flood和UDP反射放大攻击;第三步是虚假源认证,可以过滤一些虚假源发起的TCP SYN Flood第四步,对应用层来源进行认证,过滤各种类型的应用层攻击,如DNS查询洪水、http getflood、http postflood、https flood等。第五步是会话分析,即会话检查,防止一些会话攻击,如TCP ACK Flood、FIN/RST Flood、TCP连接耗尽攻击、TCP重传攻击、DNS缓存中毒、SSL-DOS/DDOS、HTTP slow header/POST攻击等。第六步是行为分析,根据用户访问流量的突发性和攻击流量的统一频率、统一资源的不同,识别CC攻击、慢速SYN Flood和具有特征消息负载的UDPFlood。第七步,智能限速。比如ICMP没有对应的业务系统,可以直接限速。当经过前六步过滤后流量仍超过链路负载阈值时,使用基于各种协议的细化限速,将流量稳定在安全范围内。使用DPDK进行DDOS检测

DPDK代表英特尔数据平面开发套件,是由英特尔提供的数据平面开发工具集。它为英特尔架构(IA)处理器架构下的用户空之间的高效数据包处理提供库函数和驱动程序支持。通俗地说,就是一个用来加速分组数据处理的软件库。

与Linux系统不同,DPDK以通用设计为目标,但侧重于网络应用中数据包的高性能处理。具体来说,DPDK应用运行在users 空之间,使用自己的数据平面库收发数据包,绕过了Linux内核协议栈的包处理过程。它不是一个用户可以直接构建应用的完整产品,不包含需要与控制层(包括内核和协议栈)交互的工具。

传统的Linux内核使用中断模式读取数据包。首先,当数据包到达网卡时,网卡会生成一个硬中断,该中断会添加到轮询传入数据包的网卡队列中。然后,硬中断关闭,软中断启动。软中断激活后,查询设备,读取指定数量的数据包后,设备队列空清零,从而结束软中断。对于流量大的服务器,大量时间会浪费在硬中断和软中断上,所以DPDK采用轮询模式驱动。接收到数据包后,直接通过DMA转移到预先分配的内存中,直接进行处理,避免了中断后切换的开销,对于高并发流量的系统,将大大提高数据包处理的效率和性能。此外,DPDK的轮询模式驱动还使用了users space I/O,uio (uio)在users 空之间实现,大部分程序在users 空之间实现,减少了kernel 空之间的程序,方便了uio的开发和维护,避免了过度依赖内核版本带来的开发和调试的复杂性。DPDK使用uio和mmap技术在用户空之间映射网卡缓存,使得消息不需要在内核空之间处理,从而减少了从内核空到用户空的消息拷贝。

在传统Linux内核的多核系统中,运行程序会使用负载均衡机制,即某个进程运行在哪个内核是不确定的,内核会根据各个CPU的负载进行统一调度,这就造成了一个进程在运行过程中频繁地在CPU之间切换,导致资源开销增加。另外,提前从内存中获取的CPU缓存也会在切换CPU时失效,降低了CPU缓存的命中概率。DPDK利用线程的CPU亲和绑定机制,使特定的任务能够被分配到特定的核上,可以避免不同核之间频繁的线程切换造成的cache miss和cachewrite back带来的性能损失。

是否是慢头攻击的演示,通过是否包含两个连续的\ r \ ns

int process _ http _ PKT(struct FeatureExtractCoreConfig * config,uint32_t src_ip,uint16_t http_payload_len,uint 8 _ t * http _ payload){ uint 8 _ t atk _ type =-1;char * find = strstrstr(http _ payload,"\ r \ n \ r \ n & # 034);if(find = = NULL){ atk _ TYPE = ATK _ TYPE _ HTTP _ POST;} else { switch(http _ payload[0]){ case 'G & # 039:atk _ TYPE = ATK _ TYPE _ HTTP _ GET;打破;案例'P & # 039:atk _ TYPE = ATK _ TYPE _ HTTP _ POST;打破;默认:break} } if(atk_type!= -1){更新功能(配置->featureTableList[atk_type],src_ip,http _ payload _ len);}返回0;}基于DPDK的开源反D工具:

利用https://github.com/AltraMayor/gatekeeper·XDP拦截分布式拒绝服务攻击

在计算机网络中,钩子在操作系统中被用来在调用之前或执行过程中拦截网络数据包。Linux内核中暴露了很多钩子,BPF程序可以连接到这些钩子上,实现数据采集和自定义事件处理。XDP,称为快速数据路径,是Linux内核网络栈的最低层。它只存在于RX路径上,允许在网络设备驱动程序的内部网络堆栈中最早的地方处理数据包,这可以在操作系统以特定模式分配内存(skb)之前完成。XDP揭露了一个可以加载BPF程序的网络钩子。在这个钩子中,程序可以任意修改传入的包并快速做出决定,从而避免了内核内部处理带来的额外开销。基于XDP的抗DDoS攻击的本质是在不消耗系统资源的情况下,尽早实现“丢包”建立完整的网络栈链路,即“早丢”。

XDP揭示的钩子有一个特定的输入上下文,这是一个单一的输入参数。其类型为struct xdp_md,在内核头文件bpf.h中定义,具体字段如下:

*/struct xdp _ MD { _ _ u32 data;_ _ u32 data _ end_ _ u32 data _ meta/*下面的访问遍历结构xdp _ rxq _ info */_ _ u32 ingress _ ifindex;/* rxq->dev->ifindex */_ _ u32 rx _ queue _ index;/* rxq->queue _ index */};当程序被执行时,data和data_end字段分别是数据包的开始和结束的指针。它们用于获取和解析传输的数据,第三个值是data_meta指针。在初始阶段,它是一个空空闲内存地址,由XDP程序在与其他层交换数据包元数据时使用。最后两个字段是接收数据包的接口和相应RX队列的索引。当访问这两个值时,BPF代码将在内核中重写,以访问实际保存这些值的内核结构struct xdp_rxq_info。

处理完一个数据包后,XDP程序将返回一个动作作为输出,这代表了程序退出后数据包应该做什么的最终决定。它还在内核头文件bpf.h中定义了以下五种操作类型:

enum xdp _ action { xdp _中止= 0,//抛出异常时丢弃数据包xdp _丢弃,//无声丢弃数据包xdp _传递,//允许内核堆栈XDP_TX进一步处理,//从它来自的接口传输XDP _重定向,//从另一个接口传输数据包};可以看出,这个动作的本质是一个int值。前四个操作不需要参数,最后一个操作需要指定一个额外的NIC网络设备名称作为转发此数据包的目的地。

XDP启用后,网络数据包传输路径如下:

你可以看到三个用红框圈起来的新链接。下面逐一介绍:offload模式,XDP程序直接挂接可编程网卡硬件设备,与其他两种模式相比处理性能最强;因为处于数据链的前端,所以过滤效率也是最高的。如果需要使用这种模式,需要在加载程序时显式声明。目前支持这种模式的网卡设备不多,有一个叫netronome。本机模式下,XDP程序挂钩网络设备的驱动程序。它是XDP最原始的模式,因为它仍然在操作系统之前处理数据,执行性能仍然很高。当然,你的网络驱动需要支持。目前已知的有i40e,nfp,mlx系列,ixgbe系列。通用模式是操作系统内核提供的通用XDP兼容模式,可以在没有硬件或驱动程序支持的主机上执行XDP程序。在这种模式下,XDP由操作系统本身执行,模拟本机模式。好处是只要内核足够高,人人都能玩XDP;;缺点是由于模拟执行,需要分配额外的socket buffer (SKB),导致处理性能下降,与原生模式相差10倍左右。当加载XDP BPF程序时,当前主流的Linux系统内核版本会自动在native和generic模式之间进行选择。加载后,您可以使用ip命令行工具来查看选定的模式。

struct bpf _ map _ def SEC("地图")c_map = {。type = BPF _地图_ MAP _佩尔普_阵列,。key_size = sizeof(int),。value_size = sizeof(long),。max_entries = 256,};void sample_packet(void *data,void *data_end) { //标记要采样的数据包}静态内联void update _ rule _ counters(int rule _ id){ long * value = bpf _ map _ lookup _ elem(&c _ map &rule _ id);if(值)*值+= 1;} static inline int rule _ 1(void * data,void *data_end) { //如果不满足任何一个规则条件//返回XDP _ PASS;更新_规则_计数器(1);sample_packet(data,data _ end);返回XDP _ DROP;}//静态内联int rule_2(..)秒("xdp1 & # 034)int xdp _ Prog(struct xdp _ MD * CTX){ void * data =(void *)(long)CTX->数据;void * data _ end =(void *)(long)CTX->data _ endint retret = rule_1(data,data _ end);如果(ret!= XDP _通行证)返回retret = rule_2(data,data _ end);如果(ret!= XDP _通行证)返回ret//..返回XDP _通行证;}XDP的程序在这里的主要作用是完成提前掉线,而不是识别,相当于执行者,通过我们的分析工具发出拦截指令,实施拦截。一般的玩法是:

1, 自研的模块负责识别DDOS攻击包2, 自研的规则下发拦截规则,完成告警并记录3, XDP负责阻止黑名单里的IP继续访问

DDOS大体介绍了一遍,了解即可,上面都是脏活累活即可,交给专门做防DDoS的厂商去做,一般都直接使用CDN和高防即可,比如,知道创宇的加速乐,腾讯云的大禹等等。

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。