Nikto のスキャンから特定のプラグインを除外する

Kali LinuxBeginner
オンラインで実践に進む

はじめに

Nikto は、人気のあるオープンソースの Web サーバー スキャナーであり、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、および 270 を超えるサーバーのバージョン固有の問題を含む、複数の項目に対して Web サーバーに対して包括的なテストを実行します。しかし、フル スキャンは「ノイズが多く」なりすぎたり、誤検知を生成したりすることがあります。この実験では、特定のプラグインを除外して Nikto スキャンを絞り込む方法を学び、結果をより的を絞った、実行可能なものにします。

フル スキャンからノイズの多い、または不要なプラグインを特定する

このステップでは、テスト用の Web サーバーに対して基本的な Nikto スキャンを実行します。この最初のスキャンはベースラインとして機能し、デフォルトのプラグイン セットによって生成されたすべての検出結果を確認できます。この完全なレポートから、将来のスキャンで除外したいプラグインを特定できます。

まず、~/project ディレクトリにいることを確認してください。セットアップ スクリプトは、既に簡単な Web サーバーをバックグラウンドで起動しています。それに対して標準的な Nikto スキャンを実行しましょう。-h オプションは、ターゲット ホストを指定するために使用されます。

ターミナルで次のコマンドを実行してください。

nikto -h http://127.0.0.1:8000

スキャンが完了すると、レポートが表示されます。サーバーのバージョンやその他の詳細は異なる場合がありますが、出力はこれに似たものになります。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server:             SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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)
+ OSVDB-3233: /cgi-bin/: This might be interesting...
+ 7558 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

上記の出力で、「+ OSVDB-3233: /cgi-bin/: This might be interesting...」という行に注目してください。この検出結果は cgi プラグインによって生成されます。この実験では、このディレクトリが想定されるディレクトリであり、この検出結果は抑制したい「ノイズ」であると仮定します。

先頭にハイフンを付けて -plugins オプションを使用する

このステップでは、Nikto が実行するプラグインを制御するために使用される構文について学びます。Nikto はこの目的のために -plugins オプションを提供します。プラグインを除外するには、その名前に先頭にハイフン (-) を付けて指定します。

含める、または除外できるプラグインを知るには、-list-plugins オプションを使用できます。これにより、すべての利用可能なプラグインとその簡単な説明のリストが出力されます。

すべてのプラグインをリストしてみましょう。

nikto -list-plugins

出力は長いリストになります。以下は、表示される内容の短いサンプルです。

- Nikto v2.5.0
---------------------------------------------------------------------------
Loaded Main Plugins:
 - apache_expect_header
   Apache Expect header XSS (CVE-2006-3918)
 - apache_users
   Checks for sensitive files in ~user directories
 - auth
   Checks for authentication problems
 - cgi
   Checks for CGI directories
 - clientaccesspolicy
   Checks for permissive Client Access Policy (Silverlight)
... (list continues) ...

このリストから、前のステップで特定した cgi のような、除外したいプラグインの正確な名前を見つけることができます。

単一のプラグインを除外するコマンドを構築する

このステップでは、学んだことを組み合わせて、単一のプラグインを除外する新しいスキャンのコマンドを構築します。ステップ 1 で特定した cgi プラグインをターゲットにします。

構文は簡単です。通常のスキャンコマンドに -plugins オプションを追加し、その後にハイフンを付けたプラグイン名を続けます。

コマンドの構造は次のとおりです:nikto -h [target] -plugins -[plugin_to_exclude]

この構造に基づいて、cgi プラグインを除外してローカルサーバーをスキャンするコマンドは次のようになります。

nikto -h http://127.0.0.1:8000 -plugins -cgi

このコマンドは、http://127.0.0.1:8000 に対して標準スキャンを実行するように Nikto に指示しますが、cgi プラグインに関連付けられたチェックはスキップします。次のステップでは、このコマンドを実行し、出力の違いを観察します。

スキャンを実行し、プラグインがスキップされたことを確認する

このステップでは、前のステップで構築したコマンドを実行します。cgi プラグインを除外してスキャンを実行することで、レポートに /cgi-bin/ ディレクトリに関連する検出結果が含まれなくなることを期待します。

それでは、ターミナルでコマンドを実行してください。

nikto -h http://127.0.0.1:8000 -plugins -cgi

スキャンは再度実行されますが、今回は実行するチェックが少ないため、わずかに速くなります。出力は次のようになります。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server:             SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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.
+ 7557 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

この出力をステップ 1 の出力と比較してください。+ OSVDB-3233: /cgi-bin/: This might be interesting... という行がなくなっていることに気づくでしょう。これにより、cgi プラグインをスキャンから正常に除外できたことが確認できます。

単一コマンドで複数のプラグインを除外する

このステップでは、単一のスキャンで複数のプラグインを除外する方法を学びます。これは、ノイズが多い、または関連性の低い複数のプラグインを一度に抑制したい場合に便利です。

複数のプラグインを除外するには、-plugins オプションの後に、カンマ区切りのプラグイン名のリストを指定します。リスト内の各プラグイン名は、ハイフンでプレフィックスを付ける必要があります。

構文は次のとおりです:nikto -h [target] -plugins -[plugin1],-[plugin2],-[plugin3]

前のコマンドを拡張して、apache_expect_header プラグインも除外しましょう。これは、一部のコンテキストでは優先度が低いと見なされる可能性のある、もう一つの一般的な検出結果です。

以下のコマンドを構築して実行してください。

nikto -h http://127.0.0.1:8000 -plugins -cgi,-apache_expect_header

出力はさらに簡潔になります。cgi および apache_expect_header プラグインの両方のチェックがスキップされているためです。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    127.0.0.1
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server:             SimpleHTTP/0.6 Python/3.10.12
+ The anti-clickjacking X-Frame-Options header is not present.
+ 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.
+ ... requests: 0 error(s) and 2 item(s) reported on remote host
+ End Time:           ...
---------------------------------------------------------------------------
+ 1 host(s) tested

ご覧のとおり、プラグインを選択的に除外することで、Nikto のスキャン動作を特定のニーズに合わせて調整し、よりクリーンで関連性の高いレポートを作成することができます。

まとめ

この実験では、特定のプラグインを除外することによって Nikto スキャンをカスタマイズする方法を学びました。まず、ベースラインとなるフルスキャンを実行して除外するプラグインを特定しました。次に、-plugins オプションと -list-plugins コマンドについて学びました。最後に、単一のプラグインと複数のプラグインの両方を除外するコマンドを構築および実行する練習を行い、スキャン出力の変化を観察することで結果を確認しました。このテクニックは、Nikto を使用して、より効率的で、ターゲットを絞った、ノイズの少ない脆弱性スキャンを実行するために不可欠です。