| name | security-audit |
| description | Perform security audits detecting OWASP Top 10 vulnerabilities, insecure dependencies, and security misconfigurations. Use when auditing applications for security vulnerabilities. |
Security Audit Skill
セキュリティ脆弱性を包括的に検出するスキルです。
概要
OWASP Top 10、CVE、セキュリティベストプラクティスに基づいて、コードとシステム設定のセキュリティ監査を実施します。
主な機能
- OWASP Top 10 チェック: SQLインジェクション、XSS、CSRF、認証欠陥等
- 依存関係の脆弱性: 既知のCVEを持つライブラリの検出
- 機密情報漏洩: ハードコードされたAPI キー、パスワード、トークン
- 暗号化評価: 弱い暗号、不適切なハッシュアルゴリズム
- 認証・認可: JWT、OAuth、セッション管理の問題
- セキュアコーディング: インプットバリデーション、出力エスケープ
- HTTPS/TLS設定: 証明書、暗号スイート、プロトコルバージョン
- CORS/CSP設定: セキュリティヘッダーの適切性
- ファイルアップロード: 拡張子、MIME タイプ検証
- レート制限: DDoS、ブルートフォース対策
使用方法
基本的なセキュリティ監査
このコードのセキュリティ監査を実施:
[コード]
重点項目:
- SQLインジェクション
- XSS
- 認証・認可
OWASP Top 10 スキャン
OWASP Top 10 の観点で以下を監査:
[プロジェクトディレクトリ]
出力: 重大度別レポート
依存関係監査
package.json / requirements.txt の脆弱性チェック:
既知のCVEを検出
推奨アップデート提案
チェック項目
1. インジェクション攻撃
SQLインジェクション:
# ❌ 脆弱
query = f"SELECT * FROM users WHERE id = {user_id}"
# ✅ 安全
query = "SELECT * FROM users WHERE id = ?"
cursor.execute(query, (user_id,))
コマンドインジェクション:
// ❌ 脆弱
exec(`ping ${userInput}`);
// ✅ 安全
execFile('ping', [userInput]);
NoSQL インジェクション:
// ❌ 脆弱
db.users.find({ username: req.body.username });
// ✅ 安全
db.users.find({ username: { $eq: req.body.username } });
2. XSS (Cross-Site Scripting)
// ❌ 脆弱
element.innerHTML = userInput;
// ✅ 安全
element.textContent = userInput;
// または
element.innerHTML = DOMPurify.sanitize(userInput);
3. 認証・セッション管理
# ❌ 弱いパスワードハッシュ
password_hash = md5(password)
# ✅ 強力なハッシュ
password_hash = bcrypt.hashpw(password, bcrypt.gensalt(rounds=12))
# ❌ 予測可能なセッションID
session_id = str(user_id) + str(time.time())
# ✅ 暗号学的に安全
session_id = secrets.token_urlsafe(32)
4. 機密情報の露出
// ❌ ハードコード
const API_KEY = "sk_live_abc123xyz";
// ✅ 環境変数
const API_KEY = process.env.API_KEY;
// ❌ ログに機密情報
console.log("User password:", password);
// ✅ 機密情報を除外
console.log("User authenticated:", userId);
5. アクセス制御
// ❌ 不十分な認可チェック
app.delete('/api/users/:id', (req, res) => {
User.delete(req.params.id);
});
// ✅ 適切な権限確認
app.delete('/api/users/:id', requireAuth, (req, res) => {
if (req.user.id !== req.params.id && !req.user.isAdmin) {
return res.status(403).json({ error: 'Forbidden' });
}
User.delete(req.params.id);
});
6. セキュリティ設定ミス
// ❌ 不適切なCORS
app.use(cors({ origin: '*' }));
// ✅ 適切なCORS
app.use(cors({
origin: ['https://example.com'],
credentials: true
}));
// ❌ 弱いCSP
helmet.contentSecurityPolicy({
directives: { defaultSrc: ["'unsafe-inline'", "'unsafe-eval'"] }
});
// ✅ 強力なCSP
helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
}
});
出力例
# セキュリティ監査レポート
## サマリー
- **Critical**: 2件
- **High**: 5件
- **Medium**: 8件
- **Low**: 3件
## Critical 問題
### [CRITICAL] SQLインジェクション脆弱性
**ファイル**: api/users.py:45
**問題**: ユーザー入力を直接SQL クエリに埋め込んでいます
**影響**: データベース全体への不正アクセス、データ漏洩
**CVE参照**: CWE-89
**脆弱なコード**:
```python
query = f"SELECT * FROM users WHERE username = '{username}'"
修正案:
query = "SELECT * FROM users WHERE username = ?"
cursor.execute(query, (username,))
優先度: 即時修正必須
[CRITICAL] ハードコードされたAPI キー
ファイル: config/api.js:12 問題: Stripe APIキーがコードに直接書かれています 影響: APIキーの漏洩、不正課金の可能性
現在:
const stripeKey = "sk_live_abc123xyz";
推奨:
const stripeKey = process.env.STRIPE_SECRET_KEY;
High 問題
[HIGH] 弱いパスワードハッシュ (MD5)
ファイル: auth/password.py:23 問題: MD5でパスワードをハッシュ化 影響: レインボーテーブル攻撃に脆弱
推奨: bcrypt または Argon2 使用
[HIGH] XSS脆弱性
ファイル: views/profile.html:67 問題: ユーザー入力をエスケープせずに表示 影響: クロスサイトスクリプティング攻撃
依存関係の脆弱性
| パッケージ | バージョン | CVE | 重大度 | 推奨 |
|---|---|---|---|---|
| lodash | 4.17.15 | CVE-2020-8203 | High | 4.17.21+ |
| axios | 0.18.0 | CVE-2020-28168 | Medium | 0.21.1+ |
推奨アクション
即時対応 (Critical/High):
- SQLインジェクションの修正
- ハードコードされたキーの削除
- パスワードハッシュアルゴリズムの変更
- XSS対策の実装
- 依存関係の更新
短期対応 (Medium):
- CORS設定の厳格化
- CSP ヘッダーの追加
- レート制限の実装
セキュリティチェックリスト
- すべてのユーザー入力を検証・サニタイズ
- パラメータ化クエリを使用
- 強力な暗号化アルゴリズム使用
- 環境変数で機密情報管理
- HTTPS強制
- セキュリティヘッダー設定
- 依存関係を最新に保つ
- エラーメッセージで情報を漏らさない
## ベストプラクティス
1. **多層防御**: 複数のセキュリティレイヤーを実装
2. **最小権限の原則**: 必要最小限の権限のみ付与
3. **セキュアバイデフォルト**: デフォルト設定を安全に
4. **定期的な監査**: 継続的なセキュリティチェック
5. **依存関係管理**: 定期的なアップデートとスキャン
## バージョン情報
- スキルバージョン: 1.0.0
- 最終更新: 2025-01-22