システムアセスメント部の山崎です。
長い間お世話になりました。 今までありがとうございました。m(_ _)m
・・・といっても、私本人が居なくなる話ではなく、私が作ったツールの1つがとうとうお払い箱になった!という話です。誰がこんな話を読んで喜ぶのかとも思いますが、書き始めてしまったので続けます。
この話のキッカケは、2ヶ月前、突然おそってきました。
後輩社員からの、山崎のツール「バナー取り君」は不安定なのでもう使いたくない!という告発です。動かないことがあったなら、その時に呼んでくれれば直せただろうに。私にとっては寝耳に水。コミュニケーション取れてない感がスゴい。そもそも壊れたらすぐ捨てるというあたり、最近の若いものは・・ぶつぶつ・・(←老害。だから言ってくれなくなるのだ)
(注)Banapippi.pyは、ラックの独自診断ツールから「バナー取り君」を呼び出すスクリプトのことです。
バナー取りって何?
そもそも、「バナー取り」という言葉を、ご存じでしょうか?
「バナー取り」とは、「バナー」を取得することです。ここでいうバナーとは、バナー広告のことではありません。サービスバナーと呼ばれるものです。サーバが外部に公開している各サービスについて、その特徴(バージョンなど)を示す文字列のことです。これらはセキュリティ診断を学んだことがある人しか知らない言葉かもしれません。ブラックボックスのセキュリティ診断では、外部から診断対象のシステムに侵入できるか確かめるために、まず、ポートスキャンをおこないます。そのシステムで、どのようなサービスが提供されているかを見極めるためです。例えば、Webサーバでは、80/tcpや443/tcpでHTTPサービスが提供されているでしょうし、メールサーバであれば、25/tcpや587/tcpでSMTPサービスが提供されているでしょう。
ポートスキャンをおこなった結果から、それぞれのポートで、どのようなサービスのどのバージョンが提供されているかを確認するための作業が、バナー取りです。
開発のキッカケ
実際に、とあるサーバにポートスキャンをおこなった結果を次に示します。
これはnmapという有名ポートスキャンツールを使って得た結果です。このnmap、今でこそ、「VERSION」の列に示されるように、サービスとバージョンを特定する機能を持っているのですが、私が診断を始めた頃の昔は、純粋に開いているポートの番号が分かるだけでした。
私が入社した、2000年頃、診断は苦行でした。
ポートスキャンをして、開いているポートを確認します。次に、開いているポート1つ1つにtelnetコマンドで接続をして、それぞれのプロトコルに応じた手法(←ぜんぶ覚える!)でバージョンと挙動を確認していくのです。ポートの番号とサービスの内容がある程度紐付いているウェルノウンなポート範囲はまだマシですが、高位のポートで何だかわからないTELNETサービスやHTTPサービスが起動していることも多く、気の抜けない作業でした。お客様先に伺っておこなうオンサイト診断などで、開いているポートがたくさんあると地獄でした。
telnet target 21 エンター、telnet target 25 エンター、telnet target 79 エンター、telnet target 80 エンター、、、
新人の頃の山崎:「リーダー、もう無理です」
リーダー:「まだまだまだぁあああ! あきらめるな!!!」
そんな時代を経て、自動でバナーを取るツールを作ろうと決心したのでした。それが「バナー取り君」です。ポートスキャンをして、(あるいは、nmapのオープンポートの状況を取り込んで、)各ポートのプロトコルを特定してバージョン情報を取り、プロトコルに応じた次のスキャンツールをキックしたり、設定不備の問題点が無いか簡単な診断をするツールです。2001年にVB6で作ったものを使い始め、2007年に.NET Framework上で動くものに作り変えました。
後年、nmapがVERSIONを取れるようになってからも、しばらくは、nmapはTLS/SSLに乗ったサービスのバナー取りが不得意だったりもして、私のツール「バナー取り君」は、ほそぼそと生き残ってきました。
なんと16年も。
0歳の子どもだったら、高校生になってしまうわ。感慨深い。
最後に、結びのひとこと。
「ツールのことはお払い箱にしても、私のことはお払い箱にしないでくださいっっ!」
・・・でも、正直、そろそろ危ないかな、と思っている。(合掌)