Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #93, СЕНТЯБРЬ 2006 г.

Обзор эксплойтов

Крис касперски

Хакер, номер #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

Содержание  Вперед на стр. 093-056-2