防火牆是一種針對「未授權連線嘗試」的安全措施,旨在保護內部網路免受外部網路的威脅。
防火牆會「檢查每個網路封包」,並決定是否允許通過、忽略,或直接阻擋它。
這種機制的設計目的是「防止可能危險的未授權連線進入網路」,從而保障系統的安全。
簡單來說,IDS
的主要功能是監控網路流量,檢測可能的威脅或異常行為~
它偵測到問題會生成警報,但是是被動的,並不會主動阻止攻擊行為。
筆者 say say 念:
用一句話比喻,就是 IDS
有點草食啦 XD
IPS
則是能夠根據預設的規則阻擋或拒絕可疑流量,從而防止攻擊成功。
它能檢測到潛在威脅,也能主動阻止攻擊!
筆者 say say 念:
IPS
就有點肉食,比較主動阿捏~
Nmap
提供了多種「繞過防火牆規則和 IDS/IPS
系統」的方法,這些方法有助於攻擊者「躲避安全監測工具的檢測」。
筆者在這邊列出幾個「逃避防火牆檢測」方法~
通過將封包「分割成較小的片段」來進行傳輸,目的是「使防火牆或入侵偵測系統難以完全重組和分析完整的封包內容」。
當封包被分割後,安全系統需要重新組合這些片段才能進行完整的檢查,部分防火牆或 IDS/IPS
在面對大量小封包時可能無法正確分析,從而造成漏洞。
筆者 say say 念:
碎片化就有點像是「散彈攻擊」,當你被攻擊了要蒐集完整證據就比較困難,因為太多雜七雜八的東西砸到你身上 ><
sudo nmap -sS -p80 -f 10.129.2.28
這邊就是針對 10.129.2.28 的 port
80 來進行 -sS
SYN
掃描,並加上 -f
來啟用封包分片 ~
通過「偽造多個來源地址」進行掃描,從而混淆目標系統,讓目標難以確定實際的攻擊來源。
防火牆和 IDS/IPS
系統可能會看到多個不同的來源地址同時進行掃描,這會增加防禦方判斷真實攻擊者的困難~
Decoy
可以搭配 ACK
/ SYN
/ ICMP
掃描做使用 ~
筆者 say say 念:
誘餌就是透過「影分身之術」,讓別人眼花撩亂。
此範例生成 5 個隨機的 Decoy IP
地址,並將其中一個作為真實 IP
地址插入封包中 XD
sudo nmap 10.129.2.28 -p 80 -sS -Pn -n --disable-arp-ping --packet-trace -D RND:5
這邊用到了很多參數,稍微說明一下 ~
-p 80: 掃描目標的 80 端口。
-sS: 執行 SYN
掃描。
-Pn: 禁用 ICMP Echo
請求,假設主機在線。
-n: 禁用 DNS
解析。
--disable-arp-ping: 禁用 ARP ping
。
--packet-trace: 顯示所有發送和接收的封包。
-D RND:5: 生成 5 個隨機的 Decoy IP
地址,隱藏真實 IP
地址。
結果示意圖大概是長這樣 ~
SENT (0.0378s) TCP 102.52.161.59:59289 > 10.129.2.28:80 S ttl=42 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
SENT (0.0378s) TCP 10.10.14.2:59289 > 10.129.2.28:80 S ttl=59 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 210.120.38.29:59289 > 10.129.2.28:80 S ttl=37 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 191.6.64.171:59289 > 10.129.2.28:80 S ttl=38 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 184.178.194.209:59289 > 10.129.2.28:80 S ttl=39 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
SENT (0.0379s) TCP 43.21.121.33:59289 > 10.129.2.28:80 S ttl=55 id=29822 iplen=44 seq=3687542010 win=1024 <mss 1460>
RCVD (0.1370s) TCP 10.129.2.28:80 > 10.10.14.2:59289 SA ttl=64 id=0 iplen=44 seq=4056111701 win=64240 <mss 1460>
此輸出顯示了多個不同的 Decoy IP
地址發送封包的過程,其中 10.10.14.2 是實際的來源 IP
地址,隱藏在生成的 5 個隨機 IP
地址中。
還記得我們之前說的 Filtered
嗎?
這邊稍微說明一下 Filtered
狀態與防火牆的關係 ~
當端口顯示為filtered
(已過濾)時,這可能是因為防火牆設置了規則來處理特定的連接請求。
而防火牆的規則通常決定封包是被「丟棄」(drop
)還是「拒絕」(reject
)。
這邊分別詳細說明一下這兩種狀態~
封包直接被忽略,且不會返回任何回應,讓攻擊者無法得知主機的狀態。
會返回帶有 RST
(reset
)flag
的封包,並可能包含不同的 ICMP
錯誤代碼 ~
這些 ICMP
錯誤可能包括以下幾種:
網路無法連線(Net Unreachable
)
網路被禁止(Net Prohibited
)
主機無法連線(Host Unreachable
)
主機被禁止(Host Prohibited
)
端口無法連線(Port Unreachable
)
協議無法連通(Proto Unreachable
)
說了這麼多,分別就是與網路/主機/端口/協議相關的狀態 ~
TCP ACK
掃描只發送帶有 ACK
標誌的 TCP
封包,而不包含 SYN
標誌。
當目標主機收到 ACK
封包時,如果目標端口是開啟的或關閉的,都應該回傳一個帶有 RST
(重置)標誌的封包。這樣的行為讓掃描者可以根據 RST
封包的回應來推測該端口的狀態。
我們來看看 ACK
掃描的流程圖 ~
筆者 say say 念:
不過這邊要注意的是,當目標端口無論是開放還是關閉,主機都會回應一個帶有 RST
標誌的封包。這樣可以確認該端口是存在的,但並無法確定該端口是否真的開放。
相較之下,SYN
掃描就比較麻煩一些,它會發送帶有 SYN
標誌的封包以請求建立連線,也就容易被盯上 ><
總結 ACK
和 SYN
:
還記得筆者之前有提及 -sA
ACK
掃描相較 SYN
更為隱蔽嗎?
因為他只有傳送 ACK
的封包 ~ 看起來像是對現有連線的回應,而不是新連線的請求。
相較之下,SYN
掃描發送 SYN
封包以請求建立連線,而防火牆通常會對 SYN
封包設置更嚴格的規則容易攔截到它,而 ACK
封包容易通過。
特性 | SYN 掃描 | ACK 掃描 |
---|---|---|
隱蔽性 | 高,僅進行部分握手,通常被認為是 "半開" 掃描。 | 高,專門用來探測防火牆規則,較不容易被防火牆阻擋。 |
主要用途 | 直接檢查目標端口的狀態(開啟、關閉或過濾)。 | 探測防火牆的行為和規則,判斷流量是否被過濾。 |
掃描效率 | 快速且高效,能夠在短時間內掃描大量端口。 | 專注於檢查防火牆規則,相對於 SYN 掃描效率較低。 |
防火牆阻擋的可能性 | 可能被防火牆阻擋,但即使封包被阻擋,也能從回應推測端口狀態。 | 不容易被防火牆阻擋,因為 ACK 封包通常被視為已建立連線的一部分。 |
適用場景 | 適合直接掃描端口,快速檢查大量端口的開放狀態。 | 適合探測防火牆的規則,了解哪些端口被過濾或開放。 |
回應行為 | 開放端口會回應 SYN/ACK ,關閉端口會回應 RST 。 |
根據防火牆的規則,可能返回 RST ,也可能無回應。 |
有幾種測試防火牆的掃描方式,除了之前說的基本 SYN
掃描或是 ACK
掃描外,我們還可以使用手動來源 IP
掃描來指定來源 IP
或是來源 port
~
如果讀者想要指定來源,可以參考以下的指令 ~
sudo nmap 10.129.2.28 -n -Pn -p 445 -O -S 10.129.2.200 -e tun0
-S 10.129.2.200: 使用 IP
地址 10.129.2.200 進行掃描。
-e tun0: 指定要使用的網絡接口(這裡使用的是 tun0
)。
這個掃描技術利用 TCP
來源端口來繞過防火牆或 IDS
系統。如果目標防火牆允許來自特定端口的流量,你可以模擬來自該端口的封包,從而繞過防火牆規則。
sudo nmap 10.129.2.28 -p50000 -sS -Pn -n --disable-arp-ping --packet-trace --source-port 53
這邊有使用到 source port
53,在此多做說明 ~
--source-port 53: 使用來源端口 53 進行掃描,這常常被允許通過防火牆,因為它是 DNS
的標準端口。
說了這麼多掃描,其實就是根據讀者自身的需求去做使用 ~
如果讀者想要知道比較詳細的 port STATE,你可以使用 SYN (-sS) 掃描 ~
如果不 care 這麼多,只想知道防火牆是否允許 ACK 封包進入,就用 ACK (-sA) ><
需要大量測試端口,又怕被 ban 就去看之前說的 Nmap Performance
再來就是看你有沒有想要看特定資訊,就可以使用 -sV 查看 version 或是 -O 查看 OS
最後,就是若有想要看詳細封包的需求, --packet-trace 就開下去吧!
這篇東西真的有夠多...
最近發生好多事情,希望都能一一解決!
https://academy.hackthebox.com/