mcpField
N
Nessus MCP Server

Nessus MCP Server

ローカル
github.com/Cyreslab-AIセキュリティ176 週間前に更新

Nessus MCP Server について

Nessus MCP Server は、REST API を通じて AI アシスタントから Tenable Nessus の脆弱性スキャンを操作できるサーバーです。スキャン管理や脆弱性検索に対応し、認証情報なしで開発・テストできるモックモードも備えています。

主な機能

  1. 01脆弱性スキャンの開始と監視
  2. 02スキャン一覧と結果の取得
  3. 03脆弱性の検索
  4. 04脆弱性の詳細取得
  5. 05開発・テスト用モックモード

活用シーン

  1. 01対象へのスキャン開始
  2. 02スキャン状態と検出結果の確認
  3. 03スキャン結果から脆弱性を検索
  4. 04Nessus の認証情報なしでツールの動作をテスト

MCP 対応

Nessus のスキャン管理と脆弱性データ照会を MCP ツールとして公開します。API キーで実際の Nessus インスタンスに接続し、必要な接続変数がない場合はモックモードで動作します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Nessus MCP サーバー

Tenable Nessus 脆弱性スキャナーと連携するための Model Context Protocol(MCP)サーバーです。このサーバーを使うと、AI アシスタントが MCP プロトコルを介して脆弱性スキャンと分析を実行できます。

API キー認証を使用し、REST API 経由で実際の Nessus インスタンスと通信します。NESSUS_URL/NESSUS_ACCESS_KEY/NESSUS_SECRET_KEY が設定されていない場合は、ローカルでの開発およびテスト用に、単体で動作するモックモードに切り替わります。

機能

  • 脆弱性スキャン:指定したターゲットに対する脆弱性スキャンを開始し、監視します
  • スキャン管理:脆弱性スキャンの一覧表示、追跡、結果の取得を行います
  • 脆弱性分析:特定の脆弱性を検索し、詳細情報を取得します
  • モックモード:Nessus API キーなしでテストできる、完全に機能するモックモードです

ツール

サーバーは以下のツールを提供します。

ツール名説明
list_scan_templates利用可能な Nessus スキャンテンプレートを一覧表示します
start_scanターゲットに対する新しい脆弱性スキャンを開始します
get_scan_status実行中のスキャンのステータスを確認します
get_scan_results完了したスキャンの結果を取得します
list_scansすべてのスキャンとそのステータスを一覧表示します
get_vulnerability_details特定の脆弱性に関する詳細情報を取得します
search_vulnerabilitiesキーワードで脆弱性を検索します

インストール

前提条件
  • Node.js 20 以降
  • TypeScript(開発用)
ソースからビルドする
  1. リポジトリをクローンします。

    git clone https://github.com/Cyreslab-AI/nessus-mcp-server.git
    cd nessus-mcp-server
    
  2. 依存関係をインストールします。

    npm install
    
  3. サーバーをビルドします。

    npm run build
    

使用方法

モックモードで実行する

デフォルトでは、Nessus API キーを必要としないモックモードでサーバーが実行されます。

node build/index.js
実際の Nessus インスタンスで実行する

実際の Nessus インスタンスに接続するには、次の環境変数を設定します。

NESSUS_URL=https://your-nessus-instance:8834
NESSUS_ACCESS_KEY=your-access-key
NESSUS_SECRET_KEY=your-secret-key

3 つすべてが設定されると、サーバーは実モードに切り替わります。それ以外の場合はモックモードで実行されます。

次に、サーバーを実行します。

node build/index.js
API キーペアの生成

Nessus のウェブ UI で、Settings > My Account > API Keys > Generate を選択します。Nessus では、生成時にアクセスキーとシークレットキーが一度だけ表示されるため、安全な場所(シークレットマネージャーや MCP クライアントの環境変数設定など)に保存してください。Nessus 自体で再表示することはできません。

リクエストごとに、X-ApiKeys: accessKey=<key>; secretKey=<key> HTTP ヘッダーを使用して認証します。別途ログイン/セッションの手順はなく、更新が必要な Cookie やトークンもありません。

自己署名証明書

Nessus は、自己署名 TLS 証明書を使用してデプロイされることが非常によくあります。デフォルトでは、このサーバーは証明書を厳密に検証するため、自己署名証明書を使用するインスタンスへの接続を拒否します。証明書の検証をスキップすることを明示的に許可するには(信頼できる内部インスタンスの場合など)、次のように設定します。

NESSUS_ALLOW_SELF_SIGNED=true

信頼できる CA が発行した証明書をインスタンスが使用している場合は、これを未設定(または false)のままにしてください。この設定が有効になっている場合、サーバーは起動時に stderr に警告を記録します。

実モードのマッピングに関する設計メモ

