На главную | Содержание | Назад | Вперёд
Наши друзья

 

 

Доступ к ядру

Слабое управление доступом дескрипторами, созданными для драйверов, откры­вает систему для атак. Если хакер обнаружит драйвер устройства с незащищенным дескриптором, он может воспользоваться командами IOCTL для доступа к этому драйверу ядра. В зависимости от поддерживаемых драйвером функций, можно вы­вести компьютер из строя или получить доступ к ядру. Любые входные данные для драйвера, которые содержат адреса ячеек памяти, должны быть немедленно прове­рены с помощью внесения нулевых (NULL) значений. Также иногда хакеры вводят адреса, которые обращаются к памяти ядра. Если в драйвере не предусмотрено кон­трольных проверок для вводимых пользователем значений, значит, можно исказить содержимое памяти ядра. При тщательно продуманной атаке вполне возможно из­менить глобальный режим в ядре и изменить права доступа.
Утечка данных из совместно используемых буферов
Как известно, в обычной программе используется множество буферов. Одни и те же буферы используются снова и снова, но нас больше интересует вопрос: очищают­ся ли эти буферы? Хранятся ли "старые" данные отдельно от "новых"? Буферы — просто отличное место для поиска потенциальных возможностей утечки данных. Любой буфер, который используется для хранения как общедоступных, так и кон­фиденциальных данных, может стать причиной утечки информации.
Для перевода конфиденциальных данных в разряд общедоступных часто исполь­зуются атаки, вызывающие изменение режима доступа или состояние "гонки на вы-
4Функция WSARecv() позволяет получать данные от соединенного сокета. Дополнитель­ную информацию можно получить по адресу http://msdn.microsoft. com/library /default.asp?url=/library/en-us/winsock/winsock/wsarecv_2.asp.

живание". Таким образом, любое использование буфера без предварительной очист­ки от ранее хранимых данных повышает риск утечки данных.
Пример:ошибка всетевыхадаптерахЕМегпеТ
Один из авторов этой книги (Хогланд) несколько лет назад участвовал в работе по обнаружению уязвимого места, которое несло потенциальную угрозу для мил­лионов Ethernet-адаптеров по всему миру5. В Ethernet-адаптерах используются стандартные чипсеты для подключения к сети. Эти чипы можно назвать "покрыш­ками" машины Internet. Проблема в том, что многие из этих чипов являются причи­ной утечки данных из пакетов.
Возникновение проблемы обусловлено тем, что данные хранятся в буфере в мик­рочипе на Ethernet-адаптере. Минимальный объем данных, которые могут быть от­правлены в Ethernet-пакете, составляет 66 байт. Это минимальный размер кадра Ethernet. Но размер многих пакетов, которые должны быть переданы по сети, на­много меньше, чем 66 байт. В качестве примера можно назвать небольшие ping-пакеты и ARP-запросы. Таким образом, в эти пакеты добавляются данные для уве­личения размера до 66 байт.
Опишем проблему подробнее. Дело в том, что во многих чипах не выполняется очистка буфера между отправками пакетов. Таким образом, пакет недостаточного раз­мера дополняется любыми данными, оставшимися в буфере от предыдущего пакета. Поэтому данные пакетов, предназначенных другим людям, запросто могут попасть в пакеты хакера. Эту атаку достаточно просто реализовать, и она отлично работает в коммутируемых сетях. В атаке применяется "залп" небольших пакетов, которые требуют в ответ отправки небольшого пакета. После получения небольших ответных пакетов ха­кер просматривает добавленные данные, чтобы увидеть данные из чужих пакетов.
Безусловно, в этой атаке теряются многие ценные для хакера данные, поскольку первая часть каждого пакета затирается обычными данными ответного пакета. По­этому хакер будет стараться создать поток как можно меньших ответных пакетов, чтобы выкачать как можно больше информации. Для этих целей очень подойдут ping-пакеты, что позволяет хакеру перехватывать незашифрованные пароли и даже части ключей шифрования. ARP-пакеты даже меньше по размеру, но не годятся для удаленной атаки. С помощью ARP-пакетов злоумышленник может получить номера подтверждений АСК-пакетов из других сеансов. Это пригодится в стандартной ата­ке перехвата данных по протоколу TCP/IP.
Поиск недостатков в предоставлении прав доступа
Неправильное планирование или же банальная лень со стороны некоторых про­граммистов часто приводит к появлению программ, в работе которых предполагает­ся наличие прав администратора или суперпользователя (root). Например, неогра­ниченного доступа к системе требуют многие программы, которые были модифици­рованы из прошлых версий Windows для работы под управлением Win2K и Win­dows ХР. В принципе, это особенно касается тех программ, которые, работая подоб­ным образом, создают массу общедоступных файлов.
Хакеру стоит поискать каталоги, в которых хранятся файлы с пользовательскими данными. Хранятся ли в этих каталогах другие важные данные? Если да, то на­сколько ограничены права доступа к этому каталогу? Это относится и к реестру NT-систем, и к операциям с базой данных. Если хакер заменит библиотеку DLL или из­менит параметры для программы, то он сможет расширить свои права доступа и за­владеть системой. В системах Windows NT следует поискать открытые для доступа вызовы функций, которые запрашивают или создают ресурсы без каких-либо огра­ничений доступа. Чересчур либеральные права доступа приводят к появлению не­защищенных файлов и объектов.
Использование вызовов функций API
Существует несколько системных вызовов, известных тем, что их использование приводит к возникновению уязвимых мест. Один из методов атак как раз и заключа­ется в выявлении этих вызовов (среди самых популярных, например, вызов функ­ции strcpy () ). К счастью, для выявления этих вызовов разработано немало специ­альных средств6.
На рисунке 3.3 показано окно программы APISPY32, содержащее отчет о пере­хвате всех вызовов функции strcpy на проверяемой системе. Мы используем APISPY32 для перехвата серий вызовов 1st г еру из программы Microsoft SQL Server. He все вызовы strcpy уязвимы для атак на переполнение буфера, но есть и такие.
Установить программу APISPY32 очень легко. Ее можно скачать с сайта www. internals.com. Нужно создать специальный файл APISpy32.api и разместить его в корневом каталоге WinNT или Windows. Для нашего примера мы воспользу­емся следующими параметрами конфигурационного файла.
KERNELi32.DLiLi:lstrcpy(PSTR, PSTR) KERNEL32.DLL:lstrcpyA(PSTR, PSTR) KERNEL32.DLL:lstrcat(PSTR, PSTR) KERNEL32.DLL:lstrcatA(PSTR, PSTR) WSOCK32.DLL:recv WS2_32.DLL:recv
ADVAPI32.DLL:SetSecurityDescriptorDACL(DWORD,   DWORD,   DWORD, DWORD)
Перечисленные параметры указывают программе APISPY32 выполнять поиск вызовов заданных функций. Это очень удобно при тестировании программы для по­иска потенциально уязвимых вызовов API, а также любых вызовов, которым пере­даются введенные пользователем данные. В промежутке между этими двумя типами вызовов и лежит основная цель инженера по восстановлению исходного кода. Если хакер способен определить, что входные данные достигают уязвимого вызова API, значит, путь к победе становится очевидным.

 

На главную | Содержание | Назад | Вперёд
 
Яндекс.Метрика