Основы компьютерной криминалистики

1.

ОСНОВЫ КОМПЬЮТЕРНОЙ
КРИМИНАЛИСТИКИ
Лекция 2. Исследование
и преобразование системного реестра
ОС семейства MS Windows
© Князева Н.С., 2020

2.

2
Общие сведения о системном реестре
Реестр Windows (англ. Windows Registry) или системный реестр
представляет собой иерархическую базу данных для обслуживания
операционных систем Microsoft Windows.
Реестр хранит в себе данные, предназначенные для управления
и настройки всех компонентов ОС: аппаратуры, программного
обеспечения, профилей пользователей, и т. д.

3.

3
Общие сведения о системном реестре
Реестр содержит два базовых типа сущностей:
«key», или ключ (раздел/подраздел),
«value», или значение (параметр).
Раздел является аналогом каталога файловой системы и может содержать
в себе другие подразделы (подобно подкаталогам), а также параметры.
С каждым параметром ассоциировано имя и данные, которые оно содержит.
значения
параметров
разделы
(ключи, key)
типы параметров
имена параметров (value)

4.

4
Общие сведения о системном реестре
Дерево разделов реестра физически расположено в нескольких файлах,
именуемых ульями или кустами (англ. hive), а некоторые его части
существуют только в оперативной памяти при активной операционной
системе.
Имя улья
Файл
HKEY_CURRENT_USER
С:\Users\Имя_пользователя\ntuser.dat
HKEY_LOCAL_MACHINE\SAM
C:\Windows\System32\Config\sam
HKEY_LOCAL_MACHINE\Security
C:\Windows\System32\Config\security
HKEY_LOCAL_MACHINE\Software C:\Windows\System32\Config\software
HKEY_LOCAL_MACHINE\System
C:\Windows\System32\Config\system
HKEY_USERS\DEFAULT
C:\Windows\System32\Config\default
HKEY_CURRENT_USER\Software\ С:\Users\Имя_пользователя\AppData\
Classes
Local\Microsoft\Windows\UsrClass.dat

5.

5
Общие сведения о системном реестре
Улей представляет собой совокупность разделов, вложенных подразделов
и параметров, берущую начало в вершине иерархии реестра.
ульи
(hives)
значения
параметров
типы параметров
разделы
(ключи, key)
имена параметров (value)

6.

6
Структура файла улья
Все пространство улья разделено на блоки размером 4 Кбайт.
Когда объем хранимых данных увеличивается, к улью добавляется
необходимое число блоков.
Первый блок улья называется базовым блоком, именно в нем хранится
информация, по которой файл определяется как улей. Этот блок имеет по
нулевому смещению сигнатуру «regf».

7.

7
Базовый блок
Базовый блок содержит:
сигнатуру «regf»,
временную отметку, соответствующую последней операции записи,
указатель на корневой раздел,
полное имя улья.
Максимальная длина хранимого имени в базовом блоке — 32 символа
Смещение
Размер
Тип
0x0000
0x4
строка
0x000С
0x8
NT TimeStamp
0x00024
0x4
смещение
0x00030
0x40
строка
Описание
Сигнатура «regf»
Временная отметка
Смещение корневого раздела
Имя файла (в Unicode)

8.

8
Структура файла улья
Следующие блоки содержатся в рамках (англ. bin), которые, в свою очередь,
делятся на ячейки (англ. cell).
Рамкой называют логическую единицу данных, которая может включать в
себя один или несколько блоков.
Каждая рамка содержит заголовок и несколько ячеек.

9.

9
Заголовок рамки
Размер заголовка рамки равен 32 байтам.
Заголовок рамки включает в себя информацию о размере рамки, который
можно интерпретировать как смещение до следующей рамки.
Все смещения, содержащиеся в ячейках, даются относительно первой
рамки данного улья реестра, которая следует непосредственно за
базовым блоком.
Для вычисления смещения в файле улья к шестнадцатеричному числу,
имеющемуся в поле ячейки, нужно добавить 0x1000 байтов.
Смещение
Размер
Тип
Описание
0x0000
0x4
строка
Сигнатура «hbin»
0x0008
0x4
целое число без
знака
Размер рамки
(кратен 4096 байт)

10.

10
Структура файла улья
Последняя ячейка в рамке всегда заполняет оставшееся пространство, т. е.
в рамке нет пространства, которое не принадлежит ни одной из ячеек.
Ячейка — логическая единица данных, которая может содержать раздел,
параметры, дескриптор уровня защиты, список подразделов или список
параметров.
Типы ячеек:
раздел (сигнатура «nk»)
имя класса
дескриптора уровня защиты («sk»)
списки подразделов («lf», «lh», «ri», «li»)
списки параметров
параметр («vk»)
данные (значения параметров)

