内容紹介
ソフトウェアセキュリティについて、すべての開発者が知らなければならないこと
すべてのセキュリティ問題の根幹には、出来の悪いソフトウェアがある。本書は、ソフトウェア開発者が知るべきソフトウェアセキュリティの基礎を切り出し、安全なソフトウェアを作成するための実践的な手立てを解説するもの。
このような方におすすめ
・すべてのソフトウェア開発者
・情報科の学生
目次
主要目次
第1章 ソフトウェアセキュリティとは
第2章 ソフトウェアセキュリティのリスク管理
第3章 技術の選択
第4章 オープンソースとクローズドソース
第5章 ソフトウェアセキュリティのガイドライン
第6章 ソフトウェア監査
第7章 バッファオーバーフロー
第8章 アクセス制御
第9章 競合状態
第10章 ランダム性と決定性
第11章 暗号の利用
第12章 信頼性管理と入力検証
第13章 パスワード認証
第14章 データベースのセキュリティ
第15章 クライアントサイドセキュリティ
第16章 ファイアウォールのセキュリティ
付録 暗号技術の基礎
詳細目次
第1章 ソフトウェアセキュリティとは
1.1 すべてはソフトウェアの問題である
1.2 広範囲にわたるセキュリティ問題への対応
1.3 ソフトウェアセキュリティに影響を及ぼす技術動向
1.4 セキュリティの特性
1.5 ともかく作ってからパッチを出すアプローチの問題
1.6 技術と工学
1.7 セキュリティのゴール
1.8 敵を知る―ソフトウェアセキュリティの落し穴
1.9 ソフトウェアプロジェクトのゴール
1.10 まとめ
第2章 ソフトウェアセキュリティのリスク管理
2.1 セキュリティのためのソフトウェアリスク管理とは
2.2 セキュリティ要員の役割
2.3 ライフサイクルにおけるソフトウェアセキュリティ要員
2.4 若干の現実性
2.5 セキュリティについて考えてもらう
2.6 ソフトウェアリスク管理の実践
2.7 コモンクライテリア
2.8 まとめ
第3章 技術の選択
3.1 言語の選択
3.2 分散オブジェクトプラットフォームの選択
3.3 オペレーティングシステムの選択
3.4 認証技術
3.5 まとめ
第4章 オープンソースとクローズドソース
4.1 隠蔽によるセキュリティ
4.2 反対の方法:オープンソースソフトウェア
4.3 「たくさんの目玉現象」は本当か?
4.4 暗号化アルゴリズムの公開について
4.5 オープンソースにまつわる2 つの誤謬
4.6 事例:GNU Mailman のセキュリティ
4.7 さらなる証拠:トロイの木馬
4.8 オープンソースにすべきか、そうせざるべきか
4.9 鳴り物入りの宣伝
4.10 まとめ
第5章 ソフトウェアセキュリティのガイドライン
5.1 原則1:最も弱い部分を安全にせよ
5.2 原則2:多層防御を実施せよ
5.3 原則3:安全サイドに倒れるように工夫せよ
5.4 原則4:最小権限の原則に従え
5.5 原則5:区画化せよ
5.6 原則6:単純さを保て
5.7 原則7:プライバシー保護を推進せよ
5.8 原則8:秘密の隠匿は困難であることを忘れるな
5.9 原則9:簡単に信用するな
5.10 原則10:身近なリソースを活用せよ
5.11 まとめ
第6章 ソフトウェア監査
6.1 アーキテクチャのセキュリティ分析
6.2 実装におけるセキュリティ分析
6.3 まとめ
第7章 バッファオーバーフロー
7.1 バッファオーバーフローとは何か
7.2 バッファオーバーフローがセキュリティ問題である理由
7.3 バッファオーバーフロー対策
7.4 大原則
7.5 内部バッファのオーバーフロー
7.6 その他の入力オーバーフロー
7.7 それ以外の問題
7.8 役に立つツール
7.9 ヒープとスタックの破壊
7.10 ヒープオーバーフロー
7.11 スタックオーバーフロー
7.12 攻撃コード
7.13 まとめ
第8章 アクセス制御
8.1 UNIX のアクセス制御モデル
8.2 Windows NT のアクセス制御
8.3 区画化(compartmentalization)
8.4 粒度の細かい権限管理
8.5 まとめ
第9章 競合状態
9.1 競合状態とは何か?
9.2 TOCTOU
9.3 安全なファイルアクセス
9.4 一時ファイル
9.5 ファイルのロック
9.6 その他の競合状態
9.7 まとめ
第10章 ランダム性と決定性
10.1 疑似乱数生成器
10.2 エントロピー収集と推定
10.3 エントロピーの取り扱い
10.4 実践的な乱数のソース
10.5 まとめ
第11章 暗号技術の利用
11.1 一般的なアドバイス
11.2 一般的な暗号ライブラリ
11.3 暗号ライブラリを利用したプログラミング
11.4 ハッシュ関数のその他の利用法
11.5 SSL とTLS
11.6 Stunnel
11.7 ワンタイムパッド
11.8 まとめ
第12章 信頼性管理と入力検証
12.1 信頼性について
12.2 誤った信頼の例
12.3 書式文字列攻撃
12.4 入力の自動検査
12.5 まとめ
第13章 パスワード認証
13.1 パスワードの格納
13.2 パスワードデータベースへのユーザの追加
13.3 パスワード認証
13.4 パスワードの選択
13.5 ワンタイムパスワード
13.6 まとめ
第14章 データベースセキュリティ
14.1 データベースセキュリティの基本
14.2 アクセス制御
14.3 アクセス制御のためのビュー利用
14.4 フィールドの保護
14.5 統計的攻撃に対するセキュリティ
14.6 まとめ
第15章 クライアントサイドセキュリティ
15.1 コピー防止策
15.2 改竄防止
15.3 コードの難読化
15.4 まとめ
第16章 ファイアウォールのセキュリティ
16.1 基本戦略
16.2 クライアントプロキシ
16.3 サーバプロキシ
16.4 SOCKS
16.5 ピアツーピア
16.6 まとめ
付録A 暗号技術の基礎
A.1 暗号技術の究極の目的
A.2 暗号技術への攻撃
A.3 さまざまな暗号技術
A.4 共通鍵暗号化方式
A.5 公開鍵暗号化方式
A.6 ハッシュ関数
A.7 デジタル署名
A.8 まとめ
参考文献
索引
続きを見る