Google Playで、人気の韓国バスアプリにドロッパーマルウェアを確認、開発から5年を経て

マカフィーのMobile Researchチームでは、韓国のデベロッパーによって開発された交通アプリシリーズのプラグインとして偽装する、新たな悪意あるAndroid向けアプリを確認しました。このシリーズは、韓国各地域ごとのバス停の場所やバスの到着時刻など幅広い情報を提供しています。シリーズには全部で4つのアプリがあり、そのうち3つは2013年以降、もう1つは2017年頃からGoogle Playで入手可能でした。偽のプラグイン自体はストアにアップロードされておらず、現在アプリはすべてGoogle Playから削除されています。偽のプラグインの分析中、私たちはデバイス上にインストールされた最初のダウンローダーと追加のペイロードを探したところ、シリーズのアプリごとにデバイス上にマルウェアを投下するある特定のバージョンがあったことを発見しました。それらはそれぞれ同じ日にアップロードされており、開発から5年を経てGoogle Playから削除されたものもあったということになります。

図1 Daegu BusアプリのキャッシュされたGoogle Playページ(シリーズのアプリの1つより)

悪意あるこのアプリがインストールされると、私たちが最初に取得した偽のプラグインを含むハッキングされたWebサーバーから追加のペイロードをダウンロードします。 偽のプラグインがダウンロードされてインストールされた後は、まったく異なる動作をします。交通アプリのプラグインとして機能し、トロイの木馬をデバイスにインストールし、ユーザーに自分のGoogleアカウントパスワードを入力させるよう促しデバイスを完全に支配しようとします。 興味深いのは、マルウェアがネイティブライブラリを使いってデバイスを支配し、さらにライブラリを削除して検出されないようにしていることです。 NaverKakaoTalkDaumSKTなど、韓国で人気のあるサービスの名前が使用されています。ただし、テレメトリデータによると、感染したデバイスの数はかなり少なく、最終的なペイロードは少数のターゲットグループにしかインストールされていなかったことが分かっています。

この攻撃について

次の図は、マルウェアの分散からデバイスへの感染まで全体的な流れを説明しています。

図2 デバイス感染プロセス

悪意あるバージョンの交通アプリがインストールされると、偽のプラグインが既にインストールされているかどうかを確認し、インストールされていない場合はサーバーからダウンロードしてインストールします。 その後、偽のプラグインによって投下されるトロイの木馬に似た追加のネイティブのトロイの木馬バイナリをダウンロードして実行します。 すべてが完了すると、C2サーバーと接続して受信したコマンドを処理します。

初期のダウンローダー

次の表は、このシリーズの各交通アプリの悪意あるバージョンに関する情報を示しています。 Google Playのインストール統計の数が示すように、これらのアプリは多くのデバイスにダウンロードされています。

正規のバージョンのアプリとは異なり、「libAudio3.0.so」という名前のネイティブライブラリが含まれています。

図3 悪意のあるネイティブライブラリが埋め込まれた交通アプリのバージョン

アプリのBaseMainActivityクラスでは、悪意のあるライブラリをロードし、startUpdate()およびupdateApplication()を呼び出します。

図4 アプリにロードされ実行されている悪意あるライブラリ

startUpdate()は、「background.png」という名前の特定のフラグファイルが存在するかどうか、偽のプラグインがすでにインストールされているかどうかを確認して、アプリが正しくインストールされているかどうかを確認します。 デバイスがまだ感染していない場合は、偽のプラグインがハッキングされたWebサーバーからダウンロードされ、被害者にトーストメッセージを表示した後にインストールされます。 updateApplication()は、同じハッキングされたサーバーからネイティブバイナリをダウンロードし、それを動的にロードします。 ダウンロードされたファイル(libSound1.1.soとして保存される)は、メモリにロードされた後に削除され、最後にトロイの木馬として活動するためのエクスポートされた機能を実行します。 前述のとおり、このファイルは偽のプラグインによってドロップされたファイルと似ています。これについては、この記事の後半で説明します。

