12 пакетов, 20 строк, миллионы рисков. В NuGet нашли модули, которые начнут убивать процессы через 3 года.
Исследователи обнаружили в публичном реестре NuGet несколько библиотек с тайным саботажным кодом, который запрограммирован активироваться в 2027 и 2028 годах. Заражённые пакеты ориентированы на три популярных движка хранения данных в .NET — Microsoft SQL Server, PostgreSQL и SQLite — а один из компонентов специально маскируется под библиотеку для работы с контроллерами Siemens S7.
Аналитики из компании Socket нашли 9 пакетов , опубликованных под аккаунтом shanhai666. На первый взгляд библиотеки работали как обычные — почти весь код (около 99%) выполнял полезные функции, поэтому разработчики могли не заметить ничего подозрительного. Вместе с тем в каждой скрывался небольшой фрагмент вредоносной логики — примерно 20-строчный модуль, который встраивался в стандартные вызовы приложений.
Техника внедрения основана на механизме расширений C# (extension methods). Эти расширения исполняются при каждом вызове операций с базой данных или при взаимодействии с ПЛК, так что вредоносный блок попадает в поток выполнения без изменения интерфейсов приложения. Внутри проверяется системная дата: если она попадает в жёстко заданный интервал (от 8 августа 2027 года до 29 ноября 2028-го), запускается генератор случайных чисел от 1 до 100. При значении свыше 80 (примерно 20% случаев) вызывается Process.GetCurrentProcess().Kill(), что немедленно завершает текущий процесс.
Для серверных приложений и сервисов с частыми транзакциями такое поведение означает внезапные падения служб и перебои в обработке запросов. В промышленных системах аналогичная логика способна прервать связь с оборудованием и вывести из строя критические узлы управления.
Отдельный риск несёт пакет Sharp7Extend, который выдан за расширение популярной библиотеки Sharp7 — .NET-решения для обмена с ПЛК Siemens S7 . Злоумышленник сознательно использовал близкое имя, рассчитывая, что разработчики найдут его при поиске «улучшений» для Sharp7. В этой подменённой библиотеке реализованы две разные схемы атаки.
Первая схема — немедленное прерывание сессий: при вызове транзакционной функции в 20% случаев происходит форсированное завершение работы, что приводит к остановке обмена с контроллером. Указанный режим действует до 6 июня 2028 года. Вторая схема сложнее: модуль пытается прочитать несуществующее конфигурационное значение, что ломает инициализацию; затем включается фильтр операций записи и задаётся искусственная задержка от 30 до 90 минут. По прошествии указанного интервала записываемые параметры, попадающие под фильтр, имеют 80% шанс быть искаженными. Последствия — исполнительные механизмы не получают команд, уставки не обновляются, защитные системы не срабатывают, технологические параметры остаются прежними либо принимают неверные значения.
Сочетание мгновенного завершения процесса и отложенной порчи записей делает атаку многоступенчатой: сначала нарушается мониторинг и обмен, затем в логике управления закладывается скрытая ошибка, проявляющаяся позже и приводящая к нарушениям безопасности и технологического процесса.
При публикации исследователи отметили, что под аккаунтом shanhai666 изначально было 12 пакетов, но только 9 включали вредоносную вставку; после массовых скачиваний (порядка 9,5 тысячи загрузок) эти учётные записи и пакеты были удалены из каталога. Тем не менее риск остаётся: проекты, которые уже приняли такие зависимости, могут оказаться скомпрометированными в момент активации триггеров.
Практические рекомендации для команд разработки и операторов промышленных сетей таковы. Первое — срочно просмотреть список всех зависимостей и проверить наличие перечисленных пакетов: SqlUnicorn.Core, SqlDbRepository, SqlLiteRepository, SqlUnicornCoreTest, SqlUnicornCore, SqlRepository, MyDbRepository, MCDbRepository и Sharp7Extend. Если обнаружено совпадение — удалить компонент, откатить до безопасной сборки и восстановить приложения из проверенной резервной копии. Второе — провести инвентаризацию загрузок и сборок, чтобы убедиться, что инструментальная цепочка сборки не подтянула заражённые версии.
Для промышленных контроллеров рекомендуется отдельно проверить журналы операций записи: сопоставить записи с ожидаемыми уставками, отследить пропущенные или неверные команды и просмотреть логи срабатывания защит. Там, где это возможно, внедрить валидацию записываемых данных — например, контрольные суммы, подтверждённые транзакции или второй канал подтверждения критичных уставок. Наконец, стоит усилить политику приёма сторонних модулей: запрет на автоматическое добавление непроверенных расширений, цифровая подпись поставщиков и сканирование кода на предмет подозрительных конструкций.
Авторы отчёта подчёркивают, что мотивы и происхождение кампании пока неизвестны, но сама реализация показывает хорошо продуманную атаку на цепочку поставок ПО. Малый по объёму вредоносный фрагмент, встроенный в доверенные библиотеки, может вызвать серьёзные перебои как в ИТ-инфраструктуре, так и в промышленных производствах, если не предпринять срочные меры по обнаружению и устранению угрозы.
Исследователи обнаружили в публичном реестре NuGet несколько библиотек с тайным саботажным кодом, который запрограммирован активироваться в 2027 и 2028 годах. Заражённые пакеты ориентированы на три популярных движка хранения данных в .NET — Microsoft SQL Server, PostgreSQL и SQLite — а один из компонентов специально маскируется под библиотеку для работы с контроллерами Siemens S7.
Аналитики из компании Socket нашли 9 пакетов , опубликованных под аккаунтом shanhai666. На первый взгляд библиотеки работали как обычные — почти весь код (около 99%) выполнял полезные функции, поэтому разработчики могли не заметить ничего подозрительного. Вместе с тем в каждой скрывался небольшой фрагмент вредоносной логики — примерно 20-строчный модуль, который встраивался в стандартные вызовы приложений.
Техника внедрения основана на механизме расширений C# (extension methods). Эти расширения исполняются при каждом вызове операций с базой данных или при взаимодействии с ПЛК, так что вредоносный блок попадает в поток выполнения без изменения интерфейсов приложения. Внутри проверяется системная дата: если она попадает в жёстко заданный интервал (от 8 августа 2027 года до 29 ноября 2028-го), запускается генератор случайных чисел от 1 до 100. При значении свыше 80 (примерно 20% случаев) вызывается Process.GetCurrentProcess().Kill(), что немедленно завершает текущий процесс.
Для серверных приложений и сервисов с частыми транзакциями такое поведение означает внезапные падения служб и перебои в обработке запросов. В промышленных системах аналогичная логика способна прервать связь с оборудованием и вывести из строя критические узлы управления.
Отдельный риск несёт пакет Sharp7Extend, который выдан за расширение популярной библиотеки Sharp7 — .NET-решения для обмена с ПЛК Siemens S7 . Злоумышленник сознательно использовал близкое имя, рассчитывая, что разработчики найдут его при поиске «улучшений» для Sharp7. В этой подменённой библиотеке реализованы две разные схемы атаки.
Первая схема — немедленное прерывание сессий: при вызове транзакционной функции в 20% случаев происходит форсированное завершение работы, что приводит к остановке обмена с контроллером. Указанный режим действует до 6 июня 2028 года. Вторая схема сложнее: модуль пытается прочитать несуществующее конфигурационное значение, что ломает инициализацию; затем включается фильтр операций записи и задаётся искусственная задержка от 30 до 90 минут. По прошествии указанного интервала записываемые параметры, попадающие под фильтр, имеют 80% шанс быть искаженными. Последствия — исполнительные механизмы не получают команд, уставки не обновляются, защитные системы не срабатывают, технологические параметры остаются прежними либо принимают неверные значения.
Сочетание мгновенного завершения процесса и отложенной порчи записей делает атаку многоступенчатой: сначала нарушается мониторинг и обмен, затем в логике управления закладывается скрытая ошибка, проявляющаяся позже и приводящая к нарушениям безопасности и технологического процесса.
При публикации исследователи отметили, что под аккаунтом shanhai666 изначально было 12 пакетов, но только 9 включали вредоносную вставку; после массовых скачиваний (порядка 9,5 тысячи загрузок) эти учётные записи и пакеты были удалены из каталога. Тем не менее риск остаётся: проекты, которые уже приняли такие зависимости, могут оказаться скомпрометированными в момент активации триггеров.
Практические рекомендации для команд разработки и операторов промышленных сетей таковы. Первое — срочно просмотреть список всех зависимостей и проверить наличие перечисленных пакетов: SqlUnicorn.Core, SqlDbRepository, SqlLiteRepository, SqlUnicornCoreTest, SqlUnicornCore, SqlRepository, MyDbRepository, MCDbRepository и Sharp7Extend. Если обнаружено совпадение — удалить компонент, откатить до безопасной сборки и восстановить приложения из проверенной резервной копии. Второе — провести инвентаризацию загрузок и сборок, чтобы убедиться, что инструментальная цепочка сборки не подтянула заражённые версии.
Для промышленных контроллеров рекомендуется отдельно проверить журналы операций записи: сопоставить записи с ожидаемыми уставками, отследить пропущенные или неверные команды и просмотреть логи срабатывания защит. Там, где это возможно, внедрить валидацию записываемых данных — например, контрольные суммы, подтверждённые транзакции или второй канал подтверждения критичных уставок. Наконец, стоит усилить политику приёма сторонних модулей: запрет на автоматическое добавление непроверенных расширений, цифровая подпись поставщиков и сканирование кода на предмет подозрительных конструкций.
Авторы отчёта подчёркивают, что мотивы и происхождение кампании пока неизвестны, но сама реализация показывает хорошо продуманную атаку на цепочку поставок ПО. Малый по объёму вредоносный фрагмент, встроенный в доверенные библиотеки, может вызвать серьёзные перебои как в ИТ-инфраструктуре, так и в промышленных производствах, если не предпринять срочные меры по обнаружению и устранению угрозы.
- Источник новости
- www.securitylab.ru