## 十二、 防火墻/IDS 躲避和哄騙
很多 Internet 先驅們設想了一個全球開放的網絡,使用全局的 IP 地址空間,使得任何兩個節 點之間都有虛擬連接。這使得主機間可以作為真正的對等體,相互間提供服務和獲取信息。人 們可以在工作時訪問家里所有的系統、調節空調溫度、為提前到來的客人開門。隨后,這些全 球連接的設想受到了地址空間短缺和安全考慮的限制。在 90 年代早期,各種機構開始部署防火 墻來實現減少連接的目的,大型網絡通過代理、NAT 和包過濾器與未過濾的 Internet 隔離。不 受限的信息流被嚴格控制的可信通信通道信息流所替代。
類似防火墻的網絡隔離使得對網絡的搜索更加困難,隨意的搜索變得不再簡單。然而,Nmap 提 供了很多特性用于理解這些復雜的網絡,并且檢驗這些過濾器是否正常工作。此外,Nmap 提供 了繞過某些較弱的防范機制的手段。檢驗網絡安全狀態最有效的方法之一是嘗試哄騙網絡,將 自己想象成一個攻擊者,使用本節提供的技術來攻擊自己的網絡。如使用 FTP bounce 掃描、Idle 掃描、分片攻擊或嘗試穿透自己的代理。
除限止網絡的行為外,使用入侵檢測系統(IDS)的公司也不斷增加。由于 Nmap 常用于攻擊前期 的掃描,因此所有主流的 IDS 都包含了檢測 Nmap 掃描的規則。現在,這些產品變形為入侵預防 系統(IPS),可以主動地阻止可疑的惡意行為。不幸的是,網絡管理員和 IDS 廠商通過分析報文 來檢測惡意行為是一個艱苦的工作,有耐心和技術的攻擊者,在特定 Nmap 選項的幫助下,常常 可以不被 IDS 檢測到。同時,管理員必須應付大量的誤報結果,正常的行為被誤判而被改變或 阻止。
有時,人們建議 Nmap 不應該提供躲閉防火墻規則或哄騙 IDS 的功能,這些功能可能會被攻擊者 濫用,然而管理員卻可以利用這些功能來增強安全性。實際上,攻擊的方法仍可被攻擊者利用 他們可以發現其它工具或 Nmap 的補丁程序。同時,管理員發現攻擊者的工作更加困難,相比較 采取措施來預防執行 FTP Bounce 攻擊的工具而言,部署先進的、打過補丁的 FTP 服務器更加有 效。
Nmap 不提供檢測和破壞防火墻及 IDS 系統的魔彈(或 Nmap 選項),它使用的是技術和經驗,這超 出了本參考手冊的范圍,下面描述了相關的選項和完成的工作。
`-f` (報文分段); `--mtu` (使用指定的 MTU)
-f 選項要求掃描時(包挺 ping 掃描)使用 小的 IP 包分段 其思路是將 TCP 頭分段在幾個 包中,使得包過濾器、 IDS 以及其它工具的檢測更加困難。必須小心使用這個選項,有 些系 統在處理這些小包時存在問題,例如舊的網絡嗅探器 Sniffit 在接收 到第一個分 段時會立刻出現分段錯誤。該選項使用一次,Nmap 在 IP 頭后將包分成 8 個字節或更小 因此,一個 20 字節的 TCP 頭會被分成 3 個 包,其中 2 個包分別有 TCP 頭的 8 個字節, 另 1 個包有 TCP 頭的剩下 4 個字 節 當然 每個包都有一個 IP 頭 再次使用-f 可使用 16 字節的分段(減少分段數量)。使用--mtu 選項可 以自定義偏移的大小,使用時不需要-f 偏移量必須 是 8 的倍數。包過濾器和防火墻對所有的 IP 分段排隊,如 Linux 核心中的 CONFIG_IP_ALWAYS_DEFRAG 配置項,分段包不會直接使用。一些網絡無法 承受這樣所帶 來的性能沖擊,會將這個配置禁止。其它禁止的原因有分段 包會通過不同的路由進入網 絡。一些源系統在內核中對發送的報文進行 分段,使用 iptables 連接跟蹤模塊的 Linux 就是一個例子。當使用類似 Ethereal 的嗅探器時,掃描必須保證發送的報文要分段。如 果主機操作系統會產 生問題 嘗試使用--send-eth 選項以避開 IP 層而直接 發送原始的 以太網幀。
`-D <decoy1 [,decoy2][,ME],...>` (使用誘餌隱蔽掃描)
為使誘餌掃描起作用,需要使遠程主機認為是誘餌在掃描目標網絡。 IDS 可能會報個某 個 IP 的 5-10 個端口掃描,但并不知道哪個 IP 在掃描以及 哪些不是誘餌。但這種方式 可以通過路由跟蹤、響應丟棄以及其它主動 機制在解決。這是一種常用的隱藏自身 IP 地址的有效技術。
使用逗號分隔每個誘餌主機,也可用自己的真實 IP 作為誘餌,這時可使用 ME 選項說明 如果在第 6 個位置或 更后的位置使用 ME 選項,一些常用 端口掃描檢測器(如 Solar Designer's excellent scanlogd)就不會報告 這個真實 IP 如果不使用 ME 選項 Nmap 將 真實 IP 放在一個隨機的位置
注意,作為誘餌的主機須在工作狀態,否則會導致目標主機的 SYN 洪水攻擊。 如果在網 絡中只有一個主機在工作,那就很容易確定哪個主機在掃描。也可 使用 IP 地址代替主 機名(被誘騙的網絡就不可能在名字服務器日志中發現)。
誘餌可用在初始的 ping 掃描(ICMP、SYN、ACK 等)階段或真正的端口掃描 階段。誘餌也 可以用于遠程操作系統檢測(-O)。在進行版 本檢測或 TCP 連接掃描時,誘餌無效。
使用過多的誘餌沒有任何價值,反而導致掃描變慢并且結果不準確。 此外,一些 ISP 會 過濾哄騙的報文,但很多對欺騙 IP 包沒有任何限制。
`-S <IP_Address>` (源地址哄騙)
在某些情況下,Nmap 可能無法確定你的源地址(如果這樣,Nmap 會給出 提示)。此時, 使用-S 選項并說明所需發送包的接口 IP 地址。
這個標志的另一個用處是哄騙性的掃描,使得目標認為是另 一個地址在進行掃描。可以 想象某一個競爭對手在不斷掃描某個公司! -e 選項常在這種情況下使用,也可采用-P0 選項。
`-e <interface>` (使用指定的接口)
告訴 Nmap 使用哪個接口發送和接收報文,Nmap 可以進行自動檢測, 如果檢測不出會給 出提示。
`--source-port <portnumber>; -g <portnumber>` (源端口哄騙)
僅依賴于源端口號就信任數據流是一種常見的錯誤配置,這個問題非常好理解。例如一個管理員部署了一個新的防火墻,但招來了很多用戶的不滿,因為他們的應用停止工作了。可能是由于外部的 UDP DNS 服務器響應無法進入網絡,而導致 DNS 的崩潰。FTP 是 另一個常見的例子,在 FTP 傳輸時,遠程服務器嘗試和內部用建立連接以傳輸數據。
對這些問題有安全解決方案,通常是應用級代理或協議分析防火墻模塊。但也存在一些 不安全的方案。注意到 DNS 響應來自于 53 端口,FTP 連接來自于 20 端口,很多管理員會 掉入一個陷阱,即允許來自于這些端口的數據進入網絡。他們認為這些端口里不會有值得注意的攻擊和漏洞利用。此外,管理員或許認為這是一個短期的措施,直至他們采取 更安全的方案。但他們忽視了安全的升級。
不僅僅是工作量過多的網絡管理員掉入這種陷阱,很多產品本身也會有這類不安全的隱 患,甚至是微軟的產品。Windows 2000 和 Windows XP 中包含的 IPsec 過濾器也包含了一 些隱含規則,允許所有來自 88 端口(Kerberos)的 TCP 和 UDP 數據流。另一個常見的例子 是 Zone Alarm 個人防火墻到 2.1.25 版本仍然允許源端口 53(DNS)或 67(DHCP)的 UDP 包 進入。
Nmap 提供了-g 和--source-port 選項(它們是等價的),用于利用上述弱點。只需要提供 一個端口號,Nmap 就可以從這些端口發送數據。為使特定的操作系統正常工作,Nmap 必 須使用不同的端口號。 DNS 請求會忽略--source-port 選項,這是因為 Nmap 依靠系統庫 來處理。大部分 TCP 掃描,包括 SYN 掃描,可以完全支持這些選項,UDP 掃描同樣如此
`--data-length <number>` (發送報文時 附加隨機數據)
正常情況下 Nmap 發送最少的報文 只含一個包頭 因此 TCP 包通常 是 40 字節 ICMP ECHO 請求只有 28 字節。這個選項告訴 Nmap 在發送的報文上 附加指定數量的隨機字節。操作 系統檢測(-O)包不受影響, 但大部分 ping 和端口掃描包受影響,這會使處理變慢,但 對掃描的影響較小。
`--ttl <value>` (設置 IP time-to-live 域)
設置 IPv4 報文的 time-to-live 域為指定的值。
`--randomize-hosts` (對目標主機的順序隨機排列)
告訴 Nmap 在掃描主機前對每個組中的主機隨機排列,最多可達 8096 個主機。這會使得 掃描針對不同的網絡監控系統來說變得不是很 明顯,特別是配合值較小的時間選項時更 有效。如果需要對一個較大 的組進行隨機排列,需要增大 nmap.h 文件中 PING_GROUP_SZ 的值,并重新編譯。另一種方法是使用列表掃描 (-sL -n -oN filename),產生目標 IP 的列表, 使用 Perl 腳本進行隨機化,然后使用-iL 提供給 Nmap。
`--spoof-mac <mac address,prefix,or vendor name>` (MAC 地址哄騙)
要求 Nmap 在發送原以太網幀時使用指定的 MAC 地址 這個選項隱含了 --send-eth 選項 以保證 Nmap 真正發送以太網包。MAC 地址有幾 種格式。如果簡單地使用字符串“0”, Nmap 選擇一個完全隨機的 MAC 地址 如果給定的字符品是一個 16 進制偶數(使用:分隔) Nmap 將使用這個 MAC 地址。 如果是小于 12 的 16 進制數字,Nmap 會隨機填充剩下的 6 個字節。如果參數不是 0 或 16 進 制字符串,Nmap 將通過 nmap-mac-prefixes 查找 廠商 的名稱(大小寫區分),如果找到匹配,Nmap 將使用廠商的 OUI(3 字節前綴),然后 隨機 填充剩余的 3 個節字。正確的--spoof-mac 參數有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和 Cisco.