Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja

Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja

Së fundmi Group-IB njoftoi për aktivitetin e Trojan-it të Android Gustuff. Ai vepron 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 burimeve të mëdha e-commerce. Ndërkohë, zhvilluesi i Gustuff është një kriminel kibernetik rus me pseudonimin Bestoffer. Pak kohë më parë, ai e reklamonte Trojan-in e tij si "një produkt serioz për njerëzit me njohuri dhe përvojë".

Specialisti për analizën e malware-it Group-IB Ivan Pisarëv në studimin e tij shpjegon në detaje sesi funksionon Gustuff dhe çfarë rreziku përfaqëson ai.

Kush është në shënjestër nga Gustuff

Gustuff i përket një brezi të ri të programeve të dëmshme me funksione të plota automatizuese. Sipas zhvilluesit, Trojan-i është një version i ri e përmirësuar i programit të dëmshëm AndyBot, i cili nga nëntori 2017 sulmon telefonat me OS Android dhe vjedh para përmes formave të falsifikuara të internetit, të cilat maskohen si aplikacione mobile të bankave të njohura ndërkombëtare dhe sistemeve të pagesave. Bestoffer ka raportuar se çmimi i qirasë për "Gustuff Bot" ishte 800 $ në muaj.

Analiza e mostrës së Gustuff ka treguar se potencialisht Trojan-i është drejtuar ndaj klientëve që përdorin aplikacione 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 ndaj portofolëve të kriptomonedhave Bitcoin Wallet, BitPay, Cryptopay, Coinbase etj.

Fillimisht i krijuar si një Trojan bankar klasik, versioni aktual i Gustuff ka zgjeruar ndjeshëm listën e objekteve të mundshme për sulm. Përveç aplikacioneve bankare të kompanive fintech dhe shërbimeve të kriptomonedhave, Gustuff sulmon përdoruesit e aplikacioneve të tregjeve, dyqaneve online, sistemeve të pagesave dhe mesazherëve. Në veçanti, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut dhe të tjerët.

Pika e hyrjes: shpresohet në infektimin masiv

Gustuff ka njĂ« vektor «klasik» pĂ«r infektimin e smartphone-ve Android nĂ«pĂ«rmjet mesazheve SMS me lidhje pĂ«r APK. Kur njĂ« pajisje Android infektohet nga trojani, ai mund tĂ« shpĂ«rndajĂ« Gustuff-it nĂ«pĂ«rmjet kontakteve tĂ« telefonit tĂ« infektuar ose nĂ« bazĂ«n e tĂ« dhĂ«nave tĂ« serverit. Funksionalitetet e Gustuff janĂ« tĂ« dizajnuara pĂ«r infektim masiv dhe maksimizimin e kapitalizimit tĂ« biznesit tĂ« operuesve tĂ« tij – ai ka njĂ« funksion unik tĂ« «autozalit» nĂ« aplikacione legjitime bankare mobile dhe portofolat kriptografikĂ«, qĂ« lejon tĂ« pĂ«rshpejtojĂ« dhe tĂ« pĂ«rmasojĂ« vjedhjen e parave.

Studimi i trojanit ka treguar se funksioni i autolizĂ«s Ă«shtĂ« implementuar me ndihmĂ«n e Accessibility Service — njĂ« shĂ«rbim pĂ«r njerĂ«zit me aftĂ«si tĂ« kufizuara. Gustuff nuk Ă«shtĂ« trojani i parĂ« qĂ« kalon me sukses mbrojtjen ndaj ndĂ«rveprimit me elemente tĂ« dritareve tĂ« aplikacioneve tĂ« tjera pĂ«rmes kĂ«tij shĂ«rbimi Android. MegjithatĂ«, pĂ«rdorimi i Accessibility Service sĂ« bashku me autolizĂ«n mbetet ende njĂ« fenomen mjaft tĂ« rrallĂ«.

