駭客眼中的 3-way handShake
TCP 為了確保封包的送達與錯誤的處理,額外加入許多網路溝通的控制訊號。
這些控制訊號雖然可以讓 TCP封包使命必達的送達,
但是也可以讓駭客透過這些訊號偵查網路與伺服器。
這篇文章主要就是要說明駭客眼中的這些TCP 訊號,
駭客如何透過這些TCP訊號來判斷網路與伺服器的狀態。
3-Way handShake
任何情況下兩台電腦要相互溝通,只要是透過 TCP 傳輸協定,
一定需要建立 3-way handShake,
- 1. 發送端傳送 Syn
- 2. 接收端回傳 SYN/ACK
- 3. 發送端回傳 ACK
這就是所謂的 3-way handshake,
因此,我們得到一個結論:
只要接收斷回傳 SYN/ACK就表示該伺服器的 port 是通的!
port 是通的表示該伺服器透過該 port 提供某種服務。例如 80 port 的網站服務等。
反向解釋,只要接收端沒有回傳 SYN/ACK或是回傳RST就表示該伺服器 port 是不通的!
這就是駭客用來偵查特定伺服器有提供哪些服務的基本原理與方法。
Xmas scan
這是另外一種變形的方式,用來判斷 port 有沒有通的方式之一。
不同的是,駭客並不是傳送 SYN 訊號,而是傳送FIN的訊號。
根據 RFC 793,如果 port 不通,伺服器應該要回覆 RST/ACK。
反向解釋,如果 port 通的話,應該就沒有回應。
Open Port (Server IP:23)
(Hacker client IP):4031 ———–FIN/URG/PSH———–> (Server IP):23
(Hacker client IP):4031 <———-NO RESPONSE———— (Server IP):23
Closed Port (Server IP:23)
(Hacker client IP):4031 ———–FIN/URG/PSH———–>(Server IP):23
(Hacker client IP):4031<————-RST/ACK————–(Server IP):23
FIN Scan
這種偵測方式與 Xmas Scan 原理相同。
Open Port (Server IP:23)
(Hacker client IP):4031 ———–FIN—————–>(Server IP):23
(Hacker client IP):4031 <———-NO RESPONSE———-(Server IP):23
Closed Port (Server IP:23)
(Hacker client IP):4031 ————-FIN—————> (Server IP):23
(Hacker client IP):4031<————-RST/ACK————(Server IP):23
Null Scan
Null Scan 是TCP 封包傳送並不設定任何訊號。如果 port 不通,伺服器會回傳 RST/ACK
Open Port (Server IP:23)
(Hacker client IP):4031 ———–NO FLAGS SET———->(Server IP):23
(Hacker client IP):4031 <———-NO RESPONSE————(Server IP):23
Closed Port (Server IP:23)
(Hacker client IP):4031 ————-NO FLAGS SET———(Server IP):23
(Hacker client IP):4031<————-RST/ACK-————-(Server IP):23
IP ID Sequence Number
TCP 封包為了讓封包不遺失,每個封包都會有Sequence Number,
透過這個序號也可以讓我們知道該伺服器是否有 Load Balance。
可以使用 hping的工具測試。
hping2 -c 10 -i 1 -p 80 -S victim.server.com |
從這個執行結果我們知道該 victim.server.com背後有兩台電腦所組成的 load balance。
因為 ID 通常為序號越來越大。我們觀察到 id= 57xxx 與 id=18xxx ,表示有兩台電腦回覆產生不同的 id 所造成。
46 bytes from 207.46.197.115: flagsSA seq0 ttl=56 id=57645 win=16616 rtt=21.2 ms 46 bytes from 207.46.197.115: flagsSA seq1 ttl=56 id=57650 win=16616 rtt=21.4 ms 46 ms bytes from 207.46.197.115: flagsRA seq2 ttl=56 id=18574 win=0 rtt=21.3 46 ms bytes from 207.46.197.115: flagsRA seq3 ttl=56 id=18587 win=0 rtt=21.1 |
Firewalk Router’s Gateway
利用IP TTL的機制來得知防火牆的設定與存在。
1. 這個方是主要利用 TTL 來間接知道網路中間有幾個節點。
2. 如果 port 是通的話,應該會回覆 ICMP_TIME_EXCEEDED。
如果 port 不同的話,就timeout。透過這個方式就可以知道網路截點過程中有哪些port 是通的。
使用nmap 測試結果範例
| firewalk: | HOP HOST PROTOCOL BLOCKED PORTS | 2 192.168.1.1 tcp 21-23,80 | udp 21-23,80 | 6 10.0.1.1 tcp 67-68 | 7 10.0.1.254 tcp 25 |_ udp 25 |
https://nmap.org/nsedoc/scripts/firewalk.html