はじめに
Nikto は、人気のあるオープンソースのウェブサーバー スキャナーであり、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。
Nikto スキャンの結果の読み方と解釈方法を理解することは、ペネトレーション テスターからシステム管理者まで、サイバーセキュリティに関わるすべての人にとって基本的なスキルです。出力は最初は難解に見えるかもしれませんが、ウェブサーバーの設定と潜在的なセキュリティ上の弱点に関する貴重な洞察を提供するように構造化されています。
この実験では、標準的な Nikto スキャン レポートの解剖方法を学びます。時間を節約し、解釈に集中するために、事前に生成されたスキャン結果ファイルが提供されています。このファイルを分析して、ターゲット情報、検出項目の区別、脆弱性参照の理解、および最終的な概要の確認を行います。
ターゲット情報サマリーセクションの特定
このステップでは、Nikto レポートの冒頭部分を調べて、スキャン対象のターゲットに関する基本情報を特定します。このセクションは、何がテストされたか、および検出された基本的なサーバーソフトウェアを確認できるため、非常に重要です。
~/project ディレクトリに nikto_scan_results.txt という名前のサンプル レポート ファイルが作成されています。cat コマンドを使用して、その内容をターミナルに表示します。
cat ~/project/nikto_scan_results.txt
出力の最初の数行を見てください。この最初のブロックは、ターゲットの概要を提供します。
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP: 172.17.0.2
+ Target Hostname: labex-server
+ Target Port: 80
+ Start Time: 2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
これらの行の意味は次のとおりです。
Target IP: スキャンされたサーバーの IP アドレスです。Target Hostname: サーバーのホスト名です。Target Port: ウェブサービスが実行されている TCP ポートです (通常、HTTP の場合は 80、HTTPS の場合は 443)。Server: HTTPServerヘッダーで報告されたサーバーソフトウェアとそのバージョンです。この場合、Ubuntu 上で実行されている Apache バージョン 2.4.52 です。
情報的な検出結果と OSVDB 参照の特定
このステップでは、+ シンボルでマークされた情報的な検出結果を特定する方法を学びます。これらは必ずしも直接的な脆弱性ではありませんが、サーバーの設定に関する有用なコンテキストを提供します。
Nikto の多くの検出結果は、OSVDB (Open Source Vulnerability Database) ID に関連付けられています。OSVDB プロジェクトは現在アクティブではありませんが、これらの ID は歴史的な参照や特定の Иssue に関する詳細の検索に依然として役立ちます。
grep コマンドを使用してレポートをフィルタリングし、検出結果を表す行のみを表示しましょう。Nikto の出力では、これらの行は + で始まります。
grep "^\+" ~/project/nikto_scan_results.txt
スキャンからのすべての検出結果のリストが表示されます。
+ Target IP: 172.17.0.2
+ Target Hostname: labex-server
+ Target Port: 80
+ Start Time: 2023-10-27 10:30: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. 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.
+ Uncommon header 'x-powered-by' found, with contents: PHP/8.1.2
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS
+ OSVDB-3233: /icons/README: The Apache web server is configured to return a valid response to a request for /icons/README.
+ /index.php: PHP is installed.
+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...
+ 8123 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time: 2023-10-27 10:38:20 (GMT0) (500 seconds)
+ 1 host(s) tested
+ OSVDB-3233: /icons/README: ... という行に注目してください。これは、Apache サーバーで一般的な /icons/ ディレクトリにある公開されている README ファイルに関連する情報的な検出結果 (ID 3233) を示しています。
低リスクと高リスクの脆弱性の区別
このステップでは、低リスクを表す検出結果と、より懸念される可能性のある検出結果を区別する方法を学びます。Nikto は重大度レベルを割り当てないため、アナリストであるあなたがコンテキストに基づいて結果を解釈する必要があります。
低リスクの検出結果は、通常、実装されていないセキュリティベストプラクティスに関連しています。たとえば:
+ The anti-clickjacking X-Frame-Options header is not present.
これは、欠落しているセキュリティヘッダーです。これがあることは良い習慣ですが、その不在だけでは通常、直接的な侵害につながることはありません。
高リスクの検出結果は、情報開示や悪用される可能性のある設定ミスを指すことがよくあります。たとえば:
+ /admin/: Directory indexing found.
これはより深刻です。ディレクトリインデックス作成により、攻撃者は /admin/ ディレクトリ内のすべてのファイルとサブディレクトリを確認でき、機密ファイル、アプリケーション構造、またはバックアップファイルが明らかになる可能性があります。
grep を使用して、この高リスクの検出結果をレポートから分離しましょう。
grep "Directory indexing" ~/project/nikto_scan_results.txt
このコマンドは、ディレクトリインデックス作成が検出されたすべてのインスタンスを表示します。
+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.
これらの結果が表示されたら、アナリストはこれらのディレクトリをすぐに調査して、機密情報が公開されていないかを確認する必要があります。
CGI ディレクトリ検出結果の意味の理解
このステップでは、CGI ディレクトリに関連する検出結果に焦点を当てます。CGI (Common Gateway Interface) は、Web サーバーがスクリプトなどの外部プログラムを実行できるようにする標準プロトコルです。これらのディレクトリは、脆弱性を持つ可能性のある実行可能ファイルが含まれていることが多いため、攻撃者の一般的な標的となります。
Nikto は、/cgi-bin/ のような一般的な CGI ディレクトリを特にチェックします。このようなディレクトリとその中のスクリプトを見つけることは、重要なイベントです。
grep を使用して、レポート内で /cgi-bin/ に言及しているすべての行を見つけましょう。
grep "/cgi-bin/" ~/project/nikto_scan_results.txt
出力には、このディレクトリに関連する 2 つの検出結果が表示されます。
+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...
最初の行は、/cgi-bin/ ディレクトリ自体でディレクトリインデックス作成が有効になっていることを確認しており、これは前のステップで説明したように高リスクの検出結果です。2 番目の行は、Nikto が test.cgi スクリプトを見つけたことを示しています。テストスクリプトは開発者によって残されていることが多く、サーバー環境に関する脆弱性があったり、情報を開示したりすることがあります。アナリストはこれを手動調査のためにフラグを立てるでしょう。
スキャン終了時のサマリー統計の確認
この最終ステップでは、Nikto レポートの末尾にあるサマリーセクションを確認します。このセクションは、スキャンの実行と範囲の概要を提供します。
ファイルの最後の数行を簡単に表示するには、tail コマンドを使用できます。レポートの最後の 10 行を表示してみましょう。
tail -n 10 ~/project/nikto_scan_results.txt
これにより、レポートの末尾が表示され、サマリー統計が含まれます。
+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...
+ 8123 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time: 2023-10-27 10:38:20 (GMT0) (500 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
主要なサマリー行の内訳は次のとおりです。
8123 requests: 0 error(s) and 11 item(s) reported...: これは、Nikto がサーバーに 8,123 件の HTTP リクエストを送信し、エラーは発生せず、11 件の関心のある項目が見つかったことを示しています。End Time: スキャンが完了したタイムスタンプと合計期間を示します。1 host(s) tested: スキャンが単一のターゲットに対して実行されたことを確認します。
このサマリーは、スキャンの規模を理解し、検出結果の全体的なカウントを取得するのに役立ちます。
サマリー
この実験では、標準的な Nikto スキャンレポートを解釈するための基本的なスキルを学びました。基本的なターゲット情報から始めて、より詳細な検出結果へと進む、体系的なアプローチで出力を分析する練習をしました。
以下のことを学びました。
- ターゲットサーバーの IP、ポート、ソフトウェアバナーを特定する。
- 情報的な検出結果と OSVDB 参照の重要性を認識する。
- 低リスクの検出結果(ヘッダーの欠落など)と高リスクの検出結果(ディレクトリインデックス作成など)を区別する。
- CGI ディレクトリ検出の重要性を理解する。
- スキャン終了時のサマリーを確認して、全体像を把握する。
この構造化された分析プロセスは、生のスキャナー出力を Web アプリケーションを保護するための実行可能なインテリジェンスに変換するための鍵となります。


