Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Дөнгөж сая Групп-IB мэдээлсэн об активности мобильного Android-трояна Gustuff. Он работает исключительно на международных рынках, атакуя клиентов 100 крупнейших иностранных банков, пользователей мобильных 32 криптокошельков, а также крупных e-commerce ресурсов. А вот разработчик Gustuff — русскоязычный киберпреступник под ником Bestoffer. Еще недавно он нахваливал свой троян как «серьезный продукт для людей со знаниями и опытом».

Групп-IB дахь хортой кодын шинжилгээний мэргэжилтэн Иван Писарев в своем исследовании подробно рассказывает о том, как работает Gustuff и в чем его опасность.

Gustuff хэнийг хайж байна вэ?

Gustuff нь бүрэн автомат ажиллагаатай шинэ үеийн хортой программ юм. Хөгжүүлэгчийн хэлснээр троян нь 2017 оны арваннэгдүгээр сараас эхлэн олон улсын нэр хүндтэй банк, төлбөрийн системийн гар утасны программ мэтээр халхалсан фишинг вэб маягтаар дамжуулан Android утаснууд руу халдаж, мөнгө хулгайлж байгаа AndyBot вирусын шинэ, сайжруулсан хувилбар болжээ. 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 нь халдлагад өртөж болзошгүй байнуудын жагсаалтыг нэлээд өргөжүүлсэн. Gustuff нь банкууд, финтек компаниуд, крипто үйлчилгээнд зориулсан Android программуудаас гадна зах зээлийн хэрэглээний программууд, онлайн дэлгүүрүүд, төлбөрийн системүүд болон шуурхай мессенжерүүдийн хэрэглэгчдэд зориулагдсан юм. Ялангуяа PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut болон бусад.

Нэвтрэх цэг: олон нийтийн халдварын тооцоо

Для Gustuff характерен «классический» вектор проникновения на Android-смартфоны через СМС-рассылки со ссылками на APK. При заражении Android-устройства трояном по команде сервера может произойти дальнейшее распространение Gustuff’а по базе контактов инфицированного телефона либо по базе данных сервера. Функциональные возможности Gustuff рассчитаны на массовое заражение и максимальную капитализацию бизнеса своих операторов – в нем присутствует уникальная функция «автозалива» в легитимные мобильные банковские приложения и криптокошельки, что позволяет ускорить и масштабировать кражу денег.

Трояны судалгаагаар хөгжлийн бэрхшээлтэй хүмүүст зориулсан Accessibility Service-ийг ашиглан автоматаар бөглөх функцийг хэрэгжүүлсэн болохыг харуулсан. Gustuff нь энэхүү Андройд үйлчилгээг ашиглан бусад програмын цонхны элементүүдтэй харилцахаас хамгаалах хамгаалалтыг амжилттай давсан анхны Троян биш юм. Гэсэн хэдий ч Хүртээмжийн үйлчилгээг автомашины дүүргэгчтэй хослуулан ашиглах нь нэлээд ховор хэвээр байна.

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

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Также Gustuff может демонстрировать фейковые PUSH-уведомления с иконками легитимных мобильных приложений. Пользователь кликает на PUSH-уведомление и видит загруженное с сервера фишинговое окно, куда сам вводит запрашиваемые данные банковской карты или криптокошелька. В другом сценарии работы Gustuff происходит открытие приложения, от имени которого демонстрировалось PUSH-уведомление. В этом случае вредоносная программа по команде сервера через Accessibility Service может заполнять поля формы банковского приложения для мошеннической транзакции.

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

Хортой програмын шинжилгээ

Перед установкой вредоносного приложения ОС Android демонстрирует пользователю окно, содержащее в себе список запрашиваемых Gustuff’ом прав:

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ
Установка приложения произойдет только после получения согласия пользователя. После запуска приложения троян покажет пользователю окно:

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ
После чего удалит свою иконку.

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.
nameGenerator(«SMS_ROOT_NUMBER») Номер телефона, на который будут отправлены SMS-сообщений принятые зараженным устрйоством. По умолчанию null.
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 форматаар харуулсан гэдгийг тэмдэглэх нь зүйтэй. Аппликешн нь дараах тушаалуудыг боловсруулах боломжтой.

