ブログとストーリー

SpiderLabsブログ

年間50万人以上の読者を魅了しているブログがセキュリティ コミュニティの主要目的地になっているのは、最新の脅威の技術的な分析、重要な脆弱性に関する開示、最先端の研究が掲載されているからです。

Red Alert v2.0: Android 用ボットマルウェアのリバースエンジ ニアで分かった事

(Rodel Mendrez と Lloyd Macrohon による分析)

スパムキャンペーン

それは奇妙なことに Android App の添付ファイルを持つスパムメッセージから始まりました。そ のメールは、添付ファイルが SilverBox という名前の匿名の恋人を見つけるための出会い系ア プリだと漠然と述べています。

Screenshot_e
図 1. スパムサンプル

 

スパムメールに .APK(Android Package Kit)ファイルが添付されているのは珍しいことであり、 デスクトップ PC 上で実行可能な悪意のある実行可能プログラムを主とする従来のものとはか なり異なっています。しかしここにはモバイルデバイス上で動作する Android アプリケーション があります。我々の好奇心は刺激され、私たちはそれを分析してみることに決めました。

初期分析

まず初めに、ウイルス対策エンジンによってファイルがすでに検出されているかどうかをチェッ クし、 すでに検出されていることが分かりました。一般的な検出法で、59 製品中 25 製品で検 出されました。

これまで Android アプリケーションをリバースエンジニアリングする経験がほとんどなかったの で、このアプリを解剖することが楽しく、うまくいけば新しいことが学べるのではと考えました。 スタートするにあたり、我々は Android アプリをリバースエンジニアリングする方法について少 し調査を行い、 ここ, ここ, ここ and ここにいくつかの有益な資料を見つけました。

Apktoolを使用して APK ファイルの解凍とデコードを開始しました。コードが非常に深く難読化 されていることがすぐにわかりました。

Picture2
図 2. DEX ファイルは深く難読化されている

 

次に、ルートディレクトリの AndroidManifest.xml ファイルを確認しました。すべての Android ア プリケーションには、アプリケーションに関する重要な情報と、アプリケーションで使用する必要 があるアクセス許可を示すマニフェストファイルが含まれている必要があります。マニフェストフ ァイルには、ランダムに名前が付けられたアプリケーションの元のパッケージ名が表示されて います。

Picture3
図 3. アプリケーションのパッケージ名
Picture4
図 4. アプリケーションの Android アクセス許可

 

アプリのターゲット SDK バージョンコードは、Android Marshmallow 以降(図 3)です。これは、 platformBuildVersionCode フィールドに示されています。図 4 では、このアプリケーションに必 要な Android のアクセス許可の一覧があります。これらの大部分は、次のような権限を含む不 審なものです: WRITE_SMS, READ_SMS, RECEIVE_SMS, CALL_PHONE, CHANGE_NETWORK_STATE

このアプリで必要となる Android のすべてのアクセス許可を以下の表にまとめました:

Android Permissions

Description

PACKAGE_USAGE_STATS

Allow access user's usage data

READ_CONTACTS

Allow read user's contact provider

RECEIVE_BOOT_COMPLETED

allow application to receive ACTION_BOOT_COMPLETED

that is broadcast after the system finishes booting

ACCESS_WIFI_STATE

Allow access information about WiFi Networks

CHANGE_WIFI_STATE

allow an application to change WiFi connectivity state

ACCESS_NETWORK_STATE

allow application to access information about networks

CHANGE_NETWORK_STATE

allow application to change network connectivity state

READ_PHONE_STATE

Allows read only access to phone state, including the phone number of the device, current cellular network information, the status of any ongoing calls

INTERNET

Allows applications to open network sockets

BROADCAST_PACKAGE_REMOVED

Allows an application to broadcast a notification that an application package has been removed.

VIBRATE

Allows access to the vibrator.

CALL_PHONE

Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call.

READ_CALL_LOG

Allows an application to read the user's call log.

WRITE_SMS

Allows an application to write SMS messages.

RECEIVE_MMS

Allows an application to monitor incoming MMS messages.

READ_SMS

