Know Your Enemy:
Passive Fingerprinting
通過被動特征探測鑒別遠程主機
Honeynet Project
http://project.honeynet.org
http://www.xfocus.org
Last Modified: 24 May 2000
網絡安全的挑戰之一就是你需要了解攻擊者,要了解你存在的威脅並保護你自己的資源,你需要了解你的敵人,被動特征探測是了解攻擊者而不被攻擊者覺察的方法之一,雖然這種方法可能不是100%正確,但你會獲得一些令你詫異的結果。Craig Smith開發基本本文概念的工具passfing.另外suBTerrain crew也開發了siphon,一個可以被動探測端口和OS的工具。
Fingerprinting
傳統上,操作系統特征可以通過"積極性"的工具,如queso或者nmap,這些工具是在每一個操作系統上的IP堆棧有自己不同特性的原理上來操作的,每個操作系統響應通過的多種信息包。所以這些工具只要建立一個基於不同的操作系統對應不同的信息包的數據庫,然後,要判斷遠程主機的操作系統,發送多種不尋常的信息包,檢測其是怎樣響應這些信息包的,再與數據庫進行對比做出判斷。Fyodor的 nmap工具就是利用這種方法的,他也寫了一份具體的文檔。
而被動特征探測(Passive Fingerprinting )遵循相同的概念,但實現的方法不同。被動特征探測(Passive Fingerprinting )基於嗅探遠程主機上的通信來代替主動的去查詢遠程主機,所有你需要做的是抓取從遠程主機上發送的信息包。在嗅探這些信息包的基礎上,你可以判斷遠程主機的操作系統,就象主動特征探測一樣,被動特征探測(Passive Fingerprinting )也是由每個操作系統的有自己的IP堆棧特征,通過分析sniffer traces 和鑒別他們之間的不同之處,就可以判斷遠程主機的操作系統了。
信號
判斷主機的操作系統一般可以由4個方面來著手(當然也有其他信號存在):
TTL - 這個數據是操作系統對出站的信息包設置的存活時間。
Window Size - 是操作系統設置的窗口大小,這個窗口大小是在發送FIN信息包時包含的選項。
DF - 可以查看是否操作系統設置了不准分片位
TOS - 是否操作系統設置了服務類型
通過分析信息包這些因數,你可以判斷一個遠程的操作系統,當然探測到的系統不可能100%正確,也不能依靠上面單個的信號特征來判斷系統,但是,通過查看多個信號特征和組合這些信息,你可以增加對遠程主機的精確程度。下面是一個簡單的例子,下面是被探測的系統發送一個信息包,這個系統發起了一個mountd的漏洞攻擊,因此我想了解這個主機, 我現在不使用finger或者NMAP等工具,而想要了解被動接受到的信息,使用snort得到了下面的一些信號特征:
04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604
TCP TTL:45 TOS:0x0 ID:56257
***F**A* Seq: 0x9DD90553 Ack: 0xE3C65D7 Win: 0x7D78
根據上面的四條准則,我們可以達到下面的情況:
TTL: 45
Window Size: 0x7D78 (or 32120 in decimal)
DF: The Don't Fragment bit is set
TOS: 0x0
我們在比較信號特征數據庫,首先,我們查看使用在遠程系統上的TTL,從我們的獲得信息可以看到TTL是45,這多數表示它通過19跳才到達我們主機,因此原始的TTL應該是設置為64,基於這個TTL,這個信息包應該看來是由Linux和FREEBSD系統發來的(當然更多的系統信號特征需要放到數據庫中),這個TTL通過了traceroute遠程主機得到證實,如果你考慮到遠程主機在檢測你的traceroute,你可以設置你traceroute的time-to-live(默認是30跳),使用-m選項來設定到主機的跳數少1到2跳的數值,如,剛才的例子裡,我們可以使用traceroute -m 18來設置跳數為18跳,這樣做可以讓你看到到達主機的路徑而不碰到遠程主機。要更多關於TTL的信息,請查看這篇文章
下一步是比較窗口大小-Windows size,用Windows size來判斷是另一個非常有效的工具,特別是使用多大的窗口大小和改變大小的規律,在上面的信號特征中,我們可以看到其設置為0x7D78,這是LINUX通常使用的默認窗口大小。LINUX,FREEBSD和SOLARIS系統在完整的一個會話過程中窗口的大小是維持不變的,但是 ,部分Cisco路由器(如2514)和WINDOWS/NT的窗口是經常改變的(在一個會話階段),如果在初始化三次握手後衡量窗口大小是比較精確的,具體信息,可以看看Richard Stevens的"TCP/IP Illustrated, Volume 1" 20章.
多數系統使用DF位設置,因此這個是一個限定的值,但是有些系統如SCO和OPENBSD不使用這個DF標志,所以就比較容易的用來鑒別一些沒有這個DF位設置的系統,在更多的測試後,發現TOS也是一個限定的值,這就表示不是很多操作系統來判斷TOS,而是協議在使用這個值。TOS的判定需要更多的測試。因此,根據上面的信息,一些特殊的TTL值和窗口大小值,你可以通過信號數據庫來比較結果。
注意,與主動特征探測一樣,passive Fingerpinting有許多限制,首先,應用程序必須構建他們自己的與操作系統不同信號特征信息包(如NMAP,HUNT ,TEARDROP等)。其次,這種探測可以使用調整系統的信息包的值來逃避這種檢測,如可以用下面的方法來改變TTL值:
Solaris: ndd -set /dev/ip ip_def_ttl 'number'
Linux: echo 'number' > /proc/sys/net/ipv4/ip_default_ttl
NT: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
通過上面所說的方法結合,你就可以大致判斷出遠程操作系統的情況了。
其他信息特征和使用
上面的是討論了4個信號特征,但還有其他的特征可以被跟蹤,如一些初始化序列好,IP鑒定號碼(IP Identification numbers ),TCP或者IP的選項。如:Cisco路由器趨向由0開始IP鑒定號碼(IP Identification numbers )來代替隨機的指派號碼。也可以使用ICMP的有效負載來判斷,Max Vision discusses 使用ICMP有效負載類型或者TCP選項來鑒別遠程主機,舉個例子,微軟的ICMP REQUEST的有效負荷包含字母,而SOLAIRS或者LINUX的ICMP REQUEST有效符合包含數字和符號。又如TCP選項,選擇性的應答Acknowledgement選項SackOK 通常被WINDOWS和LINUX使用,但FREEBSD和SOLARIS這個選項不使用。MSS(最大數據段大小)也可以用來判斷,絕大多數系統使用1460 大小的MSS,NOVELL使用的是1368,而有些FREEBSD變種使用512大小的MSS,另一個信號特征是信息包狀態,什麼類型的信息包被使用,可以應用FYODOR的話說:
"例如,最開始的SYN請求對我來說是一塊金子(因為它會被回復),而RST信息包也有一些有趣的特征用來鑒定系統."其他多種特征和上面所說的特征組合能很好的判斷遠程操作系統。
被動特征探測可以用來其他一些用途,它當然也可以被攻擊者用來秘密的探測系統,如可以請求WEB服務器的WEB頁然後進行分析。這對於繞過一些IDS系統的檢測有很大的幫助。而且被動特征探測也可以用來判斷遠程代理防火牆,因為代理防火牆重建對客戶的連接,它有它自身的特征代碼。也可以同來在同一網絡中判斷其他系統,如某個公司全部是MICROSOFT或者SUN系統,就可能很快的使用這種方法來判斷是否有其他機器混在裡面。
構建數據庫
數據庫是通過對各種系統進行TELNET,FTP,HTTP,SSH等協議分析而得到的。還有更多其他的協議來進行擴充,如果你有任何特征碼增加到數據庫中去請發送到
[email protected]地址,我特別對TCP或者IP選項特征感興趣,或者一些沒有列入到數據庫中的操作系統。
總結
被動特征探測讓你隱秘的了解你的攻擊者,通過組合多種特征,你可以大體判斷遠程操作系統,感謝下面的人提供幫助和想法:
Fyodor
Max Vision
Marty Roesch
Edward Skoudis
Dragos Ruiu
Craig Smith
Peter Grundl
Subterrain Siphon Project
Dragos Ruiu
Craig Smith
Peter Grundl
Subterrain Siphon Project