Cisco Japan Blog

注目の脅威:Solarmarker

2 min read



概要

  • Cisco Talos は、高度にモジュール化された .NET ベースの情報窃取プログラムでありキーロガーでもある Solarmarker の新たなアクティビティを確認しました。
  • 以前は侵入の足掛かりとして「m」というモジュールが使用されていましたが、これに代わる新しいモジュール「Mars」が登場しました。
  • これまで報告例がなかった「Uranus」というモジュールも確認されています。
  • Solarmarker を仕掛ける攻撃者は、ある程度検知をすり抜けながら進化を続けています。
  • Cisco Talos は、この進化する脅威に対応してシスコのお客様を保護するため、フルカバレッジを作成しました。

Talos は、情報窃取プログラム Solarmarker によるマルウェア攻撃を、2020 年 9 月までさかのぼって積極的に追跡しています。一部の DNS テレメトリと関連アクティビティについては、2020 年 4 月までさかのぼることができます。このときは 3 つの主要な DLL コンポーネントと、同様の動作をする複数の亜種を発見しました。

まず、悪意のある最初の実行ファイルが、プライマリコンポーネントを挿入します。一般的に「d.m」と呼ばれているコンポーネントで、コマンド & コントロール(C2)通信やその他の悪意のあるアクションを実行するために攻撃対象ホストに侵入するステージャとして機能します。「d.m」によって挿入されるのが、一般的に「Jupyter」と呼ばれているセカンダリコンポーネントです。ブラウザのフォームなどに入力された情報を窃取する機能を備えています。3 つ目が、天王星(Uranus)にちなんでいると思われる「Uran」という別のセカンダリモジュールです。これはキーロガーであり、比較的古い攻撃インフラの一部で確認されました。Solarmarker と Jupyter モジュールについては詳細な分析が行われてきましたが、Uran はこれまで見つかっていませんでした。

モジュール

Solarmarker をより包括的に説明するために、既知のモジュールとこれまで報告例のなかったモジュールを詳しく見ていきます。カバレッジと防御に関する情報については、このブログ記事の最後に記載しています。

侵入の足掛かりとなるモジュール「d.m」

Solarmarker では、侵入の足掛かりとなるコンポーネントが実行の中心的な役割を担っており、C2 サーバとの初期通信を確立し、他の悪意のあるモジュールを感染したホストにドロップできるようにします。Talos が観察したデータ内では、このコンポーネントは「d」という .NET アセンブリと「m」という単一の実行クラスとして展開されています(ここではまとめて「d.m」と呼ぶことにします)。マルウェアの実行時には、攻撃対象ホストの「AppData\Local\Temp」ディレクトリに多数のファイルが抽出されます。ダウンロードされたファイルと同名の TMP ファイルや、その後の実行チェーンを生成する PowerShell スクリプトファイル(PS1)などです。TMP ファイルの実行プロセスでは、ドロップされた PS1 スクリプトの内容をロードする PowerShell コマンドが発行され、実行後はロードされたファイルが削除されます。こうして生成されたバイナリ BLOB は、バイト配列とハードコードされたキーの XOR 演算によってデコードされ、リフレクションを介したアセンブリのロードによってメモリに挿入されます。その後、その中に含まれるモジュール「d.m」の「run」メソッドが呼び出され、最初の感染が完了します。

悪意のある DLLd.m」の再構築とリフレクションを介した呼び出し

 

モジュール「d.m」はシステムプロファイラとして機能するほか、攻撃者による追加アクションを可能にする足掛かりとしての役割も担います。特に興味深いのは、攻撃名と同名の「AppData\Roaming\solarmarker.dat」というファイルの書き込みです。このファイルは、攻撃対象ホストの ID タグとして機能します。クラスメソッド「GetHWID」が呼び出されると、「solarmarker.dat」がすでにホストに存在するかどうかがチェックされます。存在しない場合、ランダムに生成された 32 文字の文字列が、上記パスのファイル「solarmarker.dat」に書き込まれます。なお、Solarmarker の古い亜種の中には、攻撃対象 ID の保存にこのファイルを使用しないものもあります。その場合は、収集したシステム情報文字列をさまざまな形式で連結したりエンコードしたりします。

新しく作成された文字列や既存の文字列は、JSON オブジェクトの「hwid」フィールドの値として返されます。収集されたシステム情報のフィールドも、ここに含まれます。続いて、このオブジェクトは、バイト配列とハードコードされたキーの XOR 演算によってエンコードされます。最初の感染ステージで実行された PowerShell スクリプトで悪意のある DLL を作成した方法と同様です。新しいバイト配列はその後、ハードコードされている C2 の IP アドレス(調査した時点の多くのサンプルでは 45.135.232[.]131)に送信できるよう、base64 でさらにエンコードされます。送信は HTTP POST 要求を介して行われます。

