先週は Wireshark に Nmap と、主要なネットワーク系ツールが立て続けにメジャーアップデートを果たしました。
特に Nmap は 6.47 のリリース以降(注1)、ベータ版(6.49 BETA 1 から 6)のリリースが続いていたので、 7.00 へのメジャーアップデートは自分にとってちょっとした不意打ちでした。
はじめに
Nmap(Network MAPper)はネットワークスキャナーと呼ばれるツールのひとつで、ネットワークに接続されている機器の情報やサービスの状態、ひいては脆弱性の有無まで検出できることがあります。
そのため、セキュリティ診断のなかでも特にネットワーク診断やペネトレーションテストの場で活用されています。
今回の内容
今回はこの Nmap 7 で大きく変わったとされる点について取り上げてみようと思います。
Nmap のウェブサイトには前回(Nmap 6)と同様、バージョン番号にかけて「Top 7 Improvements in Nmap 7(Nmap 7 における改善点 トップ7)」を掲げています。(注2)
以下がその7つなのですが…
- NSE(Nmap Scripting Engine)の大幅な機能拡張
- IPv6 に対する本格的な対応
- Nmap の開発基盤の向上
- より高速なスキャン
- SSL/TLS スキャンにおける最適なソリューション
- Ncat の改善
- 移植性の徹底
うーん、 Nmap 7 は新機能の追加というよりは、既存の機能の改善や強化で占められているように見えますね。
Nmap 7 における変更点
ついでにこのトップ7の部分のみ翻訳してみました。
1.NSE(Nmap Scripting Engine)の大幅な機能拡張
Nmap の中核をなす機能が成熟してきたこともあり、代わりに新しい機能の多くが NSE という補助的なしくみの一環として盛んに開発されています。事実、私たち(Nmap Project)は Nmap 6 (のリリース)以降 171 の新しいスクリプトと 20 のライブラリを追加してきました。例として firewall-bypass.nse,supermicro-ipmi-conf.nse,oracle-brute-stealth.nse,ssl-heartbleed.nse が取り込まれています。 NSE はいまや十分強力なものとなり、ホストの検出(dns-ip6-arpa-scan.nse),バージョン情報のスキャン(ike-version.nse や snmp-info.nse など),RPC ポートのフィンガープリントの採取(rpc-grind.nse)(といったスクリプト)が中核となる機能を担う可能性も出てきました。 NSE でポートスキャンを実装しようという提案さえあるほどです。[詳細]2.IPv6 に対する本格的な対応
Nmap 6 のリリースにおいて、 IPv6 アドレス(の指定)によるスキャンを改善することは重要な項目の一つでした。しかし、 Nmap 7 は CIDR 形式で表記したアドレス範囲,アイドルスキャン,DNS ルックアップにおける逆引きの並列実行に関して IPv6 に完全対応し(さらに NSE スクリプトによる助力も含む)、改善項目を克服しています。[詳細]3.Nmap の開発基盤の向上
私たちは18歳のプロジェクトと言えるかもしれません。といっても、それは私たちが古くておんぼろな開発基盤に固執しているという意味ではありません。 Nmap Project は開発プロセスを強化し、ユーザー基盤の成長に貢献するため、最新の技術を採用し続けています。例えば、ウェブサイト(nmap.org)をすべて SSL 通信に変更することで、「トロイの木馬」に侵入される危険性を減らし、概ね通信の傍受を軽減しました。また、ワークフローの大半にバージョン管理システムの Git を利用したり、 Subversion の Nmap 用ソースリポジトリから GitHub 上に公式のミラーリポジトリを作成することで、 GitHub のプルリクエストによるソースコードのコミットを奨励しています。公式のバグトラッキングシステムも設置し、 GitHub 上でも同様のサービスを提供しています。このようにしてバグやエンハンスメントリクエスト(製品の改善や機能追加の要求)を追跡することで、(それらが)見過ごされてしまう回数を減らすようにしています。[詳細]4.より高速なスキャン
Nmap は18年間、継続して SYN スキャンの速度限界を押し上げてきました。そして、それはこのリリースでも例外ではありません。 Windows と BSD 系のシステムに対しては、新しい Nsock エンジンのおかげで(スキャン速度の)パフォーマンスが向上し、スキャン対象のリオーダリング(パケットの着順に誤りが発生した場合、順序を修復する機能)によりマルチホーム環境(ネットワークインターフェイスを複数備えたシステム)では扱いの難しいエッジケース(限界値に近いことに起因して発生し得る特有の問題をはらんだ状況)の発生を回避しています。また、 NSE スクリプトの改良に熱心な方たちのおかげで(従来の性能を)はるかにしのぐ高速なバージョン検出スキャン(-sV オプション)になりました。[詳細]5.SSL/TLS スキャンにおける最適なソリューション
TLS(Transport Layer Security)とその先駆者である SSL はウェブセキュリティの土台の部分に当たります。したがって Nmap は Heartbleed,POODLE,FREAK のような深刻な脆弱性がやって来た場合、脆弱性検出用の NSE スクリプトでもってその答えを出します。 ssl-enum-ciphers.nse スクリプトは TLS に起因する問題について高速に解析を実行するよう全面的に書き換えられました。加えて、バージョン検出スキャンは最新バージョンの TLS ハンドシェイクを高速に検出するよう調整されています。[詳細]6.Ncat の改善
Red Hat および Fedora 系のディストリビューションに netcat コマンドや nc コマンドを提供するため、 Ncat がデフォルトのパッケージとして採用されました!私たちは(この事実に)興奮していますし、発表することができて光栄です。この提携関係は Netcat のオプションに関連して潰した大量のバグと改善された大量の互換性によってもたらされたものです。また、シンプルに作られた組み込みの Lua インタープリター,クロスプラットフォームで動作するデーモン,パケットフィルターを追加できたことにも興奮を禁じえません。7.移植性の徹底
Nmap はクロスプラットフォームであることを誇りにしており、難解で古めかしいいかなる種類のシステムでも動作します。しかし、私たちは人気のある最新の OS に遅れをとらないようバイナリを提供していかなければなりません。 Nmap 7 は Windows 10 から遡って Windows Vista まで(の各 Windows 上で)きちんと動作します。よく頂くリクエストということもあり、私たちは Windows XP 上でも動作するよう Nmap をビルドしています。とはいえ、そうしたユーザーには利用しているシステムをアップグレードしてもらうことも勧めています。 Mac OS X については 10.8(Mountain Lion)から 10.11(El Capitan)まで対応しています。 Solaris や AIX に対するサポートも更新しました。そして Linux ユーザーであるみなさん、どうかご心配なく。
これら変更点の詳細については「Detailed Improvements(改善点の詳細)」や「Changelog(変更履歴)」から参照することができるので、時間のある時にひととおりチェックしておくと意外な項目が見つかるかもしれません。
おわりに
今回は Nmap 7 の変更点の概要を見てきました。
最後に Nmap のこれからの目標ですが、主に「Moving Forward (Future Plans)(今後の方針(将来的な予定))」に記載されている以下の4点を予定しているようです。(詳しくは「TODO」をご覧ください。)
- 現行の WinPcap から最新バージョンへの差し替え
- Android 以外のモバイル機器への対応
- パフォーマンスの改善
- NSE のさらなる拡張
ここまで見たかぎりでは、しばらくは Nmap 本体への機能追加よりも NSE スクリプトのメンテナンスに重点が置かれるような気がします。スクリプトによって Nmap 本体を支え補っていくという考え方は Mike Gancarz の「UNIX 哲学」の一節を思い起こさせます。
Use shell scripts to increase leverage and portability.
(シェルスクリプトを用いることで梃子(てこ)の作用と移植性を高めよう。)
NSE スクリプトは Lua というスクリプト言語で記述されていますが、今の Nmap はこの UNIX カーネルとシェルスクリプトのような関係を目指しているようでもあります。
個人的には NSE スクリプトの動向や変遷にも興味があるので、 Nmap に取り込まれる機会を待っているスクリプトたちも気になるところですが、正直なところ Nmap 本体にもはっとするような新機能が盛り込まれないものかとやきもきしていたり…
なにはともあれ、まずはダウンロードしたのでいじってみることにします!
注1:6.47 がリリースされたのは2014年 8月でした。
注2:ちなみに Nmap 5 のリリース時は「Top 5 Improvements in Nmap 5」、 Nmap 6 のリリース時は「Top 6 Improvements in Nmap 6」でした。こういう遊びごころも Nmap の魅力のひとつだと思います。