Webサーバーの脆弱性診断ツール
Nikto
外部に公開しているWebサーバーは脆弱性を突いたサイバー攻撃を受けやすく、継続的なセキュリティ対策が求められます。
そこで本記事では、Webサーバーに特化した脆弱性診断ツール「Nikto」の使い方から脆弱性診断の実例まで詳しく解説しています。
脆弱性が見つかった場合の対応策までフォローしているので、実践的なスキルアップに直結します。
Niktoとは
Niktoは、Webサーバーに対する脆弱性を自動でスキャンするオープンソースの脆弱性診断ツールです。主にWebサーバーに対するセキュリティスキャンを目的としており、既知の脆弱性や設定ミス、不適切なファイル構成などを迅速に検出するために広く活用されています。
- 既知の脆弱性のスキャン
- デフォルトのファイルやディレクトリの検出
- HTTPレスポンスヘッダの解析
- バナー情報の収集
- CGIスクリプトの脆弱性
- SSL/TLS関連の簡易診断
最新情報は公式サイトをご確認ください。
Niktoは、2001年に最初のバージョンがリリースされ、2007年に現行のバージョン2系がリリースされました。現在はバージョン2系が主流で、最新版は2.5です。(2025年6月12日時点)
文献や資料では、バージョンを区別するためにNikto2という表記が使われることもありますが、通常「Nikto」とだけ書かれていてもバージョン2を指すことが一般的です。
主な特徴
Webサーバーに特化した脆弱性診断ツール
NiktoはWebサーバー専用のセキュリティスキャナで、既知の脆弱性を効率よく検出することを目的としています。具体的には、古いバージョンのソフトウェア、公開すべきでないファイルやディレクトリ、危険なファイルやスクリプトの存在などを調査し、攻撃対象となり得るポイントを洗い出します。
HTTPおよびHTTPSの両プロトコルに対応しており、主要なWebサーバーソフトを幅広くサポートしています。
既知の脆弱性に対応
Niktoの最大の特徴は、あらかじめ定義された脆弱性データベースに基づいて、スキャンを実施する点にあります。
- 7,000種類以上の危険なファイルやプログラムを検出可能
- 本来Webサーバーが公開すべきではない情報を含んでいたり、攻撃者が悪用できる危険なファイルやプログラムが存在しないか検査します。
- 1,250種類以上のサーバーソフトについて、古いバージョンが使われていないかをチェック
- 古いバージョンのソフトウェアには、セキュリティ上の脆弱性が内在していることが少なくありません。
- 270種類以上のサーバーソフトに対して、バージョン特有の脆弱性を調査
- そのサーバーの「特定のバージョンだけに存在する」セキュリティ問題を検出します。
ゼロから個別にテスト項目を作成する必要がなく、導入直後から一定レベルの診断が可能です。
CLIベースで自動化しやすい
Niktoはコマンドラインベース(CLI)で動作し、バッチ処理や自動化スクリプトへの組み込みにも適しています。特に継続的インテグレーション(CI)環境下において、簡易な脆弱性診断ステップとして導入するケースも増えています。これにより、開発と運用の両フェーズでセキュリティチェックを組み込む「DevSecOps」の一環として活用可能です。
オープンソース・無料
NiktoはPerlで開発されており、GNU General Public License(GPL)に基づいて配布されています。誰でも無償で利用でき、予算をかけずにセキュリティ診断を行いたい場合に最適です。
他のツールとの違い
Niktoの脆弱性スキャンは、HTTPリクエストベースでシンプルに行われ、「Webサーバーの脆弱性を手軽に洗い出したい」という場面において、非常に有効です。しかし、ゼロデイ脆弱性の検出やアプリケーションロジックの分析といった高度な分析は行えません。
一方、OWASP ZAPやBurp Suiteはプロキシ型のインターセプトツールであり、ユーザーの操作を通じてWebアプリケーションの内部構造や挙動を解析できます。これらのツールは手動操作やスクリプトによるカスタムスキャンが可能で、クロスサイトスクリプティング(XSS)やSQLインジェクションといったアプリケーション層の脆弱性診断に適しています。
NiktoとOWASP ZAP、Burp Suiteの違い
項目 | Nikto | OWASP ZAP Burp Suite |
---|---|---|
検出方式 | シグネチャベース | プロキシ+スキャン |
対象範囲 | Webサーバーの設定/既知の脆弱性 | Webアプリケーション全体 |
UI | CUI(コマンドライン) | GUI |
検出可能な脆弱性の一例 | ・既知の脆弱性 ・ディレクトリリスティング ・バナー情報漏洩 | ・XSS ・SQLインジェクション ・CSRF |
Niktoは「既知の問題」に対する検出に優れている一方で、「ゼロデイ脆弱性」や「ビジネスロジックの欠陥」など、より高度な診断には対応していません。そのため、Niktoはあくまで「一次診断」として位置づけ、より高度な分析には他のツールと併用するアプローチが効果的です。
この記事の検証で使用した環境
Niktoの実行マシンは、ペネトレーションテストや脆弱性診断に広く利用されているKali Linuxを使用します。Kali Linuxには、Niktoを含む脆弱性診断ツールが豊富にプリインストールされています。
スキャン対象のWebサーバーは、やられアプリであるOWASP BWAを使用します。OWASP BWAには、多数の脆弱性が意図的に組み込まれており、Niktoの動作検証には最適な環境です。
- Nikto実行マシン
- Kali Linux 2025.1
- Nikto 2.5.0
- Perl 5.40.1
- スキャン対象マシン
- OWASP BWA(Ubuntu 10.04)
- 192.168.10.105
Niktoの使い方
許可のない環境に対してNiktoを使用することは絶対にやめてください。たとえ善意の脆弱性診断であっても、不正アクセス禁止法などに抵触する可能性があります。
インストール方法
ここでは、Niktoの一般的なインストール方法について解説します。DockerやWindowsなど、個別のインストール手順については、Nikto公式ドキュメントをご確認ください。
前提条件
NiktoはPerlで書かれており、Perl 5が実行可能な環境であれば基本的に動作します。
Niktoをインストール
NiktoはGitHub上でソースコードが公開されており、公式リポジトリから直接クローンする方法が一般的です。gitコマンドが使用可能であることを確認した上で、以下のコマンドを実行します。
git clone https://github.com/sullo/nikto
動作確認
インストールが完了したら、以下のコマンドで動作確認を行います。
cd nikto/program
perl nikto.pl -Version
バージョン情報が表示されれば、インストールは正常に完了しています。
Niktoの実行方法
一般的なシステムの場合
NiktoはPerlで書かれたCLIベースのツールであり、インストール後はターミナル上で以下のように実行できます。
$ perl nikto.pl -h [スキャン対象ホスト]
このコマンドを実行すると、Niktoは対象ホストに対して脆弱性スキャンを開始し、HTTPレスポンスを解析しながら既知の脆弱性、設定ミス、不適切なファイルやディレクトリの存在などを検出していきます。スキャンの結果はターミナル上にリアルタイム表示されます。
Kali Linuxの場合
Kali Linuxでは、nikto
コマンドとして実行できるようにラッパースクリプトが用意されており、
$ nikto -h [スキャン対象ホスト]
で実行できます。
ラッパースクリプトの中身
$ which nikto
/usr/bin/nikto
$ cat /usr/bin/nikto
#!/usr/bin/env sh
set -e
exec /var/lib/nikto/nikto.pl "$@"
基本的な使い方
Niktoを使用してWebサーバーに対する脆弱性スキャンを行うには、スキャン対象のホスト名またはIPアドレスを指定して実行します。
基本的な実行コマンド
$ nikto -h [スキャン対象ホスト]
なお、Niktoはデフォルトでポート80(HTTP)に対してスキャンを行いますが、ポート番号を指定したい場合は-p
オプションを使用します。例えば、HTTPSの標準ポート443を対象としたい場合は、以下のように指定します。
$ nikto -h [スキャン対象ホスト] -p 443 -ssl
スキャン対象ホストに「ホスト」「ポート」「プロトコル」を指定することもできます。
$ nikto -h https://example.com:443/
ヘルプは-Help
オプション、バージョン確認は-V
オプションを使用します。
例)ヘルプ
$ nikto -Help
例)バージョン確認
$ nikto -V # -Versionでも可
主なオプション
NiktoはコマンドラインベースのWebサーバー脆弱性スキャナであり、多様なオプションを指定することで柔軟なスキャンが可能です。以下では、実際の診断業務でよく使用されるオプションについて解説します。
-h(-host):スキャン対象のホスト
$ nikto -h [スキャン対象ホスト] # -hostでも可
-p(-port):スキャン対象のポート番号
$ nikto -h [スキャン対象ホスト] -p [ポート番号] # -portでも可
デフォルトでは80番ポートをスキャン対象としていますが、Webサービスが別のポートで稼働している場合、スキャン対象ポートを明示的に指定します。
-o(-output):スキャン結果をファイル出力
$ nikto -h [スキャン対象ホスト] -o [ファイル名] # -outputでも可
スキャン結果をファイルに保存するためのオプションです。
-Format:スキャン結果のフォーマット
$ nikto -h [スキャン対象ホスト] -o [ファイル名] -Format [ファイル形式]
出力ファイルのフォーマットを明示的に指定します。
- csv:カンマ区切り
- json:JSON形式
- htm:HTML形式
- nbe:Nessus NBE形式
- sql:Generic SQL形式
- txt:テキスト形式
- xml:XML形式
-ssl:SSL対応
$ nikto -h [スキャン対象ホスト] -p 443 -ssl
スキャン対象のWebサーバーのプロトコルがHTTPSである場合、-ssl
オプションを指定します。
Niktoを使って脆弱性診断を実施
Niktoは、Webサーバーに対する脆弱性診断を迅速かつ網羅的に行うためのツールとして広く利用されています。ここでは、実際にNiktoを使って対象のWebサーバーに脆弱性スキャンを実施する手順を解説します。
Niktoを実行
以下のコマンドで、指定したWebサーバーに対して、脆弱性スキャンを開始します。
$ nikto -h http://192.168.10.105/peruggia/ -o output.html -Format htm
マシンスペックやサーバー環境にもよりますが、数分程度でスキャンが終了します。
診断結果
スキャンが終了すると、Niktoは以下のような脆弱性情報を出力します。(HTML形式の場合)

