12 мая 2017 года

Сначала перестал работать один компьютер. Потом ещё несколько. А через несколько часов оказалось, что то же самое происходит в организациях по всему миру.

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

Во Франции несколько заводов Renault остановили производство, чтобы не дать заражению распространиться дальше. В Великобритании проблемы возникли на предприятиях Nissan. В Германии атака затронула Deutsche Bahn. Пострадали испанская Telefónica, американская FedEx, российские государственные организации и множество других компаний и учреждений. И всё это происходило в один и тот же день.

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

Для человека перед этим экраном всё выглядело достаточно просто: компьютер заблокирован, файлы недоступны, кто‑то требует деньги. Но гораздо страшнее было другое...

Пока сотрудники пытались восстановить работу систем, заражённые компьютеры уже искали следующие цели. WannaCry мог распространяться без писем, скачивания файлов и действий пользователя. Именно эта особенность позволила ему выйти далеко за пределы отдельных компьютеров.

За первые сутки WannaCry успел поразить более 230 тысяч компьютеров как минимум в 150 странах.

Как программа вообще находила другие компьютеры?

Как она понимала, куда отправлять свои попытки заражения?

И как получилось, что заражение, начавшееся на одном компьютере, за считанные часы оказалось в сетях организаций по всему миру?

Об этом мы с вами и поговорим.


Уязвимость, о которой уже знали

Чтобы понять, откуда у WannaCry появилась возможность заражать компьютеры без участия пользователя, нужно вернуться на несколько месяцев назад.

В марте 2017 года Microsoft выпустила обновление безопасности MS17-010. Оно устраняло уязвимости в SMBv1 — протоколе Windows, который позволяет компьютерам обмениваться файлами и взаимодействовать с другими устройствами по сети. Одна из этих уязвимостей впоследствии сыграла ключевую роль в распространении WannaCry. Но само обновление не стало концом этой истории.

В апреле 2017 года группа Shadow Brokers опубликовала набор инструментов, связанных с американским Агентством национальной безопасности (NSA). Среди них находился EternalBlue — эксплойт, использовавший уязвимость в SMB для удалённого выполнения кода на уязвимой системе. Иными словами, теперь инструмент для эксплуатации этой уязвимости оказался в открытом доступе. Им могли воспользоваться не только те, для кого он изначально создавался.

До появления WannaCry оставался всего один шаг: объединить возможность удалённого заражения с программой, которая шифрует файлы и требует за них выкуп. И этот шаг был сделан.

12 мая 2017 года WannaCry начал массово распространяться. Он использовал EternalBlue, чтобы атаковать уязвимые системы Windows, а после успешного заражения шифровал файлы и требовал оплату за их восстановление. Получается, что механизм удалённого заражения и программа‑вымогатель оказались в одном вредоносном ПО. При этом обновление, устранявшее использованную уязвимость, было доступно почти за два месяца до атаки.

Но наличие обновления не означало, что оно установлено на каждом компьютере. В крупных организациях обновление тысяч машин может требовать проверки совместимости, согласования и планирования. Старые системы тоже могли продолжать работать без необходимых исправлений. В итоге WannaCry использовал уязвимость, для которой уже существовало исправление, но множество компьютеров по‑прежнему оставались уязвимыми.

Но EternalBlue объясняет, как WannaCry атаковал уязвимую систему, а не как находил новые цели.

Для этого разберемся в том, как работал сам механизм распространения.


Как WannaCry распространялся по сети

У WannaCry не было списка компьютеров, которые нужно заразить. Он искал их сам — причём сразу в двух направлениях: внутри локальной сети и за её пределами. И именно так работал механизм, который позволил одной заражённой машине стать началом гораздо более масштабной атаки.

Два направления поиска

После запуска WannaCry определял сетевые интерфейсы компьютера и выяснял, к каким подсетям тот подключён. Затем начинал проверять адреса внутри этих сетей. Параллельно другая часть программы генерировала случайные публичные IPv4-адреса и пыталась найти доступные извне машины.

По данным Mandiant, в образце WannaCry, который исследовали специалисты, для этих задач использовались отдельные потоки выполнения: один занимался локальной сетью, другие — сканированием случайных адресов в интернете. В описанном исследователями варианте было предусмотрено 128 потоков для внешнего сканирования. Это позволяло проверять множество адресов параллельно, а не ждать завершения каждой попытки по очереди.

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

На каждый адрес уходила попытка соединения с TCP‑портом 445. Если соединение устанавливалось, WannaCry переходил к попытке эксплуатации SMB. Если нет — проверка этого адреса не приводила к заражению. Но даже успешное соединение было лишь началом. Доступный SMB мог принадлежать компьютеру, на котором уязвимость уже исправили. В таком случае именно этот путь атаки не срабатывал.

График сетевых соединений из технического анализа Mandiant
График сетевых соединений из технического анализа Mandiant

Что происходило после успешной атаки

Если эксплуатация уязвимости проходила успешно, на удалённой системе выполнялся код, позволявший доставить и запустить вредоносную программу. В техническом анализе WannaCry исследователи обнаружили механизм, который использовал встроенные в образец компоненты для доставки исполняемого файла на целевую машину. После этого заражённый компьютер мог продолжить распространение самостоятельно.

Здесь важно понимать разницу между двумя событиями. Первое — WannaCry находит компьютер, до которого можно достучаться. Второе — ему удаётся использовать уязвимость и запустить код на этой машине. Между ними нет автоматической гарантии успеха: большая часть проверяемых адресов не обязательно превращается в новые заражения.

Но если второй этап удавался, появлялся новый источник распространения. Теперь уже другая машина сканировала адреса и пыталась заражать следующие системы.

