マルウェアに仕掛けるハニートラップ

2019年9月5日

私は映画『ミッション:インポッシブル』の6作目を見ていない。おそらく見ないだろうと思う。5作目については、1週間の過酷な仕事を終えて帰国する長距離フライト中に、ゾンビのような状態で一通り見た。というのも、映画のワンシーンが、まばゆくモダンな当社のロンドンオフィスで撮影されたからだ。このシリーズはあの1作で十分だ。派手なアクションは私向きではない。もう少しチャレンジングで思考を刺激される、そして純粋に興味をそそられるものが好みだ。貴重な時間には限りがある。

しかし、少なくとも1つのシーンが非常によくできている(つまり、思考を刺激され、純粋に興味をそそられた)ことは認めなければならない。主人公たちが悪者の1人に仲間を裏切らせようとしているとか、そんなようなシーンだった。主人公たちは、「病室内のテレビで、CNNが、核爆弾による世界最終戦争のニュースを放映している」という偽の状況を作り出す。世界滅亡の宣言を世界に向けて放送できたことに満足した悪人は、尋問する側と取引して仲間を棄てた(それとも放棄したのはログインコードだっただろうか?)。

なぜ私がこの場面をこんなに気に入っているのかというと、未知のサイバー脅威を検知する方法の1つを、実によく示しているからだ。未知のサイバー脅威を検知する手法は数多く存在し、適用分野、効果、リソース使用量その他に応じて実に多岐にわたる(こうした手法についてはたびたび書いている)。しかし、中でも際立つのはエミュレーションだ(これについても以前に書いた)。

『ミッション:インポッシブル』で描かれたそのシーンのように、エミュレーターは、隔絶された人工的な環境で調査対象のオブジェクトを実行することで、オブジェクトが持つ悪意を暴こうとする。

しかし、このやり方には深刻な弱点が1つある。環境が人工的に作られているという、まさにその点だ。エミュレーターは、人工的な環境を実際のOS環境にできる限り近づけようと最善を尽くす。しかし、賢くなってきたマルウェアは、どうにかして実環境ではないことを見破ってしまう。そこでエミュレーターはマルウェアがどのように環境を認識するのかを確認し、環境を再編して改良する。そしてマルウェアは…この終わりのない繰り返しは、保護されたコンピューターに脆弱性を作り出すことになる。根本的な問題は、実際のOSとそっくり同じイメージを作り出せるエミュレーターがまだないことだ。

一方で、別の方法もある。仮想マシン上に載せた実際のOS上で、疑わしいオブジェクトのふるまいを分析するのだ。エミュレーターで完璧にいかないのなら、仮想でありながらリアルでもあるマシンにやってもらえばよいではないか?これは理想的な「尋問」になることだろう。人工ではなく実際の環境で行われるが、現実には悪い影響が及ばないのだ。

なぜこれまでこのコンセプトを誰も思いつかなかったのか、と思うかもしれない。なんだかんだで、仮想化は1992年以降、テクノロジー業界のメインストリームになっている。しかし、事はそれほど単純ではない。

第1に、疑わしいオブジェクトを仮想マシンで分析するのには、多くのリソースが必要だ。そのため、悪意あるものを一切シャットアウトするために多大なリソースを集中させてスキャンを行う大企業向け重量級セキュリティソリューションでないと対応しきれない。悲しいことだが、家庭用のコンピューターでは、ましてスマートフォンでは、この技術は使えない。まだ、今のところは。

第2に、こういったものは実はすでに存在している。Kasperskyではこの技術を、社内で、社内調査の用途で実際に使っている。しかし、市場に出ている製品に観点を移すと、この技術を採用するものは多くない。競合他社では似たような製品をリリースしているが、効果のほどは理想とはほど遠い。概してそうした製品の機能は、ログの収集と基本的な分析程度に限られる。

