海賊版iOS App StoreクライアントがAppleのiOSコード審査を回避

By

Category: Threat Prevention, Unit 42

Tags: , , , ,

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

概要

Apple公式のApp Storeは開発者から提出されたアプリを、厳密にコード審査することで有名です。この強制的なポリシーはiOSユーザーのプライバシーとセキュリティを確保するセキュリティエコシステムの中で最も重要なメカニズムの一つです。しかし私たちは、Appleのコード審査を回避して、海賊版やクラッキングされたiOSアプリを配布するための新手法を実装したリスクウェア「ZergHelper」を確認しました。本稿では私たちの調査結果とiOSデバイスユーザーの潜在的なセキュリティリスクについて説明します。

このアプリは2015年10月30日にApp Storeで利用可能になりました。2016年2月19日に、あるユーザーがV2EX (中国の開発者フォーラム) に議論となる投稿を作成するまでの間に、ZergHelperの隠し機能に気づいた人はいないようでした。私たちは2月19日にAppleと調査結果を共有し、Appleは速やかにApp Storeから当該アプリを削除しました。

私たちが確認したアプリは “开心日常英語 (Happy Daily English・原文の「語」は中国語字体)”という名前で、中国本土のiOSユーザー向けの、複合的かつ完全に機能する「サードパーティー製App Storeクライアント」となります。パロアルトネットワークスでは、このアプリのエンタープライズ署名版を公式ではない場所から発見しました。このアプリ内には直接的に悪質のある機能は見つからなかったため、私たちは「リスクウェア」として分類し「ZergHelper」と名付けました。

図1: App Storeに掲載された “Happy Daily English”または“ZergHelper”

ZergHelperには以下のようなセキュリティ上のリスクが存在します。

  • セキュリティが満たせていない修正版iOSアプリのインストールを行う
  • アプリケーションの署名と配布のためエンタープライズ証明書や個人証明書を不正使用し、審査されていないコードの追加やプライベートAPIの悪用を行う
  • Apple IDの入力を促し、ユーザーと複数のApple IDを共有。これらのIDを使用してAppleサーバーにログインし、バックグラウンドでさまざまな操作を行う。
  • 作者によるコードの動的更新によって将来的なiOSセキュリティ制限を回避できる機能の拡張を行おうとする
  • iOSエコシステムを攻撃する用途での他のマルウェアによる悪用が懸念されるため、慎重に扱うべき危険を伴う新しい技術を有している

ZergHelperはユーザーがいる物理的な場所に応じて異なる動きをすることで、Appleのアプリ審査プロセスを通ったとみられています。中国以外のユーザーに対しては、記載されている通りの「英語の勉強アプリ」として動作します。しかし中国からこのアプリにアクセスすると、本来の機能が発動します。

ZergHelperの本来の目的は、海賊版やクラッキングされたiOSアプリやゲームを含む別のApp Storeを提供することだと考えられます。このアプリは主要製品「XY Helper」から名付けられた中国の会社によって開発されました。ZergHelperは脱獄不要で使用できる、XY Helperの「公式App Store」版となるのです。

このリスクウェアはエンタープライズ証明書を不正使用することに加えて、脱獄されていないデバイス上にアプリをインストールする新しいアプローチ、つまりアプリのログイン、購入、ダウンロードにWindows用Apple iTunesクライアントの簡易版を再実装します。またiOSデバイスでアプリを署名するために、Appleのサーバーから無料の個人開発用証明書を自動的に生成するApple Xcode IDEの機能も実装します。これは攻撃者がAppleの独自プロトコルを解析し、8か月前に導入された新しい開発者向けプログラムを悪用していることを意味します。

さらにZergHelperはユーザーが自身のIDを使用しなくてもよいように、複数の有効なApple IDをユーザーと共有します。

ZergHelperのコードは複雑で、アカウント情報を搾取してサーバーに送信しているかは不明です。このアプリは統計情報を追跡するため、サーバーへ自動的にデバイス情報を送信します。作者はアプリをさらに拡張し、ZergHelperの枠組みを活用することでAppleの追加審査を必要とせずにコードを遠隔から更新できるようにするため、プログラミング言語のLuaを使用しようとしているようです。

