エグゼクティブサマリー
- Mandiant は、2022 年 7 月下旬にイランの野党組織が開催する会議に先立って、アルバニア政府を標的にした ROADSWEEP ランサムウェア ファミリーと Telegram のペルソナを特定しました。
- これまで知られていなかったバックドア CHIMNEYSWEEP と、ZEROCLEAR ワイパーの新しい亜種も関与している可能性があります。
- CHIMNEYSWEEP マルウェアの配布データとおとりのコンテンツ、作戦のタイミングと政治をテーマにしたコンテンツ、および ZEROCLEAR ワイパーの関与の可能性は、イランの攻撃者が関与している可能性が高いことを示しています。
- この活動は、NATO 加盟国に対して行われたイランの破壊的なサイバー作戦の地理的拡大です。これは、イランの利益に反していると見なされた国に対して破壊的なツールを使用する際のリスク許容度が高まっていることを示している可能性があります。
- 関連する Yara ルールと MITRE ATT&CK テクニックについては、テクニカル アネックスを参照してください。
(T1007、T1012、T1027、T1033、T1055、T1057、T1070.004、T1070.006、T1082、T1083、T1087、T1112、T1113、T1134、T1489、T1497.001、T1518、T1543.003、T1025、6.0 T1622)。
脅威の詳細
2022 年 7 月中旬、Mandiant は ROADSWEEP と呼ばれる新しいランサムウェア ファミリを特定しました。このファミリは、アルバニア政府を標的にしていることを示唆する、政治をテーマにした身代金メモをドロップします。さらに、「HomeLand Justice」という名前のフロントは、2022 年 7 月 18 日にアルバニア政府の Web サイトと市民サービスに影響を与えた破壊的な活動の功績を主張しました。ムジャヒディーン・エ・ハルク/イラン人民モジャヒディン組織(MEK、MKOまたはPMOIとしても知られる)の表向きのメンバーのアルバニア政府文書および居住許可とされるものと並んで、以前は米国によってテロリストグループとして指定されていたイランの野党組織国務省。
- 2022 年 7 月 18 日、アルバニア政府は、破壊的なサイバー活動のため、「オンライン公共サービスおよびその他の政府 Web サイトへのアクセスを一時的に閉鎖する」必要があると発表した声明を発表しました。
- 2022 年 7 月 22 日、ROADSWEEP ランサムウェアのサンプルがアルバニアから公開マルウェア リポジトリに送信されました。実行が成功すると、この ROADSWEEP サンプルは、「なぜ私たちの税金を DURRES テロリストの利益のために費やすべきなのか?」 というテキストを含む身代金メモを投下します。 (図1)。ドゥラスは港湾都市であり、アルバニアで 2 番目に人口の多い都市です。
2022 年 7 月 21 日、「HomeLand Justice」という名前のフロントがウェブサイト「homelandjustice.ru」を利用して、「HomeLand Justice」という名前の Telegram チャネルへのリンクとともに、アルバニア政府に対するランサムウェア作戦に関する表向きのニュース記事の公開を開始しました。アルバニア市民によって運営されていることを暗示するこの Web サイトは、「ワイパー アクティビティ」のビデオでランサムウェア活動の功績を主張し、表向きはアルバニア政府内部の文書を、MEK メンバーのアルバニア居住許可であると主張するものとともに投稿しました。 .
- Web サイト「homelandjustice[.]ru」と Telegram チャネルはどちらも、ROADSWEEP で使用されている壁紙と同じように見えるバナーを使用しており、上記の身代金メモと同じ政治をテーマにした文言が含まれています (図 2)。プラットフォームは、このバナーを使用して、ホスト上で実行されたとされるワイパーのビデオも投稿しました。
- 2022 年 7 月 26 日にアルバニア政府に対する破壊的な活動に関するニュース記事への複数のリンクを投稿した後、HomeLand Justice は、アルバニア政府の汚職を主張するメッセージでテレグラム チャンネルの操作の功績を直接主張し、身代金メモからのメッセージを繰り返しました。 (図 3)。注目すべきは、ハッシュタグ #MKO、#ISIS、#Manez、#HomeLandJustice を使用した投稿です。マネズはドゥラス郡の町で、7 月 23 ~ 24 日に開催される予定だった世界自由イラン会議の開催地です。
- homelandjustice.ru の Web サイトと Telegram チャネルの両方に、表向きはアルバニア政府機関に属していると思われる文書と、MEK の疑わしいメンバーに属していると思われる居住許可、結婚証明書、パスポート、およびその他の個人文書と思われる文書が掲載されました。
CHIMNEYSWEEP バックドアは、イランのディアスポラと反体制派を標的にする可能性が高い
Mandiant はさらに、Telegram または攻撃者が所有するインフラストラクチャをコマンド アンド コントロールに使用し、スクリーンショットの撮影、ファイルの一覧表示と収集、リバース シェルの生成、キーロギング機能のサポートを行うことができるバックドアである CHIMNEYSWEEP を特定しました。 CHIMNEYSWEEP は ROADSWEEP とコードを共有しており、観測されたおとりコンテンツに基づいて、2012 年にペルシア語とアラビア語の話者をターゲットにするために使用された可能性があります。
- CHIMNEYSWEEP と ROADSWEEP は、同一の動的 API 解決コードを含め、複数のコード オーバーラップを共有します。共有コードには、実行時に Windows API 関数文字列を復号化するための埋め込み RC4 キーが含まれています。これは、復号化された後、LoadLibrary および GetProcAddress 呼び出しを使用して解決されます。どちらの機能も、同じ Base64 カスタム アルファベットを共有します。1 つは復号化キーのエンコードに使用され、もう 1 つはコマンド アンド コントロールに使用されます。
- CHIMNEYSWEEP と ROADSWEEP はどちらも、RC4 キー「8c e4 b1 6b 22 b5 88 94 aa 86 c4 21 e8 75 9d f3」とカスタム Base64 アルファベット「wxyz0123456789.-JKLMNOPghijklmnopqrstuvQRSTUVWXYZabcdefABCDEFGHI」を使用します。
- CHIMNEYSWEEP は、無害なおとり文書として使用される可能性が高い Excel、Word、またはビデオ ファイルのいずれかと一緒に、有効なデジタル証明書で署名された自己解凍型アーカイブによって投下されます。ただし、これらのドキュメントは、CHIMNEYSWEEP の実行時に自動的に開かれるようには見えません。
- おとり文書には、表向きはレバノンの個人と思われるアラビア語の名前のリストと、イランの反対派グループであるムジャヒディーン・エ・ハルク (MEK) の元指導者であるマスード・ラジャビの姿が含まれていました (図 2)。
- 2012 年に使用された CHIMNEYSWEEP の反復を特定しました。
ゼロクリア
2022 年 7 月 19 日、アルバニア政府が破壊的な活動を発表した 1 日後、アルバニアのユーザーが ZEROCLEAR ワイパー ペイロードを公開マルウェア リポジトリに送信しました。 ZEROCLEAR ペイロードはオペレータからコマンド ライン引数を受け取り、RawDisk ドライバを使用してファイル システムを破壊します。
ZEROCLEAR サンプルが今回の作戦で使用されたのか、破壊的な作戦で使用されたのかを独自に証明または反証することはできませんが、このマルウェアには、中東での破壊的な活動を支援するためにそれを展開しているイラン関連の脅威アクターとのリンクがあることが以前に公に報告されています。最近では2020年。
帰属
Mandiant は、この活動を特定の脅威アクターに関連付ける証拠を持っていませんが、イランの目標を支援するために活動した 1 つまたは複数の脅威アクターが関与していることを適度な自信を持って評価しています。これは、破壊的な活動のタイミング、HomeLand Justice ペルソナの Telegram チャネルの MEK に焦点を当てたコンテンツ、およびペルシア語とアラビア語の話者を標的とする CHIMNEYSWEEP マルウェアの長い歴史に基づいています。
- ROADSWEEP身代金メモとHomeLand Justice Telegramチャネルで言及されたDurrës郡のManèz市は、2022年7月23〜24日に会議「The World Summit of Free Iran」を主催する予定でした。アルバニアのメディアは、 7月22日、「テロ攻撃の脅威」により会議が延期されたと発表した。
- 自由イランの世界サミットは、イラン政府に反対する団体、具体的には MEK のメンバーがアルバニアのドゥラス郡マネズで開催する会議です。
- イランおよび親イランの情報作戦は、偽造文書などの捏造された資料を利用することを含め、敵対的なメッセージで MEK を標的にすることがよくありました。たとえば、親イラン キャンペーンRoaming Mayflyは、さまざまな西側諸国が MEK を支持していると主張する偽りの物語を宣伝してきました。
- 私たちは以前、バーレーンとサウジアラビアの組織を標的にしたとされるイラン関連の疑いのあるZEROCLEARとDUSTMANのワイパーについて報告しました。
ただし、ランサムウェア攻撃は以前の CHIMNEYSWEEP 操作よりもはるかに複雑であることに注意してください。これにより、現時点では洞察が不足しているチーム間のコラボレーションやその他のシナリオの可能性が高まります。このクラスターの調査を継続しており、可能な限り最新情報を提供します。
展望と影響
Mandiant は、UNC788 などのサイバー スパイ グループや、 MarkiRATとして一般に知られているSCRAPWOODなどのマルウェアによる、海外のイランの反体制派や反対派グループを標的とするイランの脅威活動について頻繁に報告しています。さらに、ブラック・シャドウやモーゼス・スタッフなど、イランと関係があると疑われるペルソナによる最近の多数のロック・アンド・リーク作戦には、主にイスラエルの組織を当惑させようとする破壊活動が含まれています。
ランサムウェアを使用して、イランの反政府グループの会議が開催される予定の同じ週に、NATO 加盟国の政府の Web サイトと市民サービスに対して政治的動機による破壊的な作戦を実施したことは、イラン関連の脅威アクターによる特に厚かましい作戦となるでしょう。 .イランの核合意をめぐる交渉が停滞し続けているため、この活動は、イランが今後のサイバー ネットワーク攻撃作戦の実行に自制心を失っている可能性があることを示しています。この活動は、NATO 加盟国に対して行われたイランの破壊的なサイバー作戦の地理的拡大でもあります。これは、イランの利益に反していると見なされた国に対して破壊的なツールを使用する際のリスク許容度が高まっていることを示している可能性があります。
技術付録 A: ROADSWEEPランサムウェア
ROADSWEEP は新たに発見されたランサムウェア ツールで、実行時にデバイス上のファイルを列挙し、RC4 を使用してコンテンツをブロック単位で暗号化します。ウィンドウ API 名、マルウェア構成パラメーター、およびランサムウェア メモの基礎は、ROADSWEEP 内で RC4 暗号化されています。実行中、ROADSWEEP はこれらの暗号化された文字列を復号化し、必要なインポートを動的に解決します。
- GoXml.exe (MD5: bbe983dba3bf319621b447618548b740)
- ROADSWEEP 破壊的ペイロード
- 2016/04/30 17:08:19 作成
ROADSWEEP を正しく実行するには、4 つのコマンド ライン引数が必要です。そうしないと、ROADSWEEP はメッセージ ボックスを生成し、実行を停止します。 ROADSWEEP が正常に実行されると、次のグローバル ミューテックスが作成されます。
- abcdefghijklmnoklmnopqrstuvwxyz01234567890abcdefghijklmnopqrstuvwxyz01234567890
初期化の後、ROADSWEEP は Windows GetProcAddress API を使用して必要な API の解決を開始します。関数名は、ハードコードされたキー「8c e4 b1 6b 22 b5 88 94 aa 86 c4 21 e8 75 9d f3」で RC4 を使用して暗号化されます。
ROADSWEEP には複数の埋め込みスクリプトが含まれており、追加のコマンドを実行したり、被害者のデバイスから自分自身を削除したりするために使用されます。これらのスクリプトがディスクに書き込まれることはありません。代わりに、ROADSWEEP は新しいコマンド プロンプト (cmd.exe) を作成し、パイプを使用してこれらのコマンドをプロセスに送信します。スクリプトは RC4 暗号化ブロックとしてバイナリ内に埋め込まれ、実行時にペイロードによって復号化されます。 ROADSWEEP によって復号化された最初のスクリプトは、SystemRestore やボリューム シャドウ コピーなどの設定を無効にするとともに、重要なサービスやプロセスを無効にします。
ROADSWEEP は、実行後に自分自身を削除するために使用される次のスクリプトも解読します。
ping 1.1.1.1 -n 1 -w 3000 > Nul & Del /f /q “%s”
次に、ROADSWEEP は、RC4 で暗号化され、バイナリ自体に埋め込まれた構成値を抽出します。 1 つ目は、暗号化が行われるときに避けるべき拡張子のリストです。
- 。EXE
- .dll
- .sys
- .lnk
- .lck
ROADSWEEP は、図 1 に示すように、ランサムウェア メモ「How_To_Unlock_MyFiles.txt」(MD5: 44d1c75815724523a58b566d95378825) のファイル名とメモ自体も復号化します。
ファイルの作成後、各ファイルの暗号化に使用される暗号鍵が計算されます。キーは、図 6 に示すアルゴリズムを使用してランダム データ ストリームを生成し、この値を MD5 でハッシュして、これを RC4 キーとして使用することによって導出されます。
次に ROADSWEEP は、埋め込まれた RSA 公開鍵を使用してこの鍵を暗号化し、Base64 でエンコードおよび暗号化された「回復鍵」をメッセージ自体に追加して、ランサムウェア メッセージのフォーマットに進みます。 Base64 エンコーディングでは、”wxyz0123456789.-JKLMNOPghijklmnopqrstuvQRSTUVWXYZabcdefABCDEFGHI” のカスタム アルファベットが使用されます。
次に、ROADSWEEP は被害者のデバイス上のすべての論理ドライブを列挙し、ドライブが次のいずれかであるかどうかを確認します。
- ドライブ_リムーバブル
- ドライブ_固定
- ドライブ_リモート
- ドライブ_CDROM
ROADSWEEP は、検出されたドライブごとに、そのドライブ内のすべてのファイルの暗号化を担当する新しいスレッドを初期化します。このスレッドは、Windows の FindFirstFileW および FindNextFileW API を使用してファイル システムを列挙します。ルート ディレクトリごとに、上記の内容とファイル名でランサムウェア メモが作成されます。
これに続いて、ROADSWEEP は、ディレクトリ内のファイルが抽出された拡張子リストと一致するかどうかを確認します。一致しない場合、ファイルは暗号化されています。暗号化プロセスは、ファイルの名前を「.lck」拡張子に変更することによって行われます。次に ROADSWEEP は、ファイルの作成時刻、最終アクセス時刻、および最終書き込み時刻を取得し、これらを内部に保存します。これらの値は、ワイプ後にファイル時間を保持するために使用されますが、その目的は現在不明です。
その後、ROADSWEEP はファイルを開き、GetFileSize API を使用してサイズを計算します。次に、ファイルのコンテンツを 0x100000 のブロックに分割することで、ROADSWEEP はデータを読み込み、RC4 を使用してチャンクを暗号化し、ファイルをディスクに上書きします。これは、ファイル全体が上書きされるまで完了します。
これに続いて、前述の自己削除スクリプトが実行され、プロセスが終了します。
Technical Annex B: ZEROCLEARバリアント
オペレーターからコマンド ライン引数を受け取り、RawDisk ドライバーを使用してファイル システムを破壊する ZEROCLEAR ペイロードを特定しました。
- cl.exe (MD5: 7b71764236f244ae971742ee1bc6b098)
- ZEROCLEAR 破壊的なペイロード
- 2022/07/15 13:26:28 作成
最初のコマンド ライン引数は、次のいずれかでなければなりません。
- “wp” (デフォルト) – ElDos ドライバーを使用してディスクを消去します。これは、ワイパー アクティビティが発生するためにドライバーが実行されていることを想定しています。
- “in” – rwdsk.sys という名前のドライバーをインストールして開始します。このドライバーは、ZEROCLEAR と同じディレクトリにあると予想されます。
- 「un」 – rwdsk という名前のドライバーをアンインストールし、ディスク上のファイルを削除します。
2 番目の引数は、オペレーターが破損させようとしているドライブ文字です。以前の ZEROCLEAR の亜種はシステム ドライブのみを消去し、GetSystemDirectoryW API を呼び出して決定しました。
次に、ZEROCLEAR は次のハンドルを開き、RawDisk ドライバへのハンドルを開きます。
- “?RawDisk3<arg2>#B4B615C28CCD059CF8ED1ABF1C71FE03C0354522990AF63ADF3C911E2287A4B906D47D”
次に、Windows IOCTL_DISK_GET_DRIVE_GEOMETRY_EX、IOCTL_DISK_GET_DRIVE_GEOMETRY、および IOCTL_DISK_GET_LENGTH_INFO DeviceIoControl 呼び出しを使用してディスク サイズを計算します。 ElDos ドライバーは、データを値「0」で上書きするために使用されます。
技術付属書 C: チムニースイープバックドア
Mandiant は、CHIMNEYSWEEP の感染経路を明らかにすることはできませんでしたが、ドロッパーには有効なデジタル署名があることを確認しました。このドロッパーには、CHIMNEYSWEEP インストーラーをドロップするだけでなく、Excel または Word ドキュメント、または MP4 ビデオ ファイルも含まれています。
ドロッパーは、Windows キャビネットの自己解凍型ファイルの署名済みバージョンであり、現在失効している証明書「Atheros Communications Inc.」によって署名されています。 2022 年 7 月 28 日現在、ROADSWEEP キャンペーンで使用された証明書は失効していません。 DUOが指摘したように、この証明書のパスワードは広く利用されていましたが、歴史的に APT41 もこの署名を使用していることが確認されています。攻撃者が署名証明書とドロッパーを選択したのは、正当な Atheros 証明書が、正当なドロッパーを使用して正当なドライバーを配布するために使用されたという事実に基づいている可能性があります。これは、攻撃者が高度な運用上のセキュリティを持っていることを示しています。
実行時に、自己解凍型ツールは「Cabinet」という名前のリソースを見つけてディスクにドロップし、unpack.exe という名前のプロセスを実行します。
チムニースイープのサンプル
- 利用できません (MD5: df9ab47726001883b5fcf58b56b34b41)
- チムニースイープの裏口
- unpack.exe でインストール (MD5: 8c8bbe3a4a23cd4cc96c12af5fb1199b)
- wextract.exe.mui に含まれています (MD5: 19068e8228b6b8f5528489fa70779b2b)
- コンパイル時間: 2021/07/26 13:39:17
- C&C サーバー:
- 電報更新[.]com
- アビラ[.]株式会社
- windowssupadates[.]com
- AppxProviders.dll (MD5: f3c977830bf616b9061d7aee5ce0b2f2)
- チムニースイープの裏口
- コンパイル時間: 2021/07/26 13:39:17
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- AppxProviders.dll (MD5: 7f6db4493c6a76eb44534306291ea85f)
- チムニースイープの裏口
- コンパイル時間: 2021/07/26 13:39:17
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- AppxProviders.dll (MD5: 3a1033cb1eb06c2cd5e91c539cf8a519)
- チムニースイープの裏口
- コンパイル時間: 2021/07/26 13:39:17
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- 利用できません (MD5: 23643b7bd48a200889a4613a0e0a86e4)
- チムニースイープの裏口
- インストール者: 利用不可 (MD5: 49d72f9212d5653f5be9f764d8c9df24)
- コンパイル時間: 2021/06/11 22:53:53
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- 利用できません (MD5: 9c09d147dfbc98d5e6e051fe1ed0033d)
- チムニースイープの裏口
- unpack.exe でインストール (MD5: 38e0fa41e9519d4783766992c203e794)
- コンパイル時間: 2020/01/25 18:11:10
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- 利用できません (MD5: 5cc183702fae8cc23a55037c1efab5e5)
- チムニースイープの裏口
- UNAVAILABLE によってインストールされました (MD5: 92c61e3047297136701c25deb658b35a)
- コンパイル時間: 2020/09/21 11:44:32
- C&C サーバー:
- 電報更新[.]com
- avira.ltd
- windowssupadates[.]com
- ssv.dll (MD5: 77a369e5e49e7e62d8eef2c00cd02950)
- チムニースイープの裏口
- コンパイル時間: 2018/10/08 17:28:39
- C&C サーバー:
- cloud-avira[.]com
- pgp.eu[.]com
- サーバー-avira[.]com
- skype.se[.]ネット
- uk2privat[.]com
- update-pgp [.] com
実行
ドロッパーによってドロップされた後、インストーラーが実行されます。サイズを大きくするためにヌル バイト (0x00) が埋め込まれているインストーラーは、埋め込まれた実行可能ファイルをディスクに展開し、バックドア自体を実行します。インストーラーは最初にペイロードを隠しストア (“C:ProgramDataMicrosoft Installer{EA2C6B24-C590-457B-BAC8-4A0F9B13B5B8}Force”) に “md” としてドロップします。一部のインストーラーは、C:WindowsSystem32smss.exe から、ドロップされたファイルの CreationTime、LastAccessTime、LastWrite 時刻を偽造します。
次にインストーラは、デバイスがFaronics の DeepFreeze を現在実行しているかどうかを確認する「Alloc」エクスポートを実行しますが、これは Mandiant によって分析されたサンプルには適用されません。プロセス名に「creensaver.」が含まれている場合、バックドアはイメージを %SYSTEM32%Slui に書き込み、「MicrosoftWindowsLicense ManagerLicenseExchange」という名前のタスクを実行します。 Alloc は最終的に、バックドアを開始する Control_Provider エクスポートを呼び出します。
主な機能は、インストーラーによって呼び出される次のエクスポート「RatingSetupUI」で提供されます。このエクスポートは、すべてのコマンド アンド コントロール (C&C) インタラクションとバックドア機能を担います。
最後の 2 つのエクスポートは、更新プロセスに関連しています。 「Control_Provider」は更新プロセスを管理し、「Telephon」は「Control_Provider」機能を実行します。
バックドアが管理者として実行されていない場合、バックドアは埋め込まれたペイロードを使用して権限をエスカレートする可能性があります。 「rerunadmn」という名前のミューテックスがバックドアによって内部的に使用され、2 つの RC4 で暗号化されたペイロードが抽出されます。最初のペイロードは .NET ローダーで、2 番目のペイロードをロードし、タイプ「vjp5ZPP9AidVjXxofy」とメソッド「s7tajdxvX」を呼び出します。ローダー (MD5: 779940f675ff4ab4e8cab7a1b7cf5d3c ) は、最初にロードされた .NET モジュールを列挙して、上記のクラスとメソッドを探します。それらが存在する場合, それはそのモジュールを実行します. モジュールがロードされていない場合, アセンブリがロードされ、メモリ内で実行されます. バックドアは、ペイロードがすでに管理者として実行されている場合、またはパスへのパスである場合、文字列「AD」を通過します.ディスク上の一時ファイル, ロードされた .net モジュールに直接. この一時ファイルは、SoftwareAppDataLoadGLXaex のコンテンツを書き込み、そのコンテンツを Windows %TEMP% ディレクトリに APPX.<random_values という名前で書き込むことによって作成されます。 >.tmp. このファイルはバックドア自体のコピーです. ペイロードがローダーからのエクスポート CP を解決できない場合は、次のコマンドで PowerShell の呼び出しに戻り、2 番目のペイロードへのパス、タイプとメソッドとそのどちらかer AD または 2 番目のモジュールへのパス:
[Reflection.Assembly]::LoadFile(“%s”)n$i=””n$r=[%s]::%s(“%s”,[ref] $ i)necho $r,$in
その後、実行は 2 番目のペイロード (MD5: 3633b3d69060a5882656b69f81655f0a ) 内で続行され、ペイロードが管理者権限で実行されていることを確認します。このペイロードは、reactor によって難読化され、実行全体で使用される暗号化された文字列が含まれています。実行時に、ペイロードはミューテックス「rerunadmn」と「subttoadmn」を作成します。このモジュールは、次の手法を使用してペイロードを管理者として実行します。
- Windows の「SilentCleanup」スケジュール タスクを利用します。このタスクは、%windir%system32cleanmgr.exe で実行されている実行可能ファイルを実行し、ペイロードは Windows レジストリ環境キーを使用して、%windir% 変数を c:Windows を指すように変更します。次に、ペイロードは新しい System32 フォルダを作成し、内容が「slc」の .cfg ファイルとともに、このフォルダに cleanmgr.exe (MD5: 779940f675ff4ab4e8cab7a1b7cf5d3c) という埋め込みペイロードをコピーします。これに続いて、タスクが実行されます。この手法は、metasploit 内のbypassuac_silentcleanup と呼ばれる手法に似ています。
- Windows CMSTP.exe バイナリを利用して、悪意のある Microsoft Connection Manager プロファイルをデバイスにインストールします。この手法は、cln.vbs を c:windowstemp フォルダー (MD5: 7a77c2930f0457ed2dd622e9739c7d3d) にドロップし、イーサネット サービス用の .ini ファイルを作成します。この ini ファイル内で、ペイロードには 2 つの RunPreSetupCommandsSection 値が含まれています。1 つはペイロード自体用で、もう 1 つは cln.vbs スクリプトの実行用です。その後、正規の cmstp.exe がホスト上で実行され、ホストがバックドアを実行してから、クリーンアップ スクリプトを実行します。この手法は、 Oddvar Moeによって 2017 年に公開された手法と同じです。
CHIMNEYSWEEP には、次の主要な機能があります。
- スクリーンショットの収集: 侵害されたデバイスのスクリーンショットをタイマーで撮影し、ディスクに保存します。または、スクリーンショットを撮ってアップロードするタスクを実行することもできます。
- ファイルの収集とリスト: 新しいリムーバブル ドライブを監視し、必要に応じてディレクトリ リストを実行し、セット リストに一致するファイルのディレクトリを列挙し、コマンド アンド コントロール サーバーにファイルをアップロードするタスクを実行できます。
- キーロギング: クリップボードの内容を監視し、ディスクへのキー ロギングを実行します。
- リバース シェル: 攻撃者が利用できるリバース シェルが含まれています。
初期設定フォーマット
バックドアには、ペイロード内で暗号化されているか、レジストリ (SoftwareAppDataLowGLXSetting) に保存されている設定が含まれています。レジストリに格納されている値は、更新メカニズムから提供されます。構成はタグ {BEGIN} と &{END} を使用して分割され、設定内の各値は整数によって参照されます。 C&C 値を抽出するために、パーサーは値 30 ~ 39 への参照を格納します。各参照は、順番に異なる C&C および URI にすることができます。
分析に基づいて、ID が次の設定に対応していると評価します。
ID |
目的 |
1 |
ファイル収集の実行 |
2 |
新しいドライブのディレクトリ リストを実行する |
3 |
キーのロギングを実行する |
4 |
クリップボード データの監視 |
5 |
アクターがスクリーンショットを撮る必要があるかどうかに関するブール値 |
6 |
各スクリーンショット間のタイムアウト値 |
7 |
BMP2JPGpourVBFrance エクスポートのデフォルトの JPEG 品質 |
8 |
システム情報コマンドの実行 |
9-29 |
ない |
30-39 |
C&C情報 |
40 |
ファイル コレクションの構成 |
ネットワーク通信とコマンド
CHIMNEYSWEEP の初期化中に、https://api.telegram.org/<random_value> に対して HTTP GET 要求を行うスレッドが作成されます。応答で文字列「{“ok”:false」がチェックされ、その文字列が存在する場合、攻撃者は C&C 通信に Telegram を使用しようとします。
攻撃者は、次の Telegram ボットを使用しました。
URI パス |
ボットのユーザー名 |
ボットの本名 |
チャンネルID |
bot661217919:AAG9PrAybrKF5y8HxMA14THNZtWXw5Sv4w |
net21007bot |
net21007 |
-1001262963819 |
bot692407219:AAFlfj9N3gx7vCJlsFi3Ej0qzZgpL8CNmj0 |
net11007bot |
net11007 |
-1001188059110 |
これらの Telegram チャネルは、脅威アクターによってかなりの期間使用されていたようで、個々のタスクに関連する数十万のメッセージが含まれています。バックドアは、 Telegram の GetUpdates API エンドポイントを使用して、ボットにメッセージのリストを返します。次に、バックドアはこのデータを解析して、特定のコマンドを実行したり、追加のペイロードをダウンロードしたり、リバース シェルを作成したりします。 Telegram チャネルで送受信されるデータは、Base64 と ROADSWEEP と同じアルファベットを使用してエンコードされます。
Telegram のコンテキスト内で、CHIMNEYSWEEP は、TL が前に付いたコンピューター名とユーザー名に基づいて、被害者の一意の識別子を使用します。この ID は、特定のデバイスのコマンドをフィルタリングするために使用されます。
TL_<コンピューター名>-<ユーザー名>
被害者の識別子に続いて、バックドアは文字列 1 を使用して更新プロセスのタスクを示し、2 を使用してホストで実行するコマンドを示します。
Telegram が利用できない場合、攻撃者は攻撃者が所有するインフラストラクチャと通信します。このインフラストラクチャはペイロード内に埋め込まれており、次の 1 つまたは複数が含まれる場合があります。
- http://skype.se.net/cm.php
- http://update-real.com/cm.php
- http://windowsupadates.com/cm.php
- http://update-pgp.com/cm.php
- http://uk2privat.com/cm.php
- http://server-avira.com/cm.php
- http://pgp.eu.com/cm.php
- http://cloud-avira.com/cm.php
- http://telegram-update.com/cm.php
- http://avira.ltd/cm.php
C&C 通信プロトコルは、引数「do」を使用してコマンド ID を指定し、「arg」を使用して関連データを転送する、サーバーへのいくつかの HTTP 要求で構成されます。これらのサーバーへの通信は、被害者のコンピュータ名とユーザー名を次の形式で含む特定の User-Agent を使用して行われます。
<status_code>:—:<Computer_Name>-<User_Name>:—:init:—:www:—:MNEW
初期化時に、バックドアは 2 つのネットワーク スレッドを作成します。1 つは更新を管理するため、もう 1 つはタスクを管理するためです。
コマンド ID |
目的 |
応答 |
0 |
プラグインの更新プロセスを開始する |
この通信チャネルの現在の C&C やレジストリの設定など、バックドア内の設定を更新します |
2 |
コア バックドアを更新する |
RC4 で暗号化された実行可能ファイルがディスクに書き込まれ、時間が 2010 年から 2021 年の間にタイムスタンプされてから実行されました。バックドアは、実行可能ファイルを実行する前にミューテックス「runupdate」を使用し、プロセスが戻った後、ミューテックス「runupdateok」をチェックします。このミューテックスが存在する場合、更新を要求したバックドア インスタンスは終了します。 |
20 |
ファイルをダウンロードして実行する |
ディスクに書き込まれてから実行される RC4 暗号化データ。 |
22-28 |
追加のプラグインをダウンロードする |
レジストリ値に書き込まれる RC4 暗号化データ。これらのプラグインの目的は完全には理解されていませんが、Mandiant はスクリーンショット コンバーターに「p22jpd」が使用されていることを確認できました。 |
更新プロセス
CHIMNEYSWEEP は、実行可能ファイルをダウンロードすることで自身を更新できます。 Mandiant は、このアップデータのコピーを取得できませんでした。ただし、この更新メカニズムは Control_Provider エクスポートを実行する可能性があります。このエクスポートは、runupdateok、baserun、heyirunadmn、および corerun を含む多数のミューテックスを確立します。アップデータ ロジックは、最初にミューテックス runupdate を作成し、Control_Provider によってチェックされます。次に、runupdateok ミューテックスを待ってから、それ自体を強制終了します。
タスキング通信
C&C サーバーまたは Telegram からの受信タスクを処理するために、2 番目のスレッドが開始されます。このコマンドは、サーバーからリクエストをダウンロードし、このリクエストを CHIMNEYSWEEP によって解析される形式に解析することによって効果的に機能します。ペイロードは、Telegram のカスタム Base64 アルゴリズムを使用して配信されるか、標準の C&C サーバーのプレーン テキストで配信されます。
Mandiant は、使用された個々のフィールドを特定することはできませんでしたが、これらは将来のために予約されているか、バックドアの歴史的な繰り返しで使用されている可能性があると考えています。
コマンドは、角括弧で囲まれた 12 個の個別の引数で構成されます。図 10 に示すように:
バックドアは、「[Z]」の存在と、文字列が「]」で終わっていることを確認します。その後、引数はメインの C&C ループに戻されます。タイムアウトは、システムでコマンドを実行する前に待機する秒単位の値です。
次のコマンドは、Mandiant によって分析されたバリアントでサポートされています。
コマンド ID |
目的 |
応答 |
40 |
ホストでタスクを実行する |
タスクを見る |
41 |
スクリーンショットをアップロードする |
sc をアップロードします |
200 |
スクリーンショットの設定を更新してスクリーンショットをアップロードする |
隠密ストアの bj ファイルまたは Windows API のいずれかを使用してスクリーンショットを取得し、スクリーンショットをディスクに保存してから C2 にアップロードします。 |
タスキング
CHIMNEYSWEEP は、2 つの異なるルートでボックス上でコマンドを実行できるようにします。リバース シェルとインタラクティブなカスタム コマンド プロンプトです。これに加えて、バックドアにより、攻撃者はシステムを再起動またはシャットダウンしたり、現在のユーザーをログオフしたりできます。
指示 |
アクション |
100 |
カスタム コマンド プロンプトを起動する |
101 |
リバース シェルを開始する |
102 |
shutdown /s /t 0 /f を使用してシステムをシャットダウンします |
103 |
shutdown /r /t 0 /f を使用してシステムを再起動します |
104 |
shutdown /l /f を使用して現在のユーザーをログオフします |
どちらのシェルでも、コマンドは元のパケットのアドレスとポートへのソケットを作成します。リバース シェルの場合、パイプがソケットに設定された状態で cmd.exe プロセスが開始されます。パケットが C&C サーバーに送信され、シェルが開始されていることが通知されます。このパケットは、次の文字列 “CSP><computer_identifier>>” で構成され、ユーザーがシェルを終了すると、文字列 “DC><computer_identifier>>” が送信されます。
カスタム コマンド プロンプトでは、次のコマンドを使用できます。
- CS – computer_identifier とともにコマンド セッションの開始を示すために使用されます。
- LD – ドライバーの一覧表示
- LP – パス内のファイルを一覧表示する
- LPG – 実装されていません
- SF – ファイルを開き、ファイルサイズを返します
- SFG – ファイルを開き、コンテンツを 0x400 バイトのチャンクでアップロードします
- RF – ファイルを取得してディスクに書き込みます
- REN – ファイルの名前を変更する
- DEL – ファイルを削除する
- DELF – ディレクトリを削除する
- CRTD – ディレクトリを作成します
- EXEC – ディスク上でコマンドを実行します
- DC – シェルを切断します
- HI – 「OOK>」を返します
スクリーンショット機能
CHIMNEYSWEEP は、スクリーンショットを撮るように構成できます。JPEG コンバーター プラグイン (p22jpd レジストリ値に格納されている) が存在する場合は、画像を JPEG に変換します。 JPEG 設定は、前述のように、攻撃者が要求で構成できます。スクリーンショットは Windows API を使用して取得され、APPX.%x%x%x%x%x.tmp という名前で秘密ストアのディスクに書き込まれます。ここで、各 %x はランダムな値です。
JPEG プラグインが存在するかどうかに応じて、CHIMNEYSWEEP は一時ファイルを要求されたファイルにコピーするか、プラグインを使用してビットマップをコマンドで定義された JPEG に変換します。
その後、コマンド 41 を使用して、出力値が Telegram または C&C サーバーにアップロードされます。
システム情報コマンド
@エコーオフ
@CHCP65001
@set t=”%cd%ni”
@set f=”%cd%i1″
@cd %SystemRoot%system32
@echo {{WMIC_AntiVirusProduct}}>%t%
@wmic /failfast:on /append:%t% /namespace:rootSecurityCenter2 path AntiVirusProduct get /value
@echo {{WMIC_AntiSpywareProduct}}>>%t%
@wmic /failfast:on /append:%t% /namespace:rootSecurityCenter2 パス AntiSpywareProduct get /value
@echo {{WMIC_FirewallProduct}}>>%t%
@wmic /failfast:on /append:%t% /namespace:rootSecurityCenter2 パス FirewallProduct get /value
@echo {{WMIC_OS}}>>%t%
@wmic /failfast:on /append:%t% OS get /値
@echo {{WMIC_TIMEZONE}}>>%t%
@wmic /failfast:on /append:%t% TIMEZONE get /value
@echo {{WMIC_LOGON}}>>%t%
@wmic /failfast:on /append:%t% LOGON get /value
@echo {{WMIC_DESKTOP}}>>%t%
@wmic /failfast:on /append:%t% DESKTOP get /value
@echo {{WMIC_DESKTOPMONITOR}}>>%t%
@wmic /failfast:on /append:%t% DESKTOPMONITOR get /value
@echo {{WMIC_BASEBOARD}}>>%t%
@wmic /failfast:on /append:%t% ベースボード get /value
@echo {{WMIC_BIOS}}>>%t%
@wmic /failfast:on /append:%t% BIOS get /value
@echo {{WMIC_CPU}}>>%t%
@wmic /failfast:on /append:%t% CPU get /値
@echo {{WMIC_SOUNDDEV}}>>%t%
@wmic /failfast:on /append:%t% SOUNDDEV get /value
@echo {{WMIC_LOGICALDISK}}>>%t%
@wmic /failfast:on /append:%t% LOGICALDISK get /value
@echo {{WMIC_CDROM}}>>%t%
@wmic /failfast:on /append:%t% CDROM get /value
@echo {{WMIC_PRINTERCONFIG}}>>%t%
@wmic /failfast:on /append:%t% PRINTERCONFIG get /value
@echo {{WMIC_USERACCOUNT}}>>%t%
@wmic /failfast:on /append:%t% USERACCOUNT get /value
@echo {{WMIC_SHARE}}>>%t%
@wmic /failfast:on /append:%t% SHARE get /value
@echo {{WMIC_STARTUP}}>>%t%
@wmic /failfast:on /append:%t% STARTUP get /value
@echo {{WMIC_PROCESS}}>>%t%
@wmic /failfast:on /append:%t% PROCESS get /value
@echo {{WMIC_SERVICE}}>>%t%
@wmic /failfast:on /append:%t% SERVICE get /value
@echo {{WMIC_SYSDRIVER}}>>%t%
@wmic /failfast:on /append:%t% SYSDRIVER get /value
@echo {{WMIC_PAGEFILE}}>>%t%
@wmic /failfast:on /append:%t% PAGEFILE get /value
@echo {{WMIC_PAGEFILE}}>>%t%
@wmic /failfast:on /append:%t% PAGEFILE get /value
@echo {{SYSTEMINFO}}>>%t%
@SYSTEMINFO>>%t%
@echo {{Reg_Uninstall}}>>%t%
@REG QUERY “HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall” /s>>%t%
@echo {{Reg_TerminalServerClient}}>>%t%
@REG QUERY “HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientDefault” /s>>%t%
@echo {{BOOTCFG}}>>%t%
@BOOTCFG>>%t%
@echo {{IPCONFIG/すべて}}>>%t%
@IPCONFIG /ALL>>%t%
@echo {{whoami}}>>%t%
@whoami>>%t%
@echo {{ネット ユーザー /ドメイン}}>>%t%
@net ユーザー /ドメイン>>%t%
@echo {{ネットユーザー}}>>%t%
@net ユーザー>>%t%
@echo {{ネットユーザー管理者}}>>%t%
@net ユーザー 管理者>>%t%
@echo {{ネットローカルグループ管理者}}>>%t%
@net ローカル グループ管理者>>%t%
@echo {{ネットグループ/ドメイン}}>>%t%
@net グループ /ドメイン>>%t%
@echo {{net group “domain admins” /domain}}>>%t%
@net グループ “ドメイン管理者” /ドメイン>>%t%
@echo {{ネット ビュー}}>>%t%
@net ビュー>>%t%
@echo {{net use}}>>%t%
@ネット使用>>%t%
@echo {{ネットシェア}}>>%t%
@純シェア>>%t%
@echo {{route print}}>>%t%
@route print>>%t%
@echo {{net localgroup}}>>%t%
@net ローカルグループ>>%t%
@echo {{net group “Exchange Trusted Subsystem” /domain}}>>%t%
@net グループ “Exchange Trusted Subsystem” /ドメイン>>%t%
@echo {{net accounts /domain}}>>%t%
@net アカウント /ドメイン>>%t%
@echo {{ネット アカウント}}>>%t%
@net アカウント>>%t%
@echo {{netstat -an}}>>%t%
@netstat -an>>%t%
@echo {{set}}>>%t%
@set>>%t%
@echo {{タスクリスト}}>>%t%
@タスクリスト>>%t%
@echo {{dir c: }}>>%t%
@dir c: >>%t%
@echo {{dir d: }}>>%t%
@dir d: >>%t%
@echo {{dir e: }}>>%t%
@dir e: >>%t%
@echo {{dir f:}}>>%t%
@dir f:>>%t%
@echo {{dir g:}}>>%t%
@dir g:>>%t%
@echo {{デスクトップディレクトリ}}>>%t%
@dir %appdata%….デスクトップ>>%t%
@echo {{dir C:Users}}>>%t%
@dir C:Users>>%t%
@echo {{dir “C:Program Files”}}>>%t%
@dir “C:Program Files”>>%t%
@echo {{dir “C:Program Files (x86)”}}>>%t%
@dir “C:Program Files (x86)”>>%t%
@echo {{dir C:ProgramData}}>>%t%
@dir C:ProgramData>>%t%
@echo {{tracert -d -4 -w 1500 8.8.8.8}}>>%t%
@tracert -d -4 -w 1500 8.8.8.8>>%t%
@echo {{ping 8.8.8.8}}>>%t%
@ping 8.8.8.8>>%t%
@echo {{ping gitlab.com}}>>%t%
@ping gitlab.com>>%t%
@echo {{ping mail.google.com}}>>%t%
@ping mail.google.com>>%t%
@echo {{ping google.com}}>>%t%
@ping google.com>>%t%
@echo {{ping mf.local}}>>%t%
@ping mf.local>>%t%
@echo {{DATE-TIME}}>>%t%
@date /T>>%t%
@time /T>>%t%
@echo {{END}}>>%t%
@del /q /f %f%
@もっと<%t%>%f%
@del /q /f %t%
@出口
MITRE ATT&CK テクニック
ID |
技術 |
T1007 |
システム サービス ディスカバリ |
T1012 |
レジストリのクエリ |
T1027 |
難読化されたファイルまたは情報 |
T1033 |
システム所有者/ユーザーの発見 |
T1055 |
プロセス注入 |
T1057 |
プロセスの発見 |
T1070.004 |
ファイルの削除 |
T1070.006 |
タイムスタンプ |
T1082 |
システム情報の発見 |
T1083 |
ファイルとディレクトリの検出 |
T1087 |
アカウントの発見 |
T1112 |
レジストリの変更 |
T1113 |
画面キャプチャ |
T1134 |
アクセストークン操作 |
T1489 |
サービス停止 |
T1497.001 |
システムチェック |
T1518 |
ソフトウェア検出 |
T1543.003 |
Windows サービス |
T1569.002 |
サービスの実行 |
T1622 |
デバッガ回避 |
子供のルール
rule M_Disrupt_ROADSWEEP_1 { meta: author = "Mandiant" description = "ROADSWEEP 内で使用される暗号化キーを識別します" 文字列: $ = {C6 45 D5 E4 C6 45 D6 B1 C6 45 D7 6B C6 45 D8 22 C6 45 D9 B5 C6 45 DA 88 C6 45 DB 94 C6 45 DC AA C6 45 DD 86 C6 45 DE C4 C6 45 DF 21 C6 45 E0 E8 C6 45 E1 75 C6 45 E2 9D C6 45 E3 F3 C7 44 24 10 00 00 00 F0} 状態: すべて} rule M_Disrupt_ZEROCLEAR_1 { meta: author = "Mandiant" description = "ZEROCLEAR のコード シーケンスを識別します" 文字列: $ = "B4B615C28CCD059CF8ED1ABF1C71FE03C0354522990AF63ADF3C911E2287A4B906D47D" wide $ = "wp starts!" $ = "開始しない!" $ = "開始!" condition: それらのすべて } rule M_Backdoor_CHIMNEYSWEEP_1 { meta: author = "Mandiant" description = "CHIMNEYSWEEP で見つかった文字列を検出します" string: $ = "%sAPPX.%x%x%x%x%x.tmp" $ = "rerunadmn " $ = "runupdate" $ = "runupdateok" $ = "baserun" $ = "heyirunadmn" $ = "subttoadmn" $ = "ttrundll" $ = "{"ok":false," $ = "TL_%s -%s" $ = "|**|Net1NOFILE|**|" $ = "%s:---:%s-%s:---:%s:---:www:---:MNEW" 条件: uint16(0) == 0x5A4D と 8 つ } import "pe" rule M_Backdoor_CHIMNEYSWEEP_2 { meta: author = "Mandiant" description = "CHIMNEYSWEEP で見つかった暗号化されたデータを検出する" 文字列: $key = {C6 45 D5 E4 C6 45 D6 B1 C6 45 D7 6B C6 45 D8 22 C6 45 D9 B5 C6 45 DA 88 C6 45 DB 94 C6 45 DC AA C6 45 DD 86 C6 45 DE C4 C6 45 DF 21 C6 45 E0 E8 C6 45 E1 75 C6 45 E2 9D C6 45 E3 F3 C7 44 24 10 00 00 00 F0} $encoded_config = {FA c0 c7 e5}$encoded_bot = {AE E0 ED D6} 条件: uint16(0) == 0x5A4D およびそれらすべておよび (pe.exports("RatingSetupUI") または pe.exports("A")) }
Comments