Nikto を使用した Kali での脆弱性スキャン

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

はじめに

この実験では、Kali Linux 環境で強力なオープンソースツールである Nikto を使用した Web 脆弱性スキャンの基本を学びます。目標は、スキャンの実行、結果の解釈、およびさらなる分析のためのレポート保存を通じて、Web サーバー上の潜在的なセキュリティ問題を特定する方法を理解することです。LabEx VM でのステップバイステップの演習を通じて、Nikto のコマンドラインインターフェースの実践的な経験を積むことができます。この実験は初心者向けに設計されており、制御されたコンテナ環境で各プロセスをガイドし、Web セキュリティ評価の基礎スキルを構築します。

これはガイド付き実験(Guided Lab)であり、学習と練習を支援するためのステップバイステップの指示を提供します。指示に従って各ステップを完了し、実践的な経験を積んでください。過去のデータによると、これは中級レベルの実験で、完了率は 65% です。学習者から 94% の高い評価を得ています。

環境のセットアップと Nikto のインストール

最初のステップでは、Kali Linux コンテナで作業環境をセットアップし、Web 脆弱性スキャナーである Nikto がインストールされ、使用可能な状態であることを確認します。この実験は LabEx VM 内で実施されます。ターミナルを開くと、自動的に Kali Linux コンテナのシェルに接続されます。手動でコンテナを起動したり、シェルに入ったりする必要はありません。環境はあらかじめ設定されています。

まず、セットアップの内容を理解しましょう。LabEx VM は Docker がプリインストールされた独立したクラウドホスト上で動作しており、Kali Linux コンテナが自動的に実行されるように設定されています。すべての操作はこのコンテナのターミナル内で行われます。Nikto は、古いソフトウェアや設定ミスなどの脆弱性を Web サーバーからスキャンするためのツールです。作業を進める前に、これがインストールされていることを確認する必要があります。

まず、Kali Linux コンテナのパッケージリストを更新して、利用可能なソフトウェアの最新情報を取得します。ターミナルで次のコマンドを実行してください。

apt update

このコマンドは、設定されたリポジトリから最新のパッケージ情報を取得します。完了までに少し時間がかかる場合があり、パッケージリストのダウンロード状況を示す出力が表示されます。出力例は以下の通りです。

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
Get:2 http://mirrors.cloud.aliyuncs.com/kali kali-rolling/main amd64 Packages [18.1 MB]
...
Fetched 18.5 MB in 5s (3,700 kB/s)
Reading package lists... Done

更新が完了したら、コンテナに Nikto がインストールされていない場合はインストールします。次のコマンドを使用してインストールしてください。

apt install -y nikto iputils-ping

-y フラグは、入力プロンプトを表示せずに自動的にインストールを承認します。このプロセスには少し時間がかかる場合があり、パッケージのダウンロードとセットアップの進行状況が表示されます。出力例は以下の通りです。

Reading package lists... Done
Building dependency tree... Done
...
Setting up nikto (1:2.1.5-3.1) ...

インストール後、バージョンを確認して Nikto が正しくインストールされたことを検証します。次のコマンドを実行してください。

nikto -Version

このコマンドはインストールされた Nikto のバージョンを表示し、使用準備が整ったことを確認します。期待される出力は以下のようになります。

Nikto 2.5.0 (LW 2.5)

Nikto がインストールされたので、次のステップに進み、Web サーバーのスキャンに使用する準備が整いました。このステップにより、環境が適切に構成され、今後のタスクに必要なツールが利用可能であることが保証されました。

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

Kali Linux コンテナに Nikto がインストールされたので、基本的な Web 脆弱性スキャンの実行方法を学びます。このステップは前のステップの環境セットアップに基づいており、Nikto を使用して Web サーバー上の潜在的なセキュリティ問題を特定する方法を紹介します。LabEx VM でターミナルを開くと、すでに Kali Linux コンテナのシェルに入っているため、手動でコンテナを起動したり入ったりする必要はありません。