私たちはエンタープライズ証明書によって署名された50以上のZergHelperアプリを識別しました。これらアプリは異なる経路 (チャネル) で複数の作者によって拡散しました。

ZergHelperの拡散と機能

ZergHelperは次の方法でインストールされるよう設計されています。iOSユーザーが中国からXY Helperの公式サイトにアクセスした場合、トップの広告バナーからApp Storeへ移動し、彼らの製品である「XY Apple Helper」 (図2の左側) をインストールするよう促すページが表示されます。このボタンをクリックすると公式App Storeが自動的に開かれ、 “Happy Daily English” アプリのページが表示されます (図2の右側)。

オリジナルの “Happy Daily English” アプリはオープンソース化され、OSChinaで “HappyEnglishSentences8k” という名前のプロジェクトとしてホスティングされています。ZergHelperの作者たちはそれをコンパイルし、自身の危険なコードを埋め込みます。少なくとも “xi”、”zhang”、”zhangzq” というユーザー名を使用した3人が共同で開発しているようです。プロジェクトの内部名称はXYFactoryで、アプリの内部名称は “AppStore_4.0.1” でした。

図2: App StoreからZergHelperをダウンロードするようユーザーを誘導する公式サイト

デスクトップのブラウザか各種プラットフォーム上のiTunesクライアントを使用してアプリを閲覧すると、アプリの名前は “开心日常英語 (Happy Daily English)” として表示されます。しかしiPhoneやiPadにインストールすると、同じロゴを使用して名前は “XY助手 (XY Helper)” に変わります。これはアプリのInfo.plistファイル内のCFBundleDisplayName値と同じです (図3)。私たちの分析では、WebフォームでAppleにアプリを提出するときに作者が異なる名前を入力し、Appleの審査プロセスでその矛盾が識別されなかったことが分かりました。

図3: アプリ名はiTunesページと矛盾

アプリが起動するとすぐにinterface[.]xyzs.comというURLに接続し、HTTPリクエストの結果に基づいて異なる応答が返されます。中国本土以外のIPアドレスからアクセスが来た場合、Webページは404 Not Foundのエラーを返すよう設定されています。この場合、アプリは英語学習インターフェイスのみを表示し (図4)、それ以外の機能はこれら地域のユーザーには提供されません。

図4: 異なる場所からのユーザーに対して別々のインターフェイスを表示
(左は中国外からアクセスした場合、右は中国からアクセスした場合)

私たちはApp Storeの審査機関がどこにあるのかを知りません。もし所在地が中国本土でなければ、この方法で正式なアプリに見えるようごまかすことができます。アプリの動作を分析したところ、審査機関が中国にある場合でも、作者が審査期間中にWebページをシャットダウンしてしまえば、実際の機能を確認することができませんでした。

中国のユーザーの場合、別のユーザーインターフェイスが現れます (図4の右側)。その後アプリは「安定性の問題を解決する」ためとして、2つの構成プロファイルをインストールするよう促します。しかし実際にはデバイス登録チャレンジとWebクリップがインストールされるのです (図5)。これらプロファイルは2015年12月2日にGo Daddy Secure Certificate Authorityで発行された “xyzs.com” という証明書で署名されています。なお、デバイス登録チャレンジは関連するMDM (モバイルデバイス管理) システムにデバイスを登録するために使用されます。

図5 アプリはGoDaddyが発行した証明書で署名された2つのプロファイルをインストールするよう促す

このアプリでは、多くのiOSアプリやゲームをデバイスに直接インストールする機能が提供されます。公式App Storeのように人気アプリ、人気ゲーム、売り上げの高いアプリなどのページがあります (図6)。唯一の違いは、ZergHelperで提供されるアプリやゲームは無料で提供されており、海賊版である可能性が高いことです。

図6: メインユーザーインターフェイス

設定タブでは、iOS 9.0以前のバージョンを使用しているデバイスユーザーもApple IDとパスワード入力ができるようになっています。パスワードはアプリによって保存されると考えられます。「私はApple IDを持っていません。無料で取得します」(図7)という別のボタンがありますが、ここで提供されるApple IDがどこから来たのかは確認できていません。

図7: 「私はApple IDを持っていません。無料で一つ取得したいです」

脱獄されていないデバイス上でサードバーティApp Storeのように動作する新しいアプローチ

