Атака на AhsayCBS: пять семейств веб-шеллов и имплант на серверах бэкапов

Атака на AhsayCBS: пять семейств веб-шеллов и имплант на серверах бэкапов

Атака на консоль управления AhsayCBS обернулась вторжением с долгим следом. На серверах, чья задача - хранить резервные копии, остались пять семейств веб-шеллов, два разных майнера, средства туннелирования трафика и собственный имплант. Веб-шелл - скрипт на сервере, через который выполняют команды и управляют машиной удалённо. Исправления закрывают точку входа, но не убирают уже посаженное: файлы и задачи планировщика остаются на месте.

Описание

По данным Huntress, серверы одной из организаций эксплуатировали с 8 по 11 октября 2026 года - до выхода внеплановых исправлений 10.3.4.45 для ветки v10 и 9.15.2.70 для версий с 7 по 9. По итогам проверки актуальное исправление закрывает ту точку входа, которую наблюдали в атаке. Активность совпала с более ранней кампанией: шеллы лежали в веб-каталогах самой AhsayCBS, а в журналах доступа остался адрес, уже фигурировавший в первой публикации. Инструменты повторялись на разных хостах: совпадающие файлы и задачи, созданные в одну ночь, указывали на одного оператора.

Вход открывала цепочка из двух уязвимостей. Первая, CVE-2026-105133, позволяла обойти аутентификацию в программном интерфейсе консоли; вторая, CVE-2026-105134, давала внедрение команд и выполнение кода с правами SYSTEM - служебной учётной записи Windows с максимальными правами. Причины - ошибки в проверке входных данных и в аутентификации. В записи CVE вторую оценили в 10 по CVSS 3.1, и её эксплойт уже опубликован.

Шеллы вели себя по-разному: один сверял ключ в запросе со своей копией и при несовпадении отдавал обычную ошибку 404, так что сканер видел пустую страницу. После работы другое семейство умело удалять себя - отсутствие файла на диске ничего не доказывает. Помимо рабочих каталогов, копии шеллов нашлись в путях, повторяющих Linux-раскладку, включая opt, usr и home: эксплойт перебирал типовые места установки, не подстраиваясь под одну систему.

Один из шеллов выдавал себя за внутренний сервис предпросмотра картинок. Зашифрованный код он доставал из младших битов пикселей загруженного PNG и запускал в памяти, а его запросы в журнале доступа выглядели как обычная загрузка изображений. Маскировка доходила до комментария в коде, описывавшего постороннюю конечную точку. Разобрали только загрузчик: какой класс он получает, не установлено.

Самым содержательным файлом оказался main.py во встроенном дистрибутиве Python, запускавшийся из ветки автозагрузки реестра. Скрипт искал рядом файл с именем по хешу системного идентификатора машины и без него завершался, что мешало бы ему работать в песочнице или на машине аналитика. При наличии метки он копировал блок в исполняемую память и запускал отдельным потоком, а загрузчик внутри отражал 64-битную библиотеку без записи на диск; в её строках нашлись домен управляющего сервера и признаки обращений к публичным DNS-over-HTTPS резолверам.

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

Индикаторы компрометации

Комментарии: 0