Nikto を使用した Web サーバーのスキャン

サイバーセキュリティBeginner
オンラインで実践に進む

はじめに

Nikto を使用した Web サーバースキャンの実験へようこそ。

Nikto は、広く利用されているオープンソースの Web サーバー脆弱性スキャナーです。6,700 以上の潜在的に危険なファイルやプログラム、1,250 以上のサーバーの古いバージョン、バージョン固有の問題など、Web サーバーに対して包括的なテストを実行します。Nikto はステルス性を考慮して設計されておらず(非常に「ノイズ」が多く、侵入検知システムに容易に検知されます)、ベースラインのセキュリティ監査には非常に高速で効果的です。

Nikto は、高速な幅優先探索型の監査ツールとして理解するのが最適です。Web サーバーの明白な問題を迅速に特定するのに役立ちますが、慎重な手動検証の代わりになるものではありません。そのノイズの多さは、網羅性とのトレードオフです。

この実験では、Nikto を使用してローカルの Web サーバーをスキャンし、特定の脆弱性に焦点を当てるためのチューニングを行い、結果を構造化されたレポートとして保存し、発見された内容を分析してサーバーのセキュリティを向上させる方法を学びます。

基本的な Nikto スキャンの実行

このステップでは、Nikto を使用してターゲットの Web サーバーに対して基本的な脆弱性スキャンを実行する方法を学びます。

この実験では、ローカルの Apache Web サーバーがすでにインストールされ、環境内で起動しています。このサーバーがターゲットとなります。Nikto はコマンドライン経由で動作し、最も基本的な使用法では -h (host) フラグの後にターゲットの IP アドレスまたはドメイン名を指定するだけです。

ローカルの Web サーバーに対して基本的なスキャンを開始するには、ターミナルで次のコマンドを実行します。

nikto -h http://localhost

この段階での目標は、すべての報告項目に対して悪用可能性を証明することではなく、目に見える弱点や設定ミスのベースラインを確立することです。

コマンドを実行すると、Nikto が Web サーバーの調査を開始します。Nikto が情報を発見するにつれて、画面に結果が表示されます。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:00:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined.
+ The X-Content-Type-Options header is not set.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 8000 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2026-10-25 10:00:15 (GMT0) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

出力には豊富な情報が含まれています。サーバーソフトウェアのバージョン (Apache/2.4.52) を特定し、欠落しているセキュリティヘッダー(X-Frame-Options など)を指摘し、/admin.txt や /info.php のようにサーバー上に残された潜在的に機密性の高いファイルを強調表示しています。

誤検知の無視(チューニング)

このステップでは、Nikto のスキャンをチューニングする方法を学びます。

Nikto は数千もの潜在的な問題をチェックするため、デフォルトのスキャンは時間がかかり、多くの「ノイズ」や誤検知(False Positives)が発生することがあります。スキャンをより高速かつ焦点を絞ったものにするために、Nikto には -Tuning フラグが用意されています。

これは、スキャナーの出力品質はスコープによって決まるという良い教訓です。テストカテゴリを絞り込むことで、発見結果の有用性が向上することがよくあります。

-Tuning フラグを使用すると、実行するテストのカテゴリを正確に指定できます。各カテゴリは数字または文字で表されます。例:

  • 1 - 興味深いファイル / ログで確認されたもの
  • 2 - 設定ミス / デフォルトファイル
  • 3 - 情報漏洩
  • 4 - インジェクション (XSS/Script/HTML)
  • 9 - SQL インジェクション

設定ミス (2) と情報漏洩 (3) のみをチェックしたい場合は、これらの数字を組み合わせることができます。

次のコマンドを実行して、設定ミスと情報漏洩のみを対象としたチューニング済みスキャンを実行します。

nikto -h http://localhost -Tuning 23

