Вятский государственный гуманитарный университет
Опубликован: 27.05.2013 | Доступ: свободный | Студентов: 2689 / 585 | Длительность: 09:18:00
Самостоятельная работа 5:

Обеспечение безопасности в Windows

< Лекция 9 || Самостоятельная работа 5: 123 || Лекция 10 >

Задание 4. В приложении поставить точку останова.

Указания к выполнению.

1. В созданном проекте уберите комментарии (//) перед оператором, обозначающим точку останова:

_asm int 3

2. Запустите проект. Программа должна прерваться в точке останова. Её выполнение можно продолжить, нажав кнопку Продолжить:


Задание 5. Запустить приложение ReadFile на виртуальной машине, установить точку останова на функции SeAccessCheck.

Указания к выполнению.

1. Исполняемый файл созданного в предыдущем пункте приложения ReadFile.exe после компиляции проекта должен находиться в следующей папке:

c:\Programs\ReadFile\Release.

Скопируйте исполняемый файл на виртуальную машину.

Скопируйте текстовый файл input.txt на виртуальную машину в ту же папку, что и исполняемый файл.

2. Запустите исполняемый файл. Выполнение программы должно прерываться, а управление перейти к отладчику WinDbg.

3. Установите в отладчике точку останова на функции SeAccessCheck для процесса ReadFile.exe. Для этого сначала следует определить адрес объекта EPROCESS для процесса ReadFile.exe при помощи команды:

!process 0 0 ReadFile.exe

В данном случае адрес равен 0x8222F630.

Установить точку останова для функции SeAccessCheck для процесса ReadFile.exe можно при помощи следующей команды:

bp /p 8222F630 nt!SeAccessCheck

Проверьте, что команда выполнена верно: в меню Edit отладчика выберите пункт Breakpoints…:


Замечание. После перезапуска процесса ReadFile.exe его адрес может поменяться. В этом случае придется удалить старую точку останова и повторить нахождение адреса объекта EPROCESS и установки новой точки останова.

4. Продолжите выполнение, нажав F5 в отладчике. Должна сработать точка останова на функции SeAccessCheck и откроется исходный код этой функции.

Задание 6. Исследовать маркер доступа (access token).

Указания к выполнению.

1. Функция SeAccessCheck проверяет возможность доступа процесса с заданным маркером доступа к объекту с определенным дескриптором защиты (см. лекцию 13 "Безопасность в Windows").

2. Адрес маркера доступа процесса содержится в поле PrimaryToken параметра SubjectSecurityContext. Чтобы узнать этот адрес, откройте в отладчике окно Locals (Alt+3) и раскройте параметр SubjectSecurityContext (нажмите "плюс" слева от имени параметра):


На рисунке видно, что адрес в поле PrimaryToken равен 0xE1249870.

3. Просмотрите содержимое структуры _TOKEN, по адресу, определенному в предыдущем пункте. Введите команду:

dt _token 0xE1249870

В этой структуре содержится вся информация о маркере. Например, ID маркера хранится в поле TokenID типа _LUID по смещению 0x010 от начала структуры. Чтобы узнать ID маркера, введите следующую команду:

dt _LUID 0xE1249870+0x010

В данном примере TokenID равен 0x963D2.

SID учетной записи пользователя владельца маркера и групп, в которые он входит, хранятся по адресу в поле UserAndGroups:

dt _SID_AND_ATTRIBUTES 0xe1249a00

В первом поле структуры _SID_AND_ATTRIBUTES хранится адрес SID. Чтобы узнать какой SID расположен по данному адресу, можно воспользоваться следующей командой:

!sid 0xe1249a58

Очевидно, что это SID учетной записи с именем Administrator, ведь процесс ReadFile запускался из под неё.

Структуры _SID_AND_ATTRIBUTES для групп, в которые входит учетная запись, расположены следом за той же структурой для учетной записи. Чтобы вывести адреса SID групп, можно набрать следующую команду:

dd 0xe1249a00

Структура _SID_AND_ATTRIBUTES для учетной записи Administrator выделена на рисунке красным, для первой группы, в которую входит Administrator – синим.

Чтобы узнать SID групп, можно снова воспользоваться командой !sid:


Этот SID соответствует группе Users (см. статью MSDN "Хорошо известные идентификаторы безопасности в операционных системах Windows").

4. В отладчике WinDbg имеется специальная команда для удобного отображения содержимого маркера доступа – !token.

Введите эту команду, указав адрес маркера доступа:

!token 0xE1249870

Сравните информацию, выводимую командой !token, с данными, полученными в предыдущем пункте путем анализа полей структуры TOKEN.

< Лекция 9 || Самостоятельная работа 5: 123 || Лекция 10 >
Екатерина Мезенцева
Екатерина Мезенцева
Россия
Анастасия Пахутина
Анастасия Пахутина
Россия, Москва, Московский Государственный Университет им.М.В.Ломоносова, 2009