このサーバーの一部のツールには、Nessus REST API に完全に対応する機能がないため、以下の判断を行いました。

  • start_scan:scan_type(basic-network-scan / web-app-scan / compliance-scan)は論理名であり、Nessus のテンプレート UUID ではありません(テンプレート UUID はインスタンスごとに異なり、GET /editor/scan/templates で返されます)。このサーバーは、まず既知のテンプレートの name 値と照合して論理名をテンプレートに解決し、一致しない場合はテンプレートの名前/タイトルとのあいまい一致を試みます。start_scan はスキャンの作成(POST /scans)後、ツール名が「作成」ではなく「開始」であるため、すぐにスキャンを起動します(POST /scans/{id}/launch)。
  • get_scan_results:実際のスキャン結果は、モックデータが返す脆弱性ごとの詳細情報ではなく、スキャン全体のプラグインごとに集約されています(GET /scans/{id} の vulnerabilities サマリー)。すべてのプラグインについて CVSS/説明/修正テキストを取得するには、検出結果ごとに Nessus API をもう1回呼び出す必要があり、多数の検出結果があるスキャンではスケールしません。検出結果1件の詳細を確認するには、結果に含まれる特定の plugin_id を指定して get_vulnerability_details を使用してください。
  • get_vulnerability_details:モックモードでは CVE ID を指定します。実際の Nessus インスタンスでは、代わりに数値の Nessus プラグイン ID(例:156327)を指定する必要があります。オンプレミス版 Nessus REST API には、任意の CVE やキーワードをプラグインに解決するエンドポイントがなく、数値のプラグイン ID で検索する GET /plugins/plugin/{id} のみが存在するためです。実モードで CVE 形式の入力を指定すると、エラーを黙って返さず、内容が明確で説明のあるエラーを返します。
  • search_vulnerabilities:Nessus には「すべての脆弱性を検索」する単一のエンドポイントはなく、検出結果はスキャン結果のコンテキスト内にのみ存在します。実モードでは、このツールに省略可能な scan_id を指定して、検索対象を1つのスキャンに絞り込めます。指定しない場合は、更新日時が新しい完了済みスキャンを対象に検索します(スキャン数の多いインスタンスで API 呼び出し数が膨らまないよう、最大10件に制限されます)。これは意図的な対象範囲の設定であり、ツールの説明にも記載されています。
Claude for Desktop での使用

このサーバーを Claude for Desktop で使用するには、以下の手順を実行してください。

  1. Claude for Desktop の設定ファイルを編集します。

    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%APPDATA%\Claude\claude_desktop_config.json
  2. サーバー設定を追加します。

{
  "mcpServers": {
    "nessus": {
      "command": "node",
      "args": ["/path/to/nessus-mcp-server/build/index.js"],
      "env": {
        "NESSUS_URL": "https://your-nessus-instance:8834",
        "NESSUS_ACCESS_KEY": "your-access-key",
        "NESSUS_SECRET_KEY": "your-secret-key",
        "NESSUS_ALLOW_SELF_SIGNED": "false"
      }
    }
  }
}

モックモードでは、env セクションを省略できます。

使用例

スキャンの開始
start_scan:
  target: 192.168.1.1
  scan_type: basic-network-scan
スキャン結果の取得
get_scan_results:
  scan_id: scan-1234567890
脆弱性の検索
search_vulnerabilities:
  keyword: log4j

実際の Nessus インスタンスでは、必要に応じて検索対象を1つのスキャンに絞り込めます。

search_vulnerabilities:
  keyword: log4j
  scan_id: 42

開発

プロジェクト構成
  • src/index.ts:サーバーのメインエントリーポイント
  • src/nessus-api.ts:モックへのフォールバック機能を備えた Nessus API クライアント
  • src/mock-data.ts:テスト用のモック脆弱性データ
  • src/tools/:ツールの実装
  • src/utils/:ユーティリティ関数
ツールの追加
  1. src/tools/ 内の適切なファイルに、ツールのスキーマとハンドラーを定義します。
  2. src/index.ts でツールをインポートして登録します。

検証状況

実モードのリクエストは、文書化されている Tenable Nessus REST API の仕様(エンドポイント、リクエストボディ、レスポンス形式)に直接準拠して実装されています。以下の方法で検証済みです。

  • クリーンな TypeScript ビルド(npm run build)。
  • 実モードで、到達不能な NESSUS_URL(例:https://localhost:1)に対して、stdio 経由ですべてのツールを実行しました。サーバーが起動してリクエストを受け付け、クラッシュしたりモックデータに暗黙にフォールバックしたりせず、説明的なメッセージ(接続拒否、TLS、タイムアウトなど)を含むクリーンな isError レスポンスを返すことを確認しました。

この環境では Nessus のライブインスタンスを利用できなかったため、ライブインスタンスに対する検証は行っていません。実際のインスタンスに接続して不一致が見つかった場合(例:インスタンスに存在しないテンプレート名、Nessus のバージョンによって異なるレスポンスフィールドなど)は、Issue を作成してください。

ライセンス

MIT

免責事項

このサーバーは Tenable と提携しておらず、Tenable による推奨も受けていません。Nessus は Tenable, Inc. の商標です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。