1. アプリケーションセキュリティ入門 MOC
- アプリケーションセキュリティとは
- AppSecの定義 (アプリケーションのライフサイクル全体を通じてセキュリティを組み込む実践)
- AppSecの目的 (脆弱性の予防、検出、修正によるビジネスリスクの低減)
ネットワークセキュリティとの違いと連携
- セキュアソフトウェア開発ライフサイクル (Secure SDLC) MOC
- Secure SDLCの定義 (従来のSDLCの各フェーズにセキュリティ活動を統合)
- Microsoft SDL, OWASP SAMMなどのフレームワーク概要
- SDLC各フェーズにおけるセキュリティ活動
1. 要求定義フェーズ (セキュリティ要件の定義)
2. 設計フェーズ (脅威モデリング、セキュア設計)
3. 実装フェーズ (セキュアコーディング、静的解析)
4. テストフェーズ (動的解析、ペネトレーションテスト)
5. デプロイ・運用フェーズ (設定管理、監視、インシデント対応)
- 脅威モデリング (Threat Modeling) MOC
- 脅威モデリングの目的 (潜在的な脅威と脆弱性の体系的な洗い出し)
- 脅威モデリングのプロセス
1. アプリケーションの分解 (データフロー図など)
2. 脅威の特定 (STRIDEモデルなど)
3. 脅威の評価 (DREADモデルなど)
4. 対策の検討
- 攻撃対象領域 (Attack Surface) の分析と最小化
- AppSecの主要な原則
[[多層防御 (Defense in Depth)]] (再掲)
[[最小権限の原則 (Principle of Least Privilege)]] (再掲)
[[セキュアバイデフォルト (Secure by Default)]] (再掲)
フェイルセーフ (Fail-Safe) (再掲)
信頼の境界 (Trust Boundaries)
攻撃者の視点で考える (Think like an attacker)
2. セキュアな設計とアーキテクチャ MOC
- セキュア設計原則
[[攻撃対象領域の最小化]]
デフォルトでセキュア
最小権限
多層防御
信頼しない (Zero Trust の考え方)
シンプルさを保つ
失敗時の安全性を確保
特権の分離
- アーキテクチャリスク分析
- トラスト境界の明確化
- セキュアなAPI設計 (API設計MOCと連携)
- 認証と認可アーキテクチャの設計 (認証と認可MOCと連携)
- ロギングと監視アーキテクチャの設計
- コンポーネントの分離とサンドボックス化
- 入力検証の原則: “すべての入力を信頼するな”
- 検証のタイミングと場所 (クライアントサイド vs. サーバーサイド)
- 検証の種類
型チェック (数値、文字列、ブーリアンなど)
長さチェック (最小長、最大長)
範囲チェック (数値の範囲)
フォーマットチェック (メールアドレス、電話番号、日付など)
存在チェック (必須項目)
- ホワイトリスト方式 vs. ブラックリスト方式
- 正規表現 (Regex) を用いた検証と注意点 (ReDoS攻撃)
- ファイルアップロードの検証 (拡張子、MIMEタイプ、ファイルサイズ、ウイルススキャン)
3.2. 出力エンコーディング / エスケープ (Output Encoding/Escaping) MOC
- 出力エンコーディングの目的 (インジェクション攻撃の防止)
- コンテキストに応じた適切なエンコーディング
HTMLコンテキスト (HTML Entity Encoding)
HTML属性コンテキスト
JavaScriptコンテキスト (JavaScript Escaping)
CSSコンテキスト
URLコンテキスト (URL Encoding / Percent Encoding)
- 実績のあるライブラリの利用
3.3. 認証とセッション管理の実装 MOC
安全なパスワード保存 (bcrypt, scrypt, Argon2) (再掲)
安全なパスワードリセット機能の実装 (再掲)
多要素認証 (MFA) の実装 (再掲)
セキュアなセッショントークンの生成と管理
セッションタイムアウトの実装
ログイン/ログアウト処理のセキュリティ
3.4. 認可とアクセス制御の実装 MOC
機能レベルとデータレベルでのアクセス制御の実装
リクエストごとの権限チェックの徹底
安全でない直接オブジェクト参照 (IDOR) の防止
クライアント側でのみ認可チェックを行わない
3.5. 安全なエラー処理とロギング MOC
- エラー処理
詳細なエラーメッセージをユーザーに表示しない (スタックトレース、DBエラーなど)
汎用的で安全なエラーページの表示
- ロギング
何をログに記録すべきか (認証試行、アクセス制御失敗、重要な操作など)
何をログに記録すべきでないか (パスワード、セッショントークン、個人情報などの機密情報)
ログの改ざん防止
構造化ロギングの活用
3.6. 安全な暗号技術の利用 MOC (暗号技術MOCと連携)
実績のある標準的な暗号アルゴリズムとライブラリを使用する
自作の暗号アルゴリズムを使用しない
鍵管理のベストプラクティス (ハードコーディングしない)
適切な暗号モードの選択 (ECBの回避、AEADの利用)
乱数生成器の適切な利用 (暗号論的擬似乱数生成器 - CSPRNG)
3.7. メモリ管理のセキュリティ MOC
バッファオーバーフロー対策 (境界チェック、安全な関数の使用)
整数オーバーフロー対策
フォーマット文字列脆弱性対策
解放後使用 (Use-after-free) / 二重解放 (Double free) の防止
機密情報のメモリからの確実な消去
3.8. ファイル管理のセキュリティ MOC
安全なファイルアップロード処理 (再掲)
ディレクトリトラバーサル対策
ファイルパーミッションの適切な設定
4. 主要なアプリケーション脆弱性の詳細 MOC (WebセキュリティMOCと連携・集約)
インジェクション攻撃 (SQLi, OS Commandなど) の対策 (プリペアドステートメント、エスケープ)
クロスサイトスクリプティング (XSS) の対策 (出力エンコーディング, CSP)
クロスサイトリクエストフォージェリ (CSRF) の対策 (CSRFトークン, SameSite Cookie)
安全でないデシリアライゼーションの対策 (信頼できないデータのデシリアライズ禁止)
XXE (XML External Entity) の対策 (XMLパーサの安全な設定)
アクセス制御の不備 (IDOR, 権限昇格) の対策
ビジネスロジック脆弱性の発見と対策
情報漏洩の防止
サーバーサイドリクエストフォージェリ (SSRF) の対策
5. アプリケーションセキュリティテスト (AST) MOC
- ASTの目的 (開発ライフサイクルにおける脆弱性の発見)
- 静的アプリケーションセキュリティテスト (SAST) MOC
SASTの仕組み (ソースコードやバイナリの静的解析)
SASTの利点 (早期のフィードバック) と欠点 (誤検知)
SASTツール (SonarQube, Veracode, Checkmarx, Snyk Codeなど)
- 動的アプリケーションセキュリティテスト (DAST) MOC
DASTの仕組み (実行中のアプリケーションへの擬似攻撃)
DASTの利点 (実行時でないと見つからない脆弱性の検出) と欠点 (カバレッジ、原因特定)
DASTツール (OWASP ZAP, Burp Suite, Acunetix)
- インタラクティブアプリケーションセキュリティテスト (IAST) MOC
IASTの仕組み (SASTとDASTの組み合わせ、アプリケーション内部からの監視)
IASTの利点と課題
- ソフトウェアコンポジション解析 (SCA - Software Composition Analysis) MOC (詳細はサプライチェーンセキュリティで)
- 手動セキュリティテスト MOC
ペネトレーションテスト (Penetration Testing)
セキュアコードレビュー
- (オプション) Fuzz Testing (ファジング)
- ASTツールのCI/CDパイプラインへの統合
6. 依存関係とサプライチェーンセキュリティ MOC
- ソフトウェアサプライチェーンのセキュリティリスク
脆弱性のあるオープンソースソフトウェア (OSS) の利用
悪意のあるパッケージ (タイポスクワッティング, 依存関係かく乱)
ビルドプロセスの侵害
- ソフトウェアコンポジション解析 (SCA) の実践
依存関係の可視化と脆弱性スキャン
SCAツール (OWASP Dependency-Check, Snyk, Dependabot, Trivyなど)
- ソフトウェア部品表 (SBOM - Software Bill of Materials)
SBOMの定義と目的 (ソフトウェアコンポーネントのリスト)
SBOMフォーマット (SPDX, CycloneDX)
- サプライチェーンのセキュリティフレームワーク (SLSA - Supply-chain Levels for Software Artifacts)
- 依存関係の管理戦略
定期的なアップデートとパッチ適用
信頼できるリポジトリの利用
パッケージの署名検証
- シークレットとは (APIキー, DB認証情報, 暗号鍵, パスワードなど)
- シークレット管理の課題
"シークレット・スプロール" (Secret Sprawl)
コードへのハードコーディング (最悪のアンチパターン)
- シークレット管理のベストプラクティス
シークレットをバージョン管理に含めない (.gitignore)
動的なシークレットとリース期間
最小権限の原則に基づくアクセス制御
[[監査ログ]]
シークレットのローテーション
- シークレット管理ツール
HashiCorp Vault
AWS Secrets Manager
Azure Key Vault
Google Cloud Secret Manager
Git-secrets, TruffleHogなどの漏洩検知ツール
- 環境変数による管理と注意点
8. 開発ライフサイクルとセキュリティ (DevSecOps) MOC (再掲・集約)
- シフトレフトセキュリティの考え方 (開発の早期段階からセキュリティを)
- CI/CDパイプラインにおけるセキュリティゲート
コミット/PR時: SAST, SCA, シークレットスキャン
ビルド時: コンテナイメージスキャン
テスト環境デプロイ後: DAST, IAST
本番デプロイ前: 手動ペネトレーションテスト (定期的)
- セキュリティチャンピオン制度 (開発チーム内のセキュリティ推進者)
- セキュアなコードレビューのチェックリスト
- Infrastructure as Code (IaC) のセキュリティ (Terraform/CloudFormationの静的解析)
9. コンテナとデプロイメントのセキュリティ MOC (再掲・AppSec視点)
- セキュアなDockerfileの作成
最小限のベースイメージの使用
非rootユーザーでの実行
マルチステージビルドによるビルドツール等の排除
イメージ内のシークレットの排除
- コンテナイメージの脆弱性スキャン (Trivy, Clair, Snykなど)
- コンテナランタイムセキュリティ
読み取り専用ファイルシステム
権限昇格の防止
seccomp, AppArmor, SELinuxによるシステムコール制限
- Kubernetesにおけるアプリケーションセキュリティ
Pod Security Standards
NetworkPolicyによる通信制御
Secretリソースの適切な利用
10. 特定アプリケーションタイプのセキュリティ MOC
Webアプリケーションセキュリティ MOCへのリンク (XSS, CSRFなど)
- モバイルアプリケーションセキュリティ (iOS/Android) MOC
安全でないデータストレージ
不セキュアな通信
不セキュアな認証・認可
コードの難読化と改ざん検知
リバースエンジニアリング対策
OWASP Mobile Top 10
- APIセキュリティ MOCへのリンク (認証・認可、レート制限、入力検証)
- デスクトップアプリケーションセキュリティ MOC (DLLインジェクション、バイナリ保護など)
- 組み込みシステム/IoTセキュリティ MOC (物理的攻撃、ファームウェアのセキュリティ)
11. アプリケーションセキュリティの成熟度モデル MOC
- OWASP SAMM (Software Assurance Maturity Model)
ビジネス機能とセキュリティプラクティス (ガバナンス, 設計, 実装, 検証, 運用)
成熟度レベルの評価
- BSIMM (Building Security In Maturity Model)
実際の企業のセキュリティ活動に基づいたデータ駆動モデル
12. アプリケーションセキュリティの将来とトレンド MOC
- AI/MLによる脅威検知と脆弱性分析
- 開発者中心のセキュリティツールとUX
- Software Supply Chain Securityの重要性の高まり
- WebAssembly (Wasm) のセキュリティ
- APIセキュリティの自動化
- カオスエンジニアリングとセキュリティ