баг Тайлбар
forwardStart Халдвар авсан төхөөрөмжөөс ирсэн SMS мессежийг CnC сервер рүү илгээж эхлээрэй.
урагш зогсоох Остановить отправление получаемых зараженным устройством SMS-сообщений на CnC-сервер.
ussdRun USSD хүсэлтийг гүйцэтгэнэ. Таны USSD хүсэлт гаргах шаардлагатай дугаар нь JSON талбарын "тоо" хэсэгт байрлана.
SMS илгээх Отправить одно SMS-сообщение (при необходимости сообщение «дробится» на части). В качестве параметра команда принимает JSON-объект, содержащий поля «to» — номер назначения и «body» — тело сообщения.
sendSmsAb Халдвар авсан төхөөрөмжийн холбоо барих жагсаалтад байгаа бүх хүнд SMS мессеж илгээ (шаардлагатай бол мессежийг хэсэг болгон хуваана). Зурвас илгээх хоорондын зай 10 секунд байна. Зурвасын үндсэн хэсэг нь JSON талбарт "бие" байна.
sendSmsMass Командын параметрт заасан харилцагчид руу SMS мессеж илгээх (шаардлагатай бол мессежийг хэсэг болгон хуваах). Зурвас илгээх хоорондын зай 10 секунд байна. Параметрийн хувьд тушаал нь JSON массивыг ("sms" талбар) авдаг бөгөөд тэдгээрийн элементүүд нь "to" талбаруудыг агуулдаг - очих газрын дугаар ба "бие" - мессежийн үндсэн хэсэг.
серверийг өөрчлөх Энэ тушаал нь "url" түлхүүр бүхий утгыг параметр болгон авч болно - дараа нь bot nameGenerator("SERVER_URL") эсвэл "массив"-ийн утгыг өөрчлөх болно - дараа нь bot массивыг nameGenerator ("API_SERVER_LIST") руу бичих болно. Тиймээс програм нь CnC серверүүдийн хаягийг өөрчилдөг.
админ дугаар Энэ тушаал нь үндсэн дугаартай ажиллахад зориулагдсан. Тус тушаал нь дараах параметр бүхий JSON объектыг хүлээн авдаг: “number” — nameGenerator(“ROOT_NUMBER”) хүлээн авсан утгыг өөрчлөх, “дахин илгээх” — нэрийг өөрчлөх(“SMS_ROOT_NUMBER_RESEND”), “sendId” — nameGenerator(“ROOT_NUMBER”) руу илгээх. ) өвөрмөц ID.
updateInfo Халдвар авсан төхөөрөмжийн талаарх мэдээллийг сервер рүү илгээнэ үү.
wipeData Команда предназначена для удаления пользовательских данных. В зависимости от какого имени было запущено приложение происходит либо полное стирание данных с перезагрузкой устройства (primary user), либо удаление только пользовательских данных (secondary user).
оймс Эхлэх Прокси модулийг ажиллуулна уу. Модулийн ажиллагааг тусдаа хэсэгт тайлбарласан болно.
socksStop Прокси модулийг зогсоо.
нээлттэй холбоос Перейти по ссылке. Ссылка находится в JSON-параметре по ключу «url». Для открытия ссылки используется «android.intent.action.VIEW».
AllSms-г байршуулах Төхөөрөмжөөс хүлээн авсан бүх SMS мессежийг сервер рүү илгээнэ үү.
AllPhotos Халдвар авсан төхөөрөмжөөс зургийг URL руу илгээнэ үү. URL нь параметр хэлбэрээр ирдэг.
файлыг байршуулах Халдвар авсан төхөөрөмжөөс URL руу файл илгээх. URL нь параметр хэлбэрээр ирдэг.
uploadPhoneNumbers Отправить на сервер номера телефонов из списка контактов. Если в качестве параметра приходит JSON-объект значение с ключом «ab», приложение получает список контактов из телефонной книги. Если в качестве параметра приходит JSON-объект с ключом «sms», приложение читает список контактов из отправителей SMS-сообщений.
Архивыг өөрчлөх Програм нь "url" товчлуурыг ашиглан файлыг параметр болгон ирдэг хаягаас татаж авдаг. Татаж авсан файлыг “archive.zip” нэрээр хадгална. Дараа нь програм нь "b5jXh37gxgHBrZhQ4j3D" архивын нууц үгийг ашиглан файлыг задлах болно. Задлуулсан файлуудыг [external storage]/hgps санд хадгална. Энэ лавлахад програм нь вэб хуурамч мэдээллийг хадгалдаг (доор тайлбарласан).
нөөц Команда предназначена для работы с Action Service, который описан в отдельном разделе.
туршилтын Юу ч хийхгүй.
татаж авах Команда предназначена для загрузки файла с удаленного сервера и сохранении его в директорию «Downloads». 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 — True, при открытии уведомления запускается приложение, указанное в поле програм. Хэрэв талбарын утга openApp — False, то:

  • Фишинг хийх цонх нээгдэж, агуулгыг нь лавлахаас татаж авдаг <%external storage%>/hgps/<%filename%>
  • открывается фишинговое окно, содержимое которого загружается с сервера <%url%>?id=<%Bot id%>&app=<%Application name%>
  • открывается фишинговое окно, замаскированное под Google Play Card, с возможностью ввести данные карты.

