Обзор эксплойтов Крис касперски Хакер, номер #093, стр. 093-056-1 дыра в AMD K7/K8 brief 18 апреля 2006 года обнаружилась дыра в процессорах AMD K7/K8 позволяющая одному процессору заглянуть внутрь сопроцессорного контекста другого процесса, что ведет к утечке данных и упрощает атаку на криптографические системы: www.securityfocus.com/bid/17600 для быстрого переключения контекста Linux и BSD-системы используют пару команд fxsave/fxrstor, сохраняющих/восстанавливающих регистры сопроцессора в/из оперативной памяти. коварство fxrstor заключается в том, что она сохраняет указатель команд (FIP), указатель данных (Data Pointer) и опкод последней инструкции только в том случае, если бит ES (exception summary) в статусном слове сопроцессора x87 установлен. при переключении контекста ось не обнуляет эти данные и они становятся доступны "посторонним" процессам: kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.16.9 Targets Строго говоря, это не ошибка, а документированная особенность процессоров AMD, на которую прежде никто не обращал внимания, поскольку с процессорами Intel в этом плане все ОК. уязвимость затрагивает все LINUX и BSD системы, а, возможно, и Windows. Exploit Для реализации атаки exploit'а не требуется, достаточно просто выполнять команду fxsave в цикле, надеясь, поймать что-то интересное. Solution Разработчики LINIX/BSD уже выпустили патчи: securityfocus.com/bid/17600/solution, очищающее ES-бит и загружающие фиктивный double на стек сопроцессора. вот фрагмент заплатки для BSD: static double dummy = 0.0; static fpu_clean_state() { u_short status;fnstsw(&status); if (status&0x80) fnclex(); __asm __volatile("ffree %%st(7);fld %0" : : "m" (dummy)); } Дыра в AMD x86-64 Brief Jari Kirma — один из разработчиков FreeBSD — обратил внимание, что на AMD x86-64 непривилегированный пользователь может получить непосредственный доступ к оборудованию с прикладного уровня. это объясняется тем, что x86-64 имеет два механизма разделения привилегий: код, исполняющий на уровне ядра, имеет доступ ко всем портам ввода/вывода и обычно является "посредником" между железом и user-mode, что не всегда удобно, поэтому, процессор поддерживает специальную карту, позволяющую "открыть" часть портов, разрешив к ним доступ с прикладного уровня (подобная карта имеется у Intel'а, но там она по умолчанию заблокирована). Суть в том, что вплоть до FreeBSD/amd64 5.4-RELEASE эта таблица инициализировалась _неправильно_ образуя огромную дыру в системе безопасности. злоумышленник (или некорректно работающий код) может вызывать отказ в обслуживании, разрушать или похищать информацию и т. д., подробнее об этом можно прочитать на: www.security.freebsd.org/advisories/FreeBSD-SA-05:03.amd64.asc. Targets уязвимость затрагивает только операционную систему FreeBSD версии 5.4 или ниже, работающую на платформе AMD x86-64. на все остальные системы эта дыра не распространяется Exploit Для реализации данной уязвимости exploit не требуется, достаточно установить обработчик исключений и последовательно перебрать все порты, определяя какие из них доступны на запись/чтение, а какие нет. Solution |