nmapのクリスマススキャン(-xS)をもっとキラキラさせよう

あまりに長いあいだこのブログを放置していましたが、大丈夫です。生きています。

ただ、ちょっとメンタル的に色々ありすぎて放置していました。。。さすがに1年以上も更新がないとツラいので、ちょうどクリスマスということで、ポートスキャナツールNmapの、クリスマススキャンについて軽く書いてみることにしました。

Nmapとクリスマス

今日は12月25、クリスマスです。セキュリティ診断の業界では有名ですが、12月25日にnmapで-vオプションを付けてポートスキャンをすると、nmapが、

"Nmap wishes you a merry Christmas!"

というメッセージを出してクリスマスを祝ってくれます。

診断業界の皆は、クリスマスに脆弱性診断をするとき、このメッセージを見るとみんなほんわかとした気分になったものです……(んなわけねーだろ! という誰かの声が聞こえる)

この際Nmapは、ついでに、"Specify -sX for Xmas Scan"と、クリスマススキャンのやり方も教えてくれます。クリスマススキャンとは、通常のSYNスキャンと違い、TCP FlagsのURG/PSH/FINビットを立ててスキャンするものです。一応nmapのマニュアルには、こういう特殊なスキャンをすることで一部のファイアウォールを通過できる場合がある……ということが書いてありますが、まぁこじつけで、実践でこのスキャンを使うことはまず無い。それよりも、ビットがいっぱい立っていてピカピカしているからクリスマスツリーのようだ……ということでクリスマススキャンと呼ばれる説が有名です。

クリスマススキャンをもっとピカピカさせる

さて、こうなると、「たったの3bitじゃもの足りん、TCP Flagsの全bitを立ててもっとピカピカさせよう」と思うのが人情というものです。nmapでは--scanflagsオプションを付けるとこれを実現できます。

やり方は2つあって、一つはTCP Flagsは6bitなので、「--scanflags 63」と指定すれば全ビット起立したパケットが飛びます。もう一つは文字列指定で、「--scanflags URGACKPSHRSTSYNFIN」と、URGからFINまで全部並べると、これも全TCP Flagsのビットが立ったパケットが飛びます。

# nmap -v --scanflags 63 -p 22 10.5.17.208
または
# nmap -v --scanflags URGACKPSHRSTSYNFIN -p 22 10.5.17.208

これで、6bit立ちました。キラキラしてますね。

TCP Flagsは9bit

と、ここまで書いておや? と思った方もいるでしょう。そう、実はTCP Flagsは後年さらに拡張されており、現在は6bitではありません(私が大学で学んだときは、まだ6bitだったんだけどな〜)。

元々予備に用意されていた予約ビットを使う形で、まずRFC 3168で、ECN-Echo(ECE)とCongestion Window Reduced(CWR)の2bitが追加されました。さらにRFC 3540で、ECN-nonce(NS)の1bitが追加されました。というわけでこれでもっとピカピカキラキラしたスキャンができるぞ! というわけですが、ちょっと試した限り、--scanflagsは255までしか指定できないので9bitめをキラキラさせることができませんでした。本当はできるのかもしれませんけど、私の知識不足&時間切れです。

# nmap -v --scanflags 255 -p 22 192.168.2.9
または
# nmap -v --scanflags CWRECEURGACKPSHRSTSYNFIN -p 22 192.168.2.9

これで、8bitキラキラさせることができました! これならようやくクリスマスツリーと言えるでしょう(たぶん)。なお、このスキャンの実用性は、まぁ、自己満足だけなのでゼロですね……。

補足すると、scanflagsオプションは奥が深く、「この組み合わせでOS検出ができるぞ!」とか、「クリスマススキャンで特定のACLが回避できるぞ!」とか色々と議論・研究がされているのですが、ちょっとそこまで詳しく調べてない&よく知らないのでここではつっこまないことにします。

ということで中途半端ですが、おしまい。

参考リンク

  • Nmapの真実
    • abendさんによるNmap面白ネタ、クリスマススキャンの話も出ています。おもしろ。