Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ドメイン駆動セキュリティへの道しるべ

Avatar for Aja9tochin Aja9tochin
January 20, 2026

 ドメイン駆動セキュリティへの道しるべ

Avatar for Aja9tochin

Aja9tochin

January 20, 2026
Tweet

More Decks by Aja9tochin

Other Decks in Technology

Transcript

  1. わらわの自己紹介  所属:ちゅらデータ データビジネスコンサル  特技:モデリング、抽象化、アナロジー、推論、守破離  一応、ここの運営です  あだ名:アジャイル界のハンコック

     モットー:  モデルベースのセキュリティなくして、AIアタッカーには勝てない  巷のスクラムの8割は大体ただの反復
  2. 現状の課題: セキュリティエンジニア  脅威モデリング手法(STRIDE, DREAD等)は知っ ている。  しかし、「DFD(データフロー図)」を描く段階で、「巨 大なプロセス」や「曖昧なデータストア」が登場し、解像 度が荒くなりがち。

     結果として、技術的脅威は見つかるが、ビジネスロジッ クに潜む脅威を見逃してしまう。  セキュリティアーキテクチャは保守性が従来よりも高くなく てはいけない 開発エンジニア  考えた既存の設計モデルに脅威分析とかしない。  セキュリティエンジニアに脅威分析をさせる前に実装に 取り掛かりがち。  DFDを描かない。  でも一応、プロダクトの業務に関しては、DDDのバズり で関心が高まっている。
  3. 脅威モデリングとの相乗効果  従来の脅威分析:「WebサーバーとDBの間の線」を見る(インフラ視点)。  Clean Arch x 脅威分析: 「ControllerとUseCaseの間の線」を見る(ロジック視点)。 脆弱性の70%以上はアプリ層にある。

    ⇒どれだけインフラで頑張っても、高確率でトラブルにつながる。 ⇒だからこそ、アプリの構造図で脅威分析をする必要がある。 境界型防御とかいってるけど、 Clean Arch が使われていないとか論外。
  4. STEP 1 - イベントストーミング (全体像)  目的:時間軸で「ビジネスの事実」を捉える。 ビジネスイベントを起点にコマンド(処理)やポリシーを見 つけていく。 それにより、ビジネスの文脈の境界を見つける。

     Security Point: ハッピーパスだけでなく、「認証失敗」「アカウントロック」 「決済エラー」などのSecurity Eventもこの段階で洗 い出す。これを忘れると、異常系の設計が漏れる。
  5. STEP 2 - コンテキストマップ (境界の仮説)  イベントの塊から「境界づけられたコンテキスト」を定義。  各コンテキストの特性を抑える!! 

    現状のTrust Boundary (信頼境界)を引く  「商品カタログ」は一般公開(低信頼)。  「決済処理」は高機密(高信頼)。  この境界線(Context Map上の線)こそが重点防御ラインになる。
  6. 情報エキスパートによる「責務の要塞化」  原則: 「情報を持っているオブジェクトに、処理も任せる」。  NG例: UserManager が User からパスワードを取り出して検証する。

    ⇒生データが移動している(漏洩リスク)。  OK例: User オブジェクト自身が authenticate() メソッドを持つ。 ⇒データはカプセル化され、外に出ない。  結論: 適切な責務割り当ては、アタックサーフェス(データ移動)を劇的に減らす。
  7. アタックシミュレーション 1 (なりすまし)  対象: クリーンアーキテクチャの「Controller → UseCase」の境界。  脅威:

    「内部呼び出しだから安全」と思い込み、Controllerでの認証チェックが甘い ⇒悪意あるリクエストがUseCase(ビジネスの核)に直接到達する Spoofing
  8. アタックシミュレーション 2 (改ざん/否認)  対象: 「UseCase → Domain Entity」の境界。 

    脅威: UseCaseがデータを加工する際、意図せず整合性を壊す、あるいは ログを残さない。 ⇒データの Tampering と、誰がやったか追えない Repudiation。
  9. オープンクローズド原則 単一責務を満たせていることで、これを満たしやすくなる。  思想:拡張に対して開き、修正に対して閉じているべき  機能追加時に既存コードを書き換えない。  ゆえに、テストも追加部分だけで済みやすくなる。  セキュリティ文脈での適用:ポリシー変更によるデグレ(破壊)防止

    「特定の国からのアクセス遮断」などのルール追加を、設定やPlugin追加だけで行い、コアロジックを触らせない。  得られる効果:安定性 頻繁なセキュリティポリシー変更があっても、ビジネス機能のバグ混入を防げる。 ⇒セキュリティアーキテクチャの変更がしやすくなる。⇒セキュリティがアジリティを下げにくくなる。
  10. DRY(DON'T REPEAT YOURSELF)  思想:知識の重複を避ける  全く同じロジックを複数箇所に書くと、修正時に漏れが出る。  一か所にまとめて修正コストを抑える。 

    似てるだけのものはまとめてはいけない。  セキュリティ文脈での適用:防御機構の一元化 入力値検証(バリデーション)や権限チェックを各画面で書くな。 一箇所の共通関数やゲートウェイに集約せよ。  得られる効果:堅牢性の統一 「A画面はXSS対策済みだが、B画面は忘れていた」という事故を構造的に 防ぐ。
  11. KISS(KEEP IT SIMPLE, STUPID)  思想:シンプルにしておけ、たわけ!!  複雑なコードは読みにくく、バグの温床になる。  有能ぶりたい、高度なもの試したいがために、他人の読めないコードにすることなかれ。

     セキュリティ文脈での適用:理解可能なセキュリティ  「独自の暗号化」や「複雑怪奇なロール管理」を作るな。誰も検証できない仕組みは、必ず破られる。  標準技術をシンプルに使いましょう。  得られる効果:バグの排除  仕様がシンプルであればあるほど、監査しやすく、論理的な抜け穴(Logic Flaw)がなくなる。  シンプルなほど、今までの原則を満たしやすくもなります。
  12. PIE原則  思想: コードの意図(コンテキスト)を明確に表現せよ String email を撲滅し、VerifiedEmail 型を使う。  セキュリティ文脈での適用:

    不正な値(XSS文字列など)が存在できない「型」を作ることで、バリデーションロジックをシンプルに保つ。  得られる効果:  インジェクション攻撃の構造的排除  バリデーションの集約(DRY)  Fail Fast:不正データはシステムの入り口で弾かれ、深層部のビジネスロジックやDBには広がらない
  13. 一連の流れ ① Structure: クリーンアーキテクチャで「守る場所」を隔離する。 ② Model: DDD/GRASPで「データ」をカプセル化する。 ③ Attack: 脅威モデリングで「死角」を見つける。

    ④ Refine: 原則(CCP/DIP/KISSなど)で「構造」を強化する。 完璧なセキュリティは存在しない。しかし、「堅牢なアーキテクチャ」は存在する。 毎回コードを直すのではなく、「設計」で勝負しよう。そのためには、クリーンアーキテクチャの設計思想が必須。 良いアーキテクチャは、変更に強く、攻撃にも強い。また、カオス実験とかも行いやすい。