基本的な Nikto スキャンが何を行うかを理解しましょう。Nikto は、悪用される可能性のある古いソフトウェアバージョンや設定ミスなど、一般的な脆弱性についてターゲット Web サーバーをスキャンします。この実験では、脆弱性スキャンの学習と練習用に設計された、公開テストサーバー testphp.vulnweb.com を使用します。これにより、倫理的かつ安全な方法でスキャンを行うことができます。

まず、Nikto を使用してテストサーバーに対して基本的なスキャンを実行します。ターミナルに次のコマンドを入力してください。

nikto -h testphp.vulnweb.com

-h オプションは、スキャンするホストを指定します。ここでは testphp.vulnweb.com です。このスキャンは、ネットワークの状態やターゲットの設定によって完了までに数分かかる場合があります。スキャン中、ターミナルに進行状況を示す出力が表示されます。出力例は以下の通りです。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Start Time:         2025-04-21 07:29:12 (GMT0)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ /: Retrieved x-powered-by header: PHP/5.6.40-38+ubuntu20.04.1+deb.sury.org+1.
...
---------------------------------------------------------------------------
+ 1 host(s) tested

niktotestphp.vulnweb.com をスキャンする際、エラーメッセージが表示されることがありますが、これは想定内です。主要な情報に注目してください。

この出力は、ターゲットの IP アドレス、ホスト名、ポートなどの初期情報を提供します。また、欠落しているセキュリティヘッダーや古いコンポーネントなどの潜在的な問題もリストアップされます。出力が詳細に見えても心配しないでください。ここでの目的は、スキャンを実行し、そのプロセスを観察することです。次のステップでは、これらの結果をより詳しく分析します。

スキャンが開始されない、または出力が表示されない場合は、LabEx VM 内でインターネット接続が有効であることを確認してください。次のコマンドを実行して、ターゲットへの接続をテストできます。

ping -c 4 testphp.vulnweb.com

このコマンドは、ターゲットにいくつかのパケットを送信して、到達可能かどうかを確認します。応答があればサーバーにアクセス可能です。応答がない場合は、スキャンを再試行するか、LabEx VM のネットワーク設定を確認してください。

PING testphp.vulnweb.com (44.228.249.3) 56(84) bytes of data.
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=1 ttl=55 time=21.4 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=2 ttl=55 time=21.7 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=3 ttl=55 time=21.5 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=4 ttl=55 time=21.5 ms

--- testphp.vulnweb.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 21.435/21.523/21.699/0.103 ms

このステップでは、基本的な Nikto スキャンの実行方法を学び、以降のステップで行うより具体的なスキャンと分析の基礎を築きました。Kali Linux コンテナのターミナルで直接スキャンコマンドを実行し、初期出力を確認しました。

Nikto のチューニングオプションを使用したターゲットスキャン

前のステップで実行した基本スキャンに基づき、Nikto のチューニング(Tuning)オプションを使用して、よりターゲットを絞ったスキャンを実行する方法を学びます。Nikto では、特定の種類の脆弱性にスキャンを集中させることができます。これは、特定の問題を探している場合やスキャン時間を短縮したい場合に便利です。

このステップでは、Kali Linux コンテナ環境で Nikto のチューニング機能を使用してスキャンをカスタマイズする方法を学びます。

まず、Nikto で利用可能なチューニングオプションを確認しましょう。次のコマンドで、利用可能なチューニングオプションの全リストを表示できます。

nikto -h testphp.vulnweb.com -Display V

-Display V オプションは、チューニング情報を含む詳細な出力を表示します。出力には、数字と文字でラベル付けされたさまざまなテストカテゴリが表示されます。

次に、一般的なファイル関連の脆弱性に焦点を当てたターゲットスキャンを実行してみましょう。次のコマンドを実行してください。

nikto -h testphp.vulnweb.com -Tuning 2