エンコードされた JSON を使用した C2 との HTTP POST 通信

 

このモジュールにはリモートで実行コマンドを受信する機能もあり、感染したシステムの「\AppData\Local\Temp\」ディレクトリに新しい PS1 ファイルまたは PE ファイル(ファイル名は、ランダムに生成された 24 文字の英数字)をドロップして実行します。PowerShell やプロセスハロウイングによって実行することもあれば、PowerShell のテキストコマンドを直接受信して実行することもあります。

情報窃取モジュール「Jupyter」

情報窃取プログラムである Jupyter は、Solarmarker のモジュールの中で 2 番目に多くドロップされています。Solarmarker のサンプルの多くでは、実行中に C2 が追加の PS1 ペイロードを感染したホストに送信していました。C2 からの応答は、攻撃対象のシステム情報を含む JSON オブジェクトと同じ方法でエンコードされています。base64 と XOR をデコードした後、バイトストリームをディスク上の PS1 ファイルに書き込み、実行後はファイルを削除します。この新しい PowerShell スクリプトには、base64 でエンコードされた .NET DLL が含まれています。これも、.NET のリフレクションを介したアセンブリのロードによって挿入されたものです。「Jupyter」という、この DLL モジュールを分析したところ、攻撃対象の Firefox および Chrome のインストールディレクトリとユーザディレクトリから個人情報、ログイン情報、フォーム送信値を窃取する機能があることが分かりました。

あるバージョンの Jupyter DLL を逆コンパイルしたソース

「d.m」DLL と同じく、このモジュールは同様にエンコードされた JSON ストリーム(この中に追加のシステム情報と窃取したデータが含まれている)を使用して、HTTP POST 要求を通じて C2 サーバに情報を送信します。なお、今回分析した旧バージョンの Jupyter DLL では、「d.m」DLL にハードコードされていた IP アドレスを使用するのではなく、あるケースでは、「vincentolife[.]com」というハードコードされたドメインを使用していました。また、Jupyter モジュールは、実行ループの最後に POST 要求を追加します。プライマリ実行ループから収集されたデータに追加可能なその他の情報やコマンドを C2 ドメインに問い合わせるものです。

分析したバージョンの Jupyter では、.NET の「ProtectedData」クラスを使用して、Solarmarker の C2 サーバに送信されるデータを暗号化しています。この点が、XOR エンコーディングスキームを使用する「d.m」DLL とは異なっています。これで .NET のネイティブ API を使用すれば、エンコーディングスキームが静的分析や手動分析を回避しやすくなります。PowerShell スクリプトや「d.m」DLL ではハードコードされたキー値やカスタムのエンコーディングロジックが使用されますが、それとは対照的です。さらに、「Unprotect」メソッド呼び出しのデータ保護範囲引数に「CurrentUser」フラグを含めることで、暗号化キーが特定のユーザに効果的にバインドされます。これにより、「Jupyter」DLL 自体を所有していても、感染したホストと C2 サーバ間でやり取りされる生データを外部で復号して分析するのは難しくなります。

これまで報告されていなかったモジュール「URAN/URANUS」

攻撃インフラをさらに調査したところ、これまで報告例がなかった、セカンダリペイロードとみられる「Uranus」の存在が明らかになりました。Solarmarker は宇宙をテーマにした名前を好みますが、これも同様です。Solarmarker のインフラ「on-offtrack[.]biz/get/uran.ps1」でホストされているファイル「Uran.PS1」(Uran はロシア語で「天王星(Uranus)」を意味)に由来する名前です。Talos がドロップされているのを観察した Jupyter モジュールの例と同じく、Uranus もまず、侵入の足掛かりとなった DLL を通じて提供される PS1 ファイルを実行します。他のコンポーネントと同様に、この PS1 ファイルは、ファイル内の各バイトの単純なビット単位の XOR でエンコードされています。侵入の足掛かりとなるコンポーネントと Jupyter モジュールの両方に見られるエンコード/デコードクラスメソッドをいくつか見返した結果、Uranus をデコードする方法が判明しました。PowerShell スクリプトを実行すると、DLL クラス「Uran」がリフレクションを介して感染したホストにロードされ、「Run」メソッドが開始されます。

Uranus モジュールを分析した結果、キーロギングマルウェアの一種であることが分かりました。「Run」メソッドが実行されると、マルウェアは「LogCollector」クラスオブジェクトをインスタンス化します。比較的単純な機能ですが、.NET ランタイム API 内のさまざまなツールが見事に活用されています。「LogCollector」は、Uranus DLL に含まれる他のユーティリティクラスを使用してユーザのキーストロークと関連するメタデータをキャプチャし、アクションをより適切にコンテキスト化してソートします。たとえば感染したホストにインストールされている使用可能な入力言語とキーボードレイアウトを調べ、収集したキーロギングデータに 2 文字の ISO コードを追加属性として付加します。興味深いことに、このケースでは、英語のラベルをデフォルトで使用するのではなく、先にドイツ語とロシア語の文字セットの有無がチェックされます。その時点で最前面にあるウィンドウのタイトルは、「LogCollector」クラスがキャプチャした入力テキストを保存するために使用するディクショナリオブジェクトのソートキーとしても使用されます。

