390 likes | 526 Views
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.
E N D
X remote ICMP based OS fingerprinting techniquesby 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? • 背景技術>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) • ICMPエラーメッセージを返すときにスタックの実装でメッセージが若干違う • 普通、値が変わるのは何処よ? • 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 • OSのIPスタックは • 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ヘッダのチェックサムの計算ミスをする • 0を返す • 正しい値を返す 結論:いくつかの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多い • 正しい値より20byte少ない • OpenBSD 2.6-2.9,Apollo Domain/OS SR10.4,NFR IDS…..Figure7参照
3.正しい値より20byte少ない • 返ってきたICMP error messageのUDPチェックサムで判別 • 正しい値 • 0 • 正しくない値 • 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値での判別 • TTLが32 • 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+の判別 • ICMP Address Mask Request • Reply • Windows NT SP 3- • No Reply • 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も含まれるべき