Всплеск атак на уязвимость CVE-2021-35394 в устройствах, подключённых к интернету, привёл к обнаружению ботнета Cling. Он заражает маршрутизаторы, точки доступа, камеры и видеорегистраторы, а команды управления прячет внутри трафика, который внешне неотличим от обычной служебной активности. Расчёт злоумышленников понятен: администраторы и системы мониторинга редко обращают внимание на такой обмен данными, поскольку его постоянно создают средства видеосвязи и браузеры.
Описание
Уязвимость CVE-2021-35394 затрагивает диагностический компонент набора разработки Realtek Jungle SDK (комплект инструментов для создания прошивок сетевых устройств). Ошибка позволяет удалённо выполнить произвольную команду на устройстве. Патч вышел несколько лет назад, но владельцы техники редко обновляют прошивки, поэтому оборудование остаётся открытым годами. Захватив устройство, Cling сразу пытается распространиться дальше и подбирает новые цели по всему адресному пространству. Внутри вредоносной программы есть заготовки для эксплуатации ещё нескольких похожих ошибок в маршрутизаторах и видеорегистраторах разных производителей.
После запуска Cling копирует себя в скрытые места файловой системы и прописывается в сценарии загрузки - так он снова стартует после перезагрузки. Ещё один приём касается подмены служебной утилиты загрузки файлов. Вредоносная программа перемещает оригинал, сохраняет его новое расположение в отдельном файле, а на освободившееся имя ставит собственную копию. Любой вызов утилиты на заражённом устройстве приводит к повторному запуску Cling; сама утилита при этом отрабатывает штатно, поэтому сбоев в работе оборудования никто не замечает. По данным Nozomi Networks, такое закрепление действует и на устройствах с классическими системами инициализации, и на компактных встраиваемых платформах.
Главная особенность Cling - схема управления. Протокол STUN (служебный протокол для определения внешнего адреса и номера порта при соединениях через механизм трансляции сетевых адресов) создан, чтобы помогать двум узлам находить друг друга. В корпоративных сетях такой трафик постоянен: его создают приложения для видеоконференций, мессенджеры и браузеры. Ботнет пользуется этим обстоятельством. Заражённое устройство каждые несколько секунд обращается к списку общедоступных STUN-серверов и получает от них сведения о своём внешнем адресе и об открытых портах. Затем оно отправляет серверам собственное регистрационное сообщение с перечнем этих портов и меткой способа заражения. В результате оператор узнаёт, куда отправлять команды.
Дальше начинается самое интересное. Команды приходят на открытые порты в виде одиночных UDP-пакетов (датаграмм, которые передают без установления соединения), а текст задания и его параметры спрятаны в служебном поле, где по стандарту должен стоять случайный набор символов. Формально это уже не STUN, однако по внешним признакам пакеты выглядят его продолжением.
Источник команд тоже оказался неочевидным. Пакеты с заданиями приходили с адреса, принадлежащего одному из самых известных общедоступных STUN-серверов. Иными словами, оператор не просто прятал команды в похожих пакетах, а выдавал их за ответы узнаваемого сервиса. Проверить догадку удалось экспериментом: исследователи отправляли разным серверам списка несовпадающие наборы портов. Через несколько часов команды пришли именно на те порты, которые были сообщены только одному подозрительному узлу. Наиболее вероятное объяснение - подмена обратного адреса в сети оператора, где не проверяют его подлинность.
Практическая угроза от такой маскировки велика. Пакет с непонятным содержимым от незнакомого узла вызывает вопросы у службы безопасности и срабатывания на межсетевом экране. Тот же самый пакет, оформленный как ответ известного сервиса после того, как заражённое устройство само начало обмен, сливается с фоном.
Набор доступных оператору действий широк. Он может загрузить и запустить новую полезную нагрузку (исполняемый код, который доставляют на устройство); дать команду на сканирование адресного пространства и распространение ботнета; открыть туннель на устройстве и принимать через него внешние подключения; превратить заражённый узел в промежуточное звено для пересылки чужого трафика; запустить атаку на отказ в обслуживании по заданной цели и на заданное время. Среди целей, по которым оператор отдавал команды наводнения, оказались провайдер в Южной Корее, вычислительный кластер университета в США и игровые серверы Minecraft. Часть заданий касалась дальнейшего распространения - заражения новых устройств через уже известные уязвимости.
Защита здесь строится на нескольких простых вещах. Владельцам техники нужно проверить, какие их устройства смотрят в интернет, и закрыть к ним доступ извне, если это не требуется. Прошивки на уязвимых маршрутизаторах, камерах и регистраторах следует обновить; там, где обновление невозможно, устройство изолируют в отдельном сегменте сети. Сетевым службам полезно присмотреться к частым обращениям к STUN-серверам с интервалом в несколько секунд и к нестандартным сообщениям на их адреса. На самом устройстве следы Cling выдают скрытые копии программы, лишние строки в сценариях загрузки и подменённая утилита загрузки файлов вместе с сохранённым оригиналом.
Cling не изобретает новых способов заражения - он опирается на давно известные ошибки в прошивках и перебирает открытые устройства. Новизна в другом: управление построено на репутации чужой инфраструктуры и на повседневном протоколе, который никого не удивляет. Для специалистов это означает, что проверка по репутации адреса перестаёт быть надёжным фильтром, а наблюдать за поведением нужно и внутри привычного трафика. Незакрытое устройство на периметре, в свою очередь, легко становится точкой входа в остальную сеть.