2025年4月4日(金)

SharpRhino: 古くて新しい脅威

概要

  • SharpRhino は、オープンソースプロジェクトThunderShell がベースになっています
  • PowerShell スクリプトをドロップする NSIS インストーラとして、被害者にデリバリーされます
  • PowerShell スクリプトはエンコードされた .NET アセンブリを含みます
  • C2 サーバーとの通信には.NETペイロードを使います
  • コマンドをリモートで実行することが可能です
  • ネットワークトラフィックは RC4 で暗号化され、Base64 形式でエンコードされます

はじめに

ransomware-as-a-service を展開していることで知られている脅威グループの Hunters International が、新しい RAT マルウェアを使い始めています。このソフトウェアを利用した最初のインシデントは、2024 年 8 月初旬に確認され、C# 言語によるものであることから、SharpRhino と名付けられました。トロイの木馬が、合法的なソフトウェアとして被害者に配信され、被害者のコンピューターへのリモートアクセスを可能にします。このソフトウェアを使用することにより、攻撃者はさまざまなコマンドを実行し、他のマルウェアを伝播させることができます。

技術情報

概要

解析されたサンプルは、Nullsoft Scriptable Install System で構築されたインストーラとして、被害者に配信されています。このファイルは、説明に「Angryip.org」と書かれており、有効なデジタル証明書を有していますが、会社名は偽のものであり、その会社は存在していません。

Acronis

 このインストーラには、マルウェアの実行時に使用される、追加のインストーラ、パスワードで保護されたアーカイブ、および追加のファイルが含まれています。

Acronis

インストール

実行されると、サンプルは、すべての埋め込みファイルを「C:\ProgramData\Microsoft\WindowsUpdate24」フォルダにドロップし、正規のソフトウェアである Angry IP Scanner のインストーラである、「ipscan-3.9.1-setup.exe」ファイルが実行されます。

Acronis

ユーザーがこのインストーラに気を取られているあいだに、マルウェアが、パスワードで保護されたアーカイブである UpdateFull.zip からファイルを抽出します。そのあと、SharpRhino はアーカイブを展開するために、埋め込まれていた 7za.exe プログラムを使用します。コマンドラインに、以下のようなアーカイブのパスワードが表示されます。

C:\ProgramData\Microsoft\WindowsUpdate24\7za.exe x C:\ProgramData\Microsoft\WindowsUpdate24\UpdateFull.7z -pTG98HJerxsdqWE45 -oC:\ProgramData\Microsoft\WindowsUpdate24

アーカイブの中身は、以下のとおりです。

Acronis

ファイルの抽出後に、サンプルは新しいフォルダ「C:\ProgramData\Microsoft\LogUpdateWindows」を作成し、アーカイブから抽出したファイルを新しいフォルダにコピーします。2 つの異なるインストールフォルダを使用することにより、フォルダの 1 つが削除された場合でも、これら 2 つのフォルダにあるファイルの実行プロセスが類似しているため、攻撃者はもう 1 つシステムに長く存続できるようになります。次に、SharpRhino は、「Microsoft.AnyKey.lnk」ファイルにつながる「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run」パスに、新しいレジストリキーを追加します。このファイルはショートカットであり、以下のターゲットを含んでいます。

C:\ProgramData\Microsoft\LogUpdateWindows\Microsoft.AnyKey.exe abnormal c:\programdata\%username%0 cmd /c C:\ProgramData\Microsoft\LogUpdateWindows\LogUpdate.bat

「Microsoft.AnyKey.exe」も、アーカイブからドロップされた実行ファイルです。Visual Studio 用 Node.js ツールに含まれている真正なプログラムでもあり、「Microsoft.NodejsTools.PressAnyKey.exe」という名前が付けられています。

実行

「LogUpdate.bat」および「WindowsUpdate.bat」ファイルは同じ機能を持っていますが、異なったファイルをロードします。

Acronis

