DNS設定を乗っ取りAndroidデバイスに感染するRoaming Mantis

ルーターのDNS設定の乗っ取りを通じてAndroidデバイスに感染するマルウェアが、韓国を中心としたアジア地域で活動しています。

Kaspersky Dailyでは先日、ルーターのDNS設定を改竄し、「facebook.apk」というファイル名のAndroidマルウェアのダウンロードを促すIPアドレスへ誘導する攻撃についての記事『ルーターのDNS改竄によりダウンロードされる「facebook.apk」の内部構造を読み解く』を公開しました。

前回記事の時点では、ダウンロードされる悪性アプリとして「facebook.apk」を紹介しましたが、このアプリは「chrome.apk」のファイル名を使っていることもあります。このapkファイルは、インストール時に端末情報とIDの読み取り、SNSテキストメッセージの読み取りや送信など、数多くの権限を要求します。また、Webブラウザーアプリの画面に自分の画面をかぶせる形でメッセージを表示して、氏名と生年月日の入力を促す画面へと誘導します。

この攻撃は、当社の調査によると、韓国を中心にアジア地域をターゲットにしています。Kaspersky Labでは、これを「Roaming Mantis」と名付けました。今回の記事では、新たに発見された内容を紹介します。

2段階認証用情報の窃取

Test.dexの解析を進めた結果、Kaspersky Labは奇妙な点に気づきました。

図1. 日本語環境に対応する箇所に見られる韓国語メッセージ

上図は日本語の環境に感染した際に表示される文字列を切り取ったものですが、本来ならば日本語のメッセージが指定されているべきところに、韓国語が指定されています。それぞれのメッセージの意味するところは、次のとおりです。

  • Googleアカウントに問題があります。音声認証のため、Googleアカウント認証用の認証コードを入力してください
  • 認証番号
  • 認証番号を入力してください

メッセージの内容から、攻撃者が氏名と生年月日に加え、2段階認証の情報も入手しようとしていると判断できます。SMS/MMSメッセージの受信、送信、読み取り、書き込み、そして音声の記録の権限を求めるのも、2段階認証用の認証コードの窃取に利用するためではないかと考えられます。

上記メッセージは、本来ならば英語話者に対しては英語、日本語話者に対しては日本語の同内容のメッセージが表示されるはずだったと思われます。韓国語話者には韓国語、繁体字中国語使用者向けには繁体字のメッセージが指定されていました。しかし実際には、英語話者向けの箇所と日本語話者向けの箇所にも韓国語のメッセージが指定されていました。こうしたミスが見過ごされている点は、攻撃者が韓国と繁体字中国語使用者に特別な関心を持っていることをうかがわせます。

通信先の隠蔽