Pas shkarkimit në telefonin e viktimës, Gustuff, duke përdorur Accessibility Service, merr mundësinë të ndërveprojë me elementet e dritareve të aplikacioneve të tjera (bankare, kriptovalutash, si dhe aplikacione për blerje online, mesazhe etj.), duke kryer veprimet e nevojshme për sulmuesit. Për shembull, me urdhrin e serverit, trojani mund të klikohet në butona dhe të ndryshojë vlerat e fushave të tekstit në aplikacionet bankare. Përdorimi i mekanizmit të Accessibility Service lejon trojanin të kalojë mekanizmat e mbrojtjes që bankat përdorin për të kundërshtuar trojanët e telefonave mobil të brezit të kaluar, si dhe ndryshimet në politikat e sigurisë të implementuara nga Google në versionet e reja të sistemit operativ Android. Kështu, Gustuff «di» të çaktivizojë mbrojtjen Google Protect: sipas pretendimeve të autorit, ky funksion aktivizohet në 70% të rasteve.

Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja

Gjithashtu, Gustuff mund të tregojë njoftime PUSH fals me ikona të aplikacioneve të legjitimta mobile. Përdoruesi klikoni në njoftimin PUSH dhe sheh një dritare phishing të ngarkuar nga serveri, ku ai vetë fut informacionin e kërkuar për kartën bankare ose portofolin krypto. Në një skenar tjetër, Gustuff hap aplikacionin nën emrin e të cilit ishte shfaqur njoftimi PUSH. Në këtë rast, programi keqdashës me urdhrin e serverit përmes Accessibility Service mund të mbushë fushat e formës së aplikacionit bankar për një transaksion mashtrues.

Funksionalitetet e Gustuff përfshijnë gjithashtu dërgimin në server të informacionit mbi pajisjen e infektuar, mundësinë e leximit/dërgimit të mesazheve SMS, dërgimin e kërkesave USSD, aktivizimin e SOCKS5 Proxy, kalimin përmes lidhjeve, dërgimin e skedarëve (përfshirë skanime dokumentesh, screenshot-e, fotografi) në server, dhe rikthimin e pajisjes në parametrat fabrikë.

Analiza e programit keqdashës

Para instalimit të aplikacionit keqdashës, sistemi operativ Android i tregon përdoruesit një dritare që përmban një listë të të drejtave të kërkuara nga Gustuff:

Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) 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 Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja
Pas kësaj, do të fshijë ikonën e tij.

Gustuff është i paketuar, sipas autorit, me ndihmën e paketuesit FTT. Pas aktivizimit, aplikacioni herë pas here i drejtohet serverit CnC për të marrë komanda. Në disa skedarë të hulumtuar nga ne, si server mbikëqyrës është përdorur adresa IP 88.99.171[.]105 (në vazhdim 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 në formatin e 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ë i paraqitur më poshtë. Duhet theksuar se fushat full, extra, aplikacione dhe permission së bashku me dy fusha janë opsionale dhe do të dërgohen vetëm në rastin e një kërkese komande nga 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%>
} 

Ruajtja e të dhënave të konfigurimit

Gustuff ruan informacione tĂ« rĂ«ndĂ«sishme pĂ«r funksionimin nĂ« skedarin e preferencĂ«s. Emri i skedarit, ashtu si emrat e parametrave nĂ« tĂ«, Ă«shtĂ« rezultat i llogaritjes sĂ« hash-it MD5 tĂ« vargut. 15413090667214.6.1, ku <%name%> — emri origjinal çelĂ«s-vlerĂ«. Interpretimi nĂ« Python i funksionit tĂ« gjenerimit tĂ« emrit:

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

Në vazhdim, do të tregojmë si nameGenerator(input).
Kështu, emri i skedarit të parë: nameGenerator("API_SERVER_LIST"), ai përmban vlera me emrat e mëposhtëm:

