マルウェア

求職戦線異状あり: 北朝鮮の国家支援型 APT 脅威アクターの特徴をもつ 2 つの求人・求職ハック キャンペーン

Clock Icon 6 min read

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

概要

Unit 42 のリサーチャーは最近、北朝鮮 (朝鮮民主主義人民共和国 DPRK) に紐づく国家支援型脅威アクターが関与した、求職活動を標的とする 2 つの別々のキャンペーンを発見しました。私たちは 1 つめのキャンペーンを「Contagious Interview (感染面接) 」と呼んでいます。このキャンペーンでは、脅威アクターが (多くの場合匿名または曖昧な身元で) 雇用者を装い、面接過程でソフトウェア開発者にマルウェアをインストールするようにしむけます。このマルウェアは、さまざまな種類の窃取の可能性を生み出します。私たちは、Contagious Interview が北朝鮮の国家支援型脅威アクターにより運営されていると、中程度の確度でアトリビュート (帰属) しています。

私たちは、2 つめのキャンペーンを「Wagemole (賃金+スパイ)」と呼んでいます。このキャンペーンは、脅威アクターが米国やそのほかの地域を拠点とする組織での雇用を不正に求めるもので、金銭的利益とスパイ活動の両方を狙うものです。私たちは、Wagemole が北朝鮮の国家支援型脅威であると、高い確度でアトリビュートしています。両キャンペーンからのアクティビティは、今現在も活発な脅威です。

架空の面接を通じてソフトウェア開発者をマルウェアに感染させようとすることから、私たちは最初のキャンペーンを「Contagious Interview (感染面接)」と名付けました。もともと私たちは、顧客環境からのテレメトリーで Contagious Interview を発見しました。私たちの調査によれば、 Contagious Interview は少なくとも 2022 年 12 月には始まっていました。このキャンペーンを支えるインフラの一部は今もアクティブで、このアクティビティは一貫して脅威であり続けています。最初のキャンペーンの目的は、暗号通貨の窃取と、侵害した標的を追加攻撃用のステージング環境として利用することだと思われます。私たちは Contagious Interview を CL-STA-0240 として追跡しています。

Contagious Interview のインジケーター (指標) を軸に、私たちは別の脅威アクターが管理するインフラ上に露出しているファイルを発見しました。これらのファイルは多種多様な米国 (US) 企業をターゲットとする不正な求職活動を示すもので、さまざまな技術スキルの履歴書と、いろいろな国の人物になりすました複数の身分証のほか、一般的な面接の問答集、面接用の台本、米国企業の求人情報をダウンロードしたものも含まれていました。私たちはこちらのキャンペーンを「Wagemole (賃金スパイ)」と呼び、CL-STA-0241として追跡しています。

このキャンペーンの目的を断定することはできませんが、米司法省と連邦捜査局 (FBI) は、北朝鮮がリモートワーカーを使って賃金を兵器プログラムに流用していると報告しています。

Contagious Interview の調査中、私たちは 2 つの新しいマルウェア ファミリーを発見し、これらを BeaverTail、InvisibleFerret と名付けました。BeaverTail は、Node Package Manager (NPM) パッケージ内に隠された JavaScript ベースのマルウェアです。InvisibleFerret はシンプルですが強力な Python ベースのバックドアです。どちらも Windows、Linux、macOS 上で動作するクロスプラットフォーム型マルウェアです。

本稿では、これら 2 つのキャンペーンの概要を説明し、 2 つの新しいマルウェア ファミリー、BeaverTail と InvisibleFerret を検証します。

本稿はまた、これらの脅威アクターが自らの目的達成のために、どのように就職活動を行い、同時に求職者らをターゲットにしているかについての洞察を提供します。以下、リモートワークの面接や応募にさいし、求職者、雇用者の双方が考慮すべき推奨事項を提供します。

例:

  • 会社支給のコンピューターを個人の活動に使わないようにしましょう。
  • リポジトリー数やアップデートの少ない GitHub アカウントには用心しましょう。
  • 応募先企業が正規の企業かどうかを確認しましょう。
  • 求職者の身元を徹底的に調査しましょう。

パロアルトネットワークスのお客様は、Advanced WildFireDNS SecurityAdvanced URL Filtering などのクラウド配信型セキュリティサービスを有効にした次世代ファイアウォール (NGFW) により、本稿で取り上げたマルウェアからの保護を受けています。

関連する Unit 42 のトピック APT, Contagious Interview, DPRKNorth Korea, Wagemole, Invisible Ferret, BeaverTail

CL-STA-0240: Contagious Interview (感染面接)

自社のテレメトリーを調査中、私たちはこれまで確認されていなかったマルウェア サンプルに関わる不審なアクティビティを発見しました。これは 2023 年 3 月時点にはすでにアクティブで、その後の調査から 2 つの新しいマルウェア ファミリーが発見されました。このキャンペーンで使われた手口は、アトリビューション (帰属) のセクションでも述べている通り、以前に報告された北朝鮮系脅威アクターによるアクティビティと合致していました。私たちはこのキャンペーンを「Contagious Interview (CL-STA-0240)」として追跡しています。同キャンペーンのインフラは 2022 年 12 月時点ですでに確立されていました。

CL-STA-0240 の背後にいる脅威アクターは、求職プラットフォーム上の広告を通じ、見込み雇用者を装ってソフトウェア開発者を狙います。同キャンペーンに関連づけられた広告は、匿名だったり意図的に曖昧にしてあったりすることが多く、雇用者が誰なのかを示す指標がありません。同キャンペーンに関連するマルウェアのファイル名の一部からすると、この脅威アクターは、正規の AI・暗号通貨・NFT 関連企業や人材紹介会社になりすましている可能性もあると考えられます。ほかの脅威アクターと同様に、この脅威アクターも、電子メール、ソーシャルメディア プラットフォーム、ソフトウェア開発者が使うコミュニティ フォーラムのチャット チャンネルを通じ、潜在的被害者に接触する可能性があります。

