Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja

Pikërisht në ditët e fundit, Group-IB njoftoi për aktivitetin e Trojanit Android Gustuff. Ai funksionon ekskluzivisht në tregjet ndërkombëtare, duke sulmuar klientët e 100 bankave më të mëdha të huaja, përdoruesit e 32 portofolëve të kriptomonedhave, si dhe të burimeve të mëdha e-commerce. Ndërsa zhvilluesi i Gustuff është një kriminal kibernetik rus me nofkën Bestoffer. Pati disa kohë që ai e lavdëronte Trojanin e tij si "një produkt serioz për njerëzit me njohuri dhe përvojë".

Specialisti i analizës së malware-it të Group-IB Ivan Pisarjov në studimin e tij tregon në detaje se si funksionon Gustuff dhe çfarë rreziku paraqet.

Kë të sulmon Gustuff

Gustuff i përket një brezi të ri të malware-it me funksione plotësisht të automatizuara. Sipas zhvilluesit, trojani është një version i ri të përmirësuar të malware-it AndyBot, i cili që nga nëntori 2017 sulmon telefonat me sistemin operativ Android dhe vjedh para përmes formave të phishing-ut, të maskuara si aplikacione mobile të bankave dhe sistemeve të pagesave të njohura ndërkombëtare. Bestoffer raportoi se çmimi i qirasë për "Gustuff Bot" ishte 800 dollarë në muaj.

Analiza e mostrës Gustuff tregoi se potencialisht trojani synon klientët që përdorin aplikacionet mobile të bankave më të mëdha, si Bank of America, Bank of Scotland, J.P.Morgan, Wells Fargo, Capital One, TD Bank, PNC Bank, si dhe për portofolët e kriptomonedhave Bitcoin Wallet, BitPay, Cryptopay, Coinbase dhe të tjerë.

Fillimisht e krijuar si një trojan klasik bankar, në versionin aktual Gustuff ka zgjeruar ndjeshëm listën e objektivave potenciale për sulm. Përveç aplikacioneve Android të bankave, kompanive fintech dhe shërbimeve të kriptomonedhave, Gustuff synon përdoruesit e aplikacioneve të tregtisë online, dyqaneve online, sistemeve të pagesave dhe mesazherëve. Në veçanti, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut dhe të tjerë.

Pika e hyrjes: llogaritja për një infeksion masiv

Gustuff karakterizohet nga një "klasik" vektor depërtimi në smartfonët Android përmes dërgesave SMS me lidhje për APK. Kur një pajisje Android infektohet nga trojani, në komandën e serverit mund të ndodhi përhapja e mëtejshme e Gustuff-it në bazën e kontakteve të telefonit të infektuar ose në bazën e të dhënave të serverit. Mundësitë funksionale të Gustuff-it janë të dizajnuara për infektim masiv dhe maksimalizimin e kapitalit për operatorët e tij - ai ka një funksion unik të "autoshkarkimit" në aplikacionet legjitime bankare mobile dhe portofolat kripto, që lejon shpejtimin dhe zgjerimin e vjedhjes së parave.

Kërkimi i trojanit tregoi se funksioni i autoshkarkimit është realizuar përmes Shërbimit të Aksesueshmërisë - një shërbim për njerëzit me aftësi të kufizuara. Gustuff nuk është trojani i parë që kalon me sukses mbrojtjen nga ndërveprimi me elementët e dritareve të aplikacioneve të tjera përmes këtij shërbimi Android. Megjithatë, përdorimi i Shërbimit të Aksesueshmërisë në kombinim me autoshkarkimin mbetet ende një fenomen relativisht i rrallë.

Pasi Gustuff shkarkohet në telefonin e viktimës, duke përdorur Shërbimin e Aksesueshmërisë, ai fiton mundësinë të ndërveprojë me elementët e dritareve të aplikacioneve të tjera (bankare, kriptovalutës, si dhe aplikacioneve për blerje online, mesazhe dhe të tjera), duke kryer veprimet e nevojshme për këdo që e keqpërdor. Për shembull, me komandën e serverit, trojani mund të shtypë butonat dhe të ndryshojë vlerat e fushave tekstuale në aplikacionet bankare. Përdorimi i mekanizmit të Shërbimit të Aksesueshmërisë i lejon trojanit të kalojë mekanizmat e mbrojtjes që përdoren nga bankat për të parandaluar trojanët mobilë të brezit të kaluar, si dhe ndryshimet në politikën e sigurisë që Google ka implementuar në versionet e reja të sistemit operativ Android. Në këtë mënyrë, Gustuff "di" të çaktivizojë mbrojtjen Google Protect: sipas pretendimeve të autorit, ky funksion aktivizohet në 70% të rasteve.

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja

Gustuff gjithashtu mund të tregojë njoftime PUSH të rreme me ikona të aplikacioneve mobile legjitime. Përdoruesi klikon në njoftimin PUSH dhe sheh një dritare phishing të ngarkuar nga serveri, ku ai vetë fut të dhënat e kërkuara të kartës bankare ose portofolit të kriptomonedhave. Në një skenar tjetër, Gustuff hap aplikacionin të cilit i është treguar njoftimi PUSH. Në këtë rast, ky program malinj nën komandën e serverit përmes Accessibility Service mund të plotësojë fushat e formularit të aplikacionit bankar për një transaksion të paligjshëm.

Funksionaliteti i Gustuff përfshin gjithashtu dërgimin në server të informacionit mbi pajisjen e infektuar, mundësinë për të lexuar/dërguar SMS, dërgimin e kërkesave USSD, nisjen e SOCKS5 Proxy, kalimin përmes lidhjes, dërgimin e skedarëve (përfshirë fotot e dokumenteve, ekranë, fotografi) në server, dhe rivendosjen e pajisjes në gjendjen e fabrikës.

Analiza e programit malinj

Para se të instalohet aplikacioni malinj, sistemi operativ Android i tregon përdoruesit një dritare që përmban një listë të të gjitha të drejtave që kërkon Gustuff:

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja
Instalimi i aplikacionit do të ndodhë vetëm pas marrjes së miratimit nga përdoruesi. Pas aktivizimit të aplikacionit, trojani do të tregojë përdoruesit një dritare:

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja
Pas kësaj, ai do të fshijë ikonën e tij.

Gustuff është paketuar, sipas autorit, me ndihmën e paketuesit FTT. Pas aktivizimit, aplikacioni rregullisht komunikon me serverin CnC për të marrë komandat. Në disa nga skedarët që kemi shqyrtuar, adresa IP u përdor si serveri kontrollues. 88.99.171[.]105 (në të ardhmen do ta quajmë si <%CnC%>).

Pas aktivizimit, programi fillon dërgimin e mesazheve në serverin http:///api/v1/get.php.

Si përgjigje, pritet një JSON i formatit të mëposhtëm:

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

Me çdo kërkesë, aplikacioni dërgon informacion mbi pajisjen e infektuar. Formati i mesazhit është prezentuar më poshtë. Duhet theksuar se fushat full, extra, apps dhe permission janë opsionale dhe do të dërgohen vetëm në rast të kërkesës nga CnC.

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

Ruajtja e të dhënave të konfigurimit

Gustuff ruan informacion tĂ« rĂ«ndĂ«sishĂ«m pĂ«r funksionimin nĂ« skedarin e preferencave. Emri i skedarit, si dhe emrat e parametrave nĂ« tĂ«, janĂ« rezultat i llogaritjes sĂ« sumĂ«s MD5 nga stringu 15413090667214.6.1<%name%>index <%name%> — emri origjinal i çelĂ«sit. Interpretimi nĂ« Python i funksionit tĂ« gjenerimit tĂ« emrit:

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

Më vonë do ta quajmë nameGenerator(input).
Pra, emri i skedarit të parë: nameGenerator(«API_SERVER_LIST»), ai përmban vlera me emrat e mëposhtëm:

Emri i variablësVlera
nameGenerator(«API_SERVER_LIST»)Përmban një listë të adresave CnC si një varg.
nameGenerator(«API_SERVER_URL»)Përmban adresën CnC.
nameGenerator(«SMS_UPLOAD»)Flaga e parazgjedhur Ă«shtĂ« e vendosur. NĂ«se flaga Ă«shtĂ« aktive – dĂ«rgon SMS nĂ« CnC.
nameGenerator(«SMS_ROOT_NUMBER»)Numri i telefonit në të cilin do të dërgohen SMS-të e pranuara nga pajisja e infektuar. Në parazgjedhje null.
nameGenerator(«SMS_ROOT_NUMBER_RESEND»)Flaga pĂ«r parazgjedhjen Ă«shtĂ« rivendosur. NĂ«se Ă«shtĂ« e vendosur – kur pajisja e infektuar merr njĂ« SMS, ajo do tĂ« dĂ«rgohet nĂ« numrin root.
nameGenerator(«DEFAULT_APP_SMS»)Flaga pĂ«r parazgjedhjen Ă«shtĂ« rivendosur. NĂ«se kjo flag Ă«shtĂ« e vendosur – aplikacioni do tĂ« procesojĂ« SMS-tĂ« e ardhura.
nameGenerator(«DEFAULT_ADMIN»)Flaga pĂ«r parazgjedhjen Ă«shtĂ« rivendosur. NĂ«se flaga Ă«shtĂ« e vendosur – aplikacioni ka tĂ« drejta admin.
nameGenerator(«DEFAULT_ACCESSIBILITY»)Flaga pĂ«r parazgjedhjen Ă«shtĂ« rivendosur. NĂ«se flaga Ă«shtĂ« e vendosur – shĂ«rbimi i aksesueshmĂ«risĂ« Ă«shtĂ« aktivizuar.
nameGenerator(«APPS_CONFIG»)Objekti JSON përmban një listë veprimesh që duhet të kryhen kur ndodhin ngjarjet e aksesueshmërisë të lidhura me një aplikacion të caktuar.
nameGenerator(«APPS_INSTALLED»)Ruaj lista e aplikacioneve të instaluara në pajisje.
nameGenerator(«IS_FIST_RUN»)Flaga resetohet në fillim të funksionimit.
nameGenerator(«UNIQUE_ID»)Përmban identifikues unik. Krijohet në fillimin e parë të botit.

