※本ブログは、2015年9月17日から9月21日(米国時間)に公開された米国Palo Alto Networksのブログを要約したものです。

パロアルトネットワークスは9月17日、Appleが配布するソフトウェア開発環境「Xcode」を改ざんして、iOSアプリを感染させる新種マルウェアXcodeGhostの分析レポート(リンク先:英語)をブログに投稿しました。このマルウェアは、中国のiOS開発者が発見し、9月16日に中国のミニブログ新浪微博上で報告していました。

 中国では、Appleの公式サーバーから容量の大きなファイルをダウンロードする際に、通信速度が非常に遅くなることがあり、インストールパッケージが約3GBのXcodeなどを百度雲(バイドゥユン)などほかの共有サーバーで配布されているコピーを使って開発することがあります。この中に、XcodeGhostというマルウェアが含まれていました。

XcodeGhostの技術的な詳細は、本ブログの後半をご覧ください。

パロアルトネットワークスでは、当初NetEase Cloud Music Appをはじめとする2つの有名なiOSアプリが感染していたことを確認していましたが、9月18日に、世界で最も人気の高いインスタントメッセージングアプリであるWeChatなど、さらに多くの人気iOSアプリが感染していることを確認しました。Qihoo 360などのセキュリティ企業 は、コード分析によりApp Storeで人気のアプリをスキャンしています。さらに一部のiOS開発者はクラウドソーシング技術を使用してさらに多くのアプリを解析しています。また、TencentNetEaseJianshuなどのインターネット企業は影響を受ける自社製品について発表しました。

パロアルトネットワークスは、9月18日には39件のiOSアプリの感染を確認しました。感染したものには、インスタントメッセージング、銀行アプリ、モバイル通信事業者のアプリ、地図、株式取引アプリ、SNSアプリ、ゲームなどがありました。特に有名なアプリには、WeChat (Tencentによる開発)、中国で最も有名なUberのような配車アプリのDidi Chuxing (Didi Kuaidiによる開発)、中国で唯一の鉄道チケット購入に使われるオフィシャルアプリのRailway 12306、中国で最大のモバイル通信事業者で使用されるChina Unicom Mobile Office、特に人気の高い株式取引アプリのTonghuashunがあります。

 

図1.  WeChat 6.2.5 も感染
 

一部のアプリは他の国のApp Storeでも利用可能です。特にWeChatは中国だけでなくアジア太平洋地域の多くの国でもよく使われているインスタントメッセージングアプリで、バージョン6.2.5が感染していることを確認しました。Tencentは悪意あるコードを除去したバージョン6.2.6を公開済みです。

 

攻撃を止めるための対応策

9月18日以降、パロアルトネットワークスはApple、Amazon、Baiduと協業し、サンプル、脅威インテリジェンス、調査情報を共有しています。各社は攻撃停止やセキュリティ上の脅威を軽減するための措置をとっています。

9月18日より、AppleはApp StoreからXcodeGhostに感染した一部のiOSアプリを削除しました。また感染の影響を受けた開発者に公式のXcodeによって当該製品を再コンパイルして再提出するよう案内し、XcodeGhostがマルウェアでありApp Storeに影響を与えていることを認めました。

 

 
図2. “Railway 12306”が一時的にApp Storeから削除された様子

 

Amazonも、XcodeGhostを使用してプライバシー情報のアップロードや制御コマンドの送信を行っていると思われるAmazon Web Service上のすべてのC2サーバーをシャットダウンさせるなどの措置を取りました。

Baiduはファイル共有サービスからすべての悪質なXcodeインストーラを削除し、開発者が感染したXcodeを意図せずにダウンロードできないようにする処置をとりました。

 

さらなる感染アプリの公表

過去数日間に、他のセキュリティ企業によってさらに多くのiOSアプリがXcodeGhostに感染していることが公表されています。たとえばQihoo 360はブログに344件の感染アプリを掲載しています。Pangu Teamは3,418件のiOSアプリが感染していることを検出したと公表し、トロイの木馬化されたiOSアプリを検出するためのiOSアプリもリリースされました。

悪質なXcodeインストーラが2015年3月から拡散し、C2サーバーも3月に立ち上がって検索エンジンが感染されたことを考えると、想像以上のiOSアプリが影響を受けている可能性があります。

 

iOSユーザーに対するセキュリティ推奨

iOSユーザーはインストール済みのアプリが感染しているかどうかを検出するために、(iPhoneやiPadでx.pangu.ioへ直接アクセスすることで) Pangu Teamのアプリをインストールすることができます。感染アプリがあった場合、ユーザーは開発者からアップデートされたバージョンが入手可能になるまでそれらを一時的に削除することを推奨します。

潜在的な攻撃や悪用のリスクを軽減するために、さらに二つの対策があります。一つは使用しているApple IDの2ステップ確認を有効にすることです。もう一つは信頼できないWiFiネットワークを使用しないことです。

これらすべての手順を行ったとしても、この種のマルウェアからiOSユーザーが自分で身を守るのは難しいことです。ここで記した注意事項がAppleと開発者を喚起し、同様の攻撃を防止できれば幸いです。

iOS および OS X 開発者への推奨事項

