脆弱性を抱えるソフトウェア開発キット「Moplus」、実はバックドア機能の実装が判明

中国の検索エンジン「百度(Baidu)」のソフトウェア開発キット(Software Develoment Kit、SDK)「Moplus」に「Wormhole」と呼ばれる脆弱性が確認され、この脆弱性が利用された場合の影響の深刻さゆえに波紋を呼んでいます。この脆弱性は、中国の脆弱性報告プラットホーム「WooYun.og」により確認されました。

しかしながら、トレンドマイクロがこの脆弱性について調査を進めたところ、Moplus SDK 自体にバックドア機能が備わっており、必ずしもそれが脆弱性に由来または関連しているわけではないことが明らかになりました。現時点で、この問題は Moplus SDK のアクセス許可制御とアクセスの制限方法にあると見られています。そのため、脆弱性が関係していると考えられているのですが、実際には、この SDK のバックドア機能により、ユーザ権限なしに以下を実行する恐れがあります。

  • フィッシングサイトへの誘導
  • 任意の連絡先の追加
  • 偽のショート・メッセージ・サービス(SMS)送信
  • リモートサーバへのローカルファイルのアップロード
  • アプリをAndroid端末にインストール

これらのバックドア活動を実行する前に必要な前提条件は、端末をインターネットに接続するだけです。Moplus SDK は非常に多くの Androidアプリに取り入れられているため、1億人の Androidユーザが影響を受けたことになります。また、弊社の調査から、不正プログラムが既に Moplus SDK を利用していることが判明しています。

本稿では、Moplus SDK の不正なコードとそれが Android端末に及ぼす危険について説明します。

図1:Moplus SDK を利用して、端末にユーザに気付かれずに自身をインストールする不正プログラム
図1:Moplus SDK を利用して、端末にユーザに気付かれずに自身をインストールする不正プログラム

■Moplus SDK とは一体何か

Moplus SDK は、Baiduにより作成されました。弊社の調査では、異なる2つのアプリ「Baidu Map」(com.baidu.BaiduMap, 8.7.0)と「奇闻异录」(com.ufo.dcb.lingyi, 1.3)を解析しました。SDK のバージョンは違いますが、コードはほとんど同じものです。

図2:「com.ufo.dcb.lingyi」に組み込まれた Moplus SDK
図2:「com.ufo.dcb.lingyi」に組み込まれた Moplus SDK

図3:「com.baidu.BaiduMap」 に組み込まれた Moplus SDK
図3:「com.baidu.BaiduMap」 に組み込まれた Moplus SDK

どのようにアプリに組み込まれるのか

アプリのマニフェストファイルから、Moplus SDK は独立したプロセスで取り入れられます。「com.baidu.android.moplus.MoPlusService」と呼ばれる主要サービスが、端末の起動中を含め、さまざまな BroadcastReceiver によって開始します。

図4:Moplus は独立したバックグラウンドで組み込まれるため、端末を起動する度に不正なプロセスが自動起動する。
図4:Moplus は独立したバックグラウンドで組み込まれるため、端末を起動する度に不正なプロセスが自動起動する

Moplus SDK はどのようにバックドアとして機能するのか

ユーザがアプリを起動すると、Moplus SDK は自動的にローカルの HTTPサーバを端末に裏で設定します。このHTTPサーバ設定には、簡易なオープンソースの HTTPサーバ「NanoHttpd」を利用します。そして、Moplus SDK は、ソケットを通過するメッセージを監視し続けるため、NanoHttpd を組み込み、このHTTPサーバを変更します。

図5:NanoHttpd を組み込み HTTPサーバを変更する Moplus SDK
図5:NanoHttpd を組み込み HTTPサーバを変更する Moplus SDK

HTTPサーバが接続する TCPポートはいつも同じではありません。今回の調査時には、com.ufo.dcb.lingyi と接続したポート番号は6259で、com.baidu.BaiduMap に対しては、ポート番号40310が接続したことを確認しました。

図6:ローカルの HTTPサーバに接続する TCPポートはいつも同じではない
図6:ローカルの HTTPサーバに接続する TCPポートはいつも同じではない

この HTTPサーバは TCPポートを待機し続け、他の端末から送信されたメッセージを受信し解析します。新しい HTTP要求があれば、そのメッセージのヘッダと本文を受信して解析し、NanoHttpdドキュメントで指定された関数「server」を上書きして、自身のタスクを呼び出します。

