侵入リスクを減らすには
エクスプロイトのテクニック
実際のエクスプロイトの方法の例として、Adobe Readerのgeticon() 。
“Adobe Acrobat and Reader 'getIcon()' ” BID #34169 - のバッファオーバーフローを引き起こす脆弱性について見てみましょう。
→参照:Adobe Acrobat and Reader Collab 'getIcon()' JavaScript Method Remote Code Execution Vulnerability(SecurityFocus)
PDFファイルに埋め込まれたJava Scriptから geticon() メソッドを呼び出す際に、過度に冗長な引数を渡します。するとgeticon()メソッドは、アプリケーションで利用するメモリ境界を超えて引数を展開してしまう事でバッファオーバーフローを引き起こし、OSに、境界を超えて展開された個所を読み込ませる事で、利用者の権限を奪い任意のコードを実行してしまいます。
最初のPDFファイルはマルウェア感染の入り口です。仮にこうしたエクスプロイトコードを含んだ添付ファイルを発見したとしても、マルウェアの実態が添付されていない事があるので、どのようなマルウェアがインストールされたのか追跡を難しくします。
図2:脆弱性の総数(クリックで拡大) |
なぜ攻撃者は脆弱性を悪用するのか
今日の攻撃者は、攻撃が発見されないようことに細心の注意を払っています。目立たない攻撃ほどブロックされる可能性が低くなるため、情報を盗み出すという目的を達成できる確率が高くなるためです。したがって、標的とするコンピュータにアクセスする手段を目立たずに得るための足がかりとして、脆弱性は格好のターゲットとなっています。脆弱性のエクスプロイトコードを用いる事により、攻撃者が感染したコンピュータの完全なコントロールを手中にできる場合もあるのです。
今や、脆弱性に関する情報をやり取りし、エクスプロイトを容易にするコードを提供するブラックマーケットが存在しているため、攻撃者が脆弱性を利用する事は特別な事ではないのです。
脆弱性の数は増加傾向にあり、引き続き警戒が必要なレベルにあります。
図3:(左)新しいゼロデイ脆弱性の傾向/(右)図4Acrobatの脆弱性を悪用したマルウェア侵入の例(それぞれクリックで拡大) |
脆弱性を取り巻く環境の内、深刻な問題の 1 つがゼロデイ攻撃です。攻撃者は、ソフトウェアベンダーから脆弱性を修正するパッチが配布される前、あるいは管理者がパッチをテストして適用する前に、悪用する攻撃を開始しようとします。攻撃の時点では脆弱性があまり知られていないため、このゼロデイ攻撃の発生によってはじめてソフトウェアの欠陥が明らかになる場合もあります。
ソフトウェアベンダーは、自社製品に見つかった脆弱性を修正するためのソフトウェアフィックスの開発とリリースのプロセスを確実に改善しています。しかしながら、ベンダーが顧客向けにパッチの提供を開始するより前に、攻撃者が脆弱性のエクスプロイトコードを開発しているというのが、平均的な現状です。
そのため、影響を受けるシステムはリスクにさらされ、被害を受けやすい状態のままになってしまいます。
脆弱性は、侵入段階でも悪用されますが、企業ネットワークに侵入後、他のPCやサーバーへ感染を拡大する際にも利用されますので、脆弱なサーバーが残っている場合、社内での感染拡大の危険性は高まります。
ここまで、高度に偽装したメールで標的をだまし、添付ファイルやURLリンクをクリックさせ、「脆弱性」というマルウェア感染の入り口を開かせるという、標的型攻撃における主流となっている手口を紹介しました。お読みになっておわかりの通り、侵入リスクの低減には脆弱性対策が重要なカギとなります。
脆弱性を悪用する攻撃を失敗させる事ができれば、いくら高度に偽装したメールを送っても、利用者に気付かれずにマルウェア感染させる事はできなくなるのです。
パターンマッチングによるウイルススキャンをすり抜ける新種のマルウェアは無限に作り出す事が可能です。
しかし、ソフトウェアのバグである脆弱性を攻撃者が作り出す事はできません。膨大で高度な作業によってのみ、攻撃者は眠っている脆弱性を発見できるのです。脆弱性の数は限られていますので、それを悪用するコードの実行を防ぐ事は、侵入のリスク低減に大きな効果を発揮します。
しかも、ゼロデイ脆弱性と言われるソフトウェアベンダーが発見していないような脆弱性の数はごくわずかです。前回紹介したようなAPTなど特殊なケースで使われますが、多用される事はありません。