2018年4月2日

ルーターのDNS改竄によりダウンロードされる「facebook.apk」の内部構造を読み解く

テクノロジー 脅威

※2018年4月17日更新:検知名、IOCを更新しました。また、より詳しい調査結果を『DNS設定を乗っ取りAndroidデバイスに感染するRoaming Mantis』として公開しました。

2018年3月に、ルーターのDNS設定の改竄によってAndroid向けマルウェアである「facebook.apk」をホストするIPアドレスへ誘導されてしまう事案が発生しました。

このたびカスペルスキーでは、本件に関して、apkファイルの挙動を追ってみました。

この現象は、DNS設定が書き換えられたWi-Fiルーターの配下からWebブラウザー等で通信を行おうとした場合、改竄されたDNSによって悪性IPアドレスへと誘導されてしまうものでした。

図1.「www.example.org」 へアクセスしようと試みて悪性サイトに誘導された画面

誘導先では「Facebook 拡張ツールバッグを取付て安全性及び使用流暢性を向上します。」という怪しげなメッセージが表示された後、「facebook.apk」をダウンロードするよう仕向けられます。

また、「facebook.apk」を配布するHTMLのソースを調査したところ、5つの言語環境に対応したコードが見つかり、それぞれの言語に合わせたメッセージを表示するようになっていました。

図2. 「facebook.apk」を配布するHTMLのソース

しかしながら、メッセージを表示する部分を注意深く見てみると、言語環境が「zh-cn」(簡体字中国語)の際になぜか韓国語のメッセージを表示させるようになっており、おそらく作者がミスを犯したのではないかと推測されます。このため、表示されるメッセージの言語は最終的に4言語(韓国語、繁体字、日本語、英語)でした。

図3. facebook.apkインストール時の画面推移

ダウンロード後の画面推移は、上記の図のとおりです。このFacebookを偽装したパッケージのインストールを行うと、権限を要求するための確認画面が表示されます。よく見ると、端末情報とIDの読み取り、SMSテキストメッセージの読み取り、送信と表示など、さまざまな権限を求めています。インストール後には[端末管理アプリの有効化]画面が表示され、画面ロックやパスワードルールの設定などを行わせる設定へと進みます。また、このアプリは、バックグラウンドで動作するために「アプリにバックグラウンドでの常時実行を許可しますか?」と警告画面を表示し、常に動作させるように仕向けます。

インストール後しばらくすると、Webブラウザーのアプリにかぶせる形で、「Googleアカウント危険、認証完了後使用してください」といったメッセージが表示され、[確認]を押すと、Googleアプリのような画面で「安全認証」とWebブラウザーで表示されます。

図4. 感染後の挙動

アドレスバーを見ると、ローカルホスト(127.0.0.1)とランダムに生成されたポートに対してアクセスしていることが分かります。マルウェアは、スマートフォンに登録されているGoogleアカウントで使用されているメールアドレスを取得して画面に表示し、「氏名」と「生年月日」の入力を促します。

ここで氏名と生年月日を入力すると、次の画面に遷移します。上の例では、アドレスバーに表示されるURLが「127.0.0.0:9764/submit」となっていました。ここから、入力した情報が窃取されたことが疑われます。

「facebook.apk」の内部構造を読み解く

facebook.apkのパッケージ内部には、さまざまなファイルが含まれています。その中には実行されるコードが格納されている「class.dex」という実行ファイルがあり、このファイルの中を解析してみました。

図5. class.dexのコード

class.dexには、「db」というファイルを読み込んでbase64でデコードし、「test.dex」というオブジェクトを生成する処理が含まれています。これを受けて、facebook.apkのパッケージ内から「\assets\db」を取得してデコードしてみたところ、隠された別の実行コードが発見されました。

端末内部のデバッグログからこの部分の挙動を確認すると、内部でtest.dexが抽出されているのを確認できました。

図6. 端末内部のデバッグログ

この解析結果から「facebook.apk」の構造は以下のとおりになっていると言えます。

図7. 「facebook.apk」の構造

抽出したtest.dexを解析してみると、いくつか興味深い挙動を示すコードが明らかになりました。1つ目は、SMSの情報を取得していると思われるコードです。

図8. SMS情報を取得しているコード

インストール時、権限要求画面でSMSの受信や読み取りの権限を求めていることからも、SMSを用いて何かしら悪意ある挙動をすることが狙いの一つであると考えられます。

次に、韓国の銀行やゲームといったアプリにひもづく文字列を内部でクラス化していました。

図9. 韓国の銀行やゲームといったアプリにひもづく文字列

端末内の「/system/bin/」、「/system/xbin/」、「/system/sbin/」、「/sbin/」、「/vender/bin/」に「su」が無いか確認するためのコードも発見されました。

図10. 「su」が無いか確認するためのコード

一般的なAndroid端末には「su」コマンドは入っていないことから、ルート化された端末かどうかの確認またはシステム権限の取得を行うために「su」の存在の有無を確認していると推定されます。