「Wiaphoh7um.t」および 「kautix2aeX.t」ファイルの両方には、難読化されたデータが含まれています。これらのファイルは生データとキーが異なっていますが、結果として生成されるデータは同じになります。デコード処理後、サンプルはこのデータを .NET アセンブリとして定義し、いくつかのパラメータを使って、1 つの方法を呼び出します。

Acronis

スクリプトからすべてのデータをダンプした後には、次の変数が確認できます。

$var1、$var2、$var3 変数は、参照アセンブリを決定するもので、連結すると次の文字列を形成します。

 System.Drawing.dllSystem.Web.Extensions.dllSystem.Windows.Forms.dll

$var4 はファイルごとに異なっており、C2 サーバーアドレスを含んでいます。以下の表は、各ファイルにおいて .NET アセンブリ呼び出して使用される引数を示しています。

 
Wiaphoh7um.t
kautix2aeX.t
C2 アドレス
https://cdn-server-2.wesoc40288.workers.dev
https://cdn-server-1.xiren77418.workers.dev
暗号化キー
oTrbUysMzlWZDzmRNhdTKFqf
QQnoZKqtpRUzETVvpRgPRpcN
遅延(ミリ秒)
95000
40000
Acronis

「$fjwZrHB1k2RF」は、メモリにロードされる .NET アセンブリを表します。データのダンプ後には、C# コードを観察できます。PowerShell スクリプトは、「Bzxmlpi」ネームスペースおよび「OyrWkb」クラスから関数を呼び出します。このクラスの開始時には、いくつかの追加のインポートのロードと読み取り不能な変数名を観察することができます。

Acronis

実際には、このファイルはオープンソースプロジェクト「ThunderShell」の改変バージョンです。このソースプロジェクトには、以下のような変更が加えられています。

  •  キーロガー、スクリーンショットおよび .NET アセンブリのロード機能、ならびにこれらの機能を表すサーバーコマンドが削除されています
  •  すべてのクラス、関数、および変数の名前が変更されています
  • 引数なしでペイロードが実行ファイルとして実行された場合に使用される、デフォルト値が追加されています
Acronis
SharpRhino コードと ThunderShell コードの比較

この関数は最初に 16 バイトのランダムな文字列を生成します。Random クラスを初期化するとき、サンプルは現在の日付、時刻および処理 ID をシードとして使用します。次に、COMPUTERNAME、USERDOMAIN および USERNAME などの環境変数を取得します。これらのデータは、以下のようにすべてフォーマットされます。

Acronis

その結果、次の文字列が生成されます。

Acronis

次に、サンプルはこの文字列を関数に送り、文字列はサーバーに送信されます。このとき、サンプルは 2 番目の引数として渡されたキーを持つ、RC4 暗号を使用してデータを暗号化します。

Acronis
RC4 暗号化ルーチン

暗号化処理後、サンプルは要求にいくつかのデータを追加し、暗号化された文字列も Base64 形式でエンコードします。その後、すべてのデータがサーバーに送られます。

Acronis

最初の接続では、サーバーからの応答は無視されます。ループに入ると、サンプルは再びサーバーに接続されますが、どちらの引数も「null」となります。次に、応答が保存され、保存されている値と比較されます。「delay」コマンドが受信されると、サンプルは追加の引数を取り、スリープ関数に渡される値が変更されます。「exit」コマンドが取得された場合、ループが中断され、実行が終了します。「delay」 または 「exit」 以外のコマンドを取得した場合、サンプルは、取得したデータを引数として取る関数を使って、新しいスレッドを作成します。これらのアクションは、ループのイテレーションから 95 秒遅れで繰り返されます。

Acronis

サーバーからの応答は、「UUID」、「ID」、「Data」などのデータを取得および保管している、「zWxFlnVASjHYb」クラスにある、逆シリアル化関数に渡されます。

Acronis

C2 サーバー