第3に、仮想マシン上でファイルを実行するということは、非常に長時間にわたり一筋縄ではいかないプロセスのほんの序の口にすぎない。「悪意あるオブジェクトの意図を暴き出す」という最終目的のためには、スマートハイパーバイザーを導入する、動作ログを取得して分析する、危険な動作のテンプレートを常に微調整する、アンチエミュレーション技術に対抗する、実行を最適化するなど、さまざまなタスクが必要になる。

ここで、不要な謙遜を抜きにして言えるのは、我々が確実に一歩先を行っているということだ。

当社は先般、米国の特許(US10339301)を取得した(リンク先は英語)。疑わしいオブジェクトを詳細かつ迅速に分析することを目的とした、適切な仮想マシン環境の作成に関する特許である。その仕組みは以下のとおりだ。

  • 最適な形で実行し、かつできる限り高い検知率を達成できるような設定で、(さまざまな種類のオブジェクト向けの)仮想マシンを作成する。
  • 仮想マシンのハイパーバイザーは、オブジェクトの動作のシステムログおよびログのシステム分析と連動して機能する。これを、疑わしい動作のテンプレート、ヒューリスティック、動作に対する反応のロジックなどの各種データベース(アップデート可能)が支援する。
  • 疑わしい動作が検知された場合、オブジェクトの悪意ある意図を暴き出すために、分析システムは仮想マシン上でオブジェクトを実行しながらプロセスに変更を加える。たとえば、ファイルを作成したり、レジストリを変更したり、時間の進みを早めたりする。

最後(3番目)に挙げた点は、Kasperskyのテクノロジーのうちで最もユニークで面白い機能である。1つ例を挙げて説明したい。

実行されていたファイルが「休眠」してまったく動作しなくなったのを、システムが検知したとする。活動しなくなったのは、悪意ある活動を始めるまでの数分(または数十分か、数時間か、数十時間か)、何もしないでいるようにプログラムされているからだ。このファイルが何もしなくなったとき、我々は仮想マシン内で時間の進みを早める。1秒間に1分、または3分、あるいは5分、最大で何億兆分も進めることができる。分析対象のファイルの機能は変化しないが、このファイルが何もしない時間を100分の1(または1,000分の1)に短縮するのだ。「うたた寝」の時間が過ぎると、マルウェアはシステムクロックが正常に進んでいるかどうか確認する。そして、システムクロックが正常に進んでいると勘違いして、悪意あるミッションを開始する。こうして、その正体を現すのだ。

もう1つ例を挙げる。

特定のライブラリの脆弱性を利用する、またはファイルやレジストリの内容を変更しようとするオブジェクトがあるとする。このオブジェクトは、まず、通常のfopen() 関数を使ってライブラリ(またはファイル、あるいはレジストリ)を開こうとする。うまくいかなかった場合(ライブラリがない、ファイルへのアクセス権がないなど)、これ以上のことはしない。このような場合、我々はfopen()関数の戻り値を「file absent」(ファイルなし)から「file exists」(ファイルあり)に(オブジェクトを実行しながら)変更する(または、必要ならば適切なコンテンツを含むファイル自体を作成する)。こうして、このオブジェクトの活動を観察する。

この手法は、オブジェクトが見せる動作のロジックツリーに対しても有効だ。たとえば、ファイルAとファイルBが存在する場合に、ファイルCが変更されてジョブが終了したとしよう。しかし、調査対象のプログラムがファイルAかファイルBのどちらかしか存在しない場合に何をするかは、これでは分からない。そのため、並行してイテレーションを起動し、こちらではそのプログラムに対して「ファイルAはあるがファイルBはない」という情報を与え、ロジックツリーの動作の分析を進める。

ここで重要なのは、ファイルの実行に対する反応のルールは、簡単にアップデート可能な外部データベースを使って構成できるということだ。新しいロジックを追加するためにエンジン全体を作り直す必要はない。悪意ある動作の筋書きをいくつか、正確に記述して、あとはワンクリックでアップデートすればよい。

以上、仕組みを簡単に説明した。このテクノロジーは近々Kaspersky Anti Targeted Attack Platform(KATA)に追加され、エンタープライズ向けのスタンドアロン製品、Kaspersky Sandboxとしても販売されることになっている。