浅谈拒绝服务攻击的原理与防御[1] | 普通拒绝服务攻击

普通拒绝服务攻击是指一些传统的攻击方式,如:SYN FLOOD攻击、ACK FLOOD攻击、CC攻击、UDP FLOOD攻击 等等,下面会详细介绍。

SYN FLOOD攻击

Syn flood攻击是利用TCP协议的一些特性发动的,通过发送大量伪造的带有syn标志位的TCP报文使目标服务器连接耗尽,达到拒绝服务的目的。要想理解 syn flood的 攻击原理 必须要先了解TCP协议建立连接的机制。

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层 通信协议。在TCP/IP协议簇中,TCP层是位于IP层之上,应用层之下的中间层。

不同的主机的应用层之间通信,通常需要可靠的、像管道一样的连接,但是IP层(网络层)不提供这样的可靠字节流机制,而是提供不可靠的数据包交换。

因为TCP是可靠的传输方式,所以 在通信之前需要建立连接,TCP建立连接的方式就是著名的TCP三次握手(如图3-1-1) :

syn flood攻击就是在三次握手机制的基础上实现的。

攻击者通过伪造IP报文,在IP报文的原地址字段随机填入伪造的IP地址,目的地址填入要攻击的服务器IP地址,其他TTL、ID以及TCP中的Source Port等随机填入合理数据,TCP的目的端口填入目的服务器开放的 端口 如:80、8080等,syn标志位置 1。

然后通过不停的循环讲伪造好的数据包发送到目的服务器。样本如图3-2、3-3:

可以看到目标主机建立了很多虚假的半开连接,这耗费了目标主机大量的连接资源。可以想象如果成千上万台“肉鸡 ”对一台服务器发动syn flood攻击威力将是非常强大

ACK FLOOD攻击

ack flood攻击同样是利用TCP三次握手的缺陷实现的攻击,ack flood攻击利用的是三次握手的第二段,也就是TCP标志位syn和ack都置1。

攻击主机伪造海量的虚假ack包发送给目标主机,目标主机每收到一个带有 ack标志位的数据包时,都会去自己的TCP连接表中查看有没有与ack的发送者建立连接,如果有则发送三次握手的第三段ack+seq完成三次握手,成功建立TCP连接。

如果没有则发送ack+rst 断开连接。但是在这个过程中会消耗一定的CUP计算资源,如果瞬间收到海量的syn+ack数据包将会消耗大量的cpu资源使得正常的连接无法建立或者增加延迟,甚至造成服务器瘫痪、死机。如图:

攻击开始前:

攻击开始后:

理论上目标主机的TCP连接越多ack攻击效果越好,所以如果syn flood与ack flood配合使用效果会更明显。实现代码点击阅读原文可见。

CC攻击

CC攻击全称Challenge Collapsar,中文意思是挑战黑洞,因为以前的抗DDOS攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法,新一代的抗DDOS设备已经改名为ADS( Anti-DDoS System),基本上已经可以完美的抵御CC攻击了 。

CC攻击的原理是通过代理服务器或者大量“肉鸡” 模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。

我们都知道网站的页面有静态和动态之分,动态网页是需要与后台数据库进行交互的,比如一些论坛, 用户登录的时候需要去数据库查询你的等级、权限 等等。

当你留言的时候又需要查询权限、同步数据等等,这就消耗很多cpu资源,造成静态网页能打开,但是需要和数据库交互的动态网页打开慢或者无法打开的现象。

这种攻击方式相对于前两种实现要相对复杂一些,但是防御起来要简单的多,提供服务 的企业只要尽量少用动态网页并且让一些操作提供验证码就能很好的抵御一般的 CC攻击。所以在这我就不在演示CC攻击的效果了。

UDP FLOOD攻击

UDP FLOOD攻击顾名思义是利用UDP协议进行攻击的,UDP FLOOD攻击可以是小数据包冲击设备也可以是大数据包阻塞链路占尽带宽。不过两种方式的实现很相似,差别就在UDP的数据部分带有多少数据。