連絡を取り合った後、脅威アクターは被害者をオンライン面接に招きます。脅威アクターは、この面接にビデオ会議やそのほかのオンライン コラボレーション ツールを使うものと思われます。

面接中、この脅威アクターは被害者に GitHub でホストされているある NPM ベースのパッケージをダウンロード・インストールするよう説得します。脅威アクターはこのパッケージをレビューないし分析対象のソフトウェアとして被害者に提示しているようですが、実際には被害者のホストをバックドア型マルウェアに感染させるための悪意のある JavaScript が含まれています。

図 1 は CL-STA-0240 のイベント チェーンをまとめたものです。

画像 1 は CL-STA-0240 の攻撃チェーンです。脅威アクターが潜在的雇用者を装います。被害者はオンラインで就職面接を受けます。被害者は GitHub から悪意のある npm パッケージをダウンロードします。被害者が悪意のある npm パッケージをインストールします。npm パッケージがバックドア型マルウェアを取得して実行します。バックドア型マルウェアは、被害者のホストへのアクセスを確立します。
図 1. CL-STA-0240 攻撃のイベント チェーン (単純化したもの)

このイベント チェーンへの理解を深めるには、まず脅威アクターがこのキャンペーンで GitHub をどのように悪用したかを理解する必要があります。

Contagious Interview による GitHub 悪用

ソフトウェア開発者のためのコラボレーション空間として設計された GitHub は、基本サービス オプションが無料なので、多くの開発者にとって魅力的です。これはまた、 GitHub を犯罪者にとっても魅力的なものにしています。Contagious Interview の背後にいる脅威アクターもまた、 GitHub の無料サービスプランを利用して一見無害なリポジトリーをホストし、これを強力な侵害用ツールとして使う、多くの犯罪者らのひとりです。

Contagious Interview の背後にいる脅威アクターは、 さまざまな ID を作成して GitHub リポジトリーをホストすることで、対象被害者の信頼を得るためのインフラを構築していました。ですがよく調べてみると、これらの GitHub のリポジトリーは当初の見立てほど信頼できるものではないことがわかります。

Contagious Interview が使っている無料 GitHub アカウントはリポジトリーが 1 つしかなく、そのリポジトリーには更新がありません。

調査中に見つけた不審なリポジトリーをさらに調査したところ、最初の評価を追認できました。GitHub リポジトリーの Issues セクションがヒントをくれることがよくあります。

図 2 は、Contagious Interview が使っているリポジトリーの Issues セクションのコメントです。react-ecommerce という名前のリポジトリーは、brainjobs35 という GitHub ユーザー アカウントによって開設されています。このリポジトリーとアカウントはすでに活動していません。

画像 2 は、brainjobs35 の react-ecommerce の GitHub ユーザー コメント ページのスクリーンショットです。Milagro Martinez #1. これはユーザー watasm とユーザー 0xpaluco の会話です。ここでは Milagroについて、またコードの作者がどうしたら見つかるかを議論しています。
図 2. 不審な GitHub リポジトリーの Issues セクションのユーザー コメント

GitHub の Insights 機能もヒントになります。下の図 3 は、Contagious Interview キャンペーンに関連する ServiceWorker.js という悪意のあるファイルについて、GitHub ユーザーが Insights 機能を通じてコメントしているようすです。

画像 3 は、Virus Alert #1 に対する GitHub ユーザーのコメント ページのスクリーンショットです。Toufique-imam は、このリポジトリーは詐欺であるとコメントし、ほかのユーザーの安全のために注意を促しています。これらのコメントへの返信として、Xeth4rth というユーザーが、このリポジトリーは仕事のオファーとして渡されたものだが、詐欺だと述べています。
図 3. Contagious Interview に関連する GitHub Insights へのコメント

NPM、オープンソース、サプライチェーン攻撃

ソフトウェア開発者は、プロジェクトの効率化のために、よくサードパーティ パッケージやライブラリーを使います。これらはサプライチェーン攻撃の手段を提供します。これらのパッケージの中でも NPM は JavaScript を使う無数のプロジェクトの中心的ハブで、NPM の Web サイトによれば、世界中に 1,700 万人の開発者がいるそうです。

NPM はオープンソースなので、悪意のあるアクターが正規 NPM パッケージに有害なコードをインジェクトして GitHub 経由で配布する方法を見つけやすくなっています。インストールされれば、これらの侵害された NPM パッケージは巧妙なバックドアとして機能し、脅威アクターに標的ネットワークへの不正アクセスを許してしまいます。GitHubPhylum は最近、同様の攻撃を報告しています。

悪意のある NPM パッケージは、脅威アクターが従来の検知技術のほとんどを回避するのに役立ちます:

  • ほとんどの静的解析/動的解析検出エンジンは、NPM パッケージを Node.js のランタイム環境で実行できません (サポート対象外のファイル タイプのため)。
  • リポジトリーをクローンして Node.js コードを実行することは、ほとんどのソフトウェア開発チームで普通に許可している操作のため、これが不審がられることがありません。

このため、こうした NPM パッケージに含まれる悪意のある JavaScript ファイルを、VirusTotal のようなサービスに投稿しても、検出率は低いかゼロになります。

