Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_БОС.doc
Скачиваний:
112
Добавлен:
08.05.2019
Размер:
1.15 Mб
Скачать

IV. Роль реестра при загрузке ос

При загрузке системы анализируются следующие разделы:

HKLM\Software\Microsoft\Windows\CurrentVersion\policies\Explorer\Run,

HKLM\Software\Microsoft\Windows\CurrentVersion\Run,

HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce,

HKLM\Software\Microsoft\Windows\CurrentVersion\Run,

HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce,

HKLM\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,

HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices,

HKCU\Software\Microsoft\Windows\CurrentVersion\Run,

HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce,

где HKLM соответствует ветке HKEY_LOCAL_MACHINE, а HKCU — HKEY_CURRENT_USER.

Программы, находящиеся в данных разделах, будут загружены автоматически.

V. Функции api для работы с реестром

Для работы с реестром предусмотрен ряд API функций, позволяющих получать и редактировать информацию, хранящуюся в его разделах, на программном уровне. Таким образом, у злоумышленника появляется ещё одна возможность для совершения несанкционированных действий, направленных на разрушение или дестабилизацию системы.

Важной особенностью Win32 API функций работы с реестром, а также стандартных программ управления реестром является невозможность доступа к разделам реестра, которые были созданы с явным указанием NULL в качестве части имени. Несмотря на видимость этих ключей системе, Regedit и Regedit32 не имеют доступа к таким ключам. При этом, используя Native API (скрытые внутренние функции системы, обычно не документированные), имеется возможность создания и использования таких ключей, что создает потенциальную опасность.

В таблице 1 приведены основные функции Native API для работы с реестром.

Таблица 1. Native API для работы с реестром

Имя

Win32 API аналог

Описание

Примечание

NtCreateKey

RegCreateKey

DDK

NtOpenKey

RegOpenKey

DDK

NtDeleteKey

RegDeleteKey

DDK

NtDeleteValueKey

RegDeleteValue

DDK

NtEnumerateKey

RegEnumKey, RegEnumKeyEx

DDK

NtEnumerateValueKey

RegEnumValue

DDK

NtFlushKey

RegFlushKey

DDK

NtInitializeRegistry

Единственный параметр указывает тип загрузки (установка системы или обычная загрузка)

NtNotifyChangeKey

RegNotifyChangeKeyValue

NtQueryKey

RegQueryKey

DDK

NtQueryMultiplValueKey

RegQueryMultipleValues

NtQueryValueKey

RegQueryValue, RegQueryValueEx

DDK

NtReplaceKey

RegReplaceKey

NtSaveKey

RegSaveKey

NtRestoreKey

RegRestoreKey

NtSetInformationKey

Устанавливает атрибуты раздела

NtSetValueKey

RegSetValue, RegSetValueEx

DDK

NtLoadKey

RegLoadKey

NtLoadKey2

Введена в NT 4.0. Аналогична предыдущей, но позволяет указывать некоторые опции при загрузке

NtUnloadKey

RegUnloadKey

Следующий фрагмент демонстрирует создание “неправильного” с точки зрения Win32 API ключа.

WCHAR HiddenKeyNameBuffer[] = L"Can't touch me!\0";

KeyName.Buffer = HiddenKeyNameBuffer;

// длина должна включать завершающий NULL

KeyName.Length = wcslen( HiddenKeyNameBuffer ) *sizeof(WCHAR) + sizeof(WCHAR);

InitializeObjectAttributes( &ObjectAttributes, &KeyName,

OBJ_CASE_INSENSITIVE, SysKeyHandle, NULL );

Status = NtCreateKey( &HiddenKeyHandle, KEY_ALL_ACCESS,

&ObjectAttributes, 0, NULL, REG_OPTION_NON_VOLATILE,

&Disposition );

if( !NT_SUCCESS( Status )) {

MessageBox(NULL, "Error: Couldn't create HKLM\\Software\\NULL Key Test\n",”NULL Key Test”, MB_ICONERROR);

exit(1);

}