OceanLotus: Актуализация на зловреден софтуер за macOS

През март 2019 г. нова извадка от зловреден софтуер за macOS от кибергрупата OceanLotus беше качена във VirusTotal, популярна онлайн услуга за сканиране. Изпълнимият файл на задната врата има същите възможности като предишната версия на зловреден софтуер macOS, който проучихме, но структурата му се е променила и е станало по-трудно за откриване. За съжаление, не успяхме да намерим капкомер, свързан с тази проба, така че все още не знаем вектора на инфекцията.

Наскоро публикувахме публикация за OceanLotus и как операторите се опитват да осигурят постоянство, да ускорят изпълнението на кода и да намалят отпечатъка върху Windows системите. Известно е също, че тази кибергрупа има и компонент за macOS. Тази публикация описва промените в най-новата версия на зловреден софтуер за macOS в сравнение с предишната версия (описан от Trend Micro), и също така описва как можете да автоматизирате дешифрирането на низове по време на анализ с помощта на IDA Hex-Rays API.

OceanLotus: Актуализация на зловреден софтуер за macOS

Анализ

Следващите три части описват анализа на проба с хеш SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Файлът се извиква фенерче, антивирусните продукти на ESET го откриват като OSX/OceanLotus.D.

Защита срещу отстраняване на грешки и пясъчник

Подобно на всички двоични файлове на macOS OceanLotus, пробата е пакетирана с UPX, но повечето инструменти за идентификация на опаковчиците не я разпознават като такава. Това вероятно е така, защото те най-вече съдържат подпис, зависим от наличието на низа „UPX“, освен това подписите Mach-O са по-рядко срещани и не се актуализират толкова често. Тази функция затруднява статичното откриване. Интересното е, че след разопаковането входната точка е в началото на участъка __cfstring в сегмента .TEXT. Този раздел има атрибути на флаг, както е показано на изображението по-долу.

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 1. MACH-O __cfstring раздел атрибути

Както е показано на фигура 2, местоположенията на кода в раздела __cfstring ви позволява да измамите някои инструменти за разглобяване, като показвате код като низове.

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 2. Код на задната врата, открит от IDA като данни

След като бъде изпълнен, двоичният файл създава нишка като анти-дебъгер, чиято единствена цел е непрекъснато да проверява за наличието на дебъгер. За този поток:

— Опитва се да откачи всеки дебъгер, извикване ptrace с PT_DENY_ATTACH като параметър на заявка
- Проверява дали някои изключителни портове са отворени чрез извикване на функция task_get_exception_ports
- Проверява дали дебъгерът е свързан, както е показано на фигурата по-долу, като проверява наличието на флага P_TRACED в текущия процес

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 3. Проверка на връзката на дебъгера с помощта на функцията sysctl

Ако наблюдателят открие наличието на програма за отстраняване на грешки, функцията се извиква exit. Освен това пробата след това проверява средата чрез изпълнение на две команди:

ioreg -l | grep -e "Manufacturer" и sysctl hw.model

След това пробата проверява върнатата стойност спрямо твърдо кодиран списък от низове от известни системи за виртуализация: acle, VMware, VirtualBox или паралели. И накрая, следващата команда проверява дали машината е една от следните „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ и „XS“. Това са кодове на системни модели, например „MBP“ означава MacBook Pro, „MBA“ означава MacBook Air и т.н.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}

Основни допълнения

Въпреки че задните команди не са се променили след изследването на Trend Micro, забелязахме няколко други модификации. C&C сървърите, използвани в тази извадка, са сравнително нови и са създадени на 22.10.2018 г.

- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com

URL адресът на ресурса е променен на /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Първият пакет, изпратен до C&C сървъра, съдържа повече информация за хост машината, включително всички данни, събрани от командите в таблицата по-долу.

OceanLotus: Актуализация на зловреден софтуер за macOS

В допълнение към тази промяна на конфигурацията, примерът не използва библиотека за мрежово филтриране libcurl, но външна библиотека. За да го намери, задната врата се опитва да дешифрира всеки файл в текущата директория, използвайки AES-256-CBC с ключа gFjMXBgyXWULmVVVzyxy, подплатени с нули. Всеки файл се дешифрира и записва като /tmp/storeи се прави опит за зареждане като библиотека с помощта на функцията dlopen. Когато опитът за декриптиране доведе до успешно повикване dlopen, задната врата извлича експортирани функции Boriry и ChadylonV, които очевидно отговарят за мрежовата комуникация със сървъра. Нямаме капкомер или други файлове от оригиналното местоположение на извадката, така че не можем да анализираме тази библиотека. Освен това, тъй като компонентът е криптиран, правило на YARA, базирано на тези низове, няма да съответства на файла, намерен на диска.

Както е описано в горната статия, той създава clientID. Този идентификатор е MD5 хешът на върнатата стойност на една от следните команди:

- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
- ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
- ifconfig en0 | awk '/ether /{print $2}' (получи MAC адрес)
- неизвестен екип ("x1ex72x0a“), който се използва в предишни проби

Преди хеширане, "0" или "1" се добавя към върнатата стойност, за да се укажат root привилегии. Това clientID съхранявани в /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ако кодът се изпълнява като root или в ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML във всички останали случаи. Файлът обикновено е скрит с помощта на функцията _chflags, неговото времево клеймо се променя с помощта на командата touch –t със случайна стойност.

Декодиране на низове

Както при предишните опции, низовете са криптирани с помощта на AES-256-CBC (шестнадесетичен ключ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 подплатени с нули и IV, запълнени с нули) чрез функцията CCCrypt. Ключът е променен от предишните версии, но тъй като групата все още използва същия алгоритъм за криптиране на низове, дешифрирането може да бъде автоматизирано. В допълнение към тази публикация, ние пускаме IDA скрипт, който използва Hex-Rays API за дешифриране на низовете, присъстващи в двоичния файл. Този скрипт може да помогне при бъдещ анализ на OceanLotus и анализ на съществуващи проби, които все още не сме успели да получим. Скриптът се основава на универсален метод за получаване на аргументи, предадени на функция. Освен това той търси присвояване на параметри. Методът може да се използва повторно, за да се получи списък с аргументи на функцията и след това да се предаде на обратното извикване.

Познаване на прототипа на функцията разшифровате, скриптът намира всички кръстосани препратки към тази функция, всички аргументи, след което дешифрира данните и поставя обикновен текст в коментар на адреса на кръстосаната препратка. За да работи скриптът правилно, той трябва да бъде настроен на персонализираната азбука, използвана от функцията за декодиране base64, и трябва да бъде дефинирана глобална променлива, съдържаща дължината на ключа (в този случай DWORD, вижте Фигура 4).

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 4. Дефиниция на глобалната променлива key_len

В прозореца на функцията можете да щракнете с десния бутон върху функцията за дешифриране и да щракнете върху „Извличане и дешифриране на аргументи“. Скриптът трябва да постави декриптираните редове в коментари, както е показано на фигура 5.

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 5. Дешифрираният текст се поставя в коментарите

По този начин декриптираните низове се поставят удобно заедно в прозореца на IDA xrefs за тази функция, както е показано на фигура 6.

OceanLotus: Актуализация на зловреден софтуер за macOS
Фигура 6. Функция Xrefs към f_decrypt

Окончателният сценарий може да бъде намерен на Github хранилище.

Продукция

Както вече споменахме, OceanLotus непрекъснато подобрява и актуализира своя инструментариум. Този път кибергрупата е подобрила злонамерения софтуер, за да работи с потребители на Mac. Кодът не се е променил много, но тъй като много потребители на Mac пренебрегват продуктите за сигурност, защитата на зловреден софтуер от откриване е от второстепенно значение.

Продуктите на ESET вече откриваха този файл по време на изследването. Тъй като мрежовата библиотека, използвана за C&C комуникация, сега е криптирана на диска, точният мрежов протокол, използван от нападателите, все още не е известен.

Показатели за компромис

Индикатори за компромис, както и атрибути на MITER ATT&CK също са налични на GitHub.

Източник: www.habr.com

Добавяне на нов коментар