さらに、NPM は複数のオペレーティング システムに簡単にインストールできるので、悪意のある NPM パッケージを配布するにあたり、脅威アクターはアタック サーフェス (攻撃対象領域) を最大化できます。

侵害行為

面接過程で被害者は開発環境を準備します。私たちが調査した攻撃では、ほとんどの開発者が Visual Studio CodeCode Helper のようなプラグイン一式と GitNode.js の拡張機能 を使っていました。これには NPM も含まれます。

これらの基本システム要件が満たされた後、脅威アクターは被害者に対し、 GitHub 上にある正規ソフトウェアを装った悪意のある NPM パッケージをインストールするよう要求します。この悪意のある NPM パッケージには、私たちが BeaverTail と名付けた、新たに発見されたマルウェアの JavaScript が含まれています。

BeaverTail は情報を盗み出し、第 2 段階のペイロードとして追加のマルウェアを取得します。このペイロードは、私たちが InvisibleFerret と名付けたクロスプラットフォームのバックドアです。

次のセクションで、BeaverTail というローダーの分析と洞察を提供します。

BeaverTail の分析

NPM パッケージ内で JavaScript として配布される BeaverTail は 2 つの役割を果たします。

  • インフォスティーラー
  • ローダー

インフォスティーラーとしての BeaverTail は、被害者の Web ブラウザーに保存されている暗号通貨ウォレットやクレジット カード情報を狙います。ローダーとしての BeaverTail は、第 2 段階のマルウェアである InvisibleFerret を取得して実行します。

NPM パッケージ内の BeaverTail JavaScript ファイルは、検出回避のため、高度に難読化されています。脅威アクターは、悪意のある NPM パッケージ全体を GitHub にアップロードすることもあれば、ほかの開発者の正当な NPM プロジェクトに BeaverTail のコードをインジェクトすることもあります。図 4 は、インジェクトされたスクリプトのを示しています。

画像 4 はスクリーンショットを分割したもので、上の画像は GitHub のコミットページです。下の画像は BeaverTail の難読化された JavaScript です。
図 4. 難読化された BeaverTail の JavaScript。正当な開発者のプロジェクトの NPM ファイルにインジェクトされている

図 4 に示した通り、コードが高度に難読化されている上、Node.js 環境にも依存していることから、BeaverTail の実行には人間による操作が必要です。これらの特徴は、マルウェアの検出回避に役立ちます。

悪意のある NPM パッケージが Windows、Linux、macOS のホストに正常にインストールされると、BeaverTail は基本的なシステム情報を収集します。この脅威はまた、Binance や Coinbase のような暗号通貨ウォレットに関連する拡張機能を被害者の Web ブラウザー内で検索します。表 1 に全リストを示します。

ブラウザー拡張機能の ID ブラウザー拡張機能名 ターゲット ブラウザー
fhbohimaelbohpjbbldcngcnapndodjp  Binance ウォレット Chrome
aeachknmefphepccionboohckonoeemg Coin98 ウォレット Chrome
hnfanknocfeofbddgcijnmhnfnkdnaad  Coinbase ウォレット Chrome
hifafgmccdpekplomjjkcfgodnhcellj  Crypto.com ウォレット Chrome
nkbihfbeogaeaoehlefnkodbefgpgknn  MetaMask ウォレット Chrome
ejbalbakoplchlghecdalmeeeajnimhm  MetaMask ウォレット Microsoft Edge
bfnaelmomeimhlpmgjnjophhpkkoljpa Phantom ウォレット Chrome
fnjhmkhhmkbjkkabndcnnogagogbneec  Ronin ウォレット Chrome
ibnejdfjmmkpcnlpebklmnkoeoihofec TRON ウォレット Chrome

表 1. ブラウザー拡張機能 BeaverTail が探す暗号通貨ウォレット

BeaverTail は ~/.config/solana/id.json を検索して Solana 暗号通貨ウォレットもチェックします。

データ漏出と InvisibleFerret のロード中、BeaverTail は以下の表 2 に示すような Web トラフィックを生成します。

URL パターン 説明 保存場所
hxxp://<c2_server>:1224/keys HTTP POSTリクエストが BeaverTail が収集したデータを送信  該当なし
hxxp://<c2_server>:1224/uploads HTTP POST リクエストがそのほかの Solana 暗号通貨ウォレットのデータなどの収集情報を送信 該当なし
hxxp://<c2_server>:1224/node/<node_js_runtime_environment_version> (必要に応じて) Chrome に保存されたクレデンシャル (認証情報) を復号するヘルパー DLL ファイルを求める HTTP GET リクエスト %USERPROFILE%\store.node
hxxp://<c2_server>:1224/pdown Python の実行ファイルと関連ライブラリーを要求する HTTP GET リクエスト %TEMP%\p.zi または %HOMEPATH%\.pyp\
hxxp://<c2_server>:1224/client/<campaign_id> InvisibleFerret を求める HTTP GET リクエスト %HOMEPATH%\.npl または ~/.npl

表 2. BeaverTail マルウェアが生成した感染トラフィック

この段階で、脅威アクターは目立たずシンプルなクロスプラットフォーム バックドアを被害者のマシンにドロップすることに成功しています。

InvisibleFerret: クロスプラットフォーム型 Python バックドア

InvisibleFerret は新たに発見されたマルウェアで、BeaverTail の NPM パッケージによって取得・実行されます。これは Python で書かれたクロスプラットフォームのマルウェアで、以下の機能を持つさまざまなコンポーネントで構成されています。

  • フィンガープリンティング
  • 遠隔操作
  • キーロギング
  • データ漏出
  • ブラウザー スティーラー機能
  • AnyDesk クライアントのダウンロード (追加でコントロールが必要な場合)

