ICMP能幫你做什麼?談 OS 偵測技術(一)腦中有很多東西想寫,但說實話有時候真是力不從心,弄了個網站,從頭到尾說實話全部都是一手包辦,不像別人也許可以東貼西剪,四處貼些工具程式,弄些新聞報導就可以開站了........我自己是希望能夠多寫些自創的文章,盡量不要拿別人的來用........當然看到別人的好文章,我也一定會想辦法獲得授權轉貼給各位參考。
有關ICMP的應用及 OS 偵測技術的文章,其實我一直就有寫這方面內容的打算,但始終抽不出時間,之前網站有一篇「
javascript:if(c...#39[url \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='
http://freehomepage.taconet.com.tw/This/is/taconet/...files/200012/01/tos.htm']使用 TOS 位元組裡面未使用到的一個位元來判斷遠端使用的作業系統[/url] 」的原文,我想各位大概都沒注意.......因為我到現在都沒有收到有人問我這方面的問題,我想大概是大夥對這不敢興趣的緣故。
在那篇文章裡面,最主要是探討作業系統對於 TOS(Type-of-Service)位元所做的回應,當你使用 Ping 送出 一個 ICMP ECHO(Type 8)請求時,對方機器的 ECHO Reply(Type 0)回應裡面,不同作業系統對於 TOS位元所設定的 IP TTL 欄位值,都不一樣,我們可以用它來作為作業系統的判斷。
下面,我就用 ping 指令:「
ping -v 1 -n 1 <target ip> 」(
註一 ),配合 Netcraft 判斷,針對不同作業系統,它們對於 TOS 回應所作的 TTL 值,做了一些實驗,請各位看:
網站:www.hinet.net 作業系統:Solaris TTL值:249 網站:www.seed.net.tw 作業系統:Solaris TTL值:251 網站:www.sina.com 作業系統:Linux TTL值:241 網站:www.logitech.com.tw 作業系統:NT/Windows 98 TTL值:124 網站:www.trend.com.tw 作業系統:
NT4/Windows TTL值:121 作業系統:Windows 2000
TTL值:111 看到了嗎?做了幾個小實驗,我們發現很有趣的一些事情。
一、Linux、Solaris....這些 Linux/Unix 的機器,它們的 TTL 值大約都在 240~254 之間。
二、Windows系列的機器,它們的 TTL 值大約都在 110~128 之間。
所以由這個小技巧,我們可以用 Ping 指令,初步簡單的判斷一台 Internet 機器它是使用何種作業系統,如:
由 TTL 248 ,我可以初步斷定 Kimo 不是使用 Windows 作業系統當作伺服器,實際用 Netcraft 研判時,畫面如下:
原來它是使用 FreeBSD,這就是 ICMP 的應用。
當然只用一個 TTL 欄位來判斷作業系統的種類,實在不是什麼很精確的技巧,再說 Windows 所能用的 ICMP工具實在太少,而整個 ICMP 協定裡面又有許多其它的查詢可以應用(如 Time Stamp Request、Address Mask Request),不過我寫這篇文章的目的,是在講解目前一些應用在偵測作業系統程式的基本原理,我不是給你一條魚,而是教你如何用ICMP去釣魚的方法。
Lance Spitzner他也寫過一篇類似的文章(其實很多人都寫過),不過它的平台應該是在 Linux 下,而且它是用 Snort 來作為抓取相關資訊的研判工具(
註二 ),所以它可以用 TTL、WINDOW、DF、TOS 這四個欄位來研讀作業系統的特徵(不像我前面光靠 Ping 指令只能得到 TTL 的值),我把它的追蹤結果列出如下: #
# Lists of fingerprints for passive fingerprint monitoring
# Updated 23 May, 2000
#
# Mail your signatures to Lance Spitzner
#
# OS VERSION PLATFORM TTL WINDOW DF TOS
#--- ------- -------- --- ----------- -- ---
DC-OSx 1.1-95 Pyramid/NILE 30 8192 n 0
Windows 9x/NT Intel 32 5000-9000 y 0
NetApp OnTap 5.1.2-5.2.2 54 8760 y 0
HPJetDirect ? HP_Printer 59 2100-2150 n 0
AIX 4.3.x IBM/RS6000 60 16000-16100 y 0
AIX 4.2.x IBM/RS6000 60 16000-16100 n 0
Cisco 11.2 7507 60 65535 y 0
DigitalUnix 4.0 Alpha 60 33580 y 16
IRIX 6.x SGI 60 61320 y 16
OS390 2.6 IBM/S390 60 32756 n 0
Reliant 5.43 Pyramid/RM1000 60 65534 n 0
FreeBSD 3.x Intel 64 17520 y 16
JetDirect G.07.x J3113A 64 5804-5840 n 0
Linux 2.2.x Intel 64 32120 y 0
OpenBSD 2.x Intel 64 17520 n 16
OS/400 R4.4 AS/400 64 8192 y 0
SCO R5 Compaq 64 24820 n 0
Solaris 8 Intel/Sparc 64 24820 y 0
FTX(UNIX) 3.3 STRATUS 64 32768 n 0
Unisys x Mainframe 64 32768 n 0
Netware 4.11 Intel 128 32000-32768 y 0
Windows 9x/NT Intel 128 5000-9000 y 0
Windows 2000 Intel 128 17000-18000 y 0
Cisco 12.0 2514 255 3800-5000 n 192
Solaris 2.x Intel/Sparc 255 8760 y 0
## ADDITIONAL NOTES
#
# Cisco IOS 12.0 normally starts all IP sessions with IP ID of 0
# Solaris 8 uses a smaller TTL (64) then Solaris 7 and below (255).
# Windows 2000 uses a much larger Window Size then NT.
## Thanks to the following people for their fingprint contributions
#
# delta
# Craig
# Richard Tomkinson
不過有點好玩,我自己在 Windows 系統下,抓取到的特徵和它的數值有點不一樣,所以我本想寫一個 Windows系統下的 OS 偵測工具, 但是我能獲得作業系統的數據不夠多(我能力有限,弄不到這麼多系統來安裝),所以這項計畫只好作罷。不過利用ICMP來盼讀作業系統的原理倒是可以寫寫,因為這些東西蠻好玩的,誰說研讀 TCP/IP 通訊協定沒有用呢?
答案是:「你不會用,不是它沒用!」
還是只想「吃魚」嗎?
有時使用網路這些個所謂的工具程式,如果你能仔細研究它裡面所用的技巧,我相信比拿它去執行你所謂的「行俠仗義」,或是破壞人家網站的工作要有趣多了。
但很可惜......吃魚的人永遠 > 釣魚的人,而且什麼都不做,只想四處開口要魚的人更多........所以.......
「去它的擔擔麵!」