「脆弱性」が原因で大きなセキュリティ事故が起こる事例が後を絶たない。脆弱性は、ソフトウエアが抱えるセキュリティ上の弱点のこと。悪意がある人が脆弱性を悪用して攻撃すると、様々な問題が起こる。

ソフトの脆弱性が引き起こす問題
ソフトの脆弱性が引き起こす問題
ソフトに脆弱性があると、外部から攻撃を受けた際に様々な問題が起こる。例えば、パソコンではランサムウエアに身代金を要求されたり、DDoS攻撃の踏み台になったりする。サーバーでは、サービスが停止したり、Webページの内容を書き換えられたり、個人情報が流出したりする。
[画像のクリックで拡大表示]

 例えば、パソコンのOSなどのソフトウエアに脆弱性があると、攻撃者がその脆弱性を悪用してマルウエアを感染させられる。「WannaCry」のようなランサムウエアの場合、パソコン内のファイルが勝手に暗号化されて読み出せなくなり、身代金を払わないと復号できなくなる。また、第三者のWebサイトにDDoS攻撃を行うマルウエアを仕込まれ、踏み台にされてしまうこともある。

 サーバーのソフトに脆弱性がある場合は、さらに多くの人が影響を受ける。重要な個人情報が漏洩することもある。Webアプリケーションフレームワーク「Struts2」で生じた脆弱性では、個人のクレジットカード番号が流出し、実際に金銭的被害が発生した。

不正データをそのまま受け入れ

 脆弱性が発生するには、大きく二つの条件がある。

脆弱性が生じる条件
脆弱性が生じる条件
ソフトに脆弱性が生じるには主に二つの条件がある。まず、ソフトが外部からデータの入力を受け付けている必要がある。攻撃の「口」がなければ攻撃は成立しない。加えて、問題があるデータのチェックが不十分で攻撃用データをそのまま受け入れている必要がある。これらの条件がそろった場合に脆弱性になり、攻撃によって意図しない動作が引き起こされれる。
[画像のクリックで拡大表示]

 まず、ソフトが外部からデータの入力を受け付けていること。外部と通信するネットワーク機能を持つソフトはすべて該当する。一方、大きな問題を引き起こす欠陥がソフトにあっても、それを外部から悪用できなければ脆弱性にはならない。

 二つ目の条件は、外部から入力されたデータのチェックが不十分で、不正なデータをそのまま受け入れていることだ。

 これらの条件がそろっていると、攻撃者が不正なデータを送り込んだ場合、意図しない異常動作が引き起こされる。例えば、サーバーソフトが異常終了した場合、そのサーバーが提供しているサービスが止まってしまう。意図しないデータが出力されると、個人情報などの様々な情報が漏洩する可能性がある。データが書き換わってしまう不具合の場合、Webページの内容を書き換えられてしまうかもしれない。

 中でも危険なのが「リモートコード実行」(RCE)というタイプの不具合だ。攻撃者が外部から与えたプログラムが実行されてしまう。これにより、重要情報の取得やデータの書き換え、マルウエアの感染など、攻撃者がやりたい放題になってしまう。

▼DDoS
Distributed Denial of Serviceの略。
▼意図しない異常動作
ほかに「権限上昇」という異常動作もある。意図しない権限上昇により、本来は許されていない操作を攻撃者が行えるようになる。
▼RCE
Remote Code Executionの略。