はじめに
Nikto は、人気のあるオープンソースの Web サーバー スキャナーで、6,700 を超える潜在的に危険なファイル/プログラム、1,250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対して Web サーバーに対して包括的なテストを実行します。
セキュリティ スキャンを実行する際、侵入検知システム (IDS)、侵入防止システム (IPS)、または Web アプリケーション ファイアウォール (WAF) のようなセキュリティ システムによる検出を回避することが望ましい場合があります。これらのシステムは、悪意のあるパターンをネットワーク トラフィックで監視します。Nikto には、スキャンを偽装し、これらのシステムに対して目立たなくするための組み込みの回避技術が含まれています。
この実験では、Nikto の -evasion オプションを使用して、よりステルスなスキャンを実行する方法を学びます。
-evasion で利用可能な回避技術を理解する
このステップでは、Nikto で利用可能なさまざまな回避技術を一覧表示し、理解する方法を学びます。-evasion オプション(または -e)は、回避技術を指定するために使用されます。利用可能なすべての技術を表示するには、特定の技術番号を指定せずに -evasion オプションのみで Nikto を実行できます。
利用可能な技術を一覧表示してみましょう。ターミナルを開き、次のコマンドを実行します。
nikto -evasion
各技術の番号と短い説明とともに、利用可能な技術のリストが表示されます。
- Evasion options:
1 Random URI encoding (non-UTF8)
2 Directory self-reference (/./)
3 Premature URL ending
4 Prepend long random string to request
5 Fake parameter
6 GET instead of HEAD
7 Use a random User-Agent
8 Random case sensitivity
A Use a random IP for the Source-IP
B Obfuscate with TABs
C Use a carriage return (CR) as a line-ending
D Use a binary value as a line-ending
E Use a long false request to mis-direct an IDS
F Use Windows-style directory separators (\)
この出力は、Nikto が検出を回避するためにリクエストを変更するために使用できるさまざまな方法を示しています。次のステップでは、これらの技術の一部を使用する練習をします。
ランダム URI エンコーディングのための -evasion 1 を使用したスキャンの実行
このステップでは、最初の回避技術である「ランダム URI エンコーディング」を使用します。この技術は、リクエスト URI の一部を標準的でない方法でエンコードします。Web サーバーは通常これらのエンコーディングを理解しますが、単純なシグネチャベースの IDS はパターンを一致させることができず、リクエストが検出されずに通過することを許可する可能性があります。
実験のセットアップで開始されたシンプルな Web サーバーに対してスキャンを実行します。これは http://127.0.0.1:8000 で実行されています。
技術 1 を使用するには、-evasion オプションに番号を追加します。ターミナルで次のコマンドを実行します。
nikto -h http://127.0.0.1:8000 -evasion 1
Nikto はターゲットのスキャンを開始します。スキャンは通常どおり進行しますが、サーバーに送信されるリクエストの URI はランダムにエンコードされます。
以下は、表示される可能性のある出力のサンプルです。
- 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)
+ Server leaks a possible file system path: /home/labex/project/test-site/. This may suggest the server is running on a Unix-like system.
+ Allowed HTTP Methods: GET, HEAD, OPTIONS
+ Public HTTP Methods: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE method is active, suggesting the host is vulnerable to XST
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ... (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
スキャンが完了し、結果が提供されていることに注意してください。ただし、基になるリクエストは、より回避的になるように変更されています。
ディレクトリ自己参照のための -evasion 2 を使用したスキャンの試行
次に、別の技術を試してみましょう。回避技術 2 は「ディレクトリ自己参照」を使用します。このメソッドは、リクエスト URL に /./ を挿入します(例:/cgi-bin/ が /./cgi-bin/ になります)。ほとんどの Web サーバーは、このパスを正規化し、通常の要求として扱いますが、正確なパス一致を探している一部のセキュリティフィルターを混乱させる可能性があります。
同じターゲットに対して回避技術 2 を使用して Nikto スキャンを実行します。
nikto -h http://127.0.0.1:8000 -evasion 2
スキャンが再度実行されますが、今回はディレクトリ自己参照のトリックが使用されます。サーバーは変更されたリクエストに正しく応答するため、出力は前のスキャンと非常に似ています。
- 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.
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
重要な点は、セキュリティ監視をバイパスするのに役立つ技術を使用しながら、依然として有効なスキャン結果を得ているということです。
長いランダム文字列を先頭に追加する -evasion 4 の使用
このステップでは、回避技術 4 を探求します。これはリクエストの先頭に長いランダム文字列を追加します。この技術の背後にある考え方は、リクエストの実際の悪意のある部分や興味深い部分を、一部の単純な IDS/IPS デバイスのバッファ制限を超えて押し出すことです。IDS がリクエストの最初の部分のみを検査する場合、実際のペイロードを見逃す可能性があります。
この技術を使用してスキャンを実行しましょう。
nikto -h http://127.0.0.1:8000 -evasion 4
再び、Nikto はスキャンを実行しますが、今回は長いランダム文字列が各リクエストの先頭に追加されます。Web サーバーはこのジャンクデータを無視しますが、パターンマッチングセキュリティシステムを騙す効果的な方法となり得ます。
出力は以前のスキャンと同様になり、この技術がターゲットサーバーに対するスキャンの有効性を妨げないことを示しています。
- 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
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
単一スキャンでの複数の回避技術の組み合わせ
Nikto の回避機能の最も強力な機能の 1 つは、単一のスキャンで複数の技術を組み合わせる能力です。これにより、より複雑で多様なリクエストが作成され、IDS によるスキャンの検出がさらに困難になります。
技術を組み合わせるには、使用したい技術の番号を順番にリストするだけです。たとえば、ランダム URI エンコーディング (1)、ディレクトリ自己参照 (2)、および長いランダム文字列の先頭追加 (4) を組み合わせるには、-evasion 124 を使用します。
これらの 3 つの技術を組み合わせたスキャンを実行しましょう。
nikto -h http://127.0.0.1:8000 -evasion 124
Nikto はこれらの 3 つの技術すべてをリクエストに適用し、高度に難読化されたスキャンを作成します。このレイヤードアプローチは、検出をバイパスする可能性を大幅に高めます。
出力は再び同じ結果を示し、回避技術の組み合わせがスキャンの機能性を損なわなかったことを確認します。
- 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.
...
+ 15 requests: 0 error(s) and 7 item(s) reported on remote host
+ End Time: ...
---------------------------------------------------------------------------
+ 1 host(s) tested
技術を組み合わせることで、想定される特定の防御策に合わせて、はるかに堅牢でステルス性の高いスキャン戦略を作成できます。
まとめ
この実験では、Nikto の強力な回避機能を使用して、よりステルス性の高い Web 脆弱性スキャンを実行する方法を学びました。まず、-evasion オプションを使用して利用可能な技術を一覧表示しました。次に、ランダム URI エンコーディング (1)、ディレクトリ自己参照 (2)、および長いランダム文字列の先頭追加 (4) を含む個々の技術を適用する練習をしました。
最後に、これらの技術を組み合わせて多層的な回避戦略を作成する方法を学び、侵入検知システムがスキャンアクティビティを特定する難易度を大幅に高めました。これらのスキルは、アクティブな監視が行われている環境で効果的かつ慎重なセキュリティ評価を実行するために不可欠です。


