This post is also available in: English (英語)

概要

Unit 42のリサーチャーは、ビジネスメール詐欺(BEC: Business Email Compromise)フィッシングメールを介してインフォスティーラー(情報窃取型マルウェア)のLokiBotを配信しているマルウェア配信キャンペーンを発見しました。このマルウェアは被害者のシステムからパスワードや銀行情報などの機微情報を盗み出すように設計されています。

本稿は、攻撃者がどのように無害に見える電子メールを使って被害者を罠にかけ、添付ファイルを開かせるかを説明します。この添付ファイルにはLokiBotというインフォスティーラーが含まれていました。

このLokiBotのサンプルがどのように難読化・永続化のしくみを使って検出を回避するか、その技術的詳細を解説し、さらに、C2(コマンド&コントロール)チャネルの通信についても説明します。また、同マルウェアがデータ窃取の対象とするアプリケーションをリストアップします。

さらに、本稿の付録では、HTTPベースのC2通信における各データバイトについて、その具体的な目的を詳しく説明します。この付録では、データ バイトの構造がどのようになっているかを把握できます。

パロアルトネットワークスのお客様は、以下の方法でLokiBotの情報窃取用C2通信からの保護と緩和を受けることができます。

関連するUnit 42のトピック LokiBot

はじめに

LokiBot (Loki-bot、Loki PWSとも呼ばれる)は、悪名高いインフォスティーラー(情報窃取型マルウェア)で、Webブラウザや電子メールクライアント、FTPサーバー、暗号ウォレットから機微データを収集し、攻撃者がコントロールするマシンにHTTP POST経由で情報をアップロードします。

またこのマルウェアは、感染ホストにバックドアを作成し、攻撃者が追加で悪意のあるソフトウェアをインストールできるようにする場合もあります。LokiBotは2015年に初めて確認され、その後複数のセキュリティ侵害で利用されていますが、つねに進化していることから封じ込めや防御の難しいマルウェアです。

2022年末の休暇シーズン、私たちUnit 42リサーチャーは、自社の機械学習ベースのC2検出ソリューションが、特定のHTTPペイロードを「malicious (悪意がある)」と識別したことに気づきました。そのトラフィック パターンを分析したところ、LokiBot感染に由来することがわかりました。

このマルウェアを配信した攻撃ベクトルとネットワーク トラフィック アクティビティをさらに調べた結果、もとになった電子メールが見つかりました。このメールにはZIPファイルが1つ添付されていて、そのなかに、あるISOファイルが含まれていました。最終ペイロードはこのISOファイルのなかに入っていました。

今回のLokiBotマルウェア配信試行は、あるBECキャンペーンと強い結びつきがあることがわかりました。BECでは電子メールへの不正アクセスと金銭詐取が行われます。現在もっとも普及しているサイバー攻撃形態の1つで、その被害額は甚大です。 

BECの兆候には、不正送金の依頼や顧客企業ドメインから送信されてくるスパムメール、フィッシングメールなどがあげられます。メールシステムに不正アクセスされるので、被害者はメールが消えたり削除されたりしていることに気づく場合もあります。

画像1はLokiBotのサンプルを配信してきたマルスパム メールのスクリーンショットです。個人を特定できる情報はぼかしてあります。メールの言語はトルコ語です。
図1. マルスパムによるLokiBotサンプルの配信

データ収集のさいはThreatFoxなどの脅威インテリジェンス データソースも追加で分析しました。私たちが最初にこのサンプルを検出したとき、LokiBotのアクティビティのIoCが比較的少ないことに気づきました。ただし2022年の年末年始は、12月最後の3日間に発生数のピークがあります。

脅威アクターは、米国などの標的の国の祝日に合わせて攻撃アクティビティを強めることがよくあります。祝日中はセキュリティ担当者が休みを取るのでサイバー攻撃で効果をあげやすいのです。

図2はThreatFoxによるLokiBotのアクティビティ状況を表したものです。

画像2は2022年12月に急増したLokiBotのアクティビティを観測したThreatFoxのデータにもとづくグラフです。
図2. ThreatFoxによるLokiBotのモニタリング(出典: ThreatFox)

LokiBotマルウェアの解析

第1ステージ

ISOファイル形式は、通常は光ディスクのコンテンツをパッケージングするのに使いますが、この事例ではLokiBotマルウェアの配信に使われています。攻撃者たちはこのファイル形式を使うことでマルスパム検出技術を回避しようとしています。通常、マルウェア感染チェーンにはEXEファイル、DLLファイル、MS Officeファイルなどのファイル形式が使われることが多く、そのためマルスパム検出技術側も、これらのファイル形式を重点的に検出しているからです。

ISOファイルが攻撃者にとって使いやすい理由はほかにもあります。以前はISOファイルを開くのに特定のソフトウェアが必要でしたが、いまのWindowsにはISOファイルのオープンツールがついているので、ダブルクリックするだけでISOファイルをマウントしたり開いたりできます。被害者から見てこのオープン プロセスは通常のディレクトリにしか見えません。

