人間の考え出すソフトウェア(ファームウェア)には弱点がつきものです。
発売時までにいくら念入りに点検しても、必ず発売後に弱点が見つかります。それも次々に。
この弱点のことを脆弱性と呼びます。これが見つかるとそのソフトウェアの開発元はその弱点をカバーする修正ソフトを急いで開発して配布します。
この修正ソフトを適用することを「パッチを当てる」などといいます。
丁度、自動車に欠陥が見つかった時のリコールと同じようなものです。自動車の場合は自動車メーカーが修理を行ってくれますが、ソフトウェアの場合は原則自分で行わなければなりません。ソフトウェアの脆弱性発見は自動車のリコールよりも圧倒的に頻度が多いです。
ゼロデイ攻撃とは
そのパッチが配布される日をデイ1として数え始めて、これ以前に攻撃を受けることをゼロデイ攻撃と呼びます。
この ” ゼロデイ ” の言葉の裏には「デイ1から後は自己責任」と言うニュアンスも隠れているような気がします。Measploit Frameworkなど過去の脆弱性悪用ツールのデータベースもすぐに出回るのですから。
最初に誰が発見するか
最初に脆弱性を発見するのが誰なのかによってその危険度が大きく変わります。すなわち、
- 開発元が発見する場合
- ハッカー側が発見する場合
- 第三者が発見する場合
に分けることができます。
開発元が発見する場合
最初に脆弱性を見つけたのが開発元であった場合、当然そのことは発表されません。(先に弱点を発表してしまったらすぐに狙われますので)
まずは急いで修正パッチを開発して、その後に発表することになります。
世間に弱点が知れ渡ると同時に、その修正パッチが発表されることとなります。
なのでこの場合にはゼロデイ攻撃は発生しません。
ハッカー側が発見する場合
ハッカー側が発見しても発表はしません。ハッカーは他の誰にも知らせずにその脆弱性を悪用して攻撃を仕掛けます。これがすなわちゼロデイ攻撃です。
攻撃された側は、脆弱性情報がないので思いもよらない弱点を衝かれることになります。
ハッカー側からは無防備な弱点を狙い放題となります。
攻撃を受けた側を検証して、脆弱性が見つかり、そのパッチが出来るまではゼロデイ攻撃が続きます。
第三者が発見する場合
例えばセキュリティ研究者などが脆弱性を発見した場合、これは脆弱性情報を取りまとめる公的機関に報告されます。脆弱性情報として有名なのはCVEなどがあります。
これが報告されると、その開発元はすぐさま脆弱性を修正するパッチの開発を始めます。一方ハッカー側では脆弱性を悪用するツールの開発を始め、開発競争になります。
開発元により修正パッチが開発・配布された日がデイ1となります。
それよりも先にハッカーの攻撃が行われればそれはゼロデイ攻撃となります。
ゼロデイ攻撃は防御が困難ですが、ゼロデイを過ぎてパッチが配布されれば防御は容易となります。
修正パッチが配布されると急いでそれを適用しなければならない理由がここにあります。
ゼロデイの派生語
ゼロデイ脆弱性:まだパッチが開発・配布されていない脆弱性のことです。
まとめ
私なりにゼロデイ攻撃を解説してみましたが、この言葉にはまだ若干の定義の揺らぎがあり、様々な使われ方があるようです。
コメント