Програм нь дурын командын үр дүнг илгээдэг <%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 параметрээс утгыг түлхүүрээр авдаг includeNotImportant. Хэрэв туг нь Үнэн байвал програм нь тугийг тохируулна ТУЦГАЙ_ТУСГААРСАН_ПРОЦЕСС Хүртээмжийн үйлчилгээг ашиглан үйлчилгээ рүү. Ингэснээр үйлчилгээг тусдаа процессоор эхлүүлэх болно.
  • эх - одоогоор анхаарал хандуулж байгаа цонхны талаарх мэдээллийг хүлээн авч сервер рүү илгээх. Аппликешн нь AccessibilityNodeInfo анги ашиглан мэдээлэл авдаг.
  • админ — запросить права администратора.
  • саатал — приостановить работу ActionsService на то количество миллисекунд, которое указано в параметре по ключу «data».
  • цонх — отправить список видимых пользователю окон.
  • Суулгах - халдвар авсан төхөөрөмж дээр програм суулгах. Архивын багцын нэр нь "fileName" товчлуур дээр байна. Архив өөрөө Татаж авсан лавлах хэсэгт байрладаг.
  • Дэлхий нийтийн – дэд команд нь одоогийн цонхноос шилжих зорилготой:
    • Түргэн тохиргооны цэс дээр
    • буцах
    • домой
    • к уведомлениям
    • к окну недавно открытых приложений

  • эхлэх - програмыг ажиллуул. Програмын нэр нь түлхүүрээр параметр хэлбэрээр ирдэг мэдээ.
  • дуу — дууны горимыг чимээгүй болгож өөрчлөх.
  • түгжээ — дэлгэц болон гарны арын гэрлийг бүрэн гэрэлтүүлэхэд асаана. Аппликешн нь WakeLock ашиглан энэ үйлдлийг гүйцэтгэдэг бөгөөд [Application lable]:INFO мөрийг шошго болгон зааж өгдөг.
  • permissionOverlay — функция не реализована (ответ на исполнение команды — {«message»:«Not support»} или {«message»:«low sdk»})
  • дохио — функц хэрэгжээгүй байна (тушаалын гүйцэтгэлийн хариу нь {"message":"Not support"}эсвэл {"message":"Low API"})
  • зөвшөөрөл — данная команда необходима для запроса прав для приложения. Однако функция запроса не реализована, таким образом команда не имеет смысла. Список запрашиваемых прав приходит как JSON-массив с ключом «permissions». Стандартный список:
    • android.зөвшөөрөл.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.зөвшөөрөл.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.зөвшөөрөл.SEND_SMS
    • android.зөвшөөрөл.READ_SMS
    • android.permission.READ_EXTERNAL_STORAGE
    • android.зөвшөөрөл.WRITE_EXTERNAL_STORAGE

  • нээлттэй — фишинг цонхыг харуулах. Серверээс ирж буй параметрээс хамааран програм нь дараах фишинг цонхыг харуулж болно:
    • Показать фишинговое окно, содержимое которого прописано в файле в директории <%гадаад лавлах%>/hgps/<%param_filename%>. Результат взаимодействия пользователя с окном будет отправлен по адресу <%CnC%>/records.php
    • Агуулга нь хаягаас урьдчилан ачаалагдсан фишинг цонхыг харуул <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Результат взаимодействия пользователя с окном будет отправлен по адресу <%CnC%>/records.php
    • Показать фишинговое окно, замаскированное под Google Play Card.

  • интерактив — тушаал нь AcessibilityService ашиглан бусад програмын цонхны элементүүдтэй харилцах зориулалттай. Харилцааны хөтөлбөрт тусгай үйлчилгээг нэвтрүүлсэн. Шалгаж буй програм нь цонхтой харилцах боломжтой:
    • Одоогоор идэвхтэй. Энэ тохиолдолд параметр нь таны харилцах шаардлагатай объектын id эсвэл текстийг (нэр) агуулна.
    • Командыг гүйцэтгэх үед хэрэглэгчдэд харагдана. Програм нь цонхыг id-ээр нь сонгоно.

    Получив объекты AccessibilityNodeInfo Сонирхсон цонхны элементүүдийн хувьд програм нь параметрээс хамааран дараахь үйлдлүүдийг хийж болно.

    • focus — установить фокус на объект.
    • дарна уу - объект дээр дарна уу.
    • actionId — выполнить действие по ID.
    • setText — объектын текстийг өөрчлөх. Текстийг өөрчлөх нь хоёр аргаар боломжтой: үйлдэл хийх ACTION_SET_TEXT (Хэрэв халдвар авсан төхөөрөмжийн Android хувилбар нь түүнээс бага эсвэл тэнцүү бол ЛОЛЛИПОП), либо поместив в буфер обмена строку и вставив его в объект (для версий старше). Данная команда может быть использована для изменения данных в банковском приложении.

