Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır

Elə bu günlərdə Group-IB bildirildi mobil Android Trojan Gustuff-un fəaliyyəti haqqında. O, yalnız beynəlxalq bazarlarda işləyir, 100 ən böyük xarici bankın müştərilərinə, mobil 32 kripto pul kisəsinin istifadəçilərinə, eləcə də böyük e-ticarət resurslarına hücum edir. Lakin Gustuff-un tərtibatçısı Bestoffer ləqəbi ilə rusdilli kibercinayətkardır. Son vaxtlara qədər o, öz Trojanını “bilik və təcrübəyə malik insanlar üçün ciddi məhsul” kimi qiymətləndirirdi.

Group-IB-də zərərli kod analizi üzrə mütəxəssis İvan Pisarev araşdırmasında o, Gustuffun necə işlədiyi və onun təhlükələrinin nə olduğu barədə ətraflı danışır.

Gustuff kimi ovlayır?

Gustuff tam avtomatlaşdırılmış funksiyaları olan yeni nəsil zərərli proqrama aiddir. Tərtibatçının sözlərinə görə, troyan 2017-ci ilin noyabr ayından Android telefonlarına hücum edən və tanınmış beynəlxalq bankların və ödəniş sistemlərinin mobil proqramları kimi maskalanan fişinq veb formaları vasitəsilə pul oğurlayan AndyBot zərərli proqram təminatının yeni və təkmilləşdirilmiş versiyasına çevrilib. Bestoffer, Gustuff Bot-un icarə qiymətinin ayda 800 dollar olduğunu bildirdi.

Gustuff nümunəsinin təhlili göstərdi ki, troyan potensial olaraq Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank kimi ən böyük bankların mobil proqramlarından, eləcə də kripto pul kisələrindən istifadə edən müştəriləri hədəfə alır. Bitcoin Wallet, BitPay, Cryptopay, Coinbase və s.

Əvvəlcə klassik bank troyanı kimi yaradılmış, cari versiyada Gustuff hücum üçün potensial hədəflərin siyahısını xeyli genişləndirmişdir. Banklar, fintech şirkətləri və kripto xidmətləri üçün Android proqramlarına əlavə olaraq, Gustuff marketplace proqramları, onlayn mağazalar, ödəniş sistemləri və ani mesajlaşma istifadəçiləri üçün nəzərdə tutulub. Xüsusilə PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut və s.

Giriş nöqtəsi: kütləvi infeksiya üçün hesablama

Gustuff, APK-lərə keçidləri olan SMS göndərişləri vasitəsilə Android smartfonlarına "klassik" nüfuz vektoru ilə xarakterizə olunur. Serverin əmri ilə Android cihazı Trojanla yoluxduqda, Gustuff yoluxmuş telefonun əlaqə bazası və ya server verilənlər bazası vasitəsilə daha da yayıla bilər. Gustuff-un funksionallığı kütləvi yoluxma və operatorlarının biznesinin maksimum kapitallaşması üçün nəzərdə tutulmuşdur - o, pul oğurluğunu sürətləndirməyə və genişləndirməyə imkan verən qanuni mobil bank proqramlarına və kripto pul kisələrinə unikal "avtomatik doldurma" funksiyasına malikdir.

Troyanın tədqiqi göstərdi ki, avtodoldurma funksiyası onda əlillər üçün xidmət olan Accessibility Service-dən istifadə etməklə həyata keçirilib. Gustuff bu Android xidmətindən istifadə edən digər proqramların pəncərə elementləri ilə qarşılıqlı əlaqədən qorunmanı uğurla aşan ilk troyan deyil. Bununla belə, Əlçatımlılıq Xidmətinin avtomobil doldurucusu ilə birlikdə istifadəsi hələ də olduqca nadirdir.

Qurbanın telefonuna endirdikdən sonra Qustuff Əlçatanlıq Xidmətindən istifadə edərək, təcavüzkarlar üçün lazım olan hərəkətləri yerinə yetirərək, digər proqramların pəncərə elementləri ilə (bank, kriptovalyuta, həmçinin onlayn alış-veriş, mesajlaşma və s.) qarşılıqlı əlaqə qura bilir. . Məsələn, serverin əmri ilə Trojan düymələri basa və bank proqramlarında mətn sahələrinin dəyərlərini dəyişə bilər. Əlçatanlıq Xidməti mexanizmindən istifadə troyana bankların əvvəlki nəsil mobil troyanlara qarşı mübarizədə istifadə etdiyi təhlükəsizlik mexanizmlərini, həmçinin Android ƏS-in yeni versiyalarında Google tərəfindən həyata keçirilən təhlükəsizlik siyasətində dəyişiklikləri keçməyə imkan verir. Beləliklə, Gustuff Google Protect qorunmasını necə söndürməyi "bilir": müəllifə görə, bu funksiya 70% hallarda işləyir.

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır

Gustuff həmçinin qanuni mobil proqramların nişanları ilə saxta PUSH bildirişləri göstərə bilər. İstifadəçi PUSH bildirişinə klikləyir və serverdən yüklənmiş fişinq pəncərəsini görür, burada tələb olunan bank kartı və ya kripto pul kisəsi məlumatlarını daxil edir. Başqa bir Gustuff ssenarisində, adından PUSH bildirişinin göstərildiyi proqram açılır. Bu halda, zərərli proqram əlçatanlıq xidməti vasitəsilə serverdən verilən əmr əsasında saxta əməliyyat üçün bank tətbiqinin forma sahələrini doldura bilər.

Gustuff-un funksionallığına həmçinin serverə yoluxmuş cihaz haqqında məlumat göndərmək, SMS mesajlarını oxumaq/göndərmək, USSD sorğular göndərmək, SOCKS5 Proxy-ni işə salmaq, linkə əməl etmək, faylları (sənədlərin foto skanları, skrinşotlar, fotoşəkillər daxil olmaqla) göndərmək daxildir. server , cihazı zavod parametrlərinə sıfırlayın.

Zərərli proqramların təhlili

Zərərli proqram quraşdırmadan əvvəl, Android ƏS istifadəçiyə Gustuff tərəfindən tələb olunan hüquqların siyahısını ehtiva edən bir pəncərə göstərir:

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır
Tətbiqin quraşdırılması yalnız istifadəçinin razılığını aldıqdan sonra baş verəcək. Proqramı işə saldıqdan sonra Trojan istifadəçiyə bir pəncərə göstərəcək:

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır
Bundan sonra o, simvolunu siləcək.

Gustuff, müəllifin fikrincə, FTT-dən bir qablaşdırıcı tərəfindən qablaşdırılır. Başladıqdan sonra proqram əmrləri qəbul etmək üçün vaxtaşırı CnC serveri ilə əlaqə saxlayır. Tədqiq etdiyimiz bir neçə fayl nəzarət serveri kimi bir IP ünvanından istifadə etdi 88.99.171[.]105 (bundan sonra bunu kimi qeyd edəcəyik <%CnC%>).

Başladıqdan sonra proqram serverə mesajlar göndərməyə başlayır http://<%CnC%>/api/v1/get.php.

Cavabın aşağıdakı formatda JSON olacağı gözlənilir:

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

Tətbiqə hər dəfə daxil olduqda, yoluxmuş cihaz haqqında məlumat göndərir. Mesaj formatı aşağıda göstərilmişdir. tarlaların olduğunu qeyd etmək lazımdır Full, əlavə, apps и icazəsi – isteğe bağlıdır və yalnız CnC-dən sorğu əmri olduqda göndəriləcək.

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

Konfiqurasiya məlumatlarının saxlanması

Gustuff əməliyyat baxımından vacib məlumatları üstünlük faylında saxlayır. Fayl adı, eləcə də içindəki parametrlərin adları sətirdən MD5 məbləğinin hesablanmasının nəticəsidir. 15413090667214.6.1<%name%>Hara <%name%> — ilkin ad-qiymət. Ad yaratmaq funksiyasının Python təfsiri:

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

Sonrakı kimi onu işarə edəcəyik nameGenerator(giriş).
Beləliklə, ilk fayl adı: nameGenerator("API_SERVER_LIST"), o, aşağıdakı adları olan dəyərləri ehtiva edir:

