メールアプリを装うAndroid版バンキングマルウェア、ドイツの銀行を標的に

概要

フォーティネットは最近、メールアプリを装ってドイツの大手銀行を標的にする、Android版バンキングマルウェアを検出しました。このバンキングマルウェアは、ドイツの15種類ものモバイルバンキングアプリからログイン認証情報を盗み出すよう設計されています。また、ウイルス対策モバイルアプリに対抗する機能や、30種類のウイルス対策プログラムを妨害してそれらの起動を阻止する機能も搭載されています。

マルウェアのインストール

マルウェアはメールアプリを装っています。マルウェアがインストールされると、そのアイコンが下図のようにランチャーに表示されます。


図1:マルウェアアプリのアイコン


図2:デバイス管理者権限の要求

以前のブログ(Android版バンキングマルウェアがFlash Playerを装い、大手銀行を標的に)で取り上げたAndroid版マルウェアと同様、このマルウェアもユーザーを騙してデバイスの管理者権限を有効にします。それが成功すると、偽のメールアイコン(マルウェアアプリ)はランチャーに表示されなくなりますが、マルウェアはバックグラウンドで活動を続けます。

このマルウェアアプリで利用可能な実行権限を以下に示します。


図3:マルウェアの実行権限

ご覧のように、マルウェアは、「電話番号に直接電話する」、「SMSメッセージを送信する」、「テキストメッセージ(SMS)を受信する」といった危険な実行権限を持つようになります。

マルウェアの仕組み

ここでは、マルウェアの仕組みについて、技術的に詳しく分析します。マルウェアが起動を開始するときに使用される主要なコードを以下に示します。

上図のコードを使用して、マルウェアは3つのサービス(GPService2、FDService、AdminRightsService)を開始し、そのアイコンを非表示にします。これらのサービスはバックグラウンドで動作し続けます。

次に、このマルウェアで実行される3つのサービスを分析します。

1.GPService2サービス

このサービスはバックグラウンドで動作し、デバイス上で動作しているすべてのプロセスを監視し、さらに標的とする銀行への攻撃も行います。ユーザーには、アプリ起動時に、正規のバンキングアプリに似たカスタム画面がオーバーレイ表示されます。その中には、各銀行に合わせてカスタマイズされたさまざまなログイン画面もあります。さらに、この監視サービスは、一部のウイルス対策モバイルアプリとサービスユーティリティを妨害して、それらの起動を阻止しようとします。

GPService2の実装において使用される主要コードを以下に示します。

リストv3は、動作中のプロセス名と共に格納されます。クラスcom.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.aの定義を以下に示します。

上図のコードから、com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.aがこのマルウェアのパッケージ名であること、com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.bで標的の銀行とペイロードのURLを格納すること、com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.cは将来的に標的となるアプリのリストになるであろうこと(フォーティネットの分析で確認される予定)、そしてcom.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.dで標的のウイルス対策アプリを格納することがわかります。

i.b関数の定義を以下に示します。

上図のコードを使用するマルウェアは、ユーザーがいつウイルス対策アプリを起動しているかを検出できます。それから、マルウェアはこのウイルス対策アプリがcom.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.dのリストにあるかどうかをチェックします。リストにある場合は、ホームランチャー画面に戻り、ウイルス対策アプリの起動を阻止します。

次にこの.a関数の定義を示します。

この関数は主にC2サーバーとの通信に使用され、標的の各銀行に適切なペイロードを要求して受信します。正規アプリの上に、カスタマイズしたWeb画面がオーバーレイ表示されます。DialogCustomWebの実装を以下に示します。

2.FDServiceサービス

このサービスはバックグラウンドで動作し、デバイス上で動作しているすべてのプロセスを監視します。これは標的のアプリリストも攻撃します。標的のアプリリストは、現在空になっています。作成者はこれから新しい標的のアプリを追加していく意図があると考えられます。フォーティネットでは、人気の高いソーシャルメディアアプリがいくつか含まれる可能性があると推測しています。そしてユーザーには、アプリ起動時に、正規のアプリに似た偽のGoogle Playカード画面がオーバーレイ表示されます。フィーティネットは、このマルウェアファミリを引き続き監視し、新たな標的のアプリが追加されたら報告していきます。

FDServiceの実装において使用される主要コードを以下に示します。

変数のcom.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.a.cは現在空です。DialogGooglePlayCardは、正規アプリの上にオーバーレイ表示されてGoogle Playカードを模した動作をし、ユーザーを騙してクレジットカード情報を引き出します。