Moduli përpunues i komandave nga serveri

Aplikacioni ruan adresat e serverëve CnC si një masiv të koduar me Base85 të dhënave. Lista e CnC - serverësh mund të ndryshohet kur merr një komandë përkatëse, në këtë rast adresat do të ruhen në skedarin preference.

Në përgjigje të kërkesës, serveri i dërgon aplikacionit një komandë. Vlen të theksohet se komandat dhe parametrat janë përfaqësuar në formatin JSON. Aplikacioni mund të procesojë komandat e mëposhtme:

EkipaPërshkrimi
forwardStartFilloni dërgimin e SMS-ve të pranuara nga pajisja e infektuar në serverin CnC.
forwardStopNdalo dërgimin e SMS-ve të pranuara nga pajisja e infektuar në serverin CnC.
ussdRunKryeni një kërkesë USSD. Numri në të cilin duhet të bëhet kërkesa USSD ndodhet në fushën JSON «number».
sendSmsDërgoni një SMS të vetme (në rast se është e nevojshme, mesazhi ndahet në pjesë). Si parametër, komanda merr një objekt JSON që përmban fushat «to» - numrin e destinacionit dhe «body» - trupin e mesazhit.
sendSmsAbDërgoni SMS (në rast se është e nevojshme, mesazhi ndahet në pjesë) të gjithë kontakteve në pajisjen e infektuar. Intervalli midis dërgesave të mesazheve është 10 sekonda. Trupi i mesazhit ndodhet në fushën JSON «body»
sendSmsMassDĂ«rgoni mesazhe SMS (nĂ«se Ă«shtĂ« e nevojshme, mesazhi do tĂ« ndahen nĂ« pjesĂ«) kontakteve tĂ« specificuara nĂ« parametrat e komandĂ«s. Intervali midis dĂ«rgimeve tĂ« mesazheve Ă«shtĂ« 10 sekonda. Si parameter, komanda merr njĂ« array JSON (fusha «sms»), elementĂ«t e tĂ« cilit pĂ«rmbajnĂ« fushat «to» — numri i destinacionit dhe «body» — trupi i mesazhit.
changeServerKjo komandĂ« si parameter mund tĂ« marrĂ« njĂ« vlerĂ« me çelĂ«sin «url» — atĂ«herĂ« boti do tĂ« ndryshojĂ« vlerĂ«n nameGenerator(“SERVER_URL”), ose «array» — atĂ«herĂ« boti do tĂ« regjistrojĂ« array nĂ« nameGenerator(“API_SERVER_LIST”). NĂ« kĂ«tĂ« mĂ«nyrĂ«, aplikacioni ndryshon adresĂ«n e serverĂ«ve CnC.
adminNumberKomanda Ă«shtĂ« e destinuar pĂ«r tĂ« punuar me numrin root. Komanda pranon njĂ« objekt JSON me parametrat e mĂ«poshtĂ«m: «number» — ndrysho nameGenerator(“ROOT_NUMBER”) nĂ« vlerĂ«n e marrĂ«, «resend» — ndrysho nameGenerator(“SMS_ROOT_NUMBER_RESEND”), «sendId» — dĂ«rgo nĂ« nameGenerator(“ROOT_NUMBER”) uniqueID.
updateInfoDërgoni në server informacionin për pajisjen e infektuar.
wipeDataKomanda është e destinuar për të fshirë të dhënat e përdoruesit. Në varësi të emrit me të cilin është nisur aplikacioni, ndodhin ose fshirja e plotë e të dhënave me rigjenerim të pajisjes (përdoruesi kryesor), ose fshirja vetëm e të dhënave të përdoruesit (përdoruesi sekondar).
socksStartNisni modulin Proxy. Funksionimi i modulit është i përshkruar në një seksion të veçantë.
socksStopNdalo punën e modulit Proxy.
openLinkShkoni në lidhje. Lidhja gjendet në parameterin JSON me çelësin «url». Për të hapur lidhjen përdoret «android.intent.action.VIEW».
uploadAllSmsDërgoni në server të gjitha mesazhet SMS të pranuara nga pajisja.
uploadAllPhotosDërgoni në URL imazhin nga pajisja e infektuar. URL vjen si parameter.
uploadFileDërgoni në URL skedarin nga pajisja e infektuar. URL vjen si parameter.
uploadPhoneNumbersDërgoni në server numrat e telefonit nga lista e kontakteve. Nëse si parameter vjen një objekt JSON me vlerën e çelësit «ab», aplikacioni merr listën e kontakteve nga agenda telefonike. Nëse si parameter vjen një objekt JSON me çelësin «sms», aplikacioni lexon listën e kontakteve nga dërguesit e mesazheve SMS.
changeArchiveAplikacioni ngarkon një skedar nga adresa që është marrë si parametrin me çelësin "url". Skedari i ngarkuar ruhet me emrin "archive.zip". Pas kësaj, aplikacioni e zbërthen skedarin, duke përdorur në rast nevoje fjalëkalimin e arkës "b5jXh37gxgHBrZhQ4j3D". Skedari i zbërthyer ruhet në direktorinë [external storage] /hgps. Në këtë direktori, aplikacioni ruan web-fake (të përshkruar më poshtë).
actionsKomanda është e destinuar për të punuar me Shërbimin e Veprimit, i cili është përshkruar në një seksion të veçantë.
testNuk bën asgjë.
downloadKomanda është e destinuar për të ngarkuar një skedar nga një server i largët dhe për ta ruajtur atë në direktorinë "Downloads". URL dhe emri i skedarit vijnë si parametrat, fushat në objektin JSON me çelësat përkatës "url" dhe "fileName".
removeFshin skedarin nga direktoria "Downloads". Emri i skedarit vjen në parametrin JSON me çelësin "fileName". Emri standard i skedarit është "tmp.apk".
notificationTregon një njoftim me tekstet e përshkrimit dhe titullit, të përcaktuara nga serveri menaxhues.