Dəyişən adı Dəyər
nameGenerator("API_SERVER_LIST") Massiv şəklində CnC ünvanlarının siyahısını ehtiva edir.
nameGenerator("API_SERVER_URL") CnC ünvanını ehtiva edir.
nameGenerator("SMS_YÜKLƏ") Bayraq standart olaraq təyin edilir. Bayraq qoyulubsa, CnC-yə SMS mesajları göndərir.
nameGenerator("SMS_ROOT_NUMBER") Yoluxmuş cihaz tərəfindən alınan SMS mesajlarının göndəriləcəyi telefon nömrəsi. Defolt sıfırdır.
nameGenerator("SMS_ROOT_NUMBER_RESEND") Bayraq standart olaraq silinir. Quraşdırılıbsa, yoluxmuş cihaz SMS aldıqda, o, kök nömrəsinə göndəriləcək.
nameGenerator("DEFAULT_APP_SMS") Bayraq standart olaraq silinir. Bu bayraq qoyularsa, proqram daxil olan SMS mesajlarını emal edəcək.
nameGenerator("DEFAULT_ADMIN") Bayraq standart olaraq silinir. Əgər bayraq qoyulubsa, tətbiqin administrator hüquqları var.
nameGenerator("DEFAULT_ACCESSIBILITY") Bayraq standart olaraq silinir. Bayraq qoyulubsa, Əlçatımlılıq Xidmətindən istifadə edən xidmət işləyir.
nameGenerator("APPS_CONFIG") Xüsusi proqramla əlaqəli Əlçatanlıq hadisəsi işə salındıqda yerinə yetirilməli olan hərəkətlərin siyahısını ehtiva edən JSON obyekti.
nameGenerator("APPS_INSTALLED") Cihazda quraşdırılmış proqramların siyahısını saxlayır.
nameGenerator("IS_FIST_RUN") Bayraq ilk başlanğıcda sıfırlanır.
nameGenerator("UNIQUE_ID") Unikal identifikator ehtiva edir. Bot ilk dəfə işə salındıqda yaradılır.

Serverdən əmrləri emal etmək üçün modul

Tətbiq CnC serverlərinin ünvanlarını kodlaşdırılmış massiv şəklində saxlayır Basexnumx xətlər. CnC serverlərinin siyahısı müvafiq əmr alındıqdan sonra dəyişdirilə bilər, bu halda ünvanlar üstünlük faylında saxlanılacaq.

Sorğuya cavab olaraq server proqrama əmr göndərir. Qeyd etmək lazımdır ki, əmrlər və parametrlər JSON formatında təqdim olunur. Tətbiq aşağıdakı əmrləri emal edə bilər:

