網絡協議棧指紋原理論文

時間:2022-08-02 03:20:00

導語:網絡協議棧指紋原理論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

網絡協議棧指紋原理論文

摘要遠程探測計算機系統的OS(操作系統)類型、版本號等信息,是黑客入侵行為的重要步驟,也是網絡安全中的一種重要的技術。在探測技術中,有一類是通過網絡協議棧指紋來進行的。協議棧指紋是指不同操作系統的網絡協議棧存在的細微差別,這些差別可以用來區分不同的操作系統。本文研究和分析了此技術的原理和實踐,并提出了防止指紋探測的方法。

關鍵詞遠程OS探測協議棧指紋TCP/IP協議

1引言

探測和識別一個計算機系統在運行什么OS是黑客入侵的重要步驟。如果不知道目標系統在運行什么OS,就很難在目標系統上執行操作,也無法判斷是否存在安全漏洞,更談不上攻擊。

從管理和防范的角度來說,如果能減少被探測時泄漏的信息,就減少了黑客入侵行為的信息來源,使其入侵行為變得相當困難。因此,研究這方面的技術,對于提高系統的安全性和抵抗入侵的能力具有重要的意義。

2簡單的OS探測技術

在早期,黑客經常采用一些簡單的探測方法來獲取目標系統的信息。如通過telnet標題,ftp的標題和STAT命令,通過HTTP服務程序,DNS,SNMP等都可以得到很多有用信息。

但是,在長期的入侵和防入侵的斗爭中,通過簡單的手段即可獲得的信息越來越少了。管理員努力地減少通過網絡泄漏的信息,有時還修改OS的代碼,給出虛假的信息。在這種情況下,簡單的方法已經很難奏效了,因此出現了通過網絡協議棧指紋來識別OS的技術。

3網絡協議棧指紋原理

常用的網絡協議是標準的,因而從理論上講各個操作系統的協議棧應該是相同的。但是,在實踐中,各種操作系統的協議棧的實現存在細微的差異。這些差異稱作網絡協議棧的“指紋”。

對TCP協議族來說,這些差異通常表現在數據包頭的標志字段中。如windowsize、ACK序號、TTL等的不同取值。通過對這些差別進行歸納和總結,可以比較準確地識別出遠程系統的OS類型。

由于Internet廣泛使用TCP/IP協議族,因此下面的討論主要圍繞TCP/IP來進行。

4網絡協議棧指紋構成

下面列出了不同OS的網絡協議棧的差異,這些差異可作為協議棧指紋識別的依據。

1)TTL

TTL:TimeToLive,即數據包的“存活時間”,表示一個數據包在被丟棄之前可以通過多少躍點(Hop)。不同操作系統的缺省TTL值往往是不同的。

常見操作系統的TTL值:

Windows9x/NT/2000Intel128

DigitalUnix4.0Alpha60

Linux2.2.xIntel64

Netware4.11Intel128

AIX4.3.xIBM/RS600060

Cisco12.02514255

Solaris8Intel/Sparc64

2)DF位

DF(不分段)位識別:不同OS對DF位有不同的處理方式,有些OS設置DF位,有些不設置DF位;還有一些OS在特定場合設置DF位,在其它場合不設置DF位。

3)WindowSize

WindowSize:TCP接收(發送)窗口大小。它決定了接收信息的機器在收到多少數據包后發送ACK包。

特定操作系統的缺省WindowSize基本是常數,例如,AIX用0x3F25,Windows、OpenBSD、FreeBSD用0x402E。

一般地,UNIX的WindowSize較大。MSWindows,路由器,交換機等的較小。

4)ACK序號

不同的OS處理ACK序號時是不同的。如果發送一個FIN|PSH|URG的數據包到一個關閉的TCP端口,大多數OS會把回應ACK包的序號設置為發送的包的初始序號,而Windows和一些打印機則會發送序號為初始序號加1的ACK包。

5)ICMP地址屏蔽請求

對于ICMP地址屏蔽請求,有些OS會產生相應的應答,有些則不會。會產生應答的系統有OpenVMS,MSWindows,SUNSolaris等。在這些產生應答的系統中,對分片ICMP地址屏蔽請求的應答又存在差別,可以做進一步的區分。

6)對FIN包的響應

發送一個只有FIN標志位的TCP數據包給一個打開的端口,Linux等系統不響應;有些系統,例如MSWindows,CISCO,HP/UX等,發回一個RESET。

7)虛假標記的SYN包

在SYN包的TCP頭里設置一個未定義的TCP標記,目標系統在響應時,有的會保持這個標記,有的不保持。還有一些系統在收到這樣的包的時候會復位連接。

8)ISN(初始化序列號)

不同的OS在選擇TCPISN時采用不同的方法。一些UNIX系統采用傳統的64K遞增方法,較新的Solaris,IRIX,FreeBSD,DigitalUnix,Cray等系統采用隨機增量的方法;Linux2.0,OpenVMS,AIX等系統采用真隨機方法。Windows系統采用一種時間相關的模型。還有一些系統使用常數。如,3Com集線器使用0x803,AppleLaserWriter打印機使用0xC7001。

9)ICMP錯誤信息

在發送ICMP錯誤信息時,不同的OS有不同的行為。RFC1812建議限制各種錯誤信息的發送率。有的OS做了限制,而有的沒做。

10)ICMP消息引用

RFC規定ICMP錯誤消息可以引用一部分引起錯誤的源消息。

在處理端口不可達消息時,大多數OS送回IP請求頭外加8字節。Solaris送回的稍多,Linux更多。