Uranus キーロガー DLL を逆コンパイルしたソース

Uranus のイベントループを遅延させるため、スレッドのスリープコールを使用して 10,000 秒ごとに抽出を実行するように設定されています。このモジュールも、Solarmarker の C2 インフラとの主な通信方法として HTTP POST 要求を使用します。このバージョンの DLL では、「LogCollector」が保持するデータの宛先として、「hxxp://spacetruck[.]biz:82/postk?q=」というホスト名がハードコードされています。クエリ文字列は 2 つのコンポーネントで構成されています。まず、攻撃対象 ID、バージョン文字列、コンピュータ名などのシステムのメタデータを連結したものを JSON オブジェクトとして構築し、base64 に変換します。このモジュールの亜種では、ランダムな文字で埋められた「solarmarker.dat」ファイルが攻撃対象 ID として使用されていました。しかしこのバージョンでは、感染したホストのユーザ名、コンピュータ名、ハードドライブのシリアル番号を組み合わせた文字列を使用しています。この文字列のバイト表現から、バイトシフトと XOR アルゴリズムを使って攻撃対象を識別する文字列を生成します。次に、「LogCollector」によって作成されたキーロギングデータを含むディクショナリオブジェクトも base64 に変換され、クエリ文字列テキストに追加されます。最後に、POST 要求が送信され、イベントループが再度開始されます。

これまで報告例がなかったアクティビティ

Solarmarker の一般的な実行フローについては、バージョン、アップデート、亜種の間で大きな違いはありません。Jupyter などの追加ペイロードの足掛かりとして使用できるよう、バックドアを感染したホストのメモリにインストールします。しかし、2021 年 5 月末から 6 月初めにかけて、Talos のテレメトリで新しい Solarmarker アクティビティが急増しはじめました。このようにアクティビティを繰り返し実行する中で、攻撃者は最初の親ドロッパーのダウンロード方法に微調整を加えました。また、侵入の足掛かりとなるコンポーネントを大幅にアップグレードしており、現在このコンポーネントは「Mars」と呼ばれています。

以前の攻撃を調査したときから、Solarmarker の元となる悪意のある PE ファイルは、無料サイトサービスでホストされている一般的なファイル共有ページを装ったページからダウンロードされていると Talos は考えていました。しかし、Talos のテレメトリで Solarmarker のドロッパーが使用しているファイル名を見つけてからダウンロード URL を発見するまでの間に多くのダミーアカウントが非アクティブになってしまい、事実確認ができていませんでした。Talos が想定していたこの配信方法は、後に CrowdStrike 社のマルウェアアナリストが出した Solarmarker に関する独自レポートpopup_icon で裏付けられました。たとえば Talos では、Google サイトの疑わしいアカウントで複数のダウンロードページがホストされていることを確認していました。このような場合、特定のファイルの URL は次の形式になります。

hxxps://sites[.]google[.]com/view/{ランダムな文字}/{ファイル名}

こうしたリンクで、PDF または Microsoft Word 形式でファイルをダウンロードできるページに攻撃対象を誘導します。ダウンロードリンクをたどると、最終的なダウンロードページに移動する前に、さまざまなドメインで複数回リダイレクトが実行されます。

基本的な手法は今も変わっていません。Talos のテレメトリで確認された親ファイル名の多くは、Google サイトでホストされている疑わしい Web ページでも確認できます。ただ、攻撃対象を誘い込むための最終ページには少し変更が加えられています。

Google サイトでホストされている最初のランディングページの例

以前は、テレメトリから取得した Solarmarker のサンプルは、「PdfDocDownloadsPanel」という非常にありがちなヘッダー名の最終ページからダウンロードされていました。一方、最近の攻撃では、最終的なダウンロードページの見た目を本物に近づけるとともに、公開レポートで明らかにされた以前のダウンロードページとは見た目を変えています。現在、最終的なダウンロードページでは、Google ドライブからファイルをダウンロードしようとしているように見せかけていますが、ファイルは攻撃者が制御しているドメインでホストされています。

Google ドライブを模した最終の誘い込みページの例

侵入の足掛かりとなるモジュール「Mars」

