WannaCry: анатомия атаки - EternalBlue, DoublePulsar, дроппер, шифровальщик
12 мая 2017 WannaCry заразил сотни тысяч машин через EternalBlue. Разбираем цепочку: эксплойт, имплант, дроппер, шифрование. Наши клиенты не пострадали - MS17-010 стоял с марта.
WannaCry (12 мая 2017) - глобальная эпидемия шифровальщика через EternalBlue/SMBv1 на порту 445
12 мая всё понеслось. WannaCry начал распространяться примерно в 8 утра по UTC - сначала Испания, потом Великобритания, потом всё остальное. К вечеру счёт заражённых шёл на десятки тысяч машин, NHS в UK легла, Telefonica вывесила внутреннее объявление с просьбой немедленно выключить компьютеры.
Нам с клиентами повезло: MS17-010 стоял с марта, SMBv1 мы отключили в апреле. Но пост-мортем полезен независимо от того, пострадал ты или нет - именно чтобы понять, почему сработало у других.
Цепочка атаки
WannaCry - не просто шифровальщик. Это червь со встроенным эксплойтом, что и объясняет скорость распространения. Разберём по слоям.
EternalBlue - точка входа. Уязвимость в SMBv1, MS17-010, которую мы разбирали ещё в марте. На порту 445 без аутентификации, через специфический паттерн TransactNamedPipe-запросов - переполнение в ядре Windows, RCE на уровне SYSTEM. Покрытие огромное: XP, Vista, 7, 8, 2003, 2008, 2008 R2, 2012. Windows 10 не берёт.
DoublePulsar - имплант после входа. После успешной эксплуатации EternalBlue в ядро устанавливается DoublePulsar - тот самый из апрельского дампа Shadow Brokers. Никакого файла на диске, никакого процесса в диспетчере задач. Только хук в ядре, который слушает входящие SMB-пакеты со специфическим значением мультиплексора. Через этот хук передаётся следующий payload.
Дроппер. Через DoublePulsar в систему подгружается основной модуль WannaCry. Он распаковывает себя, проверяет наличие kill switch домена (про это ниже), если домен не резолвится - запускает шифрование и параллельно начинает сканировать сеть на порту 445.
Сканирование и распространение. Червь сканирует случайные подсети из интернета и локальную сеть. На каждый доступный 445 отправляет EternalBlue-пейлоад. Если хост уязвим - DoublePulsar, дроппер, шифрование, и дальше по сети. Именно поэтому скорость распространения была такой: один заражённый хост в корпоративной сети без межсегментной блокировки 445 мог за час накрыть всё.
Шифрование. AES-128 на каждый файл, ключ AES шифруется RSA-2048. Приватный RSA-ключ уходит операторам. Платить предлагается в биткойнах, но несколько исследователей быстро установили, что операторы не отслеживают платежи - выкуп технически не приводил к расшифровке.
Kill switch и его роль
Одна странная деталь: перед запуском шифровальщик пытается подключиться к домену вида iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com. Если домен резолвится - WannaCry завершает работу. Если нет - идёт дальше.
Маркус Хатчинс из MalwareTech зарегистрировал этот домен почти случайно во время анализа - и волна остановилась. Сработало как глобальный kill switch. Это не защита от WannaCry в целом - новые варианты без kill switch появились быстро, - но первую волну это сильно сократило.
Зачем авторы вообще добавили kill switch - вопрос открытый. Один из вариантов: антисандбоксинг. Сандбоксы часто резолвят случайные домены с заглушкой, и малварь проверяет, не в изолированной ли она среде.
Почему наши клиенты не пострадали
Здесь всё просто - и именно это делает историю ценной не как бравада, а как рабочий пример.
MS17-010 стоял с марта. После выхода патча 14 марта мы прошлись по всем managed-клиентам через WSUS, проверили изолированные сегменты вручную, закрыли дыры с офлайн-установкой. Патчу было почти два месяца на момент атаки - вполне достаточно, чтобы он оказался везде.
SMBv1 отключён в апреле. После апрельского дампа Shadow Brokers - полный арсенал EternalBlue уже в открытом доступе - мы прошлись по клиентам и отключили SMBv1 через GPO. Принтеры, NAS, зависимости - всё это разбирали отдельно. Отключение SMBv1 само по себе блокирует EternalBlue даже на непропатченном хосте.
445 закрыт на периметре. Это был закрыт ещё задолго до WannaCry - стандартная практика. Что это дало: машины, уязвимые к EternalBlue, не были напрямую доступны из интернета. WannaCry не мог войти снаружи - только через уже скомпрометированный хост внутри.
Три слоя, каждый из которых сам по себе достаточен для блокировки. В реальности лучше иметь все три, потому что один слой - это «предполагается, что работает», а три слоя - это defence in depth.
Что это значит для аудита безопасности
Несколько наблюдений, которые теперь войдут в стандартный чеклист.
Patch lag - это измеримый риск. MS17-010 вышел 14 марта. WannaCry ударил 12 мая - почти два месяца. Системы без патча за два месяца - это не технический долг, это открытая дверь, размер которой только что продемонстрировали на глобальном уровне.
SMBv1 должен быть выключен везде, где не используется. Не «планируем», не «в следующий квартал». Если у вас нет жёсткой зависимости от v1 - его не должно быть включённым.
445 между сегментами внутри сети - отдельный вопрос. Периметр закрыт у большинства. Межсегментная блокировка - у меньшинства. WannaCry это наглядно показал: один заражённый хост в сети с плоской топологией накрывал всё через 445, которые никто не думал фильтровать «внутри».
Ситуация ещё не закончена - новые варианты появляются, операторы не обнаружены, точный масштаб ущерба неизвестен. Но механика атаки понятна полностью, и защита от неё - не ракетостроение: патчи, отключение устаревших протоколов, сегментация. Всё это было известно и до 12 мая.