※本記事は2016年9月13日に米国で掲載されたブログ記事の抄訳を基にしています。

過去2年以上に渡って、モバイルデバイスを攻撃するために設計されたMicrosoft WindowsおよびApple iOSのマルウェアを数多く観測しました。この攻撃ベクトルは、全世界のほぼすべての人が1台以上のモバイルデバイスを携帯し、いつでも通信するようになるにつれ、悪意のある攻撃者の間で急速に普及しています。モバイルデバイスに適用されているセキュリティ制御はまだ不十分であるため、これらのデバイスは、広範な悪意のある攻撃者の格好の標的になっています。以下がその例です。

  • WireLurkerはジェイルブレイクされていないiPhonesに悪意のあるアプリケーションをインストールしました。
  • 6個の異なるトロイの木馬、アドウェアおよびHackToolファミリは「BackStab」攻撃を起動し、iOSデバイスおよびBlackBerryデバイスのバックアップのアーカイブを盗みました。
  • ハッキングチームのRCSは、感染したPCおよびMacからジェイルブレイクされたiOSデバイスおよびBlackBerry携帯電話にスパイウェアを配信しました。

最近、新たなWindowsのトロイの木馬を発見し、「DualToy」と名付けました。これは、悪意のあるまたは危険なアプリケーションをAndroidデバイスとiOSデバイスの両方にUSB接続を介してサイドロードします。

2015年1月にDualToyが拡散し始めたときにはAndroidデバイスに感染する機能しかありませんでした。しかし悪意のある攻撃者は、6カ月も経たないうちにiOSデバイスに感染する機能を追加しました。DualToyは今もアクティブで、これまでにこのトロイの木馬ファミリに属する固有サンプルを8,000個以上検出しました。主な標的は中国人ユーザーですが、米国、英国、タイ、スペイン、およびアイルランドの個人および組織にも影響が及んでいます。

プロセス インジェクション、ブラウザ設定の変更、広告の表示など従来のWindows PCのマルウェアで見つかっている機能に加えて、DualToyは以下のアクティビティもAndroidデバイスとiOSデバイスで実行します。

  • Android Debug Bridge(ADB)およびWindows向けのiTunesドライバのダウンロードとインストール。
  • 感染しているPCの既存のペアリングおよび認証の記録を使用してUSBケーブルを介してAndroidデバイスおよびiOSデバイスと通信。
  • Androidのアプリケーションをダウンロードし、これをバックグラウンドで接続されているAndroidデバイスにインストール。ほとんどの場合、アプリケーションはリスクウェアまたはアドウェアです。
  • 接続されているAndroidデバイスにネイティブコードをコピーしてこれを直接実行し、別のカスタムをアクティブ化してルート特権を取得し、バックグラウンドのAndroidのアプリケーションを追加でダウンロードおよびインストール。
  • 接続されているiOSデバイスの情報(IMEI、IMSI、ICCID、シリアル番号、電話番号など)を盗む。
  • iOSのアプリケーションをダウンロードし、これをバックグラウンドで接続されているiOSデバイスにインストール。このアプリケーションはApple IDとパスワードを要求し、これらをユーザーが知らないうちにサーバに送信(AceDeceiverと同じ動作)。

数年前、AndroidおよびiOSは、ユーザー通信において、デバイスを認証し、他方のデバイスとペアにする要求を始めました。この目的はDualToyが使用するようなサイドロード攻撃を防ぐためでした。しかし、DualToyは、物理的に接続されたモバイルデバイスが接続先の感染したPCと同じ所有者のものであると想定しています。つまり、ペアリングはすでに認証されている可能性が高いことになります。DualToyは、既存のペアリング記録を再使用し、バックグラウンドのモバイルデバイスと直接通信しようとします。この攻撃ベクトルの機能は、この脅威を緩和する追加のメカニズム(ADBの有効化、iOSサンドボックスなど)によって大幅に制限することができますが、DualToyは、攻撃者がモバイルデバイスに対してどのようにUSBサイドロードを使用し、プラットフォーム間でマルウェアがどのように広がるかを再認識させてくれます。

Androidデバイスの感染

DualToyのほぼすべてのサンプルは、侵害されたWindows PCと接続されているAndroidデバイスにUSBケーブルを介して感染する機能があります。この機能は通常、NewPhone.dll、DevApi.dllまたはapp.dllという名前のモジュールに実装されています。

DualToyは、接続されているAndroidデバイスでADBが有効になっていることを想定しています。ADBが有効になっていない(デフォルト)場合、一部のユーザー、特にPCまたはMacからAndroidのアプリケーションをインストールするユーザー、さらに、Androidデバイスで高度な操作を行うユーザーには、ADBがUSBを介してAndroidデバイスを操作するためのWindowsコンピュータまたはMacコンピュータの唯一の公式インターフェースであり、デバッグインターフェースであるためです。

