家庭用プリンタがポートスキャンの踏み台になった話
もりたこさん(@mrtc0)の記事を読んで,「Idle Scan」という送信元を隠して行うポートスキャンについて興味をもったので,自宅にあるネットワーク機器にも踏み台になりうるものはないかなーと探していたら,ありました.
プリンタが.
完全にもりたこさんの記事の二番煎じになりますが,書きます.
Idle Scan の概要
あえて英語で書くと,こう.
- Probe the zombie's IP ID and record it.
- Forge a SYN packet from the zombie and send it to the desired port on the target. Depending on the port state, the target's reaction may or may not cause the zombie's IP ID to be incremented.
- Probe the zombie's IP ID again. The target port state is then determined by comparing this new IP ID with the one recorded in step 1.
( 引用:TCP Idle Scan (-sI) )
なるほど.
※概要についてはもりたこさんがすごく丁寧にまとめてくれています.
手動でパケットを送ってIdle Scanを行うことも可能ですが,Nmapの-sI
オプションでIdle Scanを行うことができるそうです.
実験
用意したマシンがこちら
- 攻撃者: 192.168.11.9
- ターゲット: 192.168.11.1
- 踏み台(Brother DCP-J515N Printer): 192.168.11.2
まずは踏み台となるプリンタの調査から.
攻撃者側からプリンタに向けてhpingでSYNを送ってみる.
IPフラグメントIDに注目すると,数が(ほぼ1ずつ)単調増加していることがわかります.つまり,次に来るIDが何かを容易に推測でき,Idle Scanが成立します.(ほんとはIDはランダムになっているのが理想)
そしてNmapのIdle Scanを使い,ターゲットのオープンになっている80番ポートのスキャンを実行します.
できた\(^o^)/
これにより,攻撃者はターゲットに全く気付かれずにポートスキャンを行うことに成功しました.
Nmap の挙動
せっかくなので,Nmapの-packet-trace
オプションで挙動を追ってみました.
最初に攻撃側からプリンタに向けて6パケットほど連続でSYNを送りIDのパターンを調査しています.そして
Idle scan using zombie 192.168.11.2 (192.168.11.2:80); Class: Incremental
とあり,IDの変化パターンが"Incremental"であると判断しています.
この時点でプリンタのIPフラグメントIDは"44219"です.
次に攻撃側は送信元をプリンタのIPのに偽造したパケットをターゲットに向けて5パケット送信します.すると,下記のようにターゲットからプリンタに向けてパケットが返ってきました.
SENT (0.3325s) TCP 192.168.11.1:43401 > 192.168.11.2:80 SA ttl=38 id=38333 iplen=44 seq=3299246808 win=1024 <mss 1460> SENT (0.3830s) TCP 192.168.11.1:43401 > 192.168.11.2:80 SA ttl=46 id=29500 iplen=44 seq=3299246809 win=1024 <mss 1460> SENT (0.4341s) TCP 192.168.11.1:43401 > 192.168.11.2:80 SA ttl=50 id=16813 iplen=44 seq=3299246810 win=1024 <mss 1460> SENT (0.4852s) TCP 192.168.11.1:43401 > 192.168.11.2:80 SA ttl=59 id=12389 iplen=44 seq=3299246811 win=1024 <mss 1460> SENT (0.7861s) TCP 192.168.11.9:43641 > 192.168.11.2:80 SA ttl=50 id=11090 iplen=44 seq=1178307903 win=1024 <mss 1460>
この直後,攻撃者がプリンタに向けて1パケットを送信したところ以下のパケットが返ってきています.
RCVD (0.7943s) TCP 192.168.11.2:80 > 192.168.11.9:43641 R ttl=64 id=44224 iplen=40 seq=136725895 win=0
フラグメントIDが"44224",つまり,ターゲットに送った5パケット分IDの数が増加しているため,ターゲットのポートが開いていることがわかりました.