「X-Powered-Byヘッダが出力されている」「サポート切れのApacheを使用している」「既知の脆弱性(CVE-2003-1418)が含まれている」など、具体的なリスクが明示されます。
脆弱性が見つかった場合の対処方法
診断結果の精査
Niktoによるスキャンの結果、脆弱性が検出された場合、まずその内容を正確に理解することが重要です。Niktoは既知の脆弱性情報(例えば、特定のWebサーバーバージョンにおける既知のCVE)や危険な設定(ディレクトリリスティングの有効化、パスワード保護されていない管理画面の露出など)を元に診断を行います。
脆弱性の有無を再確認
次に行うべきは、対象となる脆弱性の技術的根拠を確認することです。Niktoの出力には、該当するCVE番号やベンダーのセキュリティアドバイザリへのリンクが含まれている場合がありますので、まずはそれらの一次情報に目を通し、自社のシステムに本当に影響するのかを評価します。
対応策の実施
検証の結果、リスクが現実的であると判断された場合、速やかにパッチの適用、設定変更、機能の無効化といった具体的な対策を講じます。パッチの適用が困難な場合には、WAFによる攻撃遮断や、該当サービスのアクセス制御(たとえばVPN経由に限定するなど)を講じて、一時的なリスク軽減策を取ることが重要です。
再検証と継続的改善
最後に、脆弱性の対応後には、再度Niktoを用いて診断を行い、リスクが実際に軽減されたかを確認します。加えて、脆弱性管理のプロセスとして、検出→評価→対策→再検証という一連のフローを文書化し、継続的に改善していくことが、企業としてのセキュリティ体制の成熟に繋がります。