Formati i komandës notification:

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

Njoftimi, qĂ« krijohet nga skedari qĂ« po studiohet, duket identik me njoftimet, qĂ« krijohen nga aplikacioni, i specifikuar nĂ« fushĂ«n app. NĂ«se vlera e fushĂ«s openApp — True, kur hapet njoftimi, lançon aplikacionin, qĂ« Ă«shtĂ« specifikuar nĂ« fushĂ«n app. NĂ«se vlera e fushĂ«s openApp — False, atĂ«herĂ«:

  • hapet njĂ« dritare phishing, pĂ«rmbajtja e tĂ« cilĂ«s ngarkohet nga direktoria /hgps/
  • hapet njĂ« dritare phishing, pĂ«rmbajtja e tĂ« cilĂ«s ngarkohet nga serveri ?id=&app=
  • hapet njĂ« dritare phishing, e maskuar si Google Play Card, me mundĂ«sinĂ« pĂ«r tĂ« futur tĂ« dhĂ«nat e kartĂ«s.

Rezultati i ekzekutimit të çdo komande aplikacioni e dërgon në set_state.php në formën e një objekti JSON me formatin e mëposhtëm:

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

ActionsService
Në listën e komandave që përpunon aplikacioni, përfshihet action. Kur merr një komandë, moduli i përpunimit të komandave i qaset këtij shërbimi me qëllim që të ekzekutojë komandën e zgjeruar. Si parametrat, shërbimi pranon një objekt JSON. Shërbimi mund të ekzekutojë komandat e mëposhtme:

1. PARAMS_ACTION — kur tĂ« pranohet njĂ« porosi e tillĂ«, shĂ«rbimi nĂ« radhĂ« tĂ« parĂ« merr nga parametri JSON vlerĂ«n sipas çelĂ«sit Type, qĂ« mund tĂ« jetĂ« si mĂ« poshtĂ«:

  • serviceInfo – nĂ«nkomanda merr nga parametri JSON vlerĂ«n sipas çelĂ«sit includeNotImportant. NĂ«se flagu Ă«shtĂ« i barabartĂ« me True — aplikacioni vendos flagun FLAG_ISOLATED_PROCESS nĂ« shĂ«rbimin qĂ« pĂ«rdor Accessibility Service. NĂ« kĂ«tĂ« mĂ«nyrĂ«, shĂ«rbimi do tĂ« niset nĂ« njĂ« proces tĂ« veçantĂ«.
  • root — tĂ« marrĂ« dhe dĂ«rgojĂ« nĂ« server informacionin rreth dritares qĂ« Ă«shtĂ« aktualisht nĂ« fokus. Aplikacioni merr informacionin me anĂ« tĂ« klasĂ«s AccessibilityNodeInfo.
  • admin — kĂ«rko tĂ« drejtat e administratorit.
  • delay — ndalon funksionimin e ActionsService pĂ«r numrin e milisekondave, qĂ« Ă«shtĂ« e specifikuar nĂ« parametrin sipas çelĂ«sit "data".
  • windows — dĂ«rgo listĂ«n e dritareve tĂ« dukshme pĂ«r pĂ«rdoruesin.
  • instalo — instalon aplikacionin nĂ« pajisjen e infektuar. Emri i paketĂ«s — arkivi ndodhet nĂ« çelĂ«sin "fileName". Arkivi vetĂ« ndodhet nĂ« direktorinĂ« Downloads.
  • global – nĂ«nkomanda e dedikuar pĂ«r tĂ« bĂ«rĂ« kalimin nga dritarja aktuale:
    • nĂ« menunĂ« Quick Settings
    • mbrapa
    • nĂ« shtĂ«pi
    • tek njoftimet
    • nĂ« dritaren e aplikacioneve tĂ« hapura sĂ« fundmi

  • launch — nis aplikacionin. Emri i aplikacionit vjen si parametĂ«r sipas çelĂ«sit data.
  • sounds — ndryshon modin e zĂ«rit nĂ« heshtje.
  • unlock — aktivizon ndriçimin e ekranit dhe tastierĂ«s nĂ« tĂ« gjithĂ« shkallĂ«n. Aplikacioni e realizon kĂ«tĂ« veprim me anĂ« tĂ« WakeLock, duke e shĂ«nuar si tag [Application lable]:INFO
  • permissionOverlay — funksioni nuk Ă«shtĂ« realizuar (pĂ«rgjigja pĂ«r ekzekutimin e komandĂ«s — {"message":"Not support"} ose {"message":"low sdk"})
  • gesture — funksioni nuk Ă«shtĂ« realizuar (pĂ«rgjigja pĂ«r ekzekutimin e komandĂ«s — {"message":"Not support"} ose {"message":"Low API"})
  • permissions — kjo komandĂ« Ă«shtĂ« e nevojshme pĂ«r kĂ«rkesĂ«n e tĂ« drejtave pĂ«r aplikacionin. MegjithatĂ«, funksioni i kĂ«rkesĂ«s nuk Ă«shtĂ« realizuar, kĂ«shtu qĂ« komanda nuk ka kuptim. Lista e tĂ« drejtave tĂ« kĂ«rkuara vjen si njĂ« varg JSON me çelĂ«sin "permissions". Lista standarde:
    • 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 — shfaq dritaren e phishing. Sipas parametrave qĂ« vijnĂ« nga serveri, aplikacioni mund tĂ« tregojĂ« dritare tĂ« ndryshme phishing:
    • Trego dritaren e phishing, pĂ«rmbajtja e sĂ« cilĂ«s Ă«shtĂ« e pĂ«rshkruar nĂ« skedarin nĂ« direktorinĂ« /hgps/Rezultati i ndĂ«rveprimit tĂ« pĂ«rdoruesit me dritaren do tĂ« dĂ«rgohet nĂ« adresĂ«n <%CnC%>\/records.php
    • Trego dritaren phishing, pĂ«rmbajtja e sĂ« cilĂ«s ngarkohet paraprakisht nga adresa <%url_param%>?id=<%bot_id%>&app=<%packagename%>Rezultati i ndĂ«rveprimit tĂ« pĂ«rdoruesit me dritaren do tĂ« dĂ«rgohet nĂ« adresĂ«n <%CnC%>\/records.php
    • Trego dritaren phishing tĂ« veshur si Google Play Card.

  • interaktive — komanda Ă«shtĂ« e destinuar pĂ«r ndĂ«rveprimin me elementet e dritareve tĂ« aplikacioneve tĂ« tjera me anĂ« tĂ« AccessibilityService. PĂ«r ndĂ«rveprimin, programi ka implementuar njĂ« shĂ«rbim tĂ« veçantĂ«. Aplikacioni nĂ« studim mund tĂ« ndĂ«rveprojĂ« me dritaret:
    • Aktualisht aktive. NĂ« kĂ«tĂ« rast, parametri pĂ«rmban id ose tekst (emri) i objektit me tĂ« cilin duhet tĂ« ndĂ«rveprohet.
    • TĂ« dukshme pĂ«r pĂ«rdoruesin nĂ« momentin e ekzekutimit tĂ« komandĂ«s. Aplikacioni zgjedh dritaret sipas id.

    Duke marrë objektet AccessibilityNodeInfo për elementet e interesit të dritares, aplikacioni mund të kryejë veprime në varësi të parametrave:

    • focus — vendos fokusin mbi objektin.
    • click — klikoni nĂ« objektin.
    • actionId — kryeni veprimin sipas ID-sĂ«.
    • setText — ndryshoni tekstin e objektit. Ndryshimi i tekstit mund tĂ« bĂ«het nĂ« dy mĂ«nyra: duke kryer veprimin ACTION_SET_TEXT (nĂ«se versioni i Android tĂ« pajisjes sĂ« infektuar Ă«shtĂ« mĂ« i vogĂ«l ose i barabartĂ« me LOLLIPOP), ose duke e vendosur nĂ« skedarin e kopjimit njëër rresht dhe duke e ngjitur nĂ« objekt (pĂ«r versionet mĂ« tĂ« reja). Kjo komandĂ« mund tĂ« pĂ«rdoret pĂ«r tĂ« ndryshuar tĂ« dhĂ«nat nĂ« aplikacionin bankar.