2. PARAMS_ACTIONS - адил PARAMS_ACTION, зөвхөн JSON массив тушаал ирдэг.

Кажется, многим будет интересно, как выглядит функция взаимодействия с элементами окна другого приложения. Вот таким образом реализована данная функциональная возможность в Gustuff’е:

boolean interactiveAction(List aiList, JSONObject action, JsonObject res) {
    int count = action.optInt("repeat", 1);
    Iterator aiListIterator = ((Iterable)aiList).iterator();
    int count = 0;
    while(aiListIterator.hasNext()) {
        Object ani = aiListIterator.next();
        if(1 <= count) {
            int index;
            for(index = 1; true; ++index) {
                if(action.has("focus")) {
                    if(((AccessibilityNodeInfo)ani).performAction(1)) {
                        ++count;
                    }
                }
                else if(action.has("click")) {
                    if(((AccessibilityNodeInfo)ani).performAction(16)) {
                        ++count;
                    }
                }
                else if(action.has("actionId")) {
                    if(((AccessibilityNodeInfo)ani).performAction(action.optInt("actionId"))) {
                        ++count;
                    }
                }
                else if(action.has("setText")) {
                    customHeader ch = CustomAccessibilityService.a;
                    Context context = this.getApplicationContext();
                    String text = action.optString("setText");
                    if(performSetTextAction(ch, context, ((AccessibilityNodeInfo)ani), text)) {
                        ++count;
                    }
                }
                if(index == count) {
                    break;
                }
            }
        }
        ((AccessibilityNodeInfo)ani).recycle();
    }
    res.addPropertyNumber("res", Integer.valueOf(count));
}

