Sofacyの‘Komplex’、OS Xのトロイの木馬

By

Category: Unit 42

Tags: , , , ,

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

概要

Unit 42のリサーチャーがSofacyグループとの関連を持つOS Xの新型トロイの木馬を特定しました。Sofacyグループについて、私たちはPalo Alto Networks AutoFocus脅威インテリジェンス プラットフォームを利用する‘Komplex’タグにより現在追跡を続けています。

Sofacyグループ(APT28、Pawn Storm、Fancy Bear、およびSednitとしても知られる)は、攻撃に用いるさまざまなツールを追加し続けています。今回の事例では、OS Xオペレーティング システムを利用している航空宇宙産業関連の個人が攻撃の標的となっています。私たちは分析を進めるなか、以前、OS Xを利用している個人を標的とした攻撃活動でKomplexが使われていたことを突き止めました。この攻撃活動は、MacKeeperアンチウイルス アプリケーションの脆弱性をエクスプロイトしてKomplexをペイロードとして配信するものでした。KomplexはSofacyが利用する別のツールとかなりの範囲で機能と特徴を共有しています。別のツールとはCarberp亜種のことで、SofacyはこれをWindowsが稼働しているシステムに対して、かつての攻撃活動で利用したことがあります。共有されているコードと機能のほかに、Komplexのコマンド アンド コントロール(C2)ドメインも発見されました。このC2ドメインは、Sofacyグループと関連のあるフィッシング攻撃活動のインフラストラクチャであると以前特定されたものと一部共通するところがあります。

Komplexバインダー

Komplexは、OS Xデバイスを利用している個人に対してセキュリティ侵害を行う目的でSofacyグループが作成したトロイの木馬です。このトロイの木馬は複数の要素から構成され、第1要素は第2のペイロードおよびおとり文書のシステムへの保存を担当するバインダー コンポーネントを伴って口火を切ります。私たちはKomplexバインダーの3つの異なるバージョンを発見しました。1つ目はx86アーキテクチャ上で稼働するよう、2つ目はx64アーキテクチャ上で稼働するよう作成されており、3つ目はx86とx64の両方のアーキテクチャ向けのバインダーを含んでいました。私たちが発見したKomplexバインダーのサンプルは、以下のとおりです。

アーキテクチャを問わず、これらの初期バインダーはいずれも埋め込まれている2番目のMach-Oファイルを‘/tmp/content’に保存します。このファイルはKomplexドロッパーであり、インストール作業の次の段階で、持続性を保持するのに使われます。Komplexドロッパーを保存すると、これらのバインダーは正規のものと認められるおとり文書をシステムに保存し、‘Preview’アプリケーションを用いておとり文書を開くことで、悪意のある活動のいずれについてもできるだけ疑念が湧き上がらないようにします。図1は、初期ドロッパーの1つの中にあるmain関数を示しています。このmain関数はおとりのPDF文書を保存し開くだけでなく、‘/tmp/content’として保存されている別の実行形式ファイルの実行もします。

図1 Komplexドロッパー内のmain関数
図1 Komplexドロッパー内のmain関数

バインダー コンポーネントは、roskosmos_2015-2025.pdfという名前のおとり文書をシステムに保存し、OS Xに組み込まれているPreviewアプリケーションを用いて、このおとり文書を開きます。 図2は、17ページから成るおとり文書の一部を示しています。おとり文書のタイトルは、“Проект Федеральной космической программы России на 2016 – 2025 годы”となっており、2016年から2025年にわたる、ロシア連邦宇宙計画プロジェクトについて説明されています。SofacyグループによるKomplexを配信している攻撃活動について、標的に関する詳細な情報は現時点で入手しておりませんが、おとり文書の内容から、標的は航空宇宙産業に関連している可能性が高いと私たちは確信しております。