2. PARAMS_ACTIONS — Ă«shtĂ« e njĂ«jta gjĂ« si PARAMS_ACTION, vetĂ«m se vjen si njĂ« array JSON komandash.

Duket se shumë do të jenë të interesuar të dinë se si duket funksioni i ndërveprimit me elementet e dritares së një aplikacioni tjetër. Ky është mënyra si është realizuar kjo mundësi funksionale në 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));
}

Funksioni për ndryshimin e tekstit:

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

KĂ«shtu, me konfigurimin e duhur tĂ« serverit tĂ« kontrollit, Gustuff Ă«shtĂ« nĂ« gjendje tĂ« plotĂ«sojĂ« fushat e teksteve nĂ« aplikacionin bankar dhe tĂ« klikojĂ« butonat e nevojshĂ«m pĂ«r tĂ« kryer transaksionet. Trojani nuk do tĂ« ketĂ« nevojĂ« tĂ« kalojĂ« autorizimin nĂ« aplikacion — mjafton tĂ« dĂ«rgojĂ« njĂ« komandĂ« pĂ«r tĂ« demonstruar njoftimin PUSH me hapjen e aplikacionit bankar tĂ« instaluar mĂ« parĂ«. PĂ«rdoruesi do tĂ« kalojĂ« vetĂ« autorizimin, pas sĂ« cilĂ«s Gustuff do tĂ« jetĂ« nĂ« gjendje tĂ« realizojĂ« autologimin.

Moduli i përpunimit të SMS-ve

Aplikacioni vendos një trajtues ngjarjesh për pranimin e SMS-ve të infektuar. Aplikacioni në studim mund të pranojë komanda nga operatori, të cilat vijnë në përmbajtjen e SMS-ve. Komandat vijnë në formatin:

7!5=

Aplikacioni kërkon në të gjitha SMS-të e ardhura varg. 7!5=, kur zbulohet vargu - dekodon nga Base64 vargun me zhvendosje 4 dhe ekzekuton komandën. Komandat janë të ngjashme me komandat me CnC. Rezultati i ekzekutimit dërgohet në atë numër, nga i cili erdhi komanda. Formati i përgjigjes:

7*5=

Opcionalisht, aplikacioni mund të dërgojë të gjitha mesazhet e pranuara në numrin Root. Për këtë, në skedarin e preferencave duhet të specifikohet numri Root dhe të vendoset flagu i ridirektimit të mesazheve. Mesazhi SMS dërgohet në numrin e sulmuesit në formatin:

—

Gjithashtu opcionalisht, aplikacioni mund të dërgojë mesazhe në CnC. Mesazhi SMS dërgohet në server në formatin JSON:

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

NĂ«se Ă«shtĂ« vendosur flagu nameGenerator(«DEFAULT_APP_SMS») – aplikacioni ndalon pĂ«rpunimin e mesazhit SMS dhe e pastron listĂ«n e mesazheve tĂ« pranuara.

Moduli Proxy

Në aplikacionin e shqyrtuar, është i pranishëm moduli Backconnect Proxy (më pas Moduli Proxy), i cili ka një klasë të veçantë, e cila përfshin fushat statike me konfigurim. Të dhënat konfiguruese ruhen në skemë në formë të hapur:

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja

Të gjitha veprimet që kryhen nga Moduli Proxy regjistrohen në skedarë. Për këtë, aplikacioni në Storage të Jashtëm krijon një direktor me emrin 'logs' (fusha ProxyConfigClass.logsDir në klasën konfiguruese), ku ruhen skedarët e log-eve. Regjistrimi ndodh në skedarë me emrat:

  1. main.txt – nĂ« kĂ«tĂ« skedar regjistrohet puna e klasĂ«s me emrin CommandServer. NĂ« vazhdim, regjistrimi i vargut str nĂ« kĂ«tĂ« skedar do tĂ« quhet mainLog(str).
  2. session-.txt – nĂ« kĂ«tĂ« skedar regjistrohen tĂ« dhĂ«nat log, tĂ« lidhura me njĂ« sesion tĂ« caktuar tĂ« prokseve. NĂ« vazhdim, regjistrimi i vargut str nĂ« kĂ«tĂ« skedar do tĂ« quhet sessionLog(str).
  3. server.txt – nĂ« kĂ«tĂ« skedar regjistrohet tĂ« gjitha tĂ« dhĂ«nat e shkruara nĂ« skedarĂ«t e pĂ«rshkruar mĂ« lart.

Formati i të dhënave të regjistrimit:

[Thread[], id[]]: log-string

Përjashtimet që ndodhin gjatë punës së Modulit Proxy gjithashtu regjistrohen në skedar. Për këtë, aplikacioni formon një objekt JSON në formatin:

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

Ajo konverton në një përfaqësim me tekst dhe e regjistron atë.