サンプルにあるリンクはすでにオフラインになっていましたが、ソースプロジェクトのサーバーを使用することで、通信がどのように行われているのかは見ることができます。最初に、サーバーの構成を変更する必要があります。これには、サーバーの IP アドレス、暗号化キー、GUI 設定、HTTP および HTTPS の設定などの、いくつかのフィールドが含まれています。次に、「callback-url」、「gui-host」および「encryption-key」パラメータを変更する必要があります。SharpRhino サンプルから、暗号化キーのパラメータを取得します。

Acronis

サーバーは Python アプリケーションであり、実行中の Redis サーバーが必要となります。起動後、サンプルはサーバーについての情報を出力します。

Acronis

これには Web GUI アドレスが含まれています。サンプルを開くとき、ユーザーは最初にログインしなければなりません。インプットするユーザー名はどのようなものでもかまいませんが、パスワードは構成ファイルのものを使用しなければなりません。ログインすると、ダッシュボードセクションが表示されます。これには、セッションとログについての情報が含まれています。

Acronis

ペイロードは、Web GUI で構築することができます。サーバーの IP アドレスとともに、ペイロードのタイプを指定しなければなりません。

Acronis

セッションを選択すると、攻撃者はそのセッションとインタラクトすることができます。「help」と入力すると、セッション内で使用できる、すべての対応コマンドが表示されます。

Acronis

C2 コミュニケーション

これらのコマンドには、攻撃者が引数として入力するデータに追加される、事前定義済みの文字列が含まれています。たとえば、「shell [command]」を使用すると、送信される文字列の先頭に「cmd.exe /c」が追加されます。別の例としては、PowerShell スクリプトをクライアントに送信する、「ps」コマンドがあります。

Acronis

このコマンドは、RC4 で暗号化され、Base64 形式でエンコードされたクライアントに適用されます。これには、ID と UUID という 2 つのパラメータが含まれており、ID はクライアント ID、UUID はコマンド ID となります。

Acronis

このデータはすべて、新しいスレッドに渡されます。このスレッドの関数は PowerShell モジュールを使って、所定のコマンドを実行します。

Acronis

パイプラインを使用することにより、サンプルは実行されたコマンドのアウトプットを利用できるようになります。その後、データは暗号化され、サーバーに送り返されます。

Acronis

結論

最後にアップデートされたのが約4年前という古いオープンソースプロジェクトである ThunderShell を Hunters International が使用して、被害者にマルウェアを配信しました。ThunderShell は、Angry IP Scanner ユーティリティのインストーラとして配信され、悪意のある PowerShell スクリプトをドロップし、実行します。これらのスクリプトは、PowerShell の機能を使ってエンコードされた .NET アセンブリを実行するためコンパイルされた、追加の実行ファイルを配信する必要はなく、悪意のあるコードがメモリ内に呼び出され、実行されます。

オリジナルコードは変更されていますが、ターゲットのシステムでコマンドをリモートで実行するという、その主な機能は維持されています。これが、オープンソースプロジェクトが危険である理由です。これらは通常、教育やペンテストのために開発されているものですが、実際の攻撃にも使用されています。

Acronis による検出

Acronis
Acronis

IoC

ファイル

ファイル名    
SHA256
ipscan-3.9.1-setup.exe
09b5e780227caa97a042be17450ead0242fd7f58f513158e26678c811d67e264
kautix2aeX.t
9a8967e9e5ed4ed99874bfed58dea8fa7d12c53f7521370b8476d8783ebe5021
LogUpdate.bat
d2e7729c64c0dac2309916ce95f6a8253ca7f3c7a2b92b452e7cfb69a601fbf6
UpdateFull.7z
fe07d238cd17be4b5f8396a27dc395e675732be17aed103033fff56c18009e6d
Wiaphoh7um.t
3f1443be65525bd71d13341017e469c3e124e6f06b09ae4da67fdeaa6b6c38
WindowsUpdate.b
b57ec2ea899a92598e8ea492945f8f834dd9911cff425abf6d48c660e747d722

ネットワークインジケータ

URL
https://cdn-server-1.xiren77418.workers.dev
https://cdn-server-2.wesoc40288.workers.dev