図5 追加のペイロードダウンロードサーバー

偽のプラグイン

偽のプラグインは、ファイル拡張子「.mov」のハッキングされたWebサーバーからダウンロードし、メディアファイルのようにみせます。それがインストールされ実行されると、プラグインが正常にインストールされたことを示すトーストメッセージ(韓国語)を表示し、playMovie()という名前のネイティブ関数を呼び出します。 するとすぐに偽のプラグインのアイコンが画面から消えます。 アセットフォルダー内に格納されているLibMovie.soに実装されたネイティブ関数は、libpng.2.1.soファイルのふりをして現在実行中のアプリのディレクトリに悪質なトロイの木馬を投下します。投下されたトロイの木馬はもともとXOR演算により暗号化された LibMovie.so に埋め込まれており、実行時に解読されます。 許可を与えた後、投下されたトロイの木馬内のエクスポートされた関数「Libfunc」のアドレスはdlsym()を使用して動的に検索されます。ファイルシステムに落とされたバイナリは検出されないように削除され、最後にLibfuncが実行されます。

図6 マルウェアがインストールされた際のトーストメッセージ

他の分岐プロセスでは、インストールされているSDカードの「naver.property」ファイルにアクセスしようとし、成功すると、Googleのフィッシングページを表示する「.KaKaoTalk」アクティビティを開始しようとします(詳細は次のセクションで)。次の図がドロッパーの全体的な流れを説明しています。

図7 ドロッパーの実行フロー

これは、「.KaKaoTalk」アクティビティがエクスポートされることを示すマニフェストファイルの一部です。

図8 Androidマニフェストが定義するエクスポートされた「.KaKaoTalk」アクティビティ

JavaScriptでのフィッシング

KakaoTalkクラスはローカルのHTMLファイルjavapage.htmlを開き、感染したデバイスに登録されているユーザーの電子メールアドレスが自動的に自分のアカウントにログインするように設定されます。

図9 Kakao Talkクラスが悪意あるローカルhtmlファイルをダウンロード

ページの読み込みが完了すると、被害者の電子メールアドレスはJavaScript関数setEmailAddressを介してローカルページに設定されます。 偽の韓国語のGoogleログインWebサイトが表示されます。

図10 悪意のあるJavaScriptがユーザーアカウントを使って偽装されたGoogleログインページ

私たちが確認したマルウェアの作成者によるGoogleの正規サービスの悪用の例は次の通りです。

  • 被害者のGoogleアカウントとパスワードを搾取
  • 特定のアカウントのパスワード回復を要求
  • 新しいGoogleアカウントの作成時に予備のメールアドレスを設定

フィッシング攻撃の興味深い要素は、マルウェアの作成者がGoogleの正規サービスの復旧アドレスとして自分の電子メールを設定しようとした点です。 たとえば、ユーザーがフィッシングページの新しいGoogleアカウント作成リンクをクリックすると、マルウェア作成者のメールアドレスをRecoveryEmailAddressのパラメータとして偽装されたリンクが開かれます。

図11 偽装されたJavaScriptが新しいGoogleアカウントを作成するための予備のメールアドレスを設定

幸いにも、エンドユーザーにとって、上記の悪意のある試みはどれも成功していません。 マルウェア作成者のメールアドレスのパラメータは、アカウント作成段階では単に無視されます。

トロイの木馬

Googleのフィッシングページに加えて、トロイの木馬の「Libfunc」関数(偽のプラグインによってドロップ、またはサーバからダウンロードされる)が実行されると、携帯電話は完全に不正アクセスされ、 次のC2サーバーのハードコードされたリストからコマンドを受け取ります。 このトロイの木馬の主な機能は、「doMainProc()」という関数に実装されています。 機能が異なるトロイの木馬にはいくつかの変種がありますが、全体としては、ほとんど同じです。