Почему заражение могло расти так быстро

Представим не одну длинную цепочку, в которой каждый компьютер должен дождаться, пока предыдущий закончит работу. Заражённые машины действовали параллельно. Пока одна проверяла доступные адреса, другая уже могла атаковать свою цель, а третья — искать следующую.

Это не означает, что количество заражений обязательно удваивалось каждую секунду: результат зависел от доступности машин, скорости ответов, наличия уязвимости и успешности эксплуатации. Но каждый новый заражённый узел потенциально добавлял ещё один источник сканирования.

Как WannaCry добирался до других организаций и стран

Для внешнего сканирования не требовалось знать, в какой стране находится цель. Программа генерировала публичный IPv4-адрес и пыталась установить соединение с ним. Если адрес принадлежал доступной системе, на которой SMB был открыт и уязвимость не была исправлена, эта машина могла стать следующей жертвой.

 Схема самораспространения

Пакеты проходили через обычную интернет‑маршрутизацию. Промежуточные маршрутизаторы передавали трафик согласно своим таблицам маршрутизации; они не могли определить по одному лишь IP‑пакету, что соединение используется для распространения WannaCry. При этом межсетевые экраны, NAT и другие ограничения могли сделать целевую систему недоступной извне.

Поэтому заражение не перескакивало между странами как отдельный процесс. Компьютер в одной сети находил доступную машину в другой, заражал её, а та продолжала поиск следующих целей. Следующая система могла находиться в другой организации, городе или стране.

Географическое расстояние само по себе не было препятствием. Важнее было то, существовал ли сетевой путь к цели и могла ли вредоносная программа воспользоваться уязвимой службой на другом конце.

Именно сочетание двух направлений поиска, параллельных попыток и автоматического продолжения распространения делало WannaCry не просто шифровальщиком, а сетевым червём. Он не зависел от того, сколько пользователей вручную запустят заражённый файл. После успешного заражения компьютеры сами становились участниками дальнейшего распространения.


Как одну атаку остановил незарегистрированный домен

12 мая 2017 года исследователь безопасности Маркус Хатчинс анализировал образец WannaCry и обратил внимание на странную деталь: в коде вредоносной программы был зашит длинный адрес домена, который на тот момент никто не зарегистрировал.

Обычно такой адрес в коде вредоносной программы может вести к серверу, с которым она обменивается данными. Но здесь всё оказалось иначе. WannaCry проверял, доступен ли этот домен, прежде чем продолжить выполнение. Если адрес не отвечал, программа продолжала работу. Если домен удавалось открыть, она прекращала выполнение.

Маркус Хатчинс
Маркус Хатчинс

Хатчинс зарегистрировал домен. Это стоило около десяти долларов. Он не собирался одним действием останавливать глобальную атаку: изначально ему нужно было понять, что делает этот адрес и как он связан с вредоносной программой. Но после регистрации домена выяснилось, что проверка срабатывает как выключатель: новые запуски этой версии WannaCry, которые получали ответ от домена, больше не продолжали заражение и шифрование. Cloudflare WIRED

Однако это не означало, что угроза исчезла. Механизм срабатывал только при условии, что заражённый компьютер мог связаться с нужным доменом. Если доступ к нему был невозможен, программа могла продолжить работу. Кроме того, регистрация домена не расшифровывала файлы на компьютерах, пострадавших до этого момента, и не удаляла уже попавшую в систему вредоносную программу. Позднее появились и варианты WannaCry с изменёнными или отсутствующими проверками, поэтому один домен не мог навсегда решить проблему.


Эпидемия закончилась. Или нет?

У некоторых жертв WannaCry всё же оставался шанс восстановить файлы без ключа злоумышленников. Исследователи обнаружили, что в определённых условиях данные, необходимые для восстановления ключа, могли сохраняться в оперативной памяти компьютера. На этом принципе работал инструмент WannaKey. Но у него было серьёзное ограничение: если компьютер выключали или перезагружали, содержимое оперативной памяти исчезало. Нужные данные могли быть потеряны, и восстановить ключ этим способом уже не получалось. Инструмент помогал лишь в определённых условиях, поэтому для большинства пострадавших он не стал спасением.

Оставался другой вариант — заплатить выкуп. На экране появлялась сумма, а вместе с ней надежда вернуть свои документы, фотографии и рабочие файлы. Но никто не мог гарантировать, что после перевода денег жертва действительно получит рабочий ключ. По публичным данным, злоумышленники получили около 52 биткоинов — примерно 140 тысяч долларов на тот момент. На фоне ущерба, который WannaCry причинил организациям по всему миру, сумма оказалась сравнительно небольшой. При этом у злоумышленников было всего три адреса для сбора платежей, и надёжно связать каждый перевод с конкретной жертвой было непросто.

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

Я считаю, что эту историю важно знать не только специалистам по информационной безопасности. WannaCry показал, как уязвимость, для которой уже существовало исправление, в сочетании с автоматическим распространением может привести к последствиям для организаций по всему миру. Это не просто история об одном вирусе, а пример того, как техническая деталь внутри программы способна повлиять на работу целых систем.

Но история не закончилась в тот день. Спустя полтора года после атаки исследователи всё ещё фиксировали обращения к домену WannaCry. Это не означает, что каждый обнаруженный IP‑адрес соответствовал отдельному заражённому компьютеру, но показывает, что следы атаки продолжали появляться в сети.

И вот теперь представьте: вы давно забыли о WannaCry, а где‑то в сети всё ещё работает компьютер, на котором осталась его копия, снова и снова проверяющая, доступен ли домен.

И кто знает, сколько таких копий до сих пор остаётся на устройствах, о которых давно никто не вспоминает.