2016年8月4日木曜日

Webアクセスによるマルウェア感染の対策について

過去何回かのエントリ(*1*2*3)では、標的型攻撃やランサムウェアなどのメールの添付ファイルによるマルウェアの感染の対策について述べた。今回は、Webアクセスによるマルウェア感染の対策について述べてみたい。尚、ランサムウェアやバンキングトロイなどのマルウェアの種類に係わらず、Webアクセスによって感染する全てのマルウェアに対して対策は共通だ。

Webアクセスによるマルウェア感染の主な手口には、
  1. 正規のWebサイトの改ざん
  2. 不正広告(マルバタイジング)
  3. メール本文内のURLをクリックさせることにより不正サイトに誘導
  4. SEOポイズニングやタイポスクワッティングにより不正サイトに誘導
などがある。いずれの場合も、エクスプロイトキットと呼ばれる複数の脆弱性に対する攻撃コードをパッケージ化したツールキットが使用されることが多い。エクスプロイトキットが使用する脆弱性はFlash Player、Java、Silverlightなどのブラウザプラグインの脆弱性やInternet Explorerなどのブラウザの脆弱性だが、特に最近は古いバージョンのFlash Playerを使い続けていることが最も多い感染の原因となっている。


ブラウザ毎のFlash Playerの更新方法


対策の基本は、OSやブラウザ及びプラグインを最新版に更新することだ。尚、Flash Playerでは、Windowsのバージョンやブラウザの種類により更新の方法が異なるので注意する必要がある。


IE/Edge Firefox Chrome
Windows Vista/7
ActiveX
個別にインストール・
更新
NPAPI
個別にインストール・更新
PPAPI
ブラウザに統合
ブラウザの更新で同時に更新
Windows 8.1/10
ActiveX
ブラウザに統合
Windows Updateにより更新
Windowsのバージョン、ブラウザ毎のFlash Playerの更新方法

表の様に、Chromeでは、Flash Playerが組み込まれており、ブラウザを更新することでFlash Playerも更新される。また、Windows 8.1/10のIE/Edgeでも、Flash Playerが組み込まれており、Windows Updateを行うことで、最新版に更新される。Firefox及びWindows Vista/7のIEでは、個別にFlash Playerのプラグインを更新する必要があるが、Adobe Flash Player 11.2以降では、バックグラウンドアップデートの技術が導入されており、自動的に更新をチェックし、更新があればインストールされる。

バックグラウンドアップデートが有効になっているかは、コントロールパネルからFlash Playerを選択し、Flash Player設定マネージャーの更新のタブで、「アップデートのインストールを許可する」がチェックされていることを確認する。これが有効になっていれば、画面上に何も表示されることなく定期的に更新を確認して、更新があれば自動的にインストールされる。


Flash Playerが最新版かどうかを確認する方法は、ブラウザ毎に色々あるが、各ブラウザ共通で確認する方法は、該当のブラウザで以下のURLにアクセスし、右上のVersion Informationに表示されているバージョンと下のブラウザ毎のFlash Playerの最新バージョンを比較することだ。

https://www.adobe.com/jp/software/flash/about/



ブラウザ毎のプラグインの動作


更新方法だけでなく、プラグインの動作についてもブラウザによって異なる。

Chromeでは、Chrome 45(2015年9月リリース)からNPAPIが完全に廃止されておりJava、Silverlightのプラグインは動作しなくなっている。また、Chrome 45(2015年9月リリース)から、重要でないと判断したFlashコンテンツについて自動実行しない設定が既定で有効になっているし、2016年9月-12月の四半期には、メインのFlashコンテンツについてもユーザが許可しないかぎり自動実行されないようになることが予定されている。

Firefoxでは、Flash Player以外のJava、Silverlightなどのプラグインは、初期設定が「実行時に確認」となっており、ユーザが許可しないかぎり自動実行されることはないし、2016年末までには、Flash Player以外のNPAPIプラグインは廃止されることになっている。また、Flash Playerについては、Firefox 48(2016年8月リリース)から、重要でないFlashコンテンツについて自動実行しないようになり、2017年には、すべてのFlashコンテンツについてユーザが許可しないかぎり自動実行されないようになることが予定されている。

Windows 10のEdgeでは、Flash Player以外のプラグインがサポートされておらず、Flash Playerについては、2016年8月にリリースの「Windows 10 Anniversary Update」において、重要でないFlashコンテンツについて自動実行しないようになっている。

IEでは、特に制限はなくすべてのプラグインが自動的に実行されてしまう。

     
IE
Edge
Firefox
Chrome
Flash Player以外のプラグイン
特に制限なく自動実行される  
サポートしない
初期設定で「実行時に確認」となっており、自動実行しない

2016末までにサポート廃止の予定
サポートしない
Flash Player
特に制限なく自動実行される
重要でないFlashコンテンツについて自動実行しない(「Windows 10 Anniversary Update」 2016年8月リリース から)




重要でないFlashコンテンツについて自動実行しない
(Firefox 48 2016年8月リリース から)

2017年には、すべてのFlashコンテンツについてユーザが許可しないかぎり自動実行されないようになる
重要でないと判断したFlashコンテンツについて自動実行しない設定が既定で有効(Chrome 45 2015年9月リリース から)

2016年9月-12月四半期からは、すべてのFlashコンテンツについてユーザが許可しないかぎり自動実行されないようになる


