• 侵入技術(penetration technique)の調査と報告
– 脆弱性の調査や報告ではなく、脆弱性に潜む侵入技
術として利用できる可能性の調査と報告
• 侵入技術の提供
– 弱点を修正する技術ではなく、弱点を知る技術の提供
– セキュリティシステムを構築する技術ではなく、セキュ
リティシステムの動作を確認する技術の提供
• セキュリティ意識の啓蒙と向上
– 侵入技術を知ることで受ける危機感によるセキュリティ
意識の啓蒙と向上
紹介する侵入技術
• OS推測
• IP Fragment ID Scan
• 受動的攻撃
紹介する侵入技術
• OS推測
• IP Fragment ID Scan
• 受動的攻撃
• File Transfer Techniques
調査(情報収集)
検証(攻撃)
侵入技術の紹介
推測
• 素早く的確に弱点を見つけることを目的として行
う情報収集技術の一つ。
– insecure.orgのFyodor氏やSys-Security GroupのOfir
Arkin氏、TESO Security Groupなどが確立。
– OS推測として使われる技術は主に5種類
• Banner grabbing
• Telnetd fingerprinting • Identd fingerprinting • TCP stack fingerprinting
推測について
• サービスやアプリケーションなどが提供す
る情報に含まれているバージョン情報の収
集。
• 比較的容易に収集できるが、殆どは設定
ファイルの変更等で隠蔽や偽装が可能。
そのため情報の信頼性は低い。
の一例
• telnet (port:23)
telnetコマンドなどで接続すると表示される。
(例)
# telnet 192.168.1.23
Red Hat Linux release 6.0 (Hedwig)
Kernel 2.2.5-15 on an i586
推測について
• Telnet接続を確立する際に行われる交渉
(Negotiation)の初期値が、各OSごとに異
なっていることを利用したOS推測。
• Telnet daemonへの接続が必要。
• TESO Security Groupが検証用ツール
telnetfpを公開。
の一例
• Netcatを使ってTelnet daemon(port:23)に接
続すると交渉(Negotiation)が表示される。
(例)
# nc -n -o telnet_hexdump.log 192.168.1.23 23
#‘ ← この部分
< telnet_hexdump.log >
ff fd 18 ff fd 20 ff fd 23 ff fd 27
255 253 24 255 253 32 255 253 35 255 253 39
↑この値をFingerprintとして利用
の
Linux DO: 255 253 24 255 253 32 255 253 35 255 253 39 DONT: 255 250 32 1 255 240 255 250 35 1 255 240 255 250 39 1 255 240 255 250 24 1 255 240 FreeBSD 4.1-STABLE DO: 255 253 37 DONT: 255 250 37 1 6 SunOS 5.6 DO: 13 10 77 97 115 116 101 114 46 13 10 DONT: 255 251 3 Windows 2000 DO: 255 253 37 255 251 1 255 253 3 255 253 31 255 253 DONT: 255 250 37 1 15推測について
• 各OSに初期インストールされるIdent
daemonのバージョンが異なっていることな
どを利用したOS推測。
• Ident daemonへの接続が必要。
• TESO Security Groupが検証用ツール
ldistfpを公開。
の一例
• telnetコマンドなどでauth(port:113)に接続し
てVERSIONと入力することで表示される。
(例)
# telnet 192.168.1.23 113
VERSION
0 , 0 : X-VERSION : 2.8.5 (Compiled: 22:13:48 Mar 21
1999)
の
FreeBSD i386 4.2-STABLE
"Compiled: 11:18:59 Oct 23 2000" "pidentd 2.8.5" 1
SunOS 5.8
"UNKNOWN-ERROR" "unknown" 0
RedHat i386 6.0
"Compiled: 22:13:48 Mar 21 1999" "pidentd 2.8.5" 1
HP-UX 11.00
"2.7.4" "pidentd 2.7.4" 0
Debian i386 2.2
推測について
• OSごとにTCP/IPの実装が異なっているこ
とから、使用される初期シーケンス番号の
特徴や、多種のパケットを送信した際の返
信パケット種類とフラグの設定、windowサ
イズなどの情報を利用したOS推測。
• 特異なパケットを多数送信するので、検知
が容易。またダイナミックパケットフィルタ
リング越しでの推測は困難。
• 9種類のテストを用いてOSを推測するので、
他のOS推測より信頼性が高い。
• Insecure.orgで公開されているポートスキャ
ナNMAPのOS推測機能が有名。
の一例
• ポートスキャナNMAPのOS推測オプション(-O)を
設定したポートスキャンを行うことで、容易にOS
推測を行うことが可能。
(例) # nmap -n -sS -O 192.168.1.23 Interesting ports on (192.168.1.23):(The 1520 ports scanned but not shown below are in state: closed) Port State Service
21/tcp open ftp 23/tcp open telnet
TCP Sequence Prediction: Class=random positive increments Difficulty=3080148 (Good luck!)
の仕組み
• 9種類のテストを行い、それぞれのテストで得た情報から推測。 TSeq(初期シーケンス番号テスト) T1(OpenPortにSYNパケットを送った場合の返信内容テスト) T2(OpenPortにNULLパケットを送った場合の返信内容テスト) T3(OpenPortにSYN|FIN|URG|PSHパケットを送った場合の返信内容 テスト) T4(OpenPortにACKパケットを送った場合の返信内容テスト) T5(ClosePortにSYNパケットを送った場合の返信内容テスト) T6(ClosePortにACKパケットを送った場合の返信内容テスト) T7(ClosePortにFIN|URG|PSHパケットを送った場合の返信内容テス ト) PU(UDPを利用した'port unreachable'messageテスト)• nmap-os-fingerprintsファイルまたはNMAPのデ
バッグ機能(-d)を設定すれば表示される。
OS Fingerprint: TSeq(Class=RI%gcd=1%SI=4C23BD) T1(Resp=Y%DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENN TNW) T2(Resp=N) T3(Resp=Y%DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENN TNW) T4(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=) T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=) T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=) T7(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E %RIPCK=E%UCK=E%ULEN=134%DAT=E)推測について
ICMP responses based TCP/IP stack
fingerprinting
ICMP responses based TCP/IP stack fingerprinting
• 各種ICMPパケットを送信した際の返信さ
れるICMPパケットや、閉じているUDPポー
トに対してUDPパケットを送信した際の返
信されるICMP不達通知(type 3)パケットの
特徴からOSを推測。
• UDPパケットに対して返信されるICMP不
達通知パケット及び各種ICMPパケットが、
推測行為を行う側に到達することが必要。
ICMP responses based TCP/IP stack fingerprinting
• OSによっては数回のパケット送信で推測
可能なため、検知や遮断が困難。
• Sys-Security Groupが検証用ツールとして
Xを公開。
Sys-Security Group
( http://www.sys-security.com/html/projects/X.html )
ICMP responses based TCP/IP stack fingerprinting
# x -v 192.168.1.1 X probe ver. 0.0.1p1 ---Interface: eth0/192.168.1.2 LOG: Target: 192.168.1.1 LOG: Netmask: 255.255.255.255 LOG: probing: 192.168.1.1TEST: UDP to 192.168.1.1:32132 [98 bytes] sent, waiting for reponse.
TREE: Cisco IOS 11.x-12.x! Extreme Network Switches.Linux 2.0.x!2.2.x!2.4.x. TREE: Linux kernel 2.0.x!2.2.x!2.4.x! Based.
TREE: Linux kernel 2.2.x!2.4.x! Based.
TEST: ICMP echo request to 192.168.1.1 [68 bytes] sent, waiting for reponse. TREE: ICMP echo/echo reply are not filtered
ICMP responses based TCP/IP stack fingerprinting
の仕組み
• 返信されるICMPパケットから以下の値を調べる
ことでOSを推測。
– IP total length field – IP ID
– 3 bits flags and offset – IP header checksum
– UDP header checksum (in case of UDP datagram) – Precedence bits
– DF bits echoing
– IP ID filend (linux 2.4.0 - 2.4.4 kernels)
– IP ttl field (ttl distance to the target has to be precalculated to guarantee accuracy).
ICMP responses based TCP/IP stack fingerprinting
– TOS field• An ICMP error message is always sent with the default TOS (0x0000) • An ICMP request message may be sent with any value in the TOS • An ICMP reply message is sent with the same value in the TOS – ICMP Error Message Quoting Size:
– ICMP error Message echoing integrity
– Using difererent from zero code fields in ICMP echo requests – Using DF bit echoing with ICMP query messages
– Other ICMP messages: • ICMP timestamp request • ICMP Information request • ICMP Address mask request
侵入技術の紹介
• ポートスキャンの送信元IPアドレスの隠蔽や、パ
ケットフィルタリングの回避に利用する侵入技術
の一つ。
• hping.orgのSalvatore Sanfilippo氏が確立。
• 検証用ツールとしてhping.orgのhping2や、
insecure.orgのNMAPがある。
Insecure.org ( http://www.insecure.org/nmap/ )
hping.org ( http://www.hping.org/ )
• IP Fragment ID Scanは次の2点に着目して
対象ホストのポートの開閉を判断。
– フラグメント化されたIPパケットの再構築に利
用されるID(Identification)が、殆どのOSで推
測が容易。
– SYN+ACKパケットやRST+ACKパケットに対
するレスポンスの有無。
• IP Fragment ID Scanを行うには、次の3台
が必要。
– ポートスキャンを行うScanner host
– ポートスキャンの結果を受信するReceiver host
– ポートスキャンの対象となるVictim host
• Receiver hostにはIDが推測しやすいホスト
を選ぶ。
の一例
• NMAPのidle scanオプション(-sI)を設定するだけ
でIP Fragment ID Scanが可能。
(例)
# nmap -n -P0 -sI 192.168.1.12 192.168.1.45
Idlescan using zombie 192.168.1.12 (192.168.1.12:80); Class: Broken little-endian incremental
Interesting ports on (192.168.1.45):
(The 1546 ports scanned but not shown below are in state: closed) Port State Service
135/tcp open loc-srv
139/tcp open netbios-ssn
の仕組み
• IP Fragment ID ScanはScanner hostが
Receiver hostのIPアドレスに偽装して
Victim Hostにポートスキャンを行い、
Victim Hostから返信されるパケットが
Receiver hostのIDに及ぼす影響の有無を
検出することで成立。
の仕組み
• ScannerからReceiverへID検出用SYNパケットを連続送信。SYN
SYN+ACK
Scanner host
192.168.1.2
Receiver host
192.168.1.1
Victim host
192.168.1.17
の仕組み
• hping2を使ったID検出(Scanner ⇔ Receiver)
(例)
# hping2 -n -r -S 192.168.1.1 -p 80
eth0 default routing interface selected (according to /proc)
HPING 192.168.1.1 (eth0 192.168.1.1): S set, 40 headers + 0 data bytes
46 bytes from 192.168.1.1: flags=SA seq=0 ttl=128 id=55829 win=8576 rtt=1.3 ms
46 bytes from 192.168.1.1: flags=SA seq=1 ttl=128 id=+256 win=8576 rtt=1.0 ms
46 bytes from 192.168.1.1: flags=SA seq=2 ttl=128 id=+256 win=8576 rtt=1.0 ms
46 bytes from 192.168.1.1: flags=SA seq=3 ttl=128 id=+256 win=8576 rtt=1.0 ms
46 bytes from 192.168.1.1: flags=SA seq=4 ttl=128 id=+256 win=8576 rtt=1.0 ms
の仕組み
• ReceiverのIPに偽装してScannerからVictimにSYNパケット送信。SYN
SYN+ACK
Scanner host
192.168.1.2
Receiver host
192.168.1.1
Victim host
192.168.1.17
SYN
src:192.168.1.1
dst:192.168.1.17
dst-port:80
の仕組み
• Victimは受け取ったSYNパケットのレスポンスをReceiverに送信。SYN
SYN+ACK
Scanner host
192.168.1.2
Receiver host
192.168.1.1
Victim host
192.168.1.17
SYN+ACK
or
RST+ACK
の仕組み
• Victimは受け取ったSYNパケットのレスポンスをReceiverに送信。SYN
SYN+ACK
Scanner host
192.168.1.2
Receiver host
192.168.1.1
Victim host
192.168.1.17
SYN+ACK
↓
RSTを返信
RST+ACK
↓
反応しない
の仕組み
• Victimの80番ポートが開いている場合
46 bytes from 192.168.1.1: flags=SA seq=30 ttl=128 id=+256 win=8576 rtt=1.1 ms
46 bytes from 192.168.1.1: flags=SA seq=31 ttl=128 id=+512 win=8576 rtt=1.6 ms
46 bytes from 192.168.1.1: flags=SA seq=32 ttl=128 id=+256 win=8576 rtt=1.5 ms
• Victimの80番ポートが閉じている場合
46 bytes from 192.168.1.1: flags=SA seq=11 ttl=128 id=+256 win=8576 rtt=1.1 ms
46 bytes from 192.168.1.1: flags=SA seq=12 ttl=128 id=+256 win=8576 rtt=1.1 ms
46 bytes from 192.168.1.1: flags=SA seq=13 ttl=128 id=+256 win=8576 rtt=1.1 ms