エンタープライズ向け脆弱性診断のチェックリスト
脆弱性診断は「問題を見つけて報告書を渡す」で終わりにしてはいけません。修正されない脆弱性はリスクのままです。本記事では、NodeFlare のセキュリティチームが実務で使っているエンタープライズ向け診断チェックリストを公開します。発見から修正完了まで追跡することを前提に設計しています。
1. 認証・セッション管理
パスワードは bcrypt / Argon2 でハッシュ化されているか
セッショントークンは暗号論的乱数で生成されているか(最低 128 bit)
セッション固定攻撃への対策(ログイン後にセッション ID を再発行)はされているか
多要素認証(MFA)の強制または推奨が実装されているか
ログアウト時にサーバー側でセッションを無効化しているか
JWT を使用する場合、`alg: none` を拒否し、署名検証を必ず行っているか
2. 認可・アクセス制御
水平権限昇格(他ユーザーのリソースへのアクセス)を防ぐ検証があるか
垂直権限昇格(一般ユーザーが管理者 API を叩ける)が発生しないか
フロントエンドの非表示だけでなく、API 側でも権限チェックを行っているか
IDOR(Insecure Direct Object Reference)のリスクがある箇所を洗い出しているか
3. 入力値検証・インジェクション対策
SQL / NoSQL / LDAP / OS コマンドインジェクションのリスク箇所を確認しているか
ORM を使用していても生クエリが混在していないか
ファイルアップロードの種別・サイズ・ファイル名を厳格に検証しているか
XSS 対策としてユーザー入力を出力時にエスケープしているか(innerHTML の直接使用はないか)
Content-Security-Policy ヘッダーが適切に設定されているか
4. 依存ライブラリ・サプライチェーン
既知の脆弱性を持つパッケージを `npm audit` / `trivy` などで定期スキャンしているか
パッケージのバージョンをロックファイルで固定しているか
CI/CD パイプラインに依存関係スキャンを組み込んでいるか
不要な依存関係を定期的に整理しているか
5. 通信・暗号化
すべての通信が HTTPS(TLS 1.2 以上)で暗号化されているか
HSTS ヘッダーが設定されているか
内部サービス間通信も暗号化されているか
機密データ(パスワード・クレジットカード番号等)がログに出力されていないか
修正管理の重要性
チェックリストで発見した項目は、重大度(Critical / High / Medium / Low)と修正期限をセットで管理します。Critical は 24 時間以内、High は 7 日以内、Medium は 30 日以内を目安にしています。修正完了後は再診断で確認し、クローズするまでチケットを生きたままにしておくことが重要です。脆弱性診断の価値は「見つけること」ではなく「直し切ること」にあります。
