Проект Pandemic – очередная утечка WikiLeaks

На модерации Отложенный

Новая закладка в Windows от июня 2017 - Pandemic

Сутки назад сайт WikiLeaks опубликовал очередную порцию утечек о закладках в американском ПО.

В этот раз утечка коснулась т.н. Проекта “Пандемия”. Были опубликованы 5 документов, касающиеся трёх версий этой закладки – Pandemic 1.0, Pandemic 1.1-RC1 и Pandemic 1.1. Во всех дальнейших рассуждениях и анализе мы будем опираться на последнюю доступную версию – Pandemic 1.1.

Project Pandemic

Задача данной закладки – незаметно для пользователя, обращающегося к файловому хранилищу, работающему на базе протоколов семейства SMB 2.x и старше, заменять тот файл, к которому идёт обращение.

Типовой сценарий использование – работа на файл-сервере или, допустим, контроллере домена Active Directory (туда регулярно за групповыми политиками будут приходить все рабочие станции в организации, и обращаться будут к папке SYSVOL как раз по протоколу SMB). Сам оригинальный файл при этом не модифицируется – задачей является подмена ответа на запрос по сети, а не локального обращения.

Схема внедрения Project Pandemic

Pandemic работает через штатные функции Windows – регистрируется в системе как минифильтр через появившийся в ядре NT 6.0 (Vista / Server 2008) функционал Filter Manager (FltMgr). Это позволяет ему перехватывать любые обращения к файловым ресурсам раньше, чем драйверам файловых систем FAT/NTFS/ReFS и отдавать результат до срабатывания системы кэширования (т.е. при включённом механизме кэширования на SMB-папках туда может закэшироваться “подменённый” ответ сервера).

Для того, чтобы полностью походить на “штатную, встроенную, очень важную и низкоуровневую функцию ОС Windows”, Pandemic, как “нормальный сервис”, использует для хранения своих параметров ключ реестра по адресу <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Null</code>:

Ветка реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNull, используемая при работе закладкиВетка реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNull, используемая при работе закладки
(кликните для увеличения до 963 px на 495 px)

Данный раздел используется весьма специфичным драйвером с тем же названием – <code>null.sys</code>:

Драйвер-заглушка null.sysДрайвер-заглушка null.sys
(кликните для увеличения до 377 px на 516 px)

Pandemic использует этот раздел и при работе хранит там данные, создавая подключи (два, <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Null\Instances</code> и <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Null\Instances\Null</code>) и некие значения (помимо штатных, минимальных для NT-сервиса).

На приведённом скриншоте (система – Windows 8.1 Ent x64) видно, что никаких подключей и “дополнительных” параметров нет, что, судя по документации, должно говорить о том, что данный зловред на этой системе не запускался.

Хотелось бы отметить, что за время существования платформы Microsoft Windows было несколько зловредных приложений, которые также назывались <code>null.sys</code>, но все они располагались в других каталогах, т.к. не могли перезаписать данный файл – поэтому надо не путать, в текущей ситуации закладка именно в той части Windows, под которую злоумышленники ранее лишь могли “мимикрировать”.

Резюмируя – Pandemic использует такие элементы ОС Windows, которые не получится отключить или модифицировать, поэтому, безусловно, это показательная “закладка”, сделанная на уровне проектирования компонентов операционной системы.

Признак работы Pandemic – утечка памяти

В документации описывается, что при каждом запуске экземпляра Pandemic – то есть, например, при каждом событии “админ перетаскивает drag-and-drop’ом в окно виртуалки файл через псевдоshare” – происходит утечка порядка 1 килобайта из NonPagedPool. Имеет смысл посмотреть на странный рост расхода NonPagedPool при массовых операциях со многими небольшими файлами – инфицированная система будет на каждую SMB-операцию по запросу файла инициировать экземпляр Pandemic, который будет по заданным параметрам (имя файла для замены, например) пытаться угадать “подменять ответ клиенту или не в этот раз”.

Что можно отключать

FltMgr отключить не получится – этот сервис, относящийся к группе <code>FSFilter Infrastructure</code>, и расположенный физически по адресу <code>%WinDir%\system32\drivers\fltmgr.sys</code>, считается критичным для системы. Вы получите BSoD, если системе не получится его подгрузить. Соответственно, “точка прописывания” у Pandemic будет вне контроля пользователя.

Null-драйвер отключить тоже не получится, он является компонентом ядра ОС.

Что делать

По сути – ничего. Различные механизмы сетевого уровня (подписывание SMB-трафика, включение IPsec) будут защищать уже подменённые файлы. В схеме “запросил по SMB одно – прислали другое” невозможно поставить преграду на уровне протокола.

Возможный вариант защиты в случае сценария “запускаю исполняемые файлы с сети” – запускать только подписанные файлы, притом подписанные доверенным внутренним CA. В этом сценарии подмена не пройдёт, т.к. несмотря на то, что с сервера будет загружен другой исполняемый файл, нежели запрашиваемый, локальная система не сможет его выполнить из-за политик SRP / AppLocker.

Хорошей профилактической мерой будет отключение Технология BranchCache для Windows 10. Этот механизм нужен для “коллективного” скачивания обновления ОС Windows по схеме <cite>“один в локальной сети скачал с удалённого сервера – другие могут запросить удалённый сервер о том, из каких блоков состоит целевой файл и, как в торрентах, поискать на соседних по LAN системах эти блоки и быстро скачать их”</cite>. Ранее он предназначался исключительно для корпоративных сетей и был встроен в Enterprise-версии клиентских ОС, но начиная с Windows 10 он присутствует и в домашних сетях. Соответственно, чтобы подстраховаться от ситуации <cite>“в локальной сети есть заражённый узел, пришло время качать патчи, сайт Microsoft Update предоставил информацию о файле, я поискал по соседям и нашёл, скачаю с них и запущу на себе”</cite> имеет смысл отключить данный функционал:

Отключение PeerCache на Windows 10Отключение PeerCache на Windows 10
(кликните для увеличения до 1021 px на 795 px)

На сетевом уровне он общается по WS-Discovery, это UDP 3702 – если данный механизм не используется, есть смысл отключить его и заблокировать данный трафик.

На данный момент информация о том, как именно работает Project Pandemic, пополняется – поэтому, возможно, мы добавим сюда что-то новое.