Stuxnet: читаем отчёт Symantec и закрываем LNK-уязвимость там, где патчи не дошли
Symantec и Kaspersky опубликовали полный разбор Stuxnet. Читаем отчёт, оцениваем векторы для промышленных объектов и закрываем MS10-046 там, где патч ещё не встал.
Symantec и Kaspersky Lab опубликовали полные технические отчёты по Stuxnet в начале 2011 года, раскрыв детали четырёх zero-day, двух похищенных сертификатов и PLC-пейлоада под Siemens S7
В конце 2010-го про Stuxnet написали все, кто умеет писать. В начале 2011-го Symantec выложил итоговый отчёт на сорок с лишним страниц, Kaspersky добавил свой разбор. Теперь это не «предположительно сложная угроза» - это задокументированное техническое изделие с понятной архитектурой, известными CVE и конкретными векторами. Мы потратили несколько дней на чтение и прикинули, что из этого касается наших клиентов с промышленными объектами.
Сразу скажем: ни у кого из наших подопечных нет иранских центрифуг. Но Siemens S7 и WinCC - есть. И Windows XP на машинах SCADA с непонятным patch-менеджментом - тоже есть. Вот отсюда и начали.
Четыре zero-day и два сертификата
Из отчёта Symantec следует, что Stuxnet использовал четыре уязвимости нулевого дня одновременно. Это само по себе отдельный разговор - обычно один zero-day это уже повод для паники, а здесь их четыре в одном экземпляре. Перечень:
- MS10-046 - уязвимость обработки LNK-файлов (.lnk): Windows Explorer автоматически загружал иконку ярлыка и выполнял DLL при просмотре директории. Не нужно запускать файл - достаточно открыть папку в Проводнике.
- MS10-061 - Print Spooler, удалённое исполнение через принтерный сервис.
- MS10-073 - повышение привилегий через win32k.sys и обработку клавиатурных раскладок.
- MS10-092 - обход UAC через Task Scheduler.
Плюс два легитимных сертификата Realtek Semiconductor и JMicron - украденных, с них подписаны драйверы руткита. Антивирусы в 2010 году видели подписанный драйвер и радовались.
Что из этого касается промышленных объектов
На большинстве SCADA-площадок, которые мы видели в ходе аудитов, картина примерно одинаковая: Windows XP SP2 или SP3, обновления через WSUS либо вообще без автоматики, USB разрешён «для диагностики», антивирус либо отсутствует, либо с базами прошлого квартала. Сеть - либо полностью изолированная, либо с одним хлипким межсетевым экраном между SCADA и корпоративной сетью.
В такой конфигурации Stuxnet - точнее, его вектор через LNK - воспроизводится без особых усилий. Технику достаточно воткнуть в USB-порт флешку с ярлыком, и Explorer сам сделает остальное, даже если автозапуск выключен. Именно это делало MS10-046 особенно неприятной: она обходила защиту, которую большинство систем-администраторов считали достаточной.
Патч MS10-046 Microsoft выпустил ещё в августе 2010-го. Тем не менее на нескольких площадках мы его не нашли.
Как закрывали
Вариантов было два: поставить патч или обходной путь через групповую политику (отключить отображение иконок LNK). Microsoft публиковал workaround ещё летом - для тех, кто по каким-то причинам не может накатить обновление быстро.
На площадках, где WSUS работал и был настроен, патч уже стоял - это хорошая новость. Проблема была там, где WSUS либо не развёрнут вовсе, либо машины SCADA в него не попали: отдельный сегмент, отдельные учётки, «мы не трогаем, чтоб не сломать».
Алгоритм, который применили:
- Инвентаризация -
wmic qfe listпо всем машинам в сегменте SCADA, отбираем те, где KB2286198 (патч MS10-046) отсутствует. - Ручная установка - на изолированных системах патч закатывается через USB или с сетевой шары в том же сегменте. Это медленно, но альтернативы нет, если WSUS туда не ходит.
- Временный workaround для машин, которые нельзя перезагружать прямо сейчас: через групповую политику или реестр убираем отображение иконок для LNK и PIF. Проводник начинает показывать стандартные иконки - некрасиво, зато вектор закрыт до перезагрузки и установки патча.
- USB-политика - там, где USB используется только для диагностики раз в квартал, заблокировали через GPO или реестровый ключ USBSTOR. Не везде это возможно (некоторые промышленные устройства подключаются только через USB), но где возможно - закрыли.
Что не закрыли и почему
Остальные три CVE из арсенала Stuxnet - для нас в меньшем приоритете, и вот почему. MS10-061 (Print Spooler) актуален только если SCADA-машина является принтерным сервером или имеет SMB-доступ из сети - на большинстве площадок этого нет. MS10-073 и MS10-092 - локальное повышение привилегий, они требуют, чтобы атакующий уже выполнил что-то в контексте непривилегированного пользователя. То есть сначала нужен первоначальный вход, а если периметр не пробит - эти CVE не начальные, а вспомогательные.
Это не значит, что патчи не нужны. Это значит, что при ограниченном окне обслуживания на промышленном объекте мы расставляем приоритет: LNK первым, остальное - в ближайший плановый останов.
Что ещё вынесли из отчёта
Symantec подробно описывает механику распространения через Step 7 - проект Siemens. Stuxnet искал установленный Step 7 и заражал проектные файлы, которые потом открывались на других машинах инженерами. Это вектор, который совершенно не вписывается в типовую модель угроз для АСУ ТП: файл проекта как носитель вредоноса. На площадках с несколькими инженерными станциями это важно учитывать при описании threat model.
Руткит скрывает свои файлы и реестровые ключи - стандартный DKOM. На заражённой системе вы не увидите следов через обычный Explorer или regedit. Детектирование - либо антивирус с обновлёнными базами, либо загрузка с доверенного носителя и проверка оффлайн.
Из практического: Kaspersky Detection Tool для Stuxnet мы прогнали на всех SCADA-машинах в сегментах клиентов. На изолированных системах с несвежими антивирусными базами это единственный способ быстро получить ответ. Все чисто - но это не повод расслабляться, потому что инструмент проверяет именно Stuxnet, а не всё, что могло прийти тем же вектором.
Где мы сейчас
Патч MS10-046 закрыт везде, где были доступ и окно обслуживания. На двух объектах окно - только в плановый останов, который запланирован на март. До тех пор - workaround через GPO и физическое ограничение USB. Не идеально, но лучше, чем ничего.
Общее наблюдение после этой работы: проблема не в Stuxnet специфически. Проблема в том, что промышленные сегменты живут по логике «не трогай, пока работает», и patch-менеджмент туда не доходит. Stuxnet просто сделал это видимым - по крайней мере для тех, кто читает технические отчёты, а не только новостные заголовки.