このような各ブラウザの動作を見ると、やはりIEは攻撃を受け易いことがわかるし、実際にIE利用者の感染被害は多い。どうしてもIEでないと見ることの出来ないサイトを除いて、普段のデフォルトのブラウザはIE以外のブラウザを使用することを推奨する。


ゼロデイ攻撃への対策


Flash Playerの脆弱性を利用した攻撃に対する対策の基本は、プラグインを常に最新版に更新することだが、脆弱性の修正が提供されるより先に攻撃に利用されるゼロデイ攻撃もしばしば発生するし、長期間PCを起動していなかったなど、何らかの理由で更新の適用が遅れてしまうことも起こり得る。そのため、例えゼロデイ攻撃を受けたとしても、被害にあわないような対策を考えておきたい。

最も確実な対策は、Flash Playerのプラグインをアンインストールしてしまうことだ。ただ、動画ニュースサイトなど、未だにFlashがないと閲覧できないサイトも残っており、多くの人には、完全にアンインストールしてしまうのは、難しいというのが現状だろう。

エクスプロイトキットによる攻撃コードは、1x1ピクセルのiflameなどに埋め込まれ、利用者には見えない形で実行されることが殆どだ。Chrome、Firefox、Edgeの「重要でないFlashコンテンツについて自動実行しない」設定は、攻撃コードを重要でないコンテンツと判断してブロックする可能性はある。しかし、各社がどのような判定方法で、重要でないコンテンツかどうかを判断しているか、基準がはっきりしないため、より確実な対策を考えたい。

現時点で筆者が最も効果が高いと考える対策は、Chromeで、右クリックして明示的にプラグインの実行を許可する「Click-to-Play」と呼ばれる設定を行うことだ。

設定方法は、Chormeで、[設定]->[詳細設定]->[コンテンツの設定]と選択し、プラグインの設定で、「プラグインコンテンツをいつ実行するかを選択する」をチェックする。


この設定を行った状態で、Flashコンテンツのページにアクセスを行うと、以下のような状態になり、右クリックして「このプラグインを実行する」をクリックしないとFlashコンテンツが再生されない。前述したように、エクスプロイトキットの攻撃コードは、利用者に見えない形で埋め込まれることが殆どなので、この設定を行っておけば、攻撃コードが自動実行されることはなく、例え、ゼロデイ攻撃や更新の適用の遅れがあったとしても、攻撃を防ぐことが出来る。


この設定を行うと、すべてのプラグインで、実行時に右クリックが必要となる。例えば、PDF Viewerのプラグインは、右クリックすることなく実行を許可したい場合は、アドレスバーに 「chrome://plugins 」と入力し、Chrome PDF Viewerの「常に実行を許可する」をチェックする。


尚、Firefoxでも、実行時にプラグインの実行を確認するClick-to-Playの設定を行うことは可能だが、Chromeの様に要素ごとに許可するのでなく、ページ全体を許可する形となる。そのため、許可した正規のサイトが改ざんされ、攻撃コードが埋め込まれていた場合、攻撃コードも含めて許可してしまうことになる。



Firefoxでも Click to Play per-element という拡張機能を入れることにより、Chromeと同様に要素ごとにプラグインの実行を許可させることが出来る。但し、あくまでサードパーティによる拡張機能のため、今後もサポートが継続されるかには注意する必要がある。



また、脆弱性緩和ツール EMET(Enhanced Mitigation Experience Toolkit) を各ブラウザに適用することもゼロデイ攻撃への対策となる。但し、EMETを適用することでアプリケーションが動作しなくなったり、不安定になるなどの不具合も色々と報告されているので、問題発生時に情報収集して自己解決出来る人でないと使うのは難しい様に思う。尚、Edgeにはすでに必要とされるサンドボックスなどの攻撃緩和策が含まれていることから、EMETの適用は出来なくなっている。



まとめ

  1. Webアクセスによるマルウェア感染では、エクスプロイトキットと呼ばれる複数の脆弱性に対する攻撃コードをパッケージ化したツールキットが使用されることが多い。エクスプロイトキットが使用する脆弱性はFlash Player、Java、Silverlightなどのブラウザプラグインの脆弱性やInternet Explorerなどのブラウザの脆弱性だが、特に最近は古いバージョンのFlash Playerを使い続けていることが最も多い感染の原因となっている。
  2. 対策の基本は、OS、ブラウザ及びプラグインを最新版に更新することだ。尚、Flash Playerでは、Windowsのバージョンやブラウザの種類により更新の方法が異なるので注意する必要がある。
  3. 更新方法だけでなく、プラグインの動作についてもブラウザによって異なる。各ブラウザのプラグインの動作を比較すると、やはりIEが攻撃を受け易いことがわかる。どうしてもIEでないと見ることの出来ないサイトを除いて、普段のデフォルトのブラウザはIE以外のブラウザを使用することを推奨する。
  4. Flash Playerではゼロデイ攻撃もしばしば発生するし、何らかの理由で更新の適用が遅れてしまうことも起こり得る。そのため、例えゼロデイ攻撃を受けたとしても、被害にあわないような対策を考えておきたい。
  5. Chrome、Firefox、Edgeの「重要でないFlashコンテンツについて自動実行しない」設定は、エクスプロイトキットによる攻撃を重要でないコンテンツと判断してブロックする可能性はある。
  6. Flash Playerのゼロデイ攻撃対策として現時点で最も効果が高いと考えられるのは、Chromeのプラグインの設定で、「プラグインコンテンツをいつ実行するかを選択する」をチェックし、右クリックで明示的にプラグインの実行を許可しないとプラグインが実行されないように設定すること。