ローダー

ISOファイルを開くとWindows PEファイル(EXE)にアクセスできますが、このファイルの正体はローダーです。このローダーは難読化された.NETファイルで、プロセスハロウイング技術を使っています。プロセスハロウイングというのは、攻撃者が実行ファイルの正規コード部分を「空洞化(ハロウイング)」させ、空洞化した部分を悪意のあるコードに置き換えるコード インジェクション技術を指します。

この事例ではプロセスの空洞化が利用されていて、aspnet_compiler.exeという正規のプロセスに悪意のあるPEファイルが「注入(インジェクト)」されていました。図3は感染プロセスのメモリーに存在する複数のIoCを示しています。プロセス メモリーからPEをダンプするとLokiBotの最終ペイロードにアクセスできます。

画像3は[Results]ウィンドウ内で感染プロセス メモリー内のIoCを表示したaspnet_compiler.exeのスクリーンショットです。
図3. 感染プロセスには複数のIoCが確認できる

最終ペイロード

難読化

このLokiBotのサンプルが使っているコード難読化技術は「APIのハッシュ化」1つだけです。マルウェア作者らはこの技術を使ってハッシュを計算することでロードしたライブラリからエクスポート関数を取得しています。

このハッシュ関数の実装を複製すれば、当該のライブラリ内で対応するAPIを取得できます。図4はマルウェア サンプルが使っていたAPIハッシュ アルゴリズムのPythonでの実装です。

画像4はマルウェア サンプルが使っていたPython APIのハッシュ化アルゴリズムで、多数のコード行が表示されています。
図4. APIハッシュ化アルゴリズム

スティーラーの主な機能

このサンプルのmain関数は101個の要素からなる2つの配列を作成します。1つめの配列にはインデックスが、2つめの配列には関数へのポインタが格納されています。後者がスティーラー関数です。

これらの関数は、Windowsオペレーティング システム上のさまざまな種類のアプリケーション・サービスから、クレデンシャル(認証情報)を盗むために作られています。

  • Webブラウザー: Safari、Internet Explorer、Firefox、Chromiumベースのブラウザー
  • FTP/SSHのアプリケーションとクライアント
  • バックアップ アプリケーション
  • メール アプリケーション
  • ノート アプリケーション
  • ポーカー アプリケーション
  • パスワード管理ソフト
  • Windowsの認証情報

LokiBotのmain関数は、これらのスティーラー関数をループで実行します(図5)。

画像5はLokiBotがスティーラー関数をループで実行しているようすを表す多数のコード行のスクリーンショットです。
図5. main関数でスティーラー関数の実行をループ

インストールされたソフトウェアから収集・抽出されたすべてのクレデンシャルは、 aPLibアルゴリズムで圧縮され、HTTPプロトコルのPOSTメソッドでC2サーバーに送信されます。この件は「HTTPによるC2通信」のセクションで詳述します。

永続化

このマルウェアはMoveFileExWCopyFileW Windows API経由で%APPDATA%ディレクトリ内の新しいフォルダに自身のコピーを保存するところから標的ホスト上での永続性の確立処理を始め、次にレジストリ キーHKCU\Software\Microsoft\Windows\CurrentVersion\Runに新たな値を作成・設定します。この値にはさきほど作成した新しいフォルダと同じ名前が付けられ、コピーされた実行ファイルのパスが値として設定されます。

HTTPによるC2通信

LokiBotはHTTPプロトコル経由でC2に情報を漏出させます。この情報にはボットのバージョン番号(1.8)が含まれていて、この番号はHTTPペイロードの2バイトで確認できます。このほか、User-Agentが含まれていて、これは「Mozilla/4.08 (Charon; Inferno)」に設定されています。また、Content-KeyというカスタムHTTPヘッダーを含んでいますが、このヘッダーにはHTTPヘッダーから生成したハッシュに相当する値が設定されています。

図6は、HTTP POSTリクエストとそのレスポンスを表すメッセージボディで、このメッセージ ボディ内に漏出した情報が含まれています(フィールドごとに色を変えて表示しています)。それぞれのフィールドのオフセットとサイズも含めておきますので、同マルウェアの使うデータ構造を視覚的に把握したり、どのようなフィールドが対象かを相互参照するさいはこちらを確認してください。

画像6は、Wiresharkのスクリーンショットです。メッセージ ボディには、漏出した情報を多数の色で色分けして表示しています。
図6. HTTP POSTリクエストの内容。オフセット2、サイズ2の水色で示したフィールドの「27」は「データ漏出」を表す種類コード

HTTPボディ(ペイロード)の各データ フィールド(オフセット、サイズ)の一覧は付録セクションを参照してください。

ほかのインフォスティーラーと同様にLokiBotは以下の情報を検索して漏出させます。

  • オペレーティング システムのアーキテクチャ
  • ビルトインAdministrator
  • ドメイン ホスト名
  • ホスト名
  • ローカルAdministrator
  • オペレーティング システム
  • 画面解像度
  • ユーザー名情報

LokiBot特有の漏出データには以下が含まれます。

  • 一意なキー。ランダムに生成した5文字を含む識別子
  • バイナリID。ckav[.]ruなど、LokiBot感染で多用されるドメインを表す
  • ミューテックス値。マシンのGUIDをMD5アルゴリズムでハッシュ化したもので24文字の長さの文字列
  • 潜在的な隠しファイル(例:%APPDATA%\\079D53\\3AFB91.hdb)。ミューテックス値から取得。ディレクトリ名は8〜13バイトの文字、ファイル名は13〜18バイトの文字で構成
    • ハッシュ データベース(.hdb)
    • キーロガー データベース(.kdb)
    • ロック ファイル(.lck)
    • マルウェアの実行ファイル(.exe)

またこのボットではさまざまな種類のペイロード(HTTPボディの3バイト目と4バイト目で指定)を使います。ペイロードの種類は次の通りです。

  • 0x27: 窃取したアプリケーションやクレデンシャル データを漏出
  • 0x28: C2サーバーからC2コマンドを取得
  • 0x2B: キーロガー データを漏出

ほかのバージョンのLokiBotマルウェアファミリーでは最終アクションに応じて以下を含むペイロード種類も追加で利用できます。

  • 0x26: 暗号通貨ウォレットの漏出
  • 0x29: ファイルの漏出
  • 0x2a: PoS データの漏出
  • 0x2c: スクリーンショット データの漏出

結論

LokiBotマルウェアは長年攻撃者に利用されていてバージョンが複数存在します。同マルウェアの挙動の変化をつねに監視して必要な防御策を追加していくことは、どのセキュリティチームにとっても大変な労力を必要とします。

高度な脅威防御に組み込まれている弊社の機械学習ベースのC2検出ソリューションは、悪意のあるC2アクティビティをインラインで検出して阻止します。この機械学習モデルは各種マルウェアの最新C2通信に対応して定期的に更新されます。これにより、検出機能がつねに最新の状態に保たれ、進化し続ける攻撃アクターからの脅威に対抗できます。

本調査ではUnit 42チームのDoel Santos氏、Nina Smith氏に協力をいただきました。ありがとうございました。

パロアルトネットワークスのお客様は、以下の方法でLokiBotの情報窃取用C2通信からの保護と緩和を受けることができます。

私たちは、これまで何百件ものビジネスメール詐欺(BEC)インシデント対応経験でつちかった知識をBEC Readiness Assessment (BEC対応力評価)サービスに総括しています。本サービスは、組織のプロセスや技術を強化することで、本稿で述べた脅威のような、さまざまな脅威への対策を組織が取りやすくすることを目的としています。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、infojapan@paloaltonetworks.com までメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • 欧州: +31.20.299.3130
  • アジア太平洋: +65.6983.8730
  • 日本: +81.50.1790.0200

パロアルトネットワークスはファイルサンプルや侵害の兆候などをふくむこれらの調査結果をCyber Threat Alliance (CTA) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使用して、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細についてはCyber Threat Allianceにてご確認ください。

IoC

サンプル

  • ZIPファイル: 4edd01345f58b9cc04a88ca15d6b82895f44f5b9cb51ad63b809de09029670ac
  • ISO: 8a5a024272361bb1ae12860c033bb52685d7b0ea3bce5fac46439f3f3ad36a84
  • ローダー: 1b574a66c84924886daec4841e1b107258e019aaf6f336329ae8fae7cbd52a34

インフラ

  • efvsx[.]gq
  • 188.114.96[.]13

追加リソース

付録

フィールドの説明 オフセット サイズ
LokiBotバージョン 0x0 0x2
ペイロードの種類 0x2 0x2
Binary IDのUnicode 0x4 0x2
Binary IDの長さ 0x6 0x4
Binary IDの文字列 0xa 0x7
ユーザー名のUnicode 0x11 0x2
ユーザー名の長さ 0x13 0x4
ユーザー名の文字列 0x17 0x12
ホスト名のUnicode 0x29 0x2
ホスト名の長さ 0x2b 0x4
ホスト名の文字列 0x2f 0x16
ドメイン ホスト名のUnicode 0x45 0x2
ドメイン ホスト名の長さ 0x47 0x4
ドメイン ホスト名の文字列 0x4b 0x16
画面解像度 (幅) 0x61 0x4
画面解像度 (高さ) 0x65 0x4
ローカルAdministrator 0x69 0x2
ビルトインAdministrator 0x6b 0x2
64ビット オペレーティング システム 0x6d 0x2
オペレーティング システムのメジャーバージョン 0x6f 0x2
オペレーティング システムのマイナーバージョン 0x71 0x2
Enlarged Image