図 5 は、InvisibleFerret がモジュール志向であることを明らかにした図です。この図は、初期スクリプトのほか、異なる機能を実行する 2 つの追加コンポーネントを示しています。

画像 5 は、InvisibleFerret がどのように機能するかを示す図です。BeaverTail の GitHub から .npl という初期スクリプトにつながり、この初期スクリプトは 2 つに枝分かれしています。1 つの枝はフィンガープリント、遠隔操作、情報窃取コンポーネントを含む .n2/pay です。このブランチは .n2/adc による AnyDesk で終了しています。2 本めのブランチは .n2/bow で、これはブラウザー窃取コンポーネントです。
図 5. InvisibleFerret の初期スクリプトと 2 つのコンポーネント

初期スクリプト

BeaverTail は表 2 の最終行の URL パターンを使って InvisibleFerret のスクリプトをダウンロードします。InvisibleFerret をダウンロードする URL の例を以下に示します。

  • hxxp://<c2_server>:1224/client/<campaign_id>

InvisibleFerret の初期スクリプトは、ユーザーのホーム ディレクトリー以下に .npl という名前で保存されて Python によって実行されます。Windows ホスト上でこのファイルを実行するコマンドラインの例は以下の通りです。

  • C:\Users\$USER$\.pyp\python.exe C:\Users\$USER$\.npl

InvisibleFerret の初期スクリプトは難読化されたデータを使います。そのを図 6 に示します。

画像 6 は多数のコード行からなるスクリーンショットです。
図 6. InvisibleFerret の Pythonスクリプトの例

図 6 の1番下の部分は InvisibleFerret とそのコンポーネントが使う全スクリプトファイルに共通するデコード ルーチンを示しています。

  • temp 文字列の最初の 8 文字はデコード用のキーを表します。
  • temp 文字列の残りの部分は Base64 から変換されます。
  • この結果は、 8 文字のキーを使って XOR ループで処理されます。

この初期スクリプトは、pip を使って必要な Python モジュールをインストールします。またこのスクリプトは変数も定義し、コマンド & コントロール (C2) サーバーとポートを識別するための値を設定します。

初期スクリプトの主な目的は、InvisibleFerret の 2 つの異なるコンポーネントを取得して実行することです。これらのコンポーネントは表 3 に示す通りにダウンロード・保存されます。

コンポーネントのリクエスト 保存場所
hxxp://<c2_server>:1224/payload/<campaign_id> ローカル ファイル パス .n2/pay
http://<c2_server>:1225/bow/<campaign_id>  ローカル ファイル パス .n2/bow

表 3. BeaverTail マルウェアが生成した感染トラフィック

なお、 2 つめのコンポーネントは、オペレーティング システムが macOS ではない場合にのみダウンロードされます。

InvisibleFerret コンポーネント

InvisibleFerret の最初のコンポーネントは、フィンガープリント作成用のシステム データを収集して C2 サーバーに送信します。最初のコンポーネントが収集する内容は以下の通りです。

  • 内部 IP アドレス
  • IP のジオロケーション情報
  • OS のバージョン、リリース、ホスト、ユーザー情報を含むシステム情報

この情報を JSON 形式でサーバーに送信します。

InvisibleFerret の 2 つめのコンポーネントは、遠隔操作機能と情報窃取機能を展開します。実行されると、以下の Python パッケージがシステムに存在していない場合はインストールし、環境を整えます。

  • pyWinhook: グローバルなマウス入力/キー入力イベントへのコールバックを提供する、Windows のコンテキスト外入力フック用の Python ラッパー。
  • pyperclip: クリップボード内容のコピー/ペーストのためのクロスプラットフォーム Python モジュール。
  • psutil: プロセスとシステムを監視するためのクロスプラットフォーム Python ライブラリー。
  • pywin32: Windows 拡張機能用の Python ライブラリー。

C2 通信

InvisibleFerret は TCP トラフィックで C2 サーバーとの接続を確立し、定期的にチェックインして次の指示を待ちます。このトラフィックは JSON メッセージで構成されています。

感染ホストは、図 7 に示すように、値が 0 の code と、args のキーをもつ JSON コンテンツを指定したハートビート メッセージを使ってチェックインします。このハートビート メッセージには、キャンペーン識別子 (sType) と被害者のホスト名 (sHost) も含まれています。

画像 7 は、ハートビート コマンドと制御メッセージを表す図です。被害者は、ターゲット内で、盗聴されたノート パソコンのアイコンとして表現されています。JSON は TCP ポート 1245 で送信されます。操り人形の糸につながれたサーバーとノート パソコンのアイコンで象徴されるC2 サーバーへつながる矢印が描かれています。JSON テキストの下にはコード スニペットが表示されています。
図 7. C2 へのハートビート メッセージ

C2 サーバーは、バックドアに次のアクションを指示する JSON データを返します。JSON レスポンスには、同じ 2 つの主要キーが含まれています。

  • code: アクションやコマンドを指定する値
  • args: 指定されたコマンドに必要な引数を含む、複数のキーと値のペアを持つ文字列または JSON 辞書

InvisibleFerret は、以下の表 4 に示す合計 8 つのコマンドを実装しています。