Emri i ndryshoresVlera
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")Flaksohet nga default. NĂ«se flamuri Ă«shtĂ« i vendosur – dĂ«rgon mesazhe SMS nĂ« CnC.
nameGenerator(«SMS_ROOT_NUMBER»)Numri i telefonit, në të cilin do të dërgohen mesazhet SMS të pranuara nga pajisja e infektuar. Në mënyrë standart, null.
nameGenerator(«SMS_ROOT_NUMBER_RESEND»)Flaga në mënyrë standart është çaktivizuar. Nëse aktivizohet - kur marrë pajisja e infektuar një SMS, ai do të dërgohet në numrin root.
nameGenerator(«DEFAULT_APP_SMS»)Flaga në mënyrë standart është çaktivizuar. Nëse ky flag aktivizohet - aplikacioni do të përpunojë mesazhet SMS të ardhura.
nameGenerator(«DEFAULT_ADMIN»)Flaga në mënyrë standart është çaktivizuar. Nëse flaga aktivizohet - aplikacioni ka të drejtat e administratorit.
nameGenerator(«DEFAULT_ACCESSIBILITY»)Flaga në mënyrë standart është çaktivizuar. Nëse flaga aktivizohet - shërbimi që përdor Accessibility Service është aktivizuar.
nameGenerator(«APPS_CONFIG»)Objekti JSON, përmban një listë veprimesh që duhet të kryhen kur ndodh një ngjarje Accessibility lidhur me një aplikacion të caktuar.
nameGenerator(«APPS_INSTALLED»)Mban listën e aplikacioneve të instaluara në pajisje.
nameGenerator(«IS_FIST_RUN»)Flaga çaktivizohet gjatë ekzekutimit të parë.
nameGenerator(«UNIQUE_ID»)Përmban një identifikues unik. Gjenerohet gjatë ekzekutimit të parë të botit.

Moduli përpunimit të komandave nga serveri

Aplikacioni mban adresat e serverëve CnC në formën e një array të koduar me Base85 të dhënave. Lista CnC - servera mund të ndryshohet me ardhjen e një komande përkatëse, në atë rast adresat do të mbahen në skedarin e preferencave.

Në përgjigje të kërkesës, serveri dërgon aplikacionit një komandë. Vlen të theksohet se komandat dhe parametrat janë paraqitur në formatin JSON. Aplikacioni mund të përpunojë komandat në vijim:

EkipaPërshkrimi
forwardStartFilloni dërgimin e mesazheve SMS të pranuara nga pajisja e infektuar në serverin CnC.
forwardStopNdalo dërgimin e mesazheve SMS të pranuara nga pajisja e infektuar në serverin CnC.
ussdRunKryeni një kërkesë USSD. Numri, për të cilin duhet të bëhet kërkesa USSD, ndodhet në fushën JSON «number».
sendSmsDërgoni një mesazh SMS (nëse është e nevojshme, mesazhi «ndahen» në pjesë). Si parametër, komanda merr një objekt JSON, që përmban fushat «to» - numri i destinacionit dhe «body» - trupi i mesazhit.
sendSmsAbDërgoni mesazhe SMS (nëse është e nevojshme, mesazhi «ndahen» në pjesë) të gjithë atyre që janë në listën e kontaktëve të pajisjes së infektuar. Intervali midis dërgimeve të mesazheve është 10 sekonda. Trupi i mesazhit ndodhet në fushën JSON «body»
sendSmsMassDĂ«rgoni mesazhe SMS (nĂ«se Ă«shtĂ« e nevojshme mesazhi "ndahen" nĂ« pjesĂ«) kontakteve tĂ« specifikuara nĂ« parametrat e komandĂ«s. Intervali midis dĂ«rgimeve tĂ« mesazheve – 10 sekonda. Si njĂ« parametĂ«r, komanda pranon njĂ« array JSON (fusha "sms"), elementet e tĂ« cilit pĂ«rmbajnĂ« fushat "to" — numri i destinacionit dhe "body" — pĂ«rmbajtja e mesazhit.
changeServerKjo komandĂ« si njĂ« parametĂ«r mund tĂ« pranojĂ« vlerĂ«n 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"). KĂ«shtu 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" — ndryshoni nameGenerator("ROOT_NUMBER") nĂ« vlerĂ«n e marrĂ«, "resend" — ndryshoni nameGenerator("SMS_ROOT_NUMBER_RESEND"), "sendId" — dĂ«rgoni nĂ« nameGenerator("ROOT_NUMBER") uniqueID.
updateInfoDërgoni në server informacionin mbi 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 rinisjen e pajisjes (përdoruesi kryesor), ose fshirja vetëm e të dhënave të përdoruesit (përdoruesi sekondar).
socksStartNisni modulin Proxy. Funksionimi i modulit përshkruhet në një seksion të veçantë.
socksStopPërfundo modulin Proxy.
openLinkKalo në lidhjen. Lidhja ndodhet në parametrin 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 parametër.
uploadFileDërgoni në URL skedarin nga pajisja e infektuar. URL vjen si parametër.
uploadPhoneNumbersDërgoni në server numrat e telefonit nga lista e kontakteve. Nëse si një parametër vjen një objekt JSON me vlerën me çelësin "ab", aplikacioni merr listën e kontakteve nga libri i telefonit. Nëse si një parametër 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, e cila vjen si parametër me çelësin «url». Skedari i ngarkuar ruhet me emrin «archive.zip». Pas kësaj, aplikacioni e nxjerr skedarin, duke përdorur, nëse është e nevojshme, fjalëkalimin për arkivin «b5jXh37gxgHBrZhQ4j3D». Skedarët e nxjerrë ruhen në drejtori [external storage]/hgps. Në këtë drejtori, aplikacioni ruan web-fakes (përshkruar më poshtë).
veprimeKjo komandë është e destinuar për të punuar me Shërbimin e Veprimit, i cili përshkruhet në një seksion të veçantë.
testNuk bën asgjë.
shkarkoKjo komandë është e destinuar për të ngarkuar një skedar nga një server i largët dhe për ta ruajtur atë në drejtori «Downloads». URL dhe emri i skedarit vijnë si parametër, fushat në objektin JSON janë përkatësisht: «url» dhe «fileName».
removeFshin skedarin nga drejtoria «Downloads». Emri i skedarit vjen në parametrin JSON me çelësin «fileName». Emri standard i skedarit është «tmp.apk».
njoftimShfaq një njoftim me tekstet e përshkrimit dhe titullit, të përcaktuara nga serveri menaxhues.

Formati i komandës njoftim:

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

Njoftimi, i krijuar nga skedari qĂ« po hetohet, duket identik me njoftimet e krijuara nga aplikacioni, i cili Ă«shtĂ« specifikuar nĂ« fushĂ«n app. NĂ«se vlera e fushĂ«s openApp — True, kur hapet njoftimi, ndizet aplikacioni, i cili Ă«shtĂ« specifikuar nĂ« fushĂ«n app. NĂ«se vlera e fushĂ«s openApp — False, atĂ«herĂ«:

  • hapet njĂ« dritare phishing, pĂ«rmbajtja e sĂ« cilĂ«s ngarkohet nga drejtoria /hgps/
  • hapet njĂ« dritare phishing, pĂ«rmbajtja e sĂ« 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 dërgohet në set_state.php në formën e një objekti JSON me formatin e mëposhtëm:

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

ActionsService
Lista e komandave që aplikacioni trajton përfshin veprim. Kur merr një komandë, moduli i trajtimit të komandave i drejtohet kësaj shërbimi me qëllim realizimin e komandës së zgjeruar. Si parametër, shërbimi merr një objekt JSON. Shërbimi mund të kryejë komandat e mëposhtme:

1. PARAMSAT_ACTION — kur tĂ« pranohet njĂ« komandĂ« e tillĂ«, shĂ«rbimi nĂ« radhĂ« tĂ« parĂ« merr nga parameteri JSON vlerĂ«n sipas çelĂ«sit Type, e cila mund tĂ« jetĂ«:

  • serviceInfo – nĂ«nkomanda merr nga parameteri JSON vlerĂ«n sipas çelĂ«sit includeNotImportant. NĂ«se flaga Ă«shtĂ« True — aplikacioni aktivizon flagun FLAG_ISOLATED_PROCESS nĂ« shĂ«rbimin qĂ« pĂ«rdor Accessibility Service. KĂ«shtu, shĂ«rbimi do tĂ« fillojĂ« nĂ« njĂ« proces tĂ« veçantĂ«.
  • root — tĂ« marrĂ« dhe dĂ«rgojĂ« nĂ« server informacion mbi dritaren qĂ« Ă«shtĂ« aktualisht nĂ« fokus. Aplikacioni merr informacionin pĂ«rmes klasĂ«s AccessibilityNodeInfo.
  • admin — tĂ« kĂ«rkojĂ« tĂ« drejtat e administratorit.
  • delay — tĂ« ndalĂ« funksionimin e ActionsService pĂ«r atĂ« numĂ«r milisekondash qĂ« Ă«shtĂ« e specifikuar nĂ« parameterin sipas çelĂ«sit "data".
  • windows — tĂ« dĂ«rgojĂ« listĂ«n e dritareve tĂ« dukshme pĂ«r pĂ«rdoruesin.
  • install — tĂ« instalohet aplikacioni nĂ« pajisjen e infektuar. Emri i paketĂ«s — arkivimi ndodhet nĂ« çelĂ«sin "fileName". Arkivi vetĂ« ndodhet nĂ« drejtorinĂ« Downloads.
  • global – nĂ«nkomanda ka pĂ«r qĂ«llim tĂ« realizojĂ« kalimin nga dritarja aktuale:
    • nĂ« menunĂ« Quick Settings
    • mbrapa
    • nĂ« shtĂ«pi
    • nĂ« njoftime
    • nĂ« dritaren e aplikacioneve tĂ« hapura sĂ« fundmi

  • launch — tĂ« fillojĂ« aplikacionin. Emri i aplikacionit vjen si parameter sipas çelĂ«sit data.
  • sounds — tĂ« ndryshojĂ« mĂ«nyrĂ«n e zĂ«rit nĂ« silence.
  • unlock — aktivizon ndriçimin e ekranit dhe tastierĂ«s nĂ« intensitet tĂ« plotĂ«. Aplikacioni e realizon kĂ«tĂ« veprim pĂ«rmes WakeLock, duke cituar si tag rreshtin [Application lable]:INFO
  • permissionOverlay — funksioni nuk Ă«shtĂ« i realizuar (pĂ«rgjigja nĂ« ekzekutimin e komandĂ«s — {"message":"Not support"} ose {"message":"low sdk"})
  • gesture — funksioni nuk Ă«shtĂ« i realizuar (pĂ«rgjigja nĂ« ekzekutimin e komandĂ«s — {"message":"Not support"} ose {"message":"Low API"})
  • lejet — kjo komandĂ« Ă«shtĂ« e nevojshme pĂ«r tĂ« kĂ«rkuar tĂ« drejtat pĂ«r aplikacionin. MegjithatĂ«, funksioni i kĂ«rkesĂ«s nuk Ă«shtĂ« realizuar, kĂ«shtu qĂ« komandĂ«s nuk i ka kuptim. Lista e tĂ« drejatve tĂ« kĂ«rkuara vjen si njĂ« masiv 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 — tĂ« shfaqĂ« njĂ« dritare phishing. NĂ« varĂ«si tĂ« parameterit qĂ« vjen nga serveri, aplikacioni mund tĂ« demonstrojĂ« dritare tĂ« ndryshme phishing:
    • TĂ« tregojĂ« dritaren phishing, pĂ«rmbajtja e sĂ« cilĂ«s Ă«shtĂ« shkruar nĂ« skedarin nĂ« drejtorinĂ« /hgps/. Rezultati i ndĂ«rveprimit tĂ« pĂ«rdoruesit me dritaren do tĂ« dĂ«rgohet nĂ« adresĂ«n /records.php
    • Trego dritaren phishing, e cila ngarkohet paraprakisht nga adresa ?id=&app=. Rezultati i ndĂ«rveprimit tĂ« pĂ«rdoruesit me dritaren do tĂ« dĂ«rgohet nĂ« adresĂ«n /records.php
    • Trego dritaren phishing, e cila Ă«shtĂ« maskuar si Google Play Card.

  • interactive — komanda Ă«shtĂ« e destinuar pĂ«r ndĂ«rveprim me elementet e dritareve tĂ« aplikacioneve tĂ« tjera duke pĂ«rdorur AcessibilityService. PĂ«r ndĂ«rveprimin, Ă«shtĂ« realizuar njĂ« shĂ«rbim i veçantĂ«. Aplikacioni i hetuar mund tĂ« ndĂ«rveprojĂ« me dritaret:
    • Aktive nĂ« kĂ«tĂ« moment. NĂ« kĂ«tĂ« rast, parametri pĂ«rmban id ose text (emrin) e 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.

    Pas marrjes së objekteve AccessibilityNodeInfo për elementet e dritares që interesojnë, aplikacioni, në varësi të parametrave, mund të kryejë veprime:

    • focus — tĂ« vendosĂ« fokusin nĂ« objekt.
    • click — tĂ« klikojĂ« nĂ« objekt.
    • actionId — tĂ« kryejĂ« veprim sipas ID.
    • setText — tĂ« ndryshojĂ« tekstin e objektit. Ndryshimi i tekstit mund tĂ« bĂ«het nĂ« dy mĂ«nyra: duke realizuar veprimin ACTION_SET_TEXT (nĂ«se versioni i Android tĂ« pajisjes sĂ« infektuar Ă«shtĂ« mĂ« tĂ« vogĂ«l ose i barabartĂ« me LOLLIPOP), ose duke vĂ«nĂ« nĂ« clipboard njĂ« varg dhe duke e vendosur atĂ« 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 — e njĂ«jta si PARAMSAT_ACTION, vetĂ«m se vjen si njĂ« masĂ« JSON komando.

