協定棧指紋識別是一項強大的技術,能夠以很高的機率迅速確定作業系統的版本
基本介紹
- 中文名:協定棧指紋識別
- 外文名:Protocol stack fingerprint
概述,識別依據,ACK序號,TOS(服務類型),ICMP地址禁止請求,對FIN包的回響,虛假標記的SYN包,ISN(初始化序列號),ICMP錯誤信息,ICMP訊息引用,分段重組處理,MSS(最大分段尺寸),SYNFlood限度,
概述
協定棧指紋識別是一項強大的技術,能夠以很高的機率迅速確定作業系統的版本。雖然TCP/IP協定棧的定義已經成為一項標準,但是各個廠家,如微軟和RedHat等在編寫自己的TCP/IP協定棧時,卻做出了不同的解釋。這些解釋因具有獨一無二的特性,故被稱為“指紋”。通過這些細微的差別,可以準確定位作業系統的版本。
識別依據
以下是不同OS的網路協定棧的差異,這些差異可作為協定棧指紋識別的依據。
ACK序號
不同的OS處理ACK序號時是不同的。如果傳送一個FIN/PSH/URG數據包到一個關閉的TCP連線埠,大多數OS會把回應ACK包的序號設定為傳送的包的初始序號,而Windows和一些印表機貝iJ會傳送序號為初始序號加1的ACK包。
TOS(服務類型)
對於ICMP連線埠不可達訊息,送回包的TOS值也是有差別的。大多數TOS是0,而Linux是OxcO。
ICMP地址禁止請求
對於ICMP地址禁止請求,有些OS會產生相應的應答,有些則不會。會產生應答的系統有OpenVMS,MS Windows和SUN Solaris等。在這些產生應答的系統中,對分片ICMP地址禁止請求的應答又存在差別,可以做進一步的區分。
對FIN包的回響
傳送一個只有FIN標誌位的TCP數據包給一個打開的連線埠,Linux等系統不做回響;有些系統,例如MS Windows,CISCO和HP/UX等,則發回一個RESET。
虛假標記的SYN包
在SYN包的TCP頭裡設定一個未定義的TCP標記,目標系統在回響時,有的會保持這個標記,有的不保持。還有一些系統在收到這樣的包時會復位連線。
ISN(初始化序列號)
不同的OS在選擇TCP ISN時採用不同的方法。一些UNIX系統採用傳統的64K遞增方法,較新的Solaris,IRIX,FreeBSD,Digital Unix和Cray等系統則採用隨機增量的方法,Linux 2.0,OpenVMS和AIX等系統採用真隨機方法,Windows系統採用一種時間相關的模型。還有一些系統使用常數,如3Com集線器使用0x803,Apple LaserWriter印表機使用OxC 7001等。
ICMP錯誤信息
在傳送ICMP錯誤信息時,不同的OS有不同的行為。RFC 1812建議限制各種錯誤信息的傳送率。有的OS做了限制,有的沒有。
ICMP訊息引用
RFC規定 ICMP錯誤訊息可以引用一部分引起錯誤的原訊息。在處理連線埠不可達訊息時,大多數OS送回IP請求頭外加8個位元組。Solaris送回的稍多,Linux更多。有些OS會把引起錯誤訊息的頭做一些改動再發回來。例如,FreeBSD,OpenBSD,ULTRIX和VAXen等會改變頭的舊。這種方法功能很強,甚至可以在目標主機沒有打開任何監聽連線埠的情況下就識別出Linux和Solaris。
分段重組處理
在做IP包的分段重組時,不同 OS的處理方式不同。有些OS會用新IP段覆蓋舊的IP段,而有些則會用舊的IP段覆蓋新的IP段。
MSS(最大分段尺寸)
不同的OS有不同的默認MSS值,對不同MSS值的回應也不盡相同。如給Linux傳送一個MSS值很小的包,它一般會把這個值原封不動地返回,但其他系統會返回不同的值。
SYNFlood限度
在處理SYN flood時,不同的OS有不同的特點。如果短時間內收到很多的偽造SYN包,一些OS會停止接受新的連線。有的系統以支持擴展的方式來防止SYN Flood。