このブログは、株式会社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で表示するといった事もできると思います。