Текст солих функц:

boolean performSetTextAction(Context context, AccessibilityNodeInfo ani, String text) {
    boolean result;
    if(Build$VERSION.SDK_INT >= 21) {
        Bundle b = new Bundle();
        b.putCharSequence("ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE", ((CharSequence)text));
        result = ani.performAction(0x200000, b);  // ACTION_SET_TEXT
    }
    else {
        Object clipboard = context.getSystemService("clipboard");
        if(clipboard != null) {
        ((ClipboardManager)clipboard).setPrimaryClip(ClipData.newPlainText("autofill_pm", ((CharSequence)text)));
        result = ani.performAction(0x8000);  // ACTION_PASTE
        }
        else {
            result = false;
        }
    }
    return result;
}

Таким образом, при правильной настройке управляющего сервера Gustuff способен заполнить текстовые поля в банковском приложении и нажать на необходимые для совершения транзакции кнопки. Трояну даже не нужно проходить авторизацию в приложении — достаточно отправить команду на демонстрацию PUSH-уведомления с последующим открытием ранее установленного банковского приложения. Пользователь сам пройдет авторизацию, после чего Gustuff сможет произвести автозалив.

SMS мессеж боловсруулах модуль

Уг програм нь халдвар авсан төхөөрөмжид SMS мессеж хүлээн авах үйл явдал зохицуулагчийг суулгадаг. Судалгаанд хамрагдаж буй програм нь SMS мессежийн хэсэгт ирдэг операторын тушаалуудыг хүлээн авах боломжтой. Командууд дараах форматаар ирдэг.

7!5=<%Base64 encoded command%>

Аппликешн нь ирж буй бүх SMS мессежийн мөрийг хайдаг 7!5=, мөр илэрсэн үед 64-р офсет дээр Base4-аас мөрийг тайлж командыг гүйцэтгэдэг. Командууд нь CnC-тэй төстэй. Гүйцэтгэлийн үр дүнг тушаал ирсэн дугаар руу илгээнэ. Хариултын формат:

7*5=<%Base64 “үр дүнгийн_кодын команд”%> кодчилол

Опционально приложение может отправлять все принимаемые сообщения на Root-номер. Для этого в preference-файле должен быть указан Root-номер и установлен флаг редиректа сообщений. СМС-сообщение отправляется на номер злоумышленника в формате:

<%From number%> - <%Цаг, формат: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Также опционально приложение может отправлять сообщения на CnC. СМС-сообщение отправляется на сервер в JSON-формате:

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

Хэрэв туг байрлуулсан бол nameGenerator("DEFAULT_APP_SMS") – приложение останавливает обработку СМС-сообщения и очищает список входящих сообщений.

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

Судалж буй програм нь тохиргоотой статик талбаруудыг агуулсан тусдаа ангитай Backconnect прокси модулийг (цаашид Прокси модуль гэх) агуулдаг. Тохиргооны өгөгдлийг жишээнд тодорхой хэлбэрээр хадгална:

Android Trojan Gustuff нь таны данснаас тосыг (fiat болон crypto) хэрхэн арилгадаг вэ

Прокси модулийн гүйцэтгэсэн бүх үйлдлүүд файлууд руу нэвтэрдэг. Үүнийг хийхийн тулд External Storage дахь програм нь бүртгэлийн файлуудыг хадгалдаг "логууд" (тохиргооны анги дахь ProxyConfigClass.logsDir талбар) нэртэй санг үүсгэдэг. Бүртгэл нь дараах нэртэй файлуудад тохиолддог:

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

Бүртгэлийн өгөгдлийн формат:

<%Огноо%> [Tread[<%thread id%>], id[]]: log-string

Возникающие в процессе работы Proxy-модуля исключения также логируются в файл. Для этого приложение формирует JSON-объект формата:

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

Дараа нь үүнийг стринг дүрслэл болгон хувиргаж бүртгэдэг.

