はじめに
最近、積み上げたまま放置してたセキュア・バイ・デザインを読み始めました。
以前エヴァンス本読んだ時も読書メモ書いたんですが、読みっぱなしより理解が深まるし、後から読み返せたりしてかなり良かったので 今回も章ごとにまとめていきたいと思います。
基本的には自分が大事だと思ったところ、気になったところだけを書き留めていきます。
1章 なぜ、設計がセキュリティにおいて重要なのか?
セキュリティを機能(feature)ではなく心配事(concern)として捉えること
セキュリティが単なる機能として表現されることは珍しくない一方、セキュリティに関する特定の課題を解決するための機能があったとしても、それが懸念されているセキュリティの課題を解決していない、ということはよくある
◾️ 写真格納サービスの例
セキュリティのために「ログイン機能」を実装したとしても、写真リンクに誰もがアクセス可能な状態であれば、リンクを入手すれば写真を閲覧できてしまう
→ ユーザーが本当に求めていたのは、「写真をユーザー以外が見れないようにすること」だった
ユーザーストーリーで求められてることを実現するには、セキュリティを「ログイン」といった機能として考えるのではなく、機能横断的な心配事として見る必要がある
セキュリティにおける心配事の分類(CIA-T)
◾️機密性(Confidentiality)
外部に知られるべきではない情報を絶対に漏れないようにする
◾️完全性(Integrity)
情報が変更されないこと、変更できたとしても、許可された方法でのみ変更されること
◾️汎用性(Availability)
取得可能なデータを必要なとき取得できること
◾️追跡可能性(Traceability)
誰がどのデータにいつアクセスした、変更したのかを把握できる
設計(design)とは?
この本では、「ソフトウェア開発で行われるすべての行為(ex API設計, ドメインモデリング, フィールドの定数化)を設計の行為」と見なしている
- 設計とは、どのようにシステムを構築するか、ということを導く原則であり、コードからアーキテクチャまですべてのレベルに適用できるものである
- ソフトウェア開発において、能動的な意思決定が求められる行為はすべて設計プロセスの一部であると見なされるべき
従来のアプローチ/新しいアプローチ
開発者が個々の脅威について知識を持ち、個々の脆弱性に注意を払う従来のアプローチには問題があった
- 開発者はセキュリティとビジネス機能の実装どちらにもに意識を向けなければならない
- すべての開発者がセキュリティの専門家となり、将来起こりうる脆弱性について理解することが求められる
それに対する新しいアプローチは、「作成するソフトウェアに対して可能な限り最高の水準を維持する設計を常に心がける」ことである。
- 意識する対象を設計に移すことで、セキュリティを常に意識し続ける必要がなくなる。
- 設計を強く意識することで、従来のアプローチよりも安全な実装になる。(ドメイン・プリミティブを取り入れた実装)
思ったこと
- 最近まさに「安全なソフトウェアを作るためにセキュリティのことをもっと学ばなきゃいけないけど、機能実装しつつセキュリティ対策も考えるのめっちゃ難しくない?」と思ってたので神のような本
- 「セキュリティは機能ではなく心配事で捉える」は、実際機能で考えてしまっていた自分にはものすごく刺さった。
- ドメインプリミティブの例もわかりやすかったが、それだけでは防げないセキュリティリスクもあると思うので、そこらへん意識しながら読み進めたい。