X remote ICMP based OS fingerprinting techniques by Ofir Arkin 武藤研究室 セキュリティグループINAS ポジション:スーパーサブ 直江健介
Table of Contents 1.Introduction 2.Remote Active Operating System Fingerprinting Methods Used By X 3.How Does X works? 4.The Future development of X and xprobe
1.Introduction – What is X? “ICMP Usage in Scanning”[1] ICMPを使った様々な手法を使ったActive OS Fingerprinting コンセプトは簡単で、高速で、効率的で、ホストを特定することに非常に強力である事。
1.1 Why X?(1/2) XprobeはTCP/IPの実装にかなり依存している他のツールとは対極にあるツールだ! 既存のツールは特にMicrosoft系を特定するときに大変 Win2K,NT4,MEや98/98SEのfingerprinting processに差異を見出すのが非常に困難 必要とするデータグラムの数(1~4パケット) 既存のツールと違いmalformedなpacketは使わないためIDSにも検出されにくい。(通常運用ではありえるデータグラムの形をしているため)
1.1 Why X?(2/2) 情報収集の形を変える!? 今まで 1.HostScanでAvailabilityをチェック 2.走ってるサービスを調べる 3.その下にあるOSを特定 ホストにknownなexploitがあるサービスがあればそこを突く >めでたく管理者権限をゲット、無許可アクセス可能 Xprobeだと ・HostScanの時点で何のOSかが分かる ・最高でも4パケットでどの脆弱性があるシステムか分かってしまう
2. Remote Active Operating System Fingerprinting Methods Used By X Xは[1]で発見したいくつかのremote active operating system fingerprinting methodsを利用している
2.1 ICMP Error Message Quoting Size ICMPのエラーメッセージは最低でもIPヘッダとエラーの原因となったパケットの最初の8byteのデータバイトを含む。 ほとんどのOSはこのエラーメッセージを吐く じゃあ、どのOSが一番長いエラーメッセージを吐くの?
2.2 ICMP Error Message Echoing Integrity(1/3) 普通、値が変わるのは何処よ? IPのTTL値 ヘッダが読まれるたびに一つ減るから IPヘッダのチェックサム TTLが減るたびにチェックサムは再計算される XはUDPデータグラムを閉じられたUDPポートに送ることでICMP Port Unreachable error messageを得て利用する
2.2 ICMP Error Message Echoing Integrity(2/3) IP Total Length Field OSのIPスタックは Offending packetに対するエコーパケットのIP total lengthに 20byte足す Offending packetに対するエコーパケットと一緒にオリジナルのパケットのIP total lengthから20byte減らす 正しい値をエコーする IPID ICMP Error message のIPIDの値を正しく返さない ICMP Error message のIPIDの値を正しく返す
2.2 ICMP Error Message Echoing Integrity(3/3) 3Bits Flags and Offset Fields 正しく返さない 正しく返す IP Header Checksum Offendingパケットに対するエコーバックのIPヘッダのチェックサムの計算ミスをする 0を返す 正しい値を返す UDP Header Chekcsum Offendingパケットに対するエコーバックのUDPヘッダのチェックサムの計算ミスをする 結論:いくつかのOSスタックはある値に関して正常にエコーしないものがある
2.3 Precedence Bits Issues with ICMP Error Messages 各IPデータグラムには8byteの“TOS Byte”がある TOS(Type of Service) Byteには三つのfieldがある Procedence filed 3bit長、IPデータグラムの優先度(8段階) 優先度の高いものは優先度の低いものより先に送られる TOS 4bit長、throughput,delay,reliability,IPデータグラムのルーティングcostを表現する MBZ(Must Be Zero) 1bit長、使用しない、0でなくてはいけない ルータやホストはこの部分を無視する ICMP Source Quench error messageが送信されているのならば、IP Procedence fieldの値はそれを誘発したIP Procedence fieldと同じでなくてはいけない。
2.4 DF Bit Echoing with ICMP Error Messages DF(Dont Frag) bit set, 分割禁止 ICMP error messageを誘発するOffending packetと一緒にDF bitをたてたら、どうなるであろうか? ICMP error message IP HeaderのDF bitもたつの?
2.5 IP Identification Field Value with ICMP Query Messages with Linux Kernel 2.4.x based machines Linux Kernel 2.4.5以上では直されているが、2.4.0-2.4.4ではICMP query requestとreply messageと共にIP Identification fieldが0にセットされる。
2.6 The IP Time-To-Live Field Value with ICMP Messages IP Headerがプロセスされるたびに1づつ減らされる RFC791ではこの値は秒で計る 最高で255秒=4.25分 0であればデータは破棄される 実際のルータなどは1秒以上かかるのもあれば一秒以下でプロセス終了する 実際の使われ方は無限ループに陥ったいわゆるゴーストパケットの破棄方法としてある(ようなもの)。また、古いデータが新しいデータが届いた後に届くのを防ぐ IP TTL値にはICMP query messeageとICMP query replyと二つがある TTLベースのOS FingerprintingではあらかじめTTL距離(何ホップか)を知らなくてはいけない
2.7 Using Code Field Values Different Than Zero with ICMP Echo Requests ICMP code filedを0以外のICMP Echo requestを送ると Microsoft系はICMP Echo replyとして0を返す それ以外はICMP Echo requestで使った値を返す Microsoft系のOSはRFC792[2] guidelineとは対照的な振る舞いをする。
2.8 TOS Echoing RFC1349はICMP messagesのType-of-Service値を規定、以下の三つに区別する ICMP error message(Destination Unreachable,Source Quench,Redirect,Time Exceeded,Parameter Problem) ICMP query message(Echo,Router Solicitation,Timestamp,Information request,Address Mask request) ICMP reply messages(Echo reply,Router Advertisement,Timestamp reply,Information reply,AddressMask reply) いくつかのOSはRFC1349を無視して、ICMP reply messagesのTOS値をICMP request messagesのTOS値を返さないものがある。
2.9 DF Bit Echoing With ICMP Query Messages ICMP query request messagesと一緒にDF bitを立てたらどうなるだろう? DF bitはICMP query request messageと一緒に立てられるものなのか?
2.10 The ?Who Answer What?? Approach OSを特定するのにICMP Query message requestを使う ICMP Echo request ICMP Timestamp request ICMP Information request ICMP Address Mask request
3. How does X works? アイデアは最初に静的な決定木を作る どう似たOSを特定のOSとして差別化(判定)するか まずUDPパケットをclosedなUDP destinationポートに送信(default:3132byte) ICMP Destination Unreachable Port Unreachable error messageを利用してOSFingreprintの違いを得る 送信したホストからリプライが無ければlinsten状態 UDPパケットをブロックするフィルタ機器があれば空いたUDPポートの真似をする(従ってreplyは受け取らない)
3. How does X works? アタック1 UDPパケットを閉じたUDPポートに対して送るとICMP Port Unreachable error messageを受け取れるので1パケットを送る事で判別。 返ってくればホストは生きてるかトラフィックが許されてる かえってこなければフィルタリング機器が存在しているだろう どうやって閉ざされたUDPポートを探すか IANAのポートリストなど http://www.Isi.edu/in-notes/Iana/assignments/port-numbers
3. How does X works? UDPデータグラムにDF bitをたてたものを送ることで2.4のノウハウを使う UDP queryは70byteのデータを持つ 対象ホストが何バイト返すかを見る Errorを返せば対象ホストに対してこの手法が使える 返さなければフィルタリングされているかホストが落ちている この値が0xc0であればLinux Kernel 2.0.x/2.2.x/2.4.xベースマシン、CISCO based router(IOS 11.x-12.x)、Extreme Networks Switch
3. How does X works? 前述したIP Headerの先頭8byte以上をICMP error messageに含むOS群はLinux Kernel 2.0.x/2.2.x/2.4.xである ネットワークデバイスはPrecedence bitに0x0cを立てたものに対しては先頭8byteしか返さない これでLinuxKernelとCISCO routerとExtreme Network switchを差別化できる
3. How does X works? Linux Kernel 2.0.xは初期IPTTL値を64にセットされる。Linux Kernel 2.2.x/2.4.xは初期IPTTL値を255にセット Linux Kernel 2.4.0-2.4.4のICMP queryのIP ID値は常に0 2.4.5から直された Kernel2.2x/2.4.5以上と2.4.0-2.4.4とに差別か出来る
3. How does X works? アタック2 ICMP Port Unreachable Error Messagesパケットにどのくらいのechoを返したかで判別 8byte返す 64byte返す 64byte以上返す 分かったことはfigure5の通り
3. How does X works? Sun Solaris 2.3-2.8,HPUX 11.x,MacOS 7.x-9.x ICMP Timestamp Requestを送信 リプライがあるもの>Sun Solaris 2.3-2.6 リプライの無いもの>HPUX 11.x,MacOS7.x-9.x アタック1で万が一Linux系が判別できなくてもここで判別が出来る
3. How does X works? アタック3 ICMP Error messageが返すIP total lengthの値で判別 正しく返す 正しい値より20byte少ない 正しい値より20byte多い OpenBSD 2.6-2.9,Apollo Domain/OS SR10.4,NFR IDS…..Figure7参照
3.正しい値より20byte少ない 返ってきたICMP error messageのUDPチェックサムで判別 Figure8を参照 正しい値 正しくない値 Figure8を参照
3.正しい値より20byte多い AIX,BSDI,NetBSD 1.x-1.2.xの判別 offendingUDPを送ったことでOSが返したICMP error messageの値で判別 まずIP Header checksumのインテグリティチェック AIXはechoされた値をmicalculateする、それ以外は正しく計算する 次にIP Identification field valueのインテグリティチェック BSDI 2.x,3.xとNetBSD1.x-1.2.xはlittle endianの問題で値を正しく返さない BSDI 4.x,NetBSD 1.x-1.2.xのbig endianとMacOS X 1.0-1.2は正しく返す
3. How does X works? 元のbranchに戻り話をするめる IP Total Length field value echoed coreectly 3bit flags(Unused,MF,DF)とoffset filedを使い判別 Figure10参照
3. How does X works? そしてWindowsファミリーを判別する どきどきしますねぇ~~
3. How does X works? Microsoft系列のOSを判別するには違うqueryを使う必要がある。 Code field value different than zero with ICMP Echo requests ICMP Echo Request with the Precedence Bits !=0, DF Bit Set,ICMP Code Field !=0 0が返るならMicrosoftWindowsFamily それ以外の値が返るなら、MSWindows系以外
3. How does X works? Windowの中でのバージョンの判別 TTL値での判別 Precedence Bitsでの判別 Windows95 TTLが128 Windows95以外 Precedence Bitsでの判別 !=0 98/98SE/ME/NTsp3-/NTsp4+ =0 Microsoft Windows 2000,SP1,SP2
3. How does X works? 98/98SE/ME/NTsp3-/NTsp4+の判別 ICMP Time Stamp Requestによる判別 Reply Windows98/98SE/ME No Reply Windows NT SP 3-,Windows NT SP 4+
3. How does X works? WIndows98/98SE/MEの判別 ICMP Address Mask Request Reply Windows98/98SE No Reply Windows ME Windows NT SP 3-/Windows NT SP 4+の判別 Windows NT SP 3- Windows NT SP 4+
3. How does X works? 残りは? DF Bit EchoingによるUltrix,Novell,BSD系の判別[with the request] 返す Ultrix,Novell 返さない それ以外のOS(BSD系) TTLが128のものがNovell TTLが255のものがUltrix
3. How does X works? OpenBSD2.1-2.3.x,2.4-2.5とNetBSD1.5,1.4.1,1.4の判別手法 Echoing Integrity CheckのUDP Checksum of the Offending Packet Echoed !=0 OpenBSD 2.4.x-2.5.x NetBSD 1.5,1.4.1,1.4 =0 OpentBSD 2.1.x-2.3.x
4. The Future development of X and xprobe AIとシグネチャベースのアプローチ Custom scenario Fail over mechanism 出来ないことから学ぶ Static logicである いくつかのOSと少ない数のネットワークデバイスしか判別できない ICMP/UDPベースであること Fingerprintのデータベースとの連携
4. The Future development of X and xprobe やりたいこと Fingerprintのデータベースとの連携 内部にAIを持たせて、Dynamicにロジックを構築 多くのネットワークデバイスの判別を可能にしたい 違うトポロジには違う手法を用いたい フィルタリングデバイスを使ったテストをしたい 実際のアプリケーションデータベースを使いUDPqueryと絡めたい もっと使えるNetwork mappingも含まれるべき
Demo