Nikto でウェブサーバーをスキャンする

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、オープンソースのウェブサーバースキャナーである Nikto を使用して、ウェブアプリケーションの潜在的な脆弱性を検出する方法を学びます。意図的に脆弱性を持たせた bWAPP アプリケーションに対してスキャン技術を練習しながら、スキャン結果を効果的に解釈する方法も学びます。

この実験では、Nikto のインストール、ターゲットの設定、スキャンの実行、および結果の分析について説明します。実践的な演習を通じて、この広く使用されているセキュリティツールを用いて基本的なウェブサーバーの脆弱性評価を行うための重要なスキルを習得します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") subgraph Lab Skills nmap/save_output -.-> lab-549948{{"Nikto でウェブサーバーをスキャンする"}} nmap/target_specification -.-> lab-549948{{"Nikto でウェブサーバーをスキャンする"}} end

Nikto のインストール

このステップでは、ウェブサーバーのセキュリティ問題を特定するのに役立つオープンソースのウェブサーバースキャナーである Nikto をインストールします。Nikto は、古いサーバーソフトウェア、危険なファイル/CGI、その他の一般的な脆弱性をチェックします。これらの脆弱性を理解することは、ウェブアプリケーションのセキュリティを確保するために重要です。

始める前に、正しいディレクトリにいることを確認しましょう。~/project ディレクトリは、ファイルを整理するためにすべての実験作業を行う場所です。

cd ~/project

次に、パッケージリストを更新する必要があります。これにより、最新のセキュリティ更新が含まれた最新バージョンの Nikto をインストールできます。

sudo apt update

これで Nikto のインストール準備が整いました。-y フラグを使用すると、インストールを自動的に確認してくれるため、手動で承認する必要がありません。

sudo apt install -y nikto

インストールが完了したら、インストールされたバージョンを確認することで、正常にインストールされたことを検証しましょう。これにより、Nikto が正しくインストールされていることが確認でき、使用するバージョンがわかります。

nikto -Version

次のような出力が表示されるはずです。

Nikto v2.1.6

これで、Nikto がシステムに正常にインストールされました。Nikto には /etc/nikto.conf に設定ファイルがありますが、この入門実験ではデフォルト設定を使用します。これらのデフォルト設定は、学習目的での徹底的なスキャンと適切な速度のバランスを良好に保ちます。

ターゲットサーバーの選択

このステップでは、脆弱性スキャンのターゲットとなるウェブサーバーを選択し、検証する方法を学びます。LabEx 環境に安全にセットアップされた、意図的に脆弱性を持たせた「bWAPP」(Buggy Web Application)というウェブアプリケーションを Nikto でスキャンします。この練習用アプリケーションは、実際のシステムに影響を与えることなくセキュリティテストを行うために設計されています。

  1. まず、スキャンを行う正しい作業ディレクトリに移動しましょう。これにより、プロジェクトファイルを整理することができます。

    cd ~/project
  2. スキャンを行う前に、ターゲットのウェブサーバーが正常に動作していることを確認する必要があります。curl コマンドの -I フラグを使用して、HTTP ヘッダーのみを取得します。

    curl -I http://localhost:8000

    成功した応答では、HTTP ステータスコード 200 OK が表示され、サーバーがアクティブであることを示します。

    HTTP/1.1 200 OK
  3. 次に、ターゲットの URL を環境変数として設定します。これにより、後のスキャンで参照しやすくなります。

    TARGET="http://localhost:8000"
  4. ウェブサーバーの応答を確認するために、簡単なテストを行いましょう。curl を使用してページの内容を取得し、最初の 5 行のみを表示します。

    curl $TARGET | head -n 5

    これにより、HTML コンテンツのサンプルが表示され、サーバーに正常に接続できることが確認できます。

  5. このターゲット URL を覚えておいてください。スキャンプロセス全体で使用します。セキュリティ評価を行う際には、ターゲットを把握しておくことが重要です。

脆弱性スキャンの実行

