1> 介紹 近年來,網絡安全評估軟件逐漸被網絡安全界所接收,並且在很大的範圍內 快速地傳播起來。遠程操做系統探測做爲評估軟件的一個部分,必須具有幾個條件: - 精確性:避免錯誤的探測結果; - 防火牆和***檢測系統的影響:避免影響(或被影響於)防火牆和***檢 測系統; - 文雅:低的網絡流通和無危險分段; - 靈巧:易於擴展標識數據庫和自動探測函數; - 速度:高速的指紋探測工具應該容許大範圍的網絡掃描。 我向你們介紹一個新的操做系統指紋探測工具-RING。在某些狀況下其餘的 工具也許會失敗,但RING所具有的良好的特性和至關準確的結果必定會讓你滿意的。 RING是一個開放源代碼的軟件,它主要是面向試驗性的概念和測試的目的。 2> 技術發展水平 2.1 操做系統探測技術的簡短歷史 - 獲取標識信息 在不少探測工具中都使用了此項技術來得到某些服務的標 識信息。它每每是經過對二進制文件的收集和分析來實現的。 - TCP分段(標準/非標準)響應分析 它是依靠不一樣操做系統對特定分段的 不一樣反應來區分的。比較流行的工具備Savage的QueSO和Fyodor的NMAP,他們都使用了很 多來自於這種技術的變種。 - ICMP響應分析 它是剛推出不久的一種技術。它經過發送UPD或ICMP的請 求報文,而後分析各類ICMP應答。Ofir Arkin的X-Probe就是使用的這種技術,在一般 狀況下,X-Probe工做的比較好,可是在防火牆阻塞某些協議時,獲得的結果就不那麼 盡如人意了。 - 初始化序列號(ISN)分析 在TCP棧中不一樣的exploits隨機產生,經過鑑 別足夠的測試結果來肯定遠程主機的操做系統。(詳情請見 Zalewski,M. (Apr,2001),Strange Attractors and TCP/IP Sequence Number Analysis) - 特殊的操做系統 拒絕服務一樣能夠用在操做系統指紋的探測上,而不只 僅是被***所使用。在一些很是特殊的狀況下,拒絕服務能探測到準確的結果。 2.2 堆棧查詢技術的細節 堆棧查詢技術經過測量遠程主機TCP/IP堆棧對不一樣請求的響應來探測系統。 大多數操做系統將會以特別的方式來響應特別的分段請求。 NMAP和QueSO就是基於這種技術的。它們產生一組TCP和UDP請求發送到遠程 目標主機的開放(未開放)端口。這時,遠程主機響應的有用信息就會被探測工具所接 收到,而後對其進行分析。 這些技術一般使安全評估軟件在較小的延遲內,獲得一些關於類型和版本之 類的信息。 在好幾方面,這種技術是如此的準確: - 每一個操做系統(即便打過某個補丁)一般會使用它們本身的IP棧實現。 - TCP/IP規範並非被嚴格的執行,每一個不一樣的實現將會擁有它們本身的特 性,這樣就爲成功探測帶來了可能。 - 規範可能被打亂,一些選擇性的特性被使用,而其餘的一些系統則可能沒 有使用。 - 某些私自對IP協議的改進也可能被實現,這就成爲了某些操做系統的特 性。 2.3 典型工具的一些限制 NMAP能夠識別500個不一樣的操做系統,但前提是網絡環境的穩定性,目標主 機必須開放一個TCP端口,一個關閉的TCP端口和一個關閉的UDP端口。若是不知足上面 的條件,探測結果的精確度就會有很大程度的下降。 當前的網絡系統,爲了安全起見,每每只向外打開一個可見的TCP端口,而 其餘的端口所接收到的數據報倒是被防火牆或包過濾裝置所過濾掉了。 在這樣的被防火牆保護的網絡環境下,基於ICMP協議,關閉的UDP端口和關 閉的TCP端口的探測工具,如NMAP,Xprobe工做的效果就不那麼好了。 3> TCP/IP協議的使用 TCP做爲一個數據傳輸協議是創建在IP協議之上的,它的定義能夠在RFC793 上找到。而TCP/IP協議則是在Internet上主要使用的網絡協議。 TCP的成功在於它的可靠性:對錯誤的探測和管理,數據流動和阻塞的控 制,重傳機制等。 爲了達到這樣的要求,TCP就成爲了面向鏈接的協議。它的運行機制以下: 1. 創建鏈接 2. 數據傳輸 3. 終止鏈接 TCP是創建在IP協議之上的,在發生網絡阻塞或路由問題時,IP協議不可以 提供可靠的端到端數據傳送。並且,IP是一個非鏈接的協議,因此鏈接的控制都是創建 在TCP層上的。 TCP協議在其頭部提供了對鏈接的多方面控制。序號和確認號是爲了更好的 管理數據報的重發並能很好的控制各類特別的錯誤情況。TCP數據報頭部碼元字段的 URG,ACK,PSH,RST,SYN和FIN是爲了管理TCP鏈接狀態而設置的。詳情請見RFC793。 爲了之後更好的理解RING的原理,如下列出TCP創建鏈接的三次握手: (Client主動向Server發起鏈接) Client Server |--------SYN--------->| |<------SYN-ACK-------| |--------ACK--------->| 數據報在網絡上傳輸的過程當中,某些分段可能在傳輸時丟失了,而理論上每 一個數據報都必須被接收方所確認。TCP本身就維持了一張已被確認數據報的列表。 注:若是某個數據報沒有在指望的時間內被接收到,那麼它將被看做丟失處 理。 並且,TCP會自動處理各類前後收到的數據報的真實順序,而後它將會以正 確的順序發送到上層系統。 網絡系統的阻塞將會致使數據報的丟失。任何網絡容納能力的大小都歸因於 物理底層的傳輸能力或路由的能力。 注:若是網絡阻塞發生了,那麼可能會有一些數據報被丟失了。而TCP又重 發了那些被丟失的數據報,這樣網絡的阻塞情況將會變的愈來愈嚴重。所以,若是網絡 阻塞發生了,數據報的重傳速度將會下降。 雖然TCP強調了這種機制,但在RFC793中並無利用什麼規則去計算確認數 據報之間延遲的大小。 4> 臨時的分析 4.1 原理 數據報的重傳爲咱們提供了另外一種分析遠程主機操做系統的方式。咱們將通 過度析目標主機在各次重傳數據報之間的延遲來判斷遠程主機操做系統的指紋。 這種方式已經在RFC793中被定義了,可是卻留下了一些利用的餘地。並且, 一些實現並無徹底遵循目前的標準。 爲了讓咱們瞭解這種方式,也就是體會超時機制的做用,咱們必須強調遠程 主機的IP棧要處在非標準的狀態下。 而這種情況能夠容易地被模仿,只須簡單的放棄對遠程主機SYN-ACK數據報 的確認就能夠達到。 經過測量重傳的兩個相鄰數據報之間的延遲,或觀察一些其餘的信息,好比 TCP的標記,序號,確認號,這些均可以獲得一些關於遠程主機操做系統的有用信息。 若是每一個操做系統都有其本身的特色,那麼創建一個典型的系統標識數據庫 將會成爲一種可能。無論測試的主機或網絡情況如何,操做系統將是惟一影響測試結果 的因素。所以,探測那些創建在不一樣主機上卻使用相同操做系統而獲得的結果,將會是 同樣的(前提是網絡情況比較穩定) 經過將目標主機指紋與操做系統指紋數據庫裏的相比較,將有可能知道遠程 主機所運行的操做系統。 新的操做系統的標識將會被很容易的紀錄下來,它們將會和操做系統的名字 聯繫起來。 4.2 DIY 這種操做系統指紋探測技術將會使用探測儀器的兩個部分。一個數據報過濾 裝置,好比我的防火牆,另外一個就是數據報監聽裝置。 探測儀器的配製:一種簡單的模仿網絡阻塞的方法就是在掃描主機上安裝一 個我的防火牆,並設置一些過濾規則來禁止接收全部來自目標主機的數據報。這時,數 據報監聽裝置將會接收到全部的來自目標主機的數據報,因爲防火牆的存在,掃描主機 不會發送任何確認信息,這樣就沒法創建起完整的TCP鏈接。在某個時間段以後,遠程 主機就會終止與掃描主機的任何關係。 測試過程:測試過程將由三個不一樣的步驟組成。 - 防火牆的設置 - 試圖與目標主機創建標準的鏈接 - 目標主機發送確認數據報 下面將詳細的描述實現的過程: - 選擇一臺主機,並確認某個存在的打開的端口。好比遠程主機爲 192.168.0.10,它的TCP 80端口是打開的(系統開啓的Web服務); - 配置防火牆使其阻塞掉全部的來自目標主機;(192.168.0.10)的數據 報。 - 監聽來自目標主機TCP80端口的全部數據報; - 向目標主機發送一個SYN數據報,試圖與之創建鏈接; - 分析全部來自目標主機的相鄰數據報之間的延遲 。 實際上,咱們測量的並非目標主機發送連續數據報之間的時間間隔,而是 咱們收到的來自目標主機連續數據報之間的時間間隔。若是這些時間間隔幾乎是固定 的,那麼咱們能夠大膽的假設他們是相等的。 下面是探測時數據報的流動狀況(A表示掃描主機,B表示被探測的目標主機 ,A與B之間的無箭頭直線表示沒有數據傳輸): A B |--------SYN--------->| |<------SYN-ACK-------|-------------- |---------------------| 時間間隔爲 t1 |<------SYN-ACK-------|-------------- |---------------------| 時間間隔爲 t2 |---------------------| |<------SYN-ACK-------|-------------- |---------------------| |---------------------| 時間間隔爲 t3 |---------------------| |---------------------| |<------SYN-ACK-------|-------------- 4.3 靜態分析 由於數據報可能經過了一些不穩定的網絡,好比Internet,這樣極可能接收 到的連續數據報之間的延遲(r_i)和它們被髮送時的延遲(s_i)就再也不相同了。 假如咱們收到來自目標主機的兩個連續的數據報時,測量到的延遲爲3.01 秒,可是頗有可能他們在發送時相互間的延遲爲3.0秒。問題在於某些系統實現時將3.2 秒做爲發送兩個連續數據報的時間延遲。而介於3.0秒和3.2秒之間的區間由於過小,以 至於沒法區分接收到的數據報到底是來自哪一種系統的。 爲了不這個問題,咱們可使用TCP的時間截選項,這樣就能夠更好的得 到什麼時候發送數據報的信息了。在每一個數據報裏都設置時間截選項將會提升探測結果的準 確度。不過,使用時間截選項也許會增長咱們判斷的難度,由於時間截選項可能會返回 一些不許確的時間數據。 這種方法就是創建在指紋的獲取以及與現有指紋數據庫比較的基礎之上的。 一般的測量「距離」的方式爲求得對應延遲之間的差值: Distance=∑| r_i - s_i | 其中r_i爲與接收到的第i個數據報相關的時間延遲,s_i爲指紋數據庫中的 相應順序數據報的時間延遲。 所以,探測到的最可能的操做系統將是求得「距離」最短時的指紋數據庫中 對應的操做系統。而「距離」的求得並無考慮TCP數據報頭部的一些重要標記(如 SYN,ACK,RST,FIN……)的影響。而這些標記每每又能探測到目標主機的運行狀態。 序號和確認號,這些信息卻能夠用來區分不一樣的系統實現方式。 5> RING的執行和現實結果 5.1 庫 爲了開發的簡便,RING使用了標準的C語言和UNIX下的一些庫文件。好比Dug Song's Libdnet library,Mike D. Schiffman Libnet library,Lawrence Berkeley national liboratory Libpcap library。 Libdnet庫被用來對防火牆進行控制,它提供了一個API容許控制某些UNIX的 防火牆(好比ipchains,ipfilters,ipf……) Libpcap一般被用來進行網絡的監聽,以及數據報的分析。 5.2 運行過程 RING對遠程主機的探測須要一些初始化參數,目標主機的IP地址,目標主機 上一個開放的TCP端口,掃描主機的IP地址以及用於監聽數據報的網絡接口。 而後,RING將會執行下面的步驟: - 源端口的選擇; - 使用libdnet,創建起本地過濾設施,阻擋來自目標主機的數據報; - 使用libpcap監聽收到的數據報; - 使用libnet,發送一個TCP SYN數據報到探測目標主機; - 在默認/調整過的延遲內監聽回送的數據報 - 將收到的回送數據報與以知的簽名相比較 5.3 實際的結果 在其餘工具沒法區分遠程主機系統時,RING仍然能提供很是準確的結果。例 如,一臺Win2k主機,一臺FreeBSD主機,即便它們是隱藏在一般配製的防火牆後面, RING也是有可能區分出他們來的。 Win2k和FreeBSD的實現有一個很是相識的地方,由於他們共享了相同的IP棧 技術。若是他們這兩個操做系統上只有一個開放的端口,NMAP在一般狀況下是沒法區分 二者的。 若是實現的技術很是的相識,咱們將會探測另外的Reset數據報作來進一步 的分析,這對RING來講應該是足以區分遠程主機的操做系統。 以下是Win2k和FreeBSD的比較: (如下各表中,各個系統對應的數據爲重傳數據報的時間延遲,以秒爲單 位。以下圖第一行數據: 1st表示遠程主機的第一次重傳,然後Windows 2k下面的3表 示window 2k系統的第一次重傳延遲爲3秒,再後的FreeBSD 4.4下面的3也表示FreeBSD 4.4系統第一次重傳的延遲爲3秒。) ____________________________________________ |Retries|===Windows 2k====|=FreeBSD 4.4=| |==1st==|========3========|======3======| |==2nd==|========6========|======6======| |==3rd==|=no more retries=|=====12======| |==4th==|=================|=====24======| ---------------------------------------------------- |=Reset=|==no reset sent==|=reset after 30 sec.=| ---------------------------------------------------- RING一樣能夠區分出相同操做系統的不一樣版本: ------------------------------------------------- |Retries|===Linux2.2.14===|====Linux 2.4====| |==1st==|=======3,5=======|======4,26=======| |==2nd==|=======6,5=======|========6========| |==3rd==|======12,5=======|=======12========| |==4th==|======24,5=======|=======24========| |==5th==|======48,5=======|======48,2=======| |==6th==|======96,5=======|=no more retries=| |==7th==|======120,5======|=================| |==8th==|=no more retries=|=================| ------------------------------------------------- |=Reset=|====no reset====|====no reset====| ------------------------------------------------- ------------------------------------------------- |Retries|===Windows 98====|===Windows 2k===| |==1st==|========3========|========3========| |==2nd==|========6========|========6========| |==3rd==|=======12========|=no more retries=| |==4th==|=no more retries=|=================| ------------------------------------------------- |=Reset=|=====no reset====|=====no reset====| ------------------------------------------------- 如下是在不一樣的設備上現實的區別: --------------------------------------------------------- |Retries|minolta printer| cisco router |3com switch| |==1st==|======4,5======|======2========|====3,5====| |==2nd==|======4,5======|======3,9======|====4,4====| |==3rd==|=======9=======|======5,9======|====4,4====| |==4th==|=======18======|no more retries|====4,4====| |==5th==|=======36======|===============|====4,4====| |==6th==|=======72======|===============|====4,4====| |==7th==|======144======|===============|====4,4====| |==8th==|======285======|===============|====4,4====| |==9th==|======576======|===============|====4,4====| |==10th=|======169======|===============|====4,4====| |==11th=|======169======|===============|====4,4====| |==12th=|======169======|===============|====4,4====| --------------------------------------------------------- |=Reset=|=====Reset=====|===no reset====|==no reset=| --------------------------------------------------------- 注意,通過一系列的重傳後,一些系統會發送一個RST數據報警告掃描主機 終止傳輸,進而中止重傳數據報。 6> 討論與擴充 6.1 優點 RING使用的技術的最大優點就是它只須要一個打開的端口。若是目標主機是 被防火牆所保護的,那麼極可能就只開了一個端口,其餘的端口則是被過濾了的。 在相同的防火牆配置狀況下,NMAP就不會那麼有效了,由於它是基於一些關 閉端口了,而這些關閉的端口每每是被過濾了。 並且,RING的技術是使用了一個標準的TCP數據報,它將不會對目標主機造 成任何的不利影響。 另外一方面,這種探測方式須要花比NMAP或Xprobe更多的時間。這是測量連續 數據報時間延遲的一個固有的缺點。 6.2 保護 有什麼辦法能夠阻止RING對操做系統指紋的探測呢?由於傳送的是標準的數 據報,所以目標主機不可能將之從一般的數據傳輸中區分開來。 數據報的重傳是顯而易見的,可是數據報的丟失和重傳在網絡上又是時常發 生的事情。 若是一個***檢測系統爲了防止網絡上過多的垃圾信息而停止了某個鏈接, 這樣將會下降TCP的錯誤率並恢復網絡的流通容量。 在某些操做系統中,能夠經過修改TCP/IP棧某些成員的數據進而達到避開 RING探測的做用。可是我並不推薦這種方法,由於它會嚴重威脅到TCP/IP棧的穩定性。 另外一個可能的方法是將主機隱藏於代理以後,或是使用防火牆技術來實現 SYN轉發或SYN網關技術。SYN轉發或SYN保護技術是專門用來對付SYN洪水***的。 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SYN轉發原理: (注:如下各圖中,相同名稱的爲同一臺主機,無箭頭的直線沒有任何意 義。以下圖:三個client均指同一客戶端,三個firewall均指同一個防火牆) client ------SYN ------> firewall ---------------- target client <--- SYN-ACK----- firewall ---------------- target 若是在某個時間段內防火牆沒有收到等待的ACK數據報,那麼這個鏈接將會 被停止: client <------RST------- firewall ---------------- target 相反,傳輸將會繼續進行: client ---------------- firewall -------SYN------> target client ------ACK------> firewall <--- SYN-ACK----- target client ---------------- firewall -------ACK------> target >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SYN網關原理: client ------SYN------> firewall -------SYN------> target client <----SYN-ACK---- firewall <-----SYN-ACK---- target 若是在某個時間段內防火牆沒有收到等待的ACK數據報,那麼它將會中斷本次 鏈接: client ---------------- firewall ------RST------> target 相反,鏈接將會繼續進行: client ------ACK------> firewall ------ACK------> target 6.3 未來的改進 在TCP的傳輸流中另外一種狀態也有相同的功能,試圖重發那些被僞裝丟棄的 數據報,這就是FIN_WAIT_1狀態。它能夠和前面的探測技術結合使用,也能夠用在對進 行了SYN保護系統的探測之中。這種有趣的技術能夠經過實施了SYN網關保護機制的網 絡,進而實現對真正目標主機的系統指紋探測。 --------------------------------------------- |Retries|===Linux2/4====|==Windows 2k===| |==1st==|======0,8======|=======3=======| |==2nd==|======1,3======|=======6=======| |==3rd==|======2,6======|======12=======| |==4th==|======5,2======|======24=======| |==5th==|=====10,5======|======48=======| |==6th==|=====20,8======|no more retries| |==7th==|=====41,6======|===============| |==8th==|no more retries|===============| --------------------------------------------- |=Reset=|===no reset===|====no reset===| --------------------------------------------- 7> 結論 RING 使用了一個創建在常規,無危險TCP傳輸上的新的操做系統探測技術。 它經過分析目標主機在各次重傳數據報之間的延遲來判斷遠程主機操做系統的指紋。如 果將其和其餘的操做系統探測技術相結合,應該會收到更好的效果。 Reference: 1 ) << Ring-full-paper >> by Intranode Research Team 2 ) << Remote OS detection via TCP/IP Stack FingerPrinting >> by Fyodor 3 ) << ICMP based remote OS TCP/IP stack fingerprinting techniques >> by Ofir Arkin & Fyodor Yarochkin
|