「脆弱性」が原因で大きなセキュリティ事故が起こる事例が後を絶たない。脆弱性は、ソフトウエアが抱えるセキュリティ上の弱点のこと。悪意がある人が脆弱性を悪用して攻撃すると、様々な問題が起こる。
例えば、パソコンのOSなどのソフトウエアに脆弱性があると、攻撃者がその脆弱性を悪用してマルウエアを感染させられる。「WannaCry」のようなランサムウエアの場合、パソコン内のファイルが勝手に暗号化されて読み出せなくなり、身代金を払わないと復号できなくなる。また、第三者のWebサイトにDDoS▼攻撃を行うマルウエアを仕込まれ、踏み台にされてしまうこともある。
サーバーのソフトに脆弱性がある場合は、さらに多くの人が影響を受ける。重要な個人情報が漏洩することもある。Webアプリケーションフレームワーク「Struts2」で生じた脆弱性では、個人のクレジットカード番号が流出し、実際に金銭的被害が発生した。
不正データをそのまま受け入れ
脆弱性が発生するには、大きく二つの条件がある。
まず、ソフトが外部からデータの入力を受け付けていること。外部と通信するネットワーク機能を持つソフトはすべて該当する。一方、大きな問題を引き起こす欠陥がソフトにあっても、それを外部から悪用できなければ脆弱性にはならない。
二つ目の条件は、外部から入力されたデータのチェックが不十分で、不正なデータをそのまま受け入れていることだ。
これらの条件がそろっていると、攻撃者が不正なデータを送り込んだ場合、意図しない異常動作▼が引き起こされる。例えば、サーバーソフトが異常終了した場合、そのサーバーが提供しているサービスが止まってしまう。意図しないデータが出力されると、個人情報などの様々な情報が漏洩する可能性がある。データが書き換わってしまう不具合の場合、Webページの内容を書き換えられてしまうかもしれない。
中でも危険なのが「リモートコード実行」(RCE▼)というタイプの不具合だ。攻撃者が外部から与えたプログラムが実行されてしまう。これにより、重要情報の取得やデータの書き換え、マルウエアの感染など、攻撃者がやりたい放題になってしまう。
Distributed Denial of Serviceの略。
ほかに「権限上昇」という異常動作もある。意図しない権限上昇により、本来は許されていない操作を攻撃者が行えるようになる。
Remote Code Executionの略。