
ペイロードを直接実行する前に、TorrentLockerは他のプロセスにインジェクションコードを実装します。 このプロセスは2段階で実行されます。 最初の段階で、ドロッパーは特別なプロセス-ブートローダーを開始します。 ブートローダーはヘルパーコードを解読し、explorer.exeプロセスに挿入します。 TorrentLockerはリモートでexplorer.exeにストリームを作成し、エクスポートされた__remote_entry関数は開始関数として機能します。

ドロッパーのいくつかの異なるバージョンを観察しましたが、この分析は、2014年10月15日のコンパイル日を持つこれらのバージョンの1つに焦点を当てています(このサンプルのSHA-1ハッシュは40B1D84Bで始まります)。
ドロッパーには、実行可能ファイルの分析を複雑にするいくつかのよく知られたトリックが含まれています。 そのようなトリックの1つは、動的エクスポートを使用することです。 また、OutputDebugString API関数を再利用することで構成される、アンチデバッグ技術も使用します。 デバッガが接続されていないプロセスのコンテキストからOutputDebugStringを呼び出す場合、有用な機能は実行されません。 ただし、デバッガがプロセスに接続されている場合、デバッガは出力用の文字列を送信します。 ドロッパーコードはこの関数を320,500回呼び出し、デバッガーがハングします。 この方法により、マルウェアはサンドボックスメカニズムをバイパスし、デバッグモードでプログラムを起動できます。

図 ドロッパーコードは、 OutputDebugString関数を320,500回呼び出します。
ドロッパーパッカーは、実行可能なPEファイルの2つのリソースを使用してペイロードを抽出します。 最初のリソースには、データの先頭に16ビットキーが含まれています。 このキーは、このリソースの残りのデータを復号化するために使用されます。 この部分には、2番目のリソースの暗号化解除に使用されるキーが含まれます。 2番目のリソースは、パッカーの構成です。 構成では、packer自体の動作を指定できます。たとえば、 inおよびvpcext命令を使用して、仮想マシンの検出技術の使用を指定できます。 両方の手順は、VMWareとVirtualPCを検出するために使用されます。
上記のリソースは、RC4アルゴリズムの修正バージョンを使用して暗号化されます。 ゼロに初期化する必要がある変数の1つは変更されないため、復号化プロセスにはエラーが含まれます。 解読コードの同様のエラーは、F-Secureの専門家によって説明されたMiniDukeマルウェアのバージョンの1つに含まれています。
正しい復号化の後、2番目のセクションのデータはPEファイルです。 この場合、ドロッパーは一時停止状態の新しいプロセスを作成し、この新しいプロセスにメモリの領域を割り当て、このPEファイルの内容をこの領域に書き込みます。 プロセスは、コピーされたPEファイルのエントリポイントから作業を再開します。 このプロセスをランチャーと呼びます。
ブートローダーと呼ばれるTorrentLockerコンポーネントは非常にシンプルです。 2つの機能を実行します。ドロッパーファイルを別のディレクトリにコピーし、「コア」と呼ばれる悪意のあるプログラムの別のコンポーネントを起動して実行します。 コアコンポーネントは、マルウェアの本体に圧縮および暗号化された形式で配置されています。 ブートローダーは、aPlibライブラリを使用してそれを解凍し、そのコードをシステムプロセスexplorer.exeおよびsvchost.exeに挿入します。 ローダーにこの操作を実行するのに十分な権限がない場合(管理者)、ローダーはこれらの権限を要求し、実行可能ファイルを再起動します。
TorrentLockerはいくつかの構成情報をシステムに保存します。 これを行うには、レジストリキーを使用します。 新しいマルウェアの亜種は、 アプリケーションデータシステムディレクトリまたはAll Usersの Programsディレクトリ内の任意の名前のディレクトリ内に構成データを保存することもできます 。 そこにあるファイルは、AES-256-CBCアルゴリズムを使用して暗号化されます。 復号化キーは、悪意のあるプログラムの実行可能ファイルの本文に組み込まれており、攻撃者が使用するキャンペーンによって異なります。 ドロッパーには、AESキーを生成するためのコードも含まれています。 OSがコンピューターにインストールされた日付に基づいて形成されます。 ただし、このコードは最も悪意のあるプログラムでは使用されず、将来の使用のために予約されている場合があります。