Kaspersky Labでは、前回記事の執筆時点で、悪意あるアプリの内部になぜかハードコードされている正規サイトドメイン(”http://my.tv.sohu[.]com/user/%s”)を発見していましたが、その詳細については不明でした。解析の結果、このドメインはマルウェアの本来の通信先を隠蔽するために使われていることが判明しました。

以下に詳細を示します。

図2. ハードコードされた正規サイトドメイン

新たに発見された「”329505231|329505325|329505338″」という文字列は、上記サイトのアカウントIDが「|」で区切られたものです。

図3. アカウントID

http://my.tv.sohu[.]com内の上記のアカウントIDに対応するページ(http://my.tv.sohu[.]com/user/<アカウントID>)からコンテンツを入手すると、マルウェアはHTMLコードの特定部分から中国語の文字列を抽出します。

以下は、「http://my.tv.sohu[.]com/user/329505338」の場合の例です。

図4. マルウェア制御用のユーザープロファイルの例

目的のページにアクセスすると、マルウェアは、WebページのHTMLコードから、ハードコードされた正規表現「<p>([\u4e00-\u9fa5]+?)</p>\s+</div>」に一致する文字列を抽出します。続いて、各文字を0x4E00で減算し、右側に3ビットシフト演算し、「beg」の文字を鍵としてxorすることでデコード処理を行います。

図5. 通信先をデコードするためのコード

その結果、マルウェアの本当の通信先であるIPアドレスと、ポート番号が現れます。最終的にマルウェアは、Webソケットを使って、この通信先に接続します。

4月7日に、機能の一部が大きく変更された検体が発見されました。この検体では、ハードコードされた正規Webサイト、アカウント、次の通信先を取得するための正規表現などの変更を確認しています。

md5 f3ca571b2d1f0ecff371fb82119d1afe 4d9a7e425f8c8b02d598ef0a0a776a58
日付  2018年3月29日 2018年4月7日
正規サイト http://my.tv.sohu.com/user/%s https://www.baidu.com/p/%s/detail
アカウントID ●      329505231

●      329505325

●      329505338

●      haoxingfu88

●      haoxingfu12389

●      wokaixin158998

パターン “<p>([\u4e00-\u9fa5]+?)</p>\s+</div>” “公司</span>([\\u4e00-\\u9fa5]+?)<“
暗号化された dex \assets\db \assets\data.sql
エンコード Base64 Base64 + zlibによる圧縮

加えて、test.dexのファイル名が変更され、暗号アルゴリズムがBase64からBase64+zlibに変わっています。マルウェアの作成者は、積極的にコードをアップデートしているようです。

リサーチャー向け:指令サーバーをデコードする際には、以下のPythonスクリプトをご利用ください。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import re
page = open(sys.argv[1],”rb”).read()
#pattern = u’&lt;p&gt;([\u4e00-\u9fa5]+?)&lt;/p&gt;\s+&lt;/div&gt;’ # my.tv.sohu.com
pattern = u’公司&lt;/span&gt;([\u4e00-\u9fa5]+?)&lt;’ # baidu.com
match = re.search(pattern, page.decode(“utf-8″))
ext = match.group(1)
dec = ”
j = 0
for i in range(len(ext)):
dec = dec + chr((ord(ext[i]) – 0x4e00) &gt;&gt; 3 ^ ord(‘beg'[j]))
j = (j+1) %3
print(dec)

スクリプトのインプット、アウトプットの例:

$ python dec_facebook_apk.py my.tv.sohu.com_329505338.html
220.136.76[.]200:8844
$ python dec_facebook_apk.py www.baidu.com_p_wokaixin158998_detail.html
220.136.179[.]5:28833

上記の変更点とは別に、もう一つ興味深い点も発見されました。メールプロトコルを通じて指令サーバーと通信する新たな機能が、このマルウェアに追加されていました。送信データには言語、電話番号、アクセス情報、指令サーバーへのPING試行結果が含まれます。

検知状況

カスペルスキー製品では、Roaming Mantisの悪質なapkファイルを「Trojan-Banker.AndroidOS.Wroba」として検知します。この検知名をもとに2018年2月9日から4月9日の2ヶ月間、カスペルスキーのクラウドネットワーク「Kaspersky Security Network(KSN)」の統計情報から確認を行ったところ、以下の結果となりました。

図6. KSNの統計情報

ユニークユーザー数はわずか150超ながら、検知数は6,000を超えています。検知数が最も多かったのは韓国、次いでバングラデシュ、続いて日本でした。マルウェアの設計とKSNのデータから、このマルウェアは主にアジア地域を狙って拡散されていると考えられます。

カスペルスキー製品での検知数だけでは規模が図りかねるため、指令サーバーのインフラを解析したところ、指令サーバーのインフラに対して一日あたり3,000を超える通信があったことが判明しました。このAndroidマルウェアの活動規模の大きさを示唆しています。マルウェアは通信ごとに感染デバイスの情報を指令サーバーにレポートしており、この中には被害者の所在国を示すシステムロケールが含まれています。この情報によれば、被害者の98%が韓国のロケール(ko_KR)を示しています。

以下の図は、観測結果を基に国・地域情報を可視化したものです。

図7. 指令サーバーと通信するスキャン感染デバイス上で観測された国・地域情報

残り2%に含まれるのは、en_GB、en_US、zh_CN、ja_JPなどです。

Kaspersky Labは韓国を筆頭に各国のCERTとコンタクトを取り、情報の共有にあたっています。

まとめ

Kaspersky Labでは、ルーターのDNS設定の改竄を通じて配布された悪意あるAndroidアプリを観測しました。この攻撃を、当社では「Roaming Mantis」と名付けました。当社の調査によると、攻撃に使用されるマルウェアの目的は、2段階認証情報を含むユーザーデータを盗み、Androidデバイスを完全な支配下に置くことであると考えられます。

現時点では、金銭的な動機がうかがわれること、攻撃者のOPSECが低いことから、この活動はサイバー犯罪者によるものと考えられます。

調査では、韓国でよく利用されているモバイルバンキングアプリやゲームアプリのAndroidアプリIDが見つかりました。このマルウェアが最も蔓延しているのは韓国で、悪意あるWebページのHTMLやtest.dexで一番に標的となっているのも韓国語でした。こうしたことから、この悪意あるアプリは元々韓国を標的として配布され、後に繁体字、英語、日本語に対応してアジア地域に拡大したと考えられます。

攻撃者がルーターのDNS設定をどのように改竄したのかは、現在のところ不明です。お使いのルーターのDNS設定に不安がある場合は、ルーターのユーザーマニュアルと突き合わせ、DNS設定が改竄されていないか確認してください。手順が不明な場合は、インターネットプロバイダーへお問い合わせください。Kaspersky Labからは、ルーターの管理用Webページのログイン名とパスワードを既定のままにしておかず変更すること、公式以外のページからファームウェアをインストールしないことを強くお勧めします。また、将来的に同様の攻撃が発生したときの備えとして、ルーターのファームウェアを定期的にアップデートしましょう。

調査では、HTMLコード内のコメントアウト、マルウェアの文字列、ハードコードされた正規Webサイトに簡体字が観測されています。ここから、このサイバー犯罪者は簡体字中国語および韓国語に通じていると考えられます。

この攻撃は現在も活発であり、日々アップデートが加えられています。Kaspersky Labは、当社のお客様を保護するべく調査を継続しています。

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

  • 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

ヒント