有些OS會把引起錯誤消息的頭做一些改動再發回來。例如,FreeBSD,OpenBSD,ULTRIX,VAXen等會改變頭的ID。

這種方法功能很強,甚至可以在目標主機沒有打開任何監聽端口的情況下就識別出Linux和Solaris。

11)TOS(服務類型)

對于ICMP端口不可達消息,送回包的服務類型(TOS)值也是有差別的。大多數OS是0,而Linux是0xc0。

12)分段重組處理

在做IP包的分段重組時,不同OS的處理方式不同。有些OS會用新IP段覆蓋舊的IP段,而有些會用舊的IP段覆蓋新的IP段。

13)MSS(最大分段尺寸)

不同的OS有不同的缺省MSS值,對不同的MSS值的回應也不同。如,給Linux發送一個MSS值很小的包,它一般會把這個值原封不動地返回;其它的系統會返回不同的值。

14)SYNFlood限度

在處理SYNFlood的時候,不同的OS有不同的特點。如果短時間內收到很多的偽造SYN包,一些OS會停止接受新的連接。有的系統支持擴展的方式來防止SYNflood。

15)主機使用的端口

一些OS會開放特殊的端口,比如:WINDOWS的137、139,WIN2K的445;一些網絡設備,如入侵檢測系統、防火墻等也開放自己特殊的端口。

16)Telnet選項指紋

建立Telnet會話時,Socket連接完成后,會收到telnet守候程序發送的一系列telnet選項信息。不同OS有不同的Telnet選項排列順序。

17)Http指紋

執行Http協議時,不同的WebServer存在差異。而從WebServer往往可以判斷OS類型。WebServer的差異體現在如下方面:

1:基本Http請求

處理HEAD/Http/1.0這樣的請求時,不同系統返回信息基本相同,但存在細節差別。如,Apache返回的頭信息里的Server和Date項的排序和其它的服務器不同。

2:DELETE請求

對于DELETE/Http/1.0這樣的非法請求,Apache響應"405MethodNotAllowed",IIS響應"403Forbidden",Netscape響應"401Unauthorized"。

3:非法Http協議版本請求

對于GET/Http/3.0這樣的請求,Apache響應"400BadRequest",IIS忽略這種請求,響應信息是OK,Netscape響應"505HttpVersionNotSupported"。

4:不正確規則協議請求

對不規則協議的請求,Apache忽視不規則的協議并返回200"OK",IIS響應"400BadRequest",Netscape幾乎不返回Http頭信息。

18)打印機服務程序指紋

RFC1179規定了請求打印服務時須遵循的協議。

在實踐中,如果打印請求符合RFC1179的格式,不同OS表現行為相同。但當打印請求不符合RFC1179的格式時,不同OS就會體現出差別。如對一個非法格式的請求,Solaris這樣回應:

Reply:Invalidprotocolrequest(77):xxxxxx

而AIX系統這樣回應:

Reply:0781-201ill-formedFROMaddress.

大多數OS會給出不同的響應信息。個別OS會給出長度為0的回應。

對于Windows,則是通過專有的SMB協議(ServerMessageBlockProtocol)來實現打印機的共享。

19)網絡協議棧指紋實踐

在實踐中,網絡協議棧指紋方法通常這樣應用:總結各種操作系統網絡協議棧的上述細微差異,形成一個指紋數據庫。在探測一個系統的時候,通過網絡和目標系統進行交互,或者偵聽目標系統發往網絡的數據包,收集其網絡協議棧的行為特點,然后以操作系統指紋數據庫為參考,對收集的信息進行分析,從而得出目標系統運行何種OS的結論。

20)遠程OS探測的防護方法

由于協議棧指紋方法是建立在操作系統底層程序差別的基礎上的,所以要徹底防護指紋識別是很難的。但是有一些方法可以減少信息泄漏并干擾指紋識別的結果,在很大程度上提高系統的安全性。

21)檢測和攔截

對于主動向主機發送數據包的協議棧指紋識別,可以使用IDS檢測到異常包或異常的行為,從而加以記錄和攔截。

對于通過Sniffer來進行的協議棧指紋識別,這種方法是無效的。

22)修改參數

一些操作系統的協議棧參數,如缺省WINDOW、MSS、MTU等值,是可以修改的。在Solaris和Linux操作系統下,很多TCP/IP協議棧的參數可以通過系統配置程序來修改。在WINDOWS系統中,可以通過對注冊表的修改來配置一些協議棧參數。通過修改這些可設置參數的值,可以給指紋識別造成干擾,從而減少真實信息的泄漏。

23)修改程序

修改參數可以給指紋識別造成一些干擾,但是對于一些協議棧的行為特征,比如數據包序列號的生成方式,是無法通過參數來修改的。

對于這些行為特征,可以通過修改系統底層程序來實現,但是這么做通常需要付出較高的開發成本,并可能降低一些網絡功能。

在實踐中,可以綜合上述幾種防護方法,來達到比較好的安全性。

參考文獻

[1]Fyodor,《X-RemoteICMPBasedOSFingerprintingTechniques》,PhrackMagazineVolume54

[2]Fyodor《RemoteOSdetectionviaTCP/IPStackFingerPrinting》,PhrackMagazineVolume8

[3]LanceSpitzner《PassiveFingerprinting》,/focus/ids/articles/pfinger.html

[4]RFC1179:LinePrinterDaemonProtocol,NetworkPrintingWorkingGroup,L.McLaughlinIII,1990