3.AdminRightsServiceサービス

このサービスは、マルウェアが初めて起動したときに、デバイス管理者権限を要求します。サービスが実行されると、アプリの削除がさらに困難になります。

ユーザーから情報を盗み出し、C&Cからコマンドを取得

マルウェアがインストールされると、マルウェアはデバイスについての情報を収集し、それをC&Cサーバーに送信して、新しい実行コマンドでサーバーが応答するのを待機します。

以下のコードは、サーバーの応答を解析し、新しいコマンドを実行するために使用されます。

com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.b.ap is "Server response: ".
com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.b.af is "OK".
com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.b.ag is "command".
com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.b.ah is "params".
com.jlkbvcbyjjscyxvsudkmjabndnkrbn.a.b.ai is "timestamp".

クラスAPIHandlerFactoryは、C2サーバーから受信したコマンドを処理するために使用されます。

@Keep public static a invoke_getHnd(String arg1) {
        n v0_2;
        if(arg1.contains(b.h)) {
            com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.i v0 = new com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.i();
        }
        else if(arg1.contains(b.o)) {
            l v0_1 = new l();
        }
        else if(arg1.contains(b.j)) {
            v0_2 = new n();
        }
        else if(arg1.contains(b.i)) {
            p v0_3 = new p();
        }
        else if(arg1.contains(b.p)) {
            d v0_4 = new d();
        }
        else if(arg1.contains(b.G)) {
            com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.b v0_5 = new com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.b();
        }
        else if(arg1.contains(b.q)) {
            com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.c v0_6 = new com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.c();
        }
        else if(arg1.contains(b.r)) {
            r v0_7 = new r();
        }
        else if(arg1.contains(b.s)) {
            q v0_8 = new q();
        }
        else if(arg1.contains(b.t)) {
            s v0_9 = new s();
        }
        else if(arg1.contains(b.u)) {
            o v0_10 = new o();
        }
        else if(arg1.equals(b.v)) {
            h v0_11 = new h();
        }
        else if(arg1.equals(b.w)) {
            g v0_12 = new g();
        }
        else if(arg1.equals(b.x)) {
            com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.a v0_13 = new com.jlkbvcbyjjscyxvsudkmjabndnkrbn.api.b.a();
        }
        else if(arg1.equals(b.l)) {
            j v0_14 = new j();
        }
        else if(arg1.equals(b.m)) {
            m v0_15 = new m();
        }
        else if(arg1.equals(b.y)) {
            k v0_16 = new k();
        }
        else {
            a v0_17 = null;
        }

        return ((a)v0_2);
    }
}

マルウェアは、C2サーバーから以下のコマンドを受信できます。

rent&&&: start intercepting all incoming SMS messages;
sms_stop&&&: stop intercepting incoming SMS messages;
sent&&&: send a text message;
ussd&&&: send a USSD request;
delivery&&&: send SMS messages to all contact list numbers;
api_server: change the address of the command and C2 server;
Appmass: send mass text messages
windowStop: add a specified app to the exclusion list so that when the app is launched, the phishing screen is not displayed;
windowStart: delete a specified app from the exclusion list;
windowsnew: download an updated targeted apps list from C2 server;
updateInfo: send information collected from device to C2 server;
freedialog: display a templated-based dialog using Webview;
freedialogdisable: cancel the display of the Webview dialog;
adminPhone: change the phone number used to send SMS messages
killStart: set a password for screenlock;
killStop: clear the password from screenlock;
notification: display a notification with the received parameters.

収集されてC&Cサーバーに送信されるデバイス情報としては、デバイスIMEI、ISO国コード、Androidビルドバージョン、デバイスモデル、電話番号などがあります。トラフィックを以下に示します。マルウェアは、HTTPS経由でC2サーバーと通信します。また、復号された要求と応答のパケットも以下に示します。

バージョン情報の「11/06/16」はマルウェアアプリの作成日を示している可能性があります。

マルウェアアプリは、インストール済みアプリリストも収集し、C2に送信します。

次に、コマンド「killStart」が実行されて新しいパスワードが画面ロックに設定される方法を確認していきます。

関数t.aは、画面ロックの新しいパスワードをリセットするために使用されます。マルウェアがC2サーバーからコマンド「killStart」を受信すると、パスワードに9991を設定します。さらに、フォーティネットでは、関数t.aを呼び出してパスワードに8320を設定する別のコードも検出しました。

