Исследователи обнаружили ранее неизвестную версию шифровальщика-вымогателя GonnaCry, скомпилированную для операционной системы macOS. Этот образец представляет собой прецедент образовательного вредоносного ПО, который демонстрирует серьезные недостатки в реализации, делающие его практически безвредным в текущем состоянии. Однако его появление подчеркивает важность понимания методик киберпреступников.
Описание
GonnaCry изначально появился в 2017 году как открытый образовательный проект на GitHub, созданный разработчиком Тарсисио Мариньо для демонстрации принципов работы программ-вымогателей. К 2021 году злоумышленники адаптировали его код для реальных атак на Linux-системы, что привело к детектированию угрозы антивирусными компаниями. Нынешняя находка представляет собой версию для macOS, которая сохранила все основные черты оригинального proof-of-concept.
Анализ образца показал, что это Mach-O исполняемый файл для архитектуры arm64, практически идентичный Linux-версии. При этом в коде сохранились специфические Linux-пути, такие как .local/share/Trash/ и /media/, что указывает на кросскомпиляцию без полноценной адаптации под macOS. Интересно, что в бинарнике обнаружен путь /home/tarcisio/tests/, предполагающий возможное участие оригинального разработчика в создании этой версии.
Функциональность вредоносной программы следует стандартному сценарию шифровальщиков. Сначала она обнаруживает домашний каталог пользователя, рабочий стол и другие ключевые директории. Затем выполняется рекурсивный поиск файлов с определенными расширениями, включая документы, изображения, архивы и базы данных. Полный список целевых расширений содержит более 100 элементов, что типично для современных вымогателей.
Критическим недостатком реализации стала система шифрования. Программа использует алгоритм Blowfish с ключами, генерируемыми через стандартную функцию rand() без инициализации seed. Следовательно, каждый запуск создает идентичные ключи и векторы инициализации. Дополнительно, ключевой материал ограничен 78 символами вместо полного 256-байтового диапазона, что катастрофически снижает энтропию.
После шифрования программа переименовывает файлы, добавляя расширение .GNNCRY, а оригиналы подвергаются безопасному удалению через перезапись нулями. При этом все ключи и векторы инициализации сохраняются в открытом виде в файле enc_files.gc на рабочем столе, что позволяет бесплатно восстановить данные без выплаты выкупа.
Практические испытания показали, что современные системы защиты macOS эффективно блокируют выполнение вредоносной программы. Gatekeeper, XProtect и System Integrity Protection последовательно предотвращали запуск, требуя от пользователя сознательного отключения множества защитных механизмов. Даже после обхода карантинных атрибутов система продолжала блокировать выполнение.
Важно отметить, что образец зависит от библиотеки OpenSSL версии 3, распространяемой через пакетный менеджер Homebrew. Отсутствие этой зависимости делает программу неработоспособной на большинстве стандартных систем macOS.
Эксперты подчеркивают, что обнаруженный образец не представляет реальной угрозы для пользователей. Его поведение полностью соответствует образовательному proof-of-concept: массовое чтение файлов, последовательное шифрование, создание файлов с ключами в открытом виде и демонстрационный ransom note. Отсутствие механизмов устойчивости (persistence) и сетевых функций дополнительно подтверждает тестовый характер сборки.
Тем не менее, этот случай демонстрирует несколько важных аспектов кибербезопасности. Во-первых, образовательные проекты по безопасности могут непреднамеренно стать источником вдохновения для злоумышленников. Во-вторых, даже примитивная реализация вредоносного ПО требует тщательного анализа, поскольку будущие версии могут быть усовершенствованы. В-третьих, встроенные механизмы защиты современных операционных систем эффективно противостоят не только сложным угрозам, но и экспериментальным разработкам.
Специалисты рекомендуют пользователям macOS не отключать системные механизмы безопасности без крайней необходимости и регулярно обновлять операционную систему. Для организаций важность заключается в необходимости многоуровневой защиты, включающей как технические controls, так и обучение пользователей. Хотя данный конкретный образец не опасен, его появление напоминает, что угроза вымогателей продолжает эволюционировать и требует постоянного внимания со стороны специалистов по информационной безопасности.
Индикаторы компрометации
SHA256
- 4379a2f58d3088233e7f051d882a9ce934960488aaaba640c26785645bb711c2
Yara
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | rule GNNCRY_Ransomware_macOS { meta: description = "Detects GNNCRY macOS ransomware" author = "Tonmoy Jitu" date = "2025-11-15" malware_family = "GNNCRY" strings: // Ransom note text $ransom_note = "Sup brother, all your files below have been encrypted, cheers!" ascii wide // File artifacts $extension = ".GNNCRY" ascii wide $key_file = "enc_files.gc" ascii wide $ransom_file = "your_encrypted_files.txt" ascii wide // Extension list (unique to this malware) $ext_list1 = "doc docx xls xlsx ppt pptx pst ost msg eml vsd vsdx" ascii $ext_list2 = "vdi vmdk vmx gpg aes ARC PAQ bz2 tbk bak tar tgz" ascii // Linux paths on macOS (suspicious) $linux_path1 = ".local/share/Trash/" ascii $linux_path2 = "/media/" ascii // Portuguese debug strings $debug_pt1 = "nao abriu" ascii $debug_pt2 = "abriu" ascii $debug_pt3 = "Arquivos ainda n" ascii // Blowfish encryption $crypto1 = "EVP_bf_cbc" ascii $crypto2 = "EVP_CipherInit_ex" ascii $crypto3 = "EVP_CipherUpdate" ascii $crypto4 = "EVP_CipherFinal_ex" ascii // Key generation charset $keygen_charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-#@$%&(){};'?!" ascii condition: // Must be Mach-O executable uint32(0) == 0xfeedfacf or uint32(0) == 0xcefaedfe or uint32(0) == 0xfeedface or uint32(0) == 0xcffaedfe and filesize < 5MB and ( ($ransom_note and $extension and $key_file) or (2 of ($ext_list*) and 2 of ($crypto*)) or (1 of ($linux_path*) and 1 of ($debug_pt*) and 2 of ($crypto*)) or ($keygen_charset and 3 of ($crypto*) and $extension) ) } |