トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

最低限検討すべきデフォルト緩和策 セキュリティ仕様・Webアプリケーション編 のバックアップ(No.3)


情報システム開発契約のセキュリティ仕様作成のためのガイドライン(案)?
最低限検討すべきデフォルト緩和策?

1. 暗号化

1-1 アプリケーションは、暗号で保護されたパスワードのみを送信すること。

パスワードを送信するときにパスワードを暗号化するようにアプリケーションを構成する。

1-2 アプリケーションは、送信される情報の機密性と整合性を保護すること。

データ保護要件に従ってTLS暗号化を要求するように、すべてのアプリケーションシステムを構成する。

2. 脆弱性管理

2-1 アプリケーションは、オーバーフロー攻撃に対して脆弱であってはいけない。

自動境界チェックを実行する言語またはコンパイラを使用するようにアプリケーションを設計する。
抽象化ライブラリを使用して、危険なAPIを抽象化する。
StackGuard、ProPolice、Microsoft Visual Studio / GSフラグなどのコンパイラベースのカナリアメカニズムを使用する。
OSレベルの保護機能を使用し、ユーザー入力の検証を制御する。
ベンダー製品でオーバーフローが特定された場合、アプリケーションにパッチを適用する。

2-2 システムの初期化が失敗した場合、シャットダウンが失敗した場合、またはアプリケーション中止処理が失敗した場合、アプリケーションは安全な状態に失敗させる。

初期化、シャットダウン、中止などで、アプリケーションが安全でない状態があった場合、その脆弱性を修正する。

2-3 アプリケーションは、入力処理及び出力処理の脆弱性の影響を受けない。

入力を受け入れるときはベストプラクティスに従い、アプリケーションが入力を処理する前にすべての入力が要件に照らし、正しい値か検証されることを確認する。アプリケーションは出力を処理する前にすべての出力を要件に照らし、正しい値か検証されることを確認する。特定された脆弱性を修正し、すぐに修正できない問題について文書化されたリスク許容度を取得する。

2-4 すべての製品は、ベンダーまたは開発チームによってサポートされること。

アプリケーション内のサポートされていないすべてのソフトウェア製品を削除または使用停止にする。

メンテナンスまたはサポートが利用できなくなったら、アプリケーションを廃止する。

アプリケーションのメンテナンスが継続されていることを確認する。

2-5 アプリケーションは、XML指向の攻撃に対して脆弱であってはならない。

XML攻撃に対して脆弱ではないコンポーネントを利用するようにアプリケーションを設計する。 脆弱性が発見されたら、アプリケーションコンポーネントにパッチを適用する。

2-6 アプリケーションは、SQLインジェクションに対して脆弱であってはならない。

アプリケーションを変更し、SQLインジェクションの脆弱性を削除する。

2-7 アプリケーションは、コマンドインジェクションから保護する。

特殊文字入力をエスケープ/サニタイズするようにアプリケーションを変更するか、アプリケーションアーキテクチャに基づいてコマンドインジェクション攻撃から保護するようにシステムを構成する。

2-8 アプリケーションは、クロスサイトスクリプティング(XSS)脆弱性から保護する。

ユーザー入力が検証されていることを確認し、ユーザー入力をエンコードまたはエスケープして、埋め込みスクリプトコードが実行されないようにする。 独自のエスケープロジックを構築するのではなく、Webテンプレートシステムまたは自動エスケープ機能を提供するWebアプリケーション開発フレームワークを使用して、アプリケーションを開発する。

3. セッション管理

3-1 アプリケーションは、ログオフ時またはブラウザーのクローズ時にセッションID値やCookieを破棄する。

アプリケーションセッションが終了したら、セッションID Cookieを破棄するようにアプリケーションを構成する。

3-2 アプリケーションはセッションIDを公開しない。

セッションIDを傍受または改ざんから保護するようにTLS、VPN等でアプリケーションを構成する。

3-3 アプリケーションは、非表示フィールドに機密情報を保存しない。

非表示フィールドに機密情報を保存しないようにアプリケーションを設計および構成する。ユーザーセッション管理にサーバー側セッション管理技術を使用する。

4. 属性管理

4-1 アプリケーションには、必要に応じて機密属性を表示する機能が必要。

アプリケーションは、データの機密属性(個人情報、機微情報等)を、画面や印刷物に適切に表示する。

5. 認証・認可

5-1 アプリケーションは、ユーザーによる15分間の無効なログオン試行を3回連続して制限する。

