Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne

Tenê roja din Koma-IB agahdar kirin li ser çalakiya mobîl Android Trojan Gustuff. Ew bi taybetî di bazarên navneteweyî de dixebite, êrîşî xerîdarên 100 bankên biyanî yên herî mezin, bikarhênerên 32 walletên krîpto yên mobîl, û her weha çavkaniyên mezin ên e-bazirganiyê dike. Lê pêşdebirê Gustuff sûcdarek sîberî-rûsî ye ku di bin navê paşnavê Bestoffer de ye. Heya van demên dawî, wî Troya xwe wekî "hilberek cidî ji bo mirovên xwedî zanîn û ezmûn" dinirxand.

Pisporê analîzkirina koda xerab li Group-IB Ivan Pisarev di lêkolîna xwe de, ew bi hûrgulî li ser ka Gustuff çawa dixebite û xetereyên wê çi ne.

Gustuff nêçîra kê dike?

Gustuff ji nifşek nû ya malware ye ku bi fonksiyonên bi tevahî otomatîkî ve girêdayî ye. Li gorî pêşdebiran, Trojan bûye guhertoyek nû û pêşkeftî ya malware AndyBot, ku ji Mijdara 2017-an vir ve êrişî têlefonên Android-ê dike û drav dizîne bi navgîniya formên weba phishing ku wekî sepanên mobîl ên bankên navdar ên navneteweyî û pergalên dravdanê têne xuyang kirin. Bestoffer ragihand ku bihayê kirêya Gustuff Bot mehê 800 $ bû.

Analîza nimûneya Gustuff destnîşan kir ku Trojan bi potansiyel xerîdar dike ku bi karanîna sepanên mobîl ên bankên herî mezin, wek Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, û her weha berîkên krîptoyê. Wallet Bitcoin, BitPay, Cryptopay, Coinbase, hwd.

Bi eslê xwe wekî Trojanek bankingê ya klasîk hatî afirandin, di guhertoya heyî de Gustuff navnîşa armancên potansiyel ên êrîşê bi girîngî berfireh kiriye. Digel serîlêdanên Android-ê yên ji bo bank, pargîdaniyên fintech û karûbarên krîpto, Gustuff ji bikarhênerên serîlêdanên bazarê, firotgehên serhêl, pergalên dravdanê û peyamberên tavilê re armanc e. Bi taybetî, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut û yên din.

Xala têketinê: Hesabkirina ji bo enfeksiyona girseyî

Gustuff bi vektora "klasîk" ya ketina nav têlefonên Android-ê bi navgîniya şandinên SMS-ê yên bi girêdanên APK-an ve tê destnîşan kirin. Dema ku amûrek Android-ê bi fermana serverê bi Trojan vegirtî be, dibe ku Gustuff bi databasa pêwendiya têlefonê vegirtî an jî bi navgîniya databasa serverê ve belav bibe. Fonksiyona Gustuff ji bo enfeksiyona girseyî û herî zêde kapîtalîzma karsaziya operatorên wê hatî sêwirandin - ew fonksiyonek "oto-dagirtinê" ya bêhempa di serîlêdanên bankinga desta ya rewa û berîkên krîptoyê de heye, ku dihêle hûn dizîna drav bilezînin û mezin bikin.

Lêkolînek Trojan destnîşan kir ku fonksiyona otofillê di wê de bi karanîna Karûbarê Gihîştinê, karûbarek ji bo kesên astengdar, hate bicîh kirin. Gustuff ne Trojanê yekem e ku bi serfirazî parastina li dijî danûstendina bi hêmanên pencereyê yên serîlêdanên din ên ku vê karûbarê Android-ê bikar tînin derbas dike. Lêbelê, karanîna Karûbarê Gihîştinê bi hev re bi dagirtina gerîdeyê re hîn jî kêm kêm e.

Piştî dakêşana têlefona qurbaniyê, Gustuff, bi karanîna Karûbarê Gihîştinê, dikare bi hêmanên pencereyê yên serîlêdanên din (banke, pereyê krîpto, û hem jî serîlêdanên ji bo kirîna serhêl, şandina peyaman, hwd.) re têkilî daynin, kiryarên ku ji bo êrîşkaran hewce ne . Mînakî, bi fermana serverê, Trojanek dikare bişkokan bikire û di sepanên bankingê de nirxên qadên nivîsê biguhezîne. Bikaranîna mekanîzmaya Karûbarê Gihîştinê dihêle ku Trojan mekanîzmayên ewlehiyê yên ku ji hêla bankan ve têne bikar anîn da ku li hember Trojansên mobîl ên nifşê berê bikar bînin, û her weha guhertinên di polîtîkaya ewlehiyê de ku ji hêla Google ve di guhertoyên nû yên OS-ya Android-ê de hatine bicîh kirin, derbas bike. Bi vî rengî, Gustuff "dizane" çawa parastina Google Protect neçalak dike: li gorî nivîskar, ev fonksiyon di 70% bûyeran de dixebite.

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne

Gustuff di heman demê de dikare bi îkonên serîlêdanên rewa yên desta re agahdariya PUSH ya sexte jî nîşan bide. Bikarhêner li ser agahdariya PUSH bitikîne û pencereyek phishing-ê ya ku ji serverê hatî dakêşandin dibîne, ku ew têxe karta bankê ya daxwazkirî an daneyên berîka krîptoyê. Di senaryoyek din a Gustuff de, serîlêdana ku li ser navê wê agahdariya PUSH hate xuyang kirin tê vekirin. Di vê rewşê de, malware, li ser fermana serverê bi navgîniya Karûbarê Gihîştinê, dikare ji bo danûstendinek xapînok zeviyên forma serîlêdana bankê tije bike.

Fonksiyonên Gustuff di heman demê de şandina agahdariya li ser cîhazek vegirtî ji serverê re, şiyana xwendin / şandina peyamên SMS, şandina daxwazên USSD, destpêkirina SOCKS5 Proxy, şopandina lînkê, şandina pelan (di nav de şopandina wêneya belgeyan, dîmen, wêne) ji server, cîhazê li mîhengên kargehê vegerîne.

Analîzkirina malware

Berî ku serîlêdanek xirab saz bike, OS-ya Android-ê pencereyek ku tê de navnîşek mafên ku ji hêla Gustuff ve hatî xwestin vedihewîne nîşanî bikarhêner dide:

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne
Serlêdan dê tenê piştî wergirtina razîbûna bikarhêner were saz kirin. Piştî destpêkirina serîlêdanê, Trojan dê pencereyek nîşanî bikarhêner bide:

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne
Piştî ku ew ê îkona xwe jê bibe.

Gustuff, li gorî nivîskar, ji hêla pakkerek ji FTT ve tê pak kirin. Piştî destpêkirinê, serîlêdan bi periyodîk bi servera CnC re têkilî dike da ku fermanan bistîne. Gelek pelên ku me lêkolîn kirin navnîşek IP-ê wekî servera kontrolê bikar anîn 88.99.171 [.]105 (li vir de em ê wekî binav bikin <%CnC%>).

Piştî destpêkirinê, bername dest bi şandina peyaman ji serverê re dike http://<%CnC%>/api/v1/get.php.

Tê payîn ku bersiv di forma jêrîn de JSON be:

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

Her gava ku serîlêdan tê gihîştin, ew agahdariya li ser cîhaza vegirtî dişîne. Forma peyamê li jêr tê nîşandan. Hêjayî gotinê ye ku zeviyên tije, biserde, apps и destûr - vebijarkî û dê tenê di doza fermanek daxwazek ji CnC de were şandin.

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

Depokirina daneyên veavakirinê

Gustuff agahdariya girîng a xebitandinê di pelek bijare de hilîne. Navê pelê, û her weha navên pîvanên tê de, encama hesabkirina berhevoka MD5 ji rêzê ne. 15413090667214.6.1<%name%>ko <%name%> - Nav-nirxa destpêkê. Şirovekirina Python a fonksiyona hilberîna navê:

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

Di tiştên jêrîn de em ê wê wekî destnîşan bikin nameGenerator (navdêr).
Ji ber vê yekê navê pelê yekem e: nameGenerator("API_SERVER_LIST"), ew nirxên bi navên jêrîn dihewîne:

Navê guherbar nirxê
nameGenerator("API_SERVER_LIST") Navnîşanek navnîşanên CnC di forma array de vedihewîne.
nameGenerator("API_SERVER_URL") Navnîşana CnC dihewîne.
nameGenerator("SMS_UPLOAD") Ala ji hêla xwerû ve hatî danîn. Ger ala were danîn, peyamên SMS ji CnC re dişîne.
nameGenerator("SMS_ROOT_NUMBER") Hejmara têlefonê ya ku peyamên SMS-yên ku ji hêla cîhaza vegirtî ve hatine wergirtin dê werin şandin. Default null e.
nameGenerator("SMS_ROOT_NUMBER_RESEND") Ala ji hêla xwerû ve tê paqij kirin. Ger were saz kirin, dema ku amûrek vegirtî SMSek werdigire, ew ê ji jimareya root re were şandin.
nameGenerator("DEFAULT_APP_SMS") Ala ji hêla xwerû ve tê paqij kirin. Ger ev ala were danîn, serîlêdan dê peyamên SMS-ê yên hatinî pêvajoyê bike.
nameGenerator("DEFAULT_ADMIN") Ala ji hêla xwerû ve tê paqij kirin. Ger ala were danîn, serîlêdan xwediyê mafên rêveberiyê ye.
nameGenerator("DEFAULT_ACCESSIBILITY") Ala ji hêla xwerû ve tê paqij kirin. Ger ala were danîn, karûbarek ku Karûbarê Gihîştinê bikar tîne dixebite.
nameGenerator("APPS_CONFIG") Tiştek JSON ku navnîşek çalakiyan vedihewîne ku divê dema ku bûyerek Gihîştinê ya ku bi serîlêdanek taybetî ve girêdayî ye were meşandin.
nameGenerator("APPS_INSTALLED") Lîsteya serîlêdanên ku li ser cîhazê hatine saz kirin hilîne.
nameGenerator("IS_FIST_RUN") Ala di destpêka yekem de ji nû ve tê danîn.
nameGenerator("UNIQUE_ID") Nasnameyek yekta dihewîne. Dema ku bot ji bo yekem car tê destpêkirin hate afirandin.

Modulek ji bo hilanîna fermanên ji serverê

Serlêdan navnîşanên pêşkêşkerên CnC di forma rêzek ku ji hêla kodkirî ve hatî tomar kirin de hilîne Bingeh85 xetên. Navnîşa serverên CnC bi wergirtina fermana guncan dikare were guheztin, di vê rewşê de navnîşan dê di pelek bijare de werin hilanîn.

Di bersiva daxwazê ​​de, server fermanek ji serîlêdanê re dişîne. Hêjayî gotinê ye ku ferman û pîvan di formata JSON de têne pêşkêş kirin. Serlêdan dikare fermanên jêrîn pêvajoyê bike:

tîma description
pêşda destpêkirin Dest bi şandina peyamên SMS-ê yên ku ji hêla cîhaza vegirtî ve hatî wergirtin ji servera CnC re bikin.
pêşStop Şandina peyamên SMS-ên ku ji hêla cîhaza vegirtî ve hatine wergirtin ji servera CnC re rawestînin.
ussdRun Daxwaza USSD-ê bicîh bikin. Hejmara ku hûn hewce ne ku hûn daxwazek USSD bikin di qada JSON "hejmar" de ye.
sendSms Yek peyamek SMS bişînin (heke hewce bike, peyam "perçe" dibe beşan). Wekî pîvanek, ferman tiştek JSON digire ku zeviyên "to" - jimareya mebestê û "beden" - laşê peyamê digire.
sendSmsAb Di navnîşa pêwendiya cîhaza vegirtî de ji her kesê re peyamên SMS (heke pêwîst be, peyam "parçe" be) bişînin. Navbera di navbera şandina peyaman de 10 saniye ye. Bedena peyamê di qada JSON "beden" de ye
sendSmsMass Ji têkiliyên ku di pîvanên fermanê de hatine destnîşan kirin re peyamên SMS-ê bişînin (heke hewce be, peyam "perçe" dibe parçe. Navbera di navbera şandina peyaman de 10 saniye ye. Wekî parametre, ferman rêzek JSON digire (qada "sms"), hêmanên wê qadên "to" - jimareya mebestê û "beden" - laşê peyamê vedigirin.
changeServer Ev ferman dikare bi mifteya "url" re wekî pîvanek nirxek bigire - wê hingê bot dê nirxa nameGenerator ("SERVER_URL"), an "array" biguhezîne - wê hingê bot dê rêzê li nameGeneratorê binivîse ("API_SERVER_LIST") Bi vî rengî, serîlêdan navnîşana serverên CnC diguhezîne.
adminNumber Ferman ji bo ku bi jimareyek root re bixebite hatî çêkirin. Ferman hêmanek JSON bi pîvanên jêrîn qebûl dike: "hejmar" - navêGenerator ("ROOT_NUMBER") biguhezîne nirxa wergirtî, "ji nû ve bişîne" - navê Generatorê biguhezîne ("SMS_ROOT_NUMBER_RESEND"), "sendId" - bişîne nameGenerator ("ROOT_NUMBER" ) yekane ID.
updateInfo Agahdariya li ser cîhaza vegirtî ji serverê re bişînin.
wipeData Ferman armanc e ku daneyên bikarhêner jêbirin. Bi kîjan navî ve serîlêdan hatî destpêkirin ve girêdayî ye, an dane bi rebootek amûrek (bikarhênerê seretayî) bi tevahî têne jêbirin, an tenê daneyên bikarhêner têne jêbirin (bikarhênerê duyemîn).
socksStart Modula Proxy dest pê bikin. Operasyona modulê di beşek cûda de tête diyar kirin.
socksStop Modula Proxy rawestînin.
OpenLink Girêdanê bişopînin. Girêdan di pîvana JSON de di bin bişkoka "url" de ye. "android.intent.action.VIEW" ji bo vekirina girêdanê tê bikar anîn.
uploadAllSms Hemî peyamên SMS ên ku ji hêla cîhazê ve hatine wergirtin ji serverê re bişînin.
barkirinaHemûWêne Wêneyên ji amûrek vegirtî ji URL-ê re bişînin. URL wekî pîvanek tê.
uploadFile Ji amûrek vegirtî pelek ji URL-ê re bişînin. URL wekî pîvanek tê.
uploadPhoneNumbers Ji navnîşa pêwendiya xwe hejmarên têlefonê ji serverê re bişînin. Ger nirxek tişta JSON bi mifteya "ab" wekî parametre were wergirtin, serîlêdan navnîşek têkiliyan ji pirtûka têlefonê distîne. Ger tiştek JSON bi mifteya "sms" wekî parametre were wergirtin, serîlêdan navnîşa têkiliyan ji şanderên peyamên SMS dixwîne.
changeArchive Serlêdan pelê ji navnîşana ku wekî pîvanek tê bi karanîna bişkoka "url" dakêşîne. Pela dakêşandî bi navê "archive.zip" tê tomarkirin. Dê serîlêdan paşê pelê veke, bi bijare şîfreya arşîvê "b5jXh37gxgHBrZhQ4j3D" bikar bîne. Pelên nezilandî di pelrêça [depokirina derve]/hgps de têne tomar kirin. Di vê pelrêçê de, serîlêdan sextekariyên malperê hildide (li jêr tê ravekirin).
çalakiyên Ferman ji bo xebitandina Karûbarê Çalakiyê, ya ku di beşek cihêreng de tê vegotin, hatî çêkirin.
îmtîhan Tiştekî nakin.
download Ferman armanc e ku pelek ji serverek dûr dakêşîne û wê li pelrêça "Daxistin" hilîne. URL û navê pelê bi rêzê ve wekî parameterek, zeviyên di elementa parameterê JSON de têne: "url" û "fileName".
dûrxistin Pelek ji pelrêça "Daxistin" jê dike. Navê pelê di parametreyek JSON de bi mifteya "Navê pelê" tê. Navê pelê standard "tmp.apk" e.
agahdayin Agahiyek bi ravekirin û nivîsên sernavê yên ku ji hêla servera rêveberiyê ve hatine destnîşankirin nîşan bidin.

Forma fermanê agahdayin:

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

Agahdariya ku ji hêla dosyaya di bin lêpirsînê de hatî çêkirin bi agahdariya ku ji hêla serîlêdana ku di qadê de hatî destnîşan kirin ve hatî çêkirin wekhev xuya dike. app. Ger nirxa zeviyê OpenApp - Rast e, dema ku agahdariyek tê vekirin, serîlêdana ku di qadê de hatî destnîşan kirin dest pê dike app. Ger nirxa zeviyê OpenApp - Derew, wê demê:

  • Paceyek phishing vedibe, naveroka wê ji pelrêçê tê daxistin <% depoya derve%>/hgps/<%filename%>
  • Pencereyek phishing vedibe, naveroka wê ji serverê tê daxistin <%url%>?id=<%Bot id%>&app=<%Application name%>
  • Pencereyek phishing vedibe, ku wekî qerta Google Play-ê veşartî ye, bi fersendê ku meriv hûrguliyên qertê têxe.

Serlêdan encama her fermanê dişîne <%CnC%>set_state.php wekî tiştek JSON di forma jêrîn de:

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

ActionsService
Navnîşa fermanên ku pêvajoyên serîlêdanê dihewîne çalakî. Dema ku fermanek tê wergirtin, modula pêvajoya fermanê digihîje vê karûbarê da ku emrê dirêjkirî bicîh bîne. Karûbar tiştek JSON wekî pîvanek qebûl dike. Karûbar dikare fermanên jêrîn bicîh bîne:

1. PARAMS_ACTION - dema ku fermanek weha werdigire, karûbar pêşî ji pîvana JSON nirxa bişkojka Tîpa werdigire, ku dikare wiha be:

  • serviceInfo - Binferman ji pîvana JSON nirx bi mifteyê distîne di nav deNe Girîng. Ger ala Rast be, serîlêdan ala destnîşan dike FLAG_ISOLATED_PROCESS ji bo karûbarê ku Karûbarê Gihîştinê bikar tîne. Bi vî awayî dê xizmet di pêvajoyek cûda de were destpêkirin.
  • reh - Agahdariya li ser pencereya ku niha di balê de ye bistînin û ji serverê re bişînin. Serlêdan bi karanîna çîna AccessibilityNodeInfo agahdarî digire.
  • admin - mafên rêveberê daxwaz bikin.
  • derengxistin - ActionsService ji bo hejmara mîlîçirkeyên ku di parametreyê de ji bo bişkoka "dane" hatî destnîşan kirin rawestîne.
  • windows - navnîşek pencereyên ku ji bikarhêner re xuya dibin bişînin.
  • lêkirin - serîlêdanê li ser cîhaza vegirtî saz bikin. Navê pakêta arşîvê di mifteya "fileName" de ye. Arşîv bixwe di pelrêça Dakêşan de ye.
  • cîhane - Binferman tê armanc kirin ku ji pencereya heyî vegere:
    • li ser pêşeka Mîhengên Bilez
    • paşde
    • xane
    • ji bo ragihandinan
    • li pencereya serîlêdanên vê dawiyê vebû

  • destpêkirin - sepanê bidin destpêkirin. Navê serîlêdanê wekî pîvanek bi key tê jimare.
  • dengên - moda deng li bêdengiyê biguherînin.
  • vekirin - ronahiya paşîn a ekran û klavyeyê bi ronahiya tevahî vedike. Serlêdan vê çalakiyê bi karanîna WakeLock pêk tîne, rêzika [Application lable]:INFO wekî nîşanek diyar dike.
  • permissionOverlay — fonksiyon nayê pêkanîn (bersiva pêkanîna fermanê {"peyam":"Piştgir nîne"} an {"peyam":"sdk kêm"} e)
  • bidestûlepnîşandanî — fonksiyon nayê pêkanîn (bersiva pêkanîna fermanê {"peyam":"Piştgir nîne"}an jî {"peyam":"API kêm"} e)
  • destûrên - ev ferman ji bo daxwazkirina destûrên ji bo serîlêdanê hewce ye. Lêbelê, fonksiyona pirsê nayê bicîh kirin, ji ber vê yekê ferman bêwate ye. Navnîşa mafên daxwazkirî wekî rêzek JSON bi mifteya "destûran" tê. Lîsteya standard:
    • android.permission.READ_PHONE_STATE
    • android.permission.READ_CONTACTS
    • android.permission.CALL_PHONE
    • android.permission.RECEIVE_SMS
    • android.permission.SEND_SMS
    • android.permission.READ_SMS
    • android.permission.READ_EXTERNAL_STORAGE
    • android.permission.WRITE_EXTERNAL_STORAGE

  • vekirî - pencereyek phishing nîşan bide. Li gorî pîvana ku ji serverê tê, dibe ku serîlêdan pencereyên phishing ên jêrîn nîşan bide:
    • Pencereyek phishing ku naveroka wê di pelek pelrêkek de hatî nivîsandin nîşan bide <% pelrêça derve%>/hgps/<%param_filename%>. Encama pêwendiya bikarhêner bi pencereyê re dê were şandin <%CnC%>/records.php
    • Pencereyek phishingê nîşan bide ku naveroka wê ji navnîşanê berê hatî barkirin <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Encama pêwendiya bikarhêner bi pencereyê re dê were şandin <%CnC%>/records.php
    • Pencereyek phishingê ya ku wekî Karta Google Play-ê veşartî ye nîşan bide.

  • bihevra - Ferman ji bo ku bi hêmanên pencereyê yên serîlêdanên din re bi karanîna AcessibilityService re têkilî daynin hatî çêkirin. Ji bo danûstendinê di bernameyê de xizmetek taybetî hate kirin. Serlêdana di bin lêpirsînê de dikare bi windows re têkilî daynin:
    • Niha çalak e. Di vê rewşê de, parametre id an nivîsa (nav) tiştê ku hûn hewce ne ku pê re têkilî daynin vedihewîne.
    • Di dema ku ferman tê meşandin de ji bikarhêner re xuya dibe. Serlêdan windows bi id hildibijêre.

    Tiştên wergirtin AccessibilityNodeInfo Ji bo hêmanên pencereyê yên balkêş, serîlêdan, li gorî pîvanan, dikare çalakiyên jêrîn pêk bîne:

    • balkişandin - balê li ser objektê danîn.
    • bitikîne - li tiştekî bikirtînin.
    • actionId - çalakiyek bi ID-ê pêk bînin.
    • setText - teksta tiştekê biguherîne. Guhertina nivîsê bi du awayan pêkan e: çalakiyek pêk bînin ACTION_SET_TEXT (eger guhertoya Android ya cîhaza vegirtî ji piçûktir an wekhev be LOLLIPOP), an jî bi danîna xêzekê li ser klîpboardê û lêxistina wê di hêmanekê de (ji bo guhertoyên kevntir). Ev ferman dikare were bikar anîn da ku daneyên di serîlêdana bankingê de biguhezîne.

2. PARAMS_ACTIONS - eynî wek PARAMS_ACTION, tenê rêzek fermanên JSON tê.

Wusa dixuye ku gelek kes dê bala xwe bidin ka fonksiyona danûstendina bi hêmanên pencereya serîlêdana din re çawa xuya dike. Bi vî rengî ev fonksiyonê di Gustuff de tête bicîh kirin:

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

Fonksiyona veguheztina nivîsê:

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

Bi vî rengî, bi veavakirina rast a servera kontrolê re, Gustuff dikare di serîlêdana bankingê de qadên nivîsê dagire û li ser bişkokên ku ji bo qedandina danûstendinê hewce ne bikirtîne. Trojan ne hewce ye ku têkeve serîlêdanê jî - bes e ku meriv fermanek bişîne da ku agahdariya PUSH nîşan bide û dûv re serîlêdana bankê ya berê hatî saz kirin veke. Bikarhêner dê xwe rast bike, piştî ku Gustuff dê karibe otomobîlê tije bike.

Modula hilberandina peyama SMS

Serlêdan ji bo cîhaza vegirtî rêgezek bûyerê saz dike ku peyamên SMS qebûl bike. Serlêdana di bin lêkolînê de dikare fermanan ji operatorê werbigire, ku di laşê peyama SMS-ê de tê. Ferman di formê de têne:

7!5=<%Base64 fermana kodkirî%>

Serlêdan di hemî peyamên SMS-ê yên hatî de li strê digere 7!5=, dema ku rêzek tê dîtin, ew rêzika ji Base64 di offset 4 de deşîfre dike û fermanê pêk tîne. Ferman mîna yên bi CnC re ne. Encama darvekirinê ji heman hejmara ku ferman jê hatî re tê şandin. Forma bersivê:

7*5=<%Base64 koda "fermana encam_code"%>

Vebijarkî, serîlêdan dikare hemî peyamên wergirtî ji hejmara Root re bişîne. Ji bo vê yekê, divê hejmara Root di pelê tercîhê de were destnîşan kirin û ala beralîkirina peyamê were danîn. Peyamek SMS ji jimareya êrîşkar re di forma:

<%Ji jimare%> - <%Dem, format: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Di heman demê de, vebijarkî, serîlêdan dikare ji CnC re peyaman bişîne. Peyama SMS bi formata JSON ji serverê re tê şandin:

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

Ger ala danîn nameGenerator("DEFAULT_APP_SMS") - Serlêdan pêvajokirina peyama SMS rawestîne û navnîşa peyamên hatinî paqij dike.

Modula proxy

Serlêdana di bin lêkolînê de modulek Backconnect Proxy (li vir wekî modula Proxy tê binav kirin) vedihewîne, ku xwedan çînek veqetandî ye ku zeviyên statîk ên bi veavakirinê vedihewîne. Daneyên vesazkirinê di nimûneyê de bi rengek zelal têne hilanîn:

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne

Hemî kiryarên ku ji hêla modula Proxy ve têne kirin di pelan de têne qeyd kirin. Ji bo kirina vê yekê, serîlêdan di Pargîdaniya Derve de pelrêçekek bi navê "logs" (qada ProxyConfigClass.logsDir di çîna veavakirinê de) diafirîne, ku tê de pelên têketinê têne hilanîn. Têketin di pelên bi navan de pêk tê:

  1. main.txt - karê pola bi navê CommandServer di vê pelê de tê têketî. Di ya li jêr de, têketina rêzika str di vê pelê de dê wekî mainLog(str) were destnîşan kirin.
  2. danişîn-<%id%>.txt - ev pel daneya têketinê ya ku bi danişîna proxy-ê ya taybetî ve girêdayî ye hilîne. Di ya li jêr de, têketina rêzika str li ser vê pelê dê wekî sessionLog (str) were destnîşan kirin.
  3. server.txt - ev pel ji bo qeydkirina hemî daneyên ku li pelên jorîn hatine nivîsandin tê bikar anîn.

Forma daneya têketinê:

<%Date%> [Mijar[<%mijarek id%>], id[]]: log-string

Îstîsnayên ku di dema xebitandina modula Proxy de çêdibin jî li pelek têne tomar kirin. Ji bo vê yekê, serîlêdan di forma jêrîn de tiştek JSON çêdike:

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

Dûv re ew wê vediguherîne nûnertiyek rêzikê û wê tomar dike.

Modula Proxy piştî wergirtina fermana têkildar tê destpêkirin. Dema ku fermanek ji bo destpêkirina modula Proxy tê wergirtin, serîlêdan karûbarek jê re tê gotin dest pê dike MainService, ku berpirsiyariya birêvebirina xebata modula Proxy-ê ye - destpêkirin û rawestandina wê.

Qonaxên destpêkirina xizmetê:

1. Demjimêrek ku hûrdemek carekê dimeşe dest pê dike û çalakiya modula Proxy kontrol dike. Ger modul ne çalak be, wê dest pê dike.
Di heman demê de dema ku bûyer diqewime android.net.conn.CONNECTIVITY_CHANGE Modula Proxy dest pê kir.

2. Serlêdan bi parametreyê şiyarbûnek diafirîne PARTIAL_WAKE_LOCK û wî digire. Ev rê nade ku CPU-ya cîhazê bikeve moda xewê.

3. Dersa pêvajoya fermanê ya modula Proxy-ê dest pê dike, yekem rêzê têketinê mainLog ("pêşkêşkara destpêkê") и

Pêşkêşkar::start() host[<%proxy_cnc%>], commandPort[<%command_port%>], proxyPort[<%proxy_port%>]

ko proxy_cnc, command_port û proxy_port - Parametreyên ku ji veavakirina servera Proxy hatine wergirtin.

Dersa pêvajoya fermanê tê gotin CommandConnection. Di cih de piştî destpêkirinê, çalakiyên jêrîn pêk tîne:

4. Tê girêdan ProxyConfigClass.host: ProxyConfigClass.commandPort û daneyên der barê cîhaza vegirtî de di formata JSON de dişîne:

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

Çu:

  • id - nasnameyek, hewl dide ku bi qada "id" ji pelê Preference Shared bi navê "x" nirxek bistîne. Ger ev nirx neyê bidestxistin, ew yek nû çêdike. Ji ber vê yekê, modula Proxy xwedan nasnameyek xwe ye, ku bi heman rengî bi Nasnameya Bot-ê ve hatî çêkirin.
  • imei - IMEI ya cîhazê. Ger di pêvajoya bidestxistina nirxê de xeletiyek çêbû, dê li şûna vê qadê peyamek xeletiyek were nivîsandin.
  • imsi - Nasnameya Aboneya Mobîl a Navneteweyî ya cîhazê. Ger di pêvajoya bidestxistina nirxê de xeletiyek çêbû, dê li şûna vê qadê peyamek xeletiyek were nivîsandin.
  • model - Navê dawî-bikarhêner-xuya ji bo hilbera dawî.
  • çêker — Çêkerê berhemê/hardware (Build. ÇÊKIRÎ).
  • androidVersion - rêzikek bi qalibê "<%release_version%> (<%os_version%>),<%sdk_version%>"
  • welat - cîhê heyî ya cîhazê.
  • partnerId rêzikek vala ye.
  • packageName - navê pakêtê.
  • NetworkType - celebê girêdana torê ya heyî (mînak: "WIFI", "MOBILE"). Di rewşeke xelet de, null vedigere.
  • hasGsmSupport - rast - heke têlefon GSM piştgirî dike, wekî din xelet e.
  • simReady - rewşa SIM karta.
  • simCountry - Koda welat ISO (li ser bingeha pêşkêşvanê karta SIM).
  • NetworkOperator - navê operator. Ger di pêvajoya bidestxistina nirxê de xeletiyek çêbû, dê li şûna vê qadê peyamek xeletiyek were nivîsandin.
  • simOperator - Navê Pêşkêşkarê Karûbar (SPN). Ger di pêvajoya bidestxistina nirxê de xeletiyek çêbû, dê li şûna vê qadê peyamek xeletiyek were nivîsandin.
  • guherto - ev qad di pola mîhengê de tê hilanîn; ji bo guhertoyên ceribandinê yên botê ew bi "1.6" re wekhev bû.

5. Diguhere moda li benda fermanên serverê. Fermanên ji serverê di vê formê de têne:

  • 0 veqetandin - ferman
  • 1 veqetandin - sessionId
  • 2 offset - dirêj
  • 4 offset - dane

Dema ku fermanek tê, serîlêdan têketin:
mainLog("Header { sessionId<%id%>], type[<%command%>], dirêj[<%length%>] }")

Fermanên jêrîn ji serverê gengaz in:

Nav Ferman Jimare Terîf
connectId 0 Nasnameya girêdanê Têkiliyek nû çêbikin
XEW 3 Dem Modula Proxy rawestînin
TENÎSA MASEYÊ 4 - Peyama PONG bişînin

Peyama PONG ji 4 byte pêk tê û wiha xuya dike: 0x04000000.

Dema ku emrê ConnectId tê wergirtin (ji bo afirandina pêwendiyek nû) CommandConnection mînakek çînek diafirîne ProxyConnection.

  • Du ders beşdarî proxykirinê dibin: ProxyConnection и dawî. Dema afirandina çînek ProxyConnection girêdana navnîşanê ProxyConfigClass.host: ProxyConfigClass.proxyPort û derbaskirina objeya JSON:

 {
    "id":<%connectionId%>
}

Di bersivê de, server peyamek SOCKS5 dişîne ku navnîşana servera dûr a ku divê pêwendiya pê re were saz kirin heye. Têkiliya bi vê serverê re di nav polê de pêk tê dawî. Sazkirina pêwendiyê dikare bi rengek şematîkî wekî jêrîn were destnîşan kirin:

Çawa Trojan Gustuff Android-ê kremê (fiat û krîpto) ji hesabên we vediqetîne

Têkiliyên torê

Ji bo pêşîlêgirtina analîza seyrûseferê ji hêla snifferên torê ve, pêwendiya di navbera servera CnC û serîlêdanê de dikare bi karanîna protokola SSL were parastin. Hemî daneyên hatine veguheztin hem ji serverê hem jî ji serverê re di formata JSON de têne pêşkêş kirin. Serlêdan di dema xebatê de daxwazên jêrîn pêk tîne:

  • http://<%CnC%>/api/v1/set_state.php - Encama pêkanîna fermanê.
  • http://<%CnC%>/api/v1/get.php - fermanek distînin.
  • http://<%CnC%>/api/v1/load_sms.php - daxistina peyamên SMS ji amûrek vegirtî.
  • http://<%CnC%>/api/v1/load_ab.php - barkirina navnîşek têkiliyan ji amûrek vegirtî.
  • http://<%CnC%>/api/v1/aevents.php - Dema ku parametreyên ku di pelê tercîhê de cih digirin nûve bikin, daxwaz tê kirin.
  • http://<%CnC%>/api/v1/set_card.php - barkirina daneyên ku bi karanîna pencereyek phishingê ku wekî Bazara Google Play-ê tê binavkirin hatine bidestxistin.
  • http://<%CnC%>/api/v1/logs.php - barkirina daneyên têketinê.
  • http://<%CnC%>/api/v1/records.php - barkirina daneyên ku bi navgîniya pencereyên phishing ve hatî wergirtin.
  • http://<%CnC%>/api/v1/set_error.php - agahdarkirina xeletiyek ku derketiye.

pêşnîyarên

Ji bo ku xerîdarên xwe ji xetereya Trojansên mobîl biparêzin, pargîdanî divê çareseriyên berfereh bikar bînin ku destûrê dide wan ku bêyî sazkirina nermalava zêde li ser cîhazên bikarhêner çavdêrî bikin û pêşî li çalakiya xirab bigirin.

Ji bo kirina vê, pêdivî ye ku rêbazên îmzeyê ji bo tespîtkirina Trojanên mobîl bi teknolojiyên ji bo analîzkirina tevgera hem xerîdar û hem jî serîlêdanê bi xwe re were xurt kirin. Pêdivî ye ku parastin fonksiyonek nasnameya amûrê bi karanîna teknolojiya tiliya dîjîtal jî vehewîne, ku dê gengaz bike ku meriv fêm bike kengê hesabek ji amûrek netîpîkî tê bikar anîn û berê ketiye destê sextekar.

Xalek bingehîn a girîng hebûna analîza cross-kanal e, ku destûrê dide pargîdaniyan ku xetereyên ku ne tenê li ser Înternetê, lê di heman demê de li ser kanala mobîl jî derdikevin kontrol bikin, mînakî, di serîlêdanên ji bo bankeya mobîl, ji bo danûstendinên bi diravên krîpto û yên din ên ku tê de hene. danûstandin dikarin bêne kirin.

Rêbazên ewlehiyê ji bo bikarhêneran:

  • sepanên ji bo cîhaza desta ya bi OS-ya Android-ê ji çavkaniyên din ji bilî Google Play-ê saz nekin, bala taybetî bidin mafên ku ji hêla serîlêdanê ve têne xwestin;
  • bi rêkûpêk nûvekirinên Android OS-ê saz bikin;
  • bala xwe bidin dirêjkirina pelên dakêşandî;
  • serdana çavkaniyên gumanbar nekin;
  • Li ser lînkên ku di peyamên SMS de hatine wergirtin bikirtînin.

Starring Semyon Rogaçeva, pisporê ciwan di lêkolîna malware de li Laboratoriya Dadwerî ya Kompîturê ya Group-IB.

Source: www.habr.com

Add a comment