TorrentLockerは、ユーザーの電子メールクライアントが使用する情報の収集を専門としています。 被害者のSMTPサーバーとアドレス帳の認証データを盗むことができます。 Thunderbird、Outlook、Outlook Express、Windows Mailなど、さまざまなメールクライアントがサポートされています。

図 TorrentLockerは、Protected Storage APIを使用して、電子メールクライアントの構成を取得します。

図 Thunderbirdメールクライアントのアドレス帳の解析を担当するTorrentLockerコードの一部。
サイバー犯罪者がマルウェアを配信するための主な手段として電子メールメッセージを使用するという事実を考えると、連絡先リストなどの情報を盗むことは、TorrentLockerのその後の配布を大いに促進できます。 盗まれたSMTP情報を使用して、正当なサーバーを使用してフィッシングメッセージを送信することもできます。
マルウェアTorrentLockerは、ドロッパー本体に組み込まれたURLを使用してC&Cサーバーマネージャーとやり取りします。 ネットワークプロトコルのさまざまな変更を使用してC&Cを操作できます。以下に説明する変更は、2014年10月から12月にかけてサイバー犯罪者によって配布されたサンプルで使用されました。生成アルゴリズム(DGA)。30個の新しいドメインの補助リストを取得します。 2014年10月に発見されたTorrentLockerサンプルには、新しいC&Cアドレスを取得するためのDGAメカニズムが追加されました。
実際、TorrentLockerはC&Cサーバーと対話するためにかなり単純なプロトコルを使用します。 ただし、前の段落で述べたように、マルウェアのバージョンによって異なる場合があります。 C&Cと連携するために、SSLプロトコルが使用されます。これは、送信されるトラフィックに暗号化を使用します。 SSLの代わりに、いくつかの変更が暗号化に使用されます。 チェーンXORアルゴリズム。 悪意のあるプログラムからC&Cサーバーへの各HTTPS POST要求の形式は次のとおりです。


図 悪意のあるプログラムがC&Cサーバーに送信するメッセージの例。

図 リクエストフィールドと上記のメッセージのデータとの対応。
TorrentLockerが感染したコンピューターのC&Cサーバーにアクセスすると、特別な「ユーザーID」または「ユーザーコード」が生成されます。 このIDは、後で被害者を識別するために使用され、それに基づいて、C&CサーバーはTorrentLocker URLリンクを身代金支払いページとファイル復号化ツールに送信します。 このURLの形式は次のとおりです。

.onionドメインに簡単にアクセスできるように、身代金ページにはTor2Web経由でアクセスするWebサイトへのリンクが含まれています。 このメカニズムを使用すると、被害者はTorをサポートしていないブラウザからでも身代金支払いWebページにアクセスできます。
上記のユーザーIDは、ランダムに一致する6つの文字のストリングです。 ただし、2つのマルウェア感染が同時に発生した場合、感染したシステムのIDは類似している可能性があります。 このアルゴリズムをさらに分析すると、識別子を生成するためのコードは予測可能であることが示されました。 例として、C&Cサーバーによって選択された3つの識別子を考えます。

識別子は30進ベース(36進)を使用します。 10進数システム(基数10)に変換した後、識別子は0から10までの通常の数字の組み合わせとして表示されます。 最後の5桁を区切ると、2つのシリーズが得られます。 増加操作は古いシリーズに適用され、減少は若いシリーズに適用されることがわかります。 このスキームに従って2つの数字を追加すると、合計数は常に99999になることがわかります。これにより、マルウェアオペレーターが識別子の正確性を確認できます。 識別子を生成するためのアルゴリズムを知っていたため、リモートサーバーからの身代金要求ですべての可能なWebページを取得することができました。 これは、さまざまなCおよびCサーバーで行われています。
2014年9月、Nixuのセキュリティ再販業者は、TorrentLockerによって暗号化されたファイルを復号化できるさまざまなトリックを説明する投稿を投稿しました。 グラフィカルインターフェイスを備えた特別なツールもリリースされ、復号化操作を自動的に実行できるようになりました。 カウンターモード(CTR)暗号化モードでマルウェアが使用するAES-256アルゴリズムにより、このような「不正な」復号化が可能になりました。 同時に、すべてのファイルに同じキーが使用され、初期化ベクトル(IV)が使用されたため、アルゴリズムが脆弱になりました。 TorrentLockerの新しいバージョンは、CBC(Cipher Block Chaining)暗号化モードでAESを使用します。これにより、ファイルの復号化の可能性が排除されます。 この暗号アルゴリズムを使用するために、悪意のあるコードはLibTomCryptライブラリを使用します。
ファイル暗号化用の唯一のAES-256キーは、ドロッパーの実行時に生成されます。 システム内のすべてのファイルを暗号化するために使用されます。 同時に、Yarrow擬似乱数ジェネレーターと次のWindows API関数(それらによって返される値)は、キー生成手順自体に使用されます。
- ゲティックカウント
- GetCurrentProcessId
- GetCurrentThreadId
- GetDesktopWindow
- GetForegroundWindow
- GetShellWindow
- 取得する
- GetClipboardOwner
- GetOpenClipboardOwner
- Getfocus
- GetActiveWindow
- GetKBCodePage
- getprocessheap
- GetThreadTimes(GetCurrentThread())
- GetProcessTimes(GetCurrentProcess())
ファイルを直接暗号化する前に、AESキーはマルウェアファイルにあるRSA公開キーで暗号化されます。 次に、要求タイプ値を1に設定して、リモートC&Cサーバーに送信されます。
パフォーマンスのオーバーヘッドを回避するために、TorrentLockerは最初の2MBファイルのみを暗号化します。 明らかに、大きなファイルの場合でも、この長さでファイルを完全に使用不能または使用不能にするのに十分です。 暗号化された各ファイルの最後に、マルウェアは3つの特別なフィールドを追加します。その形式を以下に示します。

表に示されているAdler-32チェックサムは、おそらくAESキーと、ファイル自体がTorrentLockerで暗号化されていることを確認するために使用されます。 AESキーを暗号化されたファイルに保存するこの方法により、TorrentLockerオペレーターまたは別のRSA秘密キーホルダーは、他のソースに頼らずにファイルのコンテンツを簡単に解読できます。 また、C&Cサーバーが利用できない場合にAESキーを復元するためにも使用できます。
TorrentLockerとHesperbotの類似点
Hesperbot銀行トロイの木馬は2013年にESETアナリストによって発見され 、世界中のさまざまな国のユーザーのオンラインバンキングアカウントからお金を盗むためにサイバー犯罪者によって使用された複雑な悪意のあるツールです。 彼は、実行中のブラウザーのWebページに悪意のあるHTMLおよびJavaScriptコードを挿入しました。 TorrentLockerとHesperbotの類似点が見つかりました。 両方の悪意のあるプログラムのコードの作成者は、1つの犯罪グループに属しているようです。 両方のトロイの木馬を配布するスパムキャンペーンは、トルコ、チェコ共和国、オーストラリアなど、同じ国を対象としています。
2014年初頭にHesperbotを配布するために使用されたWebページは、TorrentLockerの場合に配布に使用されたものと非常に似ていました。 今年の3月、Zoltan Balazsのセキュリティ再販業者の1人が、CAPTCHAメカニズムを含むHesperbot配布Webページで情報を公開しました。 これは、TorrentLocker配布方法に非常に似ています。 URLパターンは、場合によっては.php?Id = [digits]で終わります。

図 マルウェアの配布に使用されるURLの比較。
両方の悪意のあるプログラムのC&CサーバーのIPアドレスも一致することに注意してください。 Hesperbotは、リモートC&Cサーバーとして、IPアドレス46.149.111.178のリモート更新Curehost1.ruドメインを使用しました。 同じIPアドレスが2014年9月のTorrentLockerサンプルで使用されました。ドメインはnigerianpride.netでした。
どちらのマルウェアファミリでも、以前のバージョンにはPDBファイルへのパス文字列が含まれていました。 このパスを表示するには、サンプルを解凍する必要があります。 Hesperbot(procblockモジュール)の場合、pdbへのパスは次のようになりました。

2014年8月、TorrentLockerのサンプルが私たちの手に渡りました。これには、非常に類似したパス(ラックコアモジュール)が含まれていました。

他のサンプルには、ラックドロッパーモジュールへのパスが含まれていました。

パス内のディレクトリ階層のIDは、実行可能ファイルが1つのグループまたは同じコンピューターでコンパイルされたことを示している場合があります。
統計
上記では、マルウェア作成者がTorrentLockerに感染したコンピューターを識別するために使用したユーザーIDを生成するメカニズムについて説明しました。 これらの識別子を使用して、リモートC&Cサーバーから被害者に関する情報を抽出することができました。 この実験は2014年11月24日に実施されました。以下は、参照情報の取得に使用されたリモートC&Cサーバーのリストです。

5つの異なるC&Cサーバーから、身代金を含む47.365のWebページを受け取りました。 このうち、39,670のWebページは、感染したシステムによって識別子が生成された実際のユーザーを表しています。 他の識別子は、すでに古くなっているか、ユーザーのマルウェア感染の成功によるものではないため(マルウェア研究者によって作成される可能性があります)、オペレーターによってデータベースから削除されました。 上記の実際の被害者のうち、570人のユーザーが攻撃者に身代金を支払い、ファイルを解読するためのソフトウェアへのリンクを受け取りました。 また、20のWebページは、身代金の全額が受け取られなかったことを示しています。

図 TorrentLocker差し押さえ支払いの統計。
差し押さえ支払いウェブページは、地域の適切な言語に翻訳されています。 合計13か国がサポートされています。 以下は、さまざまな国でのTorrentLocker感染の数を明確に示す統計です。

図 国の感染統計。
おわりに
サイバー犯罪者は少なくとも2014年2月からTorrentLockerを配布しています。彼らは被害者から大量のビットコインを収集することができました。 ユーザーは、自分のファイルへのアクセスを回復するためにお金をレイアウトする準備ができていました。 ビットコインの暗号通貨を使用すると、攻撃者は法執行機関に対して実質的に無防備になります。法執行機関は、支払いを行うときに宛先アドレスを確立できません。
TorrentLockerの作成者は、以前に使用されたCTRの代わりに、対称AES暗号化アルゴリズムのCBCモードを使用するように切り替えました。 したがって、ファイルの「不正な」復号化の可能性をゼロに減らしました。 解読は、RSA秘密キーがサイバー犯罪者から取得され、AESキーを解読できる場合にのみ可能です。 RSA公開キーで暗号化されたこのAESキーは、暗号化されたファイルの最後に保存され、ファイル(または最初の2 MB)を直接復号化するために使用されます。 上記で説明したように、公開RSAキーは悪意のあるプログラムの本体にあります。
TorrentLocker感染とファイル暗号化の結果に対する主な保護手段として、ハードドライブ上のファイルをバックアップします。 TorrentLockerは、感染したコンピューターに接続されているネットワークドライブにあるファイルの暗号化を専門としていることに注意してください。 この場合、データのバックアップコピーを含むファイルは、コンピューターに接続されていないリモートデバイスに保存する必要があります。そうしないと、TorrentLockerによって侵害される可能性があります。

図 TorrentLockerが暗号化するファイルの種類。