Löysimme toukokuun lopussa kampanjan Remote Access Trojan (RAT) -haittaohjelmien levittämiseksi – ohjelmia, joiden avulla hyökkääjät voivat etäohjata tartunnan saaneita järjestelmiä.
Tutkimamme ryhmä erottui siitä, että se ei valinnut mitään tiettyä RAT-perhettä infektiolle. Useita troijalaisia havaittiin kampanjan hyökkäyksissä (jotka kaikki olivat laajalti saatavilla). Tällä ominaisuudella ryhmä muistutti meitä rottakuningasta - myyttistä eläintä, joka koostuu jyrsijöistä, joilla on toisiinsa kietoutunut häntä.
Alkuperäinen on otettu K. N. Rossikovin monografiasta "Hiiri ja hiiren kaltaiset jyrsijät, taloudellisesti tärkeimmät" (1908)
Tämän olennon kunniaksi annoimme harkitsemamme ryhmän nimeksi RATKing. Tässä viestissä käymme yksityiskohtaisesti läpi kuinka hyökkääjät suorittivat hyökkäyksen, mitä työkaluja he käyttivät, ja jaamme myös ajatuksemme tämän kampanjan vaikuttamisesta.
Hyökkäyksen edistyminen
Kaikki tämän kampanjan hyökkäykset tapahtuivat seuraavan algoritmin mukaan:
Käyttäjä sai tietojenkalasteluviestin, jossa oli linkki Google Driveen.
Uhri latasi linkin avulla haitallisen VBS-komentosarjan, joka määritti DLL-kirjaston lataamaan lopullisen hyötykuorman Windowsin rekisteriin ja käynnisti PowerShellin suorittamaan sen.
DLL-kirjasto lisäsi lopullisen hyötykuorman - itse asiassa yhden hyökkääjien käyttämistä RAT:ista - järjestelmäprosessiin ja rekisteröi VBS-komentosarjan automaattiseen käynnistykseen saadakseen jalansijaa tartunnan saaneessa koneessa.
Lopullinen hyötykuorma suoritettiin järjestelmäprosessissa, ja se antoi hyökkääjälle mahdollisuuden hallita tartunnan saanutta tietokonetta.
Kaavamaisesti se voidaan esittää näin:
Seuraavaksi keskitymme kolmeen ensimmäiseen vaiheeseen, koska olemme kiinnostuneita haittaohjelmien toimitusmekanismista. Emme kuvaa yksityiskohtaisesti itse haittaohjelman toimintamekanismia. Ne ovat laajalti saatavilla - joko myydään erikoistuneilla foorumeilla tai jopa jaetaan avoimen lähdekoodin projekteina - eivätkä siksi ole ainutlaatuisia RATKing-ryhmälle.
Hyökkäysvaiheiden analyysi
Vaihe 1. Tietojenkalasteluviesti
Hyökkäys alkoi siitä, että uhri sai haitallisen kirjeen (hyökkääjät käyttivät erilaisia tekstimalleja; alla olevassa kuvakaappauksessa on yksi esimerkki). Viesti sisälsi linkin lailliseen arkistoon drive.google.com, joka oletettavasti johti PDF-dokumentin lataussivulle.
Esimerkki tietojenkalasteluviestistä
Itse asiassa se ei kuitenkaan ladattu PDF-dokumenttia, vaan VBS-skripti.
Kun napsautit sähköpostin linkkiä yllä olevassa kuvakaappauksessa, tiedosto nimeltä Cargo Flight Details.vbs. Tässä tapauksessa hyökkääjät eivät edes yrittäneet naamioida tiedostoa lailliseksi asiakirjaksi.
Samaan aikaan osana tätä kampanjaa löysimme käsikirjoituksen nimeltä Cargo Trip Detail.pdf.vbs. Se voi jo hyväksyä laillisen PDF-tiedoston, koska Windows piilottaa tiedostopäätteet oletuksena. Totta, tässä tapauksessa epäilyksiä saattoi silti herättää sen kuvake, joka vastasi VBS-skriptiä.
Tässä vaiheessa uhri saattoi tunnistaa petoksen: katso vain hetken lähemmin ladattuja tiedostoja. Tällaisissa tietojenkalastelukampanjoissa hyökkääjät kuitenkin usein luottavat huomaamattomaan tai kiirehtivään käyttäjään.
Vaihe 2. VBS-skriptitoiminto
VBS-skripti, jonka käyttäjä saattoi avata vahingossa, rekisteröi DLL-kirjaston Windowsin rekisteriin. Käsikirjoitus oli hämärtynyt: sen rivit kirjoitettiin tavuina, jotka erotettiin mielivaltaisella merkillä.
Esimerkki hämärästä käsikirjoituksesta
Deobfuskaatioalgoritmi on melko yksinkertainen: joka kolmas merkki suljettiin pois hämärtyneestä merkkijonosta, minkä jälkeen tulos dekoodattiin base16:sta alkuperäiseen merkkijonoon. Esimerkiksi arvosta 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (korostettu yllä olevassa kuvakaappauksessa) tuloksena oleva viiva oli WScript.Shell.
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
Alla riveillä 9–10 korostetaan arvoa, jonka deobfuskaatio johti DLL-tiedostoon. Hän oli se, joka käynnistettiin seuraavassa vaiheessa PowerShellin avulla.
Merkkijono, jossa on hämärtynyt DLL
Jokainen VBS-skriptin toiminto suoritettiin, kun merkkijonot deobfuskoitiin.
Skriptin suorittamisen jälkeen funktio kutsuttiin wscript.sleep — sitä käytettiin lykätyn täytäntöönpanon suorittamiseen.
Seuraavaksi komentosarja toimi Windowsin rekisterin kanssa. Hän käytti tähän WMI-tekniikkaa. Sen avulla luotiin ainutlaatuinen avain ja suoritettavan tiedoston runko kirjoitettiin sen parametriin. Rekisteriin päästiin WMI:n kautta seuraavalla komennolla:
Kolmannessa vaiheessa haitallinen DLL latasi lopullisen hyötykuorman, lisäsi sen järjestelmäprosessiin ja varmisti, että VBS-skripti käynnistyi automaattisesti, kun käyttäjä kirjautui sisään.
Suorita PowerShellin kautta
DLL suoritettiin käyttämällä seuraavaa komentoa PowerShellissä:
vastaanottanut rekisteriarvotiedot nimen kanssa rnd_value_name — tämä tieto oli .Net-alustalle kirjoitettu DLL-tiedosto;
ladannut tuloksena olevan .Net-moduulin prosessimuistiin powershell.exe funktiota käyttämällä [System.Threading.Thread]::GetDomain().Load()(yksityiskohtainen kuvaus Load()-funktiosta saatavilla Microsoftin verkkosivuilla);
suoritti toiminnon GUyyvmzVhebFCw]::EhwwK() - DLL-kirjaston suoritus alkoi sillä - parametreilla vbsScriptPath, xorKey, vbsScriptName... Parametri xorKey tallensi avaimen lopullisen hyötykuorman salauksen purkamiseksi ja parametrit vbsScriptPath и vbsScriptName siirrettiin VBS-skriptin rekisteröimiseksi automaattiseen käynnistykseen.
Kuvaus DLL-kirjastosta
Puretussa muodossa käynnistyslatain näytti tältä:
Loader puretussa muodossa (toiminto, jolla DLL-kirjaston suoritus aloitettiin, on alleviivattu punaisella)
Käynnistyslatain on suojattu .Net Reactor -suojalla. De4dot-apuohjelma poistaa tämän suojan erinomaisesti.
Tämä kuormaaja:
lisäsi hyötykuorman järjestelmäprosessiin (tässä esimerkissä se svchost.exe);
Katsotaanpa toimintoa, jota PowerShell-skripti kutsui.
PowerShell-komentosarjan kutsuma funktio
Tämä toiminto suoritti seuraavat toiminnot:
purettu kahden tietojoukon salaus (array и array2 kuvakaappauksessa). Ne pakattiin alun perin gzip:llä ja salattiin XOR-algoritmilla avaimella xorKey;
kopioidaan tiedot varatuille muistialueille. Tiedot lähteestä array - osoitettuun muistialueeseen intPtr (payload pointer kuvakaappauksessa); tiedot osoitteesta array2 - osoitettuun muistialueeseen intPtr2 (shellcode pointer kuvakaappauksessa);
kutsutaan funktioksi CallWindowProcA(описание Tämä toiminto on saatavilla Microsoftin verkkosivustolla) seuraavilla parametreilla (parametrien nimet on lueteltu alla, kuvakaappauksessa ne ovat samassa järjestyksessä, mutta työarvoilla):
lpPrevWndFunc - osoitin dataan array2;
hWnd — osoitin merkkijonoon, joka sisältää polun suoritettavaan tiedostoon svchost.exe;
Msg - osoitin dataan array;
wParam, lParam - viestiparametrit (tässä tapauksessa näitä parametreja ei käytetty ja niiden arvot olivat 0);
loi tiedoston %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlMissä <name> - nämä ovat parametrin 4 ensimmäistä merkkiä vbsScriptName (kuvakaappauksessa tämän toiminnon koodinpätkä alkaa komennolla File.Copy). Tällä tavalla haittaohjelma lisäsi URL-tiedoston automaattisen käynnistystiedostojen luetteloon, kun käyttäjä kirjautui sisään ja liittyi siten tartunnan saaneeseen tietokoneeseen. URL-tiedosto sisälsi linkin komentosarjaan:
Joten kun suoritat toiminnon CallWindowProcA parametrien kanssa hWnd, Msg, wParam, lParam shellcode taulukosta suoritetaan array2 argumenttien kanssa hWnd и Msg. hWnd on osoitin merkkijonoon, joka sisältää polun suoritettavaan tiedostoon svchost.exeJa Msg — osoitin lopulliseen hyötykuormaan.
Shellcode vastaanotti funktioosoitteet osoitteesta kernel32.dll и ntdll32.dll perustui niiden nimien hash-arvoihin ja syötti lopullisen hyötykuorman prosessimuistiin svchost.exekäyttämällä Process Hollowing -tekniikkaa (voit lukea siitä lisää tästä статье). Kun pistät kuorikoodin:
loi prosessin svchost.exe keskeytetyssä tilassa toimintoa käyttämällä CreateProcessW;
sitten piilotti osion näytön prosessin osoiteavaruuteen svchost.exe funktiota käyttämällä NtUnmapViewOfSection. Siten ohjelma vapautti alkuperäisen prosessin muistin svchost.exesitten varata muistia hyötykuormalle tässä osoitteessa;
varattu muisti hyötykuormalle prosessin osoiteavaruudessa svchost.exe funktiota käyttämällä VirtualAllocEx;
Injektioprosessin aloitus
kirjoitti hyötykuorman sisällön prosessin osoiteavaruuteen svchost.exe funktiota käyttämällä WriteProcessMemory (kuten alla olevassa kuvakaappauksessa);
aloitti prosessin uudelleen svchost.exe funktiota käyttämällä ResumeThread.
Injektioprosessin viimeistely
Ladattavat haittaohjelmat
Kuvattujen toimien seurauksena tartunnan saaneeseen järjestelmään asennettiin yksi useista RAT-luokan haittaohjelmista. Alla olevassa taulukossa on lueteltu hyökkäyksessä käytetyt haittaohjelmat, jotka voimme luottavaisesti liittää yhteen hyökkääjäryhmään, koska näytteet käyttivät samaa komento- ja ohjauspalvelinta.
Esimerkkejä hajautetuista haittaohjelmista, joilla on sama ohjauspalvelin
Tässä on huomionarvoista kaksi asiaa.
Ensinnäkin se tosiasia, että hyökkääjät käyttivät useita eri RAT-perheitä kerralla. Tämä käyttäytyminen ei ole tyypillistä tunnetuille kyberryhmille, jotka usein käyttävät suunnilleen samoja työkaluja kuin heille tutut.
Toiseksi RATKing käytti haittaohjelmia, joita myydään joko erikoistuneilla foorumeilla edulliseen hintaan tai jotka ovat jopa avoimen lähdekoodin projekti.
Täydellisempi luettelo kampanjassa käytetyistä haittaohjelmista - yhdellä tärkeällä huomautuksella - on artikkelin lopussa.
Tietoja ryhmästä
Emme voi lukea kuvattua haitallista kampanjaa kenenkään tunnetun hyökkääjän syyksi. Toistaiseksi uskomme, että nämä hyökkäykset toteutti täysin uusi ryhmä. Kuten alussa kirjoitimme, kutsuimme sitä RATKingiksi.
VBS-skriptin luomiseen ryhmä todennäköisesti käytti apuohjelman kaltaista työkalua VBS-Crypter kehittäjältä NYAN-x-CAT. Tämän osoittaa tämän ohjelman luoman skriptin samankaltaisuus hyökkääjien komentosarjan kanssa. Tarkemmin sanottuna he molemmat:
suorittaa viivästetty suoritus käyttämällä toimintoa Sleep;
käytä WMI:tä;
rekisteröi suoritettavan tiedoston runko rekisteriavainparametriksi;
suorittaa tämän tiedoston PowerShellin avulla omassa osoiteavaruudessaan.
Selvyyden vuoksi vertaa PowerShell-komentoa suorittamaan tiedosto rekisteristä, jota käyttää VBS-Crypterillä luotu komentosarja:
Huomaa, että hyökkääjät käyttivät toista NYAN-x-CAT-apuohjelmaa yhtenä hyötykuormista - LimeRAT.
C&C-palvelimien osoitteet kertovat toisesta RATKingin erityispiirteestä: ryhmä suosii dynaamisia DNS-palveluita (katso C&C-luettelo IoC-taulukosta).
IoC
Alla olevassa taulukossa on täydellinen luettelo VBS-skripteistä, jotka voidaan todennäköisimmin liittää kuvattuun kampanjaan. Kaikki nämä skriptit ovat samanlaisia ja suorittavat suunnilleen saman toimintosarjan. Kaikki ne ruiskuttavat RAT-luokan haittaohjelmia luotettavaan Windows-prosessiin. Kaikilla niillä on C&C-osoitteet, jotka on rekisteröity dynaamisten DNS-palvelujen avulla.
Emme kuitenkaan voi väittää, että samat hyökkääjät ovat jakaneet kaikkia näitä komentosarjoja, lukuun ottamatta näytteitä, joilla on sama C&C-osoite (esimerkiksi kimjoy007.dyndns.org).