У разраба открыт GitHub — у них открыт доступ. Всё благодаря одному пробелу

Banana Squad создали маскировку атаки нового поколения.


v361ix6cwofh6npf0ods4vkhqy2v7q71.jpg


На фоне снижения активности на платформах вроде PyPI и npm, где раньше загружались тысячи вредоносных пакетов, угроза для разработчиков сместилась в другую плоскость — в сторону GitHub. Команда ReversingLabs зафиксировала масштабную атаку, в ходе которой злоумышленники, связанные с группировкой Banana Squad, разместили более 60 поддельных репозиториев, замаскированных под популярные Python-инструменты. На первый взгляд это обычные проекты, но внутри скрыт троян.

Кампания отражает новую тенденцию атак на цепочку поставок ПО: подмена доверенных репозиториев на почти идентичные копии, содержащие вредоносный код. Каждый из заражённых репозиториев носил такое же имя, как и оригинал, и визуально выглядел правдоподобно. В них копировались описания, в том числе ключевые слова и эмодзи — чаще всего использовались ракеты и пламя — создавая иллюзию настоящего проекта, оптимизированного под поисковые системы GitHub.

Анализ показал, что за этой схемой стоит уже известная группировка Banana Squad, впервые идентифицированная в 2023 году. Тогда группа массово загружала вредоносные пакеты на open source-платформы под разными именами. Те пакеты были скачаны почти 75 000 раз до того, как были удалены. Их цель заключалась в краже обширного спектра конфиденциальной информации: от данных системы и браузеров до криптовалютных кошельков.

В новой кампании удалось обнаружить 67 поддельных репозиториев GitHub, содержащих сотни заражённых Python-скриптов. Один из ключевых векторов атаки оказался завязан на особенности интерфейса GitHub: длинные строки кода не переносятся на следующую строку, а продолжаются вправо, за пределы экрана. Это позволило вставлять вредоносные участки кода после большого количества пробелов, делая их визуально незаметными даже на экранах с высоким разрешением. Только специализированные инструменты позволяют выявить скрытые фрагменты.


x5s24xporj33gi8wbkhk0y50f2aumvje.png


Троянизированный код в первой строке файла Python (ReversingLabs)

Решающую роль в обнаружении сыграла обратная аналитика URL-адресов. Заражённые скрипты связывались с удалёнными серверами, используя домены вида dieserbenni[.]ru, где в параметре запроса repo= указывалось имя конкретного репозитория. Эти индикаторы позволили команде RL составить перечень подозрительных проектов, после чего каждый архив с исходниками был изучен с помощью их собственной платформы Spectra Intelligence.

В репозиториях использовались фальшивые учётные записи GitHub, каждая из которых содержала лишь один проект — явный признак того, что аккаунты создавались специально для атаки. Помимо обмана с пробелами и длинными строками, внимание аналитиков привлекли характерные «сигнатуры»: динамически сгенерированные строки, встроенные как в README-файлы, так и в тело Python-кода — часто в формате print("..."). Похожие строки находились и в разделе «About» каждого проекта — это добавляло ощущение аутентичности и помогало вводить жертву в заблуждение.


tl5hb243xobclm7ot10audbgxs4g1hw5.png


Динамически сгенерированная строка в файле Python (ReversingLabs)

Технический разбор выявил, что вредоносный код использовал различные методы обфускации и шифрования: Base64, шестнадцатеричную кодировку и библиотеку Fernet из популярного Python-пакета cryptography. Чтобы скрыть адреса загрузки полезной нагрузки, злоумышленники комбинировали эти методы, создавая цепочку расшифровки, аналогичную рецептам в CyberChef. Используя такой рецепт, можно было извлечь адреса следующего этапа атаки.

Визуальные сравнения между оригинальными и заражёнными версиями стали ключевым аргументом для GitHub — все 67 репозиториев были удалены по запросу ReversingLabs. Однако неизвестно, сколько разработчиков успели клонировать эти проекты до блокировки, и были ли они использованы в продакшн-средах. Масштаб угрозы может оказаться намного шире, чем видится сейчас.

Тем временем зафиксировано начало новой волны атак: 6 июня 2025 года обнаружен домен 1312services[.]ru — продолжение предыдущих кампаний, в которых уже использовался 1312stealer[.]ru. И структура URL-адресов, и обфускация вредоносного кода указывают на ту же группу.

Специалисты подчёркивают, что проверка кода "на глаз" уже не является надёжным методом. Трояны прячутся в самых неожиданных местах — даже внутри обычного print(). Чтобы защитить цепочку поставок ПО, рекомендуются два подхода: использование инструментов сравнительного анализа и верификация через контрольные версии. В дополнение, организации могут применить выявленные домены, параметры URL и сигнатуры файлов для настройки систем обнаружения и реагирования на инциденты.