コマンド 説明
ssh_cmd args の値が delete と等しいかどうかをチェックし、等しければセッションを閉じます。C2 サーバーに通知するために、メッセージ文字列 [close] を送信します
ssh_obj コマンドを実行します。args['cmd'] からコマンド値を取り出して実行します。C2 サーバーに送信される JSON 結果は、code に値 1 が設定されるほか、結果を表す args が指定されます。
ssh_clip キーロガー バッファーとクリップボード データの内容を送信します。C2 サーバーに、JSON code 3 と、 収集されたデータを含む args をレポートします。
ssh_run ブラウザー窃取コンポーネントをダウンロードして実行します。JSON code には 4 を指定し、 このコンポーネント用のファイル パスを args に含めて C2 サーバーにレポートします。
ssh_upload C2 サーバーにデータをアップロードします。サブコマンドは以下の通りです。

  • 特定のディレクトリーの全コンテンツをアップロードします。
  • 特定のファイルをアップロードします。
  • 指定されたフォルダー内で、指定されたパターンにマッチするファイルを再帰的に検索してアップロードします。

コンテンツはアクターが制御する FTP サーバーにアップロードされます。 この FTP サーバーは以下の JSON レスポンス内の以下の args で指定されます。

  • hn: FTP ホスト。
  • un: ユーザー名。
  • pw: パスワード。

このロジックには、特定のファイルやフォルダーの除外リストと、見つかった場合はアップロードすべきパスの一覧が含まれています。これらのパスは、文書 (.xls.doc) のほか、暗号通貨に特有のファイルパス (metamask、wallet など) にもフォーカスしています。

コンテンツのアップロード中、このバックドアは code には 5 を指定し、args にアップロード状況を知らせる値を指定した JSON データでリクエストを送り続けます。

ssh_kill Chrome ブラウザーと Brave ブラウザーのプロセスを終了します。終了した場合、code には値 6 を指定し、これらのプロセスが終了したことを示す args 値を指定して JSON を送信します。
ssh_any AnyDesk 用の悪意のあるバイナリーをダウンロードして実行します。AnyDesk のダウンロードの前に、code には値 7 を指定し、被害者の OS を示す argsを含めた JSON を送信します。
ssh_env 特定のフォルダー (Windowsの場合は "Documents "と "Downloads"、そのほかの場合は /home/Volumes) からコンテンツを収集して FTP サーバーにアップロードします。

表 4. InvisibleFerret のコマンド

InvisibleFerret はタスクを終えると結果を C2 サーバーにレポートします。レポートのさいは、表 4 で説明したものと同じ JSON の code パラメーターと args パラメーターに特定の値を設定して使います。

キーロガー機能

InvisibleFerret はまた、キーロガーを起動し、キーボード、マウス、クリップボードのデータを継続的に収集します。このデータは、前述の ssh_clip コマンドを使って C2 サーバーからいつでも要求できます。

ブラウザー スティーラー機能

Python ベースの InvisibleFerret は、Windows、Linux、macOS 上の一般的なWeb ブラウザーを標的にし、ログイン クレデンシャルなどの機微データを窃取します。この機能には、ブラウザーのログイン データの取得、情報の復号、被害者のログイン クレデンシャルの窃取が含まれます。InvisibleFerret は被害者が使ったクレジット カード情報を Web ブラウザー経由で取得することもできます。

これらの情報を収集後、InvisibleFerret は、コンテンツを表すさまざまなキーを持つ JSON フォーマットを使って、データをC2 サーバーに送信します (図 8)。

画像 8 は、盗まれたブラウザー データを送信するさいに使われる JSON フォーマットのスクリーンショットです。
図 8. 盗んだブラウザー データを送信するさいに使う JSON フォーマット

フォローアップ マルウェア AnyDesk

ssh_any コマンドを受信すると、InvisibleFerret は以下の URL パターンを使って追加スクリプトをダウンロードします。

  • http://<c2_server>:1224/adc/<campaign_id>

このスクリプトは、以下のファイル名で C2 サーバーに保存されます。

  • any_<campaign_id>.py

InvisibleFerret はこのファイルをディスク上の以下のディレクトリーに保存して実行します。

  • .n2/adc

このファイルは、InvisibleFerret 用のほかのスクリプトで確認されたものと同じような難読化を使っています。

このスクリプトは、被害者のホストに AnyDesk バイナリーがまだ存在しない場合は、C2 サーバーから AnyDesk バイナリーを取得します。このプロセスにより、AnyDesk の構成が更新され、プログラムがすでに実行されている場合は再起動されます。

Contagious Interview キャンペーン関連のインフラを調べていたとき、別のアクティビティに使われていたファイルが見つかりました。私たちはこの別のキャンペーンを「Wagemole」と名付け、CL-STA-0241として追跡しています。

CL-STA-0241: Wagemole

Contagious Interview (CL-STA-0240) 関連の GitHub インフラを軸に調査範囲を広げたところ、別の GitHub アカウントの GitHub リポジトリーに誤ってファイルが公開されているのを見つけました。これらのファイルには以下が含まれていました。

  • さまざまな国籍の人物になりすました偽の身分証を使った履歴書
  • 面接の想定問答集
  • なりすました身分証の個人情報を含む、自己紹介用の台本
  • 米国企業の IT 求人広告のコピー
  • 盗まれた米国永住権カードのスキャンのコピー
  • 未確認のアカウント販売者の連絡先リスト

これらのファイルのタイムスタンプは、このキャンペーンが 2022 年 8 月に始まったことを示していて、タイムスタンプは 2022 年 12 月初旬まで続いています。私たちはこの一連のファイルの更新を確認していませんが、このアクティビティは現在進行形の脅威です。

これらのファイルは、偽の身分証を使って IT 系のリモート ワークに応募する別キャンペーンを示すもので、私たちはこれを Wagemole (賃金スパイ) と呼んでいます。いくつかの文書から、この脅威アクターは北朝鮮に関連していることがわかりました。これらのファイルに含まれていた履歴書からは、標的となったのが幅広い米国企業やフリーランスの求人市場であったことが示されています。このアクティビティはおそらく、北朝鮮がリモート ワーカーを使って賃金を兵器プログラムに流用しているという最近の報告に関連していると思われます。