LĂ«shimi i modulit Proxy ndodh pas marrjes sĂ« komandĂ«s pĂ«rkatĂ«se. Pas pranimimit tĂ« komandĂ«s pĂ«r tĂ« aktivizuar modul Proksi, aplikacioni aktivizon shĂ«rbimin me emrin MainService, i cili Ă«shtĂ« pĂ«rgjegjĂ«s pĂ«r menaxhimin e funksionimit tĂ« modulit Proxy – aktivizimin dhe ndalimin e tij.

Hapat e aktivizimit të shërbimit:

1. Aktivizon njĂ« timer qĂ« funksionon njĂ« herĂ« nĂ« minutĂ« dhe kontrollon aktivitetin e modulit Proxy. NĂ«se moduli nuk Ă«shtĂ« aktiv – e aktivizon atĂ«.
Gjithashtu, kur ndodh ngjarja android.net.conn.CONNECTIVITY_CHANGE aktivizohet moduli Proxy.

2. Aplikacioni krijon një wake-lock me parametrin PARTIAL_WAKE_LOCK dhe e kap atë. Në këtë mënyrë nuk lejon që CPU i pajisjes të kalojë në gjendjen e gjumit.

3. Aktivizon klasën përpunuese të komandave të modulit Proxy, duke regjistruar paraprakisht vargun mainLog(«start server») dhe

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

ku proxy_cnc, command_port dhe proxy_port – parametrat e marra nga konfigurimi i serverit Proxy.

Klasës përpunuese të komandave i është dhënë emri CommandConnection. Menjëherë pas aktivizimit kryen veprimet e mëposhtme:

4. Lidhet me ProxyConfigClass.host: ProxyConfigClass.commandPort dhe dërgon atje të dhëna për pajisjen e infektuar në formatin JSON:

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

Ku:

  • id – identifikuesi, pĂ«rpiqet tĂ« marrĂ« nga skedari Shared Preference me emrin «x» vlerĂ«n me fushĂ«n «id». NĂ«se kjo vlerĂ« nuk mund tĂ« merret – gjeneron njĂ« tĂ« re. NĂ« kĂ«tĂ« mĂ«nyrĂ«, moduli Proxy ka identifikuesin e tij, i cili gjenerohet nĂ« tĂ« njĂ«jtĂ«n mĂ«nyrĂ« si ID e Bot.
  • imei – IMEI i pajisjes. NĂ«se ndodh njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s – nĂ« vend tĂ« kĂ«saj fushe do tĂ« shkruhet njĂ« mesazh gabimi.
  • imsi — Identiteti NdĂ«rkombĂ«tar i Abonentit tĂ« Mobilit tĂ« pajisjes. NĂ«se ka ndodhur njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushe do tĂ« regjistrohet njĂ« mesazh gabimi.
  • model — Emri i dukshĂ«m pĂ«r pĂ«rdoruesin i produktit pĂ«rfundimtar.
  • manufacturer — Prodhuesi i produktit/pajisjes (Build.MANUFACTURER).
  • androidVersion — njĂ« varg nĂ« formatin « (),»
  • country — vendndodhja aktuale e pajisjes.
  • partnerId – njĂ« varg i zbrazĂ«t.
  • packageName – emri i paketĂ«s.
  • networkType — tipi aktual i lidhjes rrjet, (shembuj: «WIFI», «MOBILE»). NĂ« rast tĂ« njĂ« gabimi kthehet null.
  • hasGsmSupport – true – nĂ«se telefoni mbĂ«shtet GSM, pĂ«rndryshe false.
  • simReady – gjendja e kartĂ«s SIM.
  • simCountry — kodi ISO i vendit (nĂ« bazĂ« tĂ« ofruesit tĂ« kartĂ«s SIM).
  • networkOperator — emri i operatorit. NĂ«se ka ndodhur njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushe do tĂ« regjistrohet njĂ« mesazh gabimi.
  • simOperator — Emri i ShĂ«rbimit tĂ« Ofruesit (SPN). NĂ«se ka ndodhur njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushe do tĂ« regjistrohet njĂ« mesazh gabimi.
  • version — kjo fushĂ« ruan informacionin nĂ« klasĂ«n e konfigurimit, pĂ«r versionet e shqyrtuara tĂ« botit ajo ishte e barabartĂ« me «1.6».

5. Kaloni në modalitetin e pritjes për komandat nga serveri. Komandat nga serveri vijnë në formatin:

  • 0 offset – komandĂ«
  • 1 offset – sessionId
  • 2 offset – gjatĂ«sia
  • 4 offset — tĂ« dhĂ«na

Kur merr një komandë, aplikacioni logon:
mainLog(«Header { sessionId, type[], length[] }»)

Komandat e mëposhtme janë të mundshme nga serveri:

EmriKomandëTë dhënaPërshkrimi
connectionId0ID e LidhjesKrijoni një lidhje të re
SLEEP3KohaPejtoni funksionimin e modulit Proxy
PING_PONG4—DĂ«rgoni njĂ« mesazh PONG

Mesazhi PONG përbëhet nga 4 byte dhe duket si më poshtë: 0x04000000.

Kur merr komandën connectionId (për krijimin e lidhjes së re) CommandConnection krijon një instancë të klasës ProxyConnection.

  • NĂ« prokristimin marrin pjesĂ« dy klasa: ProxyConnection dhe end. Kur krijohet klasa ProxyConnection ndodh lidhja me adresĂ«n ProxyConfigClass.host: ProxyConfigClass.proxyPort dhe dĂ«rgimi i objektit JSON:

 {
    "id":
}

Në përgjigje, serveri dërgon një mesazh SOCKS5, i cili përmban adresën e serverit të largët, me të cilin duhet të krijohet lidhja. Ndërveprimi me këtë server ndodh përmes klasës end. Skematikisht, vendosja e lidhjes mund të paraqitet si më poshtë:

Si Trojan Android Gustuff i merr më të mirat (fiat dhe kriptovaluta) nga llogaritë tuaja

Ndërveprimet rrjetërore

Për të parandaluar analizën e trafikut nga sniffers të rrjetit, interaksioni midis serverit CnC dhe aplikacionit mund të mbrohet përmes protokollit SSL. Të gjitha të dhënat e transmetuara, si nga serveri ashtu edhe në server, janë në formatin JSON. Aplikacioni gjatë funksionimit kryen kërkesat e mëposhtme:

  • http:///api/v1/set_state.php — rezultati i ekzekutimit tĂ« komandĂ«s.
  • http:///api/v1/get.php — marrja e komandĂ«s.
  • http:///api/v1/load_sms.php — ngarkimi i SMS-ve nga pajisja e infektuar.
  • http:///api/v1/load_ab.php — ngarkimi i listĂ«s sĂ« kontakteve nga pajisja e infektuar.
  • http:///api/v1/aevents.php – kĂ«rkesa bĂ«het gjatĂ« pĂ«rditĂ«simit tĂ« parametra qĂ« ndodhen nĂ« skedarin preference.
  • http:///api/v1/set_card.php — ngarkimi i tĂ« dhĂ«nave tĂ« marra pĂ«rmes dritares phishing, qĂ« maskohet si Google Play Market.
  • http:///api/v1/logs.php – ngarkimi i tĂ« dhĂ«nave log.
  • http:///api/v1/records.php – ngarkimi i tĂ« dhĂ«nave tĂ« marra pĂ«rmes dritareve phishing.
  • http:///api/v1/set_error.php – njoftimi pĂ«r ndodhinĂ« e njĂ« gabimi.

Rekomandime

Për të mbrojtur klientët e tyre nga kërcënimi i trojanëve mobil, kompanitë duhet të përdorin zgjidhje të plota, që lejojnë mbikëqyrjen dhe parandalimin e aktiviteteve të dëmshme pa instaluar softuer të tjera në pajisjet e përdoruesve.

Për këtë, metodat e zbulimit të trojanëve mobil duhet të forcohen me teknologji analize komportamentale si të klientit ashtu edhe të vetë aplikacionit. Po ashtu, mbrojtja duhet të përfshijë funksionin e identifikimit të pajisjeve duke përdorur teknologjinë e gishtit digjital, e cila do të lejojë të kuptohet kur llogaria përdoret nga një pajisje jotipike dhe tashmë ka rënë në duar të mashtruesve.

Një pikë thelbësore është ekzistenca e mundësisë për analizën ndërkanal, e cila i jep mundësi kompanive të kontrollojnë risket që lindin jo vetëm në anën e internetit, por edhe në kanalin mobil, për shembull, në aplikacione për bankat mobile, për operacione me kriptovaluta dhe çdo tjetër, ku mund të realizohet një transaksion financiar.

Rregullat e sigurisë për përdoruesit:

  • mos instaloni aplikacione pĂ«r pajisje mobile me sistemin operativ Android nga burime tĂ« tjera pĂ«rveç Google Play, kushtoni vĂ«mendje tĂ« veçantĂ« tĂ« drejtave qĂ« kĂ«rkon aplikacioni;
  • instaloni rregullisht pĂ«rditĂ«simet e sistemit operativ Android;
  • tĂ« kushtohet vĂ«mendje zgjerimeve tĂ« skedave tĂ« ngarkuara;
  • tĂ« mos vizitoni burime dyshuese;
  • tĂ« mos klikoni nĂ« lidhjet e marrĂ« nĂ« mesazhet SMS.

Me pjesĂ«marrjen e Semen Rogačev, specialistit tĂ« ri pĂ«r hulumtimin e kodit tĂ« keqbĂ«rĂ«sit nĂ« Laboratorin e KriminalistikĂ«s Kompjuterike Group-IB.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster