Атака на канализацию

Мысла Владислав

Xakep, номер #063, стр. 063-070-1

aka DigitalScream (digitalscream@real.xakep.ru)

Мучаем поименованные каналы в Windows

Пришло время поговорить о наиболее интересных атаках. Речь пойдет о поименованных каналах в Windows. Область их применения довольно широка и позволяет реализовать как локальные, так и удаленные атаки. Но об этом немного позднее, а пока необходимо разобраться, что представляют собой каналы и для чего они созданы.

Каналы Windows

Named Pipe File System – файловая система поименованных каналов (в дальнейшем просто каналов). Сам канал – это однонаправленный или дуплексный интерфейс, созданный для организации передачи данных между сервером и клиентами. Обращение к каналу производится по его имени, он, в свою очередь, имеет свои собственные буфера и дескрипторы, что позволяет ему одновременно обслуживать множество клиентов. Следует также знать, что, кроме поименованных каналов, существуют также анонимные, но в данном случае они не представляют для атакующего ничего интересного.

Основная причина создания этой технологии - предоставление возможности двум приложениям безопасно обмениваться данными. Реальным примером этого служит ситуация, когда приложение, запущенное от имени ограниченной учетной записи, нуждается в получении некоторой информации, которая доступна только привилегированному процессу. В таком случае в дополнение к приложению в системе регистрируется сервис, имеющий права системы, созданный каналом. Таким образом, все необходимые данные получает сервис, после чего сам сервис передает их приложению клиента посредством канала. Преимущества такого подхода легко определить в контексте организации безопасности приложения. Поскольку сервис исполняет ограниченные функции, то злоумышленник практически не имеет шансов воспользоваться им для повышения привилегий. В то же время само приложение не имеет высоких прав в системе и не может служить объектом для атаки. Но если бы приложение имело права системы, то атакующий, используя различные атаки, мог бы заставить его исполнить свой программный код от имени привилегированного процесса. В качестве атак могут использоваться переполнение стека, кучи, а также Shatter-атаки (их описание было в Хакере 12.03).

Для организации работы каналов системой используется драйвер npfs.sys, который представляет интерфейс, сходный с интерфейсом драйвера файловой системы. В действительности эту технологию нельзя назвать файловой системой. Единственное, что указывает на сходство каналов и файлов – это способ обращения к ним. Подключение к каналу производится функцией CallNamedPipe:

Описание к CallNamedPipe

BOOL CallNamedPipe(

// имя канала

LPCTSTR lpNamedPipeName,

// указатель на данные, записываемые в канал

LPVOID lpInBuffer,

// длина данных, записываемых в канал

DWORD nInBufferSize,

// указатель на данные, прочитанные с канала

LPVOID lpOutBuffer,

// длина данных, прочитанных с канала

DWORD nOutBufferSize,

// длина данных, которые следует прочитать

LPDWORD lpBytesRead,

// задержка при подключении

DWORD nTimeOut

);

Но, как уже говорилось ранее, обращение к файлам и каналам идентично. Это действительно так, поскольку для подключения вместо функции CallNamedPipe можно воспользоваться CreateFile:

Содержание  Вперед на стр. 063-070-2
ttfb: 3.7109851837158 ms