下の図 9 は履歴書の一例です。

画像 9 は、求職者の顔を含む一部の情報を伏せてある履歴書の例です。技能の一覧や完全なプロフィールがあり、求職者はブロックチェーン開発者の職務を希望していることを示します。
図 9. 同インフラ上で見つかった履歴書の例

それぞれの偽履歴書には個人連絡用に米国の個別の電話番号が記載されていて、とくに VoIP (Voice over Internet Protocol) の番号が使われていました。なかには LinkedIn のプロフィールや GitHub コンテンツへのリンクを含む履歴書もありました。図 10 は、ある求職者が管理している GitHub のリポジトリーです。

画像 10 は、ある求職者が管理している GitHub リポジトリーのスクリーンショットです。合計で 1,108 件の貢献があります。プロフィール写真はとりたてて特徴のない宝石の画像です。個人情報の一部は伏せてあります。
図 10. 求職詐欺師の 1 人が管理する GitHub リポジトリー

これらの GitHub アカウントはよく管理されていて、活動履歴も長く、頻繁にコードが更新され、ほかの開発者との交流もあることを示しています。つまりこれらの GitHub アカウントはまともなアカウントとほぼ見分けがつきません。

図 11 に電話面接に備えた台本の一部を示します。この文書からは、対象となった仕事は若干はオンサイトでやるべきものであることがわかります。図 11 に示す通り、この求職詐欺師は自分の拠点は米国だと主張し、面接官には「新型コロナ感染症が理由で現在は海外にいる家族を訪ねて国外にいるがリモートで仕事を始められる」と伝えています。

画像 11 は面接準備用書類のスクリーンショットです。[Common Questions]I flied to [redacted] several weeks ago. My parents got Covid and I decide to be with family members for awhile. Now, I am planning to go back to Los Angeles in 3 months. I am thinking that I could start work remotely right now, then I will be on board when I go back to LA.
図 11. 面接準備用の台本の一部

これらの書類は、米国拠点企業のリモート IT 求人に限定されるものではありません。いくつかの文書から、この脅威アクターは複数の求人市場でフリーランスの仕事も探しており、アフリカを含む、さらに広くグローバルな求人市場をターゲットにしています。

これらの求職詐欺師は、電子メール、フリーランスの Web サイト、ソース コード リポジトリー、求人仲介プラットフォーム用に複数のアカウントを管理しています。仕事の入札で勝ち、正体を隠すための戦術として、彼らはアカウント販売マーケットプレイスで評価の高いアカウントを購入ないしレンタルしようとしていました。

図 12 は、このキャンペーンで使われた求職詐欺師の 1 人が送った、フリーランス求人プラットフォーム上のメッセージです。図 13 は、フリーランス求人プラットフォームで評価が高いアカウントの購入やレンタルを求める、アンダーグラウンド マーケットプレイスでのメッセージのやりとりを示しています。

画像 12 はある労働者からのメッセージのスクリーンショットです。情報の一部は割愛してあります。Dear client. I have checked your job description and I am really interested in your project. As a senior developer, I have 5+ years of experience of python development. As you can see my profile, I have finished very difficult type of app a few days ago and other developers can't solve this app but I have done. I have already published 10+ apps like you want to so I am sure that I can finish your job perfectly. If you want to hire a reliable developer, please contact me. I am waiting for your contact. I'll do my best for you. Thank you. Best regards. スクリーンショットのほかの言語の一部はスペイン語です。
図 12. フリーランス求人プラットフォームで仕事を探すアクター
画像 13 は、アカウントを販売するアンダーグラウンド マーケットでのメッセージのスクリーンショットです。一部の情報は伏せられています。これらはすべて、Andrew JackSon が 2023 年 2 月 9 日に投稿したものです。
図 13. フリーランス求人プラットフォーム用のアカウントを求めるアンダーグラウンド マーケットのメッセージ

このインフラにホストされていた米国の求人広告コピーのなかで一番多かったのは IT と採用活動にかかわるものでした。IT サービスやソリューション系の求人は、Wagemole の背後にいる脅威アクターによる下流サプライチェーンへの攻撃機会を広げる可能性があります。また、採用活動の仕事は、Wagemole のキャンペーンに利用可能な求職者の身分証や履歴書など、個人の身分証資料を攻撃者が入手する機会を広げる可能性があります。

アトリビューション (帰属)

「Contagious Interview」 (CL-STA-0420) と「Wagemole」 (CL-STA-0421) の両方で観察された戦術・技術・手順 (TTP) は、北朝鮮の国家支援型 APT にアトリビュート (帰属) された過去のアクティビティと一致しています。ただしアトリビューションの確度は 2 つのキャンペーンで異なっています。

Wagemole のアクティビティについては、私たちが発見した文書のいくつかに、北朝鮮をより決定的に指し示す情報が含まれています。これらの文書に関連するパスワードの多くは US キーボードで入力された韓国語で作られており、パスワードの中には北朝鮮でしか使われない単語も含まれています。さらに、韓国語のキーボード言語設定は、これらのキャンペーンの背後にいる脅威アクターが使うコンピューター上でも見つかりました。

これらの文書は、米国政府FBI の発表に基づいて多くのメディアが報じたものと同様のアクティビティを示唆しています。

これらの理由から、私たちは Wagemole が北朝鮮の国家支援型 APT に帰属するものと高い確度で評価し、これを CL-STA-0241 として追跡しています。

