|
МУ_ЛР_БОС. А. С. Новиковым и обсуждены на заседании кафедры
5. Оформление отчета
Отчет должен содержать:
6 Контрольные вопросы
6.1. Назовите основные источники уязвимостей ОС.
6.2. Для чего в реальных системах может понадобиться монитор запускаемых процессов?
6.3. Каким образом приложение может изменить привилегии и установки безопасности порождаемых процессов?
6.4. Можно ли штатными средствами ОС Windows NT изменить контекст безопасности запускаемого процесса, нити?
6.5. Назовите главное отличие ОС Windows NT от семейства 9x, проявляющееся при выделении ресурсов.
6.6. Чем отличается сервис от обычной программы?
6.7. Каким способом можно запустить собственную программу в начале загрузки Windows.
7. Библиографический список
1. Олифер В.Г. Сетевые операционные системы: Учеб. пособие для вузов / В.Г. Олифер, Н.А. Олифер .— М.: Питер, 2003. — 544с.
2. Таненбаум Э. Современные операционные системы / Э. Таненбаум.— 2-е изд. — М.: Питер, 2006 .— 1038с.
3. Монадьеми П. Защита от хакеров в Windows XP/ П. Монадьеми, Б. Мюллер; пер. с нем. под ред. С.Н. Банникова.— М.: БИНОМ, 2005 .— 320с.
4. Немет Э. UNIX: Руководство системного администратора/ Э. Немет, Г. Снайдер, С. Сибасс, Т.Р. Хейн. 3-е изд. — М.: Питер, 2003 .— 925с.
Лабораторная работа № 11. Оценка защищенности NT-системы: политика безопасности в области паролей и аудита
1. Цель работы
Получить навыки в исследовании защищенности заданной конфигурации ОС, изучить особенности организации NT-подобных операционных систем. 2. Теоретические сведения
I. Пароли
Операционные системы Windows NT/2000/XP хранят пароли в зашифрованном виде, называемом хэшами паролей (hash (англ.) — смесь, мешанина). Пароли не могут быть получены непосредственно из хэшей. Восстановление паролей заключается в вычислении хэшей по возможным паролям и сравнении их с имеющимися хэшами паролей. Аудит паролей включает в себя проверку возможных путей получения информации об учетных записях пользователей, результатом восстановления паролей является их представление в явном виде с учетом регистра. II. Получение хэшей паролей
Существует несколько путей получения хэшей паролей, зависящих от их местонахождения и имеющегося доступа. Существует несколько способов получения хэша пароля: из файла SAM или его резервной копии, непосредственно из реестра операционной системы локального или удаленного компьютера, из реестра или Active Directory локального компьютера или удаленного компьютера внедрением DLL, посредством перехвата аутентификационных пакетов в сети.
При наличии хэша пароля сам пароль может быть восстановлен различными способами: атакой по словарю, последовательным перебором и гибридом атаки по словарю и последовательного перебора.
Существуют стандартные API функции для получения информации об установках политики паролей и учетных записей Windows. Ниже приведён программный код, демонстрирующий получение такого рода информации: NET_API_STATUSnModalsStatus;
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)
{
DWORDFuncRes;
//получим токен доступа по дескриптору текущего процесса
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);
returnfalse;
} Таким образом, установив аудит на требуемые объекты 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);
}
3. Оборудование
Персональный компьютер с установленной операционной системой MSWindows 2000 SP4, XPSP2, Vista или 7 и средами разработки ПО BorlandC++ Builder или MSVisualStudio 2005/2008/2010. 4. Задание на работу
1. Изучить теоретические положения по данной лабораторной работе.
2. Разработать программное обеспечение согласно заданию преподавателя. Варианты заданий: №
| Задание | 1
| Разработать программный модуль, проводящий аудит системы безопасности Windows на основе информации реестра. Сформировать отчёт с рекомендациями.
| 2
| Разработать программный модуль, проводящий аудит системы безопасности Windows на основе параметров политики паролей (временные характеристики, сложность и т.д.). Сформировать отчёт с рекомендациями.
| 3
| Разработать программный модуль, выдающий установки системного аудита заданного объекта файловой системы
| 4
| Разработать программный модуль, выдающий установки системного аудита заданного объекта реестра Windows
| 5
| Разработать программный модуль, наделяющий заданный процесс определёнными привилегиями.
| 6
| Разработать программный модуль, выводящий список всех обращений к заданному объекту файловой системы (используя журнал событий).
| 7
| Разработать программный модуль, выводящий список всех обращений к заданному объекту реестра Windows (используя журнал событий).
| |
|
|