Liunx防火牆--iptables(二)攻擊與防禦篇

網絡層攻擊的定義

      網絡層攻擊定義爲:通過發送濫用網絡層的首部字段的一個或者一系列的數據包以利用網絡棧漏洞或消耗網絡層資源進行攻擊。

1.首部濫用:包含有惡意構造的,損壞的或經過非法改造的網絡層首部的數據包。(如虛假源ip地址,或者包含虛假片偏移)

2.利用網絡棧漏洞:如Linux 2.6.9 以前版本發現的IGMP拒絕服務Dos漏洞。

3.寬帶包和:DDos攻擊。

4.IP分片:任何連接兩個不同MTU大小的數據鏈路層的路由器都有責任確保這兩個數據鏈路層之間傳輸的IP數據包大小不會超過任何一方的MTU的值。而攻擊者可以利用分片,將一個數據包故意分成多個IP片來逃避IDS(入侵檢測系統)的檢查。

5.低TTL攻擊。

         雖然非法改造的ip首部可能會被防火牆或帶有訪問控制列表(ACL)的路由器一一過濾調,但是強大的黑客面前沒有攻不破的系統。

防火牆iptables 主要是工作在網絡層上的,iptables則可以通過記錄網絡層數據包的首部來捕獲可疑的網絡層活動。

首先則是 記錄IP首部,使用的是 --log-ip-options 命令行參數將LOG規則添加到iptables策略。

首先是iptables命令(注意,這裏爲了演示,會停掉firewall對iptables的規則)。

# iptables -A INPUT -j LOG --log-ip-options

在另一臺機器對該機器進行ping操作

$ ping -c 1 -T tsonly 192.168.199.208
PING 192.168.199.208 (192.168.199.208) 56(124) bytes of data.
64 bytes from 192.168.199.208: icmp_seq=1 ttl=64 time=0.241 ms
TS: 	51551931 absolute
	-1833
	1
	1832


--- 192.168.199.208 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.241/0.241/0.241/0.000 ms

查看日誌
# grep "ICMP" /var/log/messages 
Aug  6 21:58:15 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=124 TOS=0x00 PREC=0x00 TTL=64 ID=28193 DF OPT (44280D0002FF785002FF712700000000000000000000000000000000000000000000000000000000) PROTO=ICMP TYPE=8 CODE=0 ID=9332 SEQ=1 

其中日誌詳細記錄首部內容。OPT後面跟的一長串十六進制字節是包含在IP首部的完整IP選項。

 

傳輸層攻擊的定義

    通過發送濫用的傳輸層首部字段的一個或一系列數據包或利用傳輸棧的漏洞進行攻擊。

 1.耗盡連接資源:用於耗盡一個目標主機爲新連接提供服務的的所有可用資源的數據包。(如SYN泛洪實施的DDos攻擊)

 2.首部濫用:比如用於中斷一個TCP連接的僞造RST數據包。

 3.端口掃描:一個人對你心懷不軌,必定會事先踩點。

而記錄tcp首部的手段就是參數 --log-tcp-options

# iptables -A INPUT -j LOG --log-tcp-options

對該主機進行探測

$ nc -v 192.168.199.208 25010
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connection refused.

查看日誌

# grep "25010" /var/log/messages 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 
Aug  6 22:52:19 vm1 kernel: IN=enp0s3 OUT= MAC=08:00:27:bd:cd:37:d0:53:49:54:4d:e1:08:00 SRC=192.168.199.171 DST=192.168.199.208 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=63634 DF PROTO=TCP SPT=49440 DPT=25010 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A00712A670000000001030307) 

 

下面介紹一下端口掃描技術。

端口掃描不得不說一下一款優秀的端口掃描技術--Nmap 。

TCP connect() 掃描 --- (nmap -sT)

TCP SYN 或半開放掃描 --- (nmap -sS)

