このページの本文へ

McAfee Blog

マカフィーチーム、わずか32kbながら凶悪なランサムウェア「Anatova」を発見

2019年01月25日 17時10分更新

文● McAfee

  • この記事をはてなブックマークに追加
  • 本文印刷

 新たな脅威の出現を継続して見ている中で、我々は身代金要求の署名に基づきAnatovaと呼ぶ、新たなランサムウェアファミリーを発見しました。Anatovaはプライベートのピアツーピア(p2p)ネットワークで見つかりました。初期的な分析、顧客の保護を確保した上で、この発見を公表することにしました。

比較的新しいAnatovaだが、すでに世界中の広範囲で検出されていることを確認している

 Anatovaのコードはモジュール拡張に対応しているため、深刻な脅威になる可能性があると考えています。加えて、Anatovaはネットワーク共有の接続をチェックし、これらの共有上のファイルも暗号化します。Anatovaを開発し実行しているのは、技術力の高いマルウェア作成者と考えられます。各サンプルはそれぞれ独自のキーを持ち、これから説明する他の関数も含んでいます。これはランサムウェアファミリーでは珍しいことです。

 この記事では、Anatovaの技術的な詳細と、この新しいランサムウェアファミリーに関する興味深い事実について説明します。

 分析には、このハッシュを使用しました。170fb7438316f7335f34fa1a431afc1676a786f1ad9dee63d78c3f5efd3a0ac0

 Anatovaの最終的な目的は、できる限りすべてのファイルを暗号化した上で、被害者に身代金を支払うよう要求することです。

Anatovaの概要

 Anatovaは通常、ゲームやアプリケーションのアイコンを使ってユーザーを欺き、ダウンロードさせようとします。Anatovaには管理者権限を要求するマニフェストがあります。

バイナリに関する情報

 Anatovaランサムウェアは、2019年1月1日にコンパイルされた64ビットアプリケーションです。ハッシュのファイルサイズは307kbですが、サンプルで使用されるリソースの量によって変わる可能性があります。リソースをすべて削除すると、サイズは32kbになります。とても小さなプログラムですが、内部のメカニズムは強力です。

 Anatovaは、解析されにくい強靭な技術を備えているため多少厄介です。

・文字列のほとんどは暗号化されており(UnicodeとAscii)、実行可能なファイルに埋め込まれている異なるキーを使用して復号化される
・呼び出しの90%は動的で、次のような不審ではないWindows APIとCプログラミング言語の標準ライブラリーを使用:GetModuleHandleW、LoadLibraryW、GetProcAddress、ExitProcess、MessageBoxA
・IDA Pro(最新版のIDAを含む)でバイナリを開くと、関数が正しく検出されず、3つの命令コードを通じて​​処理を終了。これがIDA Proのバグなのか、マルウェアの作成者が意図的に作成した(これは疑わしいですが)のかは不明

IDA Pro 7.2最終バージョンの問題

攻撃経路

 現時点では、Anatovaが使っているか、将来使うであろうすべての攻撃経路が判明しているわけではありません。最初に見つかったのはプライベートのp2pにおいてでした。

 Anatovaの目的は、ほかのランサムウェアファミリーと同様に、感染したシステム上のすべてもしくは多くのファイルを暗号化し、それを復号化するために支払いを要求することです。犯罪者らは10DASHの仮想通貨の身代金の支払いを要求します。これは時価にして700米ドル相当であり、ほかのランサムウェアファミリーと比較してもとても高額です。

バージョン1.0の詳細なハイライト

 Anatovaは新しいファミリーのため、コード内にバージョンナンバーはありません。これをバージョン1.0と呼びましょう。

 このマルウェアが実行した最初の活動は、ライブラリー「kernel32.dll」のモジュールハンドルを取得し、関数「GetProcAddress」を使用して29の関数を取得することです。

文字列を復号化した後にkernel32の関数を取得する

 マルウェアがkernel32のモジュールハンドルを取得できなかったり、一部の関数が見つからなかったりする場合、暗号化を実行せずに終了します。

 後に、マルウェアはハードコードネーム(この場合は6a8c9937zFIwHPZ309UZMZYVnwScPB2pR2MEx5SY7B1xgbruoO)でミューテックスを作成しようとしますが、ミューテックスの名前はサンプルによって変わります。 ミューテックスが作成されてハンドルを取得すると、「GetLastError」関数を呼び出して、最後のエラーがERROR_ALREADY_EXISTSまたはERROR_ACCESS_DENIEDであるかどうかを調べます。どちらのエラーが出た場合も、このミューテックスオブジェクトの前例が存在することを意味します。その場合、マルウェアはメモリークリーニングのフローに入りーこれについてはこの記事の後半で説明しますがー、処理を終了します。

ミューテックスをチェック

 このチェックが済めば、Anatovaはkernelの場合と同じ手順を使用してライブラリー「advapi32.dll」、「Crypt32.dll」および「Shell32.dll」からいくつかの関数を取得します。すべてのテキストは1つずつ暗号化および復号化され、関数を取得し、メモリーを解放して、次のテキストに進みます。

 これらのモジュールや、必要とする関数を取得できなければ、クリーニングツールのフローに入り、終了します。

 興味深いことに、Anatovaがログインしているユーザーやアクティブユーザーのユーザーネームを取得し、暗号化されたネームのリストと比較する関数が発見されました。いずれかのネームが検出された場合は、クリーニングフロー手順に進み、終了します。

 検索されたユーザーネームのリストは以下の通りです。

・LaVirulera
・tester
・Tester
・analyst
・Analyst
・lab
・Lab
・Malware
・malware

 アナリストもしくは仮想のマシンやサンドボックスの中には、セットアップでデフォルトのユーザーネームを使用しているものがあります。この場合は、ランサムウェアはマシンやサンドボックスでは機能しません。

 このユーザーチェックの後、Anatovaはシステムの言語をチェックします。言語というのはシステム言語のことです。ユーザーがWindows OSをインストールするときに、インストールに使用する言語を選択します(ただし、後でユーザーが別の言語をインストールすることもできます)。Anatovaはシステムに最初にインストールされている言語をチェックして、ファイルの暗号化を避けるためにユーザーがこれらのブラックリストに記載されている言語の1つをインストールできないようにします。

 Anatovaが影響を及ぼさない国のリストは次の通りです。

・All CIS 諸国
・Syria
・Egypt
・Morocco
・Iraq
・India

 CIS諸国が除外されているのはごく普通のことであり、これは多くの場合、作成者がこれらの国のいずれかの出身であるかもしれないことを示しています。その他にここに列記されている国々の名前があることは驚きです。なぜこれらの国々が特に除外されるのかについて、明確な仮説はありません。

システム言語をチェック

 言語チェックの後、Anatovaは、私たちが調査したすべてのサンプルで、0の値を持つフラグを探しますが、このフラグが1の値に変わると(現在のマルウェアのサンプルではその値が変わることはありません)、「extra1.dll」と「extra2.dll」のネーム(復号後)の2つのDLLをロードします。これは、Anatovaがモジュールに移行するか、近い将来より多くの関数で拡散されることを示しています。

エクストラモジュールをロード

 この後、マルウェアはシステム内のすべてのプロセスを列挙し、「steam.exe」、「sqlserver.exe」といったネームを含む膨大なリストと比較します。これらのプロセスが見つかると、マルウェアはそれらを開いて終結させます。これはランサムウェアの典型的な行動で、データベースファイル、ゲームファイル、Office関連ファイルなど、後で暗号化されるファイルのロックを解除しようとするものです。

 続いて、すべての文字列を暗号化する暗号APIを使用して、RSAキーペアを作成します。この動作は、GandCrabやCrysisなどのような他のランサムウェアファミリーと同じで、使用されるキーがユーザーごと、実行ごとに割り当てられます。

 マルウェアがキーを作成できない場合、クリーンフローに進み終了します。

 次に、Anatovaは暗号API「CryptGenRandom」の関数を使用して32ビットのランダムキーと8バイトの別の値を作成し、ランタイムにSalsa20アルゴリズムと以前のプライベートブロブキーを使用して暗号化します。

 ファイルの暗号化プロセスの間に、2層の暗号サンプルのマスターRSA公開キーを復号化します。最初のものは0x55の値のXORで、2番目はハードコードされたキーとSalsa20アルゴリズムを使用したサンプルのIVを使って復号化します。

マスターRSA公開キーサンプルの第1層から復号化

 この後、公開キーをインポートし、それによって、ランタイムにプライベートRSAキーの暗号化に使用したSalsa20キーとIVを暗号化します。

 次のステップは、すべての情報を暗号化したもの(Salsa20キー、Salsa20 IV、プライベートRSAキー)で、メモリーのバッファを準備します。関数「CryptBinaryToStringA」を使用してBASE64で大きな文字列を作成します。ランサムウェアは、後でコンピューターメモリーのキー、IV、プライベートRSAキーの値を消去し、第三者がこの情報をメモリーからダンプして、復号化プログラムを作成するのを防ぎます。

 BASE64の文字列は後に身代金メモに書き込まれます。Salsa20キーとIV、そしてユーザーがファイルを復号化するために必要なプライベートRSAキーを復号化できるのは、マルウェアの作成者だけです。

 これでうまくいかない場合、Anatovaは自分自身を削除し、消去フローに入って終了します。

 キーがメモリーバッファで暗号化されると、Anatovaはすべての論理ユニットを列挙し、DRIVE_FIXEDタイプ(通常のハードディスクなど)またはDRIVE_REMOTEタイプ(マウントされているリモートネットワーク共有用)の既存のインスタンスをすべて検索します。Anatovaはそれらの場所にあるファイルそれぞれを暗号化しようとします。これは、ネットワーク共有上のファイルが暗号化されているときに、被害を受けた企業が重大なインシデントを引き起こす可能性があることを意味します。

すべての論理ユニットをチェック

 マウントされた各ドライブーハードディスクまたはリモート共有ーについて、Anatovaはすべてのファイルとフォルダを取得します。次にフォルダかどうかをチェックし、フォルダであれば、フォルダ名が「.」と「..」という名前が付いていないことを確認し、同じディレクトリや過去のディレクトリとだぶらないようにします。

 収集されたフォルダ名のリストで、Anatovaは「Windows」、「Program Files」、「Program Files(x86)」などのブラックリストに登録された名前のリストと照合します。多くのランサムウェアファミリーでは通常のことです。というのは、作成者はオペレーティングシステム(OS)を破壊するのではなく、代わりに高価値ファイルをターゲットにしたいと考えているからです。Anatovaはオペレーティングシステムにとって同様に重要なファイル拡張子.exe、.dllおよび.sysについても同じことをします。

ファイル名と拡張子をチェック

 このチェックを通過すると、Anatovaはファイルを開いて、サイズが1MBあるかどうかを確認します。Anatovaは大きなファイルで時間の浪費を避けるために1MB以下のファイルしか暗号化しません。暗号化を迅速にしたいのです。暗号化されたファイルの最後にポインタを設定することで、Anatovaはすでに暗号化されているファイルを暗号化しないようにします。

 次に、AnatovaはSalsa20アルゴリズムのキーとして32ビットのランダムな値とSalsa20のIVとして使用される8バイトの別の値を作成します。

 これらの値を使うと、メモリー内のすべてのファイルまたは最大サイズ1MBのファイルを読み取り、Salsa20アルゴリズム(非常に高速なアルゴリズムで、オープンソースの実装があるため、最近非常に人気があります)を使用してこの情報をkeyとIVで暗号化します。

ファイル関数の暗号化

 実行時に作成されたRSA公開キーをインポートし、ファイルの暗号化に使用されるキーとIVを暗号化します。次に、ファイルの冒頭から暗号化されたコンテンツを同じファイルに書き込み、ファイルの末尾にポインタを設定して以下の内容を書き込みます。

・Salsa20キーを暗号化したブロックは、公開RSAキーで暗号化されています。
・Salsa20 IVを暗号化したブロックは、公開RSAキーで暗号化されています。
・ファイルサイズは1MB未満です。
・各サンプルの特別なハードコードの値は、身代金ノートに表示されています。
・サンプル内の特別なハードコードの値は、同じファイルを重複して暗号化しないようにするためにチェックされた感染のマークになっています。

 これが完了すると、Anatovaは同じフォルダーに身代金メモを書き込みます。そのため、Anatovaがフォルダ内の何かしらを暗号化できない場合、このフォルダには身代金メモは作成されず、影響を受けたフォルダでのみ行なわれます。

 この動作は、すべてのフォルダに身代金メモを書き込む他のランサムウェアファミリーとは異なります。

 身代金メモのテキストはバイナリで完全に暗号化されていますが、作成者(たち)に連絡するメールアドレスと支払い用のダッシュアドレスは除外されます。

 Anatovaは時間を節約するために、既にフォルダに存在する身代金ノートは上書きしません。身代金メモはすべての暗号化情報とともにbase64ブロックが含まれており、これは、ID番号とともに、「ーKEYー」の文字列で始まるブロック内のファイルを復号化するのに必要なものです。

 要求に応じた被害者は、最大200kbのサイズの.jpgファイルを1つだけ無料で復号化することができ、復号化されたファイルを回復することの証明となっています。

身代金メモの事例

 以上の作業がすべて完了すると、Anatovaはボリュームシャドウコピーを極めて短時間で10回破壊します。ほとんどのランサムウェアファミリーと同様に、ボリュームシャドウコピーの実行と削除には、管理者権限が必要なvssadminプログラムを使用しています。

シャドーボリュームを10回削除する

 最後に、すべてのステップが完了すると、前述したように、ランサムウェアはコードクリーニングの流れをたどり、主に復号化ツールの作成をサポートする可能性のあるメモリーコードのダンプを防ぎます。

カバレッジ

 McAfeeのゲートウェイおよびエンドポイント製品の顧客は、Anatovaから保護されています。検出名にはRansom-Anatova!(パーシャルハッシュ)などがあります。

不正アクセスの指標

 サンプルは以下のMITRE ATT&K 技術を使用しています。

・Execution through API
・Application processes discovery
・File and directory discovery: to search files to encrypt
・Encrypt files
・Process discovery: enumerating all processes on the endpoint to kill some special ones
・Create files
・Elevation of privileges: request it to run.
・Create mutants

Hashes:

2a0da563f5b88c4d630aefbcd212a35e
366770ebfd096b69e5017a3e33577a94
9d844d5480eec1715b18e3f6472618aa
61139db0bbe4937cd1afc0b818049891
596ebe227dcd03863e0a740b6c605924

※本ページの内容は 2019年1月22日更新のMcAfee Blogの抄訳です。
原文: Happy New Year 2019! Anatova is here!
著者: Alexandre Mundo

カテゴリートップへ