Avainkohdat
Pikabot on vuoden 2023 alussa ilmestynyt uusi haittaohjelmatroijalainen, joka koostuu kahdesta osasta: latausohjelmasta ja ydinmoduulista.
Ydinmoduuli toteuttaa haitallisen toiminnallisuuden, joka sisältää mahdollisuuden suorittaa mielivaltaisia komentoja ja lisätä hyötykuormia, jotka komento- ja ohjauspalvelin tarjoaa.
Pikabot käyttää koodiinjektoria ydinmoduulin salauksen purkamiseen ja syöttämiseen.
Ydinmoduuli ja sen injektori käyttävät useita anti-analyysitekniikoita. Lisäksi he käyttävät julkista työkalua ADVobfuscator merkkijonojen hämärtämiseen.
Pikabotilla on yhtäläisyyksiä Qakbot-troijalaisen kanssa, mukaan lukien jakelutavat, kampanjat ja haittaohjelmien käyttäytyminen.
Pikabot on haitallinen takaovi, joka on ollut aktiivinen vuoden 2023 alusta lähtien. Haittaohjelma on modulaarinen, ja siinä on latausohjelma ja ydinkomponentti, joka toteuttaa suurimman osan toiminnoista. Pikabot pystyy vastaanottamaan komentoja komento- ja ohjauspalvelimelta, kuten mielivaltaisen shell-koodin, DLL-tiedostojen tai suoritettavien tiedostojen lisäämisen. Zscaler Threatlabz on havainnut, että Pikabotia käytetään Cobalt Striken levittämiseen.
Pikabot-haittaohjelmien kirjoittaja on lisännyt useita anti-analyysitekniikoita estämään automaattisen analyysin hiekkalaatikko- ja tutkimusympäristöissä. Koodi tarkistaa virheenkorjainten, keskeytyskohtien ja järjestelmätietojen, mukaan lukien muistin ja prosessorien määrän, olemassaolon. Pikabot käyttää myös ADVobfuscator-kirjastoa haittaohjelmien käyttämien tärkeiden merkkijonojen salaamiseen.
Threatlabz on havainnut joitain yhtäläisyyksiä Pikabotin ja Qakbotin välillä, mukaan lukien jakelumenetelmä, käyttäytyminen ja sisäiset kampanjatunnisteet. Tällä hetkellä ei kuitenkaan ole riittävästi todisteita näiden haittaohjelmaperheiden lopulliseksi yhdistämiseksi samaan uhkatekijään.
Tekninen analyysi
Seuraavissa osioissa keskitymme Pikabotin ydinmoduuliin ja sen injektoriin, koska latausohjelma ei sisällä mainitsemisen arvoisia toimintoja/ominaisuuksia.
Ydinmoduulin injektori
Pikabot käyttää injektoria suorittaakseen sarjan anti-analyysitestejä ja sitten purkaa salauksen ja syöttääkseen ydinmoduulin hyötykuorman. Jos jokin näistä testeistä epäonnistuu, Pikabot keskeyttää suorituksen. ThreatLabz on tunnistanut seuraavat ruiskun toteuttamat anti-analyysimenetelmät:
Poikkeuskäsittelijät käyttämällä int 2d ja int 3 ohjeita nostaaksesi ne.
Prosessiympäristölohkon (PEB) BeingDebugged-lipun lukeminen.
Windows API -toiminnon käyttö Piippaus viivästyttää suorittamista.
Yritä ladata roskapostia ja vääriä kirjastoja hiekkalaatikoiden havaitsemiseksi. Tämä koodi näyttää olevan kopioitu osoitteesta https://github.com/CheckPointSW/Evasions/blob/master/_techniques/processes.md.
Windows API -toimintojen CheckRemoteDebuggerPresent ja IsDebuggerPresent käyttö virheenkorjauksen havaitsemiseen.
PEB:n NtGlobalFlag-arvo, joka osoittaa, että virheenkorjaus on olemassa.
Windows API -toiminnon NtQueryInformationProcess käyttö luokkien ProcessDebugPort ja ProcessDebugFlags kanssa.
GetWriteWatch API:n käyttö. Toteutus näyttää olevan kopioitu täältä: https://github.com/BaumFX/cpp-anti-debug/blob/master/anti_debug.cpp#L260
OutputDebugString-funktion käyttö virheenkorjaajan havaitsemiseen. Toteutus on kopioitu täältä: https://github.com/BaumFX/cpp-anti-debug/blob/master/anti_debug.cpp#L456
Tarkista prosessorien lukumäärä, jonka tulee olla suurempi tai yhtä suuri kuin 2.
Käytä rdtsc-ohjetta yhden askeleen tarkistamiseen virheenkorjauksen aikana.
Järjestelmän käyttömuistin (RAM) on oltava suurempi kuin 2 Gt.
Laitteiston keskeytyskohtien havaitseminen.
Havaitseminen tarkistamalla trap-lippu __readeflagsin kautta.
ANALYYTIKO HUOMAUTUS: On huomattava, että poikkeusten käyttöä käytetään monissa osissa koodia, esimerkiksi ydinhyötykuorman salauksen purkamisen aikana.
Injektori purkaa ydinmoduulin salauksen seuraavasti:
Lataa joukon PNG-kuvia, jotka on tallennettu resurssiosaan (RCDATA), ja purkaa niiden salauksen käyttämällä bittikohtaista XOR-toimintoa kovakoodatulla 32-tavuisella avaimella. Huomaa, että jokainen PNG-kuva sisältää salatun osan ydinmoduulista.
Pura XOR-salauksen purettujen tietojen salaus käyttämällä AES:tä (CBC-tila) samalla 32-tavuisella avaimella ja käytä ensimmäiset 16 tavua salatusta tiedosta alustusvektorina (IV).
Kun ydinhyötykuorman salaus on purettu, Pikabot-injektori luo prosessin tietyllä tiedostopolulla (esim. WerFault) ja ruiskuttaa ydinmoduulin siihen. Lopuksi Pikabot-injektori asettaa PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON-lipun suojatakseen injektoitua prosessia allekirjoittamattomilta Microsoftin binäärimuodoilta.
Ydinmoduuli
Seuraavissa osioissa ydinmoduulia analysoidaan toukokuussa 2023 kerätyillä näytteillä.
Anti-analyysi
Kuten injektorissa, Pikabot-ydinmoduuli suorittaa ylimääräisiä anti-analyysitarkastuksia. Yksi huomionarvoinen tekniikka on "sleep"-toiminto, jota Pikabot käyttää viivästyttääkseen suoritusta. Tavallisten Windows API -toimintojen sijaan Pikabot käyttää NtContinue API -toimintoa ajastimen asettamiseen. Tekniikka ei ole uusi ja se on samanlainen kuin muut konseptitoteutukset.
Yllä olevien testien lisäksi Pikabot pysäyttää suorituksen, jos järjestelmän kieli on jokin seuraavista:
georgia (Georgia)
kazakstan (Kazakstan)
uzbekki (kyrillinen)
tadžiki (Tadžikistan)
venäjä (Venäjä)
ukraina (Ukraina)
valkovenäläinen (Valko-Venäjä)
slovenia (Slovenia)
Tämä tarkistus on yleinen monille uhkatoimijoille, jotka ovat lähtöisin itsenäisten valtioiden liittovaltion (IVS) maista, vähentääkseen rikosoikeudellisten syytteiden mahdollisuuksia.
Sitkeys
Pikabot käyttää kahta tapaa lisätä isännän pysyvyyttä:
Suorituksen yhteydessä Pikabot hakee nykyisen suorituskansionsa ja tarkistaa, sijaitseeko se AppData-kansiossa kovakoodatun kansion nimen alla (voi vaihdella näytteestä toiseen).
Jos Pikabotia ei ajeta tästä tietystä tiedostopolusta, se lisää pysyvyyttä vaarantuneessa isännässä luomalla uuden arvon sen tiedostopolulle Run-rekisteriavaimessa (avaimen nimi on kovakoodattu binaariin). Tämän lisäksi Pikabot korruptoi nykyisen suoritettavan tiedoston korvaamalla sen PE-otsikolla (pituus 512 tavua), jota seuraa nollatavuja (pituus 3 584 tavua).
Pikabot lataa PowerShell-komentosarjan komento- ja ohjauspalvelimelta ja tallentaa sen kansioon HKEY_CURRENT_USER\Software\predefined_name, missä ennalta määritetty_nimi on kovakoodattu merkkijono binaaritiedostossa. Lisäksi se tallentaa salatut komento- ja ohjauspalvelimet samaan rekisteripolkuun.
Lopuksi Pikabot asettaa arvon Run-rekisteriavaimeen suorittaakseen komentorivin, joka kutsuu tämän PowerShell-komentosarjan (esim. cmd /q /c start /min " powershell "$cimeter = Get-ItemProperty -Path HKCU:\Software\cimeter; powershell -koodattu komento $cimeter.unbevelledHamuli")
ANALYYTIKO HUOMAUTUS: Pikabotilla on myös mahdollisuus suorittaa ladattu tiedosto suoraan tämän pysyvyysmekanismin käyttämisen sijaan (vaikka tämä ei ole tällä hetkellä käytössä).
Komento- ja ohjauskokoonpano
Pikabot ei tallenna komento- ja ohjaustietoja yhteen lohkoon (esimerkiksi kuten Qakbot tekee). Sen sijaan jokainen komponentti (esim. URI:t) salataan ADVobfuscatorilla, ja komento- ja ohjauspalvelimen IP-osoitteet ja portit puretaan edelleen ajon aikana seuraavan algoritmin avulla. Ensinnäkin Pikabot purkaa merkkijonon, joka sisältää joukon Base64-koodattuja merkkijonoja. Sitten se jäsentää merkkijonon erottimella & ja purkaa sisällön salauksen seuraamalla alla olevia ohjeita:
Lue merkkijonon ensimmäiset 32 tavua ja käytä niitä AES-avaimena.
Dekoodaa loput merkkijonosta Base64:llä.
Lue dekoodatun merkkijonon ensimmäiset 16 tavua ja käytä niitä IV:nä.
Lue loput dekoodatusta tiedosta ja pura sen salaus käyttämällä AES-tilaa (CBC-tila).
Purettu tulos on Base64-merkkijono, joka johtaa komento- ja ohjauspalvelimen IP-osoitteeseen ja vastaavaan porttiin. Huomaa, että monet Pikabotin komento- ja ohjauspalvelimet kuuntelevat portteja, jotka ovat identtisiä Qakbotin välityspalvelinmoduulin käyttämien porttien kanssa, kuten 1194, 2078 ja 2222.
Muutaman viime kuukauden aikana Pikabotin komento- ja ohjauspalvelimien tallennustavassa on tapahtunut pieniä muutoksia. Esimerkiksi aiemmissa versioissa komento- ja ohjauspalvelimet koodattiin vain Base64:llä, eikä salausta tai jäsentämistä tarvittu enempää.
Pikabot näyttää myös sisältävän kampanjatunnuksen ja binaariversion jokaisessa näytteessä. Näitä voidaan havaita verkkoviestinnän aikana, jossa JSON-datalla on avaimet "versio" ja "stream". Jälkimmäinen näyttää olevan kampanjatunnus. Alla on esimerkkipyyntö (ennen salausta), joka sisältää nämä arvot:
{"uuid": "F37670100000074E33652510483", "stream": "[sähköpostisuojattu]@2e88e610b66b4205853b211f21873208", "os_version": "Win 10.0 19050", "product_number": 161, "username": "test", "pc_name": "DESKTOP-TEST", "Cpu_th Gene": "R1 Core" (TM)", "pc_uptime": 29884462, "gpu_name": "GPU_NAME", "RAM_amount": 8096, "screen_resolution": "1560×1440", "versio": "0.5.3", "domain_name": " ", "domain_controller_name": "unknown", "domain_controller_address": "unknown", "knock_timeout": 254, "is_elevated": 0}
Threatlabzin havaitsemat kampanjatunnusarvot ovat erityisen mielenkiintoisia etuliitteiden BB1 ja eu_bb_0 vuoksi. Nämä muistuttavat joitain kampanjatunnuksia, joita on havaittu Qakbotin binäärissä, jotka sisältävät usein etuliite BB ja kokonaisluku.
Verkkoviestintä
Pikabot aloittaa rekisteröimällä vaarantuneen isännän komento- ja ohjauspalvelimiin. Rekisteröintiprosessi sisältää järjestelmätietojen keräämisen ja raportoinnin komento- ja ohjauspalvelimelle HTTPS POST -pyynnöllä. Kerätään erilaisia tietoja, kuten seuraavat:
Verkkotiedot suorittamalla komennon ipconfig.exe /all
Käyttäjä/ryhmittelee tiedot suorittamalla whoami.exe /all
Windowsin koontitiedot.
Yleiset isäntätiedot (esim. käytettävissä oleva RAM, näytön tarkkuus)
Verkkotunnuksen ohjaimien tiedot.
Muiden bottiverkkojen tapaan Pikabot luo yksilöllisen bottitunnisteen vaarantuneelle isännälle. Algoritmi, jota Pikabot käyttää bottitunnisteen luomiseen, voidaan replikoida Pythonissa käyttämällä tässä olevaa koodia.
Kun rekisteröinti on suoritettu ja pysyvyys vaarantuneelle isännälle on luotu, Pikabot alkaa pyytää tehtäviä palvelimelta. Pikabot tukee seuraavia komentotyyppejä:
tehtävä – suoritettava komento
koputtaa – elossa pitämisen viesti
Tehtävät, joita Pikabot tällä hetkellä tukee, on kuvattu taulukossa 1.
Tehtävän nimi
Kuvaus
cmd
Suorittaa komentotulkkikomennon cmd.exe:n kautta.
tuhota
Poistuu nykyisestä prosessista.
shellcode
Lisää ja suorittaa ladatun shell-koodin.
dll
Lisää ladatun DLL-tiedoston.
exe
Lisää ladatun EXE-tiedoston.
lisää
Kerää lisää isäntätietoja suorittamalla yhden taulukon 2 komennoista.
knock_timeout
Päivittää ajastimen arvon, joka osoittaa, kuinka usein Pikabotin tulee lähettää koputuspyyntö.
Taulukko 1 – Pikabot-tehtävien kuvaus
Pikabot tukee myös taulukossa 2 esitettyjä "lisäkomentoja", jotka keskittyvät keräämään lisää järjestelmätietoja.
Komento
Kuvaus
kuvakaappaus
Ei toteutettu.
kuka olen
Suorittaa komentotulkkikomennon whoami /all.
ipconfig
Suorittaa komentotulkkikomennon ipconfig /all.
prosessit
Kerää prosessitietoja.
Taulukko 2 – Pikabotin lisäkomentojen kuvaus
On syytä huomata, että verkkopyynnöstä riippuen Pikabot käyttää eri URI:ta (joka voi vaihdella näytteiden välillä). Esimerkiksi komentotulosteen raportoinnissa URI voi olla Duenna/ZuGAYDS3Y2BeS2vW7vm?AnacrusisCrotalinae=zH4Tfz.
Verkkotietojen salausprosessi on samanlainen kuin konfiguraation salauksen purkuprosessi. Pikabot salaa verkkopyynnön seuraavasti:
Pyyntötiedot on koodattu Base64:llä.
Pikabot luo satunnaisen 32-tavuisen avaimen ja koodaa tiedot uudelleen Base64:llä.
Pikabot lukee funktion prologin ensimmäiset 16 tavua ja käyttää näitä tavuja IV:nä.
Tiedot salataan AES:llä (CBC-tila) ja koodataan Base64:llä.
32-tavuinen avain liitetään koodatun tiedon eteen.
Kovakoodattu URI-avain (esim. mMG50=) liitetään lopulliseen ulostuloon.
Johtopäätös
Kaiken kaikkiaan Pikabot on uusi haittaohjelmaperhe, joka toteuttaa laajan joukon anti-analyysitekniikoita ja tarjoaa yhteisiä takaoven ominaisuuksia kuorikoodin lataamiseen ja mielivaltaisten toisen vaiheen binäärien suorittamiseen. Pikabotilla voi olla potentiaalisia siteitä Qakbotiin, jolla on yhteisiä piirteitä jakelussa, suunnittelussa ja kampanjan tunnisteissa. ThreatLabz ei kuitenkaan ole vielä muodostanut lopullista yhteyttä kahden haittaohjelmaperheen välille.
Pilvi hiekkalaatikko
Hiekkalaatikkotunnistuksen lisäksi Zscalerin monikerroksinen pilvitietoturva-alusta havaitsee Pikabotiin liittyviä indikaattoreita eri tasoilla seuraavilla uhkien nimillä:
Win32.Trojan.PikaBot
Kompromissin indikaattorit
Isäntäindikaattorit
SHA256 Hash
Kuvaus
92153e88db63016334625514802d0d1019363989d7b3f6863947ce0e490c1006
Pikabot-injektori/ydinmoduuli
a48c39cc45efea110a7c8edadcb6719f5d1ebbeebb570b345f47172d393c0821
Pikabot-injektori/ydinmoduuli
8ee9141074b48784c89aa5d3cd4010fcf4e6d467b618c8719970f78fcc24a365
Pikabot-injektori/ydinmoduuli
a9db5aca01499f6ce404db22fb4ba3e4e0dc4b94a41c805c520bd39262df1ddc
Pikabot-injektori/ydinmoduuli
347e2f0d8332dd2d9294d06544c051a302a2436da453b2ccfa2d7829e3a79944
Pikabot-injektori/ydinmoduuli
Verkko-ilmaisimet
KOK
Kuvaus
hxxps://129.153[.]135.83:2078
Command-and-Control-palvelin
hxxps://132.148.79[.]222:2222
Command-and-Control-palvelin
hxxps://45.154.24[.]57:2078
Command-and-Control-palvelin
hxxps://45.85.235[.]39:2078
Command-and-Control-palvelin
hxxps://94.199.173[.]6:2222
Command-and-Control-palvelin
*** Tämä on Security Bloggers Networkin syndikoitu blogiBlogin luokkasyötekirjoittanutBrett Stone-Gross. Lue alkuperäinen viesti osoitteessa:https://www.zscaler.com/blogs/security-research/technical-analysis-pikabot