メインコンテンツまでスキップ

Docker サンドボックススキャン

隔離されたDocker環境でセキュリティスキャンを実行して、最大限の安全性を確保します。

サンドボックスを使用する理由

ホストシステムを潜在的に悪意のあるコードから保護します:

  • 隔離実行 - コンテナ化された環境で実行
  • リソース制限 - CPU、メモリ、時間の制約
  • ネットワーク隔離 - 外部ネットワークアクセスなし
  • 読み取り専用ファイルシステム - ホストファイルを変更できない
  • 強化されたスキャン - 外部ツール使用(Trivy、Checkov、GitLeaks)

セットアップ

Docker Hubから取得(推奨)

docker pull ongjin/security-scanner-mcp:latest
docker tag ongjin/security-scanner-mcp:latest security-scanner-mcp:latest

またはソースからビルド

npm run docker:build

: ビルドには5~10分かかり、約500MBのイメージを作成します。以下を含みます:

  • Trivy v0.50.4
  • GitLeaks v8.18.4
  • Checkov(Pythonベース)

使用方法

基本的なサンドボックススキャン

Me: このコードをサンドボックスでスキャンしてください

const apiKey = "AIzaSyC1234567890abcdef";
const query = `SELECT * FROM users WHERE id = ${userId}`;

Claudeはscan-in-sandboxを呼び出して:

  1. コードを一時ファイルに書き込み
  2. Dockerコンテナを起動
  3. コンテナ内ですべてのスキャナーを実行
  4. 結果をJSONとして返す
  5. コンテナをクリーンアップ

信頼できないコードをスキャン

Me: このコードは疑わしく見えます。安全にスキャンしてください

[潜在的に悪意のあるコードを貼り付け]

セキュリティ設定

デフォルト設定

メモリ制限: 512MB
CPU制限: 0.5コア
タイムアウト: 30秒
ネットワーク: 無効
ファイルシステム: 読み取り専用(/tmpを除く)
機能: 削除(no-new-privileges)

カスタマイズ可能なオプション

環境変数を通じてこれらを調整できます:

SANDBOX_MEMORY=1g \
SANDBOX_CPU=1.0 \
SANDBOX_TIMEOUT=60000 \
scan-in-sandbox

サンドボックスで利用可能なスキャナー

組み込みスキャナー

  • シークレット検出
  • SQL/NoSQL/コマンドインジェクション
  • XSS脆弱性
  • 暗号化の問題
  • 認証の問題
  • パストラバーサル

外部ツール(Dockerのみ)

  • GitLeaks: エントロピー分析によるシークレット検出の強化
  • Trivy: IaCおよびコンテナの脆弱性スキャン
  • Checkov: Infrastructure as Code セキュリティ分析

Dockerコンテナの詳細

ベースイメージ

FROM node:20-alpine

セキュリティハードニング

# ルート以外のユーザー
RUN addgroup -g 1001 scanner && \
adduser -D -u 1001 -G scanner scanner

# 読み取り専用ルートファイルシステム
# 新しい特権なし
# 削除された機能
# ネットワーク無効

インストールされたツール

# ツールが インストールされていることを確認
docker run security-scanner-mcp:latest sh -c "
trivy --version &&
gitleaks version &&
checkov --version
"

結果フォーマット

サンドボックススキャンは包括的なJSONを返します:

{
"success": true,
"language": "javascript",
"filename": "code.js",
"issuesCount": 3,
"issues": [
{
"type": "Google API Key",
"severity": "critical",
"message": "Google APIキーがハードコード",
"fix": "環境変数を使用",
"line": 1,
"metadata": {
"tool": "gitleaks",
"ruleId": "google-api-key",
"entropy": 4.2
}
}
],
"summary": {
"critical": 1,
"high": 1,
"medium": 1,
"low": 0
}
}

パフォーマンス考慮事項

コンテナ起動

  • 初回実行: 約2~3秒(コールドスタート)
  • 後続実行: 約1秒(キャッシュ)

スキャン時間

  • 小さいファイル(100行未満): 5秒未満
  • 中程度のファイル(100~500行): 5~15秒
  • 大きいファイル(500行以上): 15~30秒

リソース使用量

  • メモリ: スキャンあたり約100~200MB
  • CPU: 最小(0.1~0.5コア)
  • ディスク: 一時ファイルは自動的にクリーンアップ

トラブルシューティング

コンテナが見つからない

# イメージが存在するか確認
docker images | grep security-scanner-mcp

# 見つからない場合は取得
docker pull ongjin/security-scanner-mcp:latest

パーミッション拒否

# ユーザーをdockerグループに追加
sudo usermod -aG docker $USER

# シェルを再起動

タイムアウトの問題

# タイムアウトを増加(ミリ秒)
SANDBOX_TIMEOUT=60000 scan-in-sandbox

ベストプラクティス

  1. 信頼できないコードに使用: 常に未知のソースからのコードをスキャン
  2. 定期的にイメージを更新: 月単位でセキュリティアップデートを取得
  3. リソース使用量を監視: 制限により悪用を防止
  4. クリーンアップ: コンテナは自動削除されますが、定期的にチェック
  5. ネットワーク隔離を維持: 必要でない限りネットワークを無効のまま

高度な設定

カスタムDockerイメージ

FROM security-scanner-mcp:latest

# カスタムスキャナーを追加
RUN pip3 install custom-scanner

# カスタムルールを追加
COPY custom-rules.yaml /app/rules/

CI/CD統合

# GitHub Actionsの例
- name: Scan Code in Sandbox
run: |
docker pull ongjin/security-scanner-mcp:latest
docker run --rm \
-v ${{ github.workspace }}:/code:ro \
security-scanner-mcp:latest \
scan /code

次のステップ