11.

11
Структура файла улья
Каждая ячейка раздела содержит указатели на список подразделов и
родительский раздел.
Список параметров содержит указатели на ячейки параметров данного
раздела.
Ячейки параметров хранят данные
в этой же ячейке (если размер данных не превышает 4 байтов),
в отдельной ячейке (ячейка параметра содержит указатель на ячейку
значения).
Родительский раздел
Имя класса
Список параметров
Раздел
Параметр
Дескриптор защиты
Список подразделов
Подраздел
Подраздел
Параметр
Значение

12.

12
Ячейка раздела
Смещение
Размер
Тип
Описание
0x0000
0x4
целое число со знаком
0x0004
0x2
строка
0x0006
0x2
флаг
0x0008
0x8
целое число без знака
0x0014
0x4
смещение
0x0018
0x4
целое число без знака
0x0020
0x4
смещение
0x0028
0x4
целое число без знака
0x002c
0x4
смещение
Список параметров
0x0030
0x4
смещение
Смещение дескриптора уровня защиты
0x0034
0x4
смещение
Смещение имени класса
0x004c
0x2
целое число без знака
Длина имени раздела
0x004e
0x2
целое число без знака
Длина имени класса
0x0050
различный
строка
Размер ячейки в байтах
Сигнатура «nk»
Флаг 0х0020 — ASCII-строка, иначе строка в Unicode
Временная отметка
Смещение родительского раздела
Количество подразделов
Список подразделов
Количество параметров
Имя раздела
Если размер ячейки — число отрицательное, то ячейка занята,
если положительное — свободна.

13.

13
Ячейка раздела
Смещение
Размер
Тип
Описание
0x0000
0x4
целое число со знаком
0x0004
0x2
строка
0x0006
0x2
флаг
0x0008
0x8
целое число без знака
0x0014
0x4
смещение
0x0018
0x4
целое число без знака
0x0020
0x4
смещение
0x0028
0x4
целое число без знака
0x002c
0x4
смещение
Список параметров
0x0030
0x4
смещение
Смещение дескриптора уровня защиты
0x0034
0x4
смещение
Смещение имени класса
0x004c
0x2
целое число без знака
Длина имени раздела
0x004e
0x2
целое число без знака
Длина имени класса
0x0050
различный
строка
Размер ячейки в байтах
Сигнатура «nk»
Флаг 0х0020 — ASCII-строка, иначе строка в Unicode
Временная отметка
Смещение родительского раздела
Количество подразделов
Список подразделов
Количество параметров
Имя раздела

14.

14
Ячейка раздела
Смещение
Размер
Тип
Описание
0x0000
0x4
целое число со знаком
0x0004
0x2
строка
0x0006
0x2
флаг
0x0008
0x8
целое число без знака
0x0014
0x4
смещение
0x0018
0x4
целое число без знака
0x0020
0x4
смещение
0x0028
0x4
целое число без знака
0x002c
0x4
смещение
Список параметров
0x0030
0x4
смещение
Смещение дескриптора уровня защиты
0x0034
0x4
смещение
Смещение имени класса
0x004c
0x2
целое число без знака
Длина имени раздела
0x004e
0x2
целое число без знака
Длина имени класса
0x0050
различный
строка
Размер ячейки в байтах
Сигнатура «nk»
Флаг 0х0020 — ASCII-строка, иначе строка в Unicode
Временная отметка
Смещение родительского раздела
Количество подразделов
Список подразделов
Количество параметров
Имя раздела
смещение
родительского раздела

15.

15
Ячейка списка подразделов
Смещение
Размер
Тип
Описание
0x0000
0x4
целое число со знаком
0x0004
0x2
строка
0x0006
0x2
целое число без знака
0x0008
0x4
ссылка
0x000c
0x4
0x0010
0x4
ссылка
Относительный адрес подраздела
Четыре символа имени подраздела или контрольная
сумма
Относительный адрес подраздела




Размер ячейки в байтах
Сигнатура: «lf»/«lh», «ri»/«li»
Количество подразделов
Списки «lf»/«lh» содержат ссылки на подразделы и, либо первые четыре
символа имени подраздела, либо контрольную сумму его имени.
Списки «ri»/«li» содержат только ссылки на подразделы.
смещение списка
подразделов

16.

16
Ячейка списка параметров
Смещение
Размер
Тип
0x0000
0x4
целое число со знаком
0x0004
0x4
ссылка
Относительный адрес параметра
0x0008
0x4
ссылка
Относительный адрес параметра