ZergHelperは脱獄されていないiOSデバイス向けのサードパーティー製App Storeを構築するためにユニークな方法を使用しています。海賊版やクラッキングされたiOSアプリを広めるために、これまで確認されていない2つのApp Storeの審査を通過する新しい手法を使用しています。

小さなiTunesクライアントを装う

ZergHelperはPC用のiTunesクライアントとAppleのApp Storeサーバー間で使われるプロトコルを実装し、アプリ内に以下の機能を実装しています。

  • App Storeにログインし、認証データをキャッシュし、アカウントからログアウトする
  • 利用規約をクリックする
  • アプリの情報を取得する
  • アプリを購入する
  • 購入したアプリをダウンロードする

Appleサーバーと通信するときに、ZergHelperは以下のエージェントを使用します。

  • iTunes/12.0.1 (Windows、Microsoft Windows 7 64ビット ビジネスエディション

そのためアプリはWindows 7システム上で実行されるiTunes 12.0.1クライアントとしての動作を試みます。

しかし、どのようにZergHelperがこの機能を使っているのかははっきりしていません。ユーザーが入力したApple IDを使っているか、アプリ自身が提供する「無料の」Apple IDを使っている可能性があります。

個人開発用証明書を適用するXcodeをシミュレート

脱獄されていないデバイス上にアプリをインストールする最も驚くべきアプローチは、ZergHelperが無料の個人用開発証明書を不正利用する手法です。

以前、Appleは年会費を支払ったiOS開発者向けにのみiOS開発用証明書を提供していました。アプリに署名し、物理デバイス上で動作させるようにするためには、この種の証明書は不可欠です。2015年6月から、AppleはApple IDを持っていれば無料で証明書を受け取れるようにする新しいプログラムを提供し始めました。この機能はXcodeバージョン7.0以降からXcode内に埋め込まれており、現時点でXcodeが機能を利用するための唯一の公式手法です。

しかしZergHelperもAppleの認証サーバーから有効な個人開発証明書を取得するために、Xcodeのように動作している可能性があります。Appleはこのプロセスの動作方法とXcodeの実装方法を開示していません。そのためXcodeと全く同じ動作を実行できるようにしてAppleサーバーをうまくだませるように、誰かがXcodeの詳細なリバースエンジニアリングを行ったと推測されます。

図8: Appleサーバーへのログイン

図9: 開発用証明書の取得

ZergHelperは開発用証明書を使用してiOSデバイス上の他のiOSアプリを署名してインストールすることができます。各証明書を使用して承認できるiOSデバイス数には制限があります。以前からこの無料証明書が海賊版アプリのインストールのために悪用される懸念がありましたが、今回の技術により広範囲に自動化された手法で不正利用されたことが確認されました。

私たちがZergHelperを解析したのと同じ週のうちに、何者かにより以下のようなソースコードが販売されたことを確認しました。

  • スマートフォン上やPC上でプロトコルを置き換えることで自動的にApple IDを登録するソースコード
  • ヘルパーユーティリティ (処理支援を行うプログラム) にPCからアプリのDRM (デジタル著作権管理) 認証を提供するソースコード
  • Apple IDを使用して個人開発用証明書を自動的に生成するソースコード

この情報は2月19日に中国の有名なセキュリティフォーラムに投稿されましたが、翌日2月20日に削除されました。

図10: 関連ソースコードを販売する削除済みの投稿 (スクリーンショット)

PCからの海賊版アプリ承認

ZergHelperサーバーからダウンロードした一部の海賊版アプリは、Windows版のXY Helperを利用して「認証」するために、PCにiPhoneやiPadを接続するよう要求します。まだWindowsクライアントをリバースエンジニアリングしていませんが、私たちが知る限り、本来の目的はiTunesのようなWindowsクライアントを実装し、iOSアプリがPCによって承認されたとiOSデバイスに思い込ませることです。(この攻撃手法は過去数年間、いくつかのツールで使用されてきました。)

エンタープライズ証明書の不正使用

WireLurker、YiSpecter、TinyVなど過去に識別した他のiOSマルウェアと同様に、ZergHelperもエンタープライズ証明書を不正利用しています。これらのような種類のアプリには、「即時インストール」がタグ付けされています。ZergHelperはこれらアプリのインストールにitms-serviceプロトコルを使用します。以前のマルウェアと比べたZergHelperの主な違いは、C2 (C&C) サーバーからitms-service plistファイルをダウンロードするだけではなく、デバイス上でアプリをインストールするためにローカルポートのオープンも行えるということです。この機能は個人証明書で署名されたアプリ向けに設計されたとみられます。

図11: エンタープライズ署名済みアプリのPLISTファイルはリモートサーバー上かローカルデバイス上でホストされる

インターネット上の他のZergHelperサンプル

AppleのApp StoreはZergHelperが配布される「経路(チャネル)」の一つにすぎません。各作者はすべて異なるエンタープライズ証明書によって署名された別のバージョンを開発しました。これらのバージョンは異なるチャネルで配布され、脱獄されていないデバイスにインストールすることができます。たとえばXY Helperのウェブサイトにアクセスすると、インストール元をApp Storeまたは直接そのサーバーにするかを選択することができます。

私たちは9つのエンタープライズ証明書で署名された50以上のZergHelperのサンプルを発見しました。それらの “xyChannelId.plist” ファイルには32種類のチャネルIDと33種類のチャネル名が指定されています。

図12: ZergHelperの署名に使用されたエンタープライズ証明書

潜在的なセキュリティリスク

Appleのコード審査

これまでいくつかのマルウェア (例: FindAndCall) や概念実証アプリ (例: Jekyll) が公式App Store上への掲載を成功させてきました。最近の例ではXcodeGhostInstaAgentがあります。これらと比べると、ZergHelperはユーザーインターフェイスが多く、コード特性は非常に怪しげなものです。Appleは通常、審査官がアプリに悪意があるかを確認する方法の技術的な詳細を開示していません。しかしZergHelperによりAppleのレビュー精査を逃れる新しい技術が実証されてしまいました。

エンタープライズ証明書

WireLurker以来、多くのマルウェアや回避的アプリケーションがエンタープライズ証明書を悪用してiOSにインストールされてきました。この問題に対する最大のリスクはエンタープライズ証明書とプライベートAPIの組み合わせです。YiSpecterYoumiはプライベートAPIを悪用してiOS上の個人情報を収集しました。ZergHelperは自動的に無料の開発用証明書を生成するというさらなる手段を講じました。これら証明書の悪用は将来の攻撃への布石となる可能性が懸念されます。

Apple ID

iOSツールの地下市場では、Apple IDの重要性が増しています。ここ数か月の間に、私たちはApple IDを搾取する (例: KeyRaider)、盗んだApple IDから金銭を取得する (例: AppBuyer・リンク先英語)、盗んだApple IDを共有する (例: YiSpecter)、といった設計が行われたマルウェアを見てきました。一部の攻撃者は身代金目的でApple IDを盗んだりフィッシングを仕掛けたりします。ZergHelperの機能も有効なApple IDに依存しています。私たちはZergHelperが盗んだApple IDをサーバーに送り返せるか否かはまだ特定できていません。ZergHelperは無料のApple IDを提供しますが、そのIDがどこから取得されたのか不明なことに留意してください。iCloudやiPhone、iPad上に保存される個人データの量を考えると、Apple IDの利用は伸びていく一方です。

コードの動的なロード

AppleはApp Storeのアプリに対して毎回のアップデート掲載前に再審査を義務付けています。ZergHelperについては再審査で問題が発覚する可能性が高くなります。作者たちはスクリプト言語を使用してこの問題を解決しようとしているようです。

ZergHelperはwax (iOSのネイティブアプリをスクリプト言語のLuaを使って開発するフレームワーク) と呼ばれるオープンソースプロジェクトを使用します。このアプリには現時点で2つの機能が含まれているXYLib.luaファイルが存在します。アプリが最初に起動したとき、このLuaプラグインがロードされて実行されます。このスクリプトはwaxライブラリによって多くのObjective-Cランタイムメソッドを呼び出すことができます。 

図13: ZergHelper内のLuaプラグイン

AppleはiOSアプリが新しいコードの活発なロードや自動更新を禁止しています。これは一部の脆弱性やマルウェアによるリスクを軽減する重要かつ有用なセキュリティ措置です。しかし、この制限を回避する手法がwaxのようなフレームワークやSDKにより提供されます。

コードの活発なロードは、作者の本当の狙いを隠すためにマルウェアで使用される古典的な手法です。ここ数年で、JavaScript、Lua、またはその他のスクリプト言語によるObjective-Cランタイムへのインターフェイスを提供する人気のiOS SDKが登場しています。これら言語によるコード記述の容易性と分析や検出の難しさから、すべての代表的プラットフォームでより多くのマルウェアや業務上不要なアプリ (PUA) によってこのアプローチが採用されていくことが考えられます。(たとえば、私たちが最近解明したAndroidのトロイの木馬であるXbot(リンク先英語)では、主要機能の一部を実装するためにJavaScriptが使われていました。)

対策

私たちは2月19日にAppleにこの問題を報告し、Appleは2月20日にApp Storeからアプリを削除しました。

“开心日常英語” をApp Storeからインストール、もしくは“XY助手” をデバイス上で見つけたiOSユーザーには、アンインストールすることを推奨します。また、iOSデバイス上でプロファイルをチェックすることをお勧めします (「設定 > 一般 > プロファイルとデバイス管理 (またはプロファイル)」から行えます)。 “xyzs.com” のプロファイルが存在する場合、それをすぐに削除してください。

攻撃の痕跡 (IOC)

IOCs

App Store版のサンプル (DRM無効化)

  • e618f19d3614063e3b0fbb1c7faee259e38bde8db8972d84a3b25a771db84ef3 EnglishStudy
  • b1943d0162765e22c0af9b571da2804e4f01d3a063421ee590cab862e8d712be EnglishStudy-v5.0.0.ipa

エンタープライズ署名版のサンプル

  • 03448093b24cea1402a917e18eb08cab82c30a21d981f1b516368ff20c93197c
  • 1377d0c4e861e9f10010dd46806b48aef1c379f3aed28d24e839243f2f4d66da
  • 145688e80784e70112a46970683cae86a8b95b78440eb6a28fc45c60dd6f6ac6
  • 16b83e4babf013370005b42f5f8c12ac9551cd33d7125c33d52f67c1634d48d7
  • 1d9def398ad8d16a104ced4b022a54264d8dd20e91418aa81c941caf4c58ffd0
  • 1ea60e84825d4d70ac3ab9a894cb2b1c8013e18a8a29d108261fd3c0419597b7
  • 24a178b69499d418ab522f5a163bd01946ee73e55ba00a94944fba84cbf26ea0
  • 342520e57e77d81bfa79bafa31fc2f31bd57b1c0cd9bc6da5e4ffc148a807ee1
  • 3636d8e86138bd49bc50b44cf96c172cf99991d1ab28cf4a2559e95931f4a8dc
  • 3d00bd0034cb9a9c33d148c799ea9063221392f5227934dd7d700fdb55b53f4e
  • 3d97417399e3df6ecfda2b1e39b199e0db7594dd7c84488435c0cac14c26ad54
  • 40361936d118c7bcac7996b40055c11bd14376b6d96085aa2dd15139ab22e25b
  • 4229be2075f6077c568861ebef5259212bc08eb73f8008a64e35a854c7d01509
  • 48d4c62aaa60dcdda667583629e6fb8f0fcc7257a6e8b11bbb635f5bb6f21563
  • 4fa19e2a1356d9789d1ea016f1ef3515f8562f28864529676114c9b12dfe409b
  • 50812bb0ddb4081aa8c2e5446fad4d79f7d5ec2fc7b0ce0956d662f399df5d45
  • 55d7a24ec0e5d6e860c835bc51c7e6edd69f707645144386ba425da3f444dbde
  • 560dac5b05480520fd1663d5f4199de941a9831dc134c72b309893f0a350c2a7
  • 57a51f660a47742b59680d78d63fdccb85cf7e5d9ed2d92b2099792fc504f69d
  • 5ab7bd81ffc6841b1a2a35c5c7111bf0531f77016cbc1bf8217f173dcc56ef95
  • 5de9ae15cadd45c7dda974eddf79963e373bd8a73270decdc435e972e21ee983
  • 65b8a3305e9559fbcad8b9c9d66a26a32de26186b6d6a312988bfc79a1971dae
  • 677841c97136338965e34fbcb1dee5ba31489956ddf9c4d882c2546e541777fd
  • 69e725fb2ac26e8ab79d38713ac0ae31ac54f004679c20e4c29a91a7f9bff15e
  • 729d00476a1ee18e4b007ac9371d939124b76d1b7ced8a467d870831e2d776da
  • 741076d5e31fdec814994dc67e7211c707810fc298f3ab7795fed3e2ffe55ed9
  • 76a01170720f433ad5e74b015be4479cadc1abcdd746465150af7a2757ac1c1c
  • 7abbc150fc3c4031f1f79f4298f5c88350b73fa13c78b8ef942caf823ffe58f9
  • 7bb46f38e8ee13db399501f26b91c6aa115945b47e4981aa8b9b5a0f8af128b1
  • 7d789803ecc8af55793f2135462c562dddd8a7e168d175b931e0a109500ad1ce
  • 8683822006535a6f485f0b19d5c1c9bdc818569cd50166cdc9ba5f412dbdf0e2
  • 86dea3d6e9ec51e6df84726b9038fd2dbf0f6c9bc9d4e104f3116edc00d47358
  • 886a3056f2249e84c37e6a71c5127edd08176b8816d2b3ff89841c6200ba3828
  • 8a1daed530b6e922a15a03b0a0e42ff156a1dd46683de310abbdfda36a80df8d
  • 8e11487b4b750bcabfa519723dc3d220307d56d419f9545d82622a96cba726f3
  • 95a30c3ccfc6307dccc5525936ffa13c6ea41b7cd21fa0cf0d1017923de0e4e1
  • 9c69ce5aa40eb9c079a1948ea5dcadcda959c2d255d213b93a15e833a3d044a5
  • a29eb57d78cb005d33bc09cb9dca9c41fdbd18b1b4265549bb7a36a05141d71d
  • a48479b5af351902e76e8c3d7daa64f8fe9c471fb4d8ca9461ef5e912aae0e94
  • a625fa12829d11a280d94249cfa0ade257533b595afc0bd8a11fcb47f9aa9414
  • aca2a87ee21e0330b198175ba1184a808d9e429bec9113c26b741f4a1d830c6e
  • ae388c5e5082dd601bf4b971a47fa12d378d59a6fa753deba0750377c4002814
  • b00d515186ee2c477e100fc3c27c3bf604e03aa907b3f159d7f76a882863c04f
  • b55f265eb6cd87818715019745dc4210f4b9ed5897c9472ec9ef8305df68e09b
  • bc02100ffed4fa0ed57f0ce8bd4166d3525653f4a99b517c076e3cd4ebd9e50a
  • bc706f165b125d078753c8d8269894cfc6fd65fa451fa9d6187aea165f1b9ba1
  • bf13170116efca42592f8b1ef979231038c2150906a70c16b376ee3958e7b309
  • c6e697e73ecc381b73852881fe682664edc1e4cff8bd142323b88f99c57b86fc
  • d305044bceb293fd25e40d642666ebac089e659b4550fdae7ef8536bcab876f1
  • d8f82da11b7fb0ab5ca69c003d8ca626a1b3208ec2557521f6016738c13eda0c
  • da7d1de9cfb294d3402325daccc35f61764fbc8f0cb3cc7403cfe31fd77f690e
  • da871fcadb82bc3c4e366dd02580c7e017dc0d0a689a89cf2883c1bf02683c9d
  • db2afa588b41c50e1d7fa91f2ba5fe7dd1708a7600736a11e8b5fbf2ea7d665f
  • df26f3599ca2ce78de039df0b5f7c83f6c9c445fa126ac8acdfffd2e8b2c44b2
  • f125bfc07becff2614fac5601f2b2efd9cdde5b37329c6fac543ac2b5686b0ab
  • fee18c4c4a9f6827c084519d2f5fae11e66d9024c7711af2b0f5f66d8a98403f

関連するドメイン

  • http://interface[.]xyzs.com/
  • http://tongji[.]xyzs.com/
  • http://download[.]xyzs.com/
  • http://api2[.]xyzs.com/
  • http://software[.]xyzs.com/
  • http://stat[.]das.kingnet.com