このスキャンは、SQL インジェクションやサービス拒否(DoS)チェックなどの無関係な数百のテストをスキップするため、基本的なスキャンよりもはるかに高速に完了することがわかります。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:05:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 1500 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2026-10-25 10:05:03 (GMT0) (3 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

-Tuning フラグを使用することで、特定の監査ニーズに合わせて Nikto を調整し、時間を節約してレポートの乱雑さを軽減できます。

出力のレポート保存

このステップでは、Nikto スキャンの結果を構造化されたレポートファイルに保存する方法を学びます。

専門的なセキュリティ監査を実行する場合、発見事項の記録を保持することが不可欠です。ターミナルから直接結果を読むことは簡単なチェックには適していますが、チームと結果を共有するには適切なドキュメントが必要です。Nikto は、HTML、CSV、XML、プレーンテキストなど、いくつかの形式での出力保存をサポートしています。

レポートを保存するには、2 つのフラグを使用する必要があります。

  • -o (または -output): レポートを保存するファイルパスと名前を指定します。
  • -Format: レポートの形式(例:htm, csv, xml, txt)を指定します。

スキャンを実行し、プロジェクトディレクトリに HTML ファイルとして出力を保存してみましょう。次のコマンドを実行します。

nikto -h http://localhost -Format htm -o /home/labex/project/report.html

スキャンの実行中も、ターミナルには標準出力が表示されます。スキャンが完了すると、Nikto は指定したパスに HTML ファイルを生成します。

現在のディレクトリの内容をリスト表示して、ファイルが正常に作成されたことを確認できます。

ls -l /home/labex/project/report.html
-rw-r--r-- 1 root root 4521 Oct 25 10:10 /home/labex/project/report.html

この HTML レポートは、後でダウンロードして標準的な Web ブラウザで開くことができ、発見されたすべての脆弱性をクリーンな表形式で表示できます。

Nikto 脆弱性レポートの分析

最後のステップでは、コマンドラインツールを使用して生成されたレポートを迅速に分析する方法を学びます。

HTML レポートはブラウザでの閲覧には適していますが、グラフィカルインターフェースのないターミナル環境のみで作業することもよくあります。そのような場合は、grep のような標準的な Linux テキスト処理ツールを使用して、レポートから特定の情報を抽出できます。

前のステップで生成した HTML レポートを検索して、Nikto が Apache サーバーのステータス情報漏洩を正常に記録したかどうかを確認してみましょう。

grep コマンドを使用して、レポート内の "server-status" という単語を検索します。

grep "server-status" /home/labex/project/report.html
    <td>/server-status: This reveals Apache information. Comment out appropriate line in httpd.conf or restrict access to allowed hosts.</td>

次に、レポートが欠落している X-Frame-Options セキュリティヘッダーをキャプチャしたかどうかを確認します。このヘッダーは、クリックジャッキング攻撃を防ぐために重要です。

grep "X-Frame-Options" /home/labex/project/report.html
    <td>The anti-clickjacking X-Frame-Options header is not present.</td>

Nikto のレポート機能と Linux コマンドラインユーティリティを組み合わせることで、大規模な脆弱性スキャンを迅速に解析し、重要な発見事項を抽出し、Web サーバーの保護プロセスを開始できます。

まとめ

おめでとうございます!Nikto を使用した Web サーバースキャンの実験を無事に完了しました。

この実験では、以下の方法を学びました。

  • Nikto を使用してターゲットの Web サーバーに対して基本的な脆弱性スキャンを実行する。
  • -Tuning フラグを使用してスキャンを特定の脆弱性カテゴリに集中させ、誤検知とスキャン時間を削減する。
  • スキャン結果をドキュメント化および共有のために構造化された HTML レポートとしてエクスポートする。
  • grep などのコマンドラインツールを使用して生成されたレポートを分析し、重要なセキュリティ上の欠陥を迅速に特定する。

これらのスキルは、Web インフラストラクチャの迅速かつ初期のセキュリティ評価を実施するための強力な基盤となります。