最新の Solarmarker の亜種に、これまで侵入の足掛かりとして使用されていたコンポーネント「d.m」に代わって、Mars DLL が搭載されていることが確認されました。攻撃対象ホストに感染する際の実行チェーンは、現在 2 種類が判明しています。1 つ目の実行チェーンでは、おとりプログラム PDFSam と Mars DLL のバイトを含む親ファイルをまず実行してから、第 2 ステージのドロッパーを使用します。その後、PowerShell を実行して Solarmarker の後期ステージを完了し、永続化手法を確立します。2 つ目の実行チェーンも、全体的な実行チェーンは 1 つ目と同様です。ただ、第 2 ステージのドロッパーのすべてのデータと命令は親ファイル自体にハードコードされているため、追加のファイルをディスクに書き込んで実行する必要はありません。この 2 種類の実行チェーンは、入手できたテレメトリ内の観察に基づいています。Solarmarker を仕掛ける攻撃者は、多種多様なバージョンの Solarmarker とモジュールを展開する傾向があります。実行チェーンごとにバリエーションを増やし、ドロップするファイルのパスと名前を変更している可能性があります。

第 2 ステージのドロッパーを使用するバージョンを例にとると、メインファイルが「pk.exe」という名前の第 2 ステージの PE ファイルをドロップします。このファイルが、このバージョンの Solarmarker の実行チェーンの残りの部分を実行する際の足掛かりとなります。pk.exe は、ユーティリティプログラム PDFSam のコピーを「\AppData\Local\Temp\gkNjg0918jkd.exe」に書き込みます。このプログラムは、Solarmarker のその他の初期化プログラムと同時に実行され、正規のドキュメントに見せかけて、攻撃対象に誤った指示を与えます。次の実行ステージとして機能するメインの PowerShell スクリプトも、ディスクの「\AppData\Local\Temp\tskAjbflM1jj」に書き込まれます。PE ファイルはシェルを開き、バイナリ内から構築された PowerShell を実行します。

実行の次のステージで使用される pk.exe に組み込まれている PowerShell

実行された PowerShell コマンドは、「tskAjbflM1jj」ファイルから base64 でエンコードされたテキストを読み取り、このファイルをハードドライブから削除します。次に、ハードコードされた英数字キー文字列(この場合は xk=’ovRsNQkSWZXFaYUDHPAdmlhGfrjOenBtbzEqpwIxMycTCgiuKJLV’)を使用して、デコードされたバイトを XOR 演算します。

その結果生成される文字列は別の PowerShell スクリプトであり、Invoke-Expression コマンドレットによって実行されます。

この 2 番目の PowerShell スクリプトには、Solarmarker の初期実行の最終ステージが含まれているほか、Mars DLL がハードコードされています。Mars DLL ファイルは、ディスクの次の場所に書き込まれます。

「%USER%\APPDATA\ROAMING\MiCrOSofT\<5 ~ 20 文字のランダムな文字列>\<10 ~ 20 文字のランダムな文字列>」

実際のファイルへの書き込みは、ランダムなバイトをファイルに挿入しながら Mars DLL バイト配列をループ処理する形で実行されます。これは、実際の悪意のある DLL を攻撃対象のディスクに残さないためです。その後、スクリプトは新しく書き込まれたファイルを読み取り、バイト操作を反転させる PowerShell コマンドを作成します。また、前述の PowerShell コマンドと同様に、ハードコードされている別のキーのバイトを XOR 演算します。その結果生成されるのが、実際の Mars DLL です。この DLL は、アセンブリリフレクションを介してロードされ、「Mars.Deimos」クラスから「Interact」メソッドを呼び出すことで実行されます。最後に、最終的な PowerShell コマンドをコピーして Mars DLL を再実行するスタートアップタスクを作成することで、永続化手法を確立します。PowerShell の Register-ScheduledTask コマンドレットを使用してタスクの作成を試みます。失敗した場合は、WScript オブジェクト(Mars DLL をロードして実行する PowerShell コマンドを含んでいる)を作成し、攻撃対象のスタートアップフォルダ「a8a85b041dc4c2bfc00abf64d546d.LnK」内のショートカットファイルに書き込みます。

永続性手法を確立し、Mars DLL を呼び出す PowerShell スクリプト

ドロッパーの実行の中間ステージが完了すると、PowerShell で XOR アルゴリズムを実行した後、ディスクに書き込まれたファイルから Mars モジュールが再構築されます。ここは以前の攻撃実行チェーンと同様です。生成された悪意のある DLL ファイルは、PowerShell を使用した .NET のアセンブリリフレクションを介してロードされ、「Mars.Deimos」クラスの「Interact」メソッドを呼び出すことで起動します。

なお、2 番目のバージョンの実行チェーンの場合、前述したように、セカンダリ ドロッパー ファイルは使用されません。代わりに、エンコードされた「pk.exe」に含まれている情報を親の PE ファイル内に保持しています。これらのサンプルでは、おとりプログラム PDFSam はハードコードされた場所「%USER%\AppData\Local\Temp\CMmnnjAi1984unbd.exe」に書き込まれ、エンコードされた PS1 ファイルは「%USER%\AppData\Local\Temp\FkJB11kdJJhbdDl」に書き込まれます。その他の実行過程は、「pk.exe」の場合と同様です。