Komanda Təsvir
irəli Başla Yoluxmuş cihaz tərəfindən alınan SMS mesajlarını CnC serverinə göndərməyə başlayın.
irəli dayan CnC serverinə yoluxmuş cihaz tərəfindən alınan SMS mesajlarının göndərilməsini dayandırın.
ussdRun USSD sorğusunu yerinə yetirin. USSD sorğusu göndərməyiniz lazım olan nömrə JSON sahəsində "nömrə" yerləşir.
SMS göndər Bir SMS mesajı göndərin (lazım olduqda, mesaj hissələrə bölünür). Parametr olaraq, əmr "to" - təyinat nömrəsi və "bədən" - mesajın gövdəsi sahələrini ehtiva edən JSON obyektini götürür.
sendSmsAb Yoluxmuş cihazın əlaqə siyahısındakı hər kəsə SMS mesajları göndərin (zəruri hallarda mesaj hissələrə bölünür). Mesajların göndərilməsi arasındakı interval 10 saniyədir. Mesajın əsas hissəsi JSON sahəsində "bədən"dədir
sendSmsMass Komanda parametrlərində göstərilən kontaktlara SMS mesajları göndərin (zəruri hallarda mesaj hissələrə bölünür). Mesajların göndərilməsi arasındakı interval 10 saniyədir. Parametr olaraq, əmr JSON massivini ("sms" sahəsi) götürür, onun elementlərində "to" - təyinat nömrəsi və "bədən" - mesajın gövdəsi sahələri var.
server dəyişdirin Bu əmr parametr kimi “url” açarı ilə dəyər götürə bilər - sonra bot nameGenerator("SERVER_URL") və ya "massiv" dəyərini dəyişəcək - sonra bot massivi nameGenerator-a (“API_SERVER_LIST”) yazacaq. Beləliklə, proqram CnC serverlərinin ünvanını dəyişir.
admin nömrəsi Komanda kök nömrəsi ilə işləmək üçün nəzərdə tutulmuşdur. Komanda aşağıdakı parametrlərlə JSON obyektini qəbul edir: “nömrə” — nameGenerator(“ROOT_NUMBER”) qəbul edilən dəyərə dəyişdirin, “yenidən göndərin” — nameGenerator-u dəyişdirin(“SMS_ROOT_NUMBER_RESEND”), “sendId” — nameGenerator-a göndərin(“ROOT_NUMBER” ) unikal ID.
yeniləmə məlumatı Yoluxmuş cihaz haqqında məlumatı serverə göndərin.
məlumatları silmək Komanda istifadəçi məlumatlarını silmək üçün nəzərdə tutulub. Tətbiqin hansı adla işə salınmasından asılı olaraq, ya cihazın yenidən başlaması ilə məlumatlar tamamilə silinir (əsas istifadəçi), ya da yalnız istifadəçi məlumatları silinir (ikinci istifadəçi).
corablarStart Proksi modulunu işə salın. Modulun işi ayrı bir bölmədə təsvir edilmişdir.
corablarStop Proksi modulunu dayandırın.
openLink Linki izləyin. Link JSON parametrində "url" düyməsinin altında yerləşir. Linki açmaq üçün “android.intent.action.VIEW” istifadə olunur.
AllSms yükləyin Cihaz tərəfindən alınan bütün SMS mesajlarını serverə göndərin.
AllPhotos yükləyin Yoluxmuş cihazdan URL-ə şəkillər göndərin. URL parametr kimi gəlir.
faylı yükləyin Yoluxmuş cihazdan URL-yə fayl göndərin. URL parametr kimi gəlir.
Telefon Nömrələrini yükləyin Kontakt siyahınızdakı telefon nömrələrini serverə göndərin. Parametr kimi “ab” düyməsi olan JSON obyekt dəyəri qəbul edilərsə, proqram telefon kitabçasından kontaktların siyahısını alır. Parametr kimi “sms” açarı olan JSON obyekti qəbul edilərsə, proqram SMS mesajları göndərənlərdən kontaktların siyahısını oxuyur.
Arxivi dəyişdirin Proqram faylı “url” düyməsini istifadə edərək parametr kimi gələn ünvandan yükləyir. Yüklənmiş fayl “archive.zip” adı ilə yadda saxlanılır. Bundan sonra proqram isteğe bağlı olaraq “b5jXh37gxgHBrZhQ4j3D” arxiv parolundan istifadə edərək faylı açacaq. Açılan fayllar [xarici yaddaş]/hgps qovluğunda saxlanılır. Bu kataloqda proqram veb saxtakarlıqlarını saxlayır (aşağıda təsvir edilmişdir).
tədbirlər Komanda ayrıca bölmədə təsvir olunan Action Service ilə işləmək üçün nəzərdə tutulmuşdur.
sınaq Heç nə etmə.
download Komanda uzaq serverdən fayl endirmək və onu “Yükləmələr” qovluğunda saxlamaq üçün nəzərdə tutulub. URL və fayl adı müvafiq olaraq JSON parametr obyektində parametr kimi gəlir: “url” və “fileName”.
aradan qaldırılması Faylı "Yükləmələr" qovluğundan silir. Fayl adı JSON parametrində “fileName” düyməsi ilə gəlir. Standart fayl adı “tmp.apk”dır.
xəbərdarlıq İdarəetmə serveri tərəfindən müəyyən edilmiş təsvir və başlıq mətnləri ilə bildiriş göstərin.

Komanda formatı xəbərdarlıq:

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

Tədqiq olunan fayl tərəfindən yaradılan bildiriş sahədə göstərilən tətbiq tərəfindən yaradılan bildirişlərlə eyni görünür app. Sahə dəyəri varsa openApp — Düzdür, bildiriş açılanda sahədə göstərilən proqram işə salınır app. Sahə dəyəri varsa openApp - Yalan, onda:

  • Fişinq pəncərəsi açılır, məzmunu kataloqdan yüklənir <%xarici yaddaş%>/hgps/<%filename%>
  • Tərkibi serverdən endirilən fişinq pəncərəsi açılır <%url%>?id=<%Bot id%>&app=<%Tətbiq adı%>
  • Kart təfərrüatlarını daxil etmək imkanı olan Google Play Kartı kimi maskalanmış fişinq pəncərəsi açılır.

Tətbiq istənilən əmrin nəticəsini göndərir <%CnC%>set_state.php aşağıdakı formatda JSON obyekti kimi:

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

ActionsService
Tətbiq proseslərinin daxil olduğu əmrlərin siyahısı fəaliyyət. Komanda qəbul edildikdə, komanda emal modulu genişləndirilmiş əmri yerinə yetirmək üçün bu xidmətə daxil olur. Xidmət JSON obyektini parametr kimi qəbul edir. Xidmət aşağıdakı əmrləri yerinə yetirə bilər:

1. PARAMS_ACTION — belə bir əmri qəbul edərkən xidmət əvvəlcə JSON parametrindən Type düyməsinin qiymətini alır, bu aşağıdakı kimi ola bilər:

  • xidmət məlumatı – alt komanda JSON parametrindən açarla dəyəri alır Vacib deyil daxildir. Əgər bayraq Doğrudursa, proqram bayrağı təyin edir FLAG_ISOLATED_PROCESS Əlçatımlılıq Xidmətindən istifadə edən xidmətə. Bu yolla xidmət ayrıca bir prosesdə işə salınacaq.
  • kök — hazırda diqqət mərkəzində olan pəncərə haqqında məlumatı qəbul etmək və serverə göndərmək. Tətbiq AccessibilityNodeInfo sinifindən istifadə edərək məlumat əldə edir.
  • admin — administrator hüquqlarını tələb etmək.
  • gecikdirmək — “məlumat” açarı üçün parametrdə göstərilən millisaniyələrin sayı üçün ActionsService-i dayandırın.
  • Windows — istifadəçiyə görünən pəncərələrin siyahısını göndərin.
  • qurmaq — proqramı yoluxmuş cihaza quraşdırın. Arxiv paketinin adı “fileName” düyməsindədir. Arxivin özü Yükləmələr kataloqunda yerləşir.
  • qlobal – alt komanda cari pəncərədən hərəkət etmək üçün nəzərdə tutulub:
    • Tez Parametrlər menyusunda
    • geri
    • ev
    • bildirişlərə
    • son açılan proqramlar pəncərəsinə

  • başlamaq - tətbiqi işə salın. Tətbiq adı açarla parametr kimi gəlir məlumat.
  • səslər — səs rejimini susdurmağa dəyişdirin.
  • kilidini açmaq — ekranın və klaviaturanın arxa işığını tam parlaqlığa qədər yandırır. Tətbiq [Application lable]:INFO sətrini teq olaraq göstərərək WakeLock-dan istifadə edərək bu hərəkəti həyata keçirir.
  • permissionOverlay — funksiya yerinə yetirilməyib (əmr icrasına cavab {"message":"Not support"} və ya {"message":"low sdk"})
  • jest — funksiya yerinə yetirilməyib (əmr icrasına cavab {"message":"Not support"}və ya {"message":"Low API"})
  • icazələrin — bu əmr proqram üçün icazə tələb etmək üçün lazımdır. Bununla belə, sorğu funksiyası həyata keçirilmir, ona görə də əmr mənasızdır. Tələb olunan hüquqların siyahısı “icazələr” düyməsi ilə JSON massivi kimi gəlir. Standart siyahı:
    • android. icazəsi.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

  • açmaq — fişinq pəncərəsini göstərin. Serverdən gələn parametrdən asılı olaraq, proqram aşağıdakı fişinq pəncərələrini göstərə bilər:
    • Tərkibi kataloqdakı faylda yazılmış fişinq pəncərəsini göstərin <%xarici kataloq%>/hgps/<%param_filename%>. İstifadəçinin pəncərə ilə qarşılıqlı əlaqəsinin nəticəsi göndəriləcək <%CnC%>/records.php
    • Məzmunu ünvandan əvvəlcədən yüklənmiş fişinq pəncərəsini göstərin <%url_param%>?id=<%bot_id%>&app=<%packagename%>. İstifadəçinin pəncərə ilə qarşılıqlı əlaqəsinin nəticəsi göndəriləcək <%CnC%>/records.php
    • Google Play Kartı kimi maskalanmış fişinq pəncərəsini göstərin.

  • interaktiv — komanda AcessibilityService istifadə edərək digər proqramların pəncərə elementləri ilə qarşılıqlı əlaqə üçün nəzərdə tutulmuşdur. Qarşılıqlı fəaliyyət proqramında xüsusi xidmət həyata keçirilib. Tədqiq olunan proqram pəncərələrlə əlaqə saxlaya bilər:
    • Hazırda aktivdir. Bu halda, parametr qarşılıqlı əlaqə qurmağınız lazım olan obyektin id və ya mətnini (adı) ehtiva edir.
    • Əmr yerinə yetirildiyi anda istifadəçiyə görünür. Tətbiq pəncərələri id ilə seçir.

    Obyektləri qəbul etmək AccessibilityNodeInfo Maraqlanan pəncərə elementləri üçün proqram parametrlərdən asılı olaraq aşağıdakı hərəkətləri edə bilər:

    • fokus — diqqəti obyektə yönəldin.
    • klik — obyektə klikləyin.
    • actionId — ID ilə hərəkət edin.
    • setText — obyektin mətnini dəyişdirin. Mətni dəyişdirmək iki yolla mümkündür: hərəkəti yerinə yetirmək ACTION_SET_TEXT (yoluxmuş cihazın Android versiyası ondan kiçik və ya ona bərabərdirsə LOLLIPOP) və ya sətri panoya yerləşdirmək və onu obyektə yapışdırmaqla (köhnə versiyalar üçün). Bu əmr bank proqramında məlumatları dəyişdirmək üçün istifadə edilə bilər.

2. PARAMS_ACTIONS - eyni ilə PARAMS_ACTION, yalnız JSON əmrlər sırası gəlir.

Görünür, bir çox insan başqa bir tətbiqin pəncərə elementləri ilə qarşılıqlı əlaqə funksiyasının necə göründüyü ilə maraqlanacaq. Gustuff-da bu funksionallıq belə həyata keçirilir:

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

Mətn dəyişdirmə funksiyası:

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

Beləliklə, idarəetmə serverinin düzgün konfiqurasiyası ilə Gustuff bank proqramında mətn sahələrini doldura və əməliyyatı başa çatdırmaq üçün lazım olan düymələrə basa bilir. Troyanın proqrama daxil olmasına belə ehtiyac yoxdur — PUSH bildirişini göstərmək üçün əmr göndərmək və sonra əvvəllər quraşdırılmış bank proqramını açmaq kifayətdir. İstifadəçi özünü təsdiq edəcək, bundan sonra Gustuff avtomobili doldura biləcək.

SMS emalı modulu

Tətbiq yoluxmuş cihaz üçün SMS mesajlarını qəbul etmək üçün hadisə idarəedicisini quraşdırır. Tədqiq olunan proqram operatordan SMS mesajının mətninə daxil olan əmrləri qəbul edə bilər. Əmrlər aşağıdakı formatda gəlir:

7!5=<%Base64 kodlanmış komanda%>

Tətbiq bütün daxil olan SMS mesajlarında sətri axtarır 7!5=, sətir aşkar edildikdə, 64-cü ofsetdə Base4-dən sətri deşifrə edir və əmri yerinə yetirir. Əmrlər CnC ilə olanlara bənzəyir. İcra nəticəsi əmrin gəldiyi eyni nömrəyə göndərilir. Cavab formatı:

7*5=<%Base64 “nəticə_kodu əmrinin”%> kodu

İsteğe bağlı olaraq, proqram bütün qəbul edilmiş mesajları Kök nömrəsinə göndərə bilər. Bunun üçün üstünlük faylında Kök nömrəsi göstərilməli və mesajın yönləndirilməsi bayrağı təyin edilməlidir. Təcavüzkarın nömrəsinə aşağıdakı formatda SMS mesajı göndərilir:

<%From number%> - <%Vaxt, format: gg/AA/yyyy SS:dd:ss%> <%SMS bədən%>

Həmçinin, isteğe bağlı olaraq, proqram CnC-yə mesaj göndərə bilər. SMS mesajı JSON formatında serverə göndərilir:

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

Əgər bayraq qoyulubsa nameGenerator("DEFAULT_APP_SMS") – proqram SMS mesajının emalını dayandırır və daxil olan mesajların siyahısını təmizləyir.

Proksi modulu

Tədqiq olunan proqram konfiqurasiya ilə statik sahələri özündə birləşdirən ayrıca sinfə malik olan Backconnect Proksi modulunu (bundan sonra Proksi modulu adlandırılacaq) ehtiva edir. Konfiqurasiya məlumatları nümunədə aydın formada saxlanılır:

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır

Proksi modulu tərəfindən həyata keçirilən bütün hərəkətlər fayllara daxil edilir. Bunun üçün Xarici Yaddaşdakı proqram log fayllarının saxlandığı “logs” (konfiqurasiya sinfində ProxyConfigClass.logsDir sahəsi) adlı qovluq yaradır. Qeydiyyat adları olan fayllarda baş verir:

  1. main.txt – CommandServer adlı sinfin işi bu fayla daxil edilmişdir. Bundan sonra str sətirinin bu fayla daxil edilməsi mainLog(str) kimi işarələnəcək.
  2. sessiya-<%id%>.txt — bu fayl xüsusi proksi seansı ilə əlaqəli log məlumatlarını saxlayır. Bundan sonra str sətirinin bu fayla daxil edilməsi sessionLog (str) kimi qeyd olunacaq.
  3. server.txt – bu fayl yuxarıda təsvir edilmiş fayllara yazılmış bütün məlumatları qeyd etmək üçün istifadə olunur.

Log data formatı:

<%Date%> [Mövzu[<%thread id%>], id[]]: log-string

Proksi modulunun işləməsi zamanı baş verən istisnalar da fayla daxil edilir. Bunun üçün proqram aşağıdakı formatda JSON obyekti yaradır:

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

Sonra onu simli təsvirə çevirir və qeyd edir.

Proksi modulu müvafiq əmri aldıqdan sonra işə salınır. Proksi modulunu işə salmaq əmri alındıqda, proqram çağırılan xidməti işə salır Əsas Xidmət, Proksi modulunun işini idarə etmək üçün cavabdehdir - onu işə salmaq və dayandırmaq.

Xidmətə başlama mərhələləri:

1. Dəqiqədə bir dəfə işləyən və Proksi modulunun fəaliyyətini yoxlayan taymeri işə salır. Modul aktiv deyilsə, onu işə salır.
Həmçinin hadisə tetiklendiğinde android.net.conn.CONNECTIVITY_CHANGE Proksi modulu işə salındı.

2. Tətbiq parametrlə oyanma kilidi yaradır PARTIAL_WAKE_LOCK və onu tutur. Bu, cihazın CPU-nun yuxu rejiminə keçməsinin qarşısını alır.

3. Proksi modulunun əmr emal sinfini işə salır, əvvəlcə xətti qeyd edir mainLog("Server başlat") и

Server::start() host[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

hara proxy_cnc, command_port və proxy_port – Proksi server konfiqurasiyasından əldə edilən parametrlər.

Komanda emal sinfi adlanır CommandConnection. Başladıqdan dərhal sonra aşağıdakı hərəkətləri yerinə yetirir:

4. -a qoşulur ProxyConfigClass.host: ProxyConfigClass.commandPort və yoluxmuş cihaz haqqında məlumatları JSON formatında göndərir:

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

Harada:

  • id – identifikator, “x” adlı Paylaşılan Üstünlük faylından “id” sahəsi ilə dəyər almağa çalışır. Bu dəyər əldə edilmədikdə, yenisini yaradır. Beləliklə, Proksi modulunun öz identifikatoru var, o da Bot ID-si ilə eyni şəkildə yaradılır.
  • imei — cihazın IMEI. Dəyərin əldə edilməsi prosesində xəta baş verərsə, bu sahənin yerinə xəta mətni yazılacaq.
  • imsi — Cihazın Beynəlxalq Mobil Abunəçi Kimliyi. Dəyərin əldə edilməsi prosesində xəta baş verərsə, bu sahənin yerinə xəta mətni yazılacaq.
  • model — Son məhsulun son istifadəçi tərəfindən görünən adı.
  • istehsalçı — Məhsulun/avadanlığın istehsalçısı (Build.MANUFACTURER).
  • androidVersion - "<%release_version%> (<%os_version%>),<%sdk_version%>" formatında sətir
  • ölkə — cihazın cari yeri.
  • partnerId boş sətirdir.
  • paket adı - paket adı.
  • networkType — cari şəbəkə bağlantısının növü (məsələn: “WIFI”, “MOBILE”). Səhv olarsa, null qaytarır.
  • hasGsmSupport – doğru – əgər telefon GSM-i dəstəkləyirsə, əks halda yanlışdır.
  • simReady – SİM kartın vəziyyəti.
  • simCountry - ISO ölkə kodu (SİM kart təminatçısına əsaslanır).
  • networkOperator — operator adı. Dəyərin əldə edilməsi prosesində xəta baş verərsə, bu sahənin yerinə xəta mətni yazılacaq.
  • simOperator — Xidmət Provayderinin Adı (SPN). Dəyərin əldə edilməsi prosesində xəta baş verərsə, bu sahənin yerinə xəta mətni yazılacaq.
  • versiya - bu sahə konfiqurasiya sinifində saxlanılır; botun sınaqdan keçirilmiş versiyaları üçün "1.6"-a bərabər idi.

5. Serverdən əmrlərin gözləmə rejiminə keçir. Serverdən gələn əmrlər aşağıdakı formatda gəlir:

  • 0 ofset - əmr
  • 1 ofset – sessionId
  • 2 ofset - uzunluq
  • 4 ofset - məlumat

Komanda gələndə proqram qeyd edir:
mainLog("Başlıq { sessionId<%id%>], növü[<%command%>], uzunluq[<%length%>] }")

Serverdən aşağıdakı əmrlər mümkündür:

ad Komanda Tarix təsvir
əlaqə id 0 Bağlantı ID Yeni əlaqə yaradın
SLEEP 3 vaxt Proksi modulunu dayandırın
PİNQ_PONG 4 - PONG mesajı göndərin

PONG mesajı 4 baytdan ibarətdir və belə görünür: 0x04000000.

ConnectionId əmri qəbul edildikdə (yeni əlaqə yaratmaq üçün) CommandConnection sinif nümunəsini yaradır ProxyConnection.

  • Proqnozlaşdırmada iki sinif iştirak edir: ProxyConnection и son. Sinif yaratarkən ProxyConnection ünvana qoşulur ProxyConfigClass.host: ProxyConfigClass.proxyPort və JSON obyektindən keçmək:

 {
    "id":<%connectionId%>
}

Cavab olaraq, server əlaqə qurulmalı olan uzaq serverin ünvanını ehtiva edən SOCKS5 mesajı göndərir. Bu serverlə qarşılıqlı əlaqə sinif vasitəsilə baş verir son. Bağlantı quraşdırma sxemi aşağıdakı kimi təqdim edilə bilər:

Android Trojan Gustuff hesablarınızdan kremi (fiat və kriptovalyuta) necə çıxarır

Şəbəkə qarşılıqlı əlaqələri

Şəbəkə sniffers tərəfindən trafik təhlilinin qarşısını almaq üçün, CnC server və proqram arasında qarşılıqlı əlaqə SSL protokolundan istifadə edərək qoruna bilər. Həm serverdən, həm də serverə ötürülən bütün məlumatlar JSON formatında təqdim olunur. Tətbiq əməliyyat zamanı aşağıdakı sorğuları yerinə yetirir:

  • http://<%CnC%>/api/v1/set_state.php — əmrin icrasının nəticəsi.
  • http://<%CnC%>/api/v1/get.php - əmr almaq.
  • http://<%CnC%>/api/v1/load_sms.php — yoluxmuş cihazdan SMS mesajlarının endirilməsi.
  • http://<%CnC%>/api/v1/load_ab.php — yoluxmuş cihazdan kontaktların siyahısını yükləmək.
  • http://<%CnC%>/api/v1/aevents.php – sorğu üstünlük faylında yerləşən parametrlər yenilənərkən edilir.
  • http://<%CnC%>/api/v1/set_card.php — Google Play Market kimi maskalanan fişinq pəncərəsindən istifadə etməklə əldə edilmiş məlumatların yüklənməsi.
  • http://<%CnC%>/api/v1/logs.php - log məlumatlarının yüklənməsi.
  • http://<%CnC%>/api/v1/records.php – fişinq pəncərələri vasitəsilə əldə edilən məlumatların yüklənməsi.
  • http://<%CnC%>/api/v1/set_error.php - baş vermiş xəta haqqında bildiriş.

tövsiyələr

Müştərilərini mobil troyanların təhlükəsindən qorumaq üçün şirkətlər istifadəçi cihazlarında əlavə proqram təminatı quraşdırmadan zərərli fəaliyyətləri izləməyə və qarşısını almağa imkan verən kompleks həllərdən istifadə etməlidirlər.

Bunun üçün mobil troyanları aşkar etmək üçün imza üsulları həm müştərinin, həm də tətbiqin özünün davranışını təhlil etmək texnologiyaları ilə gücləndirilməlidir. Qoruma rəqəmsal barmaq izi texnologiyasından istifadə edən cihazın identifikasiyası funksiyasını da əhatə etməlidir ki, bu da hesabın atipik cihazdan istifadə edildiyini və artıq fırıldaqçının əlinə keçdiyini anlamağa imkan verəcək.

Prinsipcə vacib bir məqam şirkətlərə təkcə İnternetdə deyil, həm də mobil kanalda, məsələn, mobil bankçılıq üçün tətbiqlərdə, kriptovalyutalarla əməliyyatlar üçün və hər hansı digər əməliyyatlarda yaranan risklərə nəzarət etməyə imkan verən kanallararası təhlilin mövcudluğudur. əməliyyatlar həyata keçirilə bilər.maliyyə əməliyyatı.

İstifadəçilər üçün təhlükəsizlik qaydaları:

  • Android ƏS-li mobil cihaz üçün Google Play-dən başqa heç bir mənbədən proqramlar quraşdırmayın, tətbiqin tələb etdiyi hüquqlara xüsusi diqqət yetirin;
  • mütəmadi olaraq Android OS yeniləmələrini quraşdırın;
  • yüklənmiş faylların uzantılarına diqqət yetirin;
  • şübhəli mənbələrə baş çəkməyin;
  • SMS mesajlarında alınan linklərə klikləməyin.

Baş rolda Semyon Roqaçeva, Group-IB Kompüter Məhkəmə Laboratoriyasında zərərli proqram tədqiqatı üzrə kiçik mütəxəssis.

Mənbə: www.habr.com

Добавить комментарий