フリーランス開発者を標的にする北朝鮮のサイバー攻撃グループ「DeceptiveDevelopment」
ESETの研究者、採用面接の課題にマルウェアを仕込んで配信するキャンペーンを分析。
Matěj Harvánek 10 Mar 2025
ESETの研究者、採用面接の課題にマルウェアを仕込んで配信するキャンペーンを分析。
Matěj Harvánek 10 Mar 2025
サイバー犯罪者は、企業の採用担当者を装って標的の人物に接近し、偽の採用オファーなどを通じて関心を引こうとしています。新しい仕事の機会に心を奪われていると、防御のための警戒心が疎かになり、攻撃を受けやすくなります。2024年初頭以来、ESETの研究者は、北朝鮮とつながりのある悪意のある一連の活動を観察していますが、攻撃者はヘッドハンターを装い、標的の人物にソフトウェア開発プロジェクトの試験を課し、その過程で情報窃盗型マルウェアに感染させています。ESETは、この攻撃をDeceptiveDevelopment(欺瞞的な開発)と命名しました。
DeceptiveDevelopmentのオペレーターは、偽の採用面接プロセスの一環として、標的に既存のプロジェクトに機能を追加するなどのコーディングテストを依頼しています。タスクに必要なファイルは通常、GitHubなどのプラットフォームのプライベートリポジトリにホストされています。残念ながら、職を真剣に求めているユーザーがアクセスするこれらのファイルはトロイの木馬に感染しています。プロジェクトをダウンロードして実行すると、被害者のコンピュータはこの攻撃の第1段階のマルウェアである「BeaverTail」に感染します。
DeceptiveDevelopmentは、2023年にPhylumとUnit 42によって初めて公開され、すでに「Contagious Interview」と「DEV#POPPER」という名前でその活動の一部が報告されています。ESETは、DeceptiveDevelopmentが使用する2つのマルウェア系統である「InvisibleFerret」と前述の「BeaverTail」の新バージョンを含む、この攻撃とオペレーターの初期アクセス方法、ネットワークインフラ、ツールセットについて詳細に分析しました。
本ブログの要点:
ESETが、このDeceptiveDevelopmentキャンペーンを最初に観測したのは2024年初めでした。その際、GitHubにホストされていたプロジェクトがトロイの木馬に感染していることを発見しました。長いコメントを追加し、コメントの最後に悪意のあるコードを隠し、ユーザーがその部分を見えないようにする手法が利用されていました。これらのプロジェクトでは、BeaverTailとInvisibleFerretマルウェアが配信されていました。2つのマルウェア系統の分析に加えて、ESETはキャンペーンの背後にあるC&Cインフラの調査も開始しました。2024年の初め以来、ESETはこの攻撃グループと、現在進行中の攻撃に使用されている戦略とツールの進化を追跡してきました。このブログでは、このキャンペーンのTTPと使用されているマルウェアについて説明します。
DeceptiveDevelopmentは、北朝鮮が関与している攻撃グループです。現在のところ、既知のサイバー攻撃グループとの関連は明確になっていません。DeceptiveDevelopmentのオペレーターは、Windows、Linux、macOSのソフトウェア開発者を標的にしています。この攻撃グループは、主に金銭的な利益を得るために暗号通貨を窃取していますが、二次的な目的としてサイバースパイを行っている可能性があります。
標的の人物に接近するため、これらのオペレーターはSNSで偽のリクルーターになりすまします。これは、「DreamJob作戦」(こちらのWeLiveSecurityのブログを参照)で説明しているLazarusグループが取り入れている手法と似ています。しかし、「DreamJob作戦」では防衛産業や航空宇宙技術に関連するエンジニアを標的にしていたのに対し、「DeceptiveDevelopment」はフリーランスのソフトウェア開発者、特に多くの場合、暗号通貨関連のプロジェクトに関わる開発者を標的にしています。DeceptiveDevelopmentは、被害者のコンピュータを侵害するために、偽の採用面接プロセスの一環として、トロイの木馬に感染したコードベースを提供し、バックドアを展開します。
このDeceptiveDevelopmentキャンペーンの主な標的は、主に暗号通貨や分散型金融(DeFi)プロジェクトに携わるソフトウェア開発者です。攻撃者は、地理的な場所に基づいて標的を定めているわけではなく、できるだけ多くの被害者を感染させることで、資金や情報を窃取する確率を高めようとしています。
ESETは、Windows、Linux、macOSの3つの主要なオペレーティングシステムを使用している世界中の数百人の被害者を確認しています。フリーランスとしてのキャリアをスタートさせたばかりの若手開発者から、暗号通貨やDeFiの分野で豊富な経験を積んだプロフェッショナルまで、標的となった人物は多岐にわたります。ESETは、攻撃者と被害者間の会話が英語でのみ行われていることを観察していますが、攻撃者が英語を母国語としない被害者とコミュニケーションをとるために翻訳ツールを使用している可能性もあります。犠牲者の世界的な分布を示すマップを図1に示します。
ESETは、以下に示すいくつかの要素から、DeceptiveDevelopmentが北朝鮮とつながりのある攻撃グループであると確信しています。
GitHubのプロフィールの関連性に加え、DeceptiveDevelopmentが使用しているマルウェアはかなり単純なものです。これは、Mandiantによる報告と一致しており、北朝鮮のこれらのIT労働者の仕事は通常、品質が低いことが指摘されています。
ESETがDeceptiveDevelopmentの活動を監視しているときに、このサイバー攻撃者が細部への注意が不十分であることを示す多くのケースを目にしました。例えば、開発メモを削除していなかったり、開発やテストに使用したローカルIPアドレスをコメントアウトしていなかったりしています。また、C&Cアドレスを変更した後に難読化していない検体も見られました。この検体については、図2を参照してください。さらに、このマルウェアは無料で利用できる難読化ツールを使っており、そのリンクがコードのコメントに残されていることもありました。
リクルーターになりすますために、攻撃者は既存の人物のプロフィールをコピーしたり、新しい人物像(ペルソナ)を構築したりしています。そして、求職サイトやフリーランスのためのプラットフォームで潜在的な被害者に直接アプローチすることも、偽の求人情報を掲載することもあります。当初、このサイバー攻撃者はまったく新しいプロフィールを使用しており、LinkedInから悪意のあるGitHubプロジェクトへのリンクを攻撃対象の人物に送信していただけでした。その後、信頼性を高めるために、多くのフォロワーやつながりのあるように見えるプロフィールを使い始め、より多くの求職サイトやコードホスティングサイトへと手を広げています。これらのプロフィールの一部は攻撃者自身によって設定されていますが、他のプロフィールはプラットフォーム上の実際の人物のプロフィールが攻撃者によって改ざんされた可能性もあります。
これらのやり取りが行われるプラットフォームの中には、一般的な求人サイトもあれば、暗号通貨やブロックチェーンプロジェクトに特化したものもあります。後者のプラットフォームは攻撃者の目的により合っています。攻撃に使用されているプラットフォームを以下に示します。
最も多く観察されているセキュリティ侵害の手口は、偽のリクルーターが被害者に採用試験と称して、トロイの木馬が仕込まれたプロジェクトに参加させたり、「リクルーター」のためにバグ修正を手伝わせ、その報酬として金銭を提供したりするものです。
被害者は、サイトからファイルを直接転送するか、あるいはGitHub、GitLab、Bitbucketのようなリポジトリへのリンクから、プロジェクトファイルを受け取ります。被害者は、ファイルをダウンロードし、機能を追加したりバグを修正したりして、リクルーターに報告するよう求められます。さらに、プロジェクトをテストするためにビルドして実行するよう指示されますが、この時に最初のセキュリティ侵害が発生します。通常、使用されるリポジトリは非公開であるため、被害者は最初にアクセスを許可するためにアカウントIDやメールアドレスを提供するように求められます。これは、セキュリティ研究者に悪意のある活動を検出されないようにするためだと考えられます。
それにもかかわらず、これらのリポジトリが公開されているケースが多く見受けられました。これらは主に被害者がタスクを完了した後、自分のリポジトリにアップロードしたものであることが分かりました。図3は、GitHubでホストされているトロイの木馬が仕込まれたプロジェクトの例を示しています。ESETは、観測されたすべての悪意のあるコードを、影響を受けているサービスを提供している企業に報告しています。
トロイの木馬が仕込まれたプロジェクトは、以下の4つのカテゴリのいずれかに分類されます。
これらのリポジトリは、既存のオープンソースプロジェクトやデモの複製であることが多く、悪意のあるコードを追加したりREADMEファイルを変更したりする以外には、ほとんど変更が加えられていません。悪意のあるプロジェクト名と、プロジェクトを運用している攻撃者が管理するアカウント名(確認できたもの)の一部を、表1に示します。
プロジェクト | 作成者 | プロジェクト | 作成者 |
---|---|---|---|
Website-Test | Hiring-Main-Support | casino-template-paid | bmstore |
guru-challenge | Chiliz-Guru | casino-demo | casinogamedev |
baseswap_ver_4 | artemreinv | point | freebling-v3 |
metaverse-backend | metaverse-ritech | Blockchain-game | N/A |
lisk-parknetwork | MariaMar1809 | 3DWorld-tectera-beta | N/A |
表1. 観測されたプロジェクト名とリポジトリ/コミット作成者
また、表2に示すように、攻撃者が既存のプロジェクトや企業になりすますために、似たような名前を使用したり、LLC、Ag、Inc(法人の種類を示す略語)を名前に付け加えたりする手法も確認されています。
プロジェクト | 作成者 |
---|---|
プロジェクト | 作成者 |
Lumanagi-Dex | LUMANAGI-LLC |
DARKROOM-NFT | DarkRoomAg |
DarkRoom | WonderKiln-Inc |
表2. 観察された正当なプロジェクトになりすますプロジェクト名およびリポジトリ/コミット作成者
この攻撃者は悪意のあるコードを隠蔽するために巧妙な手口を使用しています。通常、開発者に与えられたタスクとは関係のないバックエンドコードの無害なコンポーネントに悪意のあるコードを配置したり、長いコメントの後ろの1行としてコードを追加したりする方法が使用されています。この方法では、悪意のあるコードが画面外に移動され、被害者がスクロールしない限り、またはコードエディタの自動折り返し機能が有効でない限り、隠れたままになります。GitHubのコードエディタでは自動折り返しが有効になっていないため、図4に示すように、リポジトリ内のコードを見ても悪意のあるコードを簡単に見つけることはできません。
ESETが確認したもう1つの侵害方法は、偽のリクルーターが被害者を、オンライン会議プラットフォームを使用する採用面接に招待し、必要な会議ソフトウェアをダウンロードできるWebサイトへのリンクを提供するものです。図5に示すように、このWebサイトは通常、既存の会議プラットフォームのWebサイトを複製したものであり、ダウンロードされたソフトウェアには第一段階のマルウェアが含まれています。
DeceptiveDevelopmentは、主に2つのマルウェア系統をその活動に使用しています。これらのマルウェアは2段階で配信されます。最初のステージであるBeaverTailには、JavaScript版とネイティブ版(Qtプラットフォームを使用してC++で記述)があり、被害者にプロジェクトの一部として、あるいは採用試験や、MiroTalkやFreeConferenceなどのトロイの木馬が仕込まれたリモート会議ソフトウェア内に偽装されて配信されます。
BeaverTailは、ブラウザのデータベースから保存されているログイン情報を抽出する簡易なログイン情報の収集ツールとして機能します。また、第二段階のマルウェアである「InvisibleFerret」をダウンロードする役割も果たします。InvisibleFerretは、スパイウェアとバックドアコンポーネントを含むPythonベースのモジュール型のマルウェアで、侵害後の活動のために、正規のリモート管理および監視ソフトウェアであるAnyDeskをダウンロードすることもできます。図6に、最初の侵害からデータの送信、AnyDeskの展開までの全体的な侵害チェーンを示します。
BeaverTailとInvisibleFerretの両方は、Unit 42およびGroup-IBObjective-Seeが既に報告しています。Zscalerも同時に調査を行っており、その調査結果をESETも確認することができました。ESETの分析には、これまで報告されていない詳細な内容が含まれており、この悪意のある活動を包括的に把握することができます。
BeaverTailは、DeceptiveDevelopmentによって使用されている情報窃取型マルウェアおよびダウンローダーです。2つの異なるバージョンが存在し、1つはJavaScriptで記述され、簡単に難読化された状態でトロイの木馬化されたプロジェクトに直接組み込まれています。もう1つのバージョンはQtプラットフォームを使用して構築されたネイティブバージョンで、会議ソフトウェアのように偽装されています。後者のバージョンは、Objective-Seeによって最初に報告されています。どちらのバージョンも、機能において強い共通点があります。
このマルウェアはWindows、Linux、macOSのシステムを標的とし、保存されたログイン情報と暗号通貨ウォレットのデータを収集することを目的としています。
最初にC&CのIPアドレスとポート情報を取得します。使用されるIPアドレスはさまざまですが、使用されるポートは通常1224または1244のいずれかであることから、悪意のあるネットワークアクティビティを容易に特定することができます。JavaScriptバージョンでは、IPアドレスとポートはbase64エンコードで難読化され、3つの部分に分割されて順番が入れ替えられ、自動的に復号されるのを防ぎます。他の文字列もbase64でエンコードされています。多くの場合、単純な復号を妨害するために、結果の文字列の前にダミーの文字が1つ追加されています。ネイティブバージョンは、IP、ポート、その他の文字列がすべて平文で保存されています。難読化されたJavaScriptコードを図7に、難読化を解除したコードを図8に示します。
次にBeaverTailは、Google Chrome、Microsoft Edge、Opera、およびBraveブラウザにインストールされているブラウザ拡張機能を検索し、Chrome WebストアまたはMicrosoft Edgeアドオンからハードコードされたリストの拡張機能名に一致するものがあるかどうかをチェックします。括弧内に記載されたブラウザは拡張機能のソースを示しています。なお、OperaとBraveもChromiumベースであるため、Chrome Webストアの拡張機能を使用しています。
これらの拡張機能が見つかった場合、そのディレクトリからいずれかの.ldbおよび.logファイルが収集され、外部に送信されます。
これらのファイルに加えて、マルウェアはユーザーのホームディレクトリにある.config/solana/id.jsonに保存されたSolanaキーを含むファイルも窃取しようとします。BeaverTailは次に、/Library/Keychains/login.keychain(macOS)または/.local/share/keyrings/(Linux)に保存されたログイン情報を探します。ログイン情報が存在する場合、/.mozilla/firefox/にあるFirefoxログインデータベースkey3.db、key4.db、logins.jsonもこの時に送信されます。
BeaverTailの各検体には、識別のために使用される被害者IDが含まれています。これらのIDは、すべてのダウンロードとアップロードで識別子として侵害チェーン全体で使用されます。これらのIDは各被害者に固有であり、窃取した情報を被害者の公開プロフィールに結びつけるために使用されている可能性があります。
収集されたデータは、コンピュータのホスト名と現在のタイムスタンプとともに、C&Cサーバーの「/uploads」APIエンドポイントにアップロードされます。次に、スタンドアロンのPython環境がp2.zipというアーカイブでダウンロードされ、C&Cサーバー上でホストされ、次の段階のマルウェアを実行します。最後に、次の段階でC&Cサーバー(APIエンドポイント「/client/」)から.nplという名前でユーザーのホームディレクトリにダウンロードされ、ダウンロードされたPython環境を使用して実行されます。
ESETは2024年8月に、JavaScriptで記述されたBeaverTailの新しいバージョンを確認しました。このバージョンは、トロイの木馬が仕込まれたプロジェクトに配置されたコードがローダーとしてのみ機能し、リモートサーバーから実際のペイロードコードをダウンロードして実行します。また、異なる難読化手法が使用されており、以下の4つの新しい暗号通貨ウォレットの拡張機能が標的リストに追加されています。
Webサイトipcheck[.]cloudを調査したところ、ホームページが悪意のあるWebサイトmirotalk[.]netのミラーであり、リモート会議ソフトウェアとして偽装されたネイティブなBeaverTailマルウェアを提供しているが分かりました。このことから、新しいJavaScriptとBeaverTailのネイティブバージョンが直接関連していると考えられます。
InvisibleFerretは、情報窃取とリモートから攻撃する機能を備えたモジュール型のマルウェアであり、Pythonで記述されています。メイン(.nplファイル)、ペイロード(pay)、ブラウザ(bow)、AnyDesk(adc)の4つのモジュールで構成されています。このマルウェアは、侵害チェーンの最後に展開されるAnyDeskクライアントを除けば、常駐化のためのメカニズムがありません。AnyDeskを介して常駐すると、攻撃者はInvisibleFerretを自由に実行できます。
注意が必要なのは、このマルウェアのバックドア機能のほとんどが、コマンドの送信や流出させるデータ、攻撃を拡大する方法の決定など、オペレーターが手動で、またはスクリプトによって制御する必要があるという点です。ESETは観察したInvisibleFerretの全バージョンのバックドアコンポーネントはオペレーターのコマンドによって起動されています。オペレーターによって実行されない唯一の機能は、初期のフィンガープリントの作成であり、これは自動的に行われます。
メインモジュールは、元々はmainという名前でしたが、現在は.nplファイルになっており、BeaverTailがコマンドアンドコントロールサーバーからダウンロードし、ホームディレクトリに保存します。このモジュールは、個々のペイロードモジュールをダウンロードして実行します。図9に示すように、すべてのモジュールには、XORで暗号化されBase64でエンコードされたペイロードが含まれており、その前にXORキーを表す4バイトがあります。その後にexecを介してそれを復号し実行するコードが続きます。各モジュールにはsType変数が含まれます。この変数には、現在の被害者IDが含まれます。このIDは、ダウンロードリクエストで指定されたIDのコピーです。スクリプトファイルのダウンロードリクエストが行われると、このIDがsTypeの値としてC&CサーバーのAPIによって最終的なスクリプトファイルに配置されます。
このモジュールには、base64でエンコードされ、ハードコードされたC&Cアドレスが含まれています。このアドレスは簡単に復号できないように半分に分割されて入れ替えられています。ESETが観察した多くのケースで、このアドレスは先のBeaverTailの検体で使用されたアドレスと同一でした。メインモジュールは、ペイロードモジュールを/payload/<campaign_ID>からユーザーのホームディレクトリの.n2/payにダウンロードして実行します。その後、macOSで実行されている場合(platform.system関数への呼び出しがDarwinを返すかどうかで判断)、終了します。macOS以外のオペレーティングシステムでは、ブラウザモジュールを/brow/<campaign_ID>からユーザーのホームディレクトリの.n2/bowにダウンロードし、別のPythonインスタンスで実行します。
payモジュールは2つの部分で構成されています。1つは情報を収集し、もう1つはバックドアとして機能します。最初の部分には、通常、ハードコーディングされたC&C URL(以前に使用されたものと類似)が含まれており、次の情報を収集します。
図10に示すこれらの情報は、HTTP POSTを使用して「/keys」APIエンドポイントにアップロードされます。
2番目の部分はTCPバックドア、TCPリバースシェルとして機能し、C&Cサーバーからリモートコマンドを受信し、ソケット接続を介して通信します。通常、1245ポートが使用されますが、80ポート、2245ポート、3001ポート、5000ポートも使用されていることが観測されています。この部分にハードコードされるC&C IPアドレスが、過去のアドレスとは異なる場合がありますが、これは最初の展開と、最終的なネットワークアクティビティを分離するためである可能性が高いと考えられます。
2番目のペイロードは、実行されている環境がWindowsかどうかを確認します。Windowsである場合、図11に示すように、pyWinHookを使用して実装されるキーロガーと、pyperclipを使用してクリップボードスティーラーを有効にします。これらのマルウェアは、すべてのキー入力とクリップボードの変更をグローバルバッファに収集して保存し、スクリプト自体が実行されている限り、専用スレッドで動作します。
その後、表3に示す8つのコマンドから構成されるバックドア機能を実行します。
ID | コマンド | 関数 | 説明 |
---|---|---|---|
1 | ssh_cmd | 侵害の痕跡を削除します。 |
|
2 | ssh_obj | シェルコマンドを実行します。 |
|
3 | ssh_clip | キーロガーやクリップボードスティーラーのデータを外部に送信します。 |
|
4 | ssh_run | ブラウザモジュールをインストールします。 |
|
5 | ssh_upload | FTPを使用してファイルやディレクトリを外部に送信します。 |
|
6 | ssh_kill | ChromeとBraveブラウザを終了します。 |
|
7 | ssh_any | AnyDeskモジュールをインストールします。 |
|
8 | ssh_env | FTPを使用して、ユーザーのホームディレクトリとマウントされたドライブからデータをアップロードします。 |
|
表3. InvisibleFerretに実装されているコマンド
各コマンドには、接頭辞ssh_が付けられて命名され、サーバーとの通信時に使用される数値が割り当てられます。受信した各コマンドに対して、新しいスレッドが生成され実行されます。そして、クライアントはすぐに次のコマンドの受信を待機し始めます。コマンドの実行が完了するたびに、コマンドへの返信は非同期で送信されます。双方向通信は、JSON形式で次の2つのフィールドを使用して、ソケットを通じて行われます。
このスクリプトには、データを外部に送信する際にスキップする除外ファイル名やディレクトリ名(ソフトウェアプロジェクトやリポジトリのキャッシュディレクトリや一時ディレクトリなど)のリストや、送信する重要なファイル名前のパターン(環境ファイルや設定ファイル、secret、wallet、private、passwordなどの単語を含むドキュメント、スプレッドシート、その他のファイル)のリストも含まれています。
bowモジュールは、Webブラウザによって保存されたログインデータ、自動入力データ、および支払い情報を窃取する役割を果たします。標的となるブラウザは、Chrome、Brave、Opera、Yandex、Edgeで、すべてChromiumベースです。図13に示すように、3つの主要な各オペレーティングシステム(Windows、Linux、macOS)向けの複数のバージョンがあります。
ブラウザのローカルストレージフォルダを検索し(図14で例を参照)、ログインと支払い情報を含むデータベースを、Windowsでは%Temp%フォルダに、他のオペレーティングシステムでは/tmpフォルダに、次の2つのファイルとして保存します。
保存されたパスワードとクレジットカード番号は、AESを使って暗号化された形式で保存されているため、外部に送信する前に復号する必要があります。このために使用される暗号化キーは、使用しているオペレーティングシステムに基づいて取得されます。図15に示すように、WindowsではブラウザのLocal Stateファイルから抽出され、Linuxではsecretstorageパッケージから、macOSではセキュリティユーティリティから取得されます。
収集された情報(図16を参照)は、「/keys」APIエンドポイントへのHTTP POSTリクエストによってC&Cサーバーに送信されます。
adcモジュールは、この侵害チェーンで特定された唯一の常駐化のメカニズムであり、ハードコードされたログイン認証情報を含む設定ファイルを使用して、被害者のコンピュータにAnyDeskへのアクセスを設定します。
Windowsでは、C:/Program Files (x86)/AnyDesk/AnyDesk.exeが存在するかどうかを確認します。存在しない場合、C&Cサーバー(http://<C&C_IP>:<C&C_port>/anydesk.exe)からanydesk.exeをユーザーのホームディレクトリにダウンロードします。
次に、ハードコードされたパスワードハッシュ、パスワードソルト、トークンソルトの値を設定ファイルに入力して、攻撃者がアクセスできるようにAnyDeskを設定します。設定ファイルが存在しないか、攻撃者が指定したパスワードソルト値が含まれない場合、モジュールはハードコードされたログイン情報を追加するために、設定ファイルを修正しようとします。修正に失敗すると、ユーザーのホームディレクトリにconf.ps1という名前のPowerShellスクリプトを作成して起動しようとします。このスクリーンショットには、設定ファイルを変更するコードが含まれます(図17を参照)。
これらのアクションが完了すると、AnyDeskプロセスは強制終了され、新しい設定をロードするために再起動されます。最後に、adcモジュールは、os.remove関数を呼び出して、自身を削除しようとします。
ESETはその後、少なくとも2024年8月以降から使用されている、大規模な変更が加えられたInvisibleFerretのアップデート版を発見しました。アップデート版は、個別のモジュールに分かれておらず、単一の大きなスクリプトファイルになっています(ただし、ブラウザモジュールとAnyDeskモジュールを選択的にインストールするバックドアコマンドはそのまま残っています)。また、macOSのサポートが強化されており、例えば、コンピュータのホスト名と一緒にユーザー名を収集するなど一部のコードも若干修正されています。
もう一つの変更は、sTypeに加え、gTypeという識別子が追加されたことです。これは、C&Cサーバーからモジュールをダウンロードする際に、sTypeに加えて、第二の被害者/キャンペーン識別子として機能します(例えば、<C&C_IP>:<port>/<module>/<sType>/<gType>)。ESETは、この識別子が外部に送信するデータにラベルを付けるために使用されているのをこれまで確認していません。
この新しいバージョンのInvisibleFerretは、追加のバックドアコマンドであるssh_zcpも実装しており、ブラウザ拡張機能やパスワードマネージャーからTelegramやFTP経由でデータを外部に送信することができます。
InvisibleFerretの新しいコマンドは、最初にChrome、Brave、Edgeブラウザ用の88個のブラウザ拡張機能を探します。これらの拡張機能が存在する場合は、そこからデータを収集し、システムの一時ディレクトリ内のステージングフォルダに保存します。拡張機能の詳細なリストは付録を参照してください。図18にデータを収集するコードを示します。
このコマンドは、ブラウザ拡張機能のデータに加えて、すべてのシステムでAtomicおよびExodusの暗号通貨ウォレットから情報を抽出できます。さらにWindowsでは1Password、Electrum、WinAuth、Proxifier4、Dashlaneからも情報を抽出できます。これらのデータ抽出を図19に示します。
抽出されたデータはアーカイブされ、ボットトークンとTelegram APIを使ってTelegramチャットにアップロードされ、FTPサーバーにもアップロードされます。アップロードが完了すると、InvisibleFerretはステージングフォルダとアーカイブの両方を削除します。
2024年12月、ESETはmlipという名前のモジュールが追加された、別のバージョンのInvisibleFerretを発見しました。これは、C&Cエンドポイント/mclip/から.n2/mlipにダウンロードされます。このモジュールには、ペイロードモジュールの残りの部分から切り離されたキーロギング機能とクリップボードスティーラーの機能が含まれています。
このモジュールは、オペレーターの技術力が進展していることを示しており、このモジュールのキーロギングおよびクリップボードスティーラー機能は、chrome.exeとbrave.exeの2つのプロセスのみに限定されています。過去のバージョンのInvisibleFerretは、すべてのキー入力を記録していました。収集されたデータは新しいAPIエンドポイント「/api/clip」にアップロードされます。
DeceptiveDevelopmentのネットワークインフラストラクチャは、商用ホスティングプロバイダーがホスティングする専用サーバーで構成されており、最も一般的に使用されているプロバイダーはRouterHosting(現在はCloudzy)、Stark Industries Solutions、Pier7ASNの3社です。サーバーAPIはNode.js内に記述されており、表4に示す9つのエンドポイントで構成されています。
APIエンドポイント | 説明 |
---|---|
/pdown | Python環境のダウンロード。 |
/uploads | BeaverTailデータアップロード。 |
/client/ | InvisibleFerretローダー。 |
/payload/ | InvisibleFerretペイロードモジュール。 |
/brow/ | InvisibleFerretブラウザモジュール。 |
/adc/ | InvisibleFerret AnyDeskモジュール。 |
/mclip/ | InvisibleFerretキーロガーモジュール。 |
/keys | InvisibleFerretデータアップロード。 |
/api/clip | InvisibleFerretキーロガーモジュールによるデータアップロード。 |
表4. DeceptiveDevelopmentのC&C APIエンドポイント
ESETが観測した多くのC&C通信は、HTTP経由の通信のために、1224または1244ポート(80または3000ポートが使用されるケースもあり)を介して行われています。そして、TCPソケット経由のバックドアのC&C通信には、1245(80、2245、3001、5000、または5001)が使用されています。クライアントからC&Cサーバーへの通信では、Python環境をダウンロードする場合を除いて、すべてキャンペーンIDが含まれます。InvisibleFerretのダウンロードでは、GETリクエストのURLの末尾にIDが追加されます。データを外部に送信するときに、typeフィールドのPOSTリクエストの一部としてIDが送信されます。ネットワークトラフィックを識別し、どの検体やキャンペーンに属するかを判断するためにキャンペーンIDが利用されています。
ESETが観察したキャンペーンID(sTypeとgTypeの値)は英数字であり、キャンペーンとは直接関連がないと考えられます。gTypeが導入される以前は、sTypeの値のいくつかは、5Team9や7tEaM;など、teamという単語のバリエーションと数字を含むbase64文字列でした。gTypeが導入された後、観測された両方の多くの値は、base64を使用しない純粋な数値になりました。
DeceptiveDevelopmentグループは、北朝鮮とつながりのあるサイバー攻撃者が外貨を獲得するためにすでに使用しているさまざまな攻撃手法に追加されたものであり、窃取の対象を一般的な外貨から暗号通貨へ移行している現在の傾向が反映されています。ESETの調査によって、簡易なツールや手法から高度で高機能なマルウェアへと変化しており、被害者を誘引し、マルウェアを展開する手法も洗練されていることが明らかになりました。あらゆるオンライン求人検索やフリーランスプラットフォームが、偽のリクルーターによってマルウェアの配信に悪用されるリスクがあります。ESETは、このキャンペーンに関連する重大な活動を引き続き観察しており、DeceptiveDevelopmentが暗号通貨を利用するユーザーを標的にするための新たな手段を今後も模索することが予測されます。
SHA-1 | ファイル名 | 検出 | 説明 |
---|---|---|---|
48E75D6E2BDB2B00ECBF4801A98F96732E397858 | FCCCall.exe | Win64/DeceptiveDevelopment.A | トロイの木馬が仕込まれた会議アプリ - ネイティブBeaverTail。 |
EC8B6A0A7A7407CA3CD18DE5F93489166996116C | pay.py | Python/DeceptiveDevelopment.B | InvisibleFerretペイロードモジュール。 |
3F8EF8649E6B9162CFB0C739F01043A19E9538E7 | bow.py | Python/DeceptiveDevelopment.C | InvisibleFerretブラウザモジュール。 |
F6517B68F8317504FDCD415653CF46530E19D94A | pay_u2GgOA8.py | Python/DeceptiveDevelopment.B | InvisibleFerretの新しいペイロードモジュール。 |
01C0D61BFB4C8269CA56E0F1F666CBF36ABE69AD | setupTest.js | JS/Spy.DeceptiveDevelopment.A | BeaverTail。 |
2E3E1B95E22E4A8F4C75334BA5FC30D6A54C34C1 | tailwind.config.js | JS/Spy.DeceptiveDevelopment.A | BeaverTail。 |
7C8724B75BF7A9B8F27F5E86AAC9445AAFCCB6AC | conf.ps1 | PowerShell/DeceptiveDevelopment.A | AnyDeskを設定するPowerShellスクリプト。 |
5F5D3A86437082FA512B5C93A6B4E39397E1ADC8 | adc.py | Python/DeceptiveDevelopment.A | InvisibleFerret AnyDeskモジュール。 |
7C5B2CAFAEABBCEB9765D20C6A323A07FA928624 | bow.py | Python/DeceptiveDevelopment.A | InvisibleFerretブラウザモジュール。 |
BA1A54F4FFA42765232BA094AAAFAEE5D3BB2B8C | pay.py | Python/DeceptiveDevelopment.A | InvisibleFerretペイロードモジュール。 |
IP | ドメイン | ホスティングプロバイダー | 最初に確認された日付 | 詳細 |
---|---|---|---|---|
95.164.17[.]24 | N/A | STARK INDUSTRIES SOLUTIONS LTD | 2024年6月6日 | BeaverTail/InvisibleFerret C&C and staging server. |
185.235.241[.]208 | N/A | STARK INDUSTRIES SOLUTIONS LTD | 2021年4月12日 | BeaverTail/InvisibleFerret C&C and staging server. |
147.124.214[.]129 | N/A | Majestic Hosting Solutions, LLC | 2024年3月22日 | BeaverTail/InvisibleFerret C&C and staging server. |
23.106.253[.]194 | N/A | LEASEWEB SINGAPORE PTE. LTD. | 2024年5月28日 | BeaverTail/InvisibleFerret C&C and staging server. |
147.124.214[.]237 | N/A | Majestic Hosting Solutions, LLC | 2023年01月28日 | BeaverTail/InvisibleFerret C&C and staging server. |
67.203.7[.]171 | N/A | Amaze Internet Services | 2024年2月14日 | BeaverTail/InvisibleFerret C&C and staging server. |
45.61.131[.]218 | N/A | RouterHosting LLC | 2024年1月22日 | BeaverTail/InvisibleFerret C&C and staging server. |
135.125.248[.]56 | N/A | OVH SAS | 2023年6月30日 | BeaverTail/InvisibleFerretのC&Cとステージングサーバー。 |
この表は、MITRE ATT&CKフレームワークのバージョン16を使用して作成されています。
手法 | ID | 名前 | 説明 |
---|---|---|---|
リソース開発 | T1583.003 | インフラストラクチャの取得:仮想プライベートサーバー | この攻撃者は、C&Cやステージングサーバー用のインフラをレンタルしています。 |
T1587.001 | 開発能力:マルウェア | この攻撃者はBeaverTailとInvisibleFerretマルウェアを開発しています。 | |
T1585.001 | アカウントの確立:ソーシャルメディアアカウント | この攻撃者は偽のソーシャルメディアアカウントを作成し、リクルーターのように偽装しています。 | |
T1608.001 | ステージングサーバーの能力マルウェアのアップロード | InvisibleFerretモジュールはステージングサーバーにアップロードされ、そこから被害者のシステムにダウンロードされます。 | |
初期アクセス | T1566.003 | フィッシング:SNSによるスピアフィッシング | 求人検索サイトやフリーランサープラットフォームを介してスピアフィッシングが実行されます。 |
実行 | T1059.006 | コマンドラインインターフェイス:Python | InvisibleFerretは、Pythonで記述されています。 |
T1059.007 | コマンドラインインターフェイス: JavaScript/JScript | BeaverTailにはJavaScriptで記述された亜種があります。 | |
T1204.002 | ユーザーによる実行:悪意のあるファイル | 最初の侵害は、被害者がBeaverTailマルウェアを含むトロイの木馬が仕込まれたプロジェクトを実行すると引き起こされます。 | |
T1059.003 | コマンドラインインターフェイス:Windowsコマンドシェル | InvisibleFerretのリモートシェル機能によって、Windowsコマンドシェルへのアクセスが可能になります。 | |
常駐化 | T1133 | 外部のリモートサービス | AnyDeskリモートアクセスツールをインストールおよび設定することで攻撃者は常駐します。 |
防衛機能の回避 | T1140 | ファイルや情報の難読化解除と復号 | BeaverTailのJavaScriptの亜種は、コードを難読化します。C&Cサーバーのアドレスやその他の設定データも暗号化/エンコードされます。 |
T1564.001 | アーチファクトの隠蔽:ファイルとディレクトリの隠蔽 | InvisibleFerretのファイルは、hidden属性が付けられてディスクにドロップされます。 | |
T1564.003 | アーチファクトの隠蔽:画面の隠蔽 | InvisibleFerretは、画面を表示せずに新しいプロセスを作成します。 | |
T1027.013 | ファイルや情報の難読化:暗号化/エンコードされたファイル | InvisibleFerretのペイロードは暗号化されており、実行前に復号する必要があります。 | |
認証情報へのアクセス | T1555.001 | パスワードの保管場所からの認証情報の窃取:キーチェーン | BeaverTailとInvisibleFerretの両方が、キーチェーンデータを外部に送信します。 |
T1555.003 | パスワードの保管場所からの認証情報の窃取:Webブラウザからの認証情報の窃取 | InvisibleFerretは、Webブラウザに保存される認証情報を外部に送信します。 | |
T1552.001 | 保護されていない認証情報:ファイル内の認証情報 | BeaverTailとInvisibleFerretの両方が、特定のファイルにあるプレーンテキストの認証情報/キーを外部に送信します。 | |
探査 | T1010 | 実行されているアプリケーションの検出 | InvisibleFerretキーロガーは、現在アクティブなウィンドウの名前を収集します。 |
T1217 | ブラウザブックマークの検出 | InvisibleFerretは、ブラウザに保存された認証情報やその他のデータを外部に送信します。 | |
T1083 | ファイルおよびディレクトリの検出 | InvisibleFerretバックドアは、ファイルシステムをブラウズし、ファイルを外部に送信できます。 | |
T1082 | システム情報の検出 | BeaverTailとInvisibleFerretの両方が、システム情報を収集します。 | |
T1614 | システムの場所の検出 | InvisibleFerretは、IPアドレスの位置を照会して、キャンペーンの地理情報を特定します。 | |
T1016 | システムネットワーク構成の検出 | InvisibleFerretは、プライベートIPアドレスやパブリックIPアドレスなどのネットワーク情報を収集します。 | |
T1124 | システム時間の検出 | InvisibleFerretは、システム時間を収集します。 | |
ラテラルムーブメント | T1021.001 | リモートサービス:RDP(リモートデスクトッププロトコル) | InvisibleFerretは、AnyDeskを使用して常駐します。AnyDeskは攻撃者によるリモートアクセスを許可するために使用されます。 |
収集 | T1056.001 | 入力情報の取得:キーロギング | InvisibleFerretにはキーロガー機能が含まれます。 |
T1560.002 | 収集したデータのアーカイブ:ライブラリ経由のアーカイブ | InvisibleFerretを使用して外部に送信されるデータは、Pythonのパッケージであるpy7zrとpyzipperを使用してアーカイブされる場合があります。 | |
T1119 | 自動収集 | BeaverTailとInvisibleFerretの両方が、一部のデータを自動的に外部に送信します。 | |
T1005 | ローカルシステムのデータ | BeaverTailもInvisibleFerretの両方が、ローカルシステムからデータを外部に送信します。 | |
T1025 | リムーバブルメディアのデータ | InvisibleFerretは、リムーバブルメディアをスキャンして、ファイルを外部に送信します。 | |
T1074.001 | データの保存:ローカルデータの保存 | InvisibleFerretは、認証情報を抽出する前に、ブラウザデータベースを一時フォルダにコピーします。ZIP/7zアーカイブを経由して送信する場合、ファイルはアップロードされる前にローカルで作成されます。 | |
T1115 | クリップボードのデータ | InvisibleFerretにはクリップボードスティーラー機能が含まれています。 | |
C&C(コマンド&コントロール) | T1071.001 | 標準のアプリケーションレイヤープロトコル:Webプロトコル | C&Cとの通信はHTTPを介して行われます。 |
T1071.002 | 標準のアプリケーションレイヤープロトコル:ファイル転送プロトコル | InvisibleFerretは、FTP経由でファイルを外部に送信します。 | |
T1571 | 非標準ポート | BeaverTailとInvisibleFerretは、非標準ポート1224、1244、1245を使用します。 | |
T1219 | リモートアクセスツール | InvisibleFerretは、常駐のためのメカニズムとしてAnyDeskをインストールできます。 | |
T1095 | アプリケーションレイヤープロトコル以外の手法: | TCPはコマンドアンドコントロールサーバーとの通信に使用されます。 | |
情報の外部への送信 | T1030 | データ転送サイズの制限 | InvisibleFerretは、場合によって特定のファイルサイズ以下のファイルのみを外部に送信します。 |
T1041 | コマンドアンドコントロールサーバーのチャネルからのデータの流出 | 一部のデータはHTTP経由でC&Cサーバーに送信されます。 | |
T1567.004 | Webサービスを介したデータの外部への流出:Webhookを介した外部への送信 | TelegramのWebhook(InvisibleFerretのssh_zcpコマンド)を介して、ZIP/7zファイルが送信される場合があります。 | |
影響 | T1657 | 金融資産の窃取 | このキャンペーンの目的は暗号通貨を窃取することであり、InvisibleFerretは保存されたクレジットカード情報を送信していることも確認されています。 |
新しいInvisibleFerretが標的とするブラウザ拡張機能のリストを以下に示します。