Allows an application to read SMS messages.

RECEIVE_SMS

Allows an application to receive SMS messages.

SEND_SMS

Allows an application to send SMS messages.

SYSTEM_ALERT_WINDOW

Allows an app to create windows shown on top of other apps

WAKE_LOCK

Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming.

DISABLE_KEYGUARD

Allows applications to disable the keyguard if it is not secure.

GET_TASKS

Allows an application to get information about the currently or recently running tasks.

 

Android Studio の AVD(Android Virtual Device)を使用してエミュレータにアプリケーションをイ ンストールしました。ご覧のとおり、アプリを使用するには、ユーザーがアプリをアクティブにす る必要があります。

Picture5
図 5. この悪意のあるアプリをユーザーがアクティブにする必要があります。 ソーシャルエンジニアリングが(スパムの形で)利用者をだますことで活性化させます

 

この段階で、コードをもっとよく理解したかったのですが、難読化を回避することは困難でした。 私たちは苦痛で退屈な IDAPro を使ってアプリケーションをリモートでデバッグしようとしまし た。私たちが行ったもう 1 つの事は、マルウェアを実行してデバイスのメモリをダンプすること です。私たちは余計な文字列を削り落としましたが、これは本当に役に立ちました。これによ り、マルウェアの設定と文字列をアプリケーションから見つけることができました。しかし、役に は立ちましたが、まだ十分ではありません。このマルウェアの仕組みを完全に理解するために は、逆コンパイルされたソースコードが必要でした。

このデバイスでは、Android デバッグブリッジ(ADB)ツールを使用してより興味深い遺物を調 査し、このアプリケーションの VDEX ファイルと ODEX ファイルを見つけました。

Picture6
図 6. .vdex ファイルは、デバイスのアプリケーションの OAT(Ahead of Time)コンパイル・フォルダにあります

 

.VDEX ファイルには APK の非圧縮 DEX(Dalvic 実行可能)コードが含まれ、ODEX には APK のメソッド用にコンパイルされた Ahead Of Time コードが含まれていました。次のステップは、 vDexExtractorツールを使って VDEX filesファイルを逆コンパイルすることでした。

Picture7
図 7. .vdex ファイルを.dex ファイルに変換するための vDexExtractor ツールのコマンドライン

 

もっと簡単な方法があったのかもしれませんが、.VDEX を逆コンパイルして.DEX ファイルに変 換した後、JADX ツールを使用して.DEX ファイルを.JAR ファイルに変換しました。その後、IntelliJ/ Android Studioor またはの使用可能な Java 逆コンパイラのようなツール使用し て .JAR ファイルを逆コンパイルしました。

Picture8
図 8. Android マルウェアは逆コンパイルされています。 このスクリーンショットには Bot のコマンドが表示されています。

 

Java コードを取得した後、次のステップは詳細な静的解析です。

マルウェアの主なアーキテクチャ

マルウェアの主なアーキテクチャは、次の主要カテゴリに分類されています。

  • データベースアクセス - SQLite に格納されたデータ。コマンドもこのデータベースに格納さ れ、この層を介して処理されます。
Picture9
図 9. SQLlite データベースが、コマンド、SMS リスト、テンプレートの保存のためにマルウェアによって作成された

 

  • テレフォニー関連 - デフォルトのテレフォニーパッケージ、ユーティリティ機能を設定します (デバイス ID、SIM シリアル番号、回線番号などを取得します)。
