サイバーセキュリティ書籍セレクション: アプリケーションセキュリティ
開発者向けの回。自分の手で作り込んでしまう脆弱性と、それを作り込まないための方法。
サイバーセキュリティ書籍セレクション: アプリケーションセキュリティ
全9回の第5回。開発者向けの回だ。自分の手で作り込んでしまう脆弱性と、それを作り込まないための方法を扱う。
ここに挙げた本は、ほぼそのまま月曜の朝の仕事に使える。
Dafydd Stuttard, Marcus Pinto. The Web Application Hacker's Handbook (第2版、2011年)
Webへの攻撃を網羅した分厚いリファレンス。現代のフロントエンドやAPIの話は一切ないが、脆弱性の分類とテストの方法論はいまもこの分野で最良のままだ。
テーマ: 認証とセッション管理の仕組み、アクセス制御、あらゆる種類のインジェクション、アプリケーションのロジックへの攻撃、利用者への攻撃、アプリケーションを端から端まで洗う方法論。
Michal Zalewski. The Tangled Web (2011年)
ブラウザが実際にどう動いているのか、Webのセキュリティモデルがなぜこの形なのか。これらの問題を自ら見つけてきた人物が書いている。
テーマ: オリジンと同一生成元ポリシー、DOMとその分離、クッキーとその制約、ブラウザによるコンテンツの解釈、セキュリティヘッダ、90年代から引き継がれた仕組み。
Malcolm McDonald. Web Security for Developers (2020年)
他人のコードを検査するのではなく、自分でコードを書く人のための、コンパクトで現代的な一冊。前の2冊の前に読む入口として良い。
テーマ: ブラウザとHTTPの仕組み、インジェクション、XSSとCSRF、パスワードの安全な保管、依存関係とそこに潜む脆弱性、サーバーの設定、自動化された攻撃への防御。
Tanya Janca. Alice and Bob Learn Application Security (2020年)
セキュリティをリリース前の独立した工程としてではなく、開発プロセスそのものに組み込む話。
テーマ: セキュリティ要件と設計、安全なコーディング、パイプライン上のテストとツール、シークレットの取り扱い、開発とセキュリティが協働する文化。
Adam Shostack. Threat Modeling: Designing for Security (2014年)
コードを書く前に「ここで何がうまくいかなくなりうるか」へ体系的に答えることを教える、唯一の本。
テーマ: データフロー図、STRIDE手法、攻撃ツリー、見つかった脅威の優先順位づけ、脅威モデリングを業務の流れに組み込むこと。
Neil Madden. API Security in Action (2020年)
基本的な認証から分散システムまで、動くコードとともに扱うAPIセキュリティ。
テーマ: APIにおける認証と認可、トークンとその保管、OAuth 2とOpenID Connect、レート制限、マイクロサービスとKubernetesでのセキュリティ、相互TLS。
Justin Richer, Antonio Sanso. OAuth 2 in Action (2017年)
プロトコルを内側から分解する一冊。クライアントも認可サーバーも保護対象リソースも、自分の手で組み立てさせる。
テーマ: OAuth 2の各フローと使い分け、クライアント側とサーバー側で典型的な実装ミス、アクセストークンとリフレッシュトークン、JWT、OpenID Connectとの関係。
Dan Bergh Johnsson, Daniel Deogun, Daniel Sawano. Secure by Design (2019年)
この本の主張は、脆弱性の大半は検査の書き忘れではなくドメイン設計の悪さから生まれる、というものだ。厳密なドメインモデルが誤りの分類ごと消してしまう様子を示す。
テーマ: 検証ではなく型で守る、不変オブジェクト、コンテキストの境界、エラー処理、クラウドと分散アーキテクチャでのセキュリティ、レガシーコードとの付き合い方。
次回: 防御とインシデント対応。
シリーズ全体: