Necursとは、マルウェアの検知と除去の試みを妨害するためのカーネルモードドライバで、現時点で最も有名なものだ。GOZ(Gameover Zeus)で使われている。すでにPeter Ferrieによる記事で、Necursドライバの技術的な詳細は網羅的に取り上げられているが、我々は分析中にある興味深い点に気付いた。Nucursは「売り出し中のクライムウェア」モジュールとして段階的に取り込まれているのだ。

 我々がNecursドライバの最古のバージョンを見たのは2011年5月で、スタンドアロン型のマルウェアとしてだった。2012年初頭に、あるトロイの木馬型のダウンローダによってドロップされるのを観測した時点までは、他のマルウェアとの関連はなかった。この時はユーザモードのコンポーネントでしかなかったが、ドライバとしてNecursと呼ばれるようになった。

 GOZに当該ドライバが同梱されているのを目にしたのは、2014年の2月に過ぎない。これで著しく注目度が高まった。GOZボットネットの感染端末は何十万に達するものと推定されており、主にオンラインバンキングによる窃盗に用いられている。

 GOZはNecursが組み込まれる前は、関連するドライバ無しで動作していた。米FBI(Federal Bureau of Investigations)が遮断作戦を開始する約2か月半前に、このボットネットにNecursが加えられたのはかなり好奇心をそそる。

 Necursドライバの設計で興味深いのは、サードパーティが利用する際、作者による修正が一切必要ないところだ。Necursドライバの生成とインストールに使われているドロッパーのコードは、Necursのトロイの木馬型のダウンローダとGOZの双方で同じものだ。つまり作者は、ドライバを利用可能にするために必要なものをすべて提供しているのだ。

 ドロッパーのコードはシェルコードの様式で記述されていてそのまま実行可能であり、このドライバを使ったマルウェアが最終的にどんなものであれ、簡単にソースコードに含めることができるようになっている。

 Necursの顧客にソースコードを渡す必要はなく、単にサービスキーの値を適切に設定するだけで、任意の実行ファイルを保護するようにドライバを簡単に設定できる。保護すべきファイルの名称は、ドライバのサービスキーDisplayNameの値から取得される。

 実際のファミリーが何であれ、ユーザモードのコンポーネントからドライバへ命令を与えられるようにする制御用インターフェイスもNecursに組み込まれている。制御はIRP_MJ_DEVICE_CONTROLというリクエストで実行される。これはDeviceIoControlというユーザモードのAPIを通じて送信できる。

 ユーザモードのコンポーネントが最初に送信しなければならない制御コードは0x220000である。Necursドライバはこれを受信すると、ドライバを制御できるプロセスとして、リクエストを送付するプロセスのハンドルを保存する。このコマンドはブートアップごとに1度しか受け付けない。

 制御プロセスとして保存されるには、当該リクエスト用のIRP.AssociatedIrp.SystemBufferが12バイト長で、なおかつ以下の2つのチェックを通る必要がある。

   •  first_dword ^ 0xdeadc0de == second_dword
   •  first_dword ^ third_dword == リクエストを送信したプロセスのpid

 さらにチェックがあり、制御コードを送信するプロセスの名称はNecursのサービスキーのDisplayNameフィールドと同一でなければならない。これにより、Necursが保護するファイル名に対してアクセスしようとコマンドを送信する、望まぬプロセスを回避している。

 Necursは以下を含め、合計15の別々のIoControlCodeをリッスンする。

   •  0x220000 Necursマスターとしてプロセスを登録
   •  0x22000c Necursドライバのパスを取得
   •  0x220010 Necursのサービスキーの名称を取得
   •  0x220018 Necursドライバを更新(ドライバファイルの中身が、IRP.AssociatedIrp.SystemBuffer内のデータに置き換えられる)
   •  0x22001c Necursドライバをアンイストール
   •  0x220028 pidによりプロセスを終了
   •  0x22002c 名前によりプロセスを終了

 各コマンドを呼ぶコードは、ドライバのインストールも行うドロッパーのコード内に含まれている。

Necurs

 こういった特徴は本質的に、Necursドライバを再販およびサードパーティによる使用にうまく適合させている。これはGOZのトロイの木馬で用いられていることから明白である。ボットネットを遮断する現在の試みは、Necursの最大の「顧客」の運営の妨げになっているようだが、少なくともしばらくの間だけだろう。

 当社はNecursドライバのバリアントをRootkit.Necursとして検知する。

 —————

 Post by — Mikko S