Picture10
図 10.デフォルトのテレフォニーパッケージの設定

 

  • サービス応答ハンドラ – リプライに応答し、コマンドと制御(C&C)サーバへの新しい要求 を開始します。応答ハンドラの中には、
    • GetTemplateHandler
    • PostCallListHandler
    • PostContactListHandler
    • ServerCommandHandler - 主にデータベースに書き込むことでマルウェアを制御する
    • RegisterDeviceHandler
    • SendSmsListResponseHandler
    • GetSmsListResponseHandler
  • ネットワーク接続関連 - このレイヤーは、デバイスをボットとして登録し、接続がオンライン であること、コールリスト、SMS リストなどを確認します。レスポンスは Service ResponseHandlers によって処理されます
  • サービス - 傍受されるインテントを処理する。これらのサービスのいくつかは、マルウェア のライフサイクルを処理し、マルウェアが常に実行されていることを保証します。これらの サービスの例を次に示します。
    • WatchDogService: マルウェアが定期的に実行されるようにタイマーを設定する
    • ControlService: ReadCommandThread: を起動するとともに、デバイスボットを登録し、 C&C サーバーからの指示を待つ
    • デバイスが C&C サーバーに接続されていることを確認する
    • BootReceiver:マシンの再起動時にすべての機能が起動していることを確認する。この ブートレシーバーは、OS のバージョンに応じて、ウォッチドッグサービスが 10 秒または 30 秒ごとに実行されるようにする
    • SmsReceiver: SMS メッセージを傍受する
  • UI - ユーザーからのアクセス許可を要求し、C&C サーバーから受け取ったいくつかのテ ンプレートを他のアプリケーションの上に重ねて、デバイス管理者アクセスを有効にするな ど、ユーザーをさらに欺きます。

主な特徴

マルウェアは、ほとんどの場合、SMS メッセージを傍受するために、デフォルトの電話プロバイ ダとして設定されます。傍受される電話番号のリストは、C&C サーバーによって制御すること ができます。これらの番号からのメッセージはユーザーから隠されることがあります。インター セプトされたメッセージは、C&C サーバーにも送信されます。これは、最近のオンラインバン キングを含むほとんどのサービスで使用されている 2 要素認証コードを傍受するために使用 されます。

デバイス管理者アクセス

マルウェアは、デバイスからのすべてのデータを完全に消去するなど、デバイスへの完全なア クセス権を持っています。マルウェアには、デバイス管理者のアクセスを有効にするための UI がありますが、無効にすることはできません。

ボット&C&C コミュニケーション

ボットは主に HTTP POST 要求を使って特定の URL に通信します。利用できない場合、 Twitter メッセージを通じて別のサービスも試みます。HTTP POST 本体は、Base64 でエンコー ドされ、複雑な暗号化は使用されません。

この URI の形式は次のとおりです:http://controlserver/<messagetype>/

次のメッセージタイプがサポートされています。

  • stbi – 電話番号, iccid, モデル, imei, OS と言語情報と共にデバイスを登録する
  • sy - サーバーから bot_id、imei、type、およびデバイス管理が有効かどうかを渡すコマンド を読み取る。以下は、攻撃者が実行するコマンドの一覧です。
    • startSmsInterception
    • stopSmsInterception
    • sendSms
    • setDefaultSms
    • resetDefaultSms
    • getSmsList
    • getCallList
    • getContactList
    • setAdmin
    • launchApp
    • block
    • sendUssd
    • notify
  • sban - システムにインストールされているアプリケーションのリストを渡すサーバーから、 テンプレートを取得する。このようにして、特定のアプリケーションにオーバーレイするテン プレートを調整する
  • gt - サーバからテンプレートを取得する
  • ssl – exfiltrated sms リストを返す
  • scol – - 連絡先リストを返す
  • scal – exfiltrated コールリストを返す
  • ping - ping bot
  • ucs – 実行されたコマンドを返す
  • std - ?
  • ss - ?

この分析の時点では、ライブ C&C サーバーは実行されていませんでした。そのため、マルウ ェアと C&C サーバー間のトラフィックを監視することができませんでした。トラフィックを監視で きない、難読化されたコード、コマンドを送信したときに数回クラッシュした非常にバグのあるマ ルウェアなど、いくつかの問題のためにいくつかのコマンドのリバースエンジニアリングを完了 できませんでした。しかし、私たちはマルウェアの重要な部分のほとんどをカバーしているよう に感じました。

Picture11
図 11. マルウェアの設定はリソースに保存されています。これは、C&C ドメインが保存されたことです。

 

質問: テストするライブ C&C サーバーがない場合はどうしますか?

答え: 作ってしまうのはどうでしょう!