Прокси модулийг холбогдох командыг хүлээн авсны дараа ажиллуулна. Прокси модулийг эхлүүлэх командыг хүлээн авах үед програм дуудагдсан үйлчилгээг эхлүүлнэ Үндсэн үйлчилгээ, Прокси модулийн ажиллагааг удирдах үүрэгтэй - үүнийг эхлүүлэх, зогсоох.

Үйлчилгээг эхлүүлэх үе шатууд:

1. Минутанд нэг удаа ажилладаг таймерыг эхлүүлж, прокси модулийн үйл ажиллагааг шалгана. Хэрэв модуль идэвхгүй бол түүнийг эхлүүлнэ.
Также при срабатывании события android.net.conn.ХОЛБООТОЙ_ӨӨРЧЛӨЛТ происходит запуск Proxy-модуля.

2. Аппликешн нь параметр бүхий сэрүүлгийн түгжээг үүсгэдэг ХЭСЭГ_СЭРЭГЛЭХ_ТҮГЖЭЭ и захватывает его. Таким образом не позволяет перейти CPU устройства в спящий режим.

3. Прокси модулийн команд боловсруулах ангийг эхлүүлж эхлээд мөрийг бүртгэнэ mainLog("сервер эхлүүлэх") и

Server::start() host[<%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 – package name.
  • networkType — тип текущего сетевого соединения (пример: «WIFI», «MOBILE»). В случае ошибки возвращает null.
  • hasGsmSupport – true – если телефон поддерживает GSM, иначе false.
  • simReady – состояние SIM-карты.
  • simCountry - ISO улсын код (SIM карт нийлүүлэгч дээр суурилсан).
  • networkOperator — операторын нэр. Хэрэв утгыг олж авах явцад алдаа гарсан бол энэ талбарын оронд алдааны мессеж бичигдэх болно.
  • simOperator — The Service Provider Name (SPN). Если в процессе получения значения произошла ошибка — вместо этого поля будет записано текстовое сообщение об ошибке.
  • хувилбар - энэ талбар нь тохиргооны ангилалд хадгалагддаг; ботын туршсан хувилбаруудын хувьд энэ нь "1.6"-тай тэнцүү байв.

5. Серверээс тушаал хүлээх горимд шилжинэ. Серверийн тушаалууд дараах форматаар ирдэг.

  • 0 offset – command
  • 1 офсет – sessionId
  • 2 офсет - урт
  • 4 офсет - өгөгдөл

Тушаал ирэхэд програм дараахыг бүртгэдэг.
mainLog("Толгой { sessionId<%id%>], төрөл[<%команд%>], урт[<%length%>] }")

Серверээс дараах тушаалуудыг өгөх боломжтой.

нэр тушаал Өгөгдөл Тодорхойлолт
холболтын дугаар 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 болон crypto) хэрхэн арилгадаг вэ

Сүлжээний харилцан үйлчлэл

Сүлжээний дохиологчдын траффикийн шинжилгээнээс урьдчилан сэргийлэхийн тулд CnC сервер болон програмын хоорондын харилцан үйлчлэлийг SSL протокол ашиглан хамгаалж болно. Серверээс болон сервер рүү дамжуулсан бүх өгөгдлийг JSON форматаар үзүүлэв. Ашиглалтын явцад програм нь дараах хүсэлтийг гүйцэтгэдэг.

  • http://<%CnC%>/api/v1/set_state.php - тушаалын гүйцэтгэлийн үр дүн.
  • http://<%CnC%>/api/v1/get.php — получение команды.
  • http://<%CnC%>/api/v1/load_sms.php — халдвар авсан төхөөрөмжөөс SMS мессеж татаж авах.
  • http://<%CnC%>/api/v1/load_ab.php — халдвар авсан төхөөрөмжөөс харилцагчдын жагсаалтыг байршуулах.
  • http://<%CnC%>/api/v1/aevents.php – сонголтын файлд байрлах параметрүүдийг шинэчлэх үед хүсэлт гаргана.
  • http://<%CnC%>/api/v1/set_card.php — Google Play 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

сэтгэгдэл нэмэх