Каждый раздел реестра
может иметь несколько
параметров, и в ячейке такого
раздела будет ссылка на
список его параметров.
Список параметров не имеет
никакой сигнатуры и содержит
только собственный размер и
ссылки на отдельные
параметры.
Описание
Размер

смещение списка
параметров

17.

17
Ячейка параметра
Смещение
Размер
Тип
0x0000
0x4
целое число со знаком
0x0004
0x2
Строка
0x0006
0x2
целое число без знака
Длина имени параметра
0x0008
0x2
целое число без знака
Длина данных
0x000a
0x2
-
0x000с
0x4
целое число без знака
Данные или указатель на них
0x0010
0x4
целое число без знака
Тип данных (число от 1 до 11)
0x0014
0x2
Флаг
0x0016
0x2
-
0x0018
переменная
Строка
Параметры хранятся в ячейках
с сигнатурой «vk», которые
содержат:
имя параметра,
длину,
тип,
значение или смещение
ячейки, где оно хранится.
Значение параметра хранится в
этой же ячейке, если его размер
не превышает 4 байтов.
Описание
Размер
Сигнатура «vk»
Неизвестно
Если 0х0001 — строка ASCII, иначе — Unicode
Неизвестно
Имя параметра

18.

18
Ячейка значения параметра
Смещение
0x0000
Размер
0x4
Тип
целое число со знаком
Описание
Размер
0x0004
переменная
зависит от типа значения
Данные
Тип значения играет важную роль, поскольку данные интерпретируются в
зависимости от него.
Редактор реестра Windows отображает
строки, как текст,
№ Тип
Формат
неопределенного
числа, как бинарные данные,
0
REG_NONE
типа
все прочие значения как в
1
REG_SZ
строка
двоичном, так и в
2
REG_EXPAND_SZ
строка
шестнадцатеричном виде.
3
REG_BINARY
двоичные данные
REG_SZ, REG_EXPAND_SZ и
4
REG_DWORD
32-битное число
REG_MULTI_SZ — это строки,
5
REG_DWORD_BIG_ENDIAN 32-битное число
6
REG_LINK
строка
заканчивающиеся нулем.
7
REG_MULTI_SZ
несколько строк
Строки REG_EXPAND_SZ могут
8
REG_RESOURCE_LIST
двоичные данные
содержать в себе переменные
REG_FULL_
9
двоичные данные
окружения (например, %TEMP%),
RESOURCE_DESCRIPTION
которые при интерпретации должны 10 REG_RESOURCE_REQUIRE двоичные данные
MENTS_LIST
быть заменены на значения
11 REG_QWORD
64-битное число
соответствующих переменных.
REG_MULTI_SZ содержит несколько строк, разделенных нулями.

19.

19
Ячейка удаленного раздела
помечается как свободная, поэтому есть возможность найти удаленные
разделы в свободном пространстве улья по их сигнатуре, если они не будут
«затерты» другими данными,
продолжает хранить ссылку на родительский раздел, поэтому удаленный
раздел возможно восстановить в общем дереве улья, если его предок не
был удален, либо был, но его ячейка не была повреждена,
продолжает хранить ссылку на список параметров, поэтому их тоже можно
восстановить, если они, или их список, не были повреждены,
записывает значение 0xffffffff в поле «ссылка на список подразделов» и
дескриптор уровня защиты.
На рисунке пунктиром выделены все пропавшие после удаления раздела связи

20.

20
Алгоритм восстановления удаленных разделов
Осуществляется поиск свободных ячеек по знаку числа, записанного в поле
размера:
у свободных ячеек в этом поле записано положительное число,
рассматриваются только те, размер которых превышает 0x50 байтов,
т.к. по смещению 0x50 содержится имя раздела (пропускаются ячейки,
которые слишком малы, чтобы содержать в себе раздел).
Осуществляется поиск сигнатуры «nk» в ячейках.
Осуществляется переход к списку параметров, а затем и к записям самих
параметров.
Восстанавливается (если это возможно) полное имя раздела, т. е. путь от
корневого раздела (для этого используется функция, рекурсивно
переходящая по ссылкам на родительские разделы, начиная от
размер ячейки
найденного удаленного раздела).
кол-во параметров
смещение списка
параметров
сигнатура «nk»
смещение
родительского
раздела
имя раздела

21.

21
Алгоритм восстановления удаленных разделов
При восстановлении удаленных разделов необходимо проверять ячейки, их
содержащие, на предмет повреждения:
поле «список подразделов» должно равняться 0xffffffff,
если поле «количество параметров» равно нулю, то и поле
«максимальная длина имени параметра» должно равняться нулю,
значение поля «длина имени раздела» должно быть больше 0x01 и
меньше 0xff (максимальной длины),
временная отметка раздела не может быть больше временной отметки
файла-улья (ведь она представляет собой время последней записи в
файл в целом).
временная отметка
раздела
кол-во параметров
длина имени
раздела
список
подразделов

22.

22
При удалении параметра
ячейки параметра и значения параметра помечаются как свободные,
ячейка параметра продолжает хранить ссылку на значение параметра,
в ячейке раздела изменяется поле количество параметров,
размер ячейки списка параметров не изменяется,
в ячейке списка параметров
ссылка на удаленный параметр перезаписывается методом сдвига ссылок,
оставшееся место заполняется дублированием последней ссылки.
до удаления
после удаления

23.

23
Форматы файлов системного реестра
Файлы ульев реестра — это файлы, которые содержат сведения о
разделах, подразделах, параметрах и значениях параметров реестра.
Данные, содержащиеся
в таком файле,
можно добавить в
активный реестр
(импорт),
а на основе данных
реестра можно
создать файл
реестра (экспорт).
Экспортировать можно
весь реестр,
отдельно
выбранные ключи
или подразделы.

24.

24
Форматы файлов системного реестра
Файл реестра (*.reg):
файл представляет собой комбинацию символьных и бинарных данных;
неудобен для автоматизированного чтения и интерпретации бинарных
данных по причине использования межбайтных разделителей в виде
запятой и межстрочных разделителей в виде символа «\»;
не предусмотрено вывода временной отметки.

25.

25
Форматы файлов системного реестра
Текстовый файл (*.txt):
неудобен для автоматизированного считывания данных по причине
большого и произвольного числа пробелов, а также отсутствия
разделителей между отдельными параметрами;
наглядное представление отметки времени, которая указывает на
момент последнего внесения изменений в значения параметров
рассматриваемого раздела.

26.

26
Форматы файлов системного реестра
Файл кустов реестра (*.*):
бинарный файл без расширения;
наследует все элементы и взаимосвязи структуры;
неудобен для визуального наблюдения.

27.

27
Монтирование исследуемых ульев
к активному реестру
Выделяется один из двух корневых ключей: HKLM или HKСU.
Затем в меню «Файл» выбираем строку «Загрузить куст…». В появившемся
диалоговом окне находим нужный файл реестра.

28.

28
Монтирование исследуемых ульев
к активному реестру
После этого в очередном окне вводим имя раздела.
Выбранный раздел появляется в иерархической структуре активного реестра.
После извлечения данных улей следует отмонтировать. Для этого выделяем
присоединенный раздел и в меню «Файл» выбираем строку «Выгрузить
куст…».

29.

29
Программа для работы с реестром
(Registry Workshop)
отображение временной отметки последней модификации;
расширенный поиск;
сравнение реестров.

30.

30
Программы чистки и оптимизации реестра
Наименование
программы
Остались
следы в файле
реестра
Остались
следы в
журналах
транзакций
Создана
резервная
копия реестра
Итог
Quicksys
RegDefrag
Да
Да
Нет
Не гарантирует
удаление следов
Reg Organizer
Нет
Нет
Нет
Гарантированно
удаляет следы
Auslogics
Registry Defrag
Нет
Да
Нет
Не гарантирует
удаление следов
Wise Registry
Cleaner
Нет
Да
Да, легко
удаляется
Не гарантирует
удаление следов
Registry
Compressor
Нет
Нет
Да, легко
удаляется
Гарантированно
удаляет следы
Для сохранения целостности
файлов ульев реестра используется
механизм журналов транзакций:
файлы с расширением LOG,
расположенные в этих же каталогах.

31.

31
Программа чистки и оптимизации реестра
(Reg Organizer)

32.

32
Программа чистки и оптимизации реестра
(Reg Organizer)
После чистки реестра происходит удаление разделов, существует
возможность их восстановления
После оптимизации (дефрагментации) реестра ячейки удаленных разделов
перезаписываются, файл-улья уменьшается в размере

33.

33
Программа чистки и оптимизации реестра
(Reg Organizer)
После оптимизации (дефрагментации) реестра ячейки удаленных разделов
перезаписываются, файл-улья уменьшается в размере
Возможность восстановления существует по остаточной информации,
находящейся в файлах подкачки, гибернации и теневой копии
смещение
родительского раздела

34.

34
Программа поиска разделов и параметров
реестра в файлах различных форматов
Программа reg_seeker.exe является консольной, на вход принимает имя
исследуемого файла
Если в исследуемом файле обнаружены ячейки разделов реестра, то
программа выводит информацию о найденных ячейках в текстовый файл
nodes.txt:
Если в исследуемом файле обнаружены ячейки параметров реестра, то
программа выводит информацию о найденных ячейках в текстовый файл
values.txt.
English     Русский Правила