Исследователи ReversingLabs обнаружили два вредоносных пакета в менеджере пакетов npm с открытым исходным кодом, которые используют GitHub для хранения украденных зашифрованных в Base64 ключей SSH, снятых с систем разработчиков, которые установили вредоносные пакеты npm.
Несколько версий вредоносных пакетов npm, warbeast2000 и kodiak2k, были обнаружены в январе и с тех пор удалены из npm. Однако эта кампания — лишь последний пример того, как киберпреступники и злоумышленники используют менеджеры пакетов с открытым исходным кодом и соответствующую инфраструктуру для поддержки кампаний по поставке вредоносного ПО, направленных на организации-разработчики и конечных пользователей.
Обсуждение: Вредоносные пакеты нацелены на SSH-ключи разработчиков
В последние годы менеджеры пакетов с открытым исходным кодом и репозитории кода стали "нулевой точкой" для вредоносных кампаний. Как отмечается в новом отчете ReversingLabs "Состояние безопасности цепочки поставок программного обеспечения 2024", количество вредоносных пакетов, найденных в менеджерах пакетов с открытым исходным кодом, выросло на 1300 % в период с 2020 по конец 2023 года. Сюда входит все: от малоопасного протестного ПО и автоматических фишинговых кампаний до более изощренных вредоносных кампаний, поставляющих вредоносное ПО, например руткит r77, прямо из пакетов с открытым исходным кодом.
Пакеты на npm получают приватные ключи
В последние недели исследователи ReversingLabs обнаружили два подозрительных пакета npm под названиями warbeast2000 и kodiak2k. Вот что исследовательская группа знает о каждом из них.
Warbeast2000
3 января исследователи ReversingLabs с помощью платформы Software Supply Chain Security компании обнаружили подозрительный пакет warbeast2000, который, судя по всему, был вредоносным. Сам по себе пакет был не очень сложным. Он содержал всего несколько компонентов. Соответствующая страница npm для warbeast2000 была простой и неявно имитировала другой пакет.
Кроме того, на момент обнаружения warbeast2000 находился в процессе разработки. Существовало восемь версий (1.0.0 - 1.0.8), причем с каждой новой версией в пакет добавлялись новые элементы. Вредоносная функциональность была замечена только в последней, опубликованной версии пакета.
Судя по всему, автор пакета находился в процессе создания вредоносного ПО и добавления слоев обмана. К счастью, пакет был обнаружен и удален из npm до того, как это могло произойти.
Что делал warbeast2000? Согласно нашему анализу финальной версии пакета, после его установки на компьютер жертвы запускался постинсталляционный скрипт, который находил и выполнял файл javascript. На втором этапе вредоносный скрипт считывал приватный ключ ssh, хранящийся в файле id_rsa, расположенном в директории <homedir>/.ssh. Затем он загружал ключ в Base64-кодировке в контролируемый злоумышленником репозиторий GitHub. И все. Кроме захвата и копирования SSH-ключа id_rsa, пакет больше никак себя не проявлял.
Выбор ключа id_rsa был естественным, поскольку id_rsa — это имя файла по умолчанию, присваиваемое ssh-ключам при запуске программы ssh-keygen, стандартного компонента пакета SSH в системах Linux и macOS, а также в Git для Windows.
Как уже отмечалось, пакет warbeast2000 на момент обнаружения, вероятно, находился в стадии разработки, а значит, то, что было замечено, может не быть полностью готовым пакетом. Например, возможно, что все содержимое папки .ssh было отправлено в репозиторий GitHub, принадлежащий злоумышленнику.
О пакете warbeast2000 было сообщено администраторам npm, и он был удален примерно 3 января.
Kodiak2k
Вскоре после обнаружения пакета warbeast2000, 5 января, платформа ReversingLabs Software Supply Chain Security выявила еще один пакет npm с очень похожим поведением: kodiak2k. В отличие от warbeast2000, kodiak2k имел более 30 различных версий, и, за исключением нескольких первых, все они были вредоносными.
Подобно warbeast2000, kodiak2k запускает скрипт пост-инсталляции после установки пакета. Этот сценарий загружает еще один файл javascript и выполняет его. Как и в случае с warbeast2000, этот скрипт считывает содержимое каталога <homedir>/.ssh, но при этом он ищет ключ с именем meow. Неясно, имел ли разработчик ввиду конкретный ключ или (что более вероятно) использовал meow как заглушку, пока пакет находился в разработке.
В любом случае, когда и если файл meow будет найден, содержащийся в нем ключ будет закодирован в Base64 и загружен в репозиторий GitHub, как в случае с пакетом warbeast2000.
Более поздние версии пакета kodiak2k также выполняли скрипт, найденный в архивном проекте GitHub, содержащем фреймворк для постэксплойта Empire. Этот скрипт также вызывает инструмент взлома Mimikatz, который обычно используется для дампа учетных данных из памяти процессов. Кроме того, в разных версиях наблюдалась активность с дополнительными функциями, которые необязательно были вредоносными. Например, команда обнаружила функции для запуска notepad.exe, shutdown.exe и локально развернутого исполняемого файла cryptor.exe. Назначение этих функций было неясно, хотя возможно, что злоумышленник, ответственный за создание пакета kodiak2k, тестировал различные вредоносные функции для будущей интеграции в kodiak2k.
О пакете kodiak2k было сообщено администраторам npm, и он был удален примерно 5 января.
Ключи от королевства
Вредоносные субъекты, стремящиеся получить ключи SSH у разработчиков, вызывают тревогу. SSH-ключи дают тем, кто ими владеет, возможность получать доступ к репозиториям GitHub, в том числе содержащим проприетарный (непубличный) код, и вносить в них свой вклад. Как показывают атаки, подобные атакам на SolarWinds и 3CX, такой уровень доступа может оказать серьезное и негативное влияние на безопасность производителя программного обеспечения, а также организаций конечных пользователей, которые развертывают и используют затронутое программное обеспечение: это подпитывает разрушительные атаки на цепочки поставок программного обеспечения.
Ограниченный охват
К счастью, охват этой кампании был ограничен. ReversingLabs наблюдала, как разные аккаунты публиковали на npm пакеты warbeast2000 и kodiak2k. Пакет warbeast2000 был загружен чуть менее 400 раз, в то время как пакет kodiak2k был загружен около 950 раз.
Злоупотребление GitHub становится вирусным
Одной из последних тенденций, отмеченных ReversingLabs и другими компаниями, занимающимися вопросами безопасности, является то, что злоумышленники все чаще используют открытое программное обеспечение и инфраструктуру разработки с открытым исходным кодом для проведения вредоносных кампаний. Эта тенденция включает в себя растущее использование платформы контроля версий GitHub для размещения элементов вредоносной командной и управляющей инфраструктуры.
Например, два года назад мы писали об обнаружении вредоносного npm-пакета, маскирующегося под CSS-инструмент Material Tailwind, использующего GitHub для поиска адреса вредоносного командного и управляющего (C2) сервера. Затем в блоге, опубликованном в августе 2023 года, исследовательская группа ReversingLabs написала о LunaGraber, вредоносной программе с открытым исходным кодом для кражи информации, доступной на GitHub. В октябре исследовательская группа ReversingLabs написала о кампании IAmReboot, в рамках которой распространялись вредоносные программы-загрузчики NuGet, а также обфусцированная версия SeroXen RAT, размещенная в репозитории GitHub. Наконец, в декабре Карло Занки написал об обнаружении пакетов PyPI, которые использовали Gists GitHub для размещения двухэтапных вредоносных полезных нагрузок.
Эти выводы совпадают с данными других организаций, занимающихся вопросами безопасности. Например, компания Recorded Future, занимающаяся анализом угроз, недавно опубликовала отчет, согласно которому GitHub является онлайн-сервисом, наиболее часто используемым злоумышленниками. Это злоупотребление включает в себя целый ряд вредоносных действий, от доставки полезной нагрузки до командования и контроля (C2) и утечки данных (что также было замечено ReversingLabs). Компания Recorded Future назвала такое поведение "жизнью за пределами доверенных сайтов" (LOTS) и заявила, что "ожидается, что оно будет расти по мере того, как [современные постоянные угрозы (APT)] будут все чаще использоваться, а менее искушенные группы быстро последуют их примеру".
Помимо злоупотребления функциями таких платформ, как GitHub, есть опасения, что злоумышленники могут использовать недостатки и уязвимости в этих платформах для дальнейших атак. Например, недавно GitHub раскрыл серьезную уязвимость в GitHub Enterprise Server (GHES), которая потенциально может привести к раскрытию конфиденциальных учетных данных. Об этой уязвимости, CVE-2024-0200, компания сообщила в рамках своей программы вознаграждения за ошибки. Судя по всему, ранее она не была обнаружена или использована. Однако как сообщает SC Magazine, компания заявила, что производит ротацию учетных данных каждый раз, когда они становятся доступными третьей стороне.
Заключение
К счастью, эти вредоносные пакеты были обнаружены и оповещены администраторами npm до того, как они смогли получить широкое распространение. Тем не менее пакеты warbeast2000 и kodiak2k — еще одно доказательство того, что легитимные платформы, такие как GitHub, используются для поддержки атак на цепочки поставок.
Это вызывает беспокойство. Поскольку вредоносных программ с открытым исходным кодом становится все больше, GitHub все чаще используется злоумышленниками для поддержки своих кампаний. Зачастую эти пакеты вредоносного ПО с открытым исходным кодом обладают широкими функциональными возможностями и снабжены подробной документацией, позволяющей даже низкоквалифицированным хакерам ("script kiddies") развернуть их.
Эти последние кампании npm показывают, как злоумышленники начинают использовать платформу GitHub новыми способами. Помимо того, что GitHub Gists и сообщения коммитов используются в качестве инфраструктуры C2, теперь мы видим, как GitHub используется в качестве места для хранения украденной информации.
Поскольку злоумышленники продолжают разрабатывать новые методы создания вредоносных программ, разработчикам, а также исследователям безопасности необходимо быть начеку, чтобы не пропустить новые угрозы, скрывающиеся в публичных репозиториях. Прежде чем включать в пакет программное обеспечение или библиотеку, найденные в менеджерах пакетов, таких как npm или PyPI, разработчики и организации, занимающиеся разработкой, должны провести оценку безопасности этих пакетов, чтобы определить, безопасны ли они для использования.