ドイツの大手銀行アプリを標的に

以下に示すように、フォーティネットは、標的となるアプリリストに15個のバンキングアプリがあることを検出しました。

このマルウェアの今後のリリースでは、別の銀行や他の組織が追加される可能性があります。

この悪意あるアプリがインストールされ、デバイス管理者権限が取得されると、標的のバンキングアプリをユーザーが初めて起動したときに、その悪意あるアプリからそのC2サーバーに対してHTTPS経由でペイロード取得要求が送信されます。そしてC2サーバーは偽のカスタムログインWebページで応答し、悪意あるアプリは正規バンキングアプリの上にこの偽のカスタマイズログイン画面をオーバーレイ表示し、入力されたバンキング認証情報を収集します。

このマルウェアが標的にしている各銀行向けに、さまざまなカスタムログイン画面が存在します。

認証情報の漏洩

フォーティネットは、標的のバンキングアプリのオーバーレイを通じて、認証情報を盗み出すのに使用されたプロセスを分析しています。このプロセスは、マルウェアが標的の銀行に向けて挿入するすべてのオーバーレイで共通しています。

マルウェアがC2サーバーから偽の銀行のペイロードをダウンロードする際にキャプチャされたトラフィックを以下に示します。C2サーバーは、正規アプリの上にオーバーレイ表示されるカスタムログイン画面を提供します。

ユーザーが認証情報を送信すると、マルウェアはその情報をC2サーバーに送信します。その際、HTTPS経由でC2サーバーと通信します。

ウイルス対策モバイルアプリの妨害

マルウェアは、一部のウイルス対策モバイルアプリとサービスユーティリティを妨害して、それらの起動を阻止しようとします。このようなアプリには以下のものがあります。

com.qihoo.security
com.antivirus
com.thegoldengoodapps.phone_cleaning_virus_free.cleaner.booster
com.antivirus.tabletcom.nqmobile.antivirus20
com.kms.free
com.drweb
com.trustlook.antivirus
com.eset.ems2.gp
com.eset.ems.gp
com.symantec.mobilesecurity
com.duapps.antivirus
com.piriform.ccleaner
com.cleanmaster.mguard
com.cleanmaster.security
com.sonyericsson.mtp.extension.factoryreset
com.anhlt.antiviruspro
com.cleanmaster.sdk
com.qihoo.security.lite
oem.antivirus
com.netqin.antivirus
droiddudes.best.anitvirus
com.bitdefender.antivirus
com.dianxinos.optimizer.duplay
com.cleanmaster.mguard_x8
com.womboidsystems.antivirus.security.android
com.nqmobile.antivirus20.clarobr
com.referplish.VirusRemovalForAndroid
com.cleanmaster.boost
com.zrgiu.antivirus
avg.antivirus

マルウェアを取り除くには

まず、ユーザーはマルウェアのデバイス管理者権限を無効にできます([Settings] -> [Security] -> [Device administrators] -> [Device Admin] -> [Deactivate])。

これでユーザーは、コマンド「adb uninstall [パッケージ名]」を使用することで、ADB(Android Debug Bridge)を介してマルウェアをアンインストールできます。

ソリューション

マルウェアの検体は、フォーティネットのウイルス対策シグネチャAndroid/Banker.GT!tr.spyにより検知されます。

盗まれた情報をC&Cサーバーに送信するトラフィックは、フォーティネットのIPSシグネチャAndroid.Banker.German.Malware.C2により検知できます。

まとめ

このマルウェアは、複数の悪意ある機能を1つのアプリに実装し、感染を最大限に活用します。15行ものドイツの大手銀行を標的にし、各銀行の正規アプリの上にカスタム画面をオーバーレイ表示します。また、ウイルス対策モバイルアプリに抵抗する機能や、30種類のウイルス対策プログラムを妨害してそれらの起動を阻止する機能も搭載されています。攻撃者は、C&Cコマンドで標的にされるように正規アプリのリストを制御できます。

フォーティネットでは、今後もこのマルウェアファミリの活動を監視し続け、フォーティネット製品において適切なセキュリティソリューションが開発されるようにします。

付録

ハッシュ関数:

SHA256: 216cde0f92e601ec0e65218f9cc13dc22bdf6cb7e46c2d2a22a7dc4488238e1b

C&Cサーバー

polo777555lolo[.]at

polo569noso[.]at

wahamer8lol77j[.]at