---
# System prepended metadata

title: P4 18
tags: [P4]

---

# P4 18
龍帆軒  楊舒翔

## DDoS防禦攻擊:
1. SYN Flood
2. UDP Flood
3. DNS Amplification
4. ICMP Flood
5. SYN-ACK Flood

### Topology
![](https://i.imgur.com/62SAJqu.png)


### 攻擊方法
透過scapy 傳送特定種類的封包

SYN/ACK Flood :  
`pkt = pkt /IP(dst=addr) / TCP(dport=1234, sport=random.randint(49152,65535)) `


UDP Flood : 
`
pkt = pkt / IP(dst=addr) / UDP(sport=53)
`

DNS Amplification :
`
pkt / IP(dst=addr) / UDP(sport=random.randint(49152,65535),dport=53) / DNS(id = 111,qr = 0,opcode = 0,rd = 1
`

ICMP Flood :
`pkt /IP(dst=addr) / ICMP(type=0)`
>type=0 為 echo reply


因為現今的DDoS攻擊大多都為多種層面的DDoS攻擊，大多都會是類似syn搭配udp的dynamic攻擊，所以需要考慮到同時出現不同protocol的攻擊

### 防禦方法

Syn Flood :
檢視通過的封包裡，syn跟ack的數量為一致的
如過syn跟ack的數量超過一個值(syn_limit)就會將封包drop

UDP Flood:
檢視通過的封包裡，udp封包的數量在一個值之下(udp_limit)

DNS Amplification:  
先利用dns封包中的qr欄位判斷是查詢還是回應封包。若為查詢，利用dns封包中的transaction id與source ip的值來紀錄此封包的查詢。若為回應，就去看有沒有查詢紀錄，沒有的話便將此封包過濾掉。

ICMP Flood :
檢視通過的封包裡，udp封包的數量在一個值之下(icmp_limit)

SYN-ACK Flood:
檢視通過的封包裡，tcp封包裡syn-ack的數量在一個值之下(synack_limit)

### 結果
正常情況下 h2 傳送封包給h1 可以接收到
![](https://i.imgur.com/QVSFCgD.png)


被攻擊的時候 h2 封包傳送不到 h1 
![](https://i.imgur.com/hloSpGu.png)

開啟防禦可以將DDoS緩解下來
雖然還是有attack封包出現，但是h1已經可以接收到h2的訊息了
![](https://i.imgur.com/kAz9myP.png)  


有DNS回應封包傳入，但沒有曾經請求的紀錄所以被擋下來，沒有收到。
![](https://i.imgur.com/JpV2N6Z.png)

測試host送出請求封包
![](https://i.imgur.com/VNWAEHU.png)

收到回應封包時，因為曾經有請求紀錄，所以沒有被擋下。
![](https://i.imgur.com/zSV72ew.png)


###### tags: `P4`