ADBドライバのインストール

このモジュールは、読み込まれると、まずユニバーサルWindows ADBドライバをC2サーバ(http[:]//www.zaccl.com/tool/new_tool.zipなど)からダウンロードし、これをインストールします。

 

図1 C2サーバからダウンロードされたWindows ADBドライバファイル

図1 C2サーバからダウンロードされたWindows ADBドライバファイル
 

次に、一部の亜種は、標準ADB Windowsクライアントであるadb.exeという名前のファイルを直接ドロップします。その他の亜種は、ADBクライアントのソースコードをモジュールにコンパイルし、ADB操作も実行できるようにします。adb.exeの代わりに、新しい亜種は、tadb.exeをドロップします。これはテンセントのAndroid管理ソフトウェアからカスタマイズしたADBクライアントです。

なお、バージョン4.2 (2013年の初めにリリース)以降のAndroidでは、ADBセッションの確立に先立ち、ユーザーは手動による確認を行ってPCを認証する必要があります。これはUSB経由でアプリをサイドローディングするといった攻撃を防ぐために設計されました。しかしユーザーが過去に自分のPCを認証したことがある場合、関連するキー ファイルはPC上の%HOME%/.androidディレクトリに保存されます。DualToyはこうしたキー ファイルを再利用して、意図されていたセキュリティ チェックを回避します。

アプリのダウンロードおよびインストール

ADB環境がセットアップされるとDualToyはAndroidデバイスがUSB経由で接続されるのを待ちます。デバイスが接続されるとすぐにC2サーバからURLの一覧を取得してアプリをダウンロードし、ダウンロードしたアプリを“adb.exe install”コマンドによりバックグランドでAndroidデバイスにインストールします。

図2 AndroidアプリをダウンロードするためのC2サーバー上のURL
 

図3 DualToyによりAndroidデバイスにインストールされたアプリ
 

図3は、DualToyによりダウンロード、インストールされたアプリを示しています。これらのアプリはいずれもデフォルト言語として中国語を使っているゲームであり、公式のGoogle Playストアで手に入るものは1つもありません。

バイナリ コードのインストールおよび実行

最近の亜種において、DualToyはC2サーバから“guardmb”という名前のELF実行形式ファイルだけでなく“appdata.exe”という名前のPE実行形式ファイルもダウンロードします。このappdata.exeファイルは、ADBのソース コードを一部カスタマイズしたものをコンパイルして作成されたものです。DualToyはコマンド ライン“appdata.exe shell am start”を使ってこれを実行します。このコマンド ラインから起動されるとappdata.exeは、guardmbファイルを接続済みのAndroidデバイスの/data/local/tmpディレクトリにコピーした後、これを実行します。

図4 appdata.exeがAndroidデバイス上でguardmbを実行する
 

図5 guardmbがAndroidデバイス上で特定のサービスを開始する
 

このguardmbファイルは、ARMアーキテクチャ向けのELF実行形式ファイルです。その機能は単純で、Androidのシステム コマンド“am”を実行してサービス“com.home.micorsoft.service.BootWakeService”を開始します。また、Guardmbはパッケージ名が“com.home.micorsoft”であるサード パーティのアプリ内で実装された同じサービスも指定しました。

分析中、私たちは“com.home.micorsoft”アプリを見つけることができませんでした。しかし類似パッケージ名“com.mgr.micorsoft”が付いた別のAndroidアプリを発見しました。同一のタイプミス(“micorsoft”)および同一のバイナリ コード フィンガープリントから、これら2つのアプリは同一のソースを持っており、同一の機能を有している可能性が高いと私たちは確信しています。

このアプリは改変されたSUデーモン プログラムを埋め込みましたが、このデーモン プログラムはSuperSUプロジェクトのソース コードから再コンパイルされたものでした。私たちは、この特定のAndroid版トロイの木馬に“RootAngel”という名前を付けました。guardmbによりサービスが開始されると、RootAngelはSUデーモンをインストールします。またそれだけでなく、C2サーバに接続し、さらに多くのAndroidアプリをダウンロードし、これらを“pm install”コマンドによりバックグラウンドでインストールします。

図6 RootAngelがC2サーバからダウンロード済みのAndroidアプリをインストールする
 

iOSデバイスへの感染

2015年6月7日、iOSデバイスに感染する能力を持つDualToyの最初のサンプル(SHA-256: f2efc145d7d49b023d97a5857ad144dd03a491b85887312ef401a82b87fb1b84)に私たちは気付きました。2016年の終わりに新型亜種が現れましたが、私たちの以下の分析では、主としてこの最初の亜種に目を向けます。

サンプルは実行中にいくつかのPEファイルと.iniファイルをドロップします。その中で、insapp.dllはiOSデバイスを感染させるのに使われるモジュールです。DelphiおよびC++を使って開発され、標準のUPXパッカーを使ってパックされています。もう1つ別のファイルinsapp.iniがあります。これにはインストール対象のiOSアプリだけでなくiTunesドライバをダウンロードするためのURLも記述した設定が含まれています。

iTunesのダウンロードおよびインストール

ダウンロードされるとinsapp.dllは侵害を受けたコンピュータにiTunesがインストールされているか調べます。iTunesがインストールされていなければC2サーバからMSI形式のインストーラーを2つダウンロードします。例えば64ビットのWindows PCに対しては、“AppleMobileDeviceSupport64.msi”および“AppleApplicationSupport64.msi”がダウンロードされます。この2つのインストーラーはApple公認のiTunes for Windowsソフトウェアの一部です。iTunes for WindowsソフトウェアにはiOSデバイスとの対話にiTunesが使う、必須のドライバ ファイルがすべて揃っています。

その後DualToyは“msiexec.exe”を実行して、図8で示されるインストーラーを“/qn”パラメーターによりバックグラウンドでインストールします。

図7  設定ファイルにはTunesインストーラーおよびiOSアプリのURLが指定されている
 

図8 DualToyがmsiexec.exeを使ってiTunesインストーラーをインストールする
 

iOSデバイスの操作

インストール済みのiTunesドライバによりiOSデバイスを操作するため、DualToyはオープン ソース プロジェクト“iphonetunnel-usbmuxconnectbyport”を再利用します。これを使うことで、DualToyはリフレクションによりiTunesのiTunesMobileDevice.dllファイル内のAPIを呼び出します。そうすればiTunesがしているのとまったく同じようにiOSデバイスと対話をすることが可能になります。

図9 DualToyがiTunesMobileDevice.dllからシンボルをリフレクトする
 

DualToyは、USB接続を監視します。有効なiOSデバイスが接続されると、iTunes APIを使用してそのデバイスに接続しようと試みます。Androidと同様に、Appleもサイドロードを防ぐために、iOS 7から手動によるユーザー承認を導入しました。Androidデバイスの場合と同じく、DualToyは、既存のペアリング記録を再使用するために、そのiOSデバイスがこれまでペアリングされたことがあるかどうかチェックします(図10)。

図10 DualToyは、これまで所有者によってそのデバイスがペアリングされたことがあるかどうかをチェック
 

iOSデバイス情報を盗む

iOSデバイスへの接続に成功すると、DualToyは、デバイスとシステムの情報を収集し、それらを暗号化してから自らのC2サーバに送信します。以下の情報が収集されます。

  • デバイス名、タイプ、バージョン、モデル番号
  • デバイスのUUIDおよびシリアル番号
  • デバイス ベースバンド バージョン、システム ビルド バージョン、ファームウェア バージョン
  • デバイスIMEI
  • SIMカードのIMSIおよびICCID
  • 電話番号

図11   DualToyはiOSデバイス情報を収集
 

アプリのダウンロードおよびインストール

DualToyは、デバイス情報の収集だけでなく、C2サーバからIPAファイルをダウンロードして、接続済みのiOSデバイスにインストールしようとします。ダウンロード リストの取得に使用されるURLは、http://www.zaccl[.]com/tool/apple/wj_app.xmlです。2016年4月および8月の弊社の分析では、このURLは常に「kuaiyong.ipa」という単一ファイルを返していました。このファイルのダウンロード後、DualToyは、AFCサービスを介して、IPAファイルをiOSデバイスの /var/mobile/Media/PublicStagingディレクトリにコピーし、installation_proxyサービスを介してそのファイルをインストールします。

図12   DualToyはiOSアプリのダウンロード URLを取得
 

図13 iTunes APIを介してiOSアプリをインストール
 

ダウンロードされたkuaiyong.ipaファイルには、 「pWsbshWBn5XN9kk0twBUECAVt2E.dsE7UfuXZdinV60edM4u1Ul0d6hSf66akdZrmp」という難読化されたバンドルIDがあります。「Ningbo Pharmaceutical Co., Ltd」宛に発行されたエンタープライズ証明書によって署名済みですので、今後このアプリがiOSデバイスに正常にインストールされることはありません。しかし、攻撃者は C2サーバによって返されたURLリストを簡単に変更して、他のアプリをプッシュできます。

図14  このiOSアプリはエンタープライズ証明書によって署名済み
 

AceDeceiverと同様の動作

kuaiyong.ipaの証明書の有効期限が切れているため、独自に開発した証明書で再度署名してから、テスト デバイスにインストールしました。

このアプリは、「ZergHelper」と同様の、サードパーティによる別のiOS App Storeです。また、AceDeceiverと非常によく似た動作をします。最初に起動したときに、アプリはユーザーのApple ID とパスワードの入力を求めます(図15)。同時に表示される免責条項には、認証情報はサーバにアップロードされないと記載されています。しかし、弊社のリバース エンジニアリングとデバッグによって次のことが判明しました。Apple IDとパスワードは、固定キー「HBSMY4[SU3] yF」と初期ベクトル「\x12\x34\x56\x78\x90\xab\xcd\xef」を使用して、DESアルゴリズムによって暗号化され、Base64で暗号化テキストをエンコードした後、proxy.mysjzs[.]comというサーバに送信されます。図16に、Fridaを使用して、CCCrypt関数をフックした結果を示します。また、図17に、サーバにアップロードされた認証情報を示します。

C2トラフィックがHTTPSではなくHTTPであったため、また認証情報のペイロードが単に固定キーを使用したDESによる暗号化であったため、攻撃者がネットワーク トラフィックを盗聴し、ペイロードを捕捉して、ペイロード内のApple IDとパスワードを盗むことができた点に注意してください。

図 15 Kuaiyong.ipaがユーザーのApple ID とパスワードの入力を求める
 

図 16 Apple IDユーザー名とパスワードがDESによって暗号化される
 

図 17 暗号化されたApple IDとパスワードがサーバに送信される
 

軽減

Palo Alto Networks WildFireが首尾良く対応URLフィルタリングによりC2トラフィックもブロックされ、ドライバや悪意のあるペイロードやアプリのダウンロードができなくなります。また、既知のDualToyサンプルを特定するため、AutoFocusタグを作成しました。

ユーザーおよび組織は、類似の攻撃を防ぐために、エンドポイントベースとネットワークベース双方のマルウェア防御ソリューションを展開するようお勧めします。また、携帯電話をUSB経由で信頼されていないデバイスに接続することは避けるようにしてください。モバイルデバイスが大勢の人々に幅広く使用されるようになったことから、悪意のある攻撃者は引き続きさらに手の込んだ新たなモバイルマルウェアの開発を仕掛けてくるはずです。したがって、ユーザーおよび組織は、これまでデスクトップ、ラップトップ、ネットワークに提供されてきたのと同じレベルの保護とユーザー認識を持って対抗する必要があります。

謝辞

分析に協力いただいたPalo Alto NetworksのZhi XuおよびJosh Grunzweigに感謝いたします。

付録

選択されたサンプルのSHA256

b028137e54b46092c5349e0d253144e2ca437eaa2e4d827b045182ca8974ed33  jkting.zip
bbe5fcd2f748bb69c3a186c1515800c23a5822567c276af37585dab901bf550c  new5.zip
26ff76206d151ce66097df58ae93e78b035b3818c24910a08067896e92d382de  NewPhone.dll
24c79edc650247022878ddec74b13cf1dc59a6e26316b25054d015bdc2b7efc7  new_tool.zip
cd432a8a0938902ea3016dae1e60c0a55016fd3c7741536cc9f57e0166d2b1b8  appdata.exe
42290cefc312b5f1e4b09d1658232838b72d2dab5ece20ebf29f4d0d66a7879a  guardmb
7f7a3ed87c63bd46eb8b91a5bb36b399b4eebaf7d01342c13ef695340b9964a6  Mgr_700003.apk
9f84665a891e8d9d3af76b44c1965eba605f84768841dfb748cb05ec119ffd9d  phonedata.exe
c8695fe9decbeedfe1f898464b6aa9da511045721c399486d00b889d888c8121  zWDLzv.dll
f2efc145d7d49b023d97a5857ad144dd03a491b85887312ef401a82b87fb1b84
c32c64196bb4e038657c3003586563407b5a36db74afb837a5b72f71cf1fadf1  DevApi.dll
dee13984156d1b59395126fcac09f407ef7c7d7308643019ccee6e22683ea108  insapp.dll
eae9fda5ca026d2cc0fbdd6f6300d77867dae95a5c1ab45efdb4959684f188d2  insapp.ini
899e3c72e2edf720e5d0f3b0dfbf1e2dcc616277c11cf592ab267a9fa0bfbac9  kuaiyong.ipa
c8695fe9decbeedfe1f898464b6aa9da511045721c399486d00b889d888c8121

C2ドメイン

www.zaccl[.]com
pack.1e5[.]com
rsys.topfreeweb[.]net
abc.yuedea[.]com
report.boxlist[.]info
tt.51wanyx[.]net
hk.pk2012.info
center.oldlist[.]info
up.top258[.]cn
dl.dswzd[.]com