図2 Komplexバインダーによって開かれたおとり文書(ロシアの宇宙計画に関する文書を示している)
図2 Komplexバインダーによって開かれたおとり文書(ロシアの宇宙計画に関する文書を示している)

Komplexドロッパー

Komplexドロッパー コンポーネントは“/tmp/content” (SHA256: 96a19a90caa41406b632a2046f3a39b5579fbf730aca2357f84bf23f2cbc1fd3)としてシステムに保存され、第3の実行形式ファイルをシステムにインストールすること、およびOS Xオペレーティング システムが起動するたびにこの第3の実行形式ファイルが起動されるよう持続性をセットアップすることを担当します。また、このドロッパーに由来して“Komplex”という名前が主成分として使われています。“Komplex”はMach-Oファイルに含まれているいくつかのフォルダー パスの中に見られ、“/Users/kazak/Desktop/Project/komplex”などがその例です。

Komplexドロッパーは、すべての機能が“_main”関数に格納されているため、機能的観点からはかなり分かりやすいです。“_main”関数(図3)は、‘_Payload_1’、‘_Payload_2’および‘_Payload_3’という名前の3つの変数内のデータにアクセスし、これらをシステム上の3つのファイルに書き込みます。

図3 システムに3つのファイルをドロップし、シェル スクリプトを実行するKomplexドロッパーのmain関数
図3 システムに3つのファイルをドロップし、シェル スクリプトを実行するKomplexドロッパーのmain関数

“_main”関数は、‘_Payload_1’、‘_Payload_2’、および‘_Payload_3’の各変数内のデータをそれぞれ次のファイルに書き込みます。

  1. /Users/Shared/.local/kextd (SHA256:
    227b7fe495ad9951aebf0aae3c317c1ac526cdd255953f111341b0b11be3bbc5)
  2. /Users/Shared/com.apple.updates.plist (SHA256:
    1f22e8f489abff004a3c47210a9642798e1c53efc9d6f333a1072af4b11d71ef)
  3. /Users/Shared/start.sh (SHA256:
    d494e9f885ad2d6a2686424843142ddc680bb5485414023976b4d15e3b6be800)

‘/Users/Shared/start.sh’に保存されているシェル スクリプトは、システム コマンド‘launchctl’を呼び出してplistエントリを‘launchd’に追加し、システム起動のたびにKomplexペイロードを自動的に実行します。図4は、ペイロードの持続性を設定する‘start.sh’スクリプトの内容を示しています。

図4 launchctlを呼び出すstart.shシェル スクリプトの内容
図4 launchctlを呼び出すstart.shシェル スクリプトの内容

‘start.sh’スクリプトは、‘com.apple.updates.plist’をロードし、Komplexペイロードのプロパティを設定します。このペイロードは、“RunAtLoad”パラメータによりシステム起動時に“/Users/Shared/.local/kextd”から実行されます。図5は、‘launchd’にロードされる‘com.apple.updates.plist’ファイルの内容を示しています。

図5 ドロッパーが持続性を得る方法を示すcom.apple.updates.plistファイルの内容
図5 ドロッパーが持続性を得る方法を示すcom.apple.updates.plistファイルの内容

Komplexペイロード

前記のコンポーネントの最終目標は、Komplexペイロードをインストールし、実行することです。このドロッパー コンポーネントは、ペイロードを“/Users/Shared/.local/kextd” (SHA256: 227b7fe495ad9951aebf0aae3c317c1ac526cdd255953f111341b0b11be3bbc5)に保存し、最終的にこのペイロードを実行します。このペイロードは、まずデバッギング対策チェックを実行し、主な機能の実行に進む前にこれがデバッグされているかどうかを確認します。これは、図6の“AmIBeingDebugged”関数で確認できます。“AmIBeingDebugged”関数は、“sysctl”関数を使用し、プロセスがデバッグされているかどうかを示す特定の“P_TRACED”フラグが設定されているかどうかをチェックします。この関数の特に興味深い部分は、2004年に作成された“Detecting the Debugger”(デバッガーの検出)というタイトルのガイドでAppleが開発者に提供した関数に非常によく似ていることです。Sofacyグループのマルウェア作成者が公開されている情報源から手法を取得したのは初めてではありません。前例として、Office Test持続手法を使用していて、これは2014年に投稿されたブログから取得しました。