Duket se shumë njerëz do të jenë të interesuar se si duket funksioni i ndërveprimit me elementët e dritares së një aplikacioni tjetër. Kjo është mënyra se si është realizuar ky funksionalitet 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 i zëvendësimit të 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;
}

Pra ndaj, me njĂ« konfigurim tĂ« duhur tĂ« serverit tĂ« menaxhimit, Gustuff Ă«shtĂ« nĂ« gjendje tĂ« plotĂ«sojĂ« fushat e tekstit nĂ« aplikacionet bankare dhe tĂ« klikojĂ« mbi butonat e nevojshĂ«m pĂ«r tĂ« realizuar transaksionet. Trojani as qĂ« ka nevojĂ« tĂ« kalojĂ« autorizimin nĂ« aplikacion — mjafton tĂ« dĂ«rgojĂ« njĂ« urdhĂ«r pĂ«r tĂ« demonstruar njĂ« njoftim PUSH dhe tĂ« hapĂ« aplikacionin bankar tĂ« instaluar mĂ« parĂ«. PĂ«rdoruesi do ta kalojĂ« autorizimin vetĂ«, pas sĂ« cilĂ«s Gustuff do tĂ« mund tĂ« realizojĂ« automatikisht ngarkimin.

Moduli i përpunimit të mesazheve SMS

