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

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

300300

Сутки назад сайт 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, как “нормальный сервис”, использует для хранения своих параметров ключ реестра по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Null:

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

Драйвер-заглушка null.sysДрайвер-заглушка null.sys
(кликните для увеличения до 377 px на 516 px)
Учебный центр Advanced Traininginfo@atraining.ru

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

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

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

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

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

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

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

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

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

Что делать

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

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

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

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

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

  • Александр Еремеев

    Руслан, спасибо за информацию.
    Понятно, что fltmgr не отключить.
    Хочу уточнить:
    – правильно ли я понял , что для работы Pandemic НЕОБХОДИМО зарегистрироваться как драйверу , что он делает, прописываясь в ключ NULL и достаточно защитить его (ключ реестра) от изменений какими-либо средствами?

  • Да, он регится как драйвер и работает в контексте LocalSystem, поэтому может писать в ключ сервиса null свои параметры.

    В этот ключ он будет писать параметры “что на что подменять”, там каждый из экземпляров свой подключ делает, потому что может работать параллельно несколько штук, у каждого задача “заменять файл X на файл Y”.

    Ему можно помешать это сделать, создав заранее подключ /Instances и выставив на этот ключ явный запрет LocalSystem’у, и выставив право собственности на этот подключ на не-системную учётку, не являющуюся участником группы Administrators – это сделает невозможным сохранение данных в ключ, потому что Pandemic пробует от своего контекста (LocalSystem), у него не выходит, но он не умеет “в несколько приёмов” отнять-выставить-права-попробовать-ещё-раз.

  • Александр Еремеев

    Спасибо за развёрнутый ответ.