最後に、攻撃者の意図は不明ですが英語の文字列も見つかっています。

図11. 謎の文字列

 

通信先

「facebook.apk」をインストール後に端末内のデバッグログからアプリの挙動を追跡すると、WebSocket通信を開いて「ws://220.136.76[.]200:8844」 へアクセスしていることが確認されました。

図12. 通信関連のデバッグログ

また、「my.tv.sohu[.]com」内の特定の通信先に対してもアクセスを行うためのコードを確認しています。「my.tv.sohu[.]com」自体は正規サイトであり、悪性サイトではありません。

図13. 「my.tv.sohu[.]com」へ通信するためのコード

この通信先へのアクセスは、単にインターネット接続を確認するためのものなのか、アプリ内のそれ以外の挙動と何かしら連動するものなのかについては、まだ調査中です。

Kaspersky Security Networkによる検知

カスペルスキー製品では、「facebook.apk」を「Trojan-Banker.AndroidOS.Wroba」として検知します。この検知名をもとに2018年1月30日から3月30日の2ヶ月間、カスペルスキーのクラウドネットワーク「Kaspersky Security Network(KSN)」の統計情報から確認を行いました。

図14. KSNの統計情報

検知数は8,477件、170ユーザー(ユニーク数)で発見されています。検知国の1位は韓国、2位はインド、3位は日本となっていました。

まとめ

今回のケースでは、攻撃者が各ルーターのDNS設定を改竄する経緯はいまだ不明ですが、Android向けマルウェアをダウンロードさせ、アカウント情報を入力させるなどの手口からは、スマートフォンを利用する人々に対し、何らかの個人情報を奪う目的で配布されていたのではないかと推測されます。また、apkパッケージの内部に、別の実行ファイルを隠して実行させている点も特徴的でした。

調査の結果、韓国で利用されているアプリにひもづく文字列がマルウェア内部に含まれていること、当社の検知データ数では韓国での検知数が多いこと、標的とする言語として韓国語が最初に対象になっていることなどから、元は韓国向けに配布されたアプリであると推察されます。この攻撃が韓国だけに留まらず、繁体字や日本語に対応し、対象を広げているのではないかと推測されます。

お使いのルーターの設定に不安がある場合は、DNS設定が意図せず変更されていないか、ルーターの設定マニュアルと突き合わせて確認してみましょう。手順が不明な場合は、プロバイダーまたはルーターのメーカーに問い合わせることをお勧めします。また、不審なアプリはインストールの際に必要のないさまざまな権限を要求してきますので、絶対にインストールしないでください。

カスペルスキー製品では、これらのマルウェアを以下の検知名で検知およびブロックします。

  • HEUR:Trojan-Banker.AndroidOS.Wroba

脅威存在痕跡(IOC)

 

※以下のIOCは2018年4月16日時点のものです。最新のIOCは、Roaming Mantisに関するSecurelistの記事(英語)をご参照ください。

Malicious hosts:
114.44.37[.]112
118.166.1[.]124
118.168.193[.]123
128.14.50[.]146
128.14.50[.]147
220.136.111[.]66
220.136.179[.]5
220.136.76[.]200
43.240.14[.]44
haoxingfu01.ddns[.]net
shaoye11.hopto[.]org

Malicious apks:
03108e7f426416b0eaca9132f082d568
1cc88a79424091121a83d58b6886ea7a
2a1da7e17edaefc0468dbf25a0f60390
31e61e52d38f19cf3958df2239fba1a7
34efc3ebf51a6511c0d12cce7592db73
4d9a7e425f8c8b02d598ef0a0a776a58
808b186ddfa5e62ee882d5bdb94cc6e2
904b4d615c05952bcf58f35acadee5c1
a21322b2416fce17a1877542d16929d5
b84b0d5f128a8e0621733a6f3b412e19
bd90279ad5c5a813bc34c06093665e55
ff163a92f2622f2b8330a5730d3d636c

class.dex:
19e3daf40460aea22962d98de4bc32d2
36b2609a98aa39c730c2f5b49097d0ad
3ba4882dbf2dd6bd4fc0f54ec1373f4c
6cac4c9eda750a69e435c801a7ca7b8d
8a4ed9c4a66d7ccb3d155f85383ea3b3
b43335b043212355619fd827b01be9a0
b7afa4b2dafb57886fc47a1355824199
f89214bfa4b4ac9000087e4253e7f754

test.dex:
1bd7815bece1b54b7728b8dd16f1d3a9
307d2780185ba2b8c5ad4c9256407504
3e4bff0e8ed962f3c420692a35d2e503
57abbe642b85fa00b1f76f62acad4d3b
6e1926d548ffac0f6cedfb4a4f49196e
7714321baf6a54b09baa6a777b9742ef
7aa46b4d67c3ab07caa53e8d8df3005c
a0f88c77b183da227b9902968862c2b9