- •Сборник методических указаний к лабораторным работам
- •Безопасность операционных систем
- •Содержание
- •Лабораторная работа № 1. Получение информации о конфигурации компьютера
- •1. Цели работы
- •2. Теоретические сведения
- •1. Реестр Windows
- •2. Использование функций Windows api
- •3. Использование wmi-интерфейса
- •7. Библиографический список
- •Лабораторная работа № 2. Командные интерпретаторы posix-совместимых операционных систем
- •1. Цели работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 3. Работа с файлами и каталогами в ос Unix
- •1. Цель работы
- •2. Теоретические сведения
- •Ino_t d_ino; /* номер индексного дескриптора */
- •Int closedir (dir *dirptr); /* dirptr - дескриптор каталога */
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 4. Структура системы управления вводом-выводом в ос Unix
- •1. Цели работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 5. Работа с процессами в ос Unix. Сигналы и каналы в Unix
- •1. Цель работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 6. Базовые технологии безопасности операционных систем
- •1. Цель работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 7. Парольная политика безопасности операционных систем
- •1. Цель работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 8. Оценка защищенности nt-системы: безопасность файловой системы, права доступа, квоты, связи и их настройка
- •1. Цель работы
- •2. Теоретические сведения Особенности файловой системы ntfs
- •3. Контроль доступа к файлам и каталогам
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 9. Оценка защищенности nt-системы: защита реестра
- •1. Цель работы
- •2. Теоретические сведения
- •I. Организация реестра
- •II. Дублирование подразделов в разных ветвях
- •III. Файлы system.Dat и user.Dat
- •IV. Роль реестра при загрузке ос
- •V. Функции api для работы с реестром
- •VI. Основные вредительские действия, связанные с изменением реестра
- •VII. Проблемы защиты реестра Windows
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 10. Методы и средства несанкционированного доступа к ресурсам ос
- •1. Цель работы
- •2. Теоретические сведения
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 11. Оценка защищенности nt-системы: политика безопасности в области паролей и аудита
- •1. Цель работы
- •2. Теоретические сведения
- •I. Пароли
- •II. Получение хэшей паролей
- •III. Системный аудит
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 12. Администрирование ос Windows с помощью средства автоматизации Microsoft PowerShell
- •1. Цель работы
- •2. Теоретические сведения
- •Первый запуск
- •Справка
- •Практика
- •Установка уровня политики ExecutionPolicy
- •Редактирование скриптов
- •Создание запланированных заданий
- •7. Библиографический список
- •Лабораторная работа № 13. Windows PowerShell: управление компьютером
- •1. Цель работы
- •2. Теоретические сведения Управление сеансами пользователей
- •Управление питанием
- •Сбор информации о системе
- •Получение данных об установленных приложениях и заплатках
- •Установка по
- •Обновление по
- •Удаление по
- •Просмотр списка служб
- •Практика
- •Настройка сервисов
- •Создание локальных процессов
- •Создание удаленных процессов
- •Завершение неотвечающих процессов
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
- •Лабораторная работа № 14. Windows PowerShell: работа с файлами, папками и реестром
- •1. Цель работы
- •2. Теоретические сведения Работа с файлами и папками
- •Практика
- •Создание дополнительных дисков
- •Поиск в реестре
- •Примеры
- •Удаленный реестр
- •Правка реестра
- •7. Библиографический список
- •Лабораторная работа № 15. Windows PowerShell: работа с системными журналами
- •1. Цель работы
- •2. Теоретические сведения
- •Поиск событий
- •Просмотр событий на локальном компьютере
- •Просмотр событий на удаленном компьютере
- •Фильтрация событий
- •Получение данных из файла
- •Экспорт данных
- •Работа с удаленными компьютерами
- •3. Оборудование
- •4. Задание на работу
- •5. Оформление отчета
- •6 Контрольные вопросы
- •7. Библиографический список
Лабораторная работа № 11. Оценка защищенности nt-системы: политика безопасности в области паролей и аудита
1. Цель работы
Получить навыки в исследовании защищенности заданной конфигурации ОС, изучить особенности организации NT-подобных операционных систем.
2. Теоретические сведения
I. Пароли
Операционные системы Windows NT/2000/XP хранят пароли в зашифрованном виде, называемом хэшами паролей (hash (англ.) — смесь, мешанина). Пароли не могут быть получены непосредственно из хэшей. Восстановление паролей заключается в вычислении хэшей по возможным паролям и сравнении их с имеющимися хэшами паролей. Аудит паролей включает в себя проверку возможных путей получения информации об учетных записях пользователей, результатом восстановления паролей является их представление в явном виде с учетом регистра.
II. Получение хэшей паролей
Существует несколько путей получения хэшей паролей, зависящих от их местонахождения и имеющегося доступа. Существует несколько способов получения хэша пароля: из файла SAM или его резервной копии, непосредственно из реестра операционной системы локального или удаленного компьютера, из реестра или Active Directory локального компьютера или удаленного компьютера внедрением DLL, посредством перехвата аутентификационных пакетов в сети.
При наличии хэша пароля сам пароль может быть восстановлен различными способами: атакой по словарю, последовательным перебором и гибридом атаки по словарю и последовательного перебора.
Существуют стандартные API функции для получения информации об установках политики паролей и учетных записей Windows. Ниже приведён программный код, демонстрирующий получение такого рода информации:
NET_API_STATUS nModalsStatus;
LPUSER_MODALS_INFO_0 UMI_0;
nModalsStatus = NetUserModalsGet(NULL,0,(LPBYTE *)&UMI_0);
if(nModalsStatus == NERR_Success)
{
//Минимальная длина пароля, символы
//UMI_0->usrmod0_min_passwd_len;
//Максимальное время жизни пароля, сек;
//UMI_0->usrmod0_max_passwd_age;
//Минимальное время жизни пароля, сек;
//UMI_0->usrmod0_min_passwd_age;
//Количество хранимых паролей для уменьшения их повторяемости";
//UMI_0->usrmod0_password_hist_len;
}
LPUSER_MODALS_INFO_3 UMI_3;
nModalsStatus = NetUserModalsGet(NULL,3,(LPBYTE *)&UMI_3);
if(nModalsStatus == NERR_Success)
{
//Сброс счётчика блокировки, сек
//UMI_3->usrmod3_lockout_observation_window;
//Количество попыток (порог) ввода пароля до блокировки;
//UMI_3->usrmod3_lockout_threshold;
//Период блокировки учётной записи, сек";
//UMI_3->usrmod3_lockout_duration;
}
III. Системный аудит
Аудит – фиксация в системном журналу событий, связанных с доступом к защищаемым системным ресурсам. Подсистема аудита позволяет дифференцированно задавать перечень интересующих администратора событий с помощью удобного графического интерфейса. Аудит используется для того, чтобы засекать даже неудачные попытки “взлома” системы.
Начиная с операционной системы Windows 2000, производится аудит следующих событий: вход в систему, доступ к объектам, доступ к службе каталогов, изменение политики, использование привилегий, отслеживание процессов, управление учетными записями и других системных событий. По умолчанию, каждый из них отключен.
Поскольку никакая система безопасности не гарантирует защиту на уровне 100 %, то последним рубежом в борьбе с нарушениями оказывается система аудита. Действительно, после того как злоумышленнику удалось провести успешную атаку, пострадавшей стороне не остается ничего другого, как обратиться к службе аудита. Если при настройке службы аудита были правильно заданы события, которые требуется отслеживать, то подробный анализ записей в журнале может дать много полезной информации. Эта информация, возможно, позволит найти злоумышленника или, по крайней мере, предотвратить повторение подобных атак путем устранения уязвимых мест в системе защиты.
Параметры аудита объектов Windows хранятся в системных списках контроля доступа SACL, в отличие от прав доступа, которые располагаются в дискреционных списках контроля доступа DACL.
Следует обратить внимание на то, что в отличие от обращения к DACL, обращение к SACL требует наличия определённых типов привилегий (SE_SECURITY_NAME) у клиента. Ниже приведена функция установки заданных привилегий текущему процессу. Данная функция включает или выключает заданную привилегию у текущего процесса, возвращает нулевое значение при успешном выполнении.
bool EnabledPrivilege(LPCSTR lpcsPrivilegeName, bool bEnabled)
{
DWORD FuncRes;
//получим токен доступа по дескриптору текущего процесса
HANDLE hToken = NULL;
FuncRes = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken);
if(!FuncRes) return true;
//структура привилегий
TOKEN_PRIVILEGES NewPrivilegeStruct;
//установим количество привилегий - 1
NewPrivilegeStruct.PrivilegeCount = 1;
//переведём машинное имя привилегии в уникальный идентификатор LUID - LocalUniqueIdetifier
LUID luid;
LookupPrivilegeValue(NULL, lpcsPrivilegeName, &luid);
NewPrivilegeStruct.Privileges[0].Luid = luid;
//включим привилегию
NewPrivilegeStruct.Privileges[0].Attributes = bEnabled?SE_PRIVILEGE_ENABLED:0;
FuncRes = AdjustTokenPrivileges(hToken, false, &NewPrivilegeStruct, sizeof(TOKEN_PRIVILEGES), NULL,NULL);
if(!FuncRes)
{
CloseHandle(hToken);
return true;
}
CloseHandle(hToken);
return false;
}
Таким образом, установив аудит на требуемые объекты Windows, можно легко узнать о его использовании пользователями или процессами самой операционной системы.
Следует добавить, что информация о каждом событии журнала аудита хранится в структуре типа EVENTLOGRECORD, сразу за которой содержатся дополнительные недокументированные данные о событии: информация об источнике, дескриптор безопасности и т.д. Дата и время генерации события в такой структуре отличается от принятого в Win32 API. Это время измеряется в секундах, прошедших с 00:00:00 (по всемирному координированному времени, UCT) 1 января 1970 года. Ниже приведён код функции EventTimeToLocalSystemTime для перевода такого типа времени в стандартное время, описанного структурой SYSTEMTIME.
void EventTimeToLocalSystemTime(DWORD dwEventTime, SYSTEMTIME* pstTime)
{
SYSTEMTIME st1970;
// Create a FILETIME for 00:00:00 January 1, 1970
st1970.wYear = 1970;
st1970.wMonth = 1;
st1970.wDay = 1;
st1970.wHour = 0;
st1970.wMinute = 0;
st1970.wSecond = 0;
st1970.wMilliseconds = 0;
union {
FILETIME ft;
LONGLONG ll;
} u1970;
SystemTimeToFileTime(&st1970, &u1970.ft);
union {
FILETIME ft;
LONGLONG ll;
} uUCT;
// Scale from seconds to 100-nanoseconds
uUCT.ll = 0;
uUCT.ft.dwLowDateTime = dwEventTime;
uUCT.ll *= 10000000;
uUCT.ll += u1970.ll;
FILETIME ftLocal;
FileTimeToLocalFileTime(&uUCT.ft, &ftLocal);
FileTimeToSystemTime(&ftLocal, pstTime);
}
Также приведём фрагмент кода, выдающий установки политики системного аудита, т.е. тех событий, аудитирование которых производит система:
NTSTATUS ntsResult;
//Дескриптор объекта LSA
LSA_HANDLE lsahPolicyHandle;
//Reserved, must be NULL
LSA_OBJECT_ATTRIBUTES ObjectAttributes;
ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));
//Открытие объекта LSA
ntsResult = LsaOpenPolicy(NULL,&ObjectAttributes,POLICY_ALL_ACCESS,&lsahPolicyHandle);
if(ntsResult)
{
//обработка ошибки
return;
}
//структура с инф. о событиях аудита
PVOID AuditEvents;
ntsResult = LsaQueryInformationPolicy(lsahPolicyHandle,PolicyAuditEventsInformation,&AuditEvents);
if(ntsResult)
{
//обработка ошибки
return;
}
LsaClose(lsahPolicyHandle);
//Выделим необходимую информацию из полученной структуры
DWORD dwAuditMask;
for(DWORD i = 0;i<(((PPOLICY_AUDIT_EVENTS_INFO)AuditEvents)->MaximumAuditEventCount);i++)
{
switch(i)
{
case AuditCategorySystem:
//"Аудит системных событий";
break;
case AuditCategoryLogon:
//"Аудит входа в систему";
break;
...
}
LsaFreeMemory(AuditEvents);
}