相比TCP协议的攻击UDP的攻击更直接更好理解,有一定规模之后更难防御,因为UDP攻击的特点就是打出很高的流量,一个中小型的网站出口带宽可能不足1 G。

如果遇到10G左右的UDP FLOOD攻击,单凭企业自身是无论如何也防御不住的,必须需要运营商帮你在上游清洗流量才行,如果遇到100G的流量可能地方的运营商都 没有能力清洗了,需要把流量分散到全国清洗。

UDP FLOOD攻击就像是一块大石头,看着普普通通的好像跟现代机枪炸弹不是一个等级的武器,但是如果石头足够大 ,就不一样了。

想想恐龙是怎么灭绝的, 陨石不也是块普通的石头吗!在DDOS 防御领域有一句话:能防住的都是简单的攻击,但简单的攻击不一定防得住。UDP FLOOD正是这种简单有效的攻击方式。

大包攻击:

小包攻击:

下面的代码也是单线程,速度不太快,下一篇文章讲反射DDOS的时候会有多线程的用法。

UDPFLOOD.py #-*- coding: UTF-8 -*- import socketfrom scapy.all import * from scapy import allprint "这是一个UDP FLOOD攻击器,源端口源IP随机"dip=raw_input("输入要攻击的地址:") dp=input("输入要攻击的端口:") f=open('./load','r')while 1: size=random.randint(1,2) data=f.read(size) iprandom=random.randint(0,4000000000) sip=socket.inet_ntoa(struct.pack('I',socket.htonl(iprandom))) sp=random.randint(1000,65535) t=random.randint(50,120) packet=(IP(src=sip,dst=dip,ttl=t)/UDP(sport=sp,dport=dp)/Raw(load=data)) send(packet)

下篇文章将介绍反射性DOS攻击的相关知识,第一次发文,勿喷啊~~

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-02-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

一道关于 TCP 连接的题目

小陈点了点头表示很熟悉,然后一口气将 TCP 连接中三次握手和四次分手详细地说了一遍。心想暗笑,这问题难不倒我的,哈哈。

831
来自专栏极客猴

一道关于 TCP 连接的题目

小陈点了点头表示很熟悉,然后一口气将 TCP 连接中三次握手和四次分手详细地说了一遍。心想暗笑,这问题难不倒我的,哈哈。

871
来自专栏散尽浮华

Linux下防御DDOS攻击的操作梳理

DDOS的全称是Distributed Denial of Service,即"分布式拒绝服务攻击",是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请...

1.6K9
来自专栏即时通讯技术

脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天、实时音视频等)时,如果发现网络连接超时,第一时间想到的就是使用Ping命令Ping一下服务器看看通...

1421
来自专栏腾讯技术工程官方号的专栏

科普:QUIC 协议原理分析

本文将主要介绍 QUIC 协议产生的背景和核心特性。

4.3K11
来自专栏FreeBuf

技术剖析:海莲花OceanLotus Encryptor样本分析

前言 上周,360发布了海莲花的报告,数据收集,分析,解释,加工方面很能让人折服,但是看了其对所谓OceanLotus Encryptor样本的分析,和我自己观...

2217
来自专栏人工智能LeadAI

译文 | Android 开发中利用异步来优化运行速度和性能

我们知道,在Android框架中提供了很多异步处理的工具类。然而,他们中大部分实现是通过提供单一的后台线程来处理任务队列的。如果我们需要更多的后台线程的时候该怎...

3817
来自专栏JMCui

计算机网络基础知识.

    局域网(Local Area Network,LAN)是在一个局部的地理范围内(如一个企业、一个学校或一个网吧),一般是方圆几千米以内,将各种计算机、服...

1435
来自专栏landv

烽火2640路由器命令行手册-11-IP语音配置命令

(1)       用户输入的ID若在dialpeer表中已存在,且模式匹配,则进入dialpeer配置模式对相应dialpeer进行配置修改;

1573
来自专栏云计算教程系列

如何减轻memcached的放大攻击

在2018年2月27日,Cloudflare 和 Arbor Networks 公司于周二发出警告称,恶意攻击者正在滥用 Memcached 协议发起分布式拒绝...

3784

扫码关注云+社区

领取腾讯云代金券