Contagious Interview もまた、北朝鮮系脅威アクターのもつ顕著な特徴を備えています。たとえば、北朝鮮のあるグループは以前、Meta の求人担当者を装い、同様の手口で求職者をマルウェアに感染させていました。北朝鮮のAPT「Lazarus Group」が実行した「Operation Dream Job」では、ソーシャル メディアを利用して被害者を騙し、偽の就職面接の一環としてトロイの木馬化された VNC アプリをインストールさせたことが報告されています。北朝鮮の国家支援型 APT グループは、潜在的被害者をバックドア型マルウェアに感染させるため、しばしば採用担当者を装ってきました。

Contagious Interview の調査過程では、BeaverTail と InvisibleFerret の開発者が、Wagemole と直接の関連があるべつの GitHub アカウントとやりとりしたり、共同作業をしていることを示す指標も私たちは観測しています。私たちは、Contagious Interview の背後にいる脅威アクターを CL-STA-0240 として追跡しており、この脅威アクターも北朝鮮の国家支援型脅威アクターであると中程度の確度でアトリビュート (帰属) しています。

この分析に鑑み、私たちは両キャンペーンが北朝鮮の国家支援型脅威アクターによるものであると、中程度の確度でアトリビュートしています。

結論

Unit 42 のリサーチャーが自社のテレメトリーから不審なアクティビティを調査していたところ、Contagious Interview、Wagemole という 2 つのキャンペーンが見つかりました。私たちはそれぞれ CL-STA-0240、CL-STA-0241 として追跡しています。この過程では Contagious Interview キャンペーンで使われた 2 つの新しいマルウェア ファミリーが見つかり、私たちはこれを BeaverTail、InvisibleFerret と名付けました。

ソフトウェア開発者はしばしば、サプライチェーン攻撃における最も弱いリンクです。また求人詐欺は引き続き懸念事項で、Contagious Interview によるアクティビティは続くものと思われます。また、Wagemole は、標的企業に内部脅威を送り込む機会を提供するものです。私たちはこれらのキャンペーンを含むキャンペーンからのさらなるアクティビティについて今後もテレメトリー監視を続けます。

推奨事項と保護

これらの脅威に有効な戦略とはどのようなものでしょうか。Contagious Interview を含む多くの脅威についていえば、ソフトウェア開発者は、会社支給のコンピューターを個人の活動や仕事と関係のない就職面接のような活動には使わないようにしなければなりません。会社支給のコンピューターでの個人的活動は、脅威アクターがマルウェア経由で企業ネットワークにアクセスする機会を提供しかねません。

開発者はまた、リポジトリーが 1 つしかなく、更新のほとんどない GitHub アカウントも疑うべきです。脅威アクターはしばしば GitHub のような無料サービスを悪用してマルウェアを配布しています。また誰であっても、出どころのわからないファイルを職場や自宅のコンピューターにインストールしてはいけません。

求職者は十分な注意を払い、面接を申し出た企業の存在と正当性を確認し、面接官が実際に名乗っているとおりの企業に勤務しているかどうかを確認すべきでしょう。また、一般的でないような通信ソフトをダウンロード/インストールさせたり、面接の前提条件としてソフトウェア パッケージのダウンロードを求めてくるケースにも注意するのが賢明です。

Wagemole についていえば、雇用者は全応募者を入念に調査すべきです。仕事関連のソーシャルメディア プラットフォームでは、偽の ID がますます懸念されるようになってきており、脅威アクターはリモートワーク用の偽名を簡単に作り出せます。対面での面接が難しい場合は、電話会議で求職者との面接を行いましょう。オンサイトの仕事に応募し、その時点ではその地域を離れていると述べ、その後すぐにリモートワークが可能と申し出る人には注意が必要です。リモートのみの職種であれば、雇用者は採用過程で求職者になにか普通でないところが見られないかを疑うべきです。

パロアルトネットワークスのお客様は、Advanced WildFireAdvanced Threat PreventionAdvanced URL Filtering などのクラウド配信型セキュリティサービスを有効にした次世代ファイアウォール (NGFW) Cortex XDR により、本稿で取り上げたマルウェアからの保護を受けています。

次世代ファイアウォールで Advanced Threat Prevention セキュリティ サブスクリプションを有効にしている場合、Threat Prevention シグネチャー 868178681886819 を通じたベスト プラクティスにより、マルウェアの C2 トラフィックをブロックできます。

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

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200

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

IoC (侵害指標)

