n階層システム設計の考慮点

第8回 セキュリティ設計について

この記事を読むのに必要な時間:およそ 5 分

今回は,各階層での設計についての注意点およびノウハウについて解説していきます。

Microsoft社は開発者向けに下記の「開発者向けセキュリティ ガイダンス」を公開しています。

WebアプリケーションおよびWindowsアプリケーションに関するセキュリティに関してのガイダンスは,こちらにほとんどが記載されています。是非参考にしてください。

今回は上記の内容を踏まえ,私の経験,ノウハウを追加させいて頂きます。そのため,一般に言われている脅威であるとかセキュリティホールなどのすべての項目は記載できません。上記のMicrosoft社の「セキュリティガイダンス」と共に読んで頂ければと思います。

① ホストレベルでの代表的な脅威とその対策について

ホストレベルでの代表的な脅威とその対策について説明します。ここでは,ホストといってもメインフレームのホストではなく,.NETアプリケーションが稼働するサーバPCのことを指します。

表1 ホストレベルへの脅威とその対策

脅威 対策
ウイルス,トロイの木馬,ワーム

オペレーティングシステムに最新のサービスパックおよびソフトウェアの修正プログラムを導入する場合については,やみくもにサービスパック等を適用するのではなく,必要であるもの,使用環境に影響があるものを,使用環境での十分な事前検証を行ったうえで適用します。これらの検証を怠ると,サービスパック等の適用により,想定外のアプリケーションやサービスが導入・稼働され,または必要なサービスが非稼働にされ,アプリケーションに影響を及ぼす場合があります。

オペレーティングシステムに適合したウイルス予防ソフトウェアを導入し,機能を有効にしておきます。この際,ウイルス予防ソフトにファイル操作に関するリアルタイムのウイルス検査機能がある場合はそれらを有効にします。また,定期的にメモリ,ファイル管理領域,ファイルの検査を行います。この際,ウイルスパターンファイルは最新のものを使用します。

フットプリンティング(ポートスキャン,Pingスイープ,NetBIOS列挙等)

サーバ機でワイヤレスネットワークを使用していない場合は,サービスやプロトコル等を無効にします。

Telnet等のサービスに関しても最低限のサービスのみを有効にし,無効のサービスで使用するポートについては塞ぎます。

パスワードクラッキング

パスワードで使用可能とする文字列には,社名や部署名,氏名,年月日等の推測されやすい文字ではなく,最低文字数を8文字以上にし,アルファベット+数字+記号をそれぞれ1~2個ずつ挿入し,推測されないようにします。

パスワードの有効期間を業務に支障のない程度に短くします。また,過去5回以上の変更履歴を取り,再利用を防ぎます。パスワードが切れる少し前からユーザ情報に登録されたメールアドレスに対して返信不可のメールにて事前通知し,パスワードの変更をユーザに促します。

サービス拒否

オペレーティングシステムの状態を監視するソフトウェアを導入し,CPUやメモリの使用量の監視を行い,しきい値を超える値を検知した場合は管理者に通報する仕組みの導入を検討します。

サーバOSにWindows Server 2008を使用する場合,Server Coreの導入を検討します。

② アプリケーションレベルでの代表的な脅威とその対策について

アプリケーションレベルでの代表的な脅威とその対策について説明します。

表2 アプリケーションレベルへの脅威とその対策

カテゴリ
脅威 対策
入力検証
クロスサイトスクリプティング

詳細は「 画面設計での考慮点とノウハウについて」で後述します。

SQLインジェクション

詳細は「 画面設計での考慮点とノウハウについて」で後述します。

正規化

詳細は「 画面設計での考慮点とノウハウについて」で後述します。

認証
ネットワーク盗聴

パスワードをネットワーク経由で転送する必要がある場合は,パスワードを暗号化するか,または暗号化された通信チャネル(SSL/TLSなど)を使用します。

Cookieリプレイ

Cookieドメイン属性を設定し,できるだけ狭い範囲のドメインのみを設定します。これにより,ほかのドメインへの影響を少なくすることができます。

資格情報の盗用

強力なパスワードを使用します。例えば,社名や部署名,氏名,年月日等の推測されやすい文字ではなく,最低文字数を8文字上にし,アルファベット+数字+記号をそれぞれ1~2個ずつ挿入し,推測されないようにします。

セッション管理
セッションハイジャック

SSL/TLSを使用してセキュリティで保護された通信チャネルを作成し,認証Cookieを渡す場合は必ずHTTPS接続を使用します。またこの場合,Cookieのsecure属性を設定します。

セッションIDをHiddenタグで管理している場合,ログイン前に使用したセッションIDはログイン後には使用しないようにします。

セッションIDにはGUIDなど,長くてランダムな値を使用し,この中にユーザID等の情報は含めないようにします。これにより,セッションIDの推測による攻撃を防ぐ可能性が高くなります。

Cookieドメイン属性を設定し,できるだけ狭い範囲のドメインのみを設定します。これにより,ほかのドメインへの影響を少なくすることができます。

セッションリプレイ

重要な機能を実行するときは再認証します。たとえば,銀行取引アプリケーションで送金する前には,ユーザに再びアカウントパスワードを要求します。

Microsoft Internet Explorerでは「暗号化されたページをディスクに保存しない」,「ブラウザを閉じた時,[Temporary Internet Files]フォルダを空にする」の詳細オプションを使用します。

Cookieドメイン属性を設定し,できるだけ狭い範囲のドメインのみを設定します。これにより,ほかのドメインへの影響を少なくすることができます。

例外管理
攻撃者による実装の詳細情報の開示

System. Exceptionのルートクラスは非常にCUP,メモリなどの資産を使用します。そのため,例外処理ではできるだけスコープの狭い例外処理を使用します。

アプリケーション境界に伝達できる例外を処理してログに記録します。この際,例外発生場所やエラー情報などが分かるように途中で無駄なスローをしないようにします。また,必要がない限り例外情報はアプリケーション境界を超えないように設計します。

IISや.NET Framework等実行環境が表示するエラーメッセージは表示しないようにし,必ず,カスタムエラーメッセージを返します。

サービス拒否

すべての入力データをサーバで徹底的に検証します。詳しくは後述しますが,入力データのチェックやサニタイジング等を行います。

著者プロフィール

露木敏博(つゆきとしひろ)

1966年神奈川県横浜市生まれ。1990年,株式会社日立システムアンドサービス(旧日立システムエンジニアリング株式会社)に入社。

流通系SE,営業所駐在SEなどを経て,2003年から生産技術部門で.NET技術に関する技術支援業務に携り,.NET技術に関する各種基準書および標準化,設計ガイドなどを作成。

マイクロソフトMVPアワードプログラムよりDevelopment Platforms - ASP/ASP.NETのカテゴリで2008年7月よりMVPアワードを受賞。

コメント

コメントの記入