この夏、ファイルを暗号化するWindowsランサムウェアの市場に、新たに2つの強力なマルウェアファミリーが登場した。CryptoWallCTB-Lockerである。この2つのうち、CTB-Lockerのほうがより高度なファミリーで、ファイルの暗号化に楕円曲線暗号を、またC&Cサーバとの通信にTorを利用している。一方、CryptoWallはファイルの暗号化にRSAとAES、C&C通信にHTTPと、従来からの組み合わせを用いている。

 しかし、先月の終わりに、新しいバージョンのCryptoWallが世に出現した。この最新版は、機能面ではそれまでのバージョンとほぼ一致するが、重要な違いが1つある。C&Cサーバとの通信において、CryptoWallもいまやTorを使うようになったのだ。CTB-Lockerと同様にCryptoWallも、正規のTorの実行ファイルをプロジェクトのオフィシャルWebサイトから入手して使うような、従来からの簡単な方法は取っていない。代わりに自前の難読化したバージョンのTorを用いている。

Disassembly of CryptoWall with Tor functionality Disassembly of CryptoWall without Tor functionality
Torの機能を持ったCryptoWall(左)とTorの機能を持たないCryptoWall(右)。f_setupTorCommunication()へのcallを除いて両コードが同一であることに注意

 CryptoWallが使っている方法が興味深い。最初に、多数のハードコーディングされたURLへHTTPで接続を試みる。それらのURLから、RC4で暗号化されたファイルをダウンロードしようとする。ダウンロードしたファイルは、最初は使用している暗号キーの長さ、続いてキーそのもの、という構成になっている。次に、実際のペイロードの長さと、最後にペイロードそのものが格納されている。マルウェアがペイロードのダウンロードと復号に成功すると、新たに割り当てられたメモリセグメントにペイロードをコピーし、新しいスレッドを作成してペイロードを実行する。

Screenshot of payload in a hexeditor
ペイロードのダウンロードの開始時をhexeditorで表示

 ペイロード自体はTorのカスタム版で、難読化した2つのレイヤに覆われている。両レイヤが実行を終了すると、メモリ上に最終的なコードが展開され、ペイロードはTorネットワークへの接続の確立を試みる。接続が確立すると、ペイロードスレッドと元のCryptoWallのスレッドの双方が共有する、グローバルメモリのバッファに、ペイロードがフラグ値をセットする。また、ペイロードは同じバッファ内に、ペイロードのファンクションの1つを指すポインタもセットする。これが実際にデータの送受信の役割を持つファンクションだ。

 オリジナルのCryptoWallスレッドは、グローバルフラグがセットされていることを確認すると、実行を継続する。Torネットワーク上の3つのC&Cサーバのアドレスは、ペイロードではなく、元のCryptoWallのバイナリにハードコーディングされている。C&C通信の実際のメッセージのコンテンツも、元のバイナリにあるコードが処理している。ペイロードはTor接続の取り扱いとデータの送受信にのみ責任を負う。

 おそらく、ランサムウェアのオペレータは、CryptoWallからCTB-Lockerへ移行していたのだろう。あるいは、CryptoWallの作者は単に2番手では嫌だったのかもしれない。いずれにせよ、ランサムウェアの悪巧み競争はまだまだ続いている!

 Torの機能を持つCryptoWallのサンプルは以下。

 3370f29350115af162b613c45fd5a6a44315a213
 6698bb2df60685863a664e282e493ca1e886fec3

 Post by Artturi (@lehtior2)