Атака на канализацию Мысла Владислав 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: |