Aplikacioni vendos një trajtues eventi për pranimin e mesazheve SMS nga pajisja e infektuar. Aplikacioni në shqyrtim mund të pranojë urdhra nga operatori, të cilat vijnë në tekstin e mesazhit SMS. Urdhërat vijnë në formatin:

7!5=<%Base64 encoded command%>

Aplikacioni kĂ«rkon nĂ« tĂ« gjitha mesazhet SMS qĂ« vijnĂ« pĂ«r tĂ« gjetur varg 7!5=, nĂ« rastin e zbulimit tĂ« njĂ« vargu – dekodon nga Base64 vargun me njĂ« zhvendosje prej 4 dhe ekzekuton komandĂ«n. Komandat janĂ« tĂ« ngjashme me komandat e CnC. Rezultati i ekzekutimit dĂ«rgohet nĂ« atĂ« numĂ«r nga i cili u mor komanda. Formati i pĂ«rgjigjes:

7*5=<%Base64 encode of «result_code command»%>

Opcionalisht, aplikacioni mund të dërgojë të gjitha mesazhet e pranuara në numrin Root. Për këtë, në skedarin preference duhet të tregohen numri Root dhe të vendoset flagu i ridirektimit të mesazheve. Mesazhi SMS dërgohet në numrin e keqbërësit 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 pastron listĂ«n e mesazheve hyrĂ«se.

Moduli Proxy

Në aplikacionin e shqyrtuar, ekziston moduli Backconnect Proxy (më tej Moduli Proxy), i cili ka një klasë të veçantë që përmban fusha statike me konfigurimin. Të dhënat e konfiguruara ruhen në shembuj në formë të hapur:

Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja

Të gjitha veprimet që kryhen nga Moduli Proxy regjistrohen në skedarë. Për këtë, aplikacioni krijon një direktor në Ruajtjen e Jashtme me emrin «logs» (fusha ProxyConfigClass.logsDir në klasën e konfigurimit), ku ruhen skedarët e regjistrimit. Regjistrimi ndodh në skedarë me emrat:

  1. main.txt – nĂ« kĂ«tĂ« skedar regjistrohet funksionimi i klasĂ«s sĂ« quajtur CommandServer. NĂ« vazhdim, regjistrimi i vargut str nĂ« kĂ«tĂ« skedar do tĂ« pĂ«rshkruhet si mainLog(str).
  2. session-.txt — nĂ« kĂ«tĂ« skedar ruhen tĂ« dhĂ«nat e regjistrimit tĂ« lidhura me njĂ« sesion tĂ« caktuar tĂ« proksimit. NĂ« vazhdim, regjistrimi i vargut str nĂ« kĂ«tĂ« skedar do tĂ« pĂ«rshkruhet si sessionLog(str).
  3. server.txt – nĂ« kĂ«tĂ« skedar regjistrohen tĂ« dhĂ«nat e tĂ« gjitha tĂ« dhĂ«nave shkruar nĂ« skedarĂ«t e pĂ«rmendur mĂ« lart.

Formati i të dhënave të regjistrimit:

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

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

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

Pas konverton në një përfaqësim tekstual dhe e regjistron atë.

LĂ«shimi i modulit Proxy ndodh pasi merr njĂ« komandĂ« pĂ«rkatĂ«se. Pas pranimit tĂ« urdhrit pĂ«r tĂ« aktivizuar modulit Proxy, aplikacioni nis 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Ă« aktivizohet çdo minutĂ« dhe kontrollon aktivitetin e modulit Proxy. NĂ«se moduli nuk Ă«shtĂ« aktiv – e aktivizon atĂ«.
Po ashtu, kur ndodh ngjarja android.net.conn.CONNECTIVITY_CHANGE aktivizohet moduli Proxy.

2. Aplikacioni krijon wake-lock me parametrin PARTIAL_WAKE_LOCK dhe e kap atë. Kështu, nuk e lejon CPU-në e pajisjes të kalojë në modalitetin gjumë.

3. Aktivizon klasën e përpunimit 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 – janĂ« parametrat e marra nga konfigurimi i serverit Proxy.

Klasa e përpunimit të komandave quhet CommandConnection. Menjëherë pas aktivizimit, kryen veprimet e mëposhtme:

4. Konektimi me ProxyConfigClass.host: ProxyConfigClass.commandPort dhe dërgimi i të dhënave 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 nga fusha "id". NĂ«se nuk Ă«shtĂ« e mundur tĂ« merret kjo vlerĂ« – krijon njĂ« tĂ« re. KĂ«shtu, moduli Proxy ka identifikuesin e tij, i cili gjenerohet njĂ«soj si ID i Bot.
  • imei – IMEI i pajisjes. NĂ«se ndodhi njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s – nĂ« vend tĂ« kĂ«tij fushe do tĂ« regjistrohet njĂ« mesazh gabimi.
  • imsi — Identiteti NdĂ«rkombĂ«tar i Abonentit tĂ« Mobilit tĂ« pajisjes. NĂ«se ndodhi njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushĂ« do tĂ« shkruhet njĂ« mesazh gabimi.
  • model — Emri i dukshĂ«m pĂ«r pĂ«rdoruesin pĂ«r produktin pĂ«rfundimtar.
  • manufacturer — Prodhuesi i produktit/harduerit (Build.MANUFACTURER).
  • androidVersion — vargu nĂ« formatin " (),"
  • country — vendndodhja aktuale e pajisjes.
  • partnerId – varg i zbrazĂ«t.
  • packageName – emri i paketĂ«s.
  • networkType — tipi i aktual i lidhjes rrjet (shembuj: "WIFI", "MOBILE"). NĂ« rast gabimi kthen null.
  • hasGsmSupport – true – nĂ«se telefoni mbĂ«shtet GSM, pĂ«rndryshe false.
  • simReady – statusi i kartĂ«s SIM.
  • simCountry — Kodi ISO i vendit (sipĂ«rfaqĂ«suar mbi bazĂ«n e ofruesit tĂ« kartĂ«s SIM).
  • networkOperator — emri i operatorit. NĂ«se ndodhi njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushĂ« do tĂ« shkruhet njĂ« mesazh gabimi.
  • simOperator — Emri i Ofruesit tĂ« ShĂ«rbimit (SPN). NĂ«se ndodhi njĂ« gabim gjatĂ« marrjes sĂ« vlerĂ«s, nĂ« vend tĂ« kĂ«tij fushĂ« do tĂ« shkruhet njĂ« mesazh gabimi.
  • version — kjo fushĂ« ruhet nĂ« klasĂ«n e konfigurimit, pĂ«r versionet e shqyrtuara tĂ« robotit ajo ishte e barabartĂ« me "1.6".

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

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