BeaverTail 関連ファイルの SHA256 ハッシュ:

  • 09a508e99b905330a3ebb7682c0dd5712e8eaa01a154b45a861ca12b6af29f86
  • 0ce264819c7af1c485878ce795fd4727952157af7ffdea5f78bfd5b9d7806db1
  • 104926c2c937b4597ea3493bccb7683ae812ef3c62c93a8fb008cfd64e05df59
  • 1123fea9d3a52989ec34041f791045c216d19db69d71e62aa6b24a22d3278ef9
  • 121ca625f582add0527f888bb84b31920183e78c7476228091ff2199ec5d796b
  • 12c0f44a931b9d0d74a2892565363bedfa13bec8e48ff5cd2352dec968f407ee
  • 1b21556fc8ecb9f8169ba0482de857b1f8a5cb120b2f1ac7729febe76f1eea83
  • 1c905fa3a108f4c9bc0578882ce7af9682760b80af5232f130aa4f6463156b25
  • 1f9169492d18bffacebe951a22495d5dec81f35b0929da7783b5f094efef7b48
  • 2618a067e976f35f65aee95fecc9a8f52abea2fffd01e001f9865850435694cf
  • 40645f9052e03fed3a33a7e0f58bc2c263eeae02cbc855b9308511f5dc134797
  • 41a912d72ba9d5db95094be333f79b60cae943a2bd113e20cc171f86ebcb86cf
  • 4c465e6c8f43f7d13a1b887ff26d9a30f77cf65dd3b6f2e9f7fe36c8b6e83003
  • 4c605c6ef280b4ed5657fe97ba5b6106b10c4de02a40ae8c8907683129156efd
  • 592769457001374fac7a44379282ddf28c2219020c88150e32853f7517896c34
  • 61dff5cbad45b4fe0852ac95b96b62918742b9c90dd47c672cbe0d1dafccb6c5
  • 6465f7ddc9cf8ab6714cbbd49e1fd472e19818a0babbaf3764e96552e179c9af
  • 6b3fce8f2dad7e803418edd8dfc807b0252705c11ec77114498b01766102e849
  • 700a582408cbda7ee79723b3969b8d10d67871ea31bb17c8ca3c0d94b481aa8c
  • 709820850127201a17caab273e01bb36ce185b4c4f68cd1099110bb193c84c42
  • 72ebfe69c69d2dd173bb92013ab44d895a3367f91f09e3f8d18acab44e37b26d
  • 75f9f99295f86de85a8a2e4d73ed569bdb14a56a33d8240c72084f11752b207e
  • 785f65f1853a08b0e86db5638fbd76e8cad5fe1359655716166a76035261c0be
  • 7b718a46ae4de09ed4f2513df6e989afe1fbb1a0f59511a4689fac5e1745547d
  • 7f8bb754f84a06b3e3617dd1138f07a918d11717cc63acaef8eb5c6d10101377
  • 845d7978682fa19161281a35b62f4c447c477082a765d6fedb219877d0c90f31
  • 9867f99a66e64f6bce0cfca18b124194a683b8e4cb0ced44f7cb09386e1b528d
  • 9ae24a1912e4b0bab76ae97484b62ea22bdc27b7ea3e6472f18bf04ca66c87de
  • a2f8de3c5f5f6ecbf29c15afd43a7c13a5bf60023ecb371d39bcca6ceef1d2b7
  • b5f151f0a4288e148fd10e19c78399f5b7bdff2ad66940fadd20d6eae4b7518b
  • b833f40b2f3439f317cf95980b29bddd2245d2acc2d5c11e9690dd2fa4289585
  • c8c11f9b308ea5983eebd8a414684021cc4cc1f67e7398ff967a18ae202fb457
  • ceb59dbaf58a8de02f9d5e9b497321db0a19b7db4affd5b8d1a7e40d62775f96
  • d8f065d264b1112d6ee3cf34979289e89d9dcb30d2a3bd78cc797a81d3d56f56
  • db6e75987cabdbfc21d0fdcb1cdae9887c492cab2b2ff1e529601a34a2abfd99
  • de42155e14a3c9c4d919316d6ba830229533de5063fcd110f53e2395ef3aa77a
  • e2a940c7d19409e960427749519dc02293abe58a1bef78404a8390f818e40d08
  • fc9bb03998a89524ce5a0f859feb45806983aa4feb5f4d436107198ca869ff6f
  • ff620bd560485c13a58a0de941bd3e52943036e6a05306e928f7c626998822fb

BeaverTailによってダウンロードされたDLLファイルのSHA256ハッシュ:

  • da6d9c837c7c2531f0dbb7ce92bfceba4a9979953b6d49ed0862551d4b465adc
  • 2d8a5b637a95de3b709780898b7c3957f93d72806e87302f50c40fe850471a44
  • c5a73896dc628c23a0b6210f50019445e2b8bfc9770f4c81e1fed097f02dfade

InvisibleFerret 関連ファイルの SHA256 ハッシュ:

  • 35434e903bc3be183fa07b9e99d49c0b0b3d8cf6cbd383518e9a9d753d25b672
  • 305de20b24e2662d47f06f16a5998ef933a5f8e92f9ecadf82129b484769bbac
  • 39e7f94684129efce4d070d89e27508709f95fa55d9721f7b5d52f8b66b95ceb
  • ab198c5a79cd9dedb271bd8a56ab568fbd91984f269f075d8b65173e749a8fde
  • 444f56157dfcf9fc2347911a00fe9f3e3cb7971dccf67e1359d2f99a35aed88e
  • 4f50051ae3cb57f10506c6d69d7c9739c90ef21bfb82b14da6f4b407b6febac0
  • 276863ee7b250419411b39c8539c31857752e54b53b072dffd0d3669f2914216
  • 617c62da1c228ec6d264f89e375e9a594a72a714a9701ed3268aa4742925112b
  • c547b80e1026d562ac851be007792ae98ddc1f3f8776741a72035aca3f18d277
  • 03185038cad7126663550d2290a14a166494fdd7ab0978b98667d64bda6e27cc
  • 2d300410a3edb77b5f1f0ff2aa2d378425d984f15028c35dfad20fc750a6671a
  • 92aeea4c32013b935cd8550a082aff1014d0cd2c2b7d861b43a344de83b68129

Contagious Interview キャンペーン関連のドメインと IP アドレス:

  • blocktestingto[.]com
  • 144.172.74[.]48
  • 144.172.79[.]23
  • 167.88.168[.]152
  • 167.88.168[.]24
  • 172.86.123[.]35
  • 45.61.129[.]255
  • 45.61.130[.]0
  • 45.61.160[.]14
  • 45.61.169[.]187

2023-12-01 14:00 JST 英語版更新日 2023-12-01 14:40 PST の内容を反映 (製品による保護範囲を拡大) 

Enlarged Image