C&C プロトコルをリバースエンジニアリングした後、ボットが話すためにの C&C サーバーを 迅速かつ大雑把に実装しました。C&C サーバーはマルウェアにハードコードされています が、iptables を使用して簡単にリダイレクトされ、すべてのボット通信が C&C サーバーに送信 されました。

iptables -t nat -A OUTPUT -p tcp --dport <BOT's port> -j DNAT --to-destination <your IP Address>:<port>

Picture12
図 12. adb ツールを使用して、デバイスにシェルして、iptables を使用して すべてのボットトラフィックをコントロールサーバーにリダイレクトできました

 

図 13 および図 14 は、我々が書いたコントロールパネルのスクリーンショットです。ボットの仕 組みを完全に理解するために、我々がリバースエンジニアリングしている間にボットを制御す ることを可能としています。これは Django の Web フレームワークで書かれており、ソースは興 味のある人のためにここにあります

MockUp_regBot
図 13
Mockup2
図 14

 

以下はエミュレータ内で動作しているボットを制御しているコントロールパネルのビデオです。

プロトコルは実際には次のようになります:

  1. ボットが C2 サーバにまだ登録していない場合は、stbi コマンドで登録し、新しいボット ID を取得する
    Stdi_packetcap
    図 15. ボットの初期 POST データには、デバイス情報、IMEI、電話機モデルなどが含まれています

     

  2. 最終的にユーザーに表示するに、sban コマンドを使用してテンプレートのリストを取得する

    Picturegettemplate
    図 16. デコードされた HTTP POST 本体
    (ボットが電話機からアプリケーションリストを送信した際に取得)

     

  3. ループし、サーバーからのコマンドを待ち、これをディスパッチする

    Picturesy
    図 17.新しいコマンドを得るための 10 秒ごとのボットビーコン。

     

  4. 実行されるコマンドに応じてフラグとパラメータの束を設定することにより、データベースを 介してディスパッチが行われる

  5. 別のサービスがデータベースをポーリングし、適切なコマンドを実行する

  6. 連絡先、SMS、および送信記録を送信するといった拡張は、それぞれ scol、ssl、scal コマ ンドを使用して実行される .

    Picture19aa
    図 18. ボットが SMS リストを制御サーバーに返すときにデコードされたデータ
Picture19a
図 19. 抽出された連絡先リストのデコードデータ

 

7. ucs を使用してコマンドが実行されたことをサーバーに通知する

Picture19

図 20. ボット、C&C サーバー間プロトコルの大まかな説明図

 

他のコマンドのいくつかをリバースエンジニアリングしている間に、我々の C2 サーバーを使用 してすべてのデータを正常に抽出することができましたが、非常に多くのバグがあり、間違った データを送信するとクラッシュするため、マルウェア上でそれを実行することは困難でした。

地下マーケット

 

私たちは、逆コンパイルされたソースコードから得られたいくつかの文字列を Google で検索 し、このボットが Red Alert v2.0 BOT として知られていて、7 日間のテスト使用で少なくとも 200 ドル、1 ヶ月間 500 ドル、2 ヶ月間 999 ドルまででレンタルされていることを知りました。

Sochi
図 21.地下フォーラムで Red Alert V2.0 を宣伝しているボット・セラー

 

ロシア語で書かれた広告を訳すと以下のようになります:

こんにちは!
我々は市場に全く新しい製品を導入
Red alert 2.0
同様の製品は他にありません
すべての細部にわたって考慮されています
また、我々は新しい機能を開発しています

機能
-  SMS 送信
-  SMS 傍受
-  APK ロウンチ
-  HTML インジェクション
特徴:
-  APK サイズ 95kb
-  4.4 と 6 以降の全てのバージョンで SMS 傍受
-  85%のボットに管理者権限を提供
-クリーンな APK
-耐久性

独自の機能:
レンタルすれば、あらゆるニーズと任意の数のインジェクションが可能です。
インジェクション開発に必要な支払いはありません。
-  さらに、2 週間に 1 回、新しい機能がサポートされたソフトウェアにアップデートします。アップデート
は、お客様に対しては無料です。

 

