はじめに
Nikto は、オープンソースのウェブサーバー スキャナーであり、6700 を超える潜在的に危険なファイル/プログラム、1250 を超えるサーバーの古いバージョン、270 を超えるサーバーのバージョン固有の問題など、複数の項目に対してウェブサーバーに対して包括的なテストを実行します。また、複数のインデックス ファイルの存在や HTTP サーバーのオプションなどのサーバー構成項目もチェックします。
この実験では、Nikto を使用して基本的なスキャンを実行する際の基本を学びます。まず、ターゲットとして機能するシンプルなローカル ウェブ サーバーをセットアップし、次に Nikto を使用してそれをスキャンし、結果を分析します。
ターゲットの IP アドレスまたはホスト名の特定
このステップでは、ターゲットのウェブサーバーのアドレスを特定し、確認します。スキャンを実行する前に、ターゲットの IP アドレスまたはホスト名を知っている必要があります。この実験では、セットアップ スクリプトによってローカル マシンでシンプルなウェブ サーバーが既に起動されています。
ネットワークのコンテキストでは、ご自身のマシンはホスト名 localhost または IP アドレス 127.0.0.1 で参照できます。この特別なアドレスは「ループバック」アドレスであり、常にローカル マシンを指します。
ウェブ サーバーが実行されており、アクセス可能であることを確認しましょう。curl コマンドを使用して、ローカル サーバーにリクエストを送信できます。サーバーはポート 8000 で実行されています。
ターミナルで次のコマンドを実行してください。
curl http://localhost:8000
シンプルなウェブ ページの HTML コンテンツが表示されるはずです。これにより、サーバーがアクティブであり、スキャン準備ができていることが確認できます。
<h1>Welcome to the Test Server</h1>
これで、localhost:8000 のターゲットを確認できたので、次のステップに進むことができます。
-h フラグを使用した基本的なスキャン コマンドの構築
このステップでは、基本的な Nikto スキャン コマンドを構築する方法を学びます。Nikto には多くのオプションがありますが、最も基本的なものはターゲット ホストを指定することです。
-h または -host フラグは、Nikto にどのサーバーをスキャンするかを指示するために使用されます。これやその他のオプションに慣れるために、Nikto のヘルプ メニューを表示できます。
ヘルプ情報を表示するには、次のコマンドを実行します。
nikto -Help
出力は非常に長くなり、利用可能なすべてのオプションがリストされます。スクロールするか、ターミナルの検索機能を使用して -h オプションを見つけてください。次のような説明が表示されます。
...
-h, -host ターゲット ホスト/IP/SSL 名
...
サーバーは標準の HTTP ポート (80) で実行されていないため、ポート番号も指定する必要があります。これは -p または -port フラグを使用して行うことができます。
これに基づいて、ポート 8000 でローカル サーバーをスキャンするコマンドは nikto -h localhost -p 8000 となります。次のステップでこのコマンドを実行します。
ターゲット サーバーに対するスキャンの実行
このステップでは、構築したコマンドを使用して Nikto スキャンを実行します。これによりスキャン プロセスが開始され、Nikto はターゲット サーバーに一連のリクエストを送信して潜在的な問題を調査します。
それでは、ローカル ウェブ サーバーに対してスキャンを実行してください。
nikto -h localhost -p 8000
コマンドを実行すると、Nikto はスキャンを開始します。まずターゲットに関する基本的な情報を表示し、その後テストの実行を開始します。プロセスが完了するまでにしばらく時間がかかる場合があります。結果はリアルタイムでターミナルに直接表示されます。
スキャン中のリアルタイム出力を観察する
このステップでは、Nikto スキャンによって生成された出力を調べます。スキャンが実行されると、Nikto はその発見事項を報告します。各発見事項は通常、プラス記号 (+) でプレフィックスが付けられます。
前のステップからの出力は、以下に似ているはずです。バージョン番号と時刻は異なります。
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 8000
+ Start Time: 2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: SimpleHTTP/0.6 Python/3.10.12
+ anti-clickjacking X-Frame-Options ヘッダーが存在しません。
+ X-XSS-Protection ヘッダーが定義されていません。このヘッダーは、ユーザーエージェントに一部の XSS 形式から保護するように指示する場合があります。
+ X-Content-Type-Options ヘッダーが設定されていません。これにより、ユーザーエージェントがサイトのコンテンツを MIME タイプとは異なる方法でレンダリングする可能性があります。
+ CGI ディレクトリは見つかりませんでした ('-C all' を使用してすべての可能なディレクトリを強制的にチェックしてください)
+ 許可されている HTTP メソッド: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE メソッドがアクティブであり、ホストが XST に対して脆弱であることを示唆しています。
...
+ テストされたホスト数: 1
しばらく時間を取って出力を読んでください。Nikto がサーバー ソフトウェアを識別し、重要なセキュリティ ヘッダー ( X-Frame-Options など) をチェックし、許可されている HTTP メソッドをリストし、潜在的な脆弱性を報告していることがわかります。この情報は、サーバーのセキュリティ体制を理解するために非常に重要です。
サーバーバナーとバージョン情報の特定
このステップでは、Nikto が提供する最も重要な情報の一つであるサーバーバナーに焦点を当てます。サーバーバナーとは、ウェブサーバーがレスポンスヘッダーで送信するテキスト文字列であり、通常はサーバーソフトウェアとそのバージョンを識別します。
攻撃者はこの情報を使用して、特定のソフトウェアバージョンに関連する既知の脆弱性を見つけます。前のステップのスキャン結果には、+ Server: で始まる行が表示されているはずです。
+ Server: SimpleHTTP/0.6 Python/3.10.12
この行は、ウェブサーバーが Python/3.10.12 上で動作する SimpleHTTP/0.6 であることを示しています。
より大きな出力から特定の情報を分離する練習をするために、スキャンを再実行し、grep コマンドを使用して結果をフィルタリングし、「Server」を含む行のみを表示することができます。
以下のコマンドを実行してください。
nikto -h localhost -p 8000 | grep Server
このコマンドは、Nikto の出力を grep にパイプし、grep はその後、「Server」という単語を含む行のみをフィルタリングして表示します。これは、大きなログファイルやコマンド出力を解析するための非常に役立つテクニックです。出力は、サーバーを識別する単一行になるはずです。
+ Server: SimpleHTTP/0.6 Python/3.10.12
まとめ
この実験では、Nikto を使用して基本的なウェブサーバーのスキャンを正常に実行しました。ターゲットの特定方法、-h および -p フラグを使用した基本的なスキャンコマンドの構築と実行方法を学びました。また、リアルタイムの出力を観察し、grep のようなツールを使用してサーバーバナーなどの特定の情報を分離する練習もしました。
これは Nikto ができることのほんの始まりに過ぎません。SSL チェック、脆弱性データベースの検索、さまざまな出力形式など、より的を絞った詳細なスキャンのための膨大なオプションがあります。これで、これらの高度な機能を探索し、ウェブセキュリティテストスキルを向上させるための基本的な知識を習得しました。