PE ファイルに組み込まれるようになった第 2 ステージの PowerShell コード

DLL の逆コンパイルにより、最初にワークグループ名、ユーザがシステム管理者かどうか、システム名、現在のユーザ、Windows のバージョンなど、感染したホストに関する基本的なシステム情報が収集されることが判明しています。この情報は、Deimos クラス内のさまざまなメソッドへの実行呼び出しによって収集されます。結果は JSON テキスト文字列に収集され、HTTP POST 要求を通じて Solarmarker の C2 サーバに送信されます。以前のコンポーネントでは、C2 サーバへの接続にはホスト名と IP アドレスを交互に使用していました。今回のケースでは、これらのバージョンの Mars モジュールは、ハードコードされている IP 値 46[.]102[.]152[.]102 を使用しています。この C2 ホストは、以前に分析した Solarmarker のコンポーネントの旧バージョンでは確認されていません。

難読化されていない Mars DLL を逆コンパイルしたコード

「d.m」モジュールと同様に、Mars モジュールもリモートで実行コマンドを受信します。新しいファイルを感染したシステムにドロップして実行プロセスを生成する場合もあれば、PowerShell テキストコマンドを直接実行する場合もあります。DLL の「Begin」メソッドを実行する際にブール変数「flag」が「false」に設定されている場合、感染したホスト上のマルウェアは C2 からファイルまたはコマンドの応答を受信するように設定されます。ファイル応答の場合、サンプルでは、JSON オブジェクトの「status」、「task_id」、「type」キーに関連付けられた値に基づいて、PS1 または PE ファイルのいずれかの受信が想定されています。受信したバイトは「\AppData\Local\Temp\」ディレクトリ内のファイルに書き込まれます。ファイル名はランダムに生成された 24 文字の英数字です。Mars が PowerShell コマンド文字列を受け取ると、ディスクには一切書き込まれることなく直接コマンド実行されます。その後、これらのファイルはハードドライブから削除されます。なお、以前の Solarmarker 攻撃のネットワーク通信を調査したところ、Jupyter モジュールは PS1 ファイルを介してドロップしていました。

また、Mars モジュールは、C2 サーバとの間で送受信されるデータの難読化の向上を図るため、「d.m」よりも複雑な暗号化方式を使用しています。従来の Solarmarker では、HTTP POST トラフィックで送受信される JSON のエンコードに、base-64 エンコーディングとビット単位の XOR アルゴリズムの組み合わせ、または .NET のデフォルトの暗号化スキームのシンプルな実装を使用していました。最新版では、16 バイトのランダムに生成された AES 対称キーを使用して、C2 ホストとの間で送受信されるデータを暗号化するようになっています。このキーは、Mars DLL の初期実行時に作成されます。キー自体が RSA 非対称キーペアを使用して暗号化されており、最初の HTTP 要求で攻撃者の C2 に攻撃対象 ID と共に送信されます。公開キーは Mars DLL 内にハードコードされているため、対称キーや POST JSON データの読み取り可能なバージョンは、一般的な方法では極めて入手しづらくなっています。

「d.m」や Jupyter モジュールと同様、Mars DLL にはいくつかの異なるバージョンがあります。執筆時点で、5 つの異なる亜種がテレメトリと VirusTotal のデータで確認されています。これらには、「IN-1」、「IN-2」、「IN-3」、「IN-9」、「IN-10」という識別子が付けられていました。Solarmarker の亜種のほとんどは、ディスク上にアーティファクト「solarmarker.dat」を残しているため、攻撃者のアクティビティを簡単に特定できます。前述したように、Solarmarker の古い亜種の中には、実際には攻撃対象 ID の保存にはこのファイルを使用しないものもあります。その場合、収集されたシステム情報文字列をさまざまな形式で連結し、エンコードします。ただ、2020 年 10 月から 2021 年 6 月までの間に確認したほとんどの事例で、このファイルが使われていました。しかし、Solarmarker を使う攻撃者はこの問題を認識しており、モジュールをさらに難読化しようとしているようです。防御策により「solarmarker.dat」ファイルを検出するのが難しくなってきています。

Mars の上位バージョンである「IN-9」と「IN-10」では、もはや攻撃対象 ID の保存に「solarmarker.dat」ファイルは使用されません。代わりに、ランダムに生成された 32 文字の文字列をテキストファイル名とファイルの内容として使用します。従来は攻撃対象のディスクに「solarmarker.dat」がすでに存在するかどうかを確認するチェックが行われていましたが、この点も変更されています。これらの上位バージョンでは、パス「%USER%\APPDATA\ROAMING」内のすべてのファイル名を順にチェックし、抽出されたファイルと同じ名前のファイルを検索します。さらに、Dotfuscator パッカーを使用して C# コード自体を難読化しており、逆コンパイルしたフォームの分析には非常に手間がかかるようになりました。

