воскресенье, 29 апреля 2012 г.

Типы объектов ядра

Стало любопытно, как изменялось количество объектов ядра в разных ОС семейства NT.

Начнем с WindowsXP. Cписок объектов ядра выглядит следующим образом:

IoFileObjectType
MmSectionObjectType
IoControllerObjectType
IoDriverObjectType
IoDeviceObjectType
IoCompletionObjectType
LpcPortObjectType
LpcWaitablePortObjectType
ObpDirectoryObjectType
ObpSymbolicLinkObjectType
PsThreadType
PsProcessType
PsJobType
SeTokenObjectType
WmipGuidObjectType
ExCallbackObjectType
ExEventObjectType
ExSemaphoreObjectType

ExTimerObjectType
ExEventPairObjectType
ExMutantObjectType
ExProfileObjectType
ExpKeyedEventObjectType
CmpKeyObjectType
DbgkDebugObjectType


Набор объектов ядра в Windows Vista был существенно расширен, по сравнению с WindowsXP.

Прежде всего, в Vista появились advanced local procedure calls (ALPC), что привело к замене объектов LpcPortObjectType и LpcWaitablePortObjectType которые существовали в WindowsXP на объект AlpcPortObjectType.

Также был усовершенствован механизм реализации пула потоков - его перенесли в ядро, что привело к появлению нового объекта ядра: ExpWorkerFactoryObjectType.

Был переделан механизм сессий (изоляция нулевой сессии и т.д.), что вылилось в добавление нового объекта: MmSessionObjectType.

Новый механизм под названием менеджер транзакций привнес в ядро сразу 4 новых объекта: TmEnlistmentObjectType, TmTransactionManagerObjectType, TmTransactionObjectType, TmResourceManagerObjectType.

Ну и наконец, реализация механизма event tracing'a также добавила новый объект: EtwpRegistrationObjectType.

В Windows7 количество объектов ядра также увеличилось, по сравнению с Vista.

Добавлены объекты UserApcReserve и IoCompletionReserve, они служат для хранения соответствующих объектов (apc/completion port) в заранее выделенной памяти, а не из пула. Оба этих объекта создаются через native-api NtAllocateReserveObject.

Обновление механизма ETW в Windows7 также привнесло в ядро новый объект: EtwpRealTimeConnectionObjectType.

Изменение в Power Management'е привело к появлению еще одного объекта: PopPowerRequestObjectType.

четверг, 26 апреля 2012 г.

Privilege escalation protections in Windows 8

Грядущий выход windows 8 принесет несколько новинок в плане безопасности, о двух из которых, относящихся к защите от повышения привилегий и будет сегодняшняя заметка.

Первая из них закрывает целый класс атак(kernel-mode NULL dereference), связанных с повышением привилегий.

Сценарий атаки следующий: 

1) находится уязвимость, позволяющая записать ноль по любому адресу в ядре
2) в юзермоде выделяется память по нулевому адресу (флаг MEM_TOP_DOWN)
3) перезаписывается указатель в HAL_DISPATCH
4) вызывается NtQueryIntervalProfile которая в приводит к вызову ф-ции из HAL_DISPATCH и соответственно к вызову кода в нулевой странице

Таких уязвимостей было открыто довольно много и Microsoft в windows 8 решила закрыть саму возможность реализации атаки, запретив выделять нижние 64кб юзерской памяти.

И второе нововведение - поддержка SMEP.

Supervisor Mode Execution Protection (SMEP) - это технология, призванная предотвратить выполнение кода в ядре из тех страниц, которые помечены как юзерские.

То есть, каждая страничка в системе будет помечена определенным битом, который либо будет давать ей право исполняться в ядре, либо нет.
Реакцией на попытку выполнения странички недопустимой для исполнения в ядре будет fault.

Аппаратная поддержка SMEP появилась в процессорах на базе архитектуры Ivy-Bridge, которые были презентованы буквально на днях.

Не знаю, насколько эти новинки будут эффективными, и как скоро появятся публикации по их обходу, но общая тенденция развития windows в плане безопасности безусловно радует.