网络安全课程笔记二:DDoS

Network Security Lecture 2: DISTRIBUTED DENIAL OF SERVICE ATTACK (DDoS)

2.1 攻击模型

2.1.1 被动攻击

攻击者监控数据包的传输,并意图获取传输的信息。这类攻击一般很难发现,因为它不会对包的内容进行修改。

被动攻击有两种类型:

  • 分析数据包的载荷(payload)
  • 若用户加密了数据包的内容,攻击者仍然可以通过对数据包的模式识别来推测敏感信息。(流量分析)

2.1.2 活动攻击

活动攻击涉及对数据流的一些修改。

活动攻击分为四种类型:

  • 拒绝服务攻击
  • 假冒攻击(攻击者假装自己是一个合法的实体)
  • 重放攻击(攻击者先被动抓包,再将其重传)
  • 中间人攻击(MITM,Man In The Middle,攻击者非法修改了一个数据包的某些部分)

2.2 DDoS 攻击

2.2.1 泛洪攻击

将大量的数据包发送至网络的瓶颈处,阻塞路由器,导致网络的瘫痪。

2.2.2 利用 ICMP 攻击

  • 欺骗攻击(Spoofed attack):发送大量 ICMP 数据包给受害者,其源 IP 地址是虚假的
  • 反射攻击(Reflection attack):冒充自己是受害者(源地址设置为受害者的 IP),发送大量的 ICMP 请求给各种路由器和主机,利用它们的 ICMP 回复来淹没受害者
  • Smurf 攻击(Smurf attack):冒充自己是受害者(源地址设置为受害者的 IP),发送大量的 ICMP 请求广播给网络中的所有地址

2.2.3 利用 TCP 攻击

TCP 的特点:

  • 点到点的、可靠的、有序的流式传输,无信息边界
  • 通过窗口大小来进行拥塞控制和流量控制
  • 全双工(双向)数据传输
  • 面向连接,需要握手

攻击类型:

  • SYN Flooding:在握手阶段,攻击者只向服务器发送 SYN,却不回复 ACK。
  • Slow ACK Attack:接收方在收到数据包之后,过很久才回复 ACK。
  • Small Packet Size Attack:攻击者使用一个较小的 MSS(比如64B),服务器需要很长一段时间才能发完所有的数据包。从而强行让服务器将数据存储在内存中。
  • Small Advertising Window Attack:接收方在每一个 ACK 中,声明一个较小的窗口值,强行让服务器将数据存储在内存中。
  • 利用拥塞控制的攻击:发送一串阻塞信号,来限制发送方的 cwndssthresh,从而使受害者的 TCP 连接吞吐量降低。
    • 基于超时的 PDoS 攻击:强制使发送方持续性进入超时状态(cwnd = 1)
    • 基于 AIMD 的 PDOS 攻击:强制使发送方持续性减半其 cwnd。

2.2.4 利用 HTTP 攻击

Uniform resource identifier(URI)统一资源标识符:指代一个地址或名字
Uniform resource locator(URL)统一资源定位器:定义一个资源的网络地址

Web 资源的类型:

  • 静态资源:HTML,JPG,PNG 等
  • 动态资源:程序按需动态生成的内容,比如 PHP

HTTP 数据报包含了:

  • Start line
  • Header
  • Body(可选)

常见的 HTTP 方法:

  • GET:从服务器获取某个对象
  • HEAD:和 GET 类似,但是服务器只回复 Header
  • POST:发送数据给服务器进行处理

2.2.4.1 GET Flooding

  • 建立尽可能多的 TCP 连接
  • 发送大量的 HTTP GET 请求给服务器
  • 向服务器请求大文件
  • 使用 no-cache 来阻止缓存服务器回复请求

2.2.4.2 Puppet-net

将服务器的 URL 发布到各种知名论坛,引诱用户访问这些 URL 从而导致 GET Flooding。

2.2.4.3 Pipeline Attack

在每个包中放入多个 HTTP 请求,并发送给服务器。

2.2.4.4 Slowloris Attack

  • 建立尽可能多的 TCP 连接
  • 尽可能长地维持这些连接
  • 缓慢发送各个请求(例如每隔 10min 发送一个请求)

2.2.4.5 POST Attack

HTTP POST 方法用来发送数据给服务器进行处理。包头有个参数 Content-Length 告诉服务器有多少数据将被上传。

攻击者可以设置一个很大的 Content-Length 值,但是缓慢发送数据给服务器。

2.2.4.6 Range Attack

客户端可以用 HTTP 包头的一个参数 Range 来请求服务器送回某个对象的特定部分。

攻击者可以设置一个小 Range 值,例如 bytes = 0-1

2.2.4.7 Malformed Request Attack(畸形请求)

  • HTTP 用 \r, \n 或类似标记来指定 HTTP Header 的结尾。攻击者如果不发送这些标记,服务器可能会等很久。
  • 发送并不存在的 HTTP 方法,或者 URL,或者版本(如 HTTP/1.5
  • 放一个超长的 HOST 参数(协议规定最大长度 253)。

2.3 DDoS 防御

2.3.1 入口过滤

目的:过滤掉虚假源 IP 地址的数据包(IP 哄骗)。

方法:检查数据包的源 IP 地址是否属于路由器该接口所接的 IP 段。

2.3.2 出口过滤

目的:过滤攻击数据包。

方法:找出不符合特定安全要求的数据包(可疑的 HTTP 请求,可疑的 ICMP 包等等)。

2.3.3 CAPTCHA

人机验证码。

2.3.4 让客户端解难题

思路:让客户端发送请求不再那么容易。

在客户端的浏览器中内嵌一段 JS 代码,每次发送请求需要解一个难题,从而使客户端需要消耗更多特定的资源来发送一个请求。

2.3.5 CDN 内容分发网络

CDN:Content Distribution Network,一组地理位置上分散开来的服务器,用来加速 WEB 资源的分发,也能对 DDoS 攻击起到分流、缓冲的作用。

2.3.6 异常检测

基于特征的检测:

  • 检测畸形数据包
  • 检测可疑流量

基于异常的检测:

  • 检测上下行的数据包比例
  • 检测 SYN 数据包和 FIN/RST 数据包的数量比例

2.3.7 反应措施:Pushback

当发现某条线路的流量异常增多之后,要求其上游的服务提供商过滤、限制这种流量。