図6 分析対策手法として使用されたAmIBeingDebugged関数
図6 分析対策手法として使用されたAmIBeingDebugged関数

ペイロードは、デバッガーで実行していないことを確認した後、GoogleにGETリクエストを発行して分析対策/サンドボックス チェックを実行し、インターネット接続をチェックします。ペイロードはGoogleへのHTTPリクエストの応答を受信するまでスリープします。つまり、Komplexは、インターネット対応環境のC2サーバとのみ通信します。図7は、ペイロードがその機能を実行する前に“http://www.google.com”と通信できるかどうかを確認する“connectedToInternet”関数を示しています。

図7 アクティブなインターネット接続をテストするconnectedToInternet関数
図7 アクティブなインターネット接続をテストするconnectedToInternet関数

Komplexペイロードは、アクティブなインターネット接続を確認した後、その主な機能の実行を開始します。Komplexペイロードは、11バイトXORアルゴリズムを使用して、設定およびC2ドメイン自体を含むC2通信内で使用される文字列を復号化します。図8は、Komplexのカスタムの文字列復号化アルゴリズムのスクリーンショット、およびペイロード内の文字列を復号化するために使用するXORキーを示しています。

図8 設定文字列を復号化するためにKomplexが使用する11バイトXORアルゴリズム
図8 設定文字列を復号化するためにKomplexが使用する11バイトXORアルゴリズム

図8に示したアルゴリズムは、関連付けられた変数名を使用してペイロードが参照する表1に示した文字列を復号化します。ペイロードは、さまざまな目的でこれらの復号化された文字列を使用します。たとえば、コマンド解析、C2サーバの場所などです。

表1 Komplexによって復号化された文字列およびその参照名
表1 Komplexによって復号化された文字列およびその参照名

Komplexペイロードは、SERVERS変数を使用し、HTTP POSTリクエストを使用して通信しているC2サーバの場所を取得します。このペイロードは、以下の構造のURLを生成して、C2サーバと通信します。

/<random path>/<random string>.<chosen extension>/?<random string>=<encrypted token>

URLの<chosen extension>部分は、.xml、.zip、.htm、.pdfという、合法的なファイル拡張子の中からランダムに選択されます。URLパラメータ内の<encrypted token>は、h8sn3vq6klという文字列から作成された、 base64でエンコードされた暗号化テキストです。この文字列の暗号化テキストは、静的値0xE150722を使用してXORによって変更されたランダムな4バイトの整数をキーとする、カスタム アルゴリズムによって生成されます。また、ペイロードは、POSTリクエスト内に送信されたデータを同じアルゴリズムで暗号化し、base64を使用してエンコードします。以下の図9に、ペイロードからC2サーバに送られたHTTP POSTの例を示します。

図9 KomplexからC2に送信されたビーコン(HTTP POSTデータ内にシステム情報を含む)
図9 KomplexからC2に送信されたビーコン(HTTP POSTデータ内にシステム情報を含む)

図9のHTTP POSTデータは、マルウェアが感染したシステムから収集した情報によって構成されています。C2に送信されたシステム情報には、システムバージョン、ユーザー名、プロセス リストなどのデータがあり、これらは「InfoOS」クラス内の「getOsInfo」という名前の関数で収集されます(図10)。

図10 C2ビーコン用にシステム情報を収集する、Komplex内のgetOsInfo関数
図10 C2ビーコン用にシステム情報を収集する、Komplex内のgetOsInfo関数

