ウェブサーバースキャナー「Nikto」
2025年7月11日
セキュリティエンジニアの曽我です。今回のtoolsシリーズ第11回は、ウェブサーバーの脆弱性スキャナー「Nikto」について詳しく解説します。Webアプリケーションのセキュリティは現代のネットワークセキュリティにおいて極めて重要な要素となっており、Niktoはその評価を効率的に行うための強力なツールです。
本記事では、Niktoの基本的な使い方から実践的な活用法まで、具体的なコマンド例と出力結果を交えながら解説します。Webサーバーのセキュリティ診断や脆弱性評価に携わるセキュリティエンジニアの方々に役立つ内容となっています。
目次
- Niktoとは
- インストール方法
- 基本的な使い方 3.1. 標準スキャン 3.2. 認証情報の利用 3.3. SSL/TLSサポート
- 高度な使用方法 4.1. スキャン設定のカスタマイズ 4.2. プラグインの活用 4.3. 出力形式の選択
- 実践的な活用例 5.1. 一般的な脆弱性の検出 5.2. 設定ミスの特定 5.3. バージョン情報の収集
- 検出結果の分析と対策
- まとめ
- 参考資料
1. Niktoとは
Niktoは、Chris Sullo氏によって開発された、オープンソースのウェブサーバー脆弱性スキャナーです。Kali Linuxには標準搭載されており、ウェブサーバーの幅広い脆弱性、設定ミス、古いソフトウェアバージョンなどを検出するために設計されています。
Niktoの主な特徴:
- 6000以上の潜在的な問題を検出
- バージョン情報に基づく脆弱性チェック
- 危険なファイルやCGIの検出
- 設定ミスの識別
- SSL/TLS問題の検出
- サーバー情報の列挙
- プラグインによる拡張性
- 多様な出力形式のサポート
- カスタマイズ可能なスキャン設定
Niktoは「ノイズが多い」スキャナーとして知られており、網羅的なテストを行うため、対象サーバーのログに多くのエントリを残します。そのため、隠密性よりも完全性を重視するセキュリティ評価に適しています。
2. インストール方法
Kali Linuxには標準でインストールされていますが、他のディストリビューションへのインストール方法も記載します。
Debian/Ubuntuベースのシステム:
sudo apt update
sudo apt install nikto
Fedora/CentOS:
sudo dnf install nikto
GitHubからのインストール:
git clone https://github.com/sullo/nikto.git
cd nikto/program
Perlと必要なモジュールをインストールしていることを確認してください:
sudo apt install perl libnet-ssleay-perl libwhois-perl libwww-perl
インストールが完了したら、以下のコマンドでバージョンを確認できます:
nikto -Version
出力例:
Nikto 2.1.6
3. 基本的な使い方
3.1. 標準スキャン
最も基本的な使用法は、ホスト名やIPアドレスを指定してスキャンを実行することです:
nikto -h example.com
このコマンドは、example.comに対して標準的なスキャンを実行します。
出力例(一部):
- Nikto v2.1.6
--------------------------------------------------------------------
+ Target IP: 93.184.216.34
+ Target Hostname: example.com
+ Target Port: 80
+ Start Time: 2025-09-15 14:30:45 (GMT+9)
--------------------------------------------------------------------
+ Server: nginx/1.18.0
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ 7883 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time: 2025-09-15 14:35:12 (GMT+9) (267 seconds)
--------------------------------------------------------------------
+ 1 host(s) tested
特定のポートを指定する場合:
nikto -h example.com -p 8080
複数のポートを指定する場合:
nikto -h example.com -p 80,443,8080
3.2. 認証情報の利用
Basic認証が必要なサイトをスキャンする場合:
nikto -h example.com -id admin:password
このコマンドは、Basic認証でユーザー名「admin」とパスワード「password」を使用してスキャンを実行します。
Proxyを使用する場合:
nikto -h example.com -useproxy http://proxy:8080
3.3. SSL/TLSサポート
HTTPSサイトをスキャンする場合:
nikto -h https://example.com
または、ポートを明示的に指定する場合:
nikto -h example.com -p 443
特定のSSLバージョンを強制する場合:
nikto -h example.com -ssl -sslversion tlsv1.2
サーバー証明書の詳細情報を表示する場合:
nikto -h example.com -ssl -showcerts
4. 高度な使用方法
4.1. スキャン設定のカスタマイズ
特定のテストだけを実行する場合:
nikto -h example.com -Tuning 2
テストの種類を指定するオプション:
- 1 - 危険なファイルやCGI
- 2 - 設定ミスの検出
- 3 - 情報漏洩
- 4 - サービス拒否攻撃の脆弱性
- 5 - リモートファイルインクルードの脆弱性
- 9 - SQL Injection
- x - リバースTuning(指定したもの以外をすべてテスト)
複数のテスト種類を組み合わせる場合:
nikto -h example.com -Tuning 1,2,3
すべてのテストを実行する場合:
nikto -h example.com -Tuning x
スキャン速度の調整:
nikto -h example.com -Pause 2
このコマンドは、リクエスト間に2秒の遅延を追加します。負荷の高いサーバーや、IDSを回避したい場合に有用です。
4.2. プラグインの活用
Niktoには多数のプラグインが含まれています。利用可能なプラグインを表示するには:
nikto -list-plugins
特定のプラグインだけを使用する場合:
nikto -h example.com -Plugins "apacheusers(users:password)"
このコマンドは、apacheusersプラグインを使用して、特定のユーザー名とパスワードの組み合わせをテストします。
複数のプラグインを指定する場合:
nikto -h example.com -Plugins "apacheusers,headers"
4.3. 出力形式の選択
Niktoは様々な形式での結果出力をサポートしています:
# テキスト形式(デフォルト)
nikto -h example.com -o report.txt -Format txt
# HTML形式
nikto -h example.com -o report.html -Format html
# CSV形式
nikto -h example.com -o report.csv -Format csv
# XML形式
nikto -h example.com -o report.xml -Format xml
複数の形式で同時に出力する場合:
nikto -h example.com -o report.html -Format htm,csv,xml
このコマンドは、HTML、CSV、XMLの3つの形式で結果を出力します。
5. 実践的な活用例
5.1. 一般的な脆弱性の検出
Webサーバーの一般的な脆弱性を包括的にスキャンするシナリオ:
nikto -h target-server.com -Tuning x -C all -ssl
このコマンドは、すべてのテストを実行し(-Tuning x)、すべてのCGIディレクトリをチェックし(-C all)、SSLを使用します。
結果から、以下のような一般的な脆弱性が検出される可能性があります:
- クロスサイトスクリプティング(XSS)脆弱性
- SQL Injection脆弱性
- ディレクトリトラバーサル脆弱性
- リモートファイルインクルード脆弱性
- コマンドインジェクション脆弱性
5.2. 設定ミスの特定
サーバーの設定ミスを集中的に検査するシナリオ:
nikto -h target-server.com -Tuning 2,3 -ssl -nointeractive
このコマンドは、設定ミス(2)と情報漏洩(3)に関するテストに焦点を当て、対話型プロンプトを無効にして(-nointeractive)自動化に適した形で実行します。
検出される可能性のある設定ミスの例:
- デフォルトのアカウントやパスワードの使用
- セキュリティヘッダーの欠落(X-Frame-Options、X-XSS-Protection など)
- ディレクトリリスティングの有効化
- バックアップファイルや設定ファイルの露出
- 不要なサービスの有効化
5.3. バージョン情報の収集
サーバーのソフトウェアバージョン情報を収集するシナリオ:
nikto -h target-server.com -Tuning 3 -vhost
このコマンドは、情報漏洩(3)に関するテストに焦点を当て、バーチャルホスト情報も検出します(-vhost)。
収集される可能性のある情報の例:
- Webサーバーのタイプとバージョン
- 使用されているプログラミング言語とバージョン
- インストールされているCMSやフレームワークのバージョン
- サーバーのホスト名や内部IPアドレス
- バナー情報や管理ページの場所
6. 検出結果の分析と対策
Niktoによって検出された問題に対する主な対策は以下の通りです:
-
情報漏洩の防止:
- サーバーバナーやバージョン情報の非表示
- エラーメッセージの最小化
- 不要なファイルの削除
- ディレクトリリスティングの無効化
-
セキュリティヘッダーの実装:
- X-Frame-Optionsヘッダーの設定(クリックジャッキング対策)
- X-XSS-Protectionヘッダーの設定(XSS対策)
- X-Content-Type-Optionsヘッダーの設定(MIME-sniffing対策)
- Content-Security-Policyの実装(XSS、データインジェクション対策)
-
適切なアクセス制御:
- セキュアなHTTP認証の実装
- 重要なディレクトリやファイルへのアクセス制限
- 適切なパーミッションの設定
- ロバストなセッション管理
-
SSL/TLS設定の強化:
- 安全なプロトコルバージョンの使用(TLS 1.2以上)
- 脆弱な暗号スイートの無効化
- 適切な証明書の実装
- HSTS(HTTP Strict Transport Security)の有効化
-
定期的な更新とパッチ適用:
- Webサーバーソフトウェアの最新バージョンへの更新
- CMSやプラグインの定期的な更新
- セキュリティパッチの迅速な適用
- 不要なモジュールやサービスの無効化
-
WAF(Web Application Firewall)の導入:
- 一般的な攻撃パターンのブロック
- 異常なトラフィックの検出と遮断
- レート制限の実装
- ボットトラフィックの制御
7. まとめ
Niktoは、Webサーバーの脆弱性を包括的にスキャンするための強力なツールです。6000以上の潜在的な問題を検出でき、様々なカスタマイズオプションによって、特定のニーズに合わせたスキャンが可能となっています。
特筆すべき点は、その使いやすさと網羅性のバランスです。初心者でも簡単に基本的なスキャンを実行できる一方で、高度なユーザーは細かい設定やプラグインを活用して、より焦点を絞ったテストを行うことができます。
Niktoは「ノイズの多い」スキャナーとして知られており、対象サーバーに多くのリクエストを送信し、ログに痕跡を残します。そのため、本番環境でのテストには注意が必要ですが、この特性は同時に、より多くの潜在的な問題を発見できる可能性も高めています。
セキュリティエンジニアを目指す方は、Niktoの使い方を習得することで、Webサーバーの脆弱性評価のスキルを効率的に向上させることができるでしょう。ただし、このツールの使用は必ず適切な許可を得た上で、教育目的または許可されたセキュリティテストの範囲内でのみ行うことが重要です。
最後に、Niktoはあくまで自動化されたスキャンツールであり、その結果には誤検出(false positive)や見落とし(false negative)が含まれる可能性があることを理解しておく必要があります。真に堅牢なセキュリティ評価には、Niktoのような自動ツールと、手動によるテストや検証を組み合わせたアプローチが推奨されます。
8. 参考資料
- Nikto 公式サイト
- Nikto 公式GitHub リポジトリ
- Kali Linux Tools: Nikto
- OWASP: Web Security Testing Guide
- OWASP: Top Ten Project
- Mozilla: Web Security Guidelines
- Nikto DB - Vulnerabilities Database
- SecTools.Org: Top 125 Network Security Tools
※本記事の内容は、教育目的および正当なセキュリティテストのためのものです。Niktoの使用は、自分が所有または正当な許可を得たシステムに限定してください。許可なく他者のシステムに対して使用することは、法律違反となる可能性があります。必ず適切な許可を得た上で実行してください。

