Spoofing, flooding and amplification
Spoofing
ARP spoofing
-
ARP
-
Layer identifiers
Routing是network communication中重要的一环,computer node在通信之前,需要知道自己在与谁联系,要通过什么路径去联系
那么layer identifier 就代表着每一个computer node
- Internet Layer identifier:
IP address
(assigned by users or by software, such as DHCP) - Link Layer Identifier:
MAC Address
(hardware address, physical address)
- Internet Layer identifier:
-
ARP (Address Resolution Protocol)
aims to translate from IP address to MAC address
-
ARP request message generation
- 当有IP packet需要发出的时候,ARP就会被hardware driver 所调用
- 首先获取IP destination address
- 然后在ARP本地的
translation table
中查找是否有对应得IP address : MAC address entry- 有的话,就把48-bits的MAC address发送给 hardware driver
- 没有的话,就准备发送ARP请求,填充相关信息
- sender MAC address
- sender IP address
- target IP address
- target MAC address (broadcast address: 00:00:00:00:00:00)
- ARP request message在link layer被封装成frame 然后发送出去
-
ARP request message reception
- 目标节点将会回复其所包含的MAC address, (如果通信的是其他网络的节点,那么此处寻找的就是网关的MAC address)
- 其他收到请求的节点会更新他们的
translation table
(IP address : MAC address entry) 然后丢弃这个包
-
ARP rely message reception
- ARP rely 是单播,会直接发送回发送者
-
ARP translation table (ARP table, ARP cache)
- 通过ARP cache 来保存IP address : MAC address entry 来节省空间
- 表内的entry会 ageing
- ARP 是无状态协议,因此只要收到了request/reply 他们就会自动更新
-
-
RARP (Reverse ARP)
aims to translate from MAC address to IP address
-
-
ARP spoofing attack
ARP spoofing主要的目的就是污染原本的ARP cache,将Computer A存放的关于 Computer B的信息,改为attacker的,这样A在给B发frame的时候,就会发给attacker
-
countermeasure
- 设置
Arp cache
的过期时间, expire - 一些系统通过unicast 来更新cache 表,而不是像之前那样无状态的更新
- Against countermeasure
- Attacker可以通过定期发送 ARP spoof packet (every ~40s) 来避免以上方法
- Static ARP table 静态ARP表
- 每次启动加载到RAM中
- 没有ARP request主动发送
- 设置
-
-
Man-in-the-middle attack with ARP spoofing
通过ARP spoofing 污染两/多台电脑的
ARP cache
,使他们的通信destination都指向attacker,从而截取通信内容(attacker node 进而转发通信,因为它知道IP address所对应的正确的MAC address)
-
MAC flooding
每个switch 会内置一个
CAM (Content Addressable memory)
表,用于记录不同的MAC address所对应的port number 每当有frame 经过 switches, switch就会通过这个 table 来实现转发MAC flooding就是使用大量的spoofed frame来填充switch 的转发表,从而占满 switch 所有的内存空间,使正常的frame的转发策略无法加入table,最终就会导致正常的frame 通信因为没有对应的port而
被迫广播
,使attacker可以利用sniffer所监听到。
DHCP spoofing
-
DHCP (Dynamic Host Configuration Protocol)
DHCP是用来自动的给其他的用户分配IP地址以及其他相关配置的(网关,DNS服务器等)协议
Protocol operations : 1. Discovery -
client
广播DHCP Discovery message
来寻找server 2. Offer server单播提供IP给client 3. Request client 发送接收IP的message 4. Acknowledge server确认client愿意接受并发送IP以及其他的配置信息<br/>
-
DHCP spoofing attack
DHCP spoofing 主要是通过向DHCP server发送大量的
Spoofed DHCP request message
来占用
IP池里的所有可分配的IP,然后再使用一台假的DHCP server来回复client所发出的DHCP discovery message,进而控制这些client的IP以及其他配置(网关,DNS server地址)。正常的DHCP request message:
Spoofed DHCP discovery message: 利用大量虚假的MAC地址来占用可分配的IP地址
DHCP starvation :
通过发送大量的带有伪造MAC Address的DHCP request message来占用所有的IP池中的IP地址,进而使用假的DHCP server给其他client分配地址和其他配置信息,对他们进行控制
Flooding and Amplification
ICMP Smurfing
-
ICMP
Ping : 提到ICMP协议,就不得不提到ping,ping就类似于一个声纳系统,通过向特定的电脑发送
ICMP ECHO_REQUEST
,来使他们通过返回ECHO_REPLY_REQUEST
来验证是否可以通信
-
ICMP Smurfing
Attacker通过向一个局域网的广播域中发送大量的
spoofed ICMP ECHO_REQUEST
来诱导大量的clients发送ICMP ECHO_REPLY_REQUEST
到指定的一台client进而使其崩溃Amplification : 我们从上面的例子可以看到,通过一个简单的广播,就可以让这么多的client进而产生巨大的流量,进而就催生出一个新的技术就是
Amplification
,可以通过多层的amplifiers来实现巨大的DDoS流量<br/>
NTP Amplification DDoS Attack
-
NTP
- Network time protocol
- UDP protocol
- port 123
NTP用来用来各个主机的时钟
NTP是一个分层的,中间层的时间资源系统
每一层我们称为
stratum
,由最上层的clock一层层同步到不同stratum
的NTP server-
NTP如何工作
- Client首先发出NTP message,并且在上面记录当前的时间戳:
T1=9:00:00am
- NTP server 收到后马上打上时间戳:
T2=10:00:01am
- NTP sever返回一条NTP message,然后在发出之前打上时间戳:
T3=10:00:02am
- NTP message到达用户的时候马上打上时间戳:
T4=9:00:03am
用这四个时间戳,我们就足以同步client的时间
Timestamp Value Description T1 09:00:00 Client发出的时间 T2 10:00:01 Server收到的时间 T3 10:00:02 Server发出的时间 T4 09:00:03 Client收到的时间 -
计算所有的Message在传输中delay的时间
delay = D1 - D2 = (T4-T1) - (T3-T2) = 通信花费的总时长 - 在server上的处理时间 = 3 - 1 = 2 seconds
-
计算 NTP client 与NTP server 之间的时间差
O1 = T2 - T1 = 1h 1s
O2 = T3 - T4 = 59min
T2 = T1 + offset + delay/2 T4 = T3 - offset + delay/2
因此Offset = (O1 + O2)/2 = [(T2 - T1 - delay/2) + (T3 - T4 + delay/2)] / 2 = 1 hour 总之就是
(=服务端的两个时间
-客户端的两个时间 =)/2
= offset
- Client首先发出NTP message,并且在上面记录当前的时间戳:
-
NTP amplification attack
NTP amplification attack 依赖于利用公共可以访问的
NTP server
来发出NTP RESPONSE实现对victim host的DDoS攻击补充知识 : NTP 服务支持管理员向NTP server查询其所管理同步的clients信息,NTP servers通过向client发送monlist命令来获得所有最近连接过的hosts的列表
ntpd : NTP daemon是一个操作系统的后台驻留程序,用来设置和维护系统时间并与NTP server交互实现时钟同步 在Ntpd在4.2.7之前的版本都是存在漏洞的。 在老的机器中,monlist command是默认开启的,它将会返回最近600个通信过的client的IP地址(也就是说一条monlist command,可以返回比原本大的多的数据)
-
How NTP amplification attack works?
- Attacker使用bot来伪造NTP request packets,使用victim的IP地址
- Botnet 发送这些伪造的NTP请求,来诱使NTP servers调用他们的monlist命令,返回大量的response
- Client收到了每一个NTP server所返回的600个IP地址的信息,相当于收到了一次DoS攻击。我们根据上面Wireshark的截图可以观察到,一条的spoofed NTP request只需要234bytes,但是却要受到100个482 bytes的数据包,可见其攻击力度。
-
Botnet
我们之前在NTP amplification attack已经提到过了bot的使用,在这一章节中,我们来稍微展开讲一讲Botnet的内容
Botnet,僵尸网络,简单来说就是黑客通过控制一系列的设备(主机,手机,IoT设备等),实现对于本机信息的获取以及控制权,可以利用所感染的bot或者僵尸来实现各种攻击,并通过C&C(command and control) server来实现通信与指令下发
-
如何搭建一个Botnet?
- 黑客首先需要得到一群受感染的用户设备,他们可以自己想办法去感染,也可以从地下市场购买别人感染的
- 然后,让这些被感染的bots去连接上 C&C server,实现通信与管理
- 接着,黑客就可以通过C&C server来下达指令,要求Bot去偷取本机的信息,亦或者是配合实现攻击
TCP SYN Flooding
-
TCP
-
TCP 是一个传输层的协议,用于很多我们耳熟能详的协议例如HTTP, SMTP 还有 ftp
-
TCP 提供了可靠的点对点的基于连接的通信,如果说网络层的IP地址是提供了快递从揽货到送达的路径,那么传输层的TCP和UDP相当于是提供了传输路上的保险
-
其可靠性主要是通过
segment sequencing
,re-trasmission
andloss detection
来实现的 -
同时TCP提供了流量控制和拥塞管理的功能,只要是通过滑动窗口算法以及丢包检测实现的
-
TCP connection
每一个
TCP connection
的标识符就是:- Source IP address + port number
- Destination IP address + port number
- 其中Port number指代的就是所跑的服务所对应的number
-
Three-way handshake 三次握手协议
之前我们提到过TCP协议是基于连接的协议,那么三次握手协议,就是其内置的,用于建立连接的协议
首先我们先来认识一下一个用于三次握手协议的TCP header应该包含什么信息
其应该包括:
- Port numbers (16 bits each)
- SYN flag (1 bit)
- ACK flag (1 bit)
- Sequence number (32 bits)
- Acknowledgement number (32 bits)
然后看一个具体的例子
- Source首先发起第一次握手请求,名为
SYN
发出其所定义的一个sequence number为x
- 接着Destination返回第二次握手请求,名为
SYN+ACK
,将sequence number改为其所定义的值y
,并将acknowledge number设为x+1
- 最后Source发起第三次握手请求,名为
ACK
, 返回acknowledgement number为y+1
, 同时递增自己的 sequence number为x+1
- 至此三次握手连接成功,接下来就可以正常的进行通信,并且Source 和 Destination 将逐渐递增其自己的
sequence number
以及acknowledge number
-
-
TCP SYN flooding
TCP SYN flooding attack本质上是一个DoS attack, 其目的是为了通过向目标服务器发送大量的无效
SYN
, 来诱使服务器发送对等数量的SYN+ACK
请求, 继而等待ACK
请求回复,同时利用本地缓存这个连接,最终导致本地的缓存空间被占满。我们最后通过一个具体的例子来复现一下这个过程
- 首先黑客向服务器发送大量的
SYN
请求,用的是伪造过的IP地址
- 接着服务器在收到了
SYN
请求之后,便会发出对应的SYN+ACK
回复请求到之前伪造的IP地址
- 被伪造的IP地址的主机收到由服务器发来的大量
SYN+ACK
请求,可发现没有记录显示自己之前有发送过SYN
请求到该服务器,因此不会回复ACK
请求。同时,每维护一个等待ACK
的连接,服务器都要开设一个新的端口,同时用缓存保存这些信息,一旦超出上限,那么就会使服务器瘫痪
- 首先黑客向服务器发送大量的
Mitigation
MAC flooding mitigation
- 使用port security,限制从端口可以获取的MAC地址数量
- 对安全的MAC地址进行长时间的使用(不可替代),只要这些地址还存在于第三层的设备的ARP table当中(例如路由器,表示信任路由器的安全措施)
- 使用AAA(Authentication, authorisation and accounting)服务器来验证所有MAC地址
DHCP starvation mitigation
- 使用Port security, 只有可以信任的端口所连接的DHCP请求才被允许通过
- DHCP snooping, 只接受信任的DHCP服务器所发送的配置
DHCP spoofing mitigation
- 使用入侵检测系统,并审核数字签名来避免伪造的DHCP服务器
- DHCP snooping, 只接受信任的DHCP服务器所发送的配置
ICMP smurfing mitigation
- 单独配置每一个主机和路由器,拒接相应ICMP请求和广播信息
- 配置路由器不要转发ICMP到广播域当中
- 入站流量检查,拒绝伪造源地址的数据
NTP amplification DDoS mitigation
- 禁止
monlist
的使用,一次来避免NTP返回非常大的信息 - 入站流量检查,拒绝伪造源地址的数据
- Firewall
TCP SYN flooding attack mitigation
- 使用防火墙来进行filtering,对那些很明显的spoofed的IP address进行丢弃
- 减少SYN接受的时间,将那些黑客建立的半连接尽早关闭来防止崩溃
- 使用防火墙对于TCP connection来进行审查