sshのポートをデフォルトの22/tcpから変えるべきか論争に、終止符を打ちました

また間が開きましたが、すみだセキュリティ勉強会2015#2を開催しました。発表していただいた@inaz2さん、@yasulibさん、ありがとうございました。当日の発表資料は上記の勉強会ブログからリンクしています。

今回の私の発表は、「攻撃を『隠す』・攻撃から『隠れる』」。ポートスキャンをするとsshが100個現れる「ssh分身の術」がメイン(?)です。

当初は、パケットヘッダやプロトコルのすき間にメッセージを隠したり、ファイルを隠すなども考えていたのですが……。あまりに盛りだくさんになりそうだったので、「ポートスキャンをいかに隠れて実行するか・ポートスキャンからどうやって隠れるか」と、ポートスキャンとnmapに絞って発表しました。

発表資料

私の発表資料は以下です。

発表ノート付きなのでPDFです。以下、落穂ひろいなど。

スキャンするポート数とカバレッジ

勉強会ではカバレッジという言葉を使いましたが、元ネタのnmap公式ガイドブック(目ン玉本)では、"Effectiveness"と書かれています。ちょっと分かりにくいので、勉強会ではCoverageという言葉にしました。

10ポートスキャンすればEffectivenessが50%というのは、初めて読んだときには「たったの10ポートでそんなにカバーできるの!?」とちょっとビックリしましたが、冷静に考えてみれば感覚的にはまぁそんなもんかなという印象です。

ただ、この値はインターネット越しにスキャンを行った場合ですね。データセンターなどで同一セグメントからポートスキャンを行う場合は、もっとたくさんの開放ポートが見えるので話は違ってくると思います。

sshのポートは、やっぱり22/tcpから変えましょう

sshのポートをデフォルトの22/tcpから変えても意味ないよ」というブログ記事は、はてなブックマークあたりで定期的に炎上するテーマです。以前から、「ピンポンダッシュが激減するんだから、ゴチャゴチャ言ってないで変えるべき」派だった私は、変えなくていいよ派の「ポートスキャンすれば一発で分かるじゃん」という意見に懐疑的でした。今回のネタはその辺が出発点になっています。

今回、こうして具体的にポートスキャン一発では分からない手法がいっぱいあるよと示すことで、「sshのポートをデフォルトの22/tcpから変えたほうがいいか?」の議論を終結させることができたので満足です(たぶん)。

デコイについて

当日はC-130のフレアだけ示しましたが、第二次世界大戦でのハリボテ戦車のデコイなど、面白い話は色々転がっています。お近くの軍事オタに聞いてみると良いでしょう。

kippoのバナーについて

当日にwakatonoさんから、「kippoはpythonで書かれているので、返すバナーをランダム化すればいい」とコメントをもらいました。確かに簡単ですし、面白いと思います。

こういうイメージ。↓

root@kali:~# nmap -sV -p0-65535 192.168.2.66
....(snip)....
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 5.3 (protocol 2.0)
2200/tcp open  ssh     OpenSSH 5.1p1 Debian 5 (protocol 2.0)
2201/tcp open  ssh     Sun_SSH 1.1 (protocol 2.0)
2202/tcp open  ssh     OpenSSH 5.3 (protocol 2.0)
2203/tcp open  ssh     OpenSSH 5.1p1 Debian 5 (protocol 2.0)
2204/tcp open  ssh     OpenSSH 4.6 (protocol 2.0)
2205/tcp open  ssh     OpenSSH 5.3p1 Debian-3ubuntu7 (protocol 2.0)
2206/tcp open  ssh     OpenSSH 5.1p1 FreeBSD-20080901 (protocol 2.0)
2207/tcp open  ssh     Sun_SSH 1.1 (protocol 2.0)
2208/tcp open  ssh     OpenSSH 5.5p1 Debian-6+squeeze2 (protocol 2.0)
2209/tcp open  ssh     OpenSSH 5.3 (protocol 2.0)
....(snip)....

これなら、どれがホンモノのsshかの推定は困難だし、面倒でもありません。

Port Knockingについて

当日質問もいただきましたが、事前に特定のポートにアクセスしないと対象ポートに到達できないようにするPort Knockingというアプローチもあります。

私はknockdはきちんと運用したことが無いので(rsyncとかでの連携ホストがある場合、運用がメンドくさそうだなぁ〜、と思っていた)、すっぽり話題として抜けちゃいました。ちょっとマジメに触ってみて、何かあれば後日書くかも。

宣伝

6月にLinuxの入門書を出しました。Linux初心者にいい本だなぁと我ながら思っているので、ぜひポチっとしてお買い求めください!

新しいLinuxの教科書

新しいLinuxの教科書