このボットは、下記のようにいくつかの異なる国の銀行を対象とすることができます:

オーストラリア

-ANZ Bank

-Bankwest

-CUA

-ME Bank

-Newcastle Permanent

-Suncorp Bank

-Commonwealth

-CitiBank

-ING Bank

-NAB

-St.George

-WestPac

オーストリア

-Raiffeisen

-Volksbank

カナダ

-Bank of Montreal

-CIBC

-Desjardins

-TD Bank

-Royal Bank of Canada

-Tangerine

チェコ

-Air Bank

-Equa Bank

-mBank CZ

ポーランド

-AliorBank

-Alior Business Pro

-Alior Mobile

-BZWK24

-BZWK24 Biznes

-BZWK24 Mobile

-Citi handlowy (Citibank)

-EuroBank

-Getin Bank

-ING

-iPKO

-BGZ BNP Paribas

-PekaoBank

-PekaoBiznes24

-Raiffeisen Poland

-mBank

デンマーク

-Danske Bank

-Nordea

-Jyske bank

-MobilePay

-Sydbank

-Nykredit

ドイツ

-Post Bank

-Commerzbank

-ComDirect

-Sparkasse

-DKB Bank

-Sparda-Bank

FRAフランスNCE

-Crédit Mutuel

-Bankque palatine

-Banque Populaire

-Ma banque

-Lapost bank

-Mes Comptes

-Banque

-Mes Comptes BNP Paribas

リトアニア

-Swedbank lt

インド

-Axis Mobile

-Bank of Baroda

-iMobile by ICICI Bank

-India Bank

-SBI Anywhere Personal

-HDFC Bank MobileBanking

-Union Bank Mobile Banking

-IDBI Bank GO Mobile

-Kotak Bank

-YesBank

イタリア

-Intesa Sanpaolo

-UBI

アイルランド

-Bank of Ireland

-Ulster Bank

-Permanent tsb

日本

-イオン銀行

-三菱 UFJ 銀行

-オリコ銀行

-楽天カード

スペイン

-CaixaBank

-BBVA

-Bankia

-Cajamar

-Caixer automatic Ibercaja

-Banco Sabadell

-Satander Bank

- Unicaja Banco

ルーマニア

-Central Transilvania

-BCR Bank

-Raiffeisen Bank Romania

スウェーデン

-Swedbank

トルコ

-AkBank

-DenizBank

-Finansbank

-Banking banks

-Turkiye Bankasi

-HalkBank

-VakifBank

-YapiKredi

-Ziraat bank

イギリス

-Metro Bank

-Natwest

-Barclays

-Lloyds

-HALIFAX

アメリカ

-Bank Of America

-ChaseBank

-Suntrust

-Capital One

-WellsFargo

ニュージーランド

-Kiwi Bank

 

また、いくつかの決済サービス、小売りアプリケーション、ソーシャルメディアもターゲットにして います。 地下のフォーラムから得たリストです。

ペイメントシステム

-PayPal

-Airbnb

-Coinbase

-Poker Stars

-Neteller

-Skrill

-Unocoin Bitcoin Wallet India

 

CC+VBV Grabbers

-Amazon

-eBay

-LINE

-GetTaxi

-Snapchat

-Viber

-Instagram

-Facebook

-Skype

-UBER

-WeChat

-WhatsApp

まとめます。この Android マルウェアをリバースエンジニアリングすることは楽しく、多くのこと を学びました。APK マルウェアが電子メールでスパム送信されているのは面白かったですが、 悪意のある人にとってこの戦略が本当に効果的であったかどうかは疑問が残ります。マルウェ アはユーザーにインストールの確認を要求し、Android はアクセス許可について多くの警告を 表示します。また、Google Play Protect がすでにこの脅威を検出していたため、Android にイ ンストールするためには、Play Protect を無効にする必要がありました。それ以上のサンプル がスパムされているのを見たことがないので、おそらくこのメールキャンペーンはあまり成功し なかったと思われます。

Thanks Lloyd Macrohon, Nikita Kazymirskyi, Yermek Garifullanov and Phil Hay の協力に感謝します。