第6回 検証しないデータが 引き起こす問題

第6回
検証しないデータが
引き起こす問題
問題とその対処
NECラーニング
山崎 明子
現実世界では・・・

あなたは知らない人が尋ねてきたらどうしますか?



その人が信頼できる人かどうかをチェック
確実に信頼できるとわかったときだけ招き入れる
どこでチェックするか?


すべての家の入り口
門(塀の入り口)
どのような問題が発生?
クロスサイト
スクリプティング
バッファ
オーバーフロー
DoS攻撃
SQLインジェクション
その他
さまざまな問題
どのような場所で検証?

エントリーポイント



ユーザによる入力
他システムとの連携ポイント
信頼境界

ここを超えるデータを検証
信頼境界
検証によるオーバーヘッド
発生するセキュリティ
の問題の大きさ
検証による
オーバーヘッド
<
ハッキングによる
システム応答性の劣化
問題発生時の
回復のためのコスト
検証の基本

有効なデータのみを受け入れる
それ以外はすべて拒否

検証が難しいポイント



有効なデータの表現方法が複数ある
無効なデータパターンを見落とす可能性がある
C:\dir1\dir2\MyFile.txt
C:\DIR1\DIR2\mYfILE.TXT
C:\dir1\dir2\dir3\..\MyFile.txt
Z:\MyFile.txt (UNC共有を利用している場合)
同じ意味の
別の表現
間違った検証

実行可能形式ファイルを拒否できる?
If ファイルの拡張子 = “exe” OR
ファイルの拡張子 = “com” OR
ファイルの拡張子 = “bat”
Then
拒否
End If
適切な検証

ユーザにデータを入力させない


入力データをさまざまな角度からチェック






リストから選択させる
「空」でないか?
データの大きさ?文字列の長さ?
データ型?
範囲は有効?
影響のある特殊文字が含まれていないか?
正規表現の活用

.NETのクラスの利用
効果的な対策

信頼境界の特定


エントリーポイントの特定


信頼できるデータと信頼できない入力
必要十分な検証
効果的な対策


エントリーポイントを減らす
必ず検証を通過するようにする
検証しないデータが引き起こす
問題のまとめ

セキュリティのさまざまな問題は検証しないデー
タが原因



まずは、データの検証
次に、個別の問題ごとの対処
検証が終わっていないデータは
すべて有害!
リファレンス

開発者のためのセキュリティサイト


MSDNデベロッパーセキュリティセンター
 http://www.microsoft.com/japan/msdn/security/
開発者向け セキュリティ オンライン セミナー
 http://www.microsoft.com/japan/msdn/security/seminars/
 アプリケーションセキュリティの基礎
 実践! セキュアなコード記述 Part 1
 実践! セキュアなコード記述 Part 2