ja:intro:セキュアなコードの構造_アーキテクチャー
This is an old revision of the document!
Table of Contents
セキュアなコードの構造
構造(アーキテクチャー)とは基本設計です。設計のないシステムが問題をかかえるのは当然です。セキュアなコードの構造と論理はシンプルです。
プログラムの基本構造
プログラムの基本構造は全てのソフトウェアに共通です。
- 入力
- 処理
- 出力
この3つに分けることができます。
ソフトウェアのセキュリティ構造
ソフトウェアの基本的なセキュリティ構造はソフトウェア構造に合わせて設計します。セキュアコーディングでは「プログラムが確実に正しく動作することを保証するように設計/実装」します。プログラムが確実に正しく動作するには
- 正しい入力(=プログラムが受け入れ可能な入力)
- 正しい処理
- 正しい出力(=出力先のプログラム/システムが誤作動しない無害な出力)
が必要です。
論理的背景
「正しい入力」であることを保証することは「正しいプログラムの実行の必須条件」です。例えば、コンピューターが得意な整数演算でさえ「正しい入力」でなければ行なえません。よくある間違いに「プログラムが不正動作しないことを保証するように設計/実装する」があります。この考え方では効率的/体系的に必要なセキュリティレベルを維持できません。
- 「プログラムが不正動作しないことを保証するように設計/実装」= ブラックリスト型の設計
- 「プログラムが確実に正しく動作することを保証するように設計/実装」 = ホワイトリスト型の設計
ブラックリスト型のセキュリティ対策には、全てのリスクを完璧に把握しなければリスクを管理できない、という致命的な欠点があります。ブラックリスト型の対策はセキュリティ対策では基本的に利用せず、次の説明するホワイトリスト型の対策を採用します。
ホワイトリスト型のセキュリティ対策では、全て検証済みのモノのみを受け入れるためリスク管理が比較的容易、という利点があります。検証ではじかれたモノには「未知のリスク」が含まれている場合がよくあります。ホワイトリスト型の対策/考え方の方が比較にならない程安全であるのあこれが理由です。
ソフトウェア以外のセキュリティ設計
物理的、ネットワーク的なセキュリティ設計/仕様はソフトウェアにとって非常に重要です。
ja/intro/セキュアなコードの構造_アーキテクチャー.1508550255.txt.gz · Last modified: 2017/10/21 01:44 by yohgaki
