I indlægget vil vi fortælle dig, hvordan OceanLotus-cybergruppen (APT32 og APT-C-00) for nylig brugte en af de offentligt tilgængelige udnyttelser til
OceanLotus har specialiseret sig i cyberspionage, de prioriterede mål er landene i Sydøstasien. Angribere forfalsker dokumenter, der tiltrækker potentielle ofres opmærksomhed for at overbevise dem om at udføre en bagdør og arbejder også med udvikling af værktøjer. Metoderne, der bruges til at skabe honeypots, varierer i forskellige angreb - fra "double extension"-filer, selvudpakkende arkiver, makrodokumenter til velkendte udnyttelser.
Brug af udnyttelsen i Microsoft Equation Editor
I midten af 2018 kørte OceanLotus en kampagne, der udnyttede CVE-2017-11882 sårbarheden. Et af cybergruppens ondsindede dokumenter blev analyseret af 360 Threat Intelligence Center-specialister (
Den første etape
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc
(sha-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) ligner det, der er nævnt i undersøgelsen ovenfor. Det er interessant, fordi det er rettet mod brugere, der er interesserede i cambodjansk politik (CNRP - Cambodia National Salvation Party, opløst i slutningen af 2017). På trods af .doc-udvidelsen er dokumentet i RTF-format (se figuren nedenfor), indeholder uønsket kode og er også forvansket.
Figur 1. Skrald i RTF
På trods af tilstedeværelsen af misdannede elementer, åbner Word denne RTF-fil. Som du kan se i figur 2, er her en EQNOLEFILEHDR-struktur ved offset 0xC00 efterfulgt af en MTEF-header og derefter en MTEF-indgang (figur 3) for skrifttypen.
Figur 2. FONT-postværdier
Figur 3.
Muligt feltoverløb navn, fordi dens størrelse ikke kontrolleres før kopiering. For langt navn udløser sårbarheden. Som du kan se fra indholdet af RTF-filen (offset 0xC26 i figur 2), er bufferen fyldt med shellcode efterfulgt af en dummy-kommando (0x90
) og returadresse 0x402114
. Adressen er et dialogelement i EQNEDT32.exe
peger på instruktioner RET
. Dette får EIP til at pege på starten af feltet navnDen indeholder shell-koden.
Figur 4. Begyndelsen af udnyttelsesshellkoden
adresse 0x45BD3C
gemmer en variabel, der dereferences, indtil den når en pegepind til den aktuelt indlæste struktur MTEFData
. Her er resten af shellkoden.
Formålet med shellcode er at udføre det andet stykke shellcode, der er indlejret i det åbne dokument. Først forsøger den originale shellcode at finde filbeskrivelsen for det åbne dokument ved at iterere over alle systembeskrivelser (NtQuerySystemInformation
med et argument SystemExtendedHandleInformation
) og kontrollere, om de matcher PID beskrivelse og PID proces WinWord
og om dokumentet blev åbnet med en adgangsmaske - 0x12019F
.
For at bekræfte at finde det korrekte håndtag (og ikke et andet åbent dokumenthåndtag), vises indholdet af filen ved hjælp af funktionen CreateFileMapping
, og shellkoden kontrollerer, om de sidste fire bytes af dokumentet matcher "yyyy
» (Æggejagtmetoden). Når et match er fundet, kopieres dokumentet til en midlertidig mappe (GetTempPath
) Hvordan ole.dll
. Derefter læses de sidste 12 bytes af dokumentet.
Figur 5. End-of-Document Markers
32-bit værdi mellem markører AABBCCDD
и yyyy
er forskydningen af den næste shellkode. Det kaldes med en funktion CreateThread
. Udtrak den samme shellkode, som blev brugt af OceanLotus-gruppen tidligere.
Den anden fase
Udpakning af komponenter
Fil- og mappenavne vælges dynamisk. Koden vælger tilfældigt navnet på en eksekverbar eller DLL-fil i C:Windowssystem32
. Den sender derefter en anmodning til sine ressourcer og henter feltet FileDescription
til at bruge som mappenavn. Hvis det ikke virker, vælger koden tilfældigt et mappenavn fra mapperne %ProgramFiles%
eller C:Windows
(fra GetWindowsDirectoryW). Det undgår at bruge et navn, der kan være i konflikt med eksisterende filer, og sørger for, at det ikke indeholder følgende ord: windows
, Microsoft
, desktop
, system
, system32
eller syswow64
. Hvis mappen allerede eksisterer, tilføjes "NLS_{6 tegn}" til navnet.
ressource 0x102
parset og filer dumpet ind %ProgramFiles%
eller %AppData%
, til en mappe valgt tilfældigt. Oprettelsestidspunktet ændret til at have samme værdier som kernel32.dll
.
Her er for eksempel mappen og listen over filer, der er oprettet ved at vælge den eksekverbare C:Windowssystem32TCPSVCS.exe
som datakilde.
Figur 6. Udvinding af forskellige komponenter
Ressourcestruktur 0x102
i en dropper er ret kompliceret. I en nøddeskal indeholder den:
- filnavne
— Filstørrelse og indhold
— Komprimeringsformat (COMPRESSION_FORMAT_LZNT1
bruges af funktionen RtlDecompressBuffer
)
Den første fil dumpes som TCPSVCS.exe
, hvilket er legitimt AcroTranscoder.exe
(ifølge FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Du har måske bemærket, at nogle DLL-filer er større end 11 MB. Dette skyldes, at en stor sammenhængende buffer af tilfældige data er placeret inde i den eksekverbare. Det er muligt, at dette er en måde at undgå registrering af nogle sikkerhedsprodukter.
Sikring af vedholdenhed
ressource 0x101
i dropperen indeholder to 32-bit heltal, der specificerer, hvordan persistens skal håndhæves. Værdien af den første angiver, hvordan malwaren vil fortsætte uden administratorrettigheder.
Tabel 1. Ikke-administrator persistensmekanisme
Værdien af det andet heltal angiver, hvordan malwaren skal sikre persistens ved at køre med administrative rettigheder.
Tabel 2. Administratorpersistensmekanisme
Tjenestenavnet er filnavnet uden filtypenavnet; visningsnavnet er navnet på mappen, men hvis det allerede findes, vil strengen "Revision 1
” (tallet stiger, indtil der findes et ubrugt navn). Operatørerne har sørget for, at vedholdenheden gennem tjenesten er modstandsdygtig - i tilfælde af fejl skal tjenesten genstartes efter 1 sekund. Derefter værdien WOW64
Den nye registreringsnøgle til tjenesten er sat til 4, hvilket indikerer, at dette er en 32-bit tjeneste.
En planlagt opgave oprettes gennem flere COM-grænseflader: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Grundlæggende opretter malwaren en skjult opgave, angiver kontooplysningerne sammen med den aktuelle bruger- eller administratoroplysninger og sætter derefter udløseren.
Dette er en daglig opgave med en varighed på 24 timer og intervaller mellem to løbeture á 10 minutter, hvilket betyder, at den vil køre konstant.
Ondsindet Bit
I vores eksempel, den eksekverbare TCPSVCS.exe
(AcroTranscoder.exe
) er legitim software, der indlæser de DLL'er, der er droppet med den. I dette tilfælde er det af interesse Flash Video Extension.dll
.
Dens funktion DLLMain
kalder bare en anden funktion. Der er nogle uklare prædikater:
Figur 7. Fuzzy prædikater
Efter disse vildledende kontroller får koden et afsnit .text
fil TCPSVCS.exe
, ændrer sin beskyttelse til PAGE_EXECUTE_READWRITE
og overskriver det med dummy instruktioner:
Figur 8. Instruktionsrækkefølge
Til sidst til funktionens adresse FLVCore::Uninitialize(void)
, eksporteret Flash Video Extension.dll
, tilføjes instruktionen CALL
. Det betyder, at efter den ondsindede DLL er indlæst, når runtime kalder WinMain
в TCPSVCS.exe
, vil instruktionsmarkøren pege på NOP, hvilket resulterer i opkald FLVCore::Uninitialize(void)
, næste fase.
Funktionen opretter simpelthen en mutex, der starter med {181C8480-A975-411C-AB0A-630DB8B0A221}
efterfulgt af det aktuelle brugernavn. Den læser derefter den dumpede *.db3-fil, som indeholder positionsuafhængig kode, og bruger CreateThread
at eksekvere indhold.
Indholdet af *.db3-filen er den shell-kode, som OceanLotus-teamet typisk bruger. Vi har igen succesfuldt dekomprimeret dens nyttelast ved hjælp af emulatorscriptet, vi udgav.
Scriptet henter den sidste fase. Denne komponent er en bagdør, som vi allerede har analyseret i {A96B020F-0000-466F-A96D-A91BBF8EAC96}
binær fil. Malware-konfigurationen er stadig krypteret i PE-ressourcen. Den har nogenlunde den samme konfiguration, men C&C-serverne er forskellige fra de tidligere:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotus-gruppen demonstrerer igen en kombination af forskellige teknikker for at undgå påvisning. De vendte tilbage med et "færdigt" skema over infektionsprocessen. Ved at vælge tilfældige navne og udfylde eksekverbare filer med tilfældige data, reducerer de antallet af pålidelige IoC'er (baseret på hashes og filnavne). Desuden, ved at bruge tredjeparts DLL-indlæsning, behøver angribere kun at fjerne den legitime binære AcroTranscoder
.
Selvudpakkende arkiver
Efter RTF-filer skiftede gruppen til selvudpakkende (SFX) arkiver med fælles dokumentikoner for yderligere at forvirre brugeren. Threatbook skrev om det ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Siden midten af januar 2019 har OceanLotus genbrugt denne teknik, men har ændret nogle konfigurationer over tid. I dette afsnit vil vi tale om teknikken og ændringerne.
At skabe en lokke
Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(sha-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) blev først fundet i 2018. Denne SFX-fil blev oprettet med sindet - i beskrivelsen (Version info) siger, at det er et JPEG-billede. SFX-scriptet ser sådan ud:
Figur 9. SFX-kommandoer
Malwaren nulstilles {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(sha-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), samt et billede 2018 thich thong lac.jpg.
Lokkebilledet ser således ud:
Figur 10. Lokkebillede
Du har måske bemærket, at de første to linjer i SFX-scriptet kalder OCX-filen to gange, men dette er ikke en fejl.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
OCX-filens kontrolflow ligner meget andre OceanLotus-komponenter - mange kommandosekvenser JZ/JNZ
и PUSH/RET
sammenflettet med uønsket kode.
Figur 11. Sløret kode
Efter filtrering af skraldekoden, eksporten DllRegisterServer
, hedder regsvr32.exe
, som følger:
Figur 12. Hovedinstallatørkode
Dybest set første gang du ringer DllRegisterServer
eksport sætter registreringsværdi HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
for krypteret offset i DLL (0x10001DE0
).
Når funktionen kaldes anden gang, læser den den samme værdi og udføres på den adresse. Herfra læses og udføres ressourcen, og mange handlinger udføres i RAM.
Shellkoden er den samme PE-loader, der blev brugt i tidligere OceanLotus-kampagner. Det kan efterlignes med db293b825dcc419ba7dc2c49fa2757ee.dll
, indlæser det i hukommelsen og udfører DllEntry
.
DLL'en udtrækker indholdet af sin ressource, dekrypterer (AES-256-CBC) og dekomprimerer (LZMA) den. Ressourcen har et specifikt format, der er let at dekompilere.
Figur 13. Installatørkonfigurationsstruktur (KaitaiStruct Visualizer)
Konfigurationen er indstillet eksplicit - afhængigt af privilegieniveauet vil binære data blive skrevet til %appdata%IntellogsBackgroundUploadTask.cpl
eller %windir%System32BackgroundUploadTask.cpl
(eller SysWOW64
til 64-bit systemer).
Yderligere vedholdenhed sikres ved at oprette en opgave med navnet BackgroundUploadTask[junk].job
Hvor [junk]
er et sæt bytes 0x9D
и 0xA0
.
Navn på opgaveapplikation %windir%System32control.exe
, og værdien af parameteren er stien til den downloadede binære fil. Den skjulte opgave kører hver dag.
Strukturelt er en CPL-fil en DLL med et internt navn ac8e06de0a6c4483af9837d96504127e.dll
, som eksporterer funktionen CPlApplet
. Denne fil dekrypterer dens eneste ressource {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, indlæser derefter den DLL og kalder dens eneste eksport DllEntry
.
Bagdørs konfigurationsfil
Bagdørskonfigurationen er krypteret og indlejret i dens ressourcer. Strukturen af konfigurationsfilen er meget lig den forrige.
Figur 14. Bagdørskonfigurationsstruktur (KaitaiStruct Visualizer)
På trods af den lignende struktur er værdierne af mange felter blevet opdateret i forhold til de data, der er vist i
Det første element i det binære array indeholder DLL'en (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Yderligere forskning
Ved at indsamle prøver var vi opmærksomme på nogle egenskaber. Den netop beskrevne prøve dukkede op omkring juli 2018, og andre lignende dukkede op for nylig i midten af januar - begyndelsen af februar 2019. Et SFX-arkiv blev brugt som en infektionsvektor, der droppede et legitimt lokkedokument og en ondsindet OCX-fil.
Selvom OceanLotus bruger falske tidsstempler, har vi bemærket, at tidsstemplerne for SFX- og OCX-filer altid er de samme (0x57B0C36A
(08/14/2016 @ 7:15 UTC) og 0x498BE80F
(02/06/2009 @ 7:34 am UTC) henholdsvis). Dette indikerer sandsynligvis, at forfatterne har en form for "konstruktør", der bruger de samme skabeloner og blot ændrer nogle karakteristika.
Blandt de dokumenter, som vi har studeret siden begyndelsen af 2018, er der forskellige navne, der indikerer de angribende lande af interesse:
- De nye kontaktoplysninger for Cambodia Media(New).xls.exe
- 李建香 (个人简历).exe (falsk pdf-dokument af et CV)
— feedback, Rally i USA fra 28.-29. juli 2018.exe
Siden opdagelsen af bagdøren {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
og offentliggørelsen af dens analyse af flere forskere, observerede vi nogle ændringer i malware-konfigurationsdata.
Først begyndte forfatterne at fjerne navne fra hjælpe-DLL-DLL'erne (DNSprov.dll
og to versioner HttpProv.dll
). Så stoppede operatørerne med at pakke den tredje DLL (anden version HttpProv.dll
), og vælger kun at integrere én.
For det andet er mange bagdørskonfigurationsfelter blevet ændret, sandsynligvis for at undgå registrering, da mange IoC'er er blevet tilgængelige. Blandt de vigtige felter, der er ændret af forfatterne, er følgende:
- ændret registreringsnøgle AppX (se IoC'er)
- mutex-kodningsstreng ("def", "abc", "ghi")
- portnummer
Endelig har alle analyserede nye versioner nye C&C'er anført i IoCs sektionen.
Fund
OceanLotus fortsætter med at udvikle sig. Cybergruppen er fokuseret på at forfine og udvide værktøjerne og lokkerne. Forfattere maskerer ondsindet nyttelast med opmærksomhedsfangende dokumenter, der er relevante for de påtænkte ofre. De udvikler nye kredsløb og bruger også offentligt tilgængelige værktøjer såsom Equation Editor exploit. Desuden forbedrer de værktøjerne til at reducere antallet af artefakter, der er tilbage på ofrenes maskiner, og derved reducerer chancen for at blive opdaget af antivirussoftware.
Indikatorer på kompromis
Indikatorer for kompromis samt MITER ATT&CK-attributter er tilgængelige
Kilde: www.habr.com