Tässä viestissä kerromme, kuinka kyberryhmä OceanLotus (APT32 ja APT-C-00) käytti äskettäin yhtä julkisesti saatavilla olevista hyväksikäytöistä
OceanLotus on erikoistunut kybervakoiluun, ja ensisijaiset kohteet ovat Kaakkois-Aasian maat. Hyökkääjät väärentävät asiakirjoja, jotka kiinnittävät mahdollisten uhrien huomion vakuuttaakseen heidät toteuttamaan takaoven, ja myös kehittävät työkaluja. Honeypottien luomiseen käytetyt menetelmät vaihtelevat hyökkäyksissä "kaksoislaajennustiedostoista", itsepurkautuvista arkistoista, makroja sisältävistä asiakirjoista tunnettuihin hyväksikäyttöihin.
Hyödynnä Microsoft Equation Editorissa
Vuoden 2018 puolivälissä OceanLotus toteutti kampanjan, jossa hyödynnettiin CVE-2017-11882-haavoittuvuutta. 360 Threat Intelligence Centerin asiantuntijat analysoivat yhden kyberryhmän haitallisista dokumenteista (
Ensimmäisessä vaiheessa
Asiakirja FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) on samanlainen kuin yllä olevassa tutkimuksessa mainittu. Se on mielenkiintoinen, koska se on suunnattu käyttäjille, jotka ovat kiinnostuneita Kambodžan politiikasta (CNRP - Cambodia National Rescue Party, hajotettiin vuoden 2017 lopussa). Huolimatta .doc-laajennuksesta asiakirja on RTF-muodossa (katso kuva alla), sisältää roskakoodia ja on myös vääristynyt.
Kuva 1. "Roska" RTF:ssä
Vaikka elementtejä on sekaisin, Word avaa tämän RTF-tiedoston onnistuneesti. Kuten näet kuvasta 2, EQNOLEFILEHDR-rakenne on siirtymäkohdassa 0xC00, jota seuraa MTEF-otsikko ja sitten kirjasimen MTEF-merkintä (kuva 3).
Kuva 2. FONT-syöttöarvot
Kuva 3.
Mahdollinen ylivuoto pellolla nimi, koska sen kokoa ei tarkisteta ennen kopioimista. Liian pitkä nimi laukaisee haavoittuvuuden. Kuten voit nähdä RTF-tiedoston sisällöstä (offset 0xC26 kuvassa 2), puskuri täytetään shellkoodilla, jota seuraa dummy-komento (0x90
) ja palautusosoite 0x402114
. Osoite on dialogielementti EQNEDT32.exe
, jossa on ohjeet RET
. Tämä saa EIP osoittamaan kentän alkuun nimisisältää shell-koodin.
Kuva 4. Hyödyntämiskuorikoodin alku
osoite 0x45BD3C
tallentaa muuttujan, johon viitataan, kunnes se saavuttaa osoittimen sillä hetkellä ladattavaan rakenteeseen MTEFData
. Loput shell-koodista on täällä.
Shell-koodin tarkoitus on suorittaa toinen avoimeen dokumenttiin upotettu shellkoodin osa. Alkuperäinen shellkoodi yrittää ensin löytää avoimen asiakirjan tiedostokuvaajan iteroimalla kaikkia järjestelmäkuvauksia (NtQuerySystemInformation
argumentin kanssa SystemExtendedHandleInformation
) ja tarkistaa, vastaavatko ne PID kuvaaja ja PID prosessi WinWord
ja onko asiakirja avattu pääsymaskilla - 0x12019F
.
Varmistaaksesi, että oikea kahva on löydetty (eikä toisen avoimen asiakirjan kahvaa), tiedoston sisältö näytetään toiminnolla CreateFileMapping
, ja shellkoodi tarkistaa, vastaavatko asiakirjan neljä viimeistä tavua "yyyy
"(munanmetsästysmenetelmä). Kun vastaavuus löytyy, asiakirja kopioidaan väliaikaiseen kansioon (GetTempPath
) kuten ole.dll
. Sitten asiakirjan viimeiset 12 tavua luetaan.
Kuva 5. Asiakirjan loppumerkit
32-bittinen arvo merkkien välillä AABBCCDD
и yyyy
on seuraavan kuorikoodin offset. Sitä kutsutaan funktion avulla CreateThread
. Purettu sama shellkoodi, jota OceanLotus-ryhmä käytti aiemmin.
Toisessa vaiheessa
Komponenttien poistaminen
Tiedostojen ja hakemistojen nimet valitaan dynaamisesti. Koodi valitsee satunnaisesti suoritettavan tai DLL-tiedoston nimen C:Windowssystem32
. Sitten se tekee pyynnön resursseilleen ja hakee kentän FileDescription
käytettäväksi kansion nimenä. Jos tämä ei auta, koodi valitsee satunnaisesti kansion nimen hakemistoista %ProgramFiles%
tai C:Windows
(GetWindowsDirectoryW:stä). Se välttää käyttämästä nimeä, joka saattaa olla ristiriidassa olemassa olevien tiedostojen kanssa, ja varmistaa, että se ei sisällä seuraavia sanoja: windows
, Microsoft
, desktop
, system
, system32
tai syswow64
. Jos hakemisto on jo olemassa, "NLS_{6 merkkiä}" lisätään nimeen.
resurssi 0x102
analysoidaan ja tiedostot tallennetaan %ProgramFiles%
tai %AppData%
, satunnaisesti valittuun kansioon. Luontiaika muutettu niin, että sillä on samat arvot kuin kernel32.dll
.
Tässä on esimerkiksi kansio ja luettelo tiedostoista, jotka on luotu valitsemalla suoritettava tiedosto C:Windowssystem32TCPSVCS.exe
tietolähteenä.
Kuva 6. Eri komponenttien purkaminen
Resurssien rakenne 0x102
tiputtimessa on melko monimutkaista. Pähkinänkuoressa se sisältää:
— Tiedostojen nimet
— Tiedoston koko ja sisältö
- pakkausmuoto (COMPRESSION_FORMAT_LZNT1
, jota toiminto käyttää RtlDecompressBuffer
)
Ensimmäinen tiedosto nollataan nimellä TCPSVCS.exe
, mikä on laillista AcroTranscoder.exe
(mukaan FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Olet ehkä huomannut, että jotkut DLL-tiedostot ovat suurempia kuin 11 Mt. Tämä johtuu siitä, että suoritettavan tiedoston sisään on sijoitettu suuri jatkuva puskuri satunnaista dataa. On mahdollista, että tämä on tapa välttää joidenkin tietoturvatuotteiden havaitseminen.
Pysyvyyden varmistaminen
resurssi 0x101
dropperissa sisältää kaksi 32-bittistä kokonaislukua, jotka määrittelevät, kuinka pysyvyys tulee tarjota. Ensimmäisen arvo määrittää, kuinka haittaohjelma säilyy ilman järjestelmänvalvojan oikeuksia.
Taulukko 1. Pysyvyysmekanismi ilman järjestelmänvalvojan oikeuksia
Toisen kokonaisluvun arvo määrittää, kuinka haittaohjelman tulee saavuttaa pysyvyys, kun se suoritetaan järjestelmänvalvojan oikeuksilla.
Taulukko 2. Pysyvyysmekanismi järjestelmänvalvojan oikeuksilla
Palvelun nimi on tiedoston nimi ilman päätettä; näyttönimi on kansion nimi, mutta jos se on jo olemassa, siihen lisätään merkkijono "Revision 1
” (luku kasvaa, kunnes käyttämätön nimi löytyy). Operaattorit varmistivat, että pysyvyys palvelun kautta on vakaata - epäonnistuessa palvelu tulee käynnistää uudelleen 1 sekunnin kuluttua. Sitten arvo WOW64
Uuden palvelun rekisteriavain on asetettu arvoon 4, mikä tarkoittaa, että kyseessä on 32-bittinen palvelu.
Ajastettu tehtävä luodaan useiden COM-liitäntöjen kautta: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Pohjimmiltaan haittaohjelma luo piilotetun tehtävän, asettaa tilitiedot nykyisen käyttäjän tai järjestelmänvalvojan tietojen kanssa ja asettaa sitten laukaisimen.
Tämä on päivittäinen tehtävä, jonka kesto on 24 tuntia ja kahden suorituksen välit ovat 10 minuuttia, mikä tarkoittaa, että se toimii jatkuvasti.
Haitallinen bitti
Esimerkissämme suoritettava tiedosto TCPSVCS.exe
(AcroTranscoder.exe
) on laillinen ohjelmisto, joka lataa DLL-tiedostoja, jotka nollataan sen mukana. Tässä tapauksessa se kiinnostaa Flash Video Extension.dll
.
Sen toiminto DLLMain
kutsuu vain toista toimintoa. Joitakin sumeita predikaatteja on olemassa:
Kuva 7. Sumeat predikaatit
Näiden harhaanjohtavien tarkistusten jälkeen koodi saa osion .text
tiedosto TCPSVCS.exe
, muuttaa puolustustaan muotoon PAGE_EXECUTE_READWRITE
ja kirjoittaa sen uudelleen lisäämällä tyhjät ohjeet:
Kuva 8. Ohjeiden järjestys
Lopussa funktion osoite FLVCore::Uninitialize(void)
, viedään Flash Video Extension.dll
, ohje on lisätty CALL
. Tämä tarkoittaa, että kun haitallinen DLL on ladattu, kun ajonaikainen kutsuu WinMain
в TCPSVCS.exe
, käskyosoitin osoittaa kohtaan NOP, mikä aiheuttaa FLVCore::Uninitialize(void)
, seuraava vaihe.
Toiminto yksinkertaisesti luo mutexin, joka alkaa {181C8480-A975-411C-AB0A-630DB8B0A221}
perässä nykyinen käyttäjätunnus. Sitten se lukee poistetun *.db3-tiedoston, joka sisältää sijainnista riippumattoman koodin, ja käyttää CreateThread
sisällön toteuttamiseksi.
*.db3-tiedoston sisältö on shell-koodi, jota OceanLotus-ryhmä yleensä käyttää. Purimme jälleen onnistuneesti sen hyötykuorman julkaisemallamme emulaattorikomentosarjalla
Käsikirjoitus poimii viimeisen vaiheen. Tämä komponentti on takaovi, jota olemme jo analysoineet {A96B020F-0000-466F-A96D-A91BBF8EAC96}
binääritiedosto. Haittaohjelmakokoonpano on edelleen salattu PE-resurssissa. Siinä on suunnilleen sama kokoonpano, mutta C&C-palvelimet eroavat edellisistä:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotus-tiimi esittelee jälleen eri tekniikoiden yhdistelmää havaitsemisen välttämiseksi. He palasivat "puhdistetun" kaavion kanssa tartuntaprosessista. Valitsemalla satunnaisia nimiä ja täyttämällä suoritettavat tiedostot satunnaisilla tiedoilla ne vähentävät luotettavien IoC:iden määrää (pohjainen tiiviste ja tiedostonimi). Lisäksi kolmannen osapuolen DLL-latauksen ansiosta hyökkääjien tarvitsee vain poistaa laillinen binaari AcroTranscoder
.
Itsepurkautuvat arkistot
RTF-tiedostojen jälkeen ryhmä siirtyi itsepurkaviin (SFX) arkistoon, jossa oli yleisiä asiakirjakuvakkeita hämmentääkseen käyttäjää entisestään. Threatbook kirjoitti tästä ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Tammikuun 2019 puolivälistä lähtien OceanLotus on käyttänyt tätä tekniikkaa uudelleen, mutta muuttanut joitain määrityksiä ajan myötä. Tässä osiossa puhumme tekniikasta ja muutoksista.
Vieheen luominen
Asiakirja THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) löydettiin ensimmäisen kerran vuonna 2018. Tämä SFX-tiedosto luotiin viisaasti - kuvauksessa (Version tiedot) se sanoo, että tämä on JPEG-kuva. SFX-skripti näyttää tältä:
Kuva 9. SFX-komennot
Haittaohjelma nollautuu {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), sekä kuva 2018 thich thong lac.jpg.
Huijauskuva näyttää tältä:
Kuva 10. Syöttikuva
Olet ehkä huomannut, että SFX-komentosarjan kaksi ensimmäistä riviä kutsuvat OCX-tiedostoa kahdesti, mutta tämä ei ole virhe.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
OCX-tiedoston ohjausvirta on hyvin samanlainen kuin muiden OceanLotus-komponenttien - monet komentosarjat JZ/JNZ
и PUSH/RET
, vuorotellen roskakoodin kanssa.
Kuva 11. Hämärtynyt koodi
Vie roskakoodin suodattamisen jälkeen DllRegisterServer
, nimeltään regsvr32.exe
, näyttää seuraavalta:
Kuva 12. Perusasennuskoodi
Periaatteessa ensimmäisellä puhelulla DllRegisterServer
vienti asettaa rekisteriarvon HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
salatulle offsetille DLL:ssä (0x10001DE0
).
Kun funktiota kutsutaan toisen kerran, se lukee saman arvon ja suoritetaan kyseisessä osoitteessa. Tästä eteenpäin resurssi ja monet RAM-muistissa olevat toiminnot luetaan ja suoritetaan.
Shellcode on sama PE-lataaja, jota käytettiin aiemmissa OceanLotus-kampanjoissa. Sitä voidaan emuloida käyttämällä db293b825dcc419ba7dc2c49fa2757ee.dll
, lataa sen muistiin ja suorittaa sen DllEntry
.
DLL purkaa resurssinsa sisällön, purkaa sen salauksen (AES-256-CBC) ja purkaa sen (LZMA). Resurssilla on tietty muoto, joka on helppo purkaa.
Kuva 13. Asentimen kokoonpanorakenne (KaitaiStruct Visualizer)
Kokoonpano on määritetty eksplisiittisesti - käyttöoikeustasosta riippuen binääritietoa kirjoitetaan %appdata%IntellogsBackgroundUploadTask.cpl
tai %windir%System32BackgroundUploadTask.cpl
(tai SysWOW64
64-bittisille järjestelmille).
Lisää pysyvyyttä varmistetaan luomalla tehtävä nimeltä BackgroundUploadTask[junk].job
Missä [junk]
edustaa tavujoukkoa 0x9D
и 0xA0
.
Tehtävän sovelluksen nimi %windir%System32control.exe
, ja parametrin arvo on polku ladattavaan binaaritiedostoon. Piilotettu tehtävä suoritetaan joka päivä.
Rakenteellisesti CPL-tiedosto on DLL, jolla on sisäinen nimi ac8e06de0a6c4483af9837d96504127e.dll
, joka vie funktion CPlApplet
. Tämä tiedosto purkaa ainoan resurssinsa salauksen {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, lataa sitten tämän DLL:n ja kutsuu sen ainoaa vientiä DllEntry
.
Takaoven määritystiedosto
Takaoven kokoonpano on salattu ja upotettu sen resursseihin. Asetustiedoston rakenne on hyvin samanlainen kuin edellinen.
Kuva 14. Takaoven kokoonpanorakenne (KaitaiStruct Visualizer)
Vaikka rakenne on samanlainen, monet kenttäarvoista on päivitetty kuvassa esitetyistä
Binääritaulukon ensimmäinen elementti sisältää DLL:n (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Lisätutkimuksia
Näytteitä kerättäessä havaitsimme joitain ominaisuuksia. Juuri kuvattu näyte ilmestyi heinäkuun 2018 paikkeilla, ja muut sen kaltaiset ilmestyivät vasta tammikuun puolivälistä helmikuun alkuun 2019. SFX-arkistoa käytettiin tartuntavektorina, mikä pudotti laillisen houkutusasiakirjan ja haitallisen OSX-tiedoston.
Vaikka OceanLotus käyttää väärennettyjä aikaleimoja, huomasimme, että SFX- ja OCX-tiedostojen aikaleimat ovat aina samat (0x57B0C36A
(08 klo 14 UTC) ja 0x498BE80F
(02/06/2009 klo 7:34 UTC)). Tämä todennäköisesti viittaa siihen, että kirjoittajilla on jonkinlainen "suunnittelija", joka käyttää samoja malleja ja muuttaa yksinkertaisesti joitain ominaisuuksia.
Asiakirjoissa, joita olemme tutkineet vuoden 2018 alusta lähtien, on useita nimiä, jotka osoittavat hyökkääjiä kiinnostavat maat:
— Cambodia Median (New.xls.exe) uudet yhteystiedot
— 李建香 (个人简历).exe (väärennetty pdf-dokumentti CV:stä)
— palaute, ralli USA:ssa 28.-29.exe
Siitä lähtien kun takaovi löydettiin {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
ja useiden tutkijoiden julkaisema sen analyysi, havaitsimme joitakin muutoksia haittaohjelmien kokoonpanotiedoissa.
Ensin kirjoittajat alkoivat poistaa nimiä apu-DLL-tiedostoista (DNSprov.dll
ja kaksi versiota HttpProv.dll
). Tämän jälkeen operaattorit lopettivat kolmannen DLL:n (toisen version) pakkaamisen HttpProv.dll
), valitsit upottaa vain yhden.
Toiseksi monia takaoven määrityskenttiä muutettiin, mikä todennäköisesti välttyisi havaitsemiselta, koska monet IoC:t tulivat saataville. Tärkeitä tekijöiden muokkaamia kenttiä ovat:
- AppX-rekisteriavain muutettu (katso IoC:t)
- mutex-koodausmerkkijono ("def", "abc", "ghi")
- porttinumero
Lopuksi, kaikissa analysoiduissa uusissa versioissa on uudet C&C:t, jotka on lueteltu IoCs-osiossa.
Tulokset
OceanLotus jatkaa kehitystään. Kyberryhmä keskittyy työkalujen ja houkuttimien jalostukseen ja laajentamiseen. Tekijät naamioivat haitallisia hyötykuormia käyttämällä huomiota herättäviä asiakirjoja, joiden aihe on olennainen aiotun uhrin kannalta. He kehittävät uusia järjestelmiä ja käyttävät myös julkisesti saatavilla olevia työkaluja, kuten yhtälöeditorin hyväksikäyttöä. Lisäksi he parantavat työkaluja vähentääkseen uhrien koneille jäävien esineiden määrää, mikä vähentää virustorjuntaohjelmiston havaitsemismahdollisuutta.
Kompromissin osoittimet
Kompromissin osoittimet sekä MITER ATT&CK -attribuutit ovat saatavilla
Lähde: will.com