このステップでは、前のステップで選択したターゲットサーバーに対して、Nikto を使用して脆弱性スキャンを実行します。Nikto はオープンソースのウェブサーバースキャナーで、6700 以上の潜在的に危険なファイルやプログラムをテストし、古いサーバーバージョンをチェックし、一般的なウェブサーバーの誤設定を特定します。

スキャンを開始する前に、ツールを実行し、結果を保存する権限がある正しいディレクトリにいることが重要です。cd コマンドを使用すると、現在の作業ディレクトリを変更できます。

  1. まず、正しい作業ディレクトリにいることを確認します。

    cd ~/project

これで基本的なスキャンを実行しましょう。-h フラグはターゲットホストを指定します(この場合は、ローカルのテストサーバー)。Nikto は自動的に以下のような一般的な脆弱性をチェックします。

  • デフォルトのファイルとプログラム
  • 安全でないサーバー設定
  • 古いサーバーソフトウェア
  • 潜在的な XSS と SQL インジェクションの脆弱性
  1. ターゲットサーバー(http://localhost:8000)に対して基本的な Nikto スキャンを実行します。

    nikto -h http://localhost:8000
  2. スキャンが実行され、結果がリアルタイムで表示されます。次のような出力が表示されます。

    - Nikto v2.1.6
    - Target IP:          127.0.0.1
    - Target Hostname:    localhost
    - Target Port:        8000
    - Start Time:         [timestamp]

より徹底的な調査を行うために、チューニングオプションを使用することができます。-Tuning パラメータを使用すると、実行するテストを指定できます。ここでは、x は拡張テストを有効にし、6 は機密情報を漏洩する可能性のある一般的なファイルをチェックします。

  1. より包括的なスキャンを行うには、これらのオプションを追加できます。

    nikto -h http://localhost:8000 -Tuning x 6

    これにより、拡張テスト(x)が実行され、一般的なファイル(6)がチェックされます。

  2. スキャンが完了するまでに 1 - 2 分かかる場合があります。完了すると、次のような調査結果の要約が表示されます。

    + Server may be vulnerable to XSS
    + Retrieved x-powered-by header: PHP/7.4.3
    + OSVDB-3092: Possible sensitive directory

各調査結果には以下が含まれます。

  • 脆弱性の説明
  • 脆弱性の種類
  • 関連する参照情報(OSVDB ID など)
  • 影響を受けるコンポーネント
  1. 一部の調査結果は誤検知(false positive)の可能性があることに注意してください。次のステップでこれらを分析します。報告されたすべての問題が実際の脆弱性であるわけではないため、セキュリティテストでは手動による検証が重要です。

スキャン結果のレビュー

このステップでは、Nikto のスキャン結果を注意深く調べ、ターゲットのウェブサーバーに見つかった脆弱性を理解します。初心者の方にとって、Nikto が調査結果を構造化して整理していることを知っておくことは、セキュリティ問題を効率的に特定するために重要です。

  1. まず、スキャン結果が保存されている正しい作業ディレクトリにいることを確認します。

    cd ~/project

    このコマンドは、現在のディレクトリを Nikto が出力ファイルを保存した場所に変更します。

  2. Nikto の出力ファイルに表示される主要なセクションを分解してみましょう。

    • サーバー情報:実行中のウェブサーバーソフトウェア(Apache や Nginx など)とそのバージョン番号を明らかにします。
    • 脆弱性の調査結果:Nikto が検出した具体的なセキュリティ問題を示し、各問題の深刻度を示す指標が付いています。
    • スキャンの要約:スキャン中に見つかった内容の合計を示します。
  3. 最も重要な脆弱性をすばやく見つけるには、次のコマンドを実行します。

    grep -E '\+|OSVDB' ~/project/nikto_scan.txt

    このコマンドは、スキャン結果を検索し、脆弱性マーカー(+)または OSVDB 参照(脆弱性データベースの ID)を含む行のみを表示します。

  4. 結果をレビューする際には、特に以下に注意してください。

    • 「HIGH」リスクとラベル付けされた調査結果 - これらは最も危険な問題です。
    • 古いバージョンのサーバーソフトウェア - 古いプログラムには多くの場合、既知のセキュリティホールがあります。
    • 公開されているディレクトリや機密ファイル - これらは公開アクセスされるべきではありません。
    • クロスサイトスクリプティング(XSS)や SQL インジェクション(SQLi)などの一般的なウェブ攻撃。
  5. 典型的な調査結果の例を次に示します。

    + /config.php: PHP config file found
    + OSVDB-3092: /admin/: This might be interesting

    最初の行は、Nikto が公開されるべきでない設定ファイルを見つけたことを示しています。2 行目は、オープンソース脆弱性データベースの特定の脆弱性 ID を参照しています。

  6. 特定の OSVDB エントリの詳細情報を取得するには、脆弱性データベースをクエリできます。

    curl -s "https://vulners.com/api/v3/search/id/?id=OSVDB-3092" | jq '.data.attributes'

    このコマンドは、オンラインデータベースから脆弱性 OSVDB - 3092 の詳細情報を取得し、読みやすい形式に整形します。

  7. 結果を確認しながら、見つけた最も深刻な問題を書き留めてください。次のステップで調査結果を文書化する際に、これらのメモを使用します。一度にすべてを修正しようとせず、各脆弱性が何を意味するかを理解することに焦点を当ててください。

レポートの保存

この最後のステップでは、Nikto のスキャン結果をファイルに保存し、文書化して将来的な参照に利用します。レポートを保存することは、セキュリティテストにおいて極めて重要です。なぜなら、見つかった脆弱性の証拠となり、修復の進捗状況を追跡するのに役立つからです。

  1. まず、スキャンレポートを保存したい正しい作業ディレクトリにいることを確認します。cd コマンドを使ってディレクトリを変更します。

    cd ~/project
  2. 前のステップでのスキャン結果をプレーンテキスト形式で保存するには、次のコマンドを実行します。-output フラグで、Nikto が調査結果を書き込むファイル名を指定します。

    nikto -h http://localhost:8000 -output vuln_scan_report.txt
  3. レポートが正常に作成されたことを確認します。ls -l コマンドでファイルの詳細を一覧表示し、内容がある(サイズがゼロでない)レポートファイルが表示されるはずです。

    ls -l vuln_scan_report.txt
  4. チームメンバーとの共有や読みやすさを向上させるために、HTML 形式のレポートを生成することができます。-Format html オプションで、視覚的に整理されたレポートを作成します。

    nikto -h http://localhost:8000 -Format html -output vuln_scan_report.html
  5. テキストレポートの内容をすばやく確認するには、最初の 20 行を表示する head コマンドを使用します。これにより、スキャンが正常に完了したことを確認できます。

    head -n 20 vuln_scan_report.txt
  6. レポートには、セキュリティ専門家が分析するいくつかの重要なセクションが含まれています。

    • スキャンのメタデータ(日付、ターゲットなど) - いつ、何をスキャンしたかを示します。
    • 特定されたすべての脆弱性 - 注目が必要な核心的な調査結果です。
    • 修復の推奨事項 - 各問題に対する修正提案です。
    • スキャンの統計情報と完了時間 - スキャンのパフォーマンスを測定するのに役立ちます。
  7. これらのレポートファイルは、現在 ~/project ディレクトリに保存されています。以下のことができます。

    • 開発者に問題を修正してもらうために共有する。
    • 将来のスキャンと比較して進捗状況を追跡する。
    • セキュリティ監査文書に含める。
    • コンプライアンスレポートの証拠として使用する。

まとめ

この実験では、強力なオープンソースのウェブサーバースキャナーである Nikto をインストールし、設定して、ターゲットシステムの脆弱性を検出する方法を学びました。この演習では、インストールの検証、サーバーのアクセス可能性の確認、脆弱なウェブアプリケーションに対する包括的なスキャンの実行までを案内しました。

また、スキャン結果の解釈とレポートの生成に関する実践的な経験を積み、ウェブセキュリティの維持における脆弱性評価の重要な役割を実証しました。この実践的な知識は、ウェブサーバーにおける潜在的なセキュリティリスクを特定するための必須のスキルを身に付けるのに役立ちます。