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

コードセキュリティスキャン

Security Scanner MCPは複数のプログラミング言語を対象とした包括的なコードセキュリティスキャンを提供します。

サポートされている言語

  • JavaScript / TypeScript
  • Python
  • Java
  • Go

脆弱性カテゴリ

🔑 ハードコードされたシークレット

ソースコード内にハードコードされたAPIキー、パスワード、トークンを検出します。

検出対象:

  • AWS アクセスキーとシークレットキー
  • Google APIキーとOAuthシークレット
  • GitHubトークン
  • Slackトークン
  • データベース接続文字列
  • 秘密鍵(RSA、EC、SSH)
  • JWTトークン
  • Stripe、Twilio、SendGrid APIキー
  • 韓国サービス(KakaoやNaverのAPIキー)

例:

// ❌ 脆弱
const apiKey = "AIzaSyC1234567890abcdef";
const awsKey = "AKIAIOSFODNN7EXAMPLE";

// ✅ 安全
const apiKey = process.env.GOOGLE_API_KEY;
const awsKey = process.env.AWS_ACCESS_KEY_ID;

💉 インジェクション脆弱性

SQLインジェクション:

// ❌ 脆弱 - 文字列連結
const query = "SELECT * FROM users WHERE id = " + userId;
const query = `SELECT * FROM users WHERE id = ${userId}`;

// ✅ 安全 - プリペアドステートメント
const query = "SELECT * FROM users WHERE id = ?";
db.query(query, [userId]);

NoSQLインジェクション:

// ❌ 脆弱
db.collection.find({ username: req.body.username });

// ✅ 安全
const username = validator.escape(req.body.username);
db.collection.find({ username });

コマンドインジェクション:

// ❌ 脆弱
exec(`ping ${userInput}`);

// ✅ 安全
execFile('ping', [userInput]);

🌐 Cross-Site Scripting(XSS)

検出パターン:

  • ReactのdangerouslySetInnerHTML
  • innerHTML / outerHTML代入
  • jQuery .html()メソッド
  • Vue v-htmlディレクティブ
  • eval()new Function()
  • document.write()

例:

// ❌ 脆弱
element.innerHTML = userInput;
element.dangerouslySetInnerHTML = { __html: userInput };

// ✅ 安全
element.textContent = userInput;
// またはDOMPurifyを使用
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);

🔐 暗号化の問題

検出対象:

  • 弱いハッシュアルゴリズム(MD5、SHA1)
  • 安全でない乱数生成(Math.random()
  • ハードコードされた暗号化キー/IV
  • SSL証明書検証無効化
  • 脆弱なTLSバージョン(1.0、1.1)

例:

// ❌ 脆弱
const hash = crypto.createHash('md5');
const random = Math.random();

// ✅ 安全
const hash = crypto.createHash('sha256');
const random = crypto.randomBytes(32);

🔒 認証とセッションセキュリティ

JWT問題:

  • noneアルゴリズムが許可
  • 有効期限なし
  • 弱い秘密鍵

クッキーセキュリティ:

  • httpOnlyフラグなし
  • secureフラグなし
  • sameSite属性なし

CORS問題:

  • 本番環境でのワイルドカードオリジン
  • ワイルドカードでのクレデンシャル

例:

// ❌ 脆弱
res.cookie('session', token);
app.use(cors({ origin: '*', credentials: true }));

// ✅ 安全
res.cookie('session', token, {
httpOnly: true,
secure: true,
sameSite: 'strict'
});
app.use(cors({
origin: 'https://yourdomain.com',
credentials: true
}));

📁 ファイルとパスの脆弱性

パストラバーサル:

// ❌ 脆弱
const file = fs.readFileSync(req.query.path);

// ✅ 安全
const safePath = path.join(SAFE_DIR, path.basename(req.query.path));
const file = fs.readFileSync(safePath);

危険なファイル操作:

  • ユーザー入力による再帰削除
  • 安全でないファイルアップロード
  • Zip Slip脆弱性(Java)
  • Pickleデシリアライゼーション(Python)

使用方法

すべての脆弱性タイプをスキャン

Me: このコードをセキュリティの問題についてスキャンしてください
[コードを貼り付け]

Claudeは全スキャナーを実行するscan-securityツールを使用します。

特定の脆弱性タイプをスキャン

フォーカスされたスキャンに個別ツールを使用:

  • scan-secrets - シークレット検出のみ
  • scan-injection - インジェクション脆弱性のみ
  • scan-xss - XSSリスクのみ
  • scan-crypto - 暗号化の問題のみ
  • scan-auth - 認証/セッションの問題のみ
  • scan-path - ファイル/パスの脆弱性のみ

外部ツール統合

Dockerサンドボックスで実行する場合、スキャナーは以下も使用します:

  • GitLeaks v8.18.4 - エントロピー分析によるシークレット検出の強化
  • 業界が実証した検出パターンとルール
  • 誤検知の少ない

次のステップ