2011年1月8日土曜日

セキュリティテスト

『知識ゼロから学ぶ ソフトウェアテスト』   高橋寿一著

5. 攻撃に耐えうるソフトウェアの構築
        セキュリティテスト

2001年7月、Code Redというワームが世界中のMicrosoft llSサーバを攻撃し、30万台以上がダウンする大事件に発展しました。ソフトウェアのセキュリティ問題は、機能のバグと同じくらいユーザに迷惑をかけ、顧客の財産を侵害するものです。
しかし、残念ながら、現代の開発でセキュリティテスト手法が確立されているとは言いがたいです。
悪意のある攻撃が引き起こす問題を見つけることは、ソフトウェア開発の範疇外であったために、この分野のテスト手法はかなりの遅れを取ったのです。

攻撃手法 バファオーバーフロー
バッファオーバーフローは、現在最も多い攻撃手法といえます。
プログラミングで使われるリターンアドレスをハッカーに取られると、ハッカーは自由にアプリケーションやシステムをコントロールすることができます。
こうした自体を防ぐには、開発者は注意しながらプログラムを書く必要があります。
具体的には、使う関数を気をつけることです。strcpyやsprintfはまず使うべきではありません。

そうした情報はインターネット上に多く記載されているので、開発者が確実にセキュアなコーディングを実行するようにテスト担当者は見張らなければなりません。

攻撃手法 フォーマットバグ
これもバッファオーバーフロー同様スタック情報を取得して書き換えを許すバグです。
printfやsprintfなど書式付き文字列を扱う関数は正しく使わないと、スタック情報を書き換えられることがあります。
テスト開発者は、C言語でprintfを使うと非常に危険だということを認識するべきでしょう。
これらの情報もインターネット上に多く記載されているので、テスト担当者はチェックしておく必要があるでしょう。


セキュリティ機能テスト
プログラミング言語の選択がセキュリティテストに与える影響の大きさについて触れておきましょう。

まず、C/C++を選んだ場合、セキュリティテストチームは絶望的だと言えます。
毎週のようにセキュリティパッチをリリースする必要があります。実際にそんなプロジェクトをたくさん抱えている会社があります。Microsoftです。
優秀な人材が集まっている会社でもこの状況なのです。

Java言語を選ぶと、セキュリティに関するテストタスクは著しく減ります。
十分にCPUのパワーがあり、メモリが必要なだけ使える状態ならば、Javaをプログラミング言語として選ぶのは悪い選択ではありません。

そして、セキュリティ機能テストに関しては、以下の項目を徹底的にテストすることになります。
・コードレビュー
・入力テスト
・モジュール指向のテスト
・静的解析ツール


セキュリティシステムテスト
システムレベルのセキュリティを確保することがシステムセキュリティテストの目標になります。
ここでは、システムレベルで、期待されないデータやプログラムを侵入させないテストを紹介します。

セキュリティシステムテストでは実際の攻撃の種類に合わせてテストを行います。
主な攻撃方法としては次のようなものがあります。
・不正プログラム
・情報漏洩、なりすまし(パスワード)
・クロスサイトスクリプティング
・スパイウェア

具体的なテスト方法としては、上に挙げた攻撃を想定して、アプリケーションが、”解析”・”変更or削除”・”監視” を適切に行えるかをテストする必要があります。


最後に、セキュリティテストに携わる人材を確保することは非常に困難です。
一般にいわれているテスト担当者のスキルセット以外に、暗号化、セキュリティシステム、最低限のアセンブラの知識が必要になります。
セキュリティに興味あるテスト担当者は、目指すのも悪くないかもしれません。

0 件のコメント:

コメントを投稿