15分間に3回、もしくは5回ログオンに失敗すると、アカウントロックを強制するようにアプリケーションを構成する。回数はシステムの特性に応じて検討する。

5-2 アプリケーションに埋め込み認証データを含めることはできない。

コード、構成ファイル、スクリプト、HTMLファイル、またはASCIIファイルに認証データを埋め込まない。

5-3 SAMLアサーションでSubjectConfirmation要素を使用する場合、アプリケーションはNotOnOrAfter条件を使用する。

SAMLアサーションで<SubjectConfirmation>要素を使用するときに、<NotOnOrAfter>条件を使用するようにアプリケーションを設計および構成する。

5-4 WS-SecurityまたはSAMLアサーションを使用して、すべてのアプリケーションメッセージで有効期間を検証する。

すべてのWS-SecurityトークンプロファイルおよびSAMLアサーションで有効期間が検証されるようにする。

5-5 SAMLアサーションでConditionsエレメントを使用する場合、アプリケーションはNotBeforeエレメントとNotOnOrAfterエレメントの両方、またはOneTimeUseエレメントを使用する。

SAMLアサーションで<Conditions>要素を使用するときに、<NotBefore>および<NotOnOrAfter>または<OneTimeUse>の使用を実装するようにアプリケーションを設計および構成する。

5-6 WS-Securityで保護されたメッセージは、作成および有効期限付きのタイムスタンプを使用する。

WS-Securityメッセージを使用してアプリケーションを設計および構成し、作成および有効期限のタイムスタンプとシーケンス番号を使用する。

5-7 アプリケーションは、PKIベースの認証を使用する場合、対応する秘密キーへの承認されたアクセスを強制する。

アプリケーションまたは関連するアクセス制御メカニズムを構成して、アプリケーション秘密鍵への許可されたアクセスを強制する。

5-8 アプリケーションは、パスワード/ PINをクリアテキストとして表示しない。

入力時にパスワードとPINが難読化され、読み取れないようにアプリケーションを構成する。 難読化されたパスワードをコピーしてクリアテキストとして貼り付けることができないように、アプリケーションを設計する。

5-9 アプリケーションは、PKIベースの認証を利用する場合、受け入れられたトラストアンカーへの証明書パス(ステータス情報を含む)を構築することにより証明書を検証する。

PKIベースの認証を使用する場合、受け入れられたトラストアンカーへの証明書パスを構築するようにアプリケーションを設計する。

5-10 アプリケーションは、15文字以上のパスワード長を強制する。

パスワードに15文字を要求するようにアプリケーションを構成する。
アプリケーションは、設定されるパスワードに、IDが含まれておらず、000000、12345678、qwerty、monkeymonkeyなどの連続した文字や繰り返しおよびmonkeyeknomのような回文がないことを検証し、不適切と判断された場合は、不適切である理由をユーザーに通知する。

5-11 アプリケーションは、過度のアカウント権限なしで実行する。

最小限の特権でアプリケーションアカウントを構成する。アプリケーションが管理者資格情報で動作することを許可しない。

5-12 デフォルトのパスワードを変更する。

可能な場合、パスワードの代わりに強力な認証システムを使用するようにアプリケーションを構成する。そうでない場合は、デフォルトのパスワードを承認済みの強度のパスワードに変更し、パスワードに関するすべてのガイダンスに従う。
デフォルトのパスワードには、P@ssw0rd、pass、製品名などの推測しやすい弱いパスワードを使用しない。

5-13 アプリケーションは、アクセス制御ポリシーに従って、情報およびシステムリソースへの論理アクセスに対して承認を実施する。

アプリケーションリソースへのアクセス承認を強制する。

5-14 アプリケーションは、組織ユーザー(または組織ユーザーに代わって動作するプロセス)を一意に識別して認証する。

ユーザーおよびユーザープロセスを一意に識別および認証するようにアプリケーションを構成する。

5-15 アプリケーションは、パスワードの暗号表現のみを保存する。

パスワードハッシュ値を作成するときは、強力な暗号化ハッシュ関数を使用する。 パスワードハッシュの作成時にランダムなソルト値を使用する。 認証データを含むデータファイルの強力なアクセス制御許可を確認する。

6. ネットワーク構成

6-1 アプリケーションWebサーバーは、DMZで動作する階層型アプリケーションである場合、アプリケーションサーバーおよびデータベースサーバーとは別のネットワークセグメントに存在する必要がある。

他のアプリケーション層からWebサーバーを分離し、DMZデータアクセス制御要件に従って、アプリケーションサーバーおよびデータベースサーバーとは別のネットワークセグメントに配置する。