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

Kali LinuxKali LinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kali(("Kali")) -.-> kali/KaliGroup(["Kali"]) kali/KaliGroup -.-> kali/term_ops("Kali Terminal") kali/KaliGroup -.-> kali/file_ctrl("File Management") kali/KaliGroup -.-> kali/pkg_ops("Package Management") kali/KaliGroup -.-> kali/web_ctrl("Web Services") kali/KaliGroup -.-> kali/vuln_scan("Vulnerability Scanning") kali/KaliGroup -.-> kali/nikto_ops("Nikto Scanner") subgraph Lab Skills kali/term_ops -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} kali/file_ctrl -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} kali/pkg_ops -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} kali/web_ctrl -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} kali/vuln_scan -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} kali/nikto_ops -.-> lab-552301{{"Kali Linux での Nikto を使用した脆弱性スキャン"}} end

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

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

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

まず、Kali Linux コンテナ内のパッケージリスト(package list)を更新して、利用可能なソフトウェアに関する最新の情報があることを確認します。ターミナルで次のコマンドを実行します。

apt update

このコマンドは、設定されたリポジトリ(repository)から最新のパッケージ情報を取得します。完了するまでにしばらく時間がかかる場合があり、パッケージリストのダウンロードなど、進行状況を示す出力が表示されます。出力例は次のようになります。

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 フラグ(flag)は、入力を求めることなくインストールを自動的に確認します。このプロセスにはしばらく時間がかかる場合があり、パッケージのダウンロードや設定など、インストールの進行状況を示す出力が表示されます。出力例は次のようになります。

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 スキャンの実行

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

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

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

nikto -h testphp.vulnweb.com

-h オプションは、スキャンするホスト(host)を指定します。この場合、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

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

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

ping -c 4 testphp.vulnweb.com

このコマンドは、ターゲットにいくつかのパケット(packet)を送信して、到達可能かどうかを確認します。応答が表示される場合は、サーバーにアクセスできます。そうでない場合は、スキャンを再試行するか、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 のチューニングオプションを使用して、よりターゲットを絞ったスキャンを実行する方法を学びます。Nikto を使用すると、特定の種類(type)の脆弱性にスキャンを集中させることができます。これは、特定の問題を探している場合や、スキャン時間を短縮したい場合に役立ちます。

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

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

nikto -h testphp.vulnweb.com -Display V

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

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

nikto -h testphp.vulnweb.com -Tuning 2

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

- 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 でターゲットを絞ったスキャンを実行する方法を学んだので、ドキュメント化と分析のために出力形式をカスタマイズし、スキャン結果を保存する方法を説明します。調査結果を適切に文書化することは、セキュリティ評価(security assessment)の重要な側面であり、Nikto はスキャン結果をフォーマットして保存するためのいくつかのオプションを提供します。

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

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

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

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

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

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

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 で最も役立つ高度なオプションのいくつかを見てみましょう。

まず、-evasion テクニックを使用して、単純な侵入検知システム(intrusion detection system)をバイパスします。これは、セキュリティコントロール(security control)をテストする場合に役立ちます。

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 オプションを使用すると、username:password 形式でクレデンシャル(credential)を指定できます。テストサーバーでは、これらのクレデンシャルは機能しませんが、認証されたスキャンを構成する方法を示しています。

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

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 脆弱性(DoS vulnerability)を除くすべてをテストします
  • -no404 は、404 エラーを報告しないことで、誤検知(false positive)を減らします
  • -Format htm は、レポートを HTML 形式で保存します
  • -o は、出力ファイルを指定します

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

まとめ

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

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

最後に、回避テクニック(evasion technique)、ポートとプロトコルの指定、認証処理、詳細な出力など、より詳細なスキャンを行うための高度なオプションを発見しました。これらのスキルは、教育目的であろうと、プロフェッショナルなセキュリティテストであろうと、Web セキュリティ評価(web security assessment)を実施するための確固たる基盤を提供します。

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