У сакавіку 2019 гады ў VirusTotal, папулярны анлайн-сэрвіс сканавання, быў загружаны новы ўзор шкоднаснага ПА для macOS кібергрупы OceanLotus. Выконваны файл бэкдора валодае тымі ж магчымасцямі, што і папярэдняя вывучаная намі версія малвары для macOS, але яго структура змянілася і яго стала складаней выявіць. Нажаль, мы не змаглі знайсці дроппер, злучаны з гэтым узорам, таму пакуль не ведаем вектар заражэння.
Нядаўна мы апублікавалі
Аналіз
У наступных трох частках апісваецца аналіз узору з хэшам SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2
. Файл называецца flashlightd, антывірусныя прадукты ESET дэтэктуюць яго як OSX/OceanLotus.D.
Антыадладкаванне і абарона ад пясочніц
Як усе macOS-бінарнікі OceanLotus, узор спакаваны з UPX, але большасць сродкаў ідэнтыфікацыі пакавальнікаў не распазнаюць яго як такой. Верагодна, таму, што яны ў асноўным утрымліваюць подпіс, які залежыць ад наяўнасці радка "UPX", акрамя таго, Mach-O сігнатуры сустракаюцца радзей і не так часта абнаўляюцца. Гэтая асаблівасць абцяжарвае статычную выяўленне. Цікава, што пасля распакавання кропка ўваходу знаходзіцца ў пачатку часткі __cfstring
у сегменце .TEXT
. У гэтай частцы ёсць атрыбуты flag, як паказана на малюнку ніжэй.
Малюнак 1. Атрыбуты часткі MACH-O __cfstring
Як паказана на малюнку 2, размяшчэння кода ў раздзеле __cfstring
дазваляе падмануць некаторыя прылады дызасэмблявання, адлюстроўваючы код у выглядзе радкоў.
Малюнак 2. Код бэкдора вызначаецца IDA як дадзеныя
Пасля запуску бінарны файл стварае струмень у якасці сродку абароны ад адладкі, адзінай мэтай якога з'яўляецца сталая праверка наяўнасці дэбагера. Для гэтага паток:
— спрабуе адчапіць любы дэбагер, выклікаючы ptrace
с PT_DENY_ATTACH
у якасці параметра запыту
- Правярае, ці адкрыты некаторыя выключныя парты, выклікаючы функцыю task_get_exception_ports
— Правярае, ці падключаны дэбагер, як паказана на малюнку ніжэй, шляхам праверкі наяўнасці сцяга P_TRACED
у бягучым працэсе
Малюнак 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-сервер, утрымоўвае больш інфармацыі аб хост-машыне, уключаючы ўсе дадзеныя, якія збіраюцца камандамі з табліцы ніжэй.
Акрамя гэтага, змены канфігурацыі, узор выкарыстоўвае для сеткавага фільтравання не бібліятэку 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 ва ўсіх астатніх выпадках. Файл звычайна скрыты з дапамогай функцыі touch –t
са выпадковым значэннем.
Расшыфроўка радкоў
Як і ў папярэдніх варыянтах, радкі зашыфраваны з выкарыстаннем AES-256-CBC (шаснаццатковы ключ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
дапоўнены нулямі, а IV запоўнены нулямі) пасродкам функцыі
Ведаючы прататып функцыі расшыфроўваць, скрыпт знаходзіць усе крыжаваныя спасылкі на гэтую функцыю, усе аргументы, затым расшыфроўвае дадзеныя і змяшчае просты тэкст ўнутры каментара па адрасе крыжаванай спасылкі. Каб скрыпт працаваў правільна, у ім павінен быць усталяваны карыстацкі алфавіт, выкарыстоўваны функцыяй дэкадавання base64, і павінна быць вызначана глабальная зменная, утрымоўвальная даўжыню ключа (у дадзеным выпадку DWORD, гл. малюнак 4).
Малюнак 4. Вызначэнне глабальнай зменнай key_len
У акне Function можна выклікаць правай кнопкай мышы функцыю расшыфроўкі і клікнуць "Выняць і расшыфраваць аргументы". Сцэнар павінен змяшчаць расшыфраваныя радкі ў каментары, як паказана на малюнку 5.
Малюнак 5. Расшыфраваны тэкст змешчаны ў каментары
Такім чынам расшыфраваныя радкі зручна размяшчаюцца разам у акне IDA xrefs для гэтай функцыі, як паказана на малюнку 6.
Малюнак 6. Xrefs to функцыі f_decrypt
Фінальны варыянт сцэнара можна знайсці на
Выснова
Як ужо было сказанае, OceanLotus стала ўдасканальваюць і абнаўляюць свой набор прылад. На гэты раз кібергрупа ўдасканаліла шкоднаснае ПЗ для працы з Мас-карыстальнікамі. Код не моцна змяніўся, але, паколькі многія Мас-карыстальнікі ігнаруюць прадукты для бяспекі, абарона малвары ад выяўлення мае другараднае значэнне.
Прадукты ESET ужо дэтэктавалі гэты файл на момант даследавання. Паколькі сеткавая бібліятэка, выкарыстоўваная для C&C-камунікацыі, зараз зашыфраваная на кружэлцы, дакладны сеткавы пратакол, выкарыстоўваны атакавалымі, пакуль невядомы.
індыкатары кампраметацыі
Індыкатары кампраметацыі, а таксама атрыбуты MITRE ATT&CK таксама даступныя на
Крыніца: habr.com