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? • 背景技術>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も含まれるべき Demo
© Copyright 2024 ExpyDoc