TCP FIN或XMAS和NULL 掃描 --- (nmap -sF,-sX,-sN)

TCP ACK 掃描 --- (nmap -sA)

TCP idle 掃描 --- (nmap -sI)

UDP 掃描 --- (nmap -sU)

nmap 的 -P0 是指強制跳過判斷iptablesfw系統是否在線的過程(即省略主機的發現過程)。從nmap的角度來看一個被掃描的端口可能處於3種狀態。

開放,關閉,被過濾。   

TCP connect() 掃描

       這種是最基本的掃描方式,也是最普通的TCP連接。如果SYN數據包到了一個開放的端口,服務器的TCP協議將以一個SYN/ACK數據包作爲響應。確認收到了來自客戶端的初始序號,同時會將自己的序號給客戶端,客戶端受到SYN/ACK數據包後,將返回一個確認數據包給服務器。此時就建立連接參數,連接狀態也成爲了“establish” 狀態,並準備好傳輸數據。

      在TCP connect() 掃描時,就是最普通的TCP連接,針對每一個被掃描的端口發送SYN數據包和握手結束的ACK數據包。

對應的nmap 命令爲 nmap -P0 -sT 192.168.199.208

$ nmap -P0 -sT 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:11 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.0018s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds


$ grep SYN /var/log/messages |tail -n 1
Aug 28 23:43:47 vm1 kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=192.168.199.208 DST=192.168.199.208 LEN=44 TOS=0x00 PREC=0x00 TTL=47 ID=37472 PROTO=TCP SPT=60907 DPT=111 SEQ=2712329176 ACK=0 WINDOW=1024 RES=0x00 SYN URGP=0 OPT (020405B4) 

 

TCP SYN或半開放 掃描

      半開放是類似於connect() 掃描的。掃描器發送一個SYN數據給TCP端口,希望獲得一個SYN/ACK數據包或者RST/ACK 。收到前者表示目標端口是開着的,收到後者表示是關着的。當然還存在第三種情況,那就是什麼都沒獲得,這種情況只能說明數據包被過濾了,這個端口到底開着或者沒開,nmap也不知道。但是這種掃描方式不會完成3次握手,也就是它故意不返回ACK給已經響應了SYN/ACK數據包的開放端口。因此SYN掃描也稱爲半開放掃描。這種反常規的操作其實繞過了TCP協議棧,這是通過原始套接字實現的。

      如果對一個iptablesfw系統進行掃描,SYN掃描所記錄的TCP選項將十分的少。

$ nmap -P0 -sS 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:37 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds

TCP FIN,XMAS,NULL 掃描

      FIN,XMAS,NULL 掃描的操作是基於同一個原理,就是當某個關閉端口突然收到一個沒有設置SYN,ACK或RST控制位的TCP數據包時,通常是一個RST去響應這個令人詫異的數據包,但如果是一個開放的端口,TCP將不做任何響應。

$ nmap -P0 -sF 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:44 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00031s latency).
Not shown: 998 closed ports
PORT    STATE         SERVICE
22/tcp  open|filtered ssh
111/tcp open|filtered rpcbind
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 1.31 seconds

TCP ACK掃描

    TCP ACK掃描向每個被掃描的端口發送一個TCP ACK數據包。如果目標數據包發送出去有接收到RST(不是RST/ACK數據包)說明端口是開放或者關閉的,沒有回信表示被過濾了。

    ACK掃描的目的並不是確定某個端口是開着的還是關着的,它是爲了確定一個端口是否被一個有狀態的防火牆過濾了。

$ nmap -P0 -sA 192.168.199.208

Starting Nmap 6.40 ( http://nmap.org ) at 2018-08-30 21:52 CST
Nmap scan report for vm1.lan (192.168.199.208)
Host is up (0.00035s latency).
All 1000 scanned ports on vm1.lan (192.168.199.208) are unfiltered
MAC Address: 08:00:27:BD:CD:37 (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章