Arid Gopherとは?これまでになかった新しいマルウェアの分析
エグゼクティブサマリー
- Deep Instinctの脅威リサーチチームは、Go言語で開発されたドキュメント化されていない新しいマルウェアを発見しました
- このマルウェアは、APT-C-23 (Arid Viper) に起因するものです
- さらなる調査により、これまで見られなかった第二段階のペイロードが追加で発見されました
新しいマルウェアの発見:Arid Gopher
当社の脅威リサーチチームは、サイバー脅威を常に監視し、マルウェアを発見することを通常の業務としており、最近、プログラミング言語Goで書かれた実行ファイルに遭遇しました。このファイルは、2021年12月29日にVirusTotalに初めてアップロードされましたが、その時点ではわずか6社のセキュリティベンダーだけしか検知していませんでした。
最初に検知された後、Go言語 で書かれた同様のファイルがさらに 2 つ発見されました。これらのファイルの分析中に、チームはArid Gopherマルウェアのこれまで見られなかった亜種を特定しました。新しい未知のマルウェアは、APT-C-23(Arid Viper)が独占的に作成および使用するMicropsiaマルウェアの亜種です。
マイクロプシアとアリッドバイパー
この系統のマルウェアは、2017年に「360 Security」によって初めて確認された後、「Micropsia」と改名されました。このマルウェアは、Windows OSを搭載したコンピュータを標的としています。
Micropsiaマルウェアの背後にいる脅威アクターは、APT-C-23またはArid Viperという名前で知られています。このマルウェアは、主に中東地域を標的としており、特にパレスチナをターゲットとしたものに関心が集まっています。
また、Arid Viperは、イスラエルの標的に対して使用されたことのある独自のAndroid向けマルウェアも保有しています。Arid Viperは、過去にハマスとの関連が指摘されています。
Windows版とAndroid版両方のマルウェアは常に進化しています。2021年4月、Facebook(現Meta)はArid Viperに関する脅威レポートを発表しました。このレポートでは、APT-C-23によって開発された新しいiOSマルウェアを特定しました。Facebookは、脅威者がPascal、Delphi、C++、さらにはPythonを含め、Micropsiaマルウェアの開発に使用するプログラミング言語を常に変更していたことを具体的に強調しました。
Arid Gopherとは?
Go言語で書かれた3つのファイルを調査している間に、Goで書かれたMicropsiaマルウェアの新しい亜種を発見し、私たちはArid Gopherと名付けました。
この新しい亜種はまだ開発中で、3つのファイルはすべて共通のベースラインを共有していますが、各ファイルには他のファイルには存在しない独自のコードが含まれています。
私たちの調査では、メインのインプラントのほかに、同じくGoで書かれた「ヘルパー」マルウェアと、C2サーバからダウンロードされた第2段階のマルウェアが発見されました。
新たに見つかったすべてのサンプルの簡単な解析と、そのうちの1つのサンプルの詳細な解析について、以下に説明します。
Arid Gopher V1とは?
この亜種は、Go 1.16.5gsで書かれており、GitHubで見つかったライブラリのパブリックコードを含んでいます。
この方法で亜種を開発すると、作者はいくつかの機能をゼロから書く必要がなくなり、時間を節約することができます。また、これらのライブラリは悪意のあるものではありませんが、マルウェアの作者が悪意のある目的のためにライブラリの機能を悪用しているため、ある程度の正当性が加わります。
ライブラリ | 使用方法 |
永続化のためのショートカットを作成 | |
go-windows-shortcutライブラリの依存関係 | |
https://github.com/lxn/win | Go Programming Language 用の Windows API ラッパーパッケージ |
https://github.com/kbinani/screenshot | 感染したコンピュータのスクリーンショットを作成 |
https://github.com/gonutz/w32 | Go Programming Language の Windows API ラッパー |
ただし、「go-windows-shortcut」ライブラリは、同様の機能を持つ別のライブラリに置き換えられています。
V1の関数名は「infoSchoolManagerAboutRecievingHomeworksDone」や「wakeUpWhatIsInMyBag」などユニークで問題ない名前でしたが、V2では関数名がより一般的な名前に変更されました。
このバリアントは、ドメイン「grace-fraser[.]site」をC2として使用しています。
Grace Fraserは、HBOのテレビ番組 「The Undoing」に登場するキャラクターの名前です。Arid Viperはテレビ番組への言及を多用することで知られており、同様の挙動はArid Gopher V2でも確認されています。
C2は、Arid Viperが以前のキャンペーンで使用した「Laravel」フレームワークを使用しています。
この亜種は、2021年8月末にUAEから「تعريفوأهدافودوافعالاستثمار.xz」という名前のRARアーカイブ内でVirusTotalにアップロードされており、ターゲットが存在する地域を示していると思われます。
拡張子が「.xz」であるアーカイブの中にMicropsiaの亜種を送るやり方は、Arid Viperのキャンペーンで何度か観察されています。
このファイル名は、 「定義、目的、投資の動機」などに訳すことができます。
ユーザーを騙して無実のWord文書を開いていると思わせるために、脅威者は2つのマスカレード技術を使用します。
- 1つ目は、Microsoft Word Office文書のアイコンを使用すること
- 2つ目は、非常に長いファイル名(下の画像を参照)を使用し、ユーザーに「.exe」ファイル拡張子を見せないようにすること
最後に、このファイルを実行すると「C:/ProgramData/NotificationControllerPS」というフォルダに良質のおとりのオフィス文書を書き込み、被害者に提示します。
これら3つのソーシャルエンジニアリングの要素を組み合わせることで、疑うことを知らない被害者を騙してマルウェアを実行させ、Word文書を開いたときに期待されるようなおとり文書を表示させることを目的としています。この動作は、Micropsiaを利用したArid Viper攻撃で一貫しています。
このおとり文書には、金融投資に関する学術出版物の一部が含まれています。元の論文は、このリンクで見ることができます。
このマルウェアは、LNKファイルを作成し、マルウェアの実行ファイル名を使って、持続するためにスタートアップフォルダにコピーします。
システム情報を収集:
- マルウェアは<current_user>_<random_ID>を含むbase64 blobを 「C: /ProgramDataNotificationControllerPS³³MSAProfileNotificationHandler.txt」 に書き込んでいます
- cmd /c WMIC /Node:localhost /Namespace:/rootSecurityCenter2 Path AntiVirusProduct Get displayName /Format:List 以下のコマンドを実行し、インストール済みのAntivirus製品をチェックします
- 関数 「app_myLib_student_GetFatherName」 は、RtlGetVersion() を使用して、「Microsoft Windows [version 6.1.7601]」 のような文字列を返す OS のバージョンを含む文字列を返すものです
マルウェアは、C2サーバーにデータを送信する際に、カスタムUser-Agent「aimxxhwpcc」を使用します。
マルウェアは、「ABCMedia」という名前のミューテックスを作成します。
Arid Gopher V2とは何ですか?
私たちは、2022年の初めに使用されていたこの亜種の2つのバージョンを発見しました。
2つのサンプルの主な違いは、おとりコンテンツです。まず類似点を示し、後で2つのV2サンプルの違いを示すことにします。
これらのサンプルはGo 1.17.4で書かれており、V1で見つかったパブリックライブラリの一部と、以下のライブラリが含まれています。
ライブラリ | 使用方法 |
Go 用の Windows Management Instrumentation (WMI) | |
上記WMIライブラリの依存関係 | |
エラー処理 | |
エラー処理 | |
Go プロセス内の少なくとも 1 つのスレッドが、Windows のコンポーネント オブジェクト モデル ランタイムへの初期化された接続を維持することを保証 | |
Goで書かれたWindowsサービスライブラリ | |
起動時に自動で実行されるショートカットを作成し、WindowsとLinuxのクロスコンパイルをサポートするGoライブラリ | |
https://github.com/GeertJohan/go.rice (PDFサンプルのみ) | html、js、css、画像、テンプレートなどのリソースを非常に簡単に扱えるようにするGoパッケージ |
これらのサンプルにはStudent/Schoolの関数名のテーマはありませんが、BinDiffを使用して、V1とV2の関数が完全に一致することを確認しました。
V1 関数名 | V2関数名 | 機能名 |
app_myLib_student_GetFatherName | DSA2_DSA2PKG_Properties_OS | RtlG etVersion()を用いてOSのバージョンを取得 |
app_myLib_student_GetStudentName | DSA2_DSA2PKG_Properties_Name | V1: USERNAME%、現在時刻、ランダムシードに基づいて識別子を生成 V2: 識別子はホスト名と%USERNAME%から作られる |
app_myLib_driver_DoWhatIsTheDriverWants | DSA2_DSA2PKG_Proc_StartCMD | 「cmd /c <引数>」を実行し、その出力を取得 |
main_CreateMutex | DSA2_DSA2PKG_Mutex_CreateMutex | 与えられた文字列でkernel!CreateMutexWを呼び出す |
これらのサンプルは、「pam-beesly[.]site 」というドメインをC2として使用しています。
Pam Beesly はテレビ番組(The Office)の登場人物のまた別の名前であり、同じ動機がV1や古いMicropsiaの亜種で観察されている。
V2版には以下の機能があります。
プロセスのコマンドラインに「-st 」が含まれていない場合、「main_ExResAndRun 」関数が呼ばれ、ライブラリbindataを使ってファイルの資産からデコイ文書を抽出します。
「SoftTookkitPSA 」ミューテックスの生成を試み、失敗した場合はos.Exit()を呼び出し、プロセスを終了させます。
上の画像でわかるように、作者はおそらくタイプミスをしたのでしょう。「Toolkit」ではなく「Tookkit」です。
このミューテックスは、マルウェアのインスタンスが1つしか実行されないことを保証します。
このマルウェアは、インストールされているAV製品についてWMIに問い合わせを行います。「360 Total Security」が存在する場合、マルウェアは関数「main_Reg360」を呼び出し、「Arid Helper」と呼ばれる第2段階のマルウェアをダウンロード・実行します。「Arid Helper 」の説明は、この記事の後のセクションで行います。
コンピュータに 「360 Total Security 」アンチウイルスがインストールされていない場合、「main_addST 」が呼び出されます
関数 「main_addST」は、スタートアップフォルダに 「NetworkBoosterUtilities.lnk」という名前の LNK ショートカットを作成し、マルウェアのフルファイルパスにリンクさせます。
LNKには引数「-st 」があり、これはおとり文書を表示せずにマルウェアを起動するために使用される。
「-st 」はstartという単語の接頭語である可能性が高い。MicropsiaのDelphiの亜種では、LNKに同じ目的のための引数「-start 」が含まれていました。
関数「DSA2_DSA2PKG_STRun_AddSTShortcut」は、autostarterライブラリを使用して、実行中のユーザーのスタートアップディレクトリにマルウェアのパーシスタンスを設定するものである。
その後、関数「main_createMainDir」が呼び出され、マルウェアが収集したスクリーンショットなどの情報を保存するC:⾳⾳⼭のディレクトリを作成します。
システム情報の収集
- V1と同様に、マルウェアは、<コンピュータ名>_<現在のユーザー名>_<ランダムID>の形式で、今度はコンピュータ名も含むbase64 blobを 「C: /ProgramDataNotificationControllerPSK 001MSAProfileNotificationHandler.txt」へ書き込みます。
- スクリーンショットを撮影し、PNGファイルとして上記と同じフォルダ 「C: /ProgramDataNotificationControllerPSK」 に保存します。
- マルウェア(3d7d75d66428c55dc81563c3bde5477977fadb3325d0224ef9313da133940077のみ)は、次のコマンドを実行しています。
cmd /c ipconfig /release
cmd /c ipconfig /renew
これは、V1でのWMIクエリと同様に「cmd.exe」を呼び出すことで行われます。 - マルウェアは、WMIクエリを実行することで、インストールされているAntivirus製品をチェックします。cmd.exeを使用してWMIクエリを実行するV1とは異なり、マルウェアは「DSA2_DSA2PKG_Properties_AV」という名前の関数を呼び出してバイゾーンWMIインポートライブラリを使用します。
- V1にあった関数 「app_myLib_student_GetFatherName」は 「DSA2_DSA2PKG_Properties_OS」に改名されました。
関数 「main_sendBasicInfo 」は、コンピュータに関する以下の情報を収集し、C&Cサーバーに送信します。
フィールド名 | フィールド値 |
名前 | 開くべきおとり.pdfの名前を含むアセット名 |
Ename | 開くべきおとり.pdfの名前を含むアセット名 |
en | 2に設定 |
デバイス名 | コンピュータ名、実行中のユーザー名、ランダムな文字列からなるBase64エンコードされた一意の文字列ID |
av | 動作中のアンチウイルス製品のWMIクエリ結果 |
os | OSのバージョン、例:Microsoft Windows [Version 10.0.0.1836] |
C2 コミュニケーション
マルウェアは「main_sendSH」を呼び出し、kbinaniのライブラリを使ってスクリーンショットを保存し、サーバーに送信します。
その後、「main_getRequestsAndDoIt」が、C2にGETリクエストを送信するループを担当します。
レスポンスはJSONで、「main.REQ」という名前の構造体にアンマーシャルされており、以下のような定義になっています。
C&Cサーバーは、以下のJSONオブジェクトを含むレスポンスを送信する必要があります。
ID: 後にC&CコマンドでURLを構築する際に使用される番号
タイプ :実行するコマンドの名前
値:コマンドの値
ステータス:未使用
encoded_file_url:ダウンロードするリソースファイルとして「d」コマンドで使用
たいていの場合、サーバーから空の配列が送られてくるので、サンプルは次のGETリクエストを送るまでランダムな秒数だけ待機することになります。
以下は、サポートされているコマンドです(可能な 「type」 フィールドの場合)。
タイプ | 詳細 |
s | スクリーンショットを撮影し、サーバーに送信 |
c | CMDの「value フィールドにあるコマンドを実行 |
d | 「encoded_file_url」フィールドがある場合、<C2_address>/<id>/download_app_download-by-id/<encoded_file_url>から2段目のペイロードを「NotificationControllerPSK」ディレクトリにダウンロードし、実行 |
cwr | 「c 」コマンドと同じだが、終了を待たない |
ra | 「value」フィールドに与えられたパスでプロセスを実行 |
al | ログファイルSoftTookkitPSA.txtをアップロード |
V2サンプルの違い。
3d7d75d66428c55dc81563c3bde5477977fadb3325d0224ef9313da133940077
この亜種は2021年12月19日にパレスチナからVirusTotalにアップロードされましたが、Arid Viperはパレスチナのターゲットを重点的に攻撃することが知られているため、ターゲットが存在する国を示している可能性があります。
マルウェアのアイコンは、V1で使用されていたWord Iconと全く同じものです。
被害者がこのファイルを開くと、マルウェアは良性のおとりオフィス文書を「%AppData%LocalTemp」フォルダに書き込み、被害者にそれを提示します。
この文書には、サウジアラビアの「Almrsal」というブログから、正式な手紙の書き方に関する情報が掲載されています。
5588f6fab387133c21b06f6248259c64260435898edd61866fad50312c2d3b25
この亜種は、2022年1月31日にパレスチナから「The modified opening session program 29-1-2022_ page -0001.xz」という名前のRARアーカイブ内でVirusTotalにアップロードされており、ターゲットがどの国にあるのかを示していると思われます。
拡張子「.xz」を持つアーカイブの中にMicropsiaの亜種を送るというやり方は、V1や他のいくつかのArid Viperキャンペーンで観察されています。
このアーカイブは、無料のファイルアップロードサービスである「https://filetransfer[.]io/data-package/NDqgYm80/download」というURLからダウンロードされていますが、被害者がこのURLをどのように受信しているかは不明です。
このファイルは、セキュリティ専門家「MalwareHunterTeam」によって疑わしいと観測されましたが、正式な帰属は確認されていません。
V1や前回のV2サンプルとは異なり、この亜種はPDFのアイコンを持っています。
アーカイブ内のマルウェア実行ファイルには、「The modified opening session program 29-1-2022_page-0001 98656456363546 4565546454645 98984938493854 pdf .exe」という二重の拡張子が含まれています。
二重拡張子、特に長いファイル名の組み合わせによる「pdf.exe」の使用は、以前のArid Viperキャンペーンで確認されています。
被害者がファイルを開いている場合、マルウェアは「The modified opening session program 29-1-2022_page-0001 98656456363546 4565546454645 98984938493854.pdf 」という名前の良性のおとりのPDF文書を「%TEMP%<current_date_and_time> 」フォルダに書き込み、被害者にそれを提示することになるのです。
パレスチナ国民評議会の公式会議の概要が記載されている文書です。
第2段追加ペイロード
アリッドヘルパー
V2サンプルの解析中に、インストールされているセキュリティ製品のWMIクエリが「360 total security」を返した場合、図10に見られるように、マルウェアは「main_addST」の代わりに追加関数を呼び出すことに気づきました。
「main_addST」関数は、V2解析で説明したように、LNKショートカットを作成する役割を担っています。
しかし、「360 total security」のインストールが確認されると、マルウェアは 「main_Reg360」という名前の関数を呼び出します。そしてこの関数は、「main_DownReqApp 」という名前の別の関数を呼び出し、次のURLからC2サーバーから追加のペイロードをダウンロードします。「http[:]//pam-beesly[.]site/J2FWAHfmgH573SUB/download_app/download by-name/SystemNetworkEventsNotification」というURLからC2サーバから追加のペイロードをダウンロードします。
C: /ProgramData/NotificationControllerPSK/SystemNetworkEventsNotification.txt という名前で保存されるようになりました。
その後、DSA_DSA2PKG_FileByte_DecodeByte という関数が呼び出され、ダウンロードしたファイルが C: /ProgramDataThailandNotificationControllerPSK/SystemNetworkEventsNotification.exe という名前の実行ファイルに変換されてテキストファイルが削除されています。
最終的な実行ファイルはGo言語で書かれており、その唯一の目的は「360 total security」がインストールされた場合に代替の永続化メカニズムを作成することであるようです。
余談ですが、360 Total Securityは、Arid Viperが開発と改良を続けている、後にMicropsiaと名付けられたWindowsマルウェアについて最初に公表しました。
この「ヘルパー」実行ファイルは、次のパラメータを受け取ることができます。
v=<PersistenceName>-指定された値名のレジストリ実行キーを作成します。
d=<PathToExecutable>-指定されたパスにレジストリ値を設定します。
-st - 未使用
-old - 未使用
実行ファイルはGolang App Shutdown Hooksライブラリを使用し、永続性を設定するために使用するパラメータでrunキーを追加するshutdownフックを設定します。
シャットダウンフック関数は、プロセスが終了のためのイベントを受信したときに呼び出されます。プロセスのコンソールは隠されているので、この実行ファイルの意図は、コンピュータがシャットダウンするときにレジストリの実行キーを追加することである可能性が高いです。
セカンドステージの追加ペイロード
V2亜種からのトラフィックを解析している間、ある時点で、空のJSONレスポンスを返していたURLがデータで応答し始めたことに気づきました。
このURLは、「main_getRequestsAndDoIt」関数から呼び出されています。
ある時点で、URLはbase64 blobを返し、それがデコードされると、別の実行可能ファイルを明らかにしました。
このサンプルはGoではなく、Visual C++で書かれており、2021年2月14日にコンパイルされました。C2としてmozelllittel[.]comを使用しています。
このC2は、他のArid Viper C2サーバーでも使用されているLaravelフレームワークを使用しています。
また、このサンプルでは、Gopherの亜種のように、起動時にLNKを作成して永続化します。
このサンプルでは、おとり文書は表示されません。
このサンプルの詳細な分析については、別のブログ記事で紹介する予定です。
まとめ
現在のサイバーセキュリティ製品のほとんどは、新しいマルウェアやAPT(Advanced Persistent Threats)攻撃を検出できません。これは、手動で調整されたヒューリスティックに依存しているからです。より高度なソリューションでは、手動で選択した特徴を使用し、それを古典的な機械学習モジュールに与えて、ファイルを悪意のあるものと正当なものに分類しますが、それでも検知率はかなり低いです。また、より多くの情報を得るために、サンドボックス環境でマルウェアを実行する方法もあります。これにより、より正確な検出が可能になりますが、非常に時間のかかるプロセスであり、脅威の実行を防ぐことはできないため、代償を払うことになります。
Deep Instinct Prevention Platformは、業界で最も高い精度と少ない誤検知で、既知、未知、ゼロデイ脅威を阻止します。悪意のあるファイルを20ms以下で識別し、実行前に攻撃を阻止します。Deep Instinctは、既存のEPPおよびEDRソリューションよりも高速かつ高い効果で未知の脅威の99%以上を防止し、マルウェアがお客様の環境に侵入することがないようにします。
Deep Instinctは、脳の学習能力にヒントを得た世界初のディープラーニング・サイバーセキュリティ・フレームワークをベースに構築されています。脳は一度物体の識別を学習すると、その識別が自然にできるようになります。サイバーセキュリティに適用した場合、ディープラーニングは、このブログで紹介されているような見たこともないマルウェアを含むあらゆるタイプのサイバー脅威を比類のない精度で検出する新しい予測能力を促進します。
Deep Instinctのお客様は、本ブログで紹介したMicropsiaの亜種をはじめ、未知の、これまでに見たことのない悪質な脅威から保護されています。このプラットフォームがどのように動作しているか実際にご覧になりたい場合は、ぜひ弊社にご相談ください。もっと詳しく知りたい方は、こちらからデモをリクエストしてください。
https://www.deepinstinct.com/ja/request-a-demo
IOC
SHA256 | 説明 |
f01c07f88071c8f71514db19f68c966f17ac8af0d3288913141714037352c99c | AridGopher V1 を含むアーカイブ |
99544057a5215e756b67aa47815e27dc157eb850792e5eacda6796922bb9a50b | AridGopher V1 |
42492efa48785ca118d4b05f28570e7b6be4677a962cb7825a859ad5e3045710 | AridGopher V2 (PDF) を含むアーカイブ |
5588f6fab387133c21b06f6248259c64260435898edd61866fad50312c2d3b25 | AridGopher V2 (PDF) |
3d7d75d66428c55dc81563c3bde5477977fadb3325d0224ef9313da133940077 | AridGopher V2 (Word) |
fa257cca88522e76a7dc4a10311f739d17587f25fe447ae2b4c84027f2246705 | アリッドヘルパー |
57674d0ed1e03807ad9d53a9087388b1b9bf6e9e5d120dbe834730affebe2675 | 第2段階のマルウェア |
ドメイン名 | 説明 |
grace-fraser[.]site | AridGopher V1 C2 |
pam-beesly[.]site | AridGopher V2 C2 |
mozelllittel[.]com | 2nd stage C2 |
Indicators of Attack
フォルダー:
C: /ProgramDataNotificationControllerPS
C: /ProgramDataNotificationControllerPSK
User-Agent:
aimxxhwpcc
Mutex:
ABCMedia
SoftTookkitPSA
コマンド:
cmd /c WMIC /Node:localhost /Namespace: /RootSecurityCenter2 Path AntiVirusProduct Get displayName /Format:List