図7:ソケット接続から HTTP要求を監視
図7:ソケット接続から HTTP要求を監視

図8:関数「server」を上書きし自身の不正タスクを呼び出す
図8:関数「server」を上書きし自身の不正タスクを呼び出す

これは典型的なコマンド&コントロール(C&C)攻撃モデルです。従来型の C&C攻撃と比べてただ1つの違いは、サーバはユーザ側にあり、攻撃するクライアントはどこにでも存在し得るということです。ファイルのダウンロードやアップロードなどSDKに関連した不正な機能がありますが、それぞれが1つのクラスファイルとして機能します。

図9:Moplus SDK がサポートする不正な機能
図9:Moplus SDK がサポートする不正な機能

図10:不正コマンドと、対応するソースクラスのマップ
図10:不正コマンドと、対応するソースクラスのマップ

図10から、攻撃者は遠隔から位置情報、検索ボックス情報、パッケージ情報、その他の個人情報をユーザの端末から収集できることがわかります。また、遠隔からユーザの端末に連絡先を追加したり、ダウンロードされたファイルを検索したり、特定のファイルをアップロードしたりすることが可能です。こうした不正活動は HTTPリクエストを送信するだけで、どこからでも簡単に実行できます。

図11:バッチ処理で任意の連絡先を追加している例
図11:バッチ処理で任意の連絡先を追加している例

「sendintent」と呼ばれる特別なコマンドを利用して、端末上にローカルのインテントを送信することができます。そのため、ユーザの同意のないまま遠隔から電話をかけたり、偽のメッセージを送ったり、任意のアプリをインストールしたりすることが可能になります。

図12:「sendintent」と呼ばれるコマンドを利用することによって、攻撃者はユーザ端末上で不正な制御を実行できる
図12:「sendintent」と呼ばれるコマンドを利用することによって、攻撃者はユーザ端末上で不正な制御を実行できる

また SDK は「Android application package (APK)」をユーザに気付かれずにインストールし、ルート権限のある端末を識別します。

図13: SDK はアプリをユーザに気付かれずにインストールする
図13: SDK はアプリをユーザに気付かれずにインストールする

図14:ルート権限を持つユーザ識別し、さらに強力な攻撃を実行する
図14:ルート権限を持つユーザ識別し、さらに強力な攻撃を実行する

これらの調査詳細によって、Moplus SDK がバックドア型不正プログラムであるという見方が確信になりました。感染した端末であればどんな端末でも攻撃を受ける可能性があります。弊社では、図16~18が示すように、最新の Android6.0を搭載した Nexus6上で簡単な再現を行いました。Baidu Map を起動すると、不正なサービス「bdservice_v1」が常時バックグラウンドで動作することが確認できました。

図15:不正なサービス「bdservice_v1」がバックグラウンドで常時動作している
図15:不正なサービス「bdservice_v1」がバックグラウンドで常時動作している

図16-18. 携帯端末に連絡先が追加されていく様子
図16:携帯端末に連絡先が追加されていく様子

図16-18. 携帯端末に連絡先が追加されていく様子
図17:携帯端末に連絡先が追加されていく様子

図16-18. 携帯端末に連絡先が追加されていく様子
図18:携帯端末に連絡先が追加されていく様子

Moplus SDK によって設定された ローカル HTTPサーバでは識別認証が行われないため、アプリ開発者のみならず、誰でも攻撃を開始することが可能になります。コマンドひとつで、攻撃者あるいはサイバー犯罪者は、感染した端末を遠隔から制御できます。加えて、彼らは TCPポート番号6259または40310のステータスを確認するため、セキュリティスキャナ NMAP ですべてのネットワークセグメントを検索するだけでいいのです。ポートステータスがオープンであると示されたAndroid端末はすべて遠隔で制御可能です。同じ3G、4Gネットワーク上にある端末だけでなく、同じ LAN上にあるすべての端末が攻撃される可能性があることに注意する必要があります。

これは深刻な不具合であり、おそらく脆弱性「Stagefright」よりも悪質かもしれません。「Stagefright」は Webサイトに誘導するリンクやユーザの電話番号を要求することによって、不正な「マルチメディア・メッセージング・サービス(Multimedia Messaging Service、MMS)」を送信するために利用されました。今回の不具合を利用すると、攻撃者は簡単にネットワークIP を検索することができ、ユーザが何かする必要もなく、またソーシャルエンジニアリングも必要もありません。

