Nessus MCP Server について
Nessus MCP Server は、REST API を通じて AI アシスタントから Tenable Nessus の脆弱性スキャンを操作できるサーバーです。スキャン管理や脆弱性検索に対応し、認証情報なしで開発・テストできるモックモードも備えています。
主な機能
- 01脆弱性スキャンの開始と監視
- 02スキャン一覧と結果の取得
- 03脆弱性の検索
- 04脆弱性の詳細取得
- 05開発・テスト用モックモード
活用シーン
- 01対象へのスキャン開始
- 02スキャン状態と検出結果の確認
- 03スキャン結果から脆弱性を検索
- 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(開発用)
ソースからビルドする
-
リポジトリをクローンします。
git clone https://github.com/Cyreslab-AI/nessus-mcp-server.git cd nessus-mcp-server -
依存関係をインストールします。
npm install -
サーバーをビルドします。
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 で使用するには、以下の手順を実行してください。
-
Claude for Desktop の設定ファイルを編集します。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
サーバー設定を追加します。
{
"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/:ユーティリティ関数
ツールの追加
src/tools/内の適切なファイルに、ツールのスキーマとハンドラーを定義します。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. の商標です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。