Kur merret komanda, aplikacioni regjistron:
mainLog("Header { sessionId], type[], length[] }")

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

EmriKomandaDataPërshkrimi
connectionId0ID e KonneksionitKrijo një lidhje të re
SLEEP3KohaPauzo punën e modulit Proxy
PING_PONG4—DĂ«rgo njĂ« mesazh PONG

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

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

  • NĂ« prokura 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. Diagramatikisht, krijimi i lidhjes mund të paraqitet si më poshtë:

Si Android Trojan Gustuff merr më të mirën (fiat dhe kripto) nga llogaritë tuaja

Ndërveprimet rrjetore

Për të parandaluar analizimin e trafikut nga sniffer-at e rrjetit, ndërveprimi 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, paraqiten 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 mesazheve SMS 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Ă« azhurnimit tĂ« parametrave, qĂ« ndodhen nĂ« skedarin preference.
  • http:///api/v1/set_card.php — ngarkimi i tĂ« dhĂ«nave tĂ« marra pĂ«rmes njĂ« oknĂ«s phishing, qĂ« maskohet si Google Play Market.
  • http:///api/v1/logs.php – ngarkimi i tĂ« dhĂ«nave tĂ« logĂ«ve.
  • http:///api/v1/records.php – ngarkimi i tĂ« dhĂ«nave tĂ« marra pĂ«rmes oknave phishing.
  • http:///api/v1/set_error.php – njoftimi mbi ndodhim tĂ« ndonjĂ« gabimi.

R rekomandimet

Me qëllim për të mbrojtur klientët e saj nga kërcënimi i trojaneve mobilë, kompanitë duhet të përdorin zgjidhje komplekse, të cilat lejojnë ndjekjen dhe paralajmërimin nga aktiviteti i dëmshëm pa instaluar ndonjë softuer shtesë në pajisjet e përdoruesve.

Për këtë arsye, metodat e zbuluar të nënshkrimit të trojaneve mobilë duhet të forcohen me teknologjitë e analizës së sjelljes si të klientit ashtu edhe të aplikacionit vetë. Gjithashtu, mbrojtja duhet të përfshijë një funksion të identifikimit të pajisjeve duke përdorur teknologjinë e gjurmës dixhitale, e cila do të lejojë të kuptohet kur llogaria përdoret nga një pajisje e pazakontë dhe tashmë ka rënë në duar të një mashtruesi.

Një pikë shumë e rëndësishme është pranimi i mundësisë për analizën ndër-kanal, e cila i jep mundësinë kompanive të kontrollojnë rreziqet që lindin jo vetëm nga kanali i internetit, por edhe nga kanali mobil, për shembull, në aplikacionet për bankat mobile, për operacionet me kriptovaluta dhe çdo gjë tjetër ku mund të kryhet një transaksion financiar.

Rregullat e sigurisë për përdoruesit:

  • mos instalo aplikacione pĂ«r pajisjet mobile me sistemin operativ Android nga ndonjĂ« burim tjetĂ«r, pĂ«rveç Google Play, duke i kushtuar vĂ«mendje tĂ« veçantĂ« tĂ« drejtave qĂ« aplikacioni kĂ«rkon;
  • rregullisht instalo azhurnimet e sistemit operativ Android;
  • tĂ« kushtoni vĂ«mendje shtesave tĂ« skedareve qĂ« ngarkoni;
  • tĂ« mos vizitoni burime tĂ« dyshimta;
  • tĂ« mos klikoni nĂ« lidhjet e marra nĂ« mesazhet SMS.

Me pjesëmarrjen e Semenës Rogacheva, specialistes së re për hulumtimin e kodit të dëmshëm në Laboratorin e Kriminalistikës Kompjuterike Group-IB.

Burimi: habr.com

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