Dotfuscator で難読化された Mars DLL

攻撃対象

重要な点は、Solarmarker を仕掛けている攻撃者が非常に高度な手法を駆使しており、ログイン情報や残存情報の窃取に重点を置いているとみられることです。具体例を挙げると、Jupyter モジュールにはブラウザのフォームのキャプチャ、Cookie データ、ログイン情報データベースファイルを抽出する機能があり、Uranus モジュールにはキーロギングコンポーネントが搭載されています。このことから、ログイン情報の収集に特に関心を持っていることが裏付けられます。また、チェック対象となっているキーロガーの言語コンポーネントから判断すると、攻撃者は、ヨーロッパに対する地理的関心が高いか、英語、ドイツ語、ロシア語以外の言語のテキストを処理できない可能性があると考えられます。初期化中に攻撃対象のキー入力を監視するクラスオブジェクトは、その時点のホストのキーセット言語コードがこれら 3 つの言語のいずれかであるかどうかをチェックします。返された言語コードがこれらのいずれでもない場合、キャプチャしたテキストにはデフォルトで英語のラベルが付けられます。ドイツ語またはロシア語を話す攻撃対象だけが特別扱いされています。その他の言語は、ラテン系の言語も、中国語、日本語、韓国語などラテン系以外の言語も、すべて「英語」ラベルのもとに無差別にまとめられています。いずれにせよ、どの言語の被害者がマルウェアに感染しているのかについては、攻撃者は特に注意を払っていません。これは、親ファイル名の構成が非常に多様であることと、その後のステージでは、モジュールをドロップして実行する前に、感染したシステムでそうした地理的チェックを行わないことからも明らかです。

Talos の確認したところでは、最近攻撃が急増する中で特に標的にされることが多い業種は医療、教育、地方自治体です。これらの業種よりは少ないものの製造業者が複数標的になっているほか、宗教組織、金融サービス、建設/エンジニアリング業界の個別の組織がいくつか標的となっています。一部の業種に被害が集中しているように見えますが、特定の業界が標的にされているわけではない(少なくとも意図的ではない)というのが Talos の見解であり、中程度の確信を持っています。Solarmarker の誘い込みファイルの名前は非常に多岐にわたっており、標的となっている業界との具体的な関連性はありません。この点について、Talos は当初から、Web 全体でドキュメントファイル名をスクレイピングし、ドロッパーのファイル名として使用しているのではないかと考えていました。また、Microsoft 社の研究者は、Solarmarker 攻撃では、検索エンジンの結果でドロッパーファイルが上位に表示されるように、SEO ポイズニングが使用されているのではないかと述べていますpopup_icon 。攻撃時点で一般的に使用されているファイル名によって、悪意のあるファイルに遭遇する可能性のある組織のタイプが偏る可能性もあります。

組織がこのマルウェアファミリについて特に注意すべき点は、モジュール性と情報窃取機能です。Solarmarker はこれまで、侵入の足掛かりとするアクティビティだけでなく、さまざまな機能を持つ最終的なペイロードも個別の DLL コンポーネントに分割していました。侵入の足掛かりとなる DLL を使用すれば、その後、任意のペイロードモジュールを実行できます。こうしたモジュールの中には、これまで確認されたことのないものもありました。これまでに確認されたモジュールによって、クレジットカード番号などの個人情報を入力した場合などに機密情報(機密性の高いブラウザの使用状況も含む)が盗み出される可能性があります。盗み出されたログイン情報が、他のシステムへのラテラルムーブメントに使用されたり、顧客データベースや患者の医療情報データベースなど、攻撃者にとってより魅力的なデータへのアクセスや窃取に利用されたりする危険性もあります。

攻撃者

Solarmarker がロシア語話者により作成されたことを示唆する証拠が見つかっています。少なくとも、作成者はそう見えるように設計しているものと考えられます。Solarmarker のドロッパーを静的および動的に分析した結果、実行ファイルのリソースセクションには、ロシア語がサポートされているシステムでファイルが作成されたことを示唆する特徴があることが明らかになりました。キーロギングモジュールの名前である「Uran」は、ロシア語で「Uranus(天王星)」を意味する「Уран」の音訳です。また、モジュール自体に、対象言語としてロシア語が指定されています。ブラウザのログイン情報などの情報窃取プログラム「Jupyter」も、(少しスペルが妙ですが)ロシア語で「Jupiter(木星)」を指す「Юпитер」を音訳または翻訳したものと考えられます。この場合、ロシア語を母国語とする人にとって最も一般的な音訳は「Yupiter」でしょう。「Mars」モジュールとクラスオブジェクト「Deimos」は、そのまま英単語として通用しますが、ロシア語の「Марс」と「Деймос」の音訳である可能性もあります。

ラテン文字でロシア語を書き表す場合、文字の使い方や置き換え方に普遍的なルールはありません。したがって、この命名スキームは、特定のコンテキスト内で使われる分にはそれほど不自然ではありません。Morphisec 社のセキュリティ研究者も、Jupyter モジュールを分析popup_icon し、攻撃者がロシアに拠点を置いている可能性を示唆する同様の証拠を指摘しています。たとえば英語の「Jupiter」のスペルミスである可能性があること、ハードコードされている IP アドレスが、ロシアの ASN「SELECTEL」でホストされていることなどです。これは、攻撃の初期段階において、他のモジュールや Solarmarker の亜種で検出された IP アドレスにも当てはまります。こうしたパターンやその他の状況証拠に注目したくなるところですが、決定的な特徴とは言えないことに留意する必要があります。これらのコンポーネントはどれも、攻撃者が造作なく任意の値に操作できます。他に証拠がなければ、なりすましである可能性があるのです。

まとめ

Solarmarker 攻撃を仕掛ける攻撃者は、中程度から高度な能力を備えています。相互接続された膨大な量のインフラを使い回し、無限にも思えるさまざまな名前の初期ドロッパーファイルを生成するのには、相当な労力が必要です。また、攻撃を継続できるようにするための決断力も発揮しています。Solarmarker の従来のコンポーネントが研究者に公開された後には、C2 インフラのホストを変えるという一般的な戦略を取っただけでなく、Mars DLL の C2 通信の暗号化方式を更新するという決断を下しています。

Solarmarker への感染やデータを盗まれるリスク、感染後にさらなるアクションの被害を受ける可能性を軽減するために、いくつか予防策と修復策を講じることができます。Solarmarker の最初の実行ファイルは、ユーザが親ファイルを自らダウンロードして開かない限り実行されません。組織は、インターネット上の未確認のソースや疑わしいソースからファイルをダウンロードして実行することにはリスクがあるということを、ユーザに教育する必要があります。

このマルウェアについては、積極的な防御策を講じれば効果が出やすい面もあります。管理ツール(今回の場合は PowerShell)の使用を制限すれば、Solarmarker の多くのスクリプトの実行を防止できます。確認されている Solarmarker の C2 コンポーネントは、それぞれの DLL にハードコードされています。C2 の IP アドレスまたはドメイン名へのトラフィックをモニタリングすれば、ネットワーク上の感染したエンドポイントと、感染の進行状況を把握できます。それらの IP アドレスおよびドメイン名との間のトラフィックをどちらもブロックすれば、Solarmarker が攻撃者からさらに指示を受け、収集したデータを感染したホストから流出させるのを効果的に防ぐことができます。多要素認証を使用すれば、個人情報やログイン情報がすでに盗まれたと考えられる場合でも、アカウントがすぐに侵害されてしまうのを防ぐことができます。また、影響を受けるアカウントのログイン情報を変更する時間を稼ぐこともできます。さらに、機密性の高いシステムを適切にセグメント化し、適切な権限要件を設定し、インターネットに不必要に接続しないようにすることで、攻撃者が盗んだログイン情報を利用してラテラルムーブメントを行ったり C2 サーバにデータを流出させたりするのを防止できます。

Solarmarker については、今も続く攻撃のほか、関連するマルウェアファミリについても懸念されます。Solarmarker は、ある程度検知をすり抜けながら、かなりの時間をかけて進化してきました。攻撃者の C2 から PowerShell コマンドを実行できるだけでなく、追加のファイルの受信やドロップが可能です。これにより、子モジュールを今後更新したり進化させたりすることができるほか、新たに悪意のあるコンポーネントを開発して機能を追加することも可能になっています。Talos は、Solarmarker を仕掛ける攻撃者が現在の攻撃を長引かせるため、マルウェアとツールを改良し続け、C2 インフラを更改していくだろうと予想しています。前述したとおり、Solarmarker を展開する攻撃者は、これまで繰り返してきた攻撃が露見したポイントを踏まえ、戦術、手法、手順(TTP)を更新するという積極性と能力をすでに発揮しています。

カバレッジ

お客様がこの脅威を検出してブロックするための方法を以下に記載します。

Cisco Secure Endpoint は、この記事で説明したマルウェアの実行を阻止するのに最適です。新規ユーザの方は、こちらからpopup_icon Cisco Secure Endpoint を無料でお試しいただけます。

Cisco Secure Web Appliance の Web スキャンは、悪意のある Web サイトへのアクセスを防止し、上述したような攻撃で使用されるマルウェアを検出します。

Cisco Secure FirewallMeraki MX を使用すれば、この脅威に関連する悪意のあるアクティビティを検出できます。

Cisco Secure Malware Analytics は、悪意のあるバイナリを特定し、シスコのすべてのセキュリティ製品に保護機能を組み込みます。

Cisco Umbrellapopup_icon(シスコのセキュア インターネット ゲートウェイ(SIG))は、社内ネットワークの内外で悪意のあるドメイン、IP、URL への接続をブロックします。

特定の環境および脅威データに対する追加の保護機能は、Cisco Secure Firewall Management Center から入手できます。

オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.orgpopup_icon で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。

この脅威と、攻撃に関連するツールやマルウェアを検出するために、次の ClamAV シグネチャがリリースされています。

Win.Trojan.Solarmarker-9832983-0
Win.Dropper.SolarMarker-9867952-0
Win.Trojan.Jupiter-9858780-0

オープンソースの Snort サブスクライバルールセットをお使いであれば、Snort.orgpopup_icon で購入可能な最新のルールパックをダウンロードすることで、最新状態を維持できます。

この脅威を検出する目的でリリースされた SID は、57973 および 57974 です。

Cisco Secure Endpoint(AMP)をお使いであれば、Orbital Advanced Searchpopup_icon を使用して複雑な OSquery を実行することによって、エンドポイントが特定の脅威に感染しているかどうかをご確認いただけます。類似の脅威に対応する osquery の具体例については、こちらpopup_iconをクリックしてください。

IOC(侵入の痕跡)

IP:

45.135.232[.]131
46.102.152[.]102

ホスト名:

hxxp://on-offtrack[.]biz/get/uran.ps1
hxxp://spacetruck[.]biz:82
hxxp://vincentolife[.]com

SHA256:

99e5a83a5f8e9fb7850922aed9a44bbc2b2a03f5fdda215db4d375bd1952536d – 親ドロッパー
3b79aab07b9461a9d4f3c579555ee024888abcda4f5cc23eac5236a56bf740c7 – 親ドロッパー
77fa1b6fc7f192b0c983d1f8ecc73effae4f688a49439a7df27e76cfba870d23 – 親ドロッパー
032b09bbf1c63afc06afb011d69bafc096d7d925d99e24e3785db5a2957358ec – 親ドロッパー
a871b7708b7dc1eb6fd959946a882a5af7dafc5ac135ac840cfbb60816024933 – 親ドロッパー
187e204c5c30b9b56ccc82df510c4c215cdfd37b475d1edba9a0631a4d82ae2e – 親ドロッパー
1252f2bf3817714a8303f7e448930d6d4f797a70ec7effc80f2b1db5e49b9077 – 親ドロッパー
7240e51c027e498e71da4006e261409fcf3a5cf5b912d493a9da91199c840059 – 親ドロッパー
3039dddbcfb26326ba2e8692316ca674753fa6e1d141c887dc1e9f1ae546ca17 – 第 2 ステージドロッパー「pk.exe」
056f373077ca5b6a070975b22839d6f427cbcaeaec4dc31df86231cd3757f7e3 – Mars DLL
10fc8f8cf1b45a6a6b2b929414a84fc513f80d31b988c3d70f9a21968e943bf2 – Mars DLL
1bd39e3ee0d59ac691cc644c026b6c5bb3d0713f6e4e2136b94f161558a4444f – Mars DLL
e7d165f3728b96921b43984733a92a51148ec87aec900c519a547c470e2a12d9 – Mars DLL
eebaec0f28addac39549ebf9be659e105046b1c9801381d4c4dd07cfc74d25d6 – Mars DLL
870f691ec9a83e9c4acce142e0acbf110260e6c8e707410c23c02076244f3973 – Mars DLL
573631c92d34e7ca2dfc1a590606bd66194d517f8d97dd319169262ac46b3e2e – Mars DLL 構築用 PS1 スクリプト
b29e6b570a96224c874b9fae36b65db9e9b8c6e1081f18cf87e56bd996470c22 – Mars DLL 構築用 PS1 スクリプト
0a11002a0f390fb6e4933fead0521032f8a9ede7ced27f75011d8a30c5772376 – Uran DLL
721bb4554f8e6615dd9e10e28765cf42882c00e1d04f808d8f766b51fdf4d7e6 – Uran 構築用 PS1 スクリプト
83b50b18ebfa4402b2c0d2d166565ee90202f080d903fd15cccd1312446a636e – おとりプログラム「PDFSam」(「CMmnnjAi1984unbd.exe」および「gkNjg0918jkd.exe」)

 

本稿は 2021 年 07 月 29 日に Talos Grouppopup_icon のブログに投稿された「Threat Spotlight: Solarmarkerpopup_icon」の抄訳です。

 

コメントを書く