セキュア・バイ・デザイン

セキュア バイ デザイン

安全なソフトウェア設計

セキュア・バイ・デザインの表紙
プログラミング
著者:
Dan Bergh Johnsson / Daniel Deogun / Daniel Sawano / 須田智之
出版社:
マイナビ出版
出版日:
2021年09月24日頃
ISBN:
9784839975999
在庫:
在庫あり
4.67(3 件 / 楽天ブックス)
中級者向け
セキュリティソフトウェアアーキテクチャDDDドメイン駆動設計セキュア・バイ・デザインドメイン駆動セキュリティ安全なソフトウェア設計C 言語JavaC#

なぜ注目されているか

言及数
226位
総合461位 ↑ 3 ランクアップ 言及 15 件・うち記事 12 件を掲載
03520222023202420252026

書籍紹介

プログラミングの質を高めることで、セキュリティを向上させることができるー 著者らの考えを様々な形で試し検証を行い、本書「セキュア・バイ・デザイン (Secure by Design)・安全なソフトウェア設計」にまとめました。

本書は Eric Evans 氏のドメイン駆動設計 (Domain-Driven Design: DDD) に関する考えの影響を大きく受けています。設計の中心にセキュリティを取り込む考え、ドメイン駆動セキュリティ (Domain-Driven Security) という名のコンセプトを生み出しこの考えを実際に開発に導入し、発展させてきました。
対象読者はソフトウェア開発者 (C 言語、Java や C# など基本的なプログラミング技術を習得済みの方) ですが、特定の言語やフレームワークに依存しすぎないよう、主にセキュリティにおいて重要だと思うものだけを含めるようにしています。全体的なプログラミング・スキルを向上したかったり、既存のプログラムをさらに「安全」なものにしなくてはならなかったりするのであれば、本書はまさにあなたにとっての一冊となることでしょう。

第 1 部: 導入編
セキュア・バイ・デザインについて実例と共に見ていきます。セキュリティと開発についてどのように考え、それらが組み合わさるのか。あわせてどこで問題が起こりやすいのかと何ができるのかを分析します。

第 2 部: 基礎編
ソフトウェアの作成におけるセキュア・バイ・デザインの基盤を構築する設計の原則、考え、コンセプトについて学んでいきます。

第 3 部: 応用編
多くの開発者は「セキュア・バイ・デザイン」をレガシー・コードに適用することが難しいと感じる傾向があります。レガシー・コードの改善、モノリシック・アーキテクチャでよく起こる問題、マイクロサービス・アーキテクチャについて見ていきます。

第 1 部: 導入編
第 1 章: なぜ、設計がセキュリティにおいて重要なのか?

第 2 章: ちょっと休憩: 『ハムレット』の悲劇

第 2 部: 基礎編

第 3 章: ドメイン駆動設計の中核を成すコンセプト

第 4 章: 安全性を確立する実装テクニック

第 5 章: ドメイン・プリミティブ (domain primitive)

第 6 章: 状態の完全性 (integrity) の保証

第 7 章: 状態の複雑さの軽減

第 8 章: セキュリティを意識したデリバリ・パイプライン

第 9 章: 安全性を考えた処理失敗時の対策

第 10 章: クラウド的考え方によるメリット

第 11 章: ちょっと休憩: 保険料の支払いなしに成立してしまった保険契約

第 3 部: 応用編

第 12 章: レガシー・コードへの適用

第 13 章: マイクロサービスでの指針

第 14 章: 最後に: セキュリティを忘れるべからず!

技書の森解説

『セキュア・バイ・デザイン』 (Dan Bergh Johnsson、Daniel Deogun、Daniel Sawano 著、須田 智之 訳、マイナビ出版、2021 年 9 月刊) は、原書 Secure by Design の日本語版で、プログラミングと設計の質を高めることでソフトウェアのセキュリティを向上させるという考え方を、実例を交えて示す書籍です。副題は「安全なソフトウェア設計」です。版元の紹介によると、本書は Eric Evans 氏の ドメイン駆動設計 に関する考えの影響を大きく受けており、著者らは設計の中心にセキュリティを取り込む考えを「ドメイン駆動セキュリティ (Domain-Driven Security)」というコンセプトとして開発に導入してきました。版元が挙げる対象読者は、C 言語や Java、C# などの基本的なプログラミング技術を習得済みのソフトウェア開発者です。

導入編 / 基礎編 / 応用編、3 部 14 章の構成

第 1 部の導入編は 2 章で、第 1 章はセキュリティを機能ではなく心配事として捉える見方から始め、従来のアプローチの欠点と、設計による安全性の向上を論じます。この章には文字列と XML、Billion Laughs 攻撃への対応を扱う節もあります。第 2 章は『ハムレット』の悲劇を題材にした休憩の章で、ビジネス・ルールの観点での完全性の問題を、浅いモデリングと深いモデリングの対比で示します。第 2 部の基礎編は第 3 章から第 11 章までで、ドメイン駆動設計の中核となる考え方を押さえたあと、不変性や契約を使った速やかな失敗、妥当性確認といった実装の技法、ドメイン・プリミティブ、エンティティによる状態の管理と複雑さの軽減へ進みます。続く章はデリバリ・パイプラインでのテスト、処理が失敗した時の対策と可用性の設計、クラウドを前提にした設計の利点を扱い、第 11 章は保険契約の事例でマイクロサービス・アーキテクチャの注意点を確かめる休憩の章です。第 3 部の応用編は、レガシー・コードへの適用、マイクロサービスでの指針、最後にセキュリティを意識したコード・レビューや侵入テスト、インシデントへの備えを扱う第 14 章で締めくくられます。

型と不変条件で不正な値を入れない設計

脆弱性の多くは、プログラムが想定していない値を受け取った時に生まれます。巨大な入力、範囲外の数値、意味の通らない文字列といった値を、利用の直前ごとに個別に検査する書き方では、確認の漏れが 1 か所あるだけで穴になります。本書の第 5 章が扱うドメイン・プリミティブは、業務上の意味を持つ小さな型を作り、その型の生成時に不変条件を確かめることで、不正な値がそもそもオブジェクトとして存在できないようにする考え方です。散らばりがちな 入力バリデーション を、型の境界という 1 か所に集める設計と言い換えられます。第 5 章にはほかに、一度しか読み込めない Read-Once オブジェクトや汚染解析の節があり、第 4 章の不変性や契約の節と合わせて、セキュリティ対策を特別な機能として足すのではなく、日々の設計判断の中に置く道筋と読めます。第 8 章がセキュリティに関するテストの作成と自動化をデリバリ・パイプラインの中で扱うのも、確認を開発の早い段階へ寄せる シフトレフトセキュリティ の考え方と重なります。

設計を学ぶ開発者にも、セキュリティを学ぶ開発者にも向く本

向いているのは、Java や C# のような言語で業務アプリケーションを書いていて、セキュリティを設計とは別の後工程の作業として扱うことに限界を感じている開発者です。第 3 章でドメイン駆動設計の中核となる考え方を扱っているため、ドメイン駆動設計の本を読み終えてから手に取る必要はない構成と読めます。一方で、目次の章題はアプリケーションの設計と実装、テスト、運用を前提にした設計が中心です。攻撃手法そのものの解説や、特定の製品の設定手順を求める人は、目的に合った本を別に選ぶほうが早道です。セキュリティ分野の本の全体の地図は セキュリティ本の選び方 で整理しています。

書いたコードの設計そのものを守りの仕組みに変えたい人、既存のシステムを少しずつ安全な形へ直していく責任を負っている人にとって、レガシー・コードやマイクロサービスへの適用まで 1 冊で追える本書は、手元に置いて繰り返し開く価値のある本です。第 1 章の、セキュリティを心配事として捉える見方から読み始めてみてください。

言及した記事 (12 件)

この本は技書デッキのカードです (攻撃 4 / 備え 2 / 敵に脆弱 2) 図鑑でこの本を見る

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: