Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik

Beste egunean Taldea-IB jakinarazi Android Trojan Gustuff mugikorraren jarduerari buruz. Nazioarteko merkatuetan soilik lan egiten du, atzerriko 100 banku handienen bezeroei, 32 kripto-zorro mugikorretako erabiltzaileei eta merkataritza elektronikoko baliabide handiei erasotzen die. Baina Gustuff-en garatzailea, bestoffer ezizenez, errusieraz hitz egiten duen ziberkriminal bat da. Duela gutxi arte, bere Troiako "ezagutza eta esperientzia duten pertsonentzako produktu serioa" dela goraipatu zuen.

Kode gaiztoen analisiko espezialista Group-IB-n Ivan Pisarev bere ikerketan, zehatz-mehatz hitz egiten du Gustuff-ek nola funtzionatzen duen eta zein arrisku dituen.

Noren bila ari da Gustuff?

Gustuff malware belaunaldi berri batekoa da, funtzio guztiz automatizatuak dituena. Garatzailearen arabera, Troiako AndyBot malwarearen bertsio berri eta hobetua bihurtu da, 2017ko azarotik Android telefonoak erasotzen eta dirua lapurtzen ari den phishing web inprimakien bidez, nazioarteko banku eta ordainketa sistema ezagunen mugikorrentzako aplikazio gisa maskaratuta. Bestoffer-ek jakinarazi zuen Gustuff Bot alokairuaren prezioa hilean 800 $ zela.

Gustuff laginaren analisiak erakutsi du Troiako bezeroei potentzialki bideratzen ari dela banku handienen aplikazio mugikorrak erabiliz, hala nola Bank of America, Bank of Scotland, JPMorgan, Wells Fargo, Capital One, TD Bank, PNC Bank, baita kripto-zorroak ere. Bitcoin Wallet, BitPay, Cryptopay, Coinbase, etab.

Jatorriz banku-troiako klasiko gisa sortua, egungo bertsioan Gustuff-ek erasorako helburu potentzialen zerrenda nabarmen zabaldu du. Bankuentzako, fintech enpresentzako eta kripto-zerbitzuetarako Android aplikazioez gain, Gustuff merkatu-aplikazioen, lineako denden, ordainketa-sistemen eta berehalako mezularien erabiltzaileei zuzenduta dago. Bereziki, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut eta beste batzuk.

Sarrera-puntua: infekzio masiboaren kalkulua

Gustuff-ek Android telefono mugikorretan sartzeko bektore "klasikoa" da, APKetarako estekak dituzten SMS mezuen bidez. Android gailu bat zerbitzariaren aginduz Troiako batekin kutsatzen denean, Gustuff gehiago heda daiteke kutsatutako telefonoaren kontaktuen datu-basearen bidez edo zerbitzariaren datu-basearen bidez. Gustuff-en funtzionalitateak infekzio masiborako eta bere operadoreen negozioaren kapitalizazio maximorako diseinatuta dago - "auto-betetze" funtzio berezia du mugikorretarako banku-aplikazio legitimoetan eta kripto-zorroetan, eta horrek dirua lapurreta bizkortu eta eskalatzeko aukera ematen du.

Troiako azterketa batek erakutsi zuen betetze automatikoaren funtzioa bertan inplementatu zela Irisgarritasun Zerbitzua erabiliz, desgaitasuna duten pertsonentzako zerbitzu bat. Gustuff ez da Android zerbitzu hau erabiltzen duten beste aplikazioetako leiho-elementuen arteko interakzioaren aurkako babesa arrakastaz saihestu duen lehen troiakoa. Hala ere, oraindik ere arraroa da Irisgarritasun Zerbitzua autoen betegarri batekin batera erabiltzea.

Biktimaren telefonora deskargatu ondoren, Gustuffek, Irisgarritasun Zerbitzua erabiliz, beste aplikazio batzuen leiho-elementuekin elkarreragiteko gai da (bankuak, kriptografia-moneta, baita lineako erosketak egiteko aplikazioak, mezularitzak, etab.), erasotzaileentzako beharrezko ekintzak eginez. . Adibidez, zerbitzariaren aginduz, troiako batek botoiak sakatu eta banku-aplikazioetako testu-eremuen balioak alda ditzake. Irisgarritasun Zerbitzuaren mekanismoa erabiltzeari esker, troiarrak aurreko belaunaldiko troiako mugikorrei aurre egiteko bankuek erabiltzen dituzten segurtasun-mekanismoak saihestu ditzake, baita Google-k Android OSaren bertsio berrietan ezarritako segurtasun-politikan aldaketak ere. Horrela, Gustuff-ek "daki nola" desgaitu Google Protect babesa: egilearen arabera, funtzio honek kasuen % 70ean funtzionatzen du.

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik

Gustuff-ek PUSH jakinarazpen faltsuak ere bistara ditzake mugikorretarako aplikazio legitimoen ikonoekin. Erabiltzaileak PUSH jakinarazpenean klik egiten du eta zerbitzaritik deskargatutako phishing-leiho bat ikusten du, non eskatutako banku-txartelaren edo kriptografia-zorroaren datuak sartzen dituen. Gustuff-eko beste eszenatoki batean, PUSH jakinarazpena bistaratu zen horren izenean aplikazioa irekitzen da. Kasu honetan, malwareak, Irisgarritasun Zerbitzuaren bidez zerbitzariaren aginduz, banku-aplikazio bateko formulario-eremuak bete ditzake iruzurrezko transakzio baterako.

Gustuff-en funtzionalitateak zerbitzariari kutsatutako gailu bati buruzko informazioa bidaltzea, SMS mezuak irakurtzeko/bidaltzeko gaitasuna, USSD eskaerak bidaltzea, SOCKS5 Proxy abiarazteko, esteka bat jarraituz, fitxategiak (dokumentuen argazki-eskaneak, pantaila-argazkiak, argazkiak barne) bidaltzea barne hartzen ditu. zerbitzaria, berrezarri gailua fabrikako ezarpenetara.

Malwarearen analisia

Aplikazio gaizto bat instalatu aurretik, Android OSak Gustuff-ek eskatutako eskubideen zerrenda duen leiho bat erakusten dio erabiltzaileari:

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik
Aplikazioa erabiltzailearen baimena jaso ondoren bakarrik instalatuko da. Aplikazioa abiarazi ondoren, Troiakoak leiho bat erakutsiko dio erabiltzaileari:

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik
Horren ondoren, bere ikonoa kenduko du.

Gustuff, egilearen arabera, FTTko paketatzaile batek josia du. Abiarazi ondoren, aplikazioa aldizka CnC zerbitzariarekin harremanetan jartzen da komandoak jasotzeko. Aztertu ditugun hainbat fitxategik IP helbide bat erabiltzen zuten kontrol zerbitzari gisa 88.99.171[.]105 (aurrerantzean bezala adieraziko dugu <%CnC%>).

Abiarazi ondoren, programa zerbitzariari mezuak bidaltzen hasten da http://<%CnC%>/api/v1/get.php.

Erantzuna JSON izango da formatu honetan:

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

Aplikaziora sartzen den bakoitzean, kutsatutako gailuari buruzko informazioa bidaltzen du. Mezuaren formatua behean erakusten da. Azpimarratzekoa da zelaiak osoa, aparteko, apps и baimena – aukerakoa eta CnC-ren agindua eskatuz gero bakarrik bidaliko da.

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

Konfigurazio datuak gordetzea

Gustuff-ek hobespen fitxategi batean gordetzen du informazio garrantzitsua. Fitxategiaren izena, baita bertan dauden parametroen izenak ere, katearen MD5 batura kalkulatzearen emaitza dira. 15413090667214.6.1<%name%>Non <%name%> — hasierako izena-balioa. Izena sortzeko funtzioaren Python-en interpretazioa:

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

Jarraian, honela adieraziko dugu nameGenerator (sarrera).
Beraz, lehen fitxategiaren izena hau da: nameGenerator ("API_SERVER_LIST"), izen hauek dituzten balioak ditu:

Aldagaiaren izena Balio
nameGenerator ("API_SERVER_LIST") CnC helbideen zerrenda bat dauka matrize moduan.
nameGenerator ("API_SERVER_URL") CnC helbidea dauka.
nameGenerator ("SMS_UPLOAD") Bandera lehenespenez ezarrita dago. Bandera ezarrita badago, SMS mezuak bidaltzen ditu CnC-ra.
nameGenerator ("SMS_ROOT_NUMBER") Kutsatutako gailuak jasotako SMS mezuak bidaliko dituen telefono-zenbakia. Lehenetsia nulua da.
nameGenerator ("SMS_ROOT_NUMBER_RESEND") Bandera lehenespenez garbituta dago. Instalatzen bada, kutsatutako gailu batek SMS bat jasotzen duenean, root zenbakira bidaliko da.
nameGenerator ("DEFAULT_APP_SMS") Bandera lehenespenez garbituta dago. Marka hau ezartzen bada, aplikazioak sarrerako SMS mezuak prozesatuko ditu.
nameGenerator ("DEFAULT_ADMIN") Bandera lehenespenez garbituta dago. Bandera ezarrita badago, aplikazioak administratzaile-eskubideak ditu.
nameGenerator ("DEFAULT_ACCESSIBILITY") Bandera lehenespenez garbituta dago. Bandera ezarrita badago, Erabilerraztasun Zerbitzua erabiltzen duen zerbitzu bat martxan dago.
nameGenerator ("APPS_CONFIG") Aplikazio zehatz batekin lotutako Irisgarritasun-gertaera bat abiarazten denean egin behar diren ekintzen zerrenda duen JSON objektu bat.
nameGenerator ("APPS_INSTALLED") Gailuan instalatutako aplikazioen zerrenda gordetzen du.
nameGenerator ("IS_FIST_RUN") Bandera lehen irteeran berrezartzen da.
nameGenerator("UNIQUE_ID") Identifikatzaile bakarra dauka. Botea lehen aldiz abiarazten denean sortu da.

Zerbitzaritik aginduak prozesatzeko modulua

Aplikazioak CnC zerbitzarien helbideak gordetzen ditu kodetutako array moduan 85 lerroak. CnC zerbitzarien zerrenda dagokion komandoa jasotzean alda daiteke, eta kasu horretan helbideak hobespen fitxategi batean gordeko dira.

Eskaerari erantzunez, zerbitzariak komando bat bidaltzen dio aplikazioari. Aipatzekoa da komandoak eta parametroak JSON formatuan aurkezten direla. Aplikazioak komando hauek prozesatu ditzake:

Team Description
aurreraHasi Hasi kutsatutako gailuak jasotako SMS mezuak bidaltzen CnC zerbitzarira.
aurreraStop Utzi kutsatutako gailuak CnC zerbitzariari jasotako SMS mezuak bidaltzea.
ussdRun Exekutatu USSD eskaera. USSD eskaera egin behar diozun zenbakia JSON eremuan dago "zenbakia".
bidaliSms Bidali SMS mezu bat (beharrezkoa bada, mezua zatitan zatituta dago). Parametro gisa, komandoak JSON objektu bat hartzen du, "nora" eremuak dituena - helmuga zenbakia eta "gorputza" - mezuaren gorputza.
bidaliSmsAb Bidali SMS mezuak (beharrezkoa bada, mezua "zatitan" zatitan) kutsatutako gailuko kontaktuen zerrendako guztiei. Mezuak bidaltzeko tartea 10 segundokoa da. Mezuaren gorputza "body" JSON eremuan dago
bidaliSmsMass Bidali SMS mezuak (beharrezkoa bada, mezua "zatitan" zatitan) komando-parametroetan zehaztutako kontaktuetara. Mezuak bidaltzeko tartea 10 segundokoa da. Parametro gisa, komandoak JSON array bat hartzen du ("sms" eremua), zeinaren elementuek "nora" eremuak dituzten - helmuga zenbakia eta "gorputza" - mezuaren gorputza.
aldatu zerbitzaria Komando honek "url" gakoa parametro gisa duen balio bat har dezake - orduan bot-ak nameGenerator ("SERVER_URL") edo "array"-ren balioa aldatuko du - orduan bot-ak array idatziko du nameGenerator ("API_SERVER_LIST"). Horrela, aplikazioak CnC zerbitzarien helbidea aldatzen du.
admin Zenbakia Komandoa erro-zenbaki batekin lan egiteko diseinatuta dago. Komandoak parametro hauek dituen JSON objektu bat onartzen du: "zenbakia" - aldatu nameGenerator ("ROOT_NUMBER") jasotako baliora, "birbidali" - aldatu nameGenerator ("SMS_ROOT_NUMBER_RESEND"), "sendId" - bidali nameGenerator ("ROOT_NUMBER" )ID bakarra.
eguneratzeko informazioa Bidali kutsatutako gailuari buruzko informazioa zerbitzariari.
wipeData Komandoaren helburua erabiltzailearen datuak ezabatzea da. Aplikazioa abiarazi den izenaren arabera, datuak guztiz ezabatzen dira gailua berrabiaraziz (erabiltzaile nagusia), edo erabiltzailearen datuak bakarrik ezabatzen dira (bigarren erabiltzailea).
galtzerdiakHasi Abiarazi Proxy modulua. Moduluaren funtzionamendua aparteko atal batean deskribatzen da.
galtzerdiakGelditu Gelditu Proxy modulua.
openLink Jarraitu esteka. Esteka JSON parametroan dago "url" gakoaren azpian. "android.intent.action.VIEW" esteka irekitzeko erabiltzen da.
uploadAllSms Bidali gailuak jasotako SMS mezu guztiak zerbitzarira.
igoArgazki guztiak Bidali irudiak kutsatutako gailu batetik URL batera. URLa parametro gisa dator.
uploadFile Bidali fitxategi bat infektatutako gailu batetik URL batera. URLa parametro gisa dator.
igoTelefono zenbakiak Bidali zure kontaktuen zerrendako telefono-zenbakiak zerbitzariari. Parametro gisa "ab" gakoa duen JSON objektu-balio bat jasotzen bada, aplikazioak telefono-liburuko kontaktuen zerrenda jasoko du. Parametro gisa "sms" gakoa duen JSON objektu bat jasotzen bada, aplikazioak SMS mezuen igorleen kontaktuen zerrenda irakurtzen du.
aldatuArtxiboa Aplikazioak parametro gisa datorren helbidetik deskargatzen du fitxategia "url" tekla erabiliz. Deskargatutako fitxategia "archive.zip" izenarekin gordetzen da. Aplikazioak fitxategia deskonprimituko du, aukeran "b5jXh37gxgHBrZhQ4j3D" artxiboko pasahitza erabiliz. Deskonprimitutako fitxategiak [external storage]/hgps direktorioan gordetzen dira. Direktorio honetan, aplikazioak web faltsuak gordetzen ditu (behean deskribatuta).
ekintza Komandoa Action Service-rekin lan egiteko diseinatuta dago, eta hori aparteko atal batean deskribatzen da.
test Ezer ez egitea.
deskargatu Komandoaren helburua da fitxategi bat deskargatu urruneko zerbitzari batetik eta "Deskargak" direktorioan gordetzeko. URLa eta fitxategiaren izena parametro gisa datoz, JSON parametro-objektuko eremuak, hurrenez hurren: "url" eta "fileName".
kendu Fitxategi bat kentzen du "Deskargak" direktoriotik. Fitxategiaren izena JSON parametro batean dator "fileName" gakoarekin. Fitxategi-izen estandarra "tmp.apk" da.
jakinarazpen Erakutsi jakinarazpen bat kudeaketa zerbitzariak definitutako deskribapen eta izenburuko testuekin.

Komando formatua jakinarazpen:

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

Ikertzen ari den fitxategiak sortutako jakinarazpenak eremuan zehaztutako aplikazioak sortutako jakinarazpenen itxura berdina du aplikazioa. Eremuaren balioa bada openApp — Egia da, jakinarazpen bat irekitzen denean, eremuan zehaztutako aplikazioa abiarazten da aplikazioa. Eremuaren balioa bada openApp —Gezurra, bada:

  • Phishing leiho bat irekitzen da, eta horren edukia direktoriotik deskargatzen da <%external storage%>/hgps/<%filename%>
  • Phishing leiho bat irekitzen da, zeinaren edukia zerbitzaritik deskargatzen da <%url%>?id=<%Bot id%>&app=<%Aplikazioaren izena%>
  • Phishing-eko leiho bat irekitzen da, Google Play txartelaz mozorrotuta, txartelaren xehetasunak sartzeko aukerarekin.

Aplikazioak edozein komandoren emaitza bidaltzen du <%CnC%>set_state.php JSON objektu gisa formatu honetan:

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

EkintzakZerbitzua
Aplikazioak prozesatzen dituen komandoen zerrenda ekintza. Komando bat jasotzen denean, komandoak prozesatzeko modulua zerbitzu honetara sartzen da komando hedatua exekutatzeko. Zerbitzuak JSON objektu bat onartzen du parametro gisa. Zerbitzuak komando hauek exekutatu ditzake:

1. PARAMS_AKTION — Komando hori jasotzean, zerbitzuak lehenik JSON parametrotik jasotzen du Mota gakoaren balioa, hau izan daitekeena:

  • zerbitzuaren informazioa – azpikomandoak JSON parametrotik gakoaren araberako balioa lortzen du barne EzGarrantzitsua. Marka True bada, aplikazioak ezarriko du bandera FLAG_ISOLATED_PROCESS Erabilerraztasun Zerbitzua erabiliz zerbitzu batera. Modu honetan zerbitzua prozesu bereizi batean jarriko da martxan.
  • root — jaso eta bidali zerbitzariari une honetan fokuan dagoen leihoari buruzko informazioa. Aplikazioak informazioa eskuratzen du AccessibilityNodeInfo klasea erabiliz.
  • admin — Administratzaile eskubideak eskatu.
  • Atzerapenik — suspenditu ActionsService "datuak" gakoaren parametroan zehaztutako milisegundo kopururako.
  • leihoak — bidali erabiltzaileak ikusgai dauden leihoen zerrenda.
  • instalatzeko — instalatu aplikazioa kutsatutako gailuan. Artxibo paketearen izena "fitxategiaren izena" gakoan dago. Artxiboa bera Deskargak direktorioan dago.
  • global – azpikomandoa uneko leihotik nabigatzeko da:
    • Ezarpen azkarrak menuan
    • duela
    • etxera
    • jakinarazpenetara
    • ireki berri den aplikazioen leihora

  • abiarazteko - abiarazi aplikazioa. Aplikazioaren izena gakoz parametro gisa dator datuak.
  • soinuak — aldatu soinu modua isilunera.
  • desblokeatzeko — pantailaren eta teklatuaren atzeko argia pizten du distira osora. Aplikazioak ekintza hau WakeLock erabiliz egiten du, [Aplikazioaren etiketa]:INFO katea etiketa gisa zehaztuz
  • baimenaOverlay — funtzioa ez dago inplementatu (komandoaren exekuzioaren erantzuna {"message":"Ez da onartzen"} edo {"message":"low sdk"} da)
  • keinu — funtzioa ez dago inplementatu (komandoaren exekuzioaren erantzuna {"message":"Ez da onartzen"} edo {"message":"API baxua"} da)
  • baimenak — Komando hau beharrezkoa da aplikaziorako baimenak eskatzeko. Hala ere, kontsulta-funtzioa ez dago inplementatu, beraz komandoak zentzurik ez du. Eskatutako eskubideen zerrenda JSON array gisa dator "baimenak" gakoarekin. Zerrenda estandarra:
    • 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

  • ireki — bistaratu phishing leiho bat. Zerbitzaritik datorren parametroaren arabera, aplikazioak phishing-leiho hauek bistara ditzake:
    • Erakutsi phishing-leiho bat zeinaren edukia direktorio bateko fitxategi batean idatzita dagoen <%external directory%>/hgps/<%param_filename%>. Erabiltzaileak leihoarekin izandako interakzioaren emaitza helbidera bidaliko da <%CnC%>/records.php
    • Erakutsi phishing-leiho bat zeinen edukia helbidetik aurrez kargatuta dagoen <%url_param%>?id=<%bot_id%>&app=<%packagename%>. Erabiltzaileak leihoarekin izandako interakzioaren emaitza helbidera bidaliko da <%CnC%>/records.php
    • Erakutsi phishing-leiho bat Google Play txartelaz mozorrotuta.

  • interaktiboa — Komandoa AcessibilityService erabiliz beste aplikazioetako leiho-elementuekin elkarreragiteko diseinatuta dago. Programan elkarrekintzarako zerbitzu berezi bat ezarri da. Ikertzen ari den aplikazioak leihoekin elkarreragin dezake:
    • Momentuz aktibo. Kasu honetan, parametroak elkarreragin behar duzun objektuaren id edo testua (izena) dauka.
    • Komandoa exekutatzen den unean erabiltzailearentzat ikusgai. Aplikazioak leihoak idaren arabera hautatzen ditu.

    Objektuak jaso izana Irisgarritasuna NodeInfo Interesgarriak diren leiho-elementuetarako, aplikazioak, parametroen arabera, ekintza hauek egin ditzake:

    • fokua — ezarri fokua objektuari.
    • klik — egin klik objektu batean.
    • actionId — egin ekintza bat IDaren arabera.
    • setText — aldatu objektu baten testua. Testua aldatzea bi modutara posible da: ekintza bat egin ACTION_SET_TEXT (Kutsatutako gailuaren Android bertsioa baino gazteagoa edo berdina bada piruleta), edo arbelean kate bat jarriz eta objektu batean itsatsiz (bertsio zaharragoetarako). Komando hau banku-aplikazio bateko datuak aldatzeko erabil daiteke.

2. PARAMS_ACTIONS - berdina PARAMS_AKTION, JSON komandoen array bat bakarrik iristen da.

Badirudi jende asko interesatuko dela beste aplikazio bateko leiho-elementuekin elkarreraginaren funtzioa nolakoa den. Honela inplementatzen da funtzionalitate hau Gustuff-en:

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

Testua ordezkatzeko funtzioa:

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

Horrela, kontrol-zerbitzariaren konfigurazio zuzenarekin, Gustuff-ek banku-aplikazioan testu-eremuak bete eta transakzioa burutzeko beharrezkoak diren botoietan klik egin dezake. Troiakoak ez du aplikazioan saioa hasi beharrik ere; nahikoa da komando bat bidaltzea PUSH jakinarazpena bistaratzeko eta, ondoren, aurretik instalatutako banku-aplikazioa irekitzea. Erabiltzaileak bere burua autentifikatuko du, eta ondoren Gustuff-ek autoa bete ahal izango du.

SMS mezuak prozesatzeko modulua

Aplikazioak gertaeren kudeatzaile bat instalatzen du kutsatutako gailuarentzat SMS mezuak onar ditzan. Aztergai dugun aplikazioak operadorearen aginduak jaso ditzake, SMS mezuaren gorputzean sartzen direnak. Komandoak formatuan daude:

7!5=<%Base64 kodetutako komandoa%>

Aplikazioak katea bilatzen du sarrerako SMS mezu guztietan 7!5=, kate bat detektatzen denean, Base64-tik katea deskodetzen du 4. desplazamenduan eta komandoa exekutatzen du. Aginduak CnC dutenen antzekoak dira. Exekuzioaren emaitza komandoa atera zen zenbaki berera bidaltzen da. Erantzun formatua:

7*5=<%Base64 kodeketa “result_code command”%>

Aukeran, aplikazioak jasotako mezu guztiak Root zenbakira bidal ditzake. Horretarako, Root zenbakia zehaztu behar da hobespen fitxategian eta mezuak birbideratzeko bandera ezarri behar da. Erasotzailearen zenbakira SMS mezu bat bidaltzen da formatuan:

<%From number%> - <%Time, format: dd/MM/yyyy HH:mm:ss%> <%SMS body%>

Gainera, aukeran, aplikazioak mezuak bidal ditzake CnCra. SMS mezua zerbitzarira bidaltzen da JSON formatuan:

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

Bandera ezarrita badago nameGenerator ("DEFAULT_APP_SMS") – aplikazioak SMS mezua prozesatzeari uzten dio eta sarrerako mezuen zerrenda garbitzen du.

Proxy modulua

Aztergai dugun aplikazioak Backconnect Proxy modulu bat dauka (aurrerantzean Proxy modulua deitzen zaio), zeina konfigurazioarekin eremu estatikoak barne hartzen dituen klase bereizia duena. Konfigurazio datuak laginean gordetzen dira forma argian:

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik

Proxy moduluak egiten dituen ekintza guztiak fitxategietan erregistratzen dira. Horretarako, External Storage-ko aplikazioak "erregistroak" izeneko direktorio bat sortzen du (konfigurazio klaseko ProxyConfigClass.logsDir eremua), eta bertan erregistro-fitxategiak gordetzen dira. Erregistroa izenak dituzten fitxategietan gertatzen da:

  1. main.txt – CommandServer izeneko klasearen lana fitxategi honetan erregistratzen da. Jarraian, str katea fitxategi honetan erregistratzea mainLog(str) gisa adieraziko da.
  2. saioa-<%id%>.txt — Fitxategi honek proxy saio jakin bati lotutako erregistro-datuak gordetzen ditu. Jarraian, str katea fitxategi honetan erregistratzea sessionLog (str) gisa adieraziko da.
  3. zerbitzaria.txt – Fitxategi hau goian deskribatutako fitxategietan idatzitako datu guztiak erregistratzeko erabiltzen da.

Erregistroko datuen formatua:

<%Date%> [Thread[<%thread id%>], id[]]: log-kate

Proxy moduluaren funtzionamenduan gertatzen diren salbuespenak ere fitxategi batean erregistratzen dira. Horretarako, aplikazioak JSON objektu bat sortzen du formatu honetan:

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

Ondoren, kateen irudikapen bihurtzen du eta erregistratzen du.

Proxy modulua dagokion komandoa jaso ondoren abiarazten da. Proxy modulua abiarazteko komando bat jasotzen denean, aplikazioak izeneko zerbitzu bat abiarazten du Zerbitzu Nagusia, Proxy moduluaren funtzionamendua kudeatzeaz arduratzen dena - abiarazi eta gelditu.

Zerbitzua hasteko faseak:

1. Minutuan behin exekutatzen den tenporizadore bat abiarazten du eta Proxy moduluaren jarduera egiaztatzen du. Modulua aktibo ez badago, abiarazten du.
Gertaera abiarazten denean ere android.net.conn.CONNECTIVITY_CHANGE Proxy modulua abiarazten da.

2. Aplikazioak wake-lock bat sortzen du parametroarekin PARTIAL_WAKE_LOCK eta harrapatzen du. Honek gailuaren CPUa lo moduan sartzea eragozten du.

3. Proxy moduluaren komandoak prozesatzeko klasea abiarazten du, lehenik lerroa erregistratuz mainLog("hasi zerbitzaria") и

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

non proxy_cnc, komando_port eta proxy_port – Proxy zerbitzariaren konfiguraziotik lortutako parametroak.

Komandoak prozesatzeko klaseari deitzen zaio CommandConnection. Abiarazi eta berehala, ekintza hauek egiten ditu:

4. Honekin konektatzen da ProxyConfigClass.host: ProxyConfigClass.commandPort eta kutsatutako gailuari buruzko datuak bidaltzen ditu bertan JSON formatuan:

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

Non:

  • id - identifikatzailea, "x" izeneko Hobespen Partekatuaren fitxategitik "id" eremua duen balio bat lortzen saiatzen da. Balio hori ezin bada lortu, berri bat sortzen du. Horrela, Proxy moduluak bere identifikatzailea du, Bot IDaren antzera sortzen dena.
  • imei — Gailuaren IMEI. Balioa lortzeko prozesuan erroreren bat gertatu bada, eremu honen ordez errore-mezu bat idatziko da.
  • imsi — Gailuaren Nazioarteko Mugikorreko Harpidedun Identitatea. Balioa lortzeko prozesuan erroreren bat gertatu bada, eremu honen ordez errore-mezu bat idatziko da.
  • modeloa — Azken erabiltzaileak ikusgai dagoen azken produktuaren izena.
  • fabrikatzailea — Produktu/hardwarearen fabrikatzailea (Eraiki.FABRICANTE).
  • androidVersion - "<%release_version%> (<%os_version%>),<%sdk_version%>" formatuko kate bat
  • herrialdea — gailuaren uneko kokapena.
  • partnerId kate huts bat da.
  • packageName - paketearen izena.
  • networkType — uneko sare-konexio mota (adibidez: “WIFI”, “MUGIKORRA”). Errore kasuan, nulua ematen du.
  • hasGsmSupport - egia - telefonoak GSM onartzen badu, bestela faltsua.
  • simReady – SIM txartelaren egoera.
  • simCountry - ISO herrialde-kodea (SIM txartelaren hornitzailean oinarrituta).
  • networkOperator — operadorearen izena. Balioa lortzeko prozesuan erroreren bat gertatu bada, eremu honen ordez errore-mezu bat idatziko da.
  • simOperator — Zerbitzu hornitzailearen izena (SPN). Balioa lortzeko prozesuan erroreren bat gertatu bada, eremu honen ordez errore-mezu bat idatziko da.
  • bertsioa - eremu hau konfigurazio klasean gordetzen da; probatutako bot-en bertsioetarako "1.6" berdina zen.

5. Zerbitzariaren aginduen zain egoteko modura aldatzen da. Zerbitzariaren komandoak formatuan daude:

  • 0 offset - komandoa
  • 1 offset - sessionId
  • 2 offset - luzera
  • 4 offset - datuak

Komando bat iristen denean, aplikazioak erregistratzen du:
mainLog("Goiburua { sessionId<%id%>], mota[<%command%>], luzera[<%length%>] }")

Zerbitzariaren komando hauek posible dira:

izena Komandoa Data Deskribapena
konexioId 0 Konexioaren IDa Sortu konexio berri bat
SLEEP 3 Ordua Pausatu Proxy modulua
PING PONG 4 - Bidali PONG mezua

PONG mezu batek 4 byte ditu eta itxura hau du: 0x04000000.

connectionId komandoa jasotzen denean (konexio berri bat sortzeko) CommandConnection klase baten instantzia bat sortzen du ProxyConnection.

  • Bi klasek hartzen dute parte proxyan: ProxyConnection и amaiera. Klase bat sortzean ProxyConnection helbidera konektatuz ProxyConfigClass.host: ProxyConfigClass.proxyPort eta JSON objektua pasatuz:

 {
    "id":<%connectionId%>
}

Horren harira, zerbitzariak SOCKS5 mezu bat bidaltzen du, zeinarekin konexioa ezarri behar den urruneko zerbitzariaren helbidea duen. Zerbitzari honekin elkarrekintza klasearen bidez gertatzen da amaiera. Konexioaren konfigurazioa eskematikoki honela irudikatu daiteke:

Android Troiako Gustuff-ek nola kentzen duen krema (fiat eta crypto) zure kontuetatik

Sareko elkarrekintzak

Sare sniffer-ek trafikoaren azterketa saihesteko, CnC zerbitzariaren eta aplikazioaren arteko elkarrekintza babestu daiteke SSL protokoloa erabiliz. Zerbitzaritik zein zerbitzariari transmititutako datu guztiak JSON formatuan aurkezten dira. Aplikazioak honako eskaera hauek exekutatzen ditu funtzionamenduan zehar:

  • http://<%CnC%>/api/v1/set_state.php — Aginduaren exekuzioaren emaitza.
  • http://<%CnC%>/api/v1/get.php — Agindu bat jasotzea.
  • http://<%CnC%>/api/v1/load_sms.php — kutsatutako gailu batetik SMS mezuak deskargatzea.
  • http://<%CnC%>/api/v1/load_ab.php — kutsatutako gailu batetik kontaktuen zerrenda kargatzea.
  • http://<%CnC%>/api/v1/aevents.php – eskaera hobespen fitxategian kokatutako parametroak eguneratzean egiten da.
  • http://<%CnC%>/api/v1/set_card.php — Google Play Market bezala maskaratzen den phishing leiho bat erabiliz lortutako datuak kargatzea.
  • http://<%CnC%>/api/v1/logs.php - erregistro-datuak kargatzea.
  • http://<%CnC%>/api/v1/records.php – phishing leihoen bidez lortutako datuak igotzea.
  • http://<%CnC%>/api/v1/set_error.php – gertatu den akats baten berri ematea.

Gomendioak

Beren bezeroak Troiako mugikorren mehatxutik babesteko, enpresek soluzio integralak erabili behar dituzte, jarduera gaiztoak kontrolatu eta saihesteko aukera ematen dieten erabiltzailearen gailuetan software gehigarririk instalatu gabe.

Horretarako, troiako mugikorrak detektatzeko sinadura-metodoak indartu behar dira bezeroaren zein aplikazioaren beraren portaera aztertzeko teknologiekin. Babesak hatz-marka digitalaren teknologia erabiliz gailuak identifikatzeko funtzio bat ere barne hartu behar du, kontu bat gailu atipiko batetik erabiltzen ari den eta dagoeneko iruzurgile baten eskuetan erori den ulertzea ahalbidetuko duena.

Funtsezko puntu garrantzitsu bat kanalen arteko analisiaren erabilgarritasuna da, eta horrek enpresei Interneten ez ezik, kanal mugikorrean ere sortzen diren arriskuak kontrolatzeko aukera ematen die, adibidez, banku mugikorretarako aplikazioetan, kripto-monetaekin transakzioetarako eta beste edozeinetan. transakzioak egin daitezke.finantza transakzio.

Erabiltzaileentzako segurtasun arauak:

  • ez instalatu Android OSa duen gailu mugikor baterako aplikaziorik Google Play ez den iturrietatik, arreta berezia jarri aplikazioak eskatzen dituen eskubideei;
  • aldian-aldian instalatu Android OS eguneraketak;
  • arreta jarri deskargatutako fitxategien luzapenei;
  • ez bisitatu baliabide susmagarriak;
  • Ez egin klik SMS mezuetan jasotako esteketan.

Protagonista Semyon Rogacheva, malware ikerketan espezialista junior Talde-IB Informatikako Auzitegiko Laborategian.

Iturria: www.habr.com

Gehitu iruzkin berria