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