Na začátku března tohoto roku se v skeneru VirusTotal objevil nový vzorek od OceanLotus. Má stejné vlastnosti jako dřívější backdoor (také zadní vrátka) pro macOS, jen s obměněnou strukturou, kterou bezpečnostní programy opět identifikují složitěji. Bohužel jsme nedokázali identifikovat dropper této verze a neznáme tak prvotní vektor šíření.
Shrnuli jsme pro vás, v čem se tato verze liší od předešlého útoku na operační systém macOS a jak můžete při dešifrování použít řetězec IDA Hex-Rays API.
Co víme o OceanLotus
Skupina útočníků označovaná jako OceanLotus (někdy také jako PT32 a APT-C-00) nechvalně proslula loni na jaře. Původně skupina zneužívala k infiltraci bezpečnostní nedostatky balíku Microsoft Office. Terčem byly hlavně vládní organizace a významné firmy ve Vietnamu, Laosu, Kambodže a na Filipínách.
Jejich útoky byly zajímavé především z technologického hlediska. K propašování zadních vrátek do vybraného počítače využívala skupina několikastupňový útok. Při infiltraci OceanLotus používali legitimní digitálně podepsanou aplikaci ke spouštění stahovaných zašifrovaných škodlivých aplikací. Kvůli tomu tento útok dlouho unikal radarům bezpečnostních programů.
Malware obsahuje anti-sandbox mechanismy
Analyzovali jsme vzorek s hashem E615632C9998E4D3E5ACD8851864ED09B02C77D2. Programy ESET jej detekují jako OSX/OceanLotus.D.
Vzorek je zabalen do UPX, jak je obvyklé u malwaru zaměřeného na macOS od OceanLotus. Většina identifikačních nástrojů jej tak neidentifikuje pravděpodobně proto, že obsahují podpis s řetězcem UPX. Mimoto jsou Mach-O podpisy méně obvyklé a neaktualizují se tak často. To vše ztěžuje statickou detekci.
Po rozbalení je zajímavé, že vstupní bod je umístěn na začátku sekce __cfstring v segmentu .TEXT. Fakt, že kód je v sekci __cfstring, zmate některé nástroje, které pak kód zobrazují jako řetězec.
Po spuštění kód nejprve vytvoří anti-debuggovací vlákno, jehož jediným účelem je nepřetržitě kontrolovat, zda je přítomen debugger. Malware zkusí následující:
- Propojit se s debuggovacím nástrojem pomocí příkazu ptrace. Jako parametr požadavku využívá PT_DENY_ATTACH.
- Zkontrolovat, zda jsou otevřené nějaké porty vyvoláním funkce task_get_exception_ports.
- Zkontrolovat připojení debuggeru ověřením, zda je v aktuálním procesu nastaven příznak P_TRACED.
Pakliže zjistí přítomnost debuggeru, spustí se funkce exit. Navíc vzorek poté zkusí zkontrolovat prostředí dalšími dvěma příkazy:
ioreg -l | grep -e “Manufacturer” a sysctl hw.model
a zkontroluje návratovou hodnotu proti natvrdo nakódovanému seznamu známých řetězců virtualizačního systému: oracle, vmware, virtualbox nebo parallels.
Nakonec spustí příkaz:
system_profiler SPHardwareDataType 2>/dev/null | awk ‘/Boot ROM Version/ {split($0, line, “:”);printf(“%s”, line[2]);}
Ten zkontroluje, zda je zařízení jedním z následujícího: “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” a “XS”. Tyto kódy reprezentují model systému, například MBP znamená MacBook Pro a MBA MacBook Air.
Jaká „vylepšení“ obsahuje nová verze malwaru
Přesto, že se příkazy v backdooru od analýzy společnosti Trend Micro v dubnu 2018 nezměnily, všimli jsme si několika modifikací. C&C servery použité pro tento vzorek jsou poměrné nové, datum vytvoření byl 22. 10. 2018.
- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com
Použitá URL se zaměnila /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
První paket, který se na C&C server odešle, obsahuje informace o hostitelském zařízení včetně sériového čísla.
Kromě této změny konfigurace, nepoužívá vzorek pro síťovou exfiltraci knihovnu libcurl. Místo toho používá externí knihovnu. Backdoor se pokouší dešifrovat každý soubor v aktuálním adresáři pomocí AES-256-CBC s klíčem gFjMXBgyXWULmVVVzyxy s vynulovanými nulami. Každý soubor je „dešifrován“ a uložen jako /tmp/store a vzorek se pokusí načíst knihovnu vytvořenou pomocí funkce dlopen. Jakmile dešifrování vyústí v úspěšné volání na dlopen, backdoor načte exportované funkce soubory Boriry a ChadylonV, které zřejmě komunikují se serverem.
Jelikož se nám nepodařilo identifikovat dropper původního vzorku, nemůžeme analyzovat ani knihovnu. A protože jsou komponenty zašifrované, pravidlo YARA založené na těchto řetězcích by neodpovídalo souboru na disku.
Dešifrování řetězce
Stejně jako předchozí varianty i nynější vzorek je zašifrován pomocí AES-256-CBC (hexadecimální klíč: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 vyplněný nulami) s funkcí CCCrypt. Klíč se od minule změnil, ale jelikož skupina používá stále stejný šifrovací algoritmus, dešifrování je možné automatizovat.
Zveřejnili jsme také IDA skript využívající rozhraní Hex-Rays API pro dešifrování řetězců přítomných v binárním systému. Skript může pomoci v budoucnu při analýze dosud neznámých vzorků od OceanLotus.
Skript nejprve najde všechny křížové odkazy na funkci decrypt, dále všechny argumenty, dešifruje data a vloží holý text do komentáře na adresu křížového odkazu.
Aby skript fungoval správně, musí být ve skriptu nastavena vlastní abeceda používaná dekódovacích funkcí base64 a musí být definována globální proměnná obsahující délku klíče.
Finální skript najdete v našem repozitáří Github.