図12 ハードコードされたC2サーバーのリスト

ハードコードされたC2サーバーの位置情報は次のようになります

図13 C2サーバーの位置

doMainProc()内で、トロイの木馬はC2サーバからコマンドを受け取り、適切なハンドラーを呼び出します。次のスイッチブロックの一部は、このトロイの木馬がどのような種類のコマンドをサポートしているかを示しています。

図14 投下されたトロイの木馬に実装されたコマンドハンドラーのサブセット

見た通り、普通のトロイの木馬が持っているすべての機能を持っています。 デバイス上のファイルのダウンロード、アップロード、削除、リモートサーバーへの情報の漏洩などです。 次の表は、サポートされているC2コマンドについて説明しています。

図15 C2コマンド

このコマンド処理ループに入る前に、このトロイの木馬はデバイス情報ファイルをサーバーに送信したり、デバイスのUIDをチェックしたりするなど、いくつかの初期化を行います。 UIDチェックが1を返した後に初めて、ループに入ります。

図16 コマンドループに入る前に接続されたサーバー

これらのコマンドの中では、特にディレクトリインデックスが重要です。 ディレクトリ構造は「kakao.property」という名前のファイルに保存され、ユーザーデバイス内の指定されたパスにインデックスを付けながら、特定のキーワードでファイルをチェックし、一致する場合はリモートアップロードサーバーにファイルをアップロードします。 これらのキーワードは韓国語で、その翻訳英語版は以下の表の通りです。

図17 検索ファイルのキーワード

キーワードを見ることで、マルウェアの作成者が軍事、政治などに関連するファイルを探していたことが予測できます。これらのファイルは別のサーバーにアップロードされます。

図18 キーワードマッチングファイルのアップロードサーバー

結論

このようなアプリは、機密情報を漏えいさせるために、ユーザーに気づかれることなく悪意あるプラグインなどをインストールさせることを容易にします。また、マルウェアが公式のGoogle Playストアに侵入するのはめずらしくなく、ユーザーがデバイスを保護するのを困難にしています。このマルウェアは、通常のフィッシング攻撃を目的としたものではなく、被害者のデバイスから軍事や政治関連のファイルを検索し、機密情報を漏洩させることを目的とした標的を絞り込んだ攻撃だったと考えられます。 信頼できるソースからダウンロードした場合であっても、ユーザーは常に信頼できるアプリケーションをインストールする必要があります。

Hashes (SHA-256)

Initial Downloader (APK)

  • 19162b063503105fdc1899f8f653b42d1ff4fcfcdf261f04467fad5f563c0270
  • bed3e665d2b5fd53aab19b8a62035a5d9b169817adca8dfb158e3baf71140ceb
  • 3252fbcee2d1aff76a9f18b858231adb741d4dc07e803f640dcbbab96db240f9
  • e71dc11e8609f6fd84b7af78486b05a6f7a2c75ed49a46026e463e9f86877801

Fake Plugin (APK)

  • ecb6603a8cd1354c9be236a3c3e7bf498576ee71f7c5d0a810cb77e1138139ec
  • b8b5d82eb25815dd3685630af9e9b0938bccecb3a89ce0ad94324b12d25983f0

Trojan (additional payload)

  • b9d9b2e39247744723f72f63888deb191eafa3ffa137a903a474eda5c0c335cf
  • 12518eaa24d405debd014863112a3c00a652f3416df27c424310520a8f55b2ec
  • 91f8c1f11227ee1d71f096fd97501c17a1361d71b81c3e16bcdabad52bfa5d9f
  • 20e6391cf3598a517467cfbc5d327a7bb1248313983cba2b56fd01f8e88bb6b9

※本ページの内容は、2019年2月4日(US時間)更新の以下のMcAfee Blogの内容です。
原文:MalBus: Popular South Korean Bus App Series in Google Play Found Dropping Malware After 5 Years of Development

著者:Jaewon Min and Yukihiro Okutomi