-Tuning 2 オプションは、特にファイル漏洩(File Disclosure)の脆弱性をテストします。このスキャンは完了までに数分かかる場合があり、ターミナルには以下のような出力が表示されます。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ Scanning for File Upload vulnerabilities...
+ Multiple file upload fields found on login.php
...

複数のチューニングオプションを組み合わせることもできます。たとえば、ファイル漏洩 (2) と設定ミス (9) の両方の脆弱性をスキャンするには、次のように入力します。

nikto -h testphp.vulnweb.com -Tuning 2,9

この組み合わせスキャンでは、両方のカテゴリの問題をチェックし、フルスキャンを実行することなく、特定の脆弱性タイプをより包括的に把握できます。

スキャンで出力が得られない、またはエラーが発生した場合は、次のコマンドで接続をテストして、インターネット接続が有効であることを確認してください。

ping -c 4 testphp.vulnweb.com

このステップでは、Nikto のチューニングオプションを使用して、特定のセキュリティ上の懸念に焦点を当てた、よりターゲットを絞ったスキャンを実行する方法を理解しました。次のステップでは、脆弱性スキャン機能を強化する Nikto の追加機能を探索します。

出力形式のカスタマイズとスキャン結果の保存

Nikto を使用したターゲットスキャンの方法を学んだ後は、ドキュメント化と分析のために出力形式をカスタマイズし、スキャン結果を保存する方法を探索します。発見した内容を適切に記録することは、セキュリティ評価の重要な側面です。Nikto は、スキャン結果をフォーマットして保存するためのいくつかのオプションを提供しています。

このステップでは、Kali Linux コンテナのターミナルで直接、さまざまな形式のレポートを生成する方法を学びます。

まず、Nikto が提供するさまざまな出力形式オプションを確認しましょう。最も一般的な形式は次のとおりです。

  1. Text (デフォルト): プレーンテキスト出力
  2. HTML: フォーマットされた HTML レポート
  3. CSV: 表計算ソフトにインポートするためのカンマ区切り値
  4. XML: 自動処理のための構造化された XML データ

スキャン結果をデフォルトのテキスト形式で保存するには、次を実行します。

nikto -h testphp.vulnweb.com -o /root/nikto_text_report.txt

-o オプションは、出力ファイルのパスを指定します。スキャンが完了したら、内容を表示してファイルが作成されたことを確認します。

cat /root/nikto_text_report.txt

より読みやすく構造化された形式である HTML レポートを生成するには、次を使用します。

nikto -h testphp.vulnweb.com -Format htm -o /root/nikto_report.html

-Format htm オプションは、出力を HTML としてフォーマットするよう Nikto に指示します。ターミナルで HTML ファイルを直接表示することはできませんが、作成されたかどうかを確認することはできます。

ls -l /root/nikto_report.html

他のツールや表計算ソフトにインポートする必要があるデータの場合は、CSV 形式のレポートを生成できます。

nikto -h testphp.vulnweb.com -Format csv -o /root/nikto_report.csv

スキャン完了後、CSV ファイルを確認します。

head /root/nikto_report.csv

これにより、CSV ファイルの最初の数行が表示され、データがどのように構造化されているかがわかります。

これらの異なる出力形式は、それぞれ異なる目的に役立ちます。

  • テキストレポートはターミナルで簡単に読めます。
  • HTML レポートは視覚的に整理されており、チームとの共有に適しています。
  • CSV および XML 形式は、他のセキュリティツールやデータベースへのインポートに最適です。

出力形式をカスタマイズする方法を学ぶことで、調査結果を効果的に文書化し、伝達する能力が向上しました。

高度なスキャンのための Nikto アドバンスオプション

最後のステップでは、より深く包括的なスキャンを可能にする Nikto の高度なオプションをいくつか探索します。これらの機能は、隠れた脆弱性を発見し、潜在的なセキュリティ問題についてより多くのコンテキストを提供するのに役立ちます。これは前のステップの知識に基づいており、Kali Linux コンテナ環境内での Nikto の高度な機能に焦点を当てています。

Nikto の最も便利なアドバンスオプションをいくつか見ていきましょう。

まず、単純な侵入検知システム(IDS)を回避するために -evasion テクニックを使用してみましょう。これは、セキュリティ制御をテストする際に役立ちます。

nikto -h testphp.vulnweb.com -evasion 1

-evasion 1 オプションは、ランダムな大文字と小文字を使用して URL をエンコードします。次のような出力が表示されるはずです。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Evasion technique:  Random URI encoding (non-UTF8)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
...

次に、特定のポートとプロトコルでスキャンしてみましょう。これまではデフォルトの HTTP ポート 80 をスキャンしてきましたが、異なるポートを指定することもできます。

nikto -h testphp.vulnweb.com -port 443 -ssl

-port 443 オプションはポート 443 をターゲットにし、-ssl は HTTPS プロトコルを使用するよう Nikto に指示します。このテストサーバーでは HTTPS が有効になっていない可能性があるため結果が返されないかもしれませんが、安全な Web サービスをスキャンする方法を示しています。

認証が必要なサイトの場合、Nikto は基本的な HTTP 認証を処理するオプションを提供しています。

nikto -h testphp.vulnweb.com -id admin:password

-id オプションを使用すると、ユーザー名:パスワード の形式で資格情報を指定できます。このテストサーバーではこれらの資格情報は機能しませんが、認証が必要なスキャンの設定方法を示しています。

また、スキャンの詳細度(冗長性)を上げて、より詳細な情報を取得することもできます。

nikto -h testphp.vulnweb.com -Display V -o /root/nikto_verbose_report.txt

-Display V オプションは詳細な出力を提供し、実行された各テストに関する詳細情報を表示します。これを -o でファイルに保存することで、スキャンの包括的なドキュメントが得られます。

最後に、いくつかのオプションを組み合わせて包括的なスキャンを実行してみましょう。

nikto -h testphp.vulnweb.com -Tuning x -no404 -Format htm -o /root/final_report.html

このコマンドの内容は以下の通りです。

  • -Tuning x: DoS 脆弱性以外のすべてをテストします。
  • -no404: 404 エラーを報告しないことで、誤検知(偽陽性)を減らします。
  • -Format htm: レポートを HTML 形式で保存します。
  • -o: 出力ファイルを指定します。

このステップでは、Web 脆弱性スキャン機能を拡張するいくつかの高度な Nikto オプションを紹介しました。これらの異なるテクニックを組み合わせることで、徹底的なセキュリティ評価を実施し、特定のニーズに合わせた包括的なレポートを生成できます。

まとめ

この実験では、Kali Linux 環境で強力な Web 脆弱性スキャナーである Nikto を使用する方法を学びました。環境のセットアップと Nikto のインストールから始め、徐々に高度なスキャン手法へと進みました。

まず、テストサーバー上の一般的な脆弱性を特定するための基本スキャンから開始し、次に Nikto のチューニングオプションを使用して特定の種類の脆弱性に焦点を当てたターゲットスキャンの実行方法を学びました。また、調査結果を効果的に文書化し伝達するために、テキスト、HTML、CSV を含むさまざまな出力形式を探索しました。

最後に、回避テクニック、ポートとプロトコルの指定、認証処理、詳細出力など、より深いスキャンのための高度なオプションについて学びました。これらのスキルは、教育目的であれプロフェッショナルなセキュリティテストであれ、Web セキュリティ評価を実施するための強固な基盤となります。

この実験で得られた実践的な経験により、Nikto のコマンドラインインターフェースに関する実用的な知識と、特定の要件に応じてスキャンをカスタマイズする能力が身につきました。これらは、Web セキュリティや脆弱性評価に興味があるすべての人にとって不可欠なスキルです。