脆弱性とは「悪用できるバグ」と言われる。すなわち、何らかの攻撃に悪用される可能性のある欠陥である。最近では様々なアプリにおいて脆弱性が指摘されている。ここでは、「安全なWebアプリケーションの作り方」を参考に、脆弱性とセキュリティについてまとめる。
1 脆弱性とは「悪用できるバグ」
バグとは、コンピュータプログラムに含まれる誤りや不具合のことである。虫による不可抗力的なエラーを原義としている。このバグのうち、悪用可能なものを脆弱性(vulnerability)と呼ぶ。悪用の例は以下の通りである。
- 個人情報などの秘密情報を勝手に閲覧する
- Webサイトの内容を書き換える
- サイトを閲覧した利用者のPCをウイルスに感染させる
- 別の利用者になりすまし、秘密情報の閲覧、投稿、買い物、送金などを行う
- Webサイトを利用不能にする
2 脆弱性のデメリット
脆弱性のデメリットを、以下に5つ挙げる。
- 経済的損失: 利用者が受けた金銭的損失などの補填、補償。迷惑料として配る金券などの費用、配送料、Webサイト停止による機会損失、信用失墜による売上減少など
- 法的な要求:個人情報保護法(第20条)5000件を超える個人情報を保持する事業者は個人情報取扱事業者として安全管理措置を講じる義務が課せられている
- 利用者が回復不可能な痛手を受ける場合が多い
- Webサイト利用者に嘘をつくことになる
- ボットネットワーク構築に加担する:ボットとはマルウェア(不正プログラム)の一種で、PCに感染後は外部からの指令を受けて、迷惑メール送信やDDoS攻撃(分散型サービス妨害攻撃)などの不正活動を行うものである
3 脆弱性が生まれる理由
脆弱性が生まれる理由は、以下の2種類に分類できる。1つはバグによるもの、もう1つはチェック機能の不足によるものである。
バグによるものには、SQLインジェクションやクロスサイト・スクリプティング(XSS)のような影響の大きい脆弱性が含まれる。これらの脆弱性は、セキュリティに無関係のところで発生することに加え、発生箇所にかかわらずアプリケーション全体に影響が及ぶという特性がある。そのため、アプリケーション開発チーム全員に安全なアプリケーションの書き方を徹底する必要がある。
チェック機能の不足によるものには、ディレクトリ・トラバーサル脆弱性がある。これは、セキュリティ上のチェックが必要という意識が開発者に乏しい場合が多いことに加えて、バグによるものと同様に脆弱性の影響が全体に及ぶ。
4 セキュリティバグとセキュリティ機能
アプリケーションのセキュリティを確保するためには、バグをなくす(セキュリティバグ)だけでは不十分な場合がある。例えば、通信路をHTTPSで暗号化していない状態はバグではなく、脆弱性でもないが、通信内容を盗聴される可能性がある。
HTTPSを利用して通信路を暗号化する例のように、積極的に安全性を強化する機能のことをセキュリティ機能と呼ぶ。セキュリティ機能はアプリケーション要件の一種と考えられるので、セキュリティ要件と呼ぶ場合もある。
アプリケーションのセキュリティを要件とバグに整理することは、開発マネジメントの上からも重要である。バグをなくすことが当たり前のことであるように、脆弱性をなくすことも当たり前である。しかし、セキュリティ機能を要件として盛り込むか否かは、費用との兼ね合いでアプリケーション発注者が決めるべきことである。
最後に
最近でもTwitterやFacebookのSMS機能に脆弱性が見つかり、他人のアカウントに投稿できる状態であったことがわかった(現在は解決)。個人情報の保護の観点からも、開発者のみならず誰しもが脆弱性について知っておくべきであろう。
次回は、仮想マシン環境であるVMware PlayerやFiddlerについてまとめる。
![]() |