OceanLotus: абнаўленне Малвары для macOS

У сакавіку 2019 гады ў VirusTotal, папулярны анлайн-сэрвіс сканавання, быў загружаны новы ўзор шкоднаснага ПА для macOS кібергрупы OceanLotus. Выконваны файл бэкдора валодае тымі ж магчымасцямі, што і папярэдняя вывучаная намі версія малвары для macOS, але яго структура змянілася і яго стала складаней выявіць. Нажаль, мы не змаглі знайсці дроппер, злучаны з гэтым узорам, таму пакуль не ведаем вектар заражэння.

Нядаўна мы апублікавалі пост пра OceanLotus і пра тое, як аператары спрабуюць забяспечыць персістэнтнасць, паскорыць выкананне кода і звесці да мінімуму сляды прысутнасці ў сістэмах Windows. Вядома таксама, што ў гэтай кібергрупы ёсць і кампанент для macOS. У дадзеным пасце падрабязна апісваюцца змены ў найноўшай версіі малвары для macOS у параўнанні з папярэднім варыянтам (апісаным Trend Micro), а таксама распавядаецца, як пры аналізе можна аўтаматызаваць расшыфроўку радкоў з дапамогай IDA Hex-Rays API.

OceanLotus: абнаўленне Малвары для macOS

Аналіз

У наступных трох частках апісваецца аналіз узору з хэшам SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Файл называецца flashlightd, антывірусныя прадукты ESET дэтэктуюць яго як OSX/OceanLotus.D.

Антыадладкаванне і абарона ад пясочніц

Як усе macOS-бінарнікі OceanLotus, узор спакаваны з UPX, але большасць сродкаў ідэнтыфікацыі пакавальнікаў не распазнаюць яго як такой. Верагодна, таму, што яны ў асноўным утрымліваюць подпіс, які залежыць ад наяўнасці радка "UPX", акрамя таго, Mach-O сігнатуры сустракаюцца радзей і не так часта абнаўляюцца. Гэтая асаблівасць абцяжарвае статычную выяўленне. Цікава, што пасля распакавання кропка ўваходу знаходзіцца ў пачатку часткі __cfstring у сегменце .TEXT. У гэтай частцы ёсць атрыбуты flag, як паказана на малюнку ніжэй.

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

Пасля гэтага ўзор правярае якое вяртаецца значэнне па цвёрда закадаваным спісе радкоў вядомых сістэм віртуалізацыі: акл, VMware, VirtualBox або паралелі. Нарэшце, наступная каманда правярае, ці з'яўляецца машына адной з наступных "MBP", "MBA", "MB", "MM", "IM", "MP" and "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

Акрамя гэтага, змены канфігурацыі, узор выкарыстоўвае для сеткавага фільтравання не бібліятэку ліберык, а знешнюю бібліятэку. Каб знайсці яе, бэкдор спрабуе расшыфраваць кожны файл у бягучым каталогу, выкарыстоўваючы AES-256-CBC з ключом gFjMXBgyXWULmVVVzyxy, дапоўненым нулямі. Кожны файл расшыфроўваецца і захоўваецца як /tmp/store, а спроба яго загрузіць як бібліятэку зроблена з выкарыстаннем функцыі падзенне. Калі спроба расшыфроўкі прыводзіць да паспяховага выкліку dlopen, бэкдор здабывае экспартаваныя функцыі Boriry и ChadylonV, якія, па ўсёй бачнасці, адказваюць за сеткавае ўзаемадзеянне з серверам. У нас няма дроппера ці іншых файлаў з зыходнага месцазнаходжання ўзору, таму мы не можам прааналізаваць гэтую бібліятэку. Больш таго, паколькі кампанент зашыфраваны, YARA-правіла, заснаванае на гэтых радках, не будзе адпавядаць файлу, знойдзенаму на дыску.

Як апісана ў вышэйзгаданым артыкуле, ствараецца cliendID. Гэты ідэнтыфікатар з'яўляецца хешам 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 прывілеяў. Гэты Ідэнтыфікатар кліента захоўваецца ў /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, які выкарыстоўвае API Hex-Rays для расшыфроўкі радкоў, якія прысутнічаюць у бінарным файле. Гэты скрыпт можа дапамагчы ў будучыні аналізе OceanLotus і аналізе існуючых узораў, якія мы пакуль не змаглі атрымаць. У аснове сцэнара - універсальны метад атрымання аргументаў, перададзеных функцыі. Акрамя таго, ён шукае назначэння параметраў. Метад можна выкарыстоўваць паўторна, каб атрымаць спіс аргументаў функцыі і затым перадаць на зваротны выклік (callback).

Ведаючы прататып функцыі расшыфроўваць, скрыпт знаходзіць усе крыжаваныя спасылкі на гэтую функцыю, усе аргументы, затым расшыфроўвае дадзеныя і змяшчае просты тэкст ўнутры каментара па адрасе крыжаванай спасылкі. Каб скрыпт працаваў правільна, у ім павінен быць усталяваны карыстацкі алфавіт, выкарыстоўваны функцыяй дэкадавання base64, і павінна быць вызначана глабальная зменная, утрымоўвальная даўжыню ключа (у дадзеным выпадку DWORD, гл. малюнак 4).

OceanLotus: абнаўленне Малвары для macOS
Малюнак 4. Вызначэнне глабальнай зменнай key_len

У акне Function можна выклікаць правай кнопкай мышы функцыю расшыфроўкі і клікнуць "Выняць і расшыфраваць аргументы". Сцэнар павінен змяшчаць расшыфраваныя радкі ў каментары, як паказана на малюнку 5.

OceanLotus: абнаўленне Малвары для macOS
Малюнак 5. Расшыфраваны тэкст змешчаны ў каментары

Такім чынам расшыфраваныя радкі зручна размяшчаюцца разам у акне IDA xrefs для гэтай функцыі, як паказана на малюнку 6.

OceanLotus: абнаўленне Малвары для macOS
Малюнак 6. Xrefs to функцыі f_decrypt

Фінальны варыянт сцэнара можна знайсці на Github рэпазітар.

Выснова

Як ужо было сказанае, OceanLotus стала ўдасканальваюць і абнаўляюць свой набор прылад. На гэты раз кібергрупа ўдасканаліла шкоднаснае ПЗ для працы з Мас-карыстальнікамі. Код не моцна змяніўся, але, паколькі многія Мас-карыстальнікі ігнаруюць прадукты для бяспекі, абарона малвары ад выяўлення мае другараднае значэнне.

Прадукты ESET ужо дэтэктавалі гэты файл на момант даследавання. Паколькі сеткавая бібліятэка, выкарыстоўваная для C&C-камунікацыі, зараз зашыфраваная на кружэлцы, дакладны сеткавы пратакол, выкарыстоўваны атакавалымі, пакуль невядомы.

індыкатары кампраметацыі

Індыкатары кампраметацыі, а таксама атрыбуты MITRE ATT&CK таксама даступныя на GitHub.

Крыніца: habr.com

Дадаць каментар