Sofacy C2サーバは、暗号化されたデータでこのHTTPリクエストに応答します。暗号化されたデータは、POSTデータの暗号化に使用したものと同じカスタム アルゴリズムを使用して、ペイロードによって復号化されます。Komplexペイロードは、C2応答を、[file]、[/file]、FileName=、PathToSave= 、Shell=、Execute、Deleteという文字列で解析します。Deleteアクションは、PathToSaveまたはFileNameで指定されたファイルを削除するだけです。一方、Executeアクションは、次のシステム コマンドを実行してから、指定されたファイルを実行します。

ペイロードでは、[file]および[/file]は区切り文字として扱われ、ペイロードが指定されたファイルに書き込むデータを指定します。これによって、脅威の攻撃者は、追加ファイルをシステムにダウンロードできます。最後に、Shellフィールド内に指定されたコマンドを感染したシステムで実行できます。ペイロードはこのコマンドを実行してから、結果をC2サーバに送り返します。

Sofacyおよびこれまでの攻撃との関連

コードの重複

Komplexペイロードのリバース エンジニアリングで、いくつかのコードの重複が発見されており、調査する価値があると確信します。まず、「MACKEEPERを侵害する新たなMAC OSマルウェア.」という表題のBAEシステムズのブログで取り上げられているOS Xのトロイの木馬の特徴および動作と、今回のKomplexペイロードには、大きな類似点があることがわかりました。ブログ記事によれば、OS Xのトロイの木馬が、MacKeeperアプリケーション内の脆弱性を利用して配信されていました。この名前のないOS Xのトロイの木馬は、11バイトのXORアルゴリズムを使用して、埋め込まれている設定を復号化します。使用される変数の名前と値はすべてKomplexのサンプルと同じです(表1参照)。ネットワーク トラフィックの暗号化と復号化に使用されるアルゴリズムだけでなく、ネットワーク通信のあらゆる静的要素(URLの構成、HTTPデータの構造、コマンド解析手順など)が、このブログ記事で取り上げられているものと、Komplexペイロードで確認されているものは、まったく同じです。このような重複から、MacKeeperの脆弱性を介して配信された前のトロイの木馬が、実はKomplexトロイの木馬だったと推測されます。

2番目のコードの重複は、私たちが以前の調査時に分析したSofacyのCarberp亜種とKomplexトロイの木馬を結び付けます。KomplexはOS X上で稼働するように作成され、SofacyのCarberp亜種はWindows上で稼働するように開発されていますが、それらには、以下のような多くの共通点があります。

  • ランダムなパス値、ランダムなファイル拡張子および暗号化されたトークンを使用する同一のURL生成ロジック
  • 同じ順序でバイナリ内でリストされ、C2 URL内で使用されている同一のファイル拡張子
  • URLとHTTP POSTデータ内のトークンを暗号化および復号化するために使用されている同一のアルゴリズム(Carberpキーは値0xAA7D756を使用して変更されているが、Komplexでは値0xE150722が使用されている)
  • 特に、Execute、Delete、[file]、[/file]、FileNameおよびPathToSaveの解析を含む、酷似したコマンド処理
  • google.comへの接続によるインターネット接続の確認
  • 構成内の文字列を復号化するための11バイトXORキーの使用

これらの共通点に加え、Sofacy Carberp亜種(SHA256: 638e7ca68643d4b01432f0ecaaa0495b805cc3cccc17a753b0fa511d94a22bdd)が、Komplexペイロードで見られるものと同じトークン値‘h8sn3vq6kl’をC2 URL内で使用していることもわかりました。これらの観察に基づき、SofacyのCarberp亜種の作成者が、Komplexトロイの木馬を作成するために、同じコードまたは少なくとも同じ設計を使用したと確信しました。WindowsとOS Xのトロイの木馬で多数の同じ機能を保持するメリットは、クロスプラットフォームの移植を処理するために、C2サーバ アプリケーションを変更する必要が少なくなる点です。

