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

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

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
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など)で「構造」を強化する。 完璧なセキュリティは存在しない。しかし、「堅牢なアーキテクチャ」は存在する。 毎回コードを直すのではなく、「設計」で勝負しよう。そのためには、クリーンアーキテクチャの設計思想が必須。 良いアーキテクチャは、変更に強く、攻撃にも強い。また、カオス実験とかも行いやすい。