概述
本文討論了如何查詢一臺主機的TCP/IP協(xié)議棧來收集寶貴的信息。首
先,我列舉了棧指紋之外的幾種“經(jīng)典的”操作系統(tǒng)辨識方法。然后
我描述了棧指紋工具的“工藝現(xiàn)狀”。接下來說明讓遠程主機泄漏其
信息的一些技術(shù)。最后詳述了我的實現(xiàn)(nmap),和用它獲得的一些
流行網(wǎng)站的操作系統(tǒng)信息。
理由
我認為辨識一個系統(tǒng)所運行OS的用處是相當(dāng)顯而易見的,所以這一節(jié)
會很短。最有力的例子之一是許多安全漏洞是OS相關(guān)的。試想你正在
作突破試驗并發(fā)現(xiàn)53端口是打開的。如果那是易遭攻擊的bind版本,
則你只有一次機會利用它因為失敗的嘗試會殺死守護程序。有了正確
的TCP/IP指紋,你將很快發(fā)現(xiàn)它運行的是'Solaris 2.51'或者'Linux 2.0.35'
而因此調(diào)整你的外殼代碼。
一個比較糟的例子是某人掃描500,000臺主機以找出它們運行什么OS
和哪些端口是打開的。然后等誰貼(說)有一個root漏洞在Sun的comsat
守護程序里,我們的小朋友能從人家的列表中找出 'UDP/512'和'Solaris 2.6'
這兩個詞,并立即得到了整頁整頁的可得到root特權(quán)的盒子。必須認
識到那是腳本小子(SCRIPT KIDDIE)的行為。你證明了你的無能而
且沒有人,甚至對方也,對你能找到?jīng)]有及時修補漏洞而易受攻擊的
.edu之事留有印象。人們也_較少_留有印象如果你用你新找到的通路
去破壞政府的web 站,換以一個自大的你如何強大而管理員們?nèi)绾斡?BR> 蠢的話的話。。
另一個用法是社會工學(xué)。假如你掃描目標公司而namp報告一個'Datavoice
TxPOR TPRISM 3000 T1 CSU/DSU 6.22/2.06'。則黑客就以'Datavoice
support'為名打電話并討論他們PRISM 3000的一些問題。“我們正要
公布一個安全漏洞,但希望我們現(xiàn)在的客戶先安裝補丁--我剛剛寄給
你...”一些天真的管理員會假定只有Datavoice指定的工程師才會對
他們的CSU/DSU知道的如此之多。
這個能力另一個潛在的用途是評價你要交易的公司。在選擇一個新ISP
前,掃描它們看用的是什么設(shè)備。那些“ 99美元/年”的買賣不向聽
起來那么好當(dāng)你發(fā)現(xiàn)它們用廉價的路由器并用一堆運行Windows 的機
器提供PPP 服務(wù)的時候。
經(jīng)典技術(shù)
棧指紋以獨特的方式解決OS辨識的問題。我想這個技術(shù)最有把握,但
現(xiàn)在有許多其他解決方案。遺憾的是,這仍是其中最有效的:
playground~> telnet hpux.u-aizu.ac.jp
Trying 163.143.103.12...
Connected to hpux.u-aizu.ac.jp.
Escape character is '^]'.
HP-UX hpux B.10.01 A 9000/715 (ttyp2)
login:
沒有必要在指紋上費這么大力氣,如果機器能大聲對世界說明它們運
行的是什么!遺憾的是,許多制造商交付帶有這類標志的_現(xiàn)有的_系
統(tǒng)而且許多管理員沒有關(guān)上它。[譯者:原文如此]只是因為還有其他
方法找出運行的OS(例如指紋),但不是說我們應(yīng)該通知每個嘗試連
接的笨蛋我們的OS和體系結(jié)構(gòu)。
依靠這個技術(shù)的問題是越來越多的人把標志關(guān)閉,許多系統(tǒng)不給出更
多信息,還有少數(shù)在標志中“說謊”。不過,你得到全部就是讀標志
方式的OS和OS版本檢查,如果你把上千美元花在商業(yè)的ISS 掃描器上
的話。下載nmap或queso代替它們可以替你省錢:)。
即使你關(guān)閉了標志,當(dāng)被詢問時許多應(yīng)用程序仍然很高興給出這類信
息。例如這個FTP服務(wù)器:
payfonez> telnet ftp.netscape.com 21
Trying 207.200.74.26...
Connected to ftp.netscape.com.
Escape character is '^]'.
220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready.
SYST
215 UNIX Type: L8 Version: SUNOS
首先,它給出了它默認的系統(tǒng)細節(jié)標志。然后如果我們給出'SYST'命
令它愉快地送回更多信息。
如果FTP的anon被支持,我們經(jīng)常可以下載/bin/ls或其他的二進制文
件而測定它所建造的體系結(jié)構(gòu)。
許多其他應(yīng)用程序?qū)π畔⑻S便了。比如web服務(wù)器:
playground> echo 'GET / HTTP/1.0
' | nc hotbot.com 80 | egrep '^Server:'
Server: Microsoft-IIS/4.0
playground>
Hmmm ... 我對這些家伙運行的感到驚訝。
其他經(jīng)典技術(shù)包括DNS 主機信息記錄(不太有效)和社會工學(xué)。如果
它在聽161/udp (snmp),用CMU SNMU工具包里的'snmpwalk'和'public'
通信名你肯定能獲得一大堆信息。
當(dāng)前指紋問題
Nmap不是第一個用TCP/IP指紋辨識OS的程序。Johan的通用的IRC欺騙
程序sirc包括了非常基本的指紋技術(shù)從版本3 (或更早)開始。它嘗
試把主機分為 "Linux","4.4BSD", "Win95", 或 "Unknown"幾類通過
幾個簡單TCP標志測試。
另一個這樣的程序是checkos,作者Shok對版本7終于有了信心在今年
一月公開發(fā)行。指紋技術(shù)和SIRC的完全一樣,甚至_代碼_都有許多同
樣之處。Checkos 在公開發(fā)行前私下流傳了很久,所以不知誰偷誰的。
但看起來誰都不信任對方。checkos增加的是telnet 標志檢查,有用
但有前面說的問題。[更新:Shok寫信來說checkos無意公開發(fā)行而這
就是為什么他沒有找SIRC要那些代碼的許可。]
Su1d也寫了一個OS檢查程序。他稱它叫SS其版本3.11可以辨識12個不
同的OS類型。我有些偏愛它因為他許可我的nmap程序一些網(wǎng)絡(luò)代碼:)。
然后是queso 。這是最新的而且對其他程序是一個巨大的飛躍。不僅
是因為它們推出了一些新測試,而且它們是首先(就我所見)把OS指
紋_移出_代碼的。其他掃描的代碼象:
/* from ss */
if ((flagsfour & TH_RST) && (flagsfour & TH_ACK) && (winfour == 0) &&
(flagsthree & TH_ACK))
reportos(argv[2],argv[3],"Livingston Portmaster ComOS");
相反,queso 把這些代碼移到一個配置文件顯然使更易擴展而且使增
加一個OS成為在指紋文件中增加幾行的簡單工作。
Queso由Savage,Apostols.org的高手之一,所寫。
以上所述所有問題中的一個問題是只有非常有限數(shù)量的指紋測試從而
限制了回答的詳細程度。我想知道不僅是'這臺機器是OpenBSD, FreeBSD,
或者NetBSD',我想確切知道它到底是那一個還有版本號。同樣,我希
望看到'Solaris 2.6' 而不僅僅是'Solaris'。為此,我對一系列指紋
技術(shù)進行了研究,它們將在下一節(jié)說明。
指紋方法學(xué)
有許多許多技術(shù)可以用來定義網(wǎng)絡(luò)棧指紋。基本上,你只要找出操作
系統(tǒng)間的不同并寫探測器查明它們。如果你合并足夠這些,你可以非
常細致的區(qū)分它們。例如nmap可以可靠分辨出Solaris 2.4 和Solaris 2.5-2.51
以及Solaris 2.6。他能分辨Linux內(nèi)核2.0.30到2.0.31-34或or 2.0.35。
這有一些技術(shù):
FIN 探測器 -- 這里我們送一個FIN包(或任何其他包不帶ACK 或SYN
標記)給一個打開的端口并等待回應(yīng)。正確的RFC793行為是不
響應(yīng),但許多有問題的實現(xiàn)例如 MS Windows, BSDI, CISCO,
HP/UX,MVS,和IRIX 發(fā)回一個RESET。許多現(xiàn)有工具利用這個技
術(shù)。
BOGUS 標記探測器 -- Queso 是我見過的第一個用這個聰明技術(shù)掃描
器。這個主意是設(shè)置一個未定義的TCP "標記"(64或128)在SYN
包的TCP頭里。Linux機器到2.0.35之前在回應(yīng)中保持這個標記。
我沒有發(fā)現(xiàn)其他OS有這個錯誤。然而,一些操作系統(tǒng)象是復(fù)位
連接當(dāng)它們得到一個SYN+ BOGUS包的時候。這一行為對辨識它
們有用。
TCP ISN 取樣 -- 這個主意是找出當(dāng)響應(yīng)一個連接請求時由TCP 實現(xiàn)
所選擇的初始化序列數(shù)式樣。這可分為許多組例如傳統(tǒng)的64K
(許多老UNIX機器),隨機增量(新版本的Solaris, IRIX, FreeBSD,
Digital UNIX, Cray, 和許多其他的),真“隨機”(Linux 2.0.*,
OpenVMS,新的AIX,等)。Windows 機器(和一些其他的)用一
個“時間相關(guān)”模型,每過一段時間ISN 就被加上一個小的固
定數(shù)。不用說,這幾乎和老的64K 行為一樣容易攻破。當(dāng)然我
喜歡的技術(shù)是"常數(shù)"。機器總是使用確切同樣的ISN :)。我已
經(jīng)在3Com的集線器(用0x803)和Apple LaserWriter打印機(
用0xC7001 )上看到了。
你也可以通過例如計算其隨機數(shù)的變化量,最大公約數(shù),以及
序列數(shù)的其他函數(shù)和數(shù)之間的差異再進一步分組。
要知道ISN 的生成和安全息息相關(guān)。想了解更多情況,聯(lián)絡(luò)在
SDSC的“安全專家”Tsutome Shimmy Shimomura,問他所知道
的。Nmap是我所見到的第一個用它來辨識OS的程序。
不分段位 -- 許多操作系統(tǒng)開始在送出的一些包中設(shè)置IP的"Don't Fragment"
位。這帶來多種性能上的好處(盡管它也可能是討厭的 -- 這
就是nmap的分段掃描對Solaris機器無效的原因)。無論如何,
不是所有的OS都這樣做而且另一些做的場合不同,所以通過注
意這個位我們甚至能收集目標OS的更多信息。在那兩個程序中
沒見過這個。


