セキュリティの原則
以下に示すセキュリティの原則に必ず従う必要があります。
多層防御を適用
重層的セキュリティ制御は、完全なメディエーションを提供することにより、システム全体のセキュリティを高めます。1 つのセキュリティ制御が失敗した場合、その他の制御がそれぞれのエリアを保護する必要があります。一般的な例としては、攻撃者がファイアウォールを回避する可能性があるので、社内アプリケーションの保護をファイアウォールだけに頼ってはなりません。これは単一障害点の可能性を下げることによって制御の評価を導く設計原理です。
ポジティブセキュリティモデルを使用
ポジティブセキュリティモデルは、許可されるものを明示的に定義し、それ以外をすべて却下します。ネガティブモデルでは新しい攻撃や未知の攻撃を含むほかのすべてが許可されるので、許可しないものだけを定義するネガティブセキュリティモデルではなく、ポジティブセキュリティモデルを使用する必要があります。アプリケーションを保護する際にネガティブモデルを使用した場合、すべてに対処したかどうかはわかりません。
安全に失敗
失敗がセキュリティに悪影響を与えてはなりません。失敗はセキュリティ制御の内外で発生する可能性があります。制御内の何かが失敗した場合、制御をバイパスできない安全な方法で失敗する必要があります。制御の外部での失敗も、制御に影響を及ぼさないように安全に失敗する必要があります。たとえば、データを表示するアクセス許可をユーザーが持っているかどうかをチェックする際に問題が発生した場合、ユーザーがデータを表示できないように失敗する必要があります。
最小限の権限で実行
ユーザーには、業務プロセスを実行するために必要な最小限の権限を付与する必要があります。業務プロセス自体も、プロセスの実行に必要な最小限の権限を必要とします。これに従わない場合、ユーザーは実行する権限が付与されていない操作を実行できる可能性があります。
隠ぺいによるセキュリティの回避
隠ぺいによるセキュリティは、セキュリティを保護するためにシステムの機密または複雑さに依存します。これはほぼ必ず失敗する、安全性の低いセキュリティ制御です。セキュリティ制御は既知の原則とベストプラクティスに基づく必要があります。
セキュリティをシンプルに保つ
セキュリティ制御はシンプルでなければなりません。制御が複雑な場合、実装、テスト、保守を行い、その有効性を評価することが困難になります。
侵入を検出
潜在的な攻撃を検出し、ログに記録し、対応する必要があります。侵入を検出しない場合、攻撃者には攻撃を遂行するための時間が無制限に与えられます。侵入を検出できた場合、攻撃者がさらなる攻撃を開始するのを防ぐことができます。ログはシステムが攻撃された場合のフォレンジックを提供できます。
外部システムを信頼しない
外部システムはセキュリティのポリシーと態勢が異なる可能性があるので、むやみに信頼してはなりません。信頼できると見なす前に、セキュリティの観点から評価する必要があります。
セキュリティで保護されたデフォルトを設定
既成では、アプリケーションはセキュリティで保護されている必要があります。ユーザーが必要に応じてセキュリティレベルを下げることができるようにする必要があります。
攻撃対象領域を最小化
攻撃対象領域はシステムへのエントリポイントの数によって測定されます。各エントリポイントが一定のレベルのリスクに関連付けられます。攻撃対象領域を減らすことで全体的なリスクも減少します。