Nmap で脆弱性をスキャンする

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、ネットワーク脆弱性スキャンに Nmap を使用する方法を学びます。Nmap をインストールし、Nmap スクリプトエンジン (NSE) を利用して高度なスキャンを行い、結果を分析してセキュリティ上の弱点を特定します。

実践的な演習を通じて、基本的なスキャンとスクリプトによる強化スキャンを実行し、調査結果を解釈して保存する方法を学びます。この実験では、効果的なネットワークセキュリティ評価のために Nmap の主要な機能を実際に操作する経験を積むことができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/installation -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/output_formats -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/save_output -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/os_version_detection -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/service_detection -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/scripting_basics -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} nmap/script_management -.-> lab-549947{{"Nmap で脆弱性をスキャンする"}} end

Nmap のインストール

このステップでは、ネットワーク探索とセキュリティ監査に使用される強力なオープンソースツールである Nmap (Network Mapper) をインストールします。Nmap は、ネットワーク上のホスト、サービス、脆弱性を特定するためのスキャンに広く使用されています。これは、セキュリティ専門家がネットワークに接続されているデバイスとそれらが実行しているサービスを理解するのに役立つデジタル地図作成者のようなものです。

LabEx の仮想マシン (VM) 環境には必要な依存関係がすでにインストールされているため、Nmap 自体のインストールに集中できます。以下の手順に注意深く従ってください。

  1. まず、Nmap の最新バージョンを取得するために、パッケージリストを更新する必要があります。これは、旅に出る前に最新の地図更新を確認するようなものです。

    sudo apt update
  2. 次に、このコマンドを使用して Nmap をインストールします。-y フラグはインストールを自動的に承認し、時間を節約します。

    sudo apt install -y nmap
  3. インストール後、Nmap のバージョンを確認することで、正しくインストールされたことを検証しましょう。これにより、ツールが使用可能な状態であることが確認できます。

    nmap --version

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

    Nmap version 7.92 ( https://nmap.org )
  4. より実践的な検証として、ローカルホスト (自分のマシン) に対して簡単なスキャンを実行します。これにより、他のシステムをスキャンする前に Nmap の動作を理解することができます。

    nmap localhost

    このコマンドは、システム上の開いているポートに関する基本情報を表示し、ローカルで実行されているサービスを示します。これは、他の家を調べる前に自分の家のどのドアや窓が開いているかを確認するようなものです。

Nmap スクリプトエンジンのロード

このステップでは、強力な Nmap スクリプトエンジン (NSE) を探索します。NSE は、Nmap の基本的なスキャン機能を拡張するツールボックスのようなものです。NSE をネットワークスキャナに専用ツールを追加するようなものと考えてください。NSE には、脆弱性を検出したり、詳細なサービス情報を収集したり、高度なネットワーク探索タスクを実行したりするための数百の事前に書かれたスクリプトが含まれています。

始める前に、これらのスクリプトはシステム上の Nmap と一緒にすでにインストールされていることを理解することが重要です。利用可能なスクリプトを探索してみましょう。

  1. まず、インストールされているすべての NSE スクリプトをリストアップします。このコマンドは、Nmap インストールに含まれるスクリプトの完全なコレクションを表示します。

    ls /usr/share/nmap/scripts/
  2. 各スクリプトには、その機能を説明するドキュメントがあります。例として、http-title スクリプトを調べてみましょう。このスクリプトは、ウェブページのタイトルを取得します。次のコマンドは、その目的と使い方を表示します。

    nmap --script-help http-title
  3. では、NSE を使用して最初の実際のスキャンを行いましょう。このコマンドは、2 つの重要なオプションを使用してローカルマシン (localhost) をスキャンします。

    • -sC: デフォルトの NSE スクリプトセットを実行します (ほとんどのスキャンに安全で有用です)
    • -sV: サービスのバージョンを判定しようとします (古いソフトウェアを特定するために重要です)
    nmap -sC -sV localhost
  4. 特定のスクリプトを対象にするために、http-title スクリプトのみを使用して scanme.nmap.org (Nmap が提供するテストサイト) をスキャンします。これは、特定の情報に焦点を当てる方法を示しています。

    nmap --script http-title scanme.nmap.org
  5. 最後に、より包括的なスキャンのために複数のスクリプトを組み合わせることができます。この例では、http-titlehttp-headers の両方のスクリプトを scanme.nmap.org に対して実行します。

    nmap --script "http-title and http-headers" scanme.nmap.org

異なるスクリプトは異なる目的を持っていることを忘れないでください。一部のスクリプトは情報を収集し、他のスクリプトは脆弱性をテストします。本番システムでスクリプトを使用する前に、常にそのドキュメントを確認してください。

脆弱性スキャンの実行

このステップでは、Nmap のスクリプトエンジンを使ってセキュリティ脆弱性を検出する方法を学びます。脆弱性スキャンは、攻撃者がシステムの弱点を悪用する前にそれを特定するのに役立ちます。ターゲットとして scanme.nmap.org を使用します。これは、Nmap の開発者がテスト目的で維持している、意図的に脆弱性を持たせた安全なサーバーです。

  1. まず、利用可能な脆弱性スクリプトを調べましょう。Nmap には、/usr/share/nmap/scripts/ ディレクトリに数百の事前にインストールされたスクリプトが付属しています。grep コマンドを使って、脆弱性関連のスクリプトのみをフィルタリングします。

    ls /usr/share/nmap/scripts/ | grep vuln
  2. 次に、基本的な脆弱性スキャンを実行します。-sV フラグはサービスのバージョン検出を有効にし、--script vuln はすべての脆弱性検出スクリプトを読み込みます。これにより、潜在的な問題の概略を把握できます。

    nmap -sV --script vuln scanme.nmap.org
  3. よりターゲットを絞ったスキャンを行うには、特定の脆弱性カテゴリに焦点を当てることができます。この例では、HTTP 関連の脆弱性 (ウェブサーバーで一般的) のみをチェックします。アスタリスク (*) はワイルドカードとして機能し、すべての http-vuln スクリプトを含めます。

    nmap -sV --script http-vuln-* scanme.nmap.org
  4. 包括的なスキャンでは、すべての脆弱性をチェックしつつ、侵入的なテスト (「安全」とマークされたもの) を避けます。これには時間がかかりますが、システムの安定性を損なうことなく詳細な結果が得られます。

    nmap -sV --script "vuln and safe" scanme.nmap.org
  5. スキャン結果をドキュメント化し、さらなる分析のために保存するのは良い習慣です。-oN フラグは、通常の形式で出力をテキストファイルに保存します。これらの結果は後のステップで使用します。

    nmap -sV --script vuln -oN vuln_scan_results.txt scanme.nmap.org

スキャン結果には、以下の重要なセキュリティ情報が表示されます。

  • 開いているポートと実行中のサービス (潜在的な侵入ポイント)
  • 検出された特定の脆弱性 (セキュリティの弱点)
  • CVE 参照番号 (標準的な脆弱性識別子)
  • リスクレベル (修正の優先順位付けに役立つ)

スクリプト出力の分析

このステップでは、前のステップで Nmap が生成した脆弱性スキャン結果を注意深く調べます。初心者にとって、スキャンはただの最初の段階であり、結果を適切に解釈することこそが本格的なセキュリティ分析の始まりです。vuln_scan_results.txt ファイルには、潜在的なセキュリティの弱点を特定するために必要なすべての生データが含まれています。

  1. まず、完全なスキャン結果を表示しましょう。これにより、Nmap が発見したすべての情報を把握できます。

    cat vuln_scan_results.txt
  2. 手動でファイル全体を読むのは大変なので、特定の脆弱性の指標を検索します。Nmap の出力にある「VULNERABLE」という単語は、通常、確認されたセキュリティ問題を示しています。

    grep -i "vulnerable" vuln_scan_results.txt
  3. 次に、標準化された脆弱性の参照情報を探します。CVE (Common Vulnerabilities and Exposures) は、既知のセキュリティ欠陥の一意の識別子です。

    grep -i "CVE-" vuln_scan_results.txt
  4. ポートの状態は脆弱性評価において重要です。開いているポートは、攻撃者にとって潜在的な侵入ポイントとなることが多いです。

    grep -E "open|filtered|closed" vuln_scan_results.txt
  5. 見つけた結果の概要をすぐに把握するために、Nmap が検出した脆弱性の数を数えます。これにより、分析の優先順位付けができます。

    echo "Total vulnerabilities found: $(grep -c -i "vulnerable" vuln_scan_results.txt)"
  6. 興味深い CVE を見つけたら、それを調査することが重要です。この例では、特定の脆弱性の詳細を取得する方法を示しています (必要に応じて CVE ID を置き換えてください)。

    curl -s https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228 | grep -A10 "Description"

Nmap の出力を分析する際には、以下の重要な要素に特に注意を払ってください。

  • 「open」とマークされたポート - これらはアクティブなサービスを表しています
  • サービスのバージョン - 古いソフトウェアには既知の脆弱性が含まれていることが多いです
  • 「VULNERABLE」の指標 - 確認されたセキュリティ問題
  • CVE 参照情報 - 標準化された脆弱性識別子
  • リスクスコア (利用可能な場合) - 修復の優先順位付けに役立ちます

スキャン結果の保存

この最後のステップでは、脆弱性スキャン結果を適切に文書化して保存する方法を学びます。レポートを保存することは、セキュリティ分析、文書化、およびチームメンバーとの結果共有において重要です。Nmap は、さまざまなニーズに合わせた複数の出力形式を提供しています。

  1. まず、すべてのスキャンレポートを整理して保管するための専用ディレクトリを作成しましょう。これにより、作業スペースを整理し、後で結果を見つけやすくなります。

    mkdir -p ~/project/reports
  2. 次に、脆弱性スキャンを再度実行し、結果を 2 つの標準形式で保存します。-oN フラグは通常のテキスト出力を保存し、-oX は他のツールで処理できる XML ファイルを作成します。

    nmap -sV --script vuln -oN ~/project/reports/scan_results.txt scanme.nmap.org
    nmap -sV --script vuln -oX ~/project/reports/scan_results.xml scanme.nmap.org
  3. XML ファイルは直接読むのが難しいため、xsltproc を使用してより視覚的な HTML レポートに変換します。これにより、スキャン結果がきれいに整形されたウェブページが作成されます。

    xsltproc ~/project/reports/scan_results.xml -o ~/project/reports/scan_results.html
  4. すぐに参照できるように、grep を使用して重要な脆弱性の結果のみを抽出します。これにより、脆弱性の指標を含む行のみが表示される要約ファイルが作成されます。

    grep -iE "vulnerable|CVE-" ~/project/reports/scan_results.txt > ~/project/reports/summary.txt
  5. すべてのレポートファイルが正常に作成されたことを確認しましょう。-lh フラグは、人間が読みやすい形式でファイルサイズを表示します。

    ls -lh ~/project/reports/
  6. (オプション) これらのレポートを他の人と共有する必要がある場合は、単一のアーカイブファイルに圧縮することができます。

    tar -czvf ~/project/reports.tar.gz ~/project/reports/

主要な出力形式の説明:

  • .txt: どのテキストエディタでも読みやすいシンプルなテキスト形式
  • .xml: 他のセキュリティツールで処理できる構造化データ形式
  • .html: プレゼンテーションや文書化に最適な視覚的なレポート
  • 要約ファイル:最も重要な脆弱性の結果のみを含むすぐに参照できるファイル

まとめ

この実験では、Linux システムへのインストールから基本的なスキャンの実行、機能の検証まで、Nmap を使用した脆弱性スキャンの方法を学びました。演習では、Nmap Scripting Engine (NSE) などの重要な機能を紹介し、包括的なネットワーク分析のためにデフォルトおよびカスタムスクリプトを実行する方法を示しました。

サービスバージョン検出 (-sV) やスクリプト実行 (-sC) などの重要なスキャン技術を練習し、スキャン結果の解釈と保存方法を学びました。これらのスキルは、Nmap の強力なスキャン機能を使用したネットワークセキュリティ評価のための堅固な基礎を提供します。