■他の確認事項と対策

弊社は、Moplus SDK を利用して自動的かつ定期的に不要なアプリをインストールさせる不正プログラム「ANDROIDOS_WORMHOLE.HRXA」の拡散を確認しました。コード解析から、この不正プログラムがユーザの端末に侵入し端末がルート化されていれば、ユーザに気付かれずにアプリがインストールされます。

この不正プログラムのSHA1ハッシュ値は以下のとおりです。

SHA1: 2FA40A5302D92FB0C5C64CF6197F2D671BA7C30D.

Moplus SDK を組み込んだアプリはどれか?

弊社の情報によれば、Moplus SDK を組み込んだアプリは、バージョン違いや異なるSHA1のものなどあわせて14,112存在します。そのうち4,014が Baidu の公式アプリです。これらのアプリには以前のバージョンを使用しているものもあるでしょう。ユーザが、自分が使用しているアプリのバージョン更新をしていない可能性は十分ありえます。人気の上位20アプリは以下のとおりです。

  • com.qiyi.video
  • com.baidu.video
  • com.baidu.BaiduMap
  • com.baidu.browser.apps
  • com.baidu.appsearch
  • com.nd.android.pandahome2
  • com.hiapk.marketpho
  • com.baidu.hao123
  • com.baidu.searchbox
  • tv.pps.mobile
  • com.mfw.roadbook
  • com.tuniu.app.ui
  • com.ifeng.newvideo
  • com.baidu.netdisk
  • com.quanleimu.activity
  • com.dragon.android.pandaspace
  • com.yuedong.sport
  • com.dongqiudi.news
  • air.fyzb3
  • com.managershare

弊社がBaidu Map の最新のコードを調査するため、バージョン8.7.0を使用した端末を静的プログラム解析した際には、ポート番号40310に接続したままで NanoHttpdサーバはまだオープンの状態であるという結果でした。その後更に調査を進め、2015年10月30日にリリースされた最新のバージョン8.7.5を使用した端末では、コードが実行されないことを確認しました。

図19:静的プログラム解析すると、Moplus SDK の更新後もローカル HTTPサーバは同じ TCPポートにハードコードされたまま残されていた
図19:静的プログラム解析すると、Moplus SDK の更新後もローカル HTTPサーバは同じ TCPポートにハードコードされたまま残されていた

Baidu は不正なコマンドと対応するコードのいくらかを削除し、また、ユーザに気付かれずにルート化された端末に自動的にアプリをインストールする不正なコードも削除しました。しかし図21にあるように、すべての不正な機能が Moplus SDK から除去されたわけではなく、端末はまだ危険な状態にあります。

図20:最新版 Moplus SDK に依然残る不正なコマンドの一部
図20:最新版 Moplus SDK に依然残る不正なコマンドの一部

図21:赤で囲まれた不正機能のみが、最新版 Moplus SDK から削除された
図21:赤で囲まれた不正機能のみが、最新版 Moplus SDK から削除された

トレンドマイクロの対策

トレンドマイクロのモバイル端末向け総合セキュリティ製品「Trend Micro Mobile Security」は、不正な SDK 「ANDROIDOS_WORMHOLE.HRXA」が端末にインストールされる前に検出し、ユーザを守ります。アプリウィルススキャナ機能によって、インストールされているアプリをスキャンし、不正なアプリを削除することができます。無制限の更新とクラウドスキャナ技術によって、携帯端末の不正プログラムからの継続的な保護を保証します。

また、SDK の不正動作が完全に削除されたことが確認できるアップグレード版がない限り、感染したアプリケーションをアンインストールすることをお勧めします。弊社はSDKの更新状況について、引き続き注視しています。

弊社はこのセキュリティ問題について既に Google 及び Baidu に報告済みです。Baiduから弊社への回答によれば、Baiduは、2015年10月30日からこの脆弱性について対処しているとのこと、また、更新したアプリをすでにGoogle Playに提出しており、保留中であるものを除いていくつかはすでに承認を得ている、とのことです。Baiduは、感染したアプリの次期バージョンリリースの際、問題のデッドコードについて削除する予定です。

本件に関する続報はこちらの記事を参照ください。

協力執筆者:Jordan Pan

参考記事:

翻訳:室賀 美和(Core Technology Marketing, TrendLabs)