将来的に同様のマルウェアの影響を受けないようにするため、AppleのウェブサイトやApp StoreからダウンロードするXcode、SDK、Command Line Tools、開発元からダウンロードするUnity3Dのようなサードパーティライブラリなどについて、開発者には常に公式ルートによる公認ツールをダウンロードすることを推奨します。

また、開発・インテグレーション・導入で使用するMacintoshにおいてはGatekeeperの保護レベルをデフォルト値に設定することを推奨します。これを行うには、[システム環境設定…] の [セキュリティとプライバシー] へ移動し、[ダウンロードしたアプリケーションの実行許可] において [Mac App Storeと確認済みの開発元からのアプリケーションを許可] を選択します。

最後に、iOSおよびOS X開発者は製品の新しいバージョンをリリースする前に毎回、開発ツールやライブラリの整合性をチェックするようにしてください。これは “codesign” ユーティリティまたはハッシュ値の確認によって行うことができます。

技術的解析詳細

Xcodeの変更

XcodeGhostにおける最も新しい攻撃手法はXcodeコンパイラの変更です。この考え方自体は新しいものではありません。エドワード・スノーデンによって開示された文書に関するThe Interceptのレポート(英語)によると、TCB Jamboree 2012カンファレンスでは“Strawhorse: Attacking the MacOS and iOS Software Development Kit” (MacOSとiOS SDKの攻撃) と呼ばれるプレゼンテーションがありました。

このプレゼンテーションではサンディア国立研究所の研究者がiOSとOS Xの両方でアプリを感染させるためにXcodeを攻撃するアイデアを発表しました。ここで留意すべきことは、The Interceptは2015年3月10日にこのプレゼンテーションを報告し、同じ月にXcodeGhostが発表されたということです。

 

 
図3. エドワード・スノーデンからリークされた文書が同じ攻撃手法を示唆

 

XcodeGhostは悪意ある “CoreServices” オブジェクトファイルをXcodeインストーラに加えていたました。開発者がアプリをコンパイルするために感染したXcodeを使用した場合、リンカーがアプリケーションの実行ファイルに悪意あるオブジェクトファイルをリンクします。これはどのように実現されるのでしょうか?

解析の結果、XcodeGhostもリンカーを制御するためにXcode内の以下のファイルを変更していました。

  • Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/Ld.xcspec

Xcodeでは、上記Ld.xcspecファイルはldリンカーによって使用される設定が含まれています。このファイルの最終行において、 “DefaultValue” 変数の定義が以下の文字列を付加するようにXcodeGhostによって変更されていました。

  • -force_load
    $(PLATFORM_DEVELOPER_SDK_DIR)/Library/Frameworks/CoreServices.framework/CoreServices

 

図4. XcodeGhostによるLd.xcspecファイルの変更
 

この方法を使用することで、悪意あるオブジェクトファイルが標的となる実行ファイルへ強制的にリンクされます。この変更はXcodeのユーザーインターフェイスに表示されることはありませんが、コンパイルログには表示されます。

警告ダイアログの表示

パロアルトネットワークスが9月18日に公開したブログ(英語)では、組み込みのリモートコントロール機能を持つ偽の警告ダイアログをプロンプト表示することで、XcodeGhostの悪質なコードがiCloudのパスワードの抜き取りに使用できることを説明しましたが、現在のバージョンのコードでは、コードの何行かに簡単な変更を行うとできるようになります。

iOSでは、アプリがUIAlertViewクラスによってダイアログ表示する場合、表示したいダイアログの種類を指定するalertViewStyleプロパティが使用されます。たとえばパスワード入力ダイアログを表示する場合、プロパティをUIAlertViewStyleLoginAndPasswordInputに割り当てる必要があります。iOS開発者がどの値も指定しなかった場合、デフォルトではダイアログに入力フォームは現れず、メッセージとボタンのみの警告が表示されます。

パロアルトネットワークスは入手可能なXcodeGhost内のすべてのバージョンの悪質なファイルを確認しましたが、警告ダイアログを表示する際にこのプロパティを指定したものは見つかりませんでした。したがって、現在のXcodeGhostでは直接iCloudパスワードをフィッシングするために使用することはできません。

 

 
図5. XcodeGhostはalertViewStyleプロパティを指定しない

 

しかし、マルウェア作者がalertViewStyle 値とユーザーの入力を処理するデリゲート(プログラムのメンバ関数を参照するための型)を追加するのは非常に簡単です。この方法により、XcodeGhostを使用してどんな種類のパスワードでもフィッシングすることが可能です。

XcodeGhost内の潜在的脆弱性

XcodeGhostは情報のアップロードやC2コマンドの受信にHTTPを使用していました。これらHTTPリクエストおよびレスポンスの内容は、DESアルゴリズムのECBモードにより暗号化されていました。リバースエンジニアリングにより、コード内の暗号化キーを見つけることも難しくありませんでした。

HTTPトラフィックは乗っ取りや、さまざまな方法で偽造が行われる可能性があります。感染したiOSアプリには、悪質なコードによって中間者攻撃 (man in the middle) による制御が可能となる脆弱性があります。この脆弱性を悪用することで、攻撃者はあらゆるURLを任意のスキームで構築し、感染したアプリを開いたり、その後の攻撃のために警告ダイアログを表示したりするよう制御できるようになります。

マルウェアのC2サーバーがシャットダウンされたとしてもこの脆弱性は存在し続けるため、感染したすべてのiOSデバイスで悪用可能であることに注意してください。