インフラストラクチャの重複

KomplexのC2ドメインであるappleupdate[.]orgは、既知の活動がそれに関連付けられているようには見えませんが、apple-iclouds[.]netとitunes-helper[.]netは、どちらのドメインも直接Sofacyの活動に関連しています。apple-iclouds[.]netドメインについては、Sofacyグループによって行われたフィッシング活動を説明した「PwC Tactical Intelligence Bulletin」の中で述べられています。itunes-helper[.]netドメインは、Pawn Storm (Sofacy)によって使用されたホスティング プロバイダに関する調査を含む、Trend Microの「Looking Into a Cyber-Attack Facilitator in the Netherlands (サイバー攻撃に利用されやすい、オランダのホスティングサービス)」というタイトルのブログで説明されている個別の活動に関連付けられています。

ドメインappleupdate[.]orgには、特に、2015年4月から2016年4月にかけてこのドメインに解決されたIP 185.10.58[.]170に関連する興味深い相関ポイントがあります。BAE Systemsのリサーチャーは、Unit 42に、MacKeeperのエクスプロイトを通じて配信されたKomplexペイロードを提供しました(ドロッパー SHA256: da43d39c749c121e99bba00ce809ca63794df3f704e7ad4077094abde4cf2a73およびペイロード SHA256: 45a93e4b9ae5bece0d53a3a9a83186b8975953344d4dfb340e9de0015a247c54)。これらは、C2サーバとして、構成内でIPアドレス185.10.58[.]170を使用していました。このインフラストラクチャの重複は、配信にMacKeeperを使用した以前の活動で検出したKomplexペイロードとの関連をさらに色濃いものにしています。

結論

Sofacyグループは、OS Xオペレーティング システムを標的とした攻撃活動で使用するためにKomplexトロイの木馬を作成しました。この動きは、マルチプラットフォーム攻撃に向けた継続的な進化を示しています。ツールは、追加のファイルをシステムにダウンロードし、ファイルを実行して削除することができます。さらに、システム シェルを直接操作することもできます。現在、詳細な標的情報は入手できませんが、Komplexは、航空宇宙業界の個人を対象とした攻撃、およびトロイの木馬を配信するためにMacKeeperのエクスプロイトを悪用した攻撃で使用されていると確信しています。Komplexトロイの木馬は、SofacyのCarberp亜種のトロイの木馬と類似の設計であることが明白になっています。これが、同じC2サーバを使用して、侵害したWindowsおよびOS Xシステムを比較的容易に処理するためであることは確実です。

Unit 42は、この脅威を引き続き調査および追跡していきますが、Palo Alto Networksのお客様は、次の方法によって保護されています。

  • WildFireが既知のKomplex実行可能ファイルを悪意のあるものとして正しく特定します。
  • IPSシグネチャ#14442 Sofacy.Genコマンド アンド コントロール トラフィクが、Komplexトロイの木馬によって生成された発信C2リクエストを検出しブロックできます。
  • お客様は、AutoFocusでKomplexタグを介して、このトロイの木馬を追跡できます。

IOC

ハッシュ:

2a06f142d87bd9b66621a30088683d6fcec019ba5cc9e5793e54f8d920ab0134
c1b8fc00d815e777e39f34a520342d1942ebd29695c9453951a988c61875bcd7
cffa1d9fc336a1ad89af90443b15c98b71e679aeb03b3a68a5e9c3e7ecabc3d4
96a19a90caa41406b632a2046f3a39b5579fbf730aca2357f84bf23f2cbc1fd3
227b7fe495ad9951aebf0aae3c317c1ac526cdd255953f111341b0b11be3bbc5
45a93e4b9ae5bece0d53a3a9a83186b8975953344d4dfb340e9de0015a247c54

C2の場所:

appleupdate[.]org
apple-iclouds[.]net
itunes-helper[.]net
185.10.58.170