操作系統指紋識別(基於kali)

操作系統指紋識別

1 Banner抓取

2 TCP 和 ICMP 常規指紋識別技術

TCP數據報格式

ICMP首部格式

TTL與TCP窗口大小

FIN探測

BOGUS flag 探測

TCP ISN 抽樣

IPID 抽樣

TCP Timestamp

ACK值

ICMP錯誤信息

DHCP

3 數據包重傳延時技術

4 使用Nmap進行操作系統探測..

一般性探測

指定網絡掃描類型.

設置掃描條件

推測結果.

5 使用Xprobe2進行操作系統探測

6 使用p0f進行操作系統探測

7 使用miranda進行操作系統探測


1 操作系統指紋識別

識別目標主機的操作系統,首先,可以幫助我們進一步探測操作系統級別的漏洞從而可以從這一級別進行滲透測試。其次,操作系統和建築在本系統之上的應用一般是成套出現的,例如LAMP或者LNMP。操作系統的版本也有助於我們準確定位服務程序或者軟件的版本,比如windows server 2003 搭載的IIS爲6.0,windows server 2008 R2 搭載的是IIS7.5。

操作系統指紋識別技術多種多樣,這裏我簡要介紹我所知道的幾種常用技術,不會具體深入到細節中,若您感興趣可自己查閱資料。

1 Banner抓取

Banner抓取是最基礎、最簡單的指紋識別技術,而且在不需要其他專門的工具的情況下就可以做。操作簡單,通常獲取的信息也相對準確。

嚴格的講,banner抓取是應用程序指紋識別而不是操作系統指紋識別。Banner信息並不是操作系統本身的行爲,是由應用程序自動返回的,比如apache、exchange。而且很多時候並不會直接返回操作系統信息,幸運的話,可能會看到服務程序本身的版本信息,並以此進行推斷。

凡事皆有利弊,越是簡單的方法越容易被防禦,這種方法奏效的成功率也越來越低了。

先來看一個直接Banner抓取的例子。

這裏寫圖片描述

在上圖中,直接telnet 80端口,在返回的服務器banner信息中,看到“Server: Microsoft-HTTPAPI/2.0”的字樣。

在IIS中使用ISAPI擴展後,經常會看到這樣的Banner。下表可以幫助我們識別操作系統:

Server Header Value Windows Server Version
Microsoft-HTTPAPI/2.0 Windows 2003 Sp2, Windows 7, Windows 2008, Windows 2008 R2
Microsoft-HTTPAPI/1.0 Windows 2003

如果沒有ISAPI攔截,我們可能會看到如下圖的信息,

這裏寫圖片描述

準確的IIS版本,會幫助我們更準確的判斷操作系統,可以參考下表:

IIS Version Windows Server Version
IIS 5.0 Windows 2000
IIS 5.1 Windows XP
IIS 6.0 Windows 2003
IIS 7.0 Windows 2008, Windows Vista
IIS 7.5 Windows 2008 R2, Windows 7

對於asp.net站點,通常會看到“X-Powered-By”字樣,會指示.net 版本,但是這對判斷操作系統版本幫助不大。

其他web服務器如apache、nginx,除非直接輸出操作系統版本,否則根據服務程序版本無法推斷操作系統版本。配置不當的服務可能會輸出如下信息:

HTTP/1.1 200 OK

Date: Mon, 16 Jun 2003 02:53:29 GMT

Server: Apache/1.3.3 (Unix) (Red Hat/Linux)

Last-Modified: Wed, 07 Oct 1998 11:18:14 GMT

ETag: “1813-49b-361b4df6”

Accept-Ranges: bytes

Content-Length: 1179

Connection: close

Content-Type: text/html

有經驗的管理員都會修改banner或者禁止輸出banner信息,比如下面的測試:
這裏寫圖片描述
我們可以看到圖中目標站點並未輸出任何banner信息。

除了web服務器程序,很多ftp、smtp服務也會返回banner信息。在2.3節《服務程序指紋識別》一節中,還會講解Banner抓取,本節就簡要介紹到這裏。

2 TCP 和 ICMP 常規指紋識別技術

正常而言,操作系統對TCP/IP的實現,都是嚴格遵從RFC文檔的,因爲必須遵從相同的協議才能實現網絡通信。但是在具體實現上還是有略微的差別,這些差別是在協議規範之內所允許的,大多數操作系統指紋識別工具都是基於這些細小的差別進行探測分析的。

如果您不熟悉TCP/IP協議,那麼可以查詢資料或者跳過這一部分,不影響對工具的使用。

爲了節省篇幅,不影響實踐學習,我只是簡單列出使用的技術,並未深入。

TCP數據報格式

img

tcp 頭

中間的標誌位(flags)就是用於協議的一些機制的實現的比特位大家可以看到有6比特,它們依次如下:

 URG、ACK、PSH、RST、SYN、FIN。

 URG表示緊急指針字段有效;

 ACK置位表示確認號字段有效;

 PSH表示當前報文需要請求推(push)操作;

 RST置位表示復位TCP連接;

 SYN用於建立TCP連接時同步序號;

 FIN用於釋放TCP連接時標識發送方比特流結束。

源端口(Sequence Number)和目的端口:各爲16比特,用於表示應用層的連接。源端口表示產生數據包的應用層進程,而目的端口則表示數據包所要到達的目的進程。

序列號:爲32比特,表示數據流中的字節數。序列號爲首字節在整個數據流中的位置。初始序列號隨機產生,並在連接建立階段予以同步。

確認號:表示序號爲確認號減去1的數據包及其以前的所有數據包已經正確接收,也就是說他相當於下一個準備接收的字節的序號。

頭部信息:4比特,用於指示數據起始位置。由於TCP包頭中可選項的長度可變,因此整個包頭的長度不固定。如果沒有附加字段,則TCP數據包基本長度爲20字節。

窗口:16位,表示源端主機在請求接收端等待確認之前需要接收的字節數。它用於流量控制,窗口大小根據網絡擁塞情況和資源可用性進行增減。

校驗位:16位。用於檢查TCP數據包頭和數據的一致性。

緊急指針:16位。當URG碼有效時只向緊急數據字節。

可選項:存在時表示TCP包頭後還有另外的4字節數據。TCP常用的選項爲最大數據包(並非整個TCP報文)MSS。每一個TCP段都包含一個固定的20字節的段頭。TCP段頭由20字節固定頭和一些可選項組成。實際數據部分最多可以有65495(65535-20-20=65495)字節。

ICMP首部格式

img

icmp首部

對於上圖中的Data部分,不同的ICMP類型,會拆分成不同的格式,這裏就不一一介紹了。

TTL與TCP窗口大小

下表是幾個典型的操作系統的TTL和TCP窗口的大小數值。

Operating System Time To Live TCP Window Size
Linux (Kernel 2.4 and 2.6) 64 5840
Google Linux 64 5720
FreeBSD 64 65535
Windows XP 128 65535
Windows Vista and 7 (Server 2008) 128 8192
iOS 12.4 (Cisco Routers) 255 4128

產生上表中數據差別的主要原因在於RFC文檔對於TTL和滑動窗口大小並沒有明確的規定。另外需要注意的是,TTL即時在同一系統下,也總是變化的,因爲路由設備會修改它的值。

基於TTL與TCP窗口大小的操作系統探測需要監聽網絡,抓取數據包進行分析,這種方法通常被稱之爲被動分析。

FIN探測

在RFC793中規定FIN數據包被接收後,主機不發送響應信息。但是很多系統由於之前的固有實現,可能會發送一個RESET響應。比如MS Windows, BSDI, CISCO, HP/UX, MVS, 和IRIX。

BOGUS flag 探測

發送一個帶有未定義FLAG的 TCP SYN數據包,不同的操作系統會有不同的響應。比如Linux 2.0.35之前的系統會在響應包中報告未定義的FLAG。

TCP ISN 抽樣

TCP連接的初始序列號(ISN),是一個隨機值,但是不同的操作系統的隨機方式不一樣,還有的操作系統每次的ISN都是相同的。針對ISN做多次抽樣然後比對規律可以識別操作系統類型。

IPID 抽樣

IP標識是用來分組數據包分片的標誌位,和ISN一樣,不同的操作系統初始化和增長該標識值的方式也不一樣。

TCP Timestamp

有的操作系統不支持該特性,有的操作系統以不同的更新頻率來更新時間戳,還有的操作系統返回0。

ACK值

在不同場景下,不同的請求,操作系統對ACK的值處理方式也不一樣。比如對一個關閉的端口發送數據包,有的操作系統ACK+1,有的系統則不變。

ICMP錯誤信息

ICMP錯誤信息是操作系統指紋識別的最重要手段之一,因爲ICMP本身具有多個類型,而錯誤信息又是每個操作系統在小範圍內可以自定義的。

DHCP

DHCP本身在RFC歷史上經歷了1541、2131、2132、4361、4388、4578多個版本,使得應用DHCP進行操作系統識別成爲可能。

3數據包重傳延時技術

之所以把數據包延時重傳技術單獨拿出來,是因爲相對於上面說的技術,它屬於新技術,目前大多數系統都沒有針對該方法做有效的防禦。但是基於該技術的工具也不是很成熟,這裏希望引起讀者的重視或者激發你對該技術的熱情。

對於在2.2.2節中介紹的技術,很大程度上受到網絡環境、防火牆、入侵檢測系統的影響。那麼數據包重傳延時技術能解決這些問題嗎?

由於數據包丟失,或者網絡阻塞,TCP數據包重傳屬於正常情況。爲了識別重複的數據包,TCP協議使用相同的ISN和ACK來確定接收的數據包。

包重傳的延時由重傳定時器決定,但是確定一種合適的延時算法比較困難,這是源於以下原因:

確認信號的延遲在實際網絡環境中是可變的;

傳輸的分段或確認信號可能丟失,使得估計往返時間有誤。

TCP採用了自適應的重傳算法,以適應互連網絡中時延的變化.該算法的基本思想是通過最近的時延變化來不斷修正原有的時延樣本,RFC中並沒有明確具體如何執行。

由於不同操作系統會選擇採用自己的重傳延遲算法,這就造成了通過分析各系統重發包的延遲來判斷其操作系統類型的可能性,如果各操作系統的重傳延遲相互存在各異性,那麼就很容易將它們彼此區分開來。

由於此種技術,採用標準的TCP數據包,一般情況下可以有效的躲過防火牆和入侵檢測系統。但是目前基於此種技術的工具還很少。

4 使用Nmap進行操作系統探測

一般性探測

使用Nmap進行操作系統識別最簡單的方法爲使用-O參數,如下是我對內網掃描的幾個數據。

nmap -O 192.168.1.1/24

上面的命令表示對192.168.1.1 所在網段的C類255個ip進行操作系統版本探測。

對192.168.1.1的掃描結果(1.1是Tp-link路由器):

MAC Address: A8:15:4D:85:4A:30 (Tp-link Technologies Co.)

Device type: general purpose

Running: Linux 2.6.X

OS CPE: cpe:/o:linux:linux_kernel:2.6

OS details: Linux 2.6.23 - 2.6.38

Network Distance: 1 hop

對192.168.1.101的掃描結果(實際爲android系統手機):

MAC Address: 18:DC:56:F0:65:E0 (Yulong Computer Telecommunication Scientific(shenzhen)Co.)

No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).

TCP/IP fingerprint:

OS:SCAN(V=6.40%E=4%D=12/27%OT=7800%CT=1%CU=39712%PV=Y%DS=1%DC=D%G=Y%M=18DC5

OS:6%TM=52BD035E%P=x86_64-unknown-linux-gnu)SEQ(SP=100%GCD=1%ISR=109%TI=Z%C

OS:I=Z%II=I%TS=7)OPS(O1=M5B4ST11NW6%O2=M5B4ST11NW6%O3=M5B4NNT11NW6%O4=M5B4S

OS:T11NW6%O5=M5B4ST11NW6%O6=M5B4ST11)WIN(W1=7120%W2=7120%W3=7120%W4=7120%W5

OS:=7120%W6=7120)ECN(R=Y%DF=Y%T=40%W=7210%O=M5B4NNSNW6%CC=Y%Q=)T1(R=Y%DF=Y%

OS:T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=

OS:R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T

OS:=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=

OS:0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(

OS:R=Y%DFI=N%T=40%CD=S)

從上面的結果可以看出,nmap對android系統識別率不高。

對192.168.1.102的結果如下(實際系統爲windows 7 sp1):

Device type: general purpose

Running: Microsoft Windows 7

OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1

OS details: Microsoft Windows 7 SP0 - SP1

對192.168.1.106的探測結果如下(實際系統爲ios 5.0):

MAC Address: CC:78:5F:82:98:68 (Apple)

Device type: media device|phone

Running: Apple iOS 4.X|5.X|6.X

OS CPE: cpe:/o:apple:iphone_os:4 cpe:/a:apple:apple_tv:4 cpe:/o:apple:iphone_os:5 cpe:/o:apple:iphone_os:6

OS details: Apple Mac OS X 10.8.0 - 10.8.3 (Mountain Lion) or iOS 4.4.2 - 6.1.3 (Darwin 11.0.0 - 12.3.0)

對192.168.1.106的探測結果如下(實際爲蘋果一體機、windows7 sp1):

MAC Address: 7C:C3:A1:A7:EF:8E (Apple)

Too many fingerprints match this host to give specific OS details

對192.168.1.119的探測結果如下(實際爲windows server 2008 r2,vmware虛擬機):

MAC Address: 00:0C:29:AA:75:3D (VMware)

Device type: general purpose

Running: Microsoft Windows 7|2008

OS CPE: cpe:/o:microsoft:windows_7::- cpe:/o:microsoft:windows_7::sp1 cpe:/o:microsoft:windows_server_2008::sp1 cpe:/o:microsoft:windows_8

OS details: Microsoft Windows 7 SP0 - SP1, Windows Server 2008 SP1, or Windows 8

Network Distance: 1 hop

對192.168.1.128探測結果如下(centOS 6.4,VMware虛擬機):

MAC Address: 00:0C:29:FE:DD:13 (VMware)

Device type: general purpose

Running: Linux 3.X

OS CPE: cpe:/o:linux:linux_kernel:3

OS details: Linux 3.0 - 3.9

指定網絡掃描類型

nmap支持以下掃描類型:

l -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon

l -sN/sF/sX: TCP Null, FIN, and Xmas

l –scanflags : Customize TCP scan flags

l -sI

5 使用Xprobe2進行操作系統探測

Xprobe2是一款使用ICMP消息進行操作系統探測的軟件,探測結果可以和Nmap互爲參照。但是該軟件目前公開版本爲2005年的版本,對老的操作系統探測結果較爲準確,新系統則無能爲力了。

下面命令爲xprobe2簡單用法:

xprobe2 -v www.iprezi.cn

結果如下:
這裏寫圖片描述

6 使用p0f進行操作系統探測

p0f是一款被動探測工具,通過分析網絡數據包來判斷操作系統類型。目前最新版本爲3.06b。同時p0f在網絡分析方面功能強大,可以用它來分析NAT、負載均衡、應用代理等。

p0f的命令參數很簡單,基本說明如下:

l -f fname指定指紋數據庫 (p0f.fp) 路徑,不指定則使用默認數據庫。

l -i iface 指定監聽的網卡。

l -L 監聽所有可用網絡。

l -r fname 讀取由抓包工具抓到的網絡數據包文件。

l -o fname 附加之前監聽的log文件,只有同一網卡的log文件纔可以附加合併到本次監聽中來。

l -d 以後臺進程方式運行p0f ;

l -u user 以指定用戶身份運行程序,工作目錄會切換到到當前用戶根目錄下;

l -p 設置 –i參數指定的網卡爲混雜模式;

l -S num 設置API併發數,默認爲20,上限爲100;

l -m c,h 設置最大網絡連接數和同時追蹤的主機數 (默認值: c = 1,000, h = 10,000).

l -t c,h 設置連接超時時間

下面使用如下命令進行測試:

p0f -i eth0 –p

上面命令的含義爲監聽網卡eth0,並開啓混雜模式。這樣會監聽到每一個網絡連接,部分結果摘錄如下:

這裏寫圖片描述

p0f監聽結果1

這裏寫圖片描述
p0f監聽結果2

在p0f監聽結果2圖中,檢測的結果我windows7或8,對比下nmap的結果爲windows7,實際該機器系統爲 windows7 sp1。

這裏寫圖片描述

nmap檢測結果

這裏寫圖片描述

p0f監聽結果3

在p0f監聽結果3圖中,捕獲的數據是瀏覽器發送的請求數據,我們可以看到瀏覽器請求信息中“Windows NT 6.1; WOW64; Trident/7.0; rv:11.0”的字樣,從這段UserAgent中,可以看出發出請求的系統爲windows7 64位,IE11。

7 使用miranda進行操作系統探測

miranda工具是一個通過UPNP功能來探測主機信息的工具,並不限於探測操作系統。下面我們通過一個實例,演示如何使用miranda。

在終端輸入如下命令:

miranda -v -i eth0

上面的命令是指定打開網卡eth0,返回結果如下:
這裏寫圖片描述
miranda提示輸入開啓upnp的主機,現在我們不知道哪臺主機開啓了upnp,輸入命令“msearch”,會自動搜索upnp主機,

這裏寫圖片描述

接着我們會看到掃描到的upnp主機:

img

按 CTRL +C終止掃描,輸入host list。

img

可以看到蒐集的主機列表,然後使用host get [index]命令可以查看該主機的upnp設備列表。

img

使用host info [index]查看主機詳細信息。

img

從上圖信息可以看到,這是一臺TP-Link路由器。同樣的方法,查看一臺windows 7主機。

img

小結

本節大致羅列了操作系統識別的常用技術和典型工具。因爲本書是實踐性質的,所以沒有對指紋識別技術做深入的講解。

基於數據包延時重傳技術的工具,筆者只知道RING和Cron-OS,但是這兩款工具沒有集成到Kali Linux 中,同時也很久沒有更新,故沒有做介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章