Исследователи кибербезопасности обнаружили новое семейство вредоносного программного обеспечения, которое использует глубоко модифицированные версии утилиты для упаковки Python-скриптов PyInstaller, чтобы эффективно скрывать свои вредоносные нагрузки и блокировать стандартные методы анализа. Два тесно связанных образца, получившие названия «PDFly» и «PDFClick», представляют собой исполняемые файлы, скомпилированные с помощью PyInstaller. Однако они намеренно ломают стандартные инструменты распаковки, что вынуждает аналитиков разрабатывать специальные методы реверс-инжиниринга для расшифровки кода.
Описание
Обычно для извлечения встроенных Python-модулей из бинарных файлов, созданных PyInstaller, специалисты используют утилиты вроде pyinstxtractor-ng. Однако в случае с PDFly и PDFClick этот стандартный подход не срабатывает. Инструмент даже не распознаёт файлы как исполняемые файлы PyInstaller, поскольку злоумышленники изменили стандартный «волшебный» cookie-маркер в оверлее (overlay) файла. Инспекция кода в IDA Pro подтвердила, что стаб (stub) PyInstaller был изменён: строки частично повреждены, а значение cookie в памяти (например, в переменной local_80) заменено. Это первая линия обороны, которая блокирует автоматический анализ.
Чтобы обойти это препятствие, исследователь вручную пропатчил скрипт pyinstxtractor-ng. Сначала ожидаемое стандартное «волшебное» значение в скрипте было заменено на пользовательский cookie, обнаруженный в модифицированном стабе. После этого возникла ошибка при проверке наличия маркера «PYZ\0» внутри пакета. Утверждение (assertion), отвечающее за эту проверку, оказалось несущественным для процесса извлечения, поэтому его просто удалили. Благодаря этим изменениям утилита смогла извлечь встроенные файлы, но всё содержимое архива PYZ оставалось зашифрованным.
Статический анализ стаба с помощью инструментов CAPA и IDAScope не выявил явных рутин шифрования, была обнаружена лишь логика сжатия. Это указывало на то, что механизм дешифровки реализован в другом месте. Внимание аналитика переключилось на модули "bootstrap" и "pyimod", которые распаковываются вместе со стабом. Эти модули не были зашифрованы, и их удалось декомпилировать. С помощью инструмента PyLingual исследователь обработал Python 3.13 байт-код из файла "pyimod01_archive.pyc" и идентифицировал пользовательскую двухэтапную XOR-схему, обёрнутую вокруг распаковки zlib.
Дизассемблирование показало, что данные архива сначала обрабатываются операцией XOR с 13-байтным ключом ("SCbZtkeMKAvyU"), затем передаются в "zlib.decompress", после чего снова проходят через XOR с 7-байтным ключом ("KYFrLmy"), прежде чем быть развёрнутыми в обратном порядке и демаршализированными. В виде кода логика сводится к следующей последовательности: XOR с ключом 1, декомпрессия, XOR с ключом 2, обратный порядок байт, демаршализация. Интегрировав эту последовательность в pyinstxtractor-ng, аналитик смог успешно извлечь и расшифровать встроенный Python байт-код как из PDFly, так и из PDFClick.
Поскольку разные образцы в этом кластере используют различные cookie-маркеры и XOR-ключи, исследователь пошёл дальше и создал более универсальный экстрактор. Вспомогательная функция сканирует оверлей PE-файла, чтобы найти правдоподобные cookie PyInstaller, проверяя поля длины и смещения таблицы содержимого, а затем динамически восстанавливает «волшебное» значение. Другая процедура анализирует "pyimod01_archive.pyc" с помощью модуля "marshal" Python, проходит по методу "ZlibArchiveReader.extract" и автоматически извлекает XOR-ключи из констант "<genexpr>". Благодаря этим дополнениям модифицированный скрипт может адаптироваться к множеству изменённых образцов PyInstaller и надёжно восстанавливать их зашифрованные Python-нагрузки, закладывая основу для более глубокого поведенческого анализа угроз вроде PDFly.
Эти находки подчёркивают растущую тенденцию среди создателей вредоносного ПО к использованию легитимных инструментов разработки, таких как PyInstaller, и их последующей глубокой модификации для противодействия анализу. Подобные техники значительно повышают порог входа для исследователей, требуя от них не только знания стандартных процедур, но и навыков низкоуровневого реверс-инжиниринга и создания кастомных инструментов. В результате время между обнаружением угрозы и её полным анализом увеличивается, что потенциально продлевает жизненный цикл вредоносной кампании. Эксперты рекомендуют специалистам по безопасности и исследователям угроз обновлять свои методики анализа, уделяя особое внимание аномалиям в структуре легитимных упаковщиков и компиляторов.
Индикаторы компрометации
SHA256
- 09474277051fc387a9b43f7f08a9bf4f6817c24768719b21f9f7163d9c5c8f74
- 8c9d9150efa35278afcb23f2af4c4babcc4dd55acd9e839bed4c04cb5a8d9c3f
