nmap-did-whatの検証

このブログは、株式会社ArmorisアルバイトのShaderoが書いています。

あるもりすぶろぐの内容は個人の意見です。


はじめに

今回は、nmap-did-whatと呼ばれるツールの検証を行いました。

本ブログでは、nmap-did-whatの機能や他サービスとの比較について紹介します。

nmap-did-whatとは

nmap-did-whatとは、Nmapによって出力されたXMLの情報をSQLiteに格納するnmap-to-sqlite.pyスクリプトと、変換したDBをGrafanaで表示するgrafana-nmapコンテナが含まれたリポジトリです。

https://github.com/hackertarget/nmap-did-what

nmap-to-sqlite.pyでできること

nmap-to-sqlite.pyを実行することで、nmapから出力されたXMLの値をSQLiteDBへ書き込みが可能です。

nmap-did-whatをクローンし、以下のコマンドで実行することでDBへ書き込むことができます。

cd nmap-did-what/data/
nmap -A 192.168.0.0-255 -oX output.xml #スキャン結果を作成
python nmap-to-sqlite.py output.xml #スキャン結果をDBに格納

スクリプトでは、複数のスキャン結果(XML)を1つのDBに格納できます。そのため、複数ホストのポートスキャン結果の分析も可能です。

また、同じホストを連日スキャンしDBに格納した場合、スキャン結果は上書きでは無く追加(insert)されます。そのため、1つのホストをcronで定期的にスキャンし、時間毎に分析を行う事も可能です。

grafana-nmapでできること

grafana-nmapコンテナでは、Grafana を用いてスキャン結果を表示・分析が可能です。

grafana-nmapは、以下のコマンドを実行することで起動できます。 その後http://localhost:3000にアクセスし、admin/adminでログインすることでGrafanaを利用できます。

cd nmap-did-what/grafana-docker/
docker-compose up -d

結果の表示にGrafanaを用いているため、クエリを書けばどのような表示も可能です。デフォルトのダッシュボードでは主に以下の情報が表示されます。

  • スキャンできたホスト(数・IPアドレス等)
  • 空いているポート・サービス情報
  • 平均RTT
  • スキャン情報(スキャン時に用いたコマンド、nmapバージョンなど)

また複数ホストのスキャン結果をひとつのダッシュボードから見ることもできます。

しかしデフォルトのダッシュボードでは、複数ホストから特定のホストに絞って情報を表示することは、1つのパネルを除いてできません。 ホストを絞って情報を表示させるには、ダッシュボードをカスタムする必要があります。

Shodan, Censysと比べた利点・欠点

nmap-did-whatでは、ポートやサービス名等のスキャンが行えますが、同等の機能を持つサービスとしてShodanやCensysがあります。

これらのサービスと比べたnmap-did-whatの利点は、LAN内でも調査が可能な点です。ShodanやCensysはインターネットに公開されているホストに 対して調査が可能ですが、LAN内のホストに対しては行えません。しかしnmap-did-whatではLAN内のホストに対しても調査が可能です。

また、カスタマイズが容易である点も利点に挙げられます。nmap-to-sqlite.pyは200行程度のコンパクトな実装であり、格納する情報のカスタムが比較的容易です。またスキャン結果の表示にはGrafanaを用いているため、ダッシュボードのカスタマイズや新しいパネルの追加、クエリの調整が容易です。

一方で、nmap-did-whatの欠点は、環境構築に少し手間がかかる点です。Shodan, Censysであれば、Webサイトにアクセスするだけで利用できます。しかしnmap-did-whatを利用するためには、NmapとDocker等のインストールが必要であり、上記サービスと比べると手間が掛かります。

おわりに

今回は、nmap-did-whatの機能や他サービスとの比較について述べました。nmap-did-whatを利用することで、Nmapの調査結果をGrafanaを用いて簡単に表示することが可能です。

本ツールは主に、ShodanやCensysでは行えないLAN内での調査で有用です。 例えば、組織内における不要サービスの洗い出しや内部サーバの稼働状況の把握などへの活用が可能だと思います。 また収集スクリプトの改造が必要だと思われますが、LAN内のホストに対して脆弱性スキャンを実施し、その結果をGrafanaで表示するといった事もできると思います。