|
МУ_ЛР_БОС. А. С. Новиковым и обсуждены на заседании кафедры
Лабораторная работа № 8. Оценка защищенности NT-системы: безопасность файловой системы, права доступа, квоты, связи и их настройка
1. Цель работы
Получить навыки в исследовании защищенности заданной конфигурации ОС, изучить особенности организации файловой системы NT-подобных операционных систем. 2. Теоретические сведения
Особенности файловой системы NTFS Файловая система NTFS была разработана в качестве основной файловой системы для ОС Windows NT в начале 90-х годов с учетом опыта разработки FAT и HPFS (основная файловая система для OS/2). Основными отличительными свойствами NTFS являются:
поддержка больших файлов и дисков больших объёмом; восстанавливаемость после сбоев и отказов программ и аппаратуры управления дисками; высокая скорость операций, в том числе и для больших дисков; низкий уровень фрагментации, в том числе и для больших дисков; гибкая структура, допускающая развитие за счет добавления новых типов записей и атрибутов файлов с сохранением совместимости с предыдущими версиями ФС; устойчивость к отказам дисковых накопителей; поддержка длинных символьных имен; контроль доступа к каталогам и отдельным файлам.
3. Контроль доступа к файлам и каталогам Файлы – это частный, хотя и самый популярный, вид разделяемых ресурсов, доступ к которым операционная система должна контролировать. Существуют и другие виды ресурсов, с которыми пользователи работают в режиме совместного использования. Во всех этих случаях действует общая схема: пользователи пытаются выполнить с разделяемым ресурсом определённые операции, а ОС должна решить, имеют ли пользователи на это право. Пользователи являются субъектами доступа, а разделяемые ресурсы – объектами. Для каждого типа объектов существует набор операций, которые с ними можно выполнять. Таким образом, в Windows 2000/NT используется унифицированная структура – объект безопасности, - которая создаётся не только для файлов и устройств, но и для любых разделяемых ресурсов. Это позволяет использовать в Windows 2000/NT для контроля доступа к ресурсам любого вида общий модуль ядра – менеджер безопасности.
В качестве субъектов доступа могут выступать как отдельные пользователи, так и группы пользователей. Объединение пользователей в группу и задания прав доступа в целом для группы позволяет существенно ускорить процесс по обработке пользователей с одинаковыми правами и является примером администрирования в больших системах.
Например, определить права доступа к реестру – значит определить для каждого пользователя набор операций, которые ему разрешено применять к данному ресурсу (допустим, ветви реестра).
В самом общем случае права доступа могут быть описаны матрицей прав доступа, в которой столбцы соответствуют всем файлам системы, строки – всем пользователям, а на пересечении строк и столбцов указываются разрешённые операции. Практически во всех ОС матрица прав доступа хранится “по частям”, т.е. для каждого файла или каталога создаётся так называемый список управления доступом (Access Control List, ACL), в котором описываются права на выполнение операций пользователей по отношению к этому ресурсу. ACL являются частью характеристик файла или каталога. Список ACL состоит из элементов управления доступом (Access Control Element, ACE). Все объекты, включая файлы, потоки, события, даже токены доступа, когда они создаются, снабжаются дескриптором безопасности, который и содержит список управления доступом ACL. Структура дескриптора безопасности компанией Microsoft не разглашается, но существует набор API функций, позволяющих работать с этим объектом.
Ниже приведён фрагмент кода, демонстрирующий пример работы с дескриптором безопасности и ACL: LONG ResFunc;
//Получаем информацию о длине дескриптора безопасности
DWORD LenSD;
ResFunc = GetFileSecurity(lpsFileName,NULL,NULL,0,&LenSD);
//Получаемдескрипторбез-ти
PSECURITY_DESCRIPTOR pSD;
pSD = (BYTE *)LocalAlloc(LMEM_FIXED,LenSD);
ResFunc = GetFileSecurity(lpsFileName,NULL,pSD,LenSD,NULL);
if(ResFunc)
{
//обработкаошибки;
return;
}
//Получим информацию о SID и ACL из дескриптора без-ти
PACL pACL;
PSID pSID;
ResFunc = GetNamedSecurityInfo(lpsFileName,SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION, &pSID,NULL,&pACL,NULL,&pSD);
if(ResFunc)
{
//обработкаошибки;
return;
}
if(pACL == NULL)
{
ShowMessage("Невозможно получить ACL объекта файловой системы.”);
return;
}
SID_NAME_USE sid_name_use;
PACE_HEADER pACE_header;
DWORD Record = 0;
for(int i = 0; i AceCount; i++)
{
if(GetAce(pACL,i,(LPVOID *)&pACE_header))
{
//определимтип ACE
switch(pACE_header->AceType)
{
case ACCESS_ALLOWED_ACE_TYPE: //ACE типа “разрешить”
{
//получаем необходимую информацию из структуры
break;
}
case ACCESS_DENIED_ACE_TYPE: //ACE типа “запретить”
{
//получаем необходимую информацию из структуры
break;
}
...
}
}
Файловая система. Принципы безопасного удаления файлов и очистки дискового пространства
Одной из важных особенностей NT-систем, введенных в соответствии с требованиями безопасности уровня C2, является реализация защиты объектов от повторного использования. Это означает, что когда приложение выделяет дисковое пространство или виртуальную память оно не сможет увидеть данные, которые находились там ранее. Windows NT заполняет нулями оперативную память и место на диске, где до этого размещались файлы, и предоставляет эти ресурсы приложению. Однако защита от повторного использования не работает, когда файл удаляется с диска. Высвобождаемое дисковое пространство не обнуляется. Причина такого поведения заключается в том, что предполагается полный контроль ОС за доступам к ресурсам компьютера. Однако, когда операционная система не активна, используя программы низкоуровневого доступа к диску и средства восстановления, можно просмотреть и даже восстановить освобожденные системой дисковые ресурсы. Таким образом, даже при использовании шифрующей файловой системы (EFS) информация из оригинальных (незашифрованных) файлов остается на диске после создания их зашифрованной версии.
Единственным способом, гарантирующим что удаленные (впрочем, как и зашифрованные) файлы не могут быть восстановлены, является использование средств безопасного удаления. Приложение, обеспечивающее безопасное удаление, перезаписывает удаляемые файлы данными, используя методики, которые гарантируют невозможность восстановления информации даже с использованием специальных технологий восстановления, базирующихся на исследовании остаточной намагниченности и обеспечивающих хороший процент восстановления для ненадежно стертых файлов. Одна из методик безопасного удаления описана, в частности, стандартом DOD 5220.22-M на полное удаление информации с носителей разных типов (Department of Defense clearing and sanitizing standard DOD 5220.22-M). Для удаления информации рекомендуется первоначальная перезапись файла некоторым символом, затем его дополнением, и после этого некоторым набором случайных данных. При этом подчеркивается, что для Совершенно секретной информации необходимо применять физические методы удаления (от размагничивания до полного уничтожения).
Безопасное удаление файлов, не имеющих специальных атрибутов, довольно простая задача — приложение просто перезаписывает свободное место по некоторому алгоритму. Более сложным является удаление сжатых, зашифрованных и сильно разреженных файлов, а также безопасная очистка свободного дискового пространства.
Сжатые и зашифрованные файлы организованы в NTFS в виде блоков по 16 кластеров. Если программа осуществляет запись в такой файл, то независимо от типа записи (перезапись, добавление, замещение) NTFS выделяет новое место на диске для сохранения данных, а затем, после осуществления записи, освобождает ранее занимаемое файлом место. Данный консервативный подход применяется в целях обеспечения целостности данных. Таким образом, перезапись таких файлов не приведет к безопасному удалению их содержимого с диска.
Для манипуляций этими типами файлов можно воспользоваться функциями Defragmentation API (более подробно см. Platform SDK: File Storage. Defragmentation в MSDN Library). Используя Defragmentation API, можно определить, в каких кластерах на диске расположены такие файлы, после чего, используя прямой доступ к диску, удалить информацию.
Очистка свободного места также сопряжена с проблемами. Поскольку ни NTFS ни FAT не предоставляют приложению средств для непосредственных манипуляций свободным дисковым пространством, необходимо применять некоторые “обходные” маневры. Прежде всего, мы можем воспользоваться способом, описанным для удаления зашифрованных файлов. Однако такой способ сопряжен с одной серьезной проблемой — даже при очень аккуратном использовании низкоуровневого доступа существует вероятность коллизий при наличии активных дисковых процессов в системе. Например, приложение для безопасного удаления определяет некоторый кластер как свободный. В этот же момент времени система производит запись в этот участок диска, тем самым, занимая выбранный кластер. Но наше приложение перезаписывает эти данные, уничтожая только что записанную информацию. Ситуация может значительно ухудшиться, если в данный участок диска записываются системные метаданные. Применение низкоуровневой очистки в этом случае может привести к полному или частичному краху файловой системы.
Другой подход основан на непрямой перезаписи свободного места. Прежде всего, используя некэшированный ввод-вывод (non-cached file I/O), необходимо создать файл максимально возможного размера. Поскольку используется некэшированный ввод-вывод, то данные системного кэша не будут сброшены на диск и перезаписаны приложением безопасного удаления. Поскольку некэшированный файл должен быть выровнен относительно границы сектора (512 байт), то, вероятно, останется дисковое пространство, не выделенное приложению, хотя размер файла увеличить не удастся. Для захвата оставшегося дискового пространства необходимо создать кэшированный файл максимального размера. Для каждого из созданных файлов (кэшированного и некэшированного) необходимо выполнить безопасную перезапись.
Однако для NTFS данные операции не обязательно гарантируют полную очистку свободного места. Дело в том, что NTFS сохраняет небольшие файлы (размер которых не превышает размера одной записи MFT) непосредственно в MFT (Master File Table). При этом никаких дополнительных кластеров вне MFT для файла не выделяется. Поэтому, создавая файлы, не превышающие размером MFT (максимальный размер записи может составлять 4 КБ), можно полностью очистить и записи внутри таблицы размещения файлов. Когда файлы займут все свободное пространство в MFT, NTFS будет отклонять любую возможность создать файл, поскольку на диске кластеров больше не осталось (они заняты созданными ранее двумя файлами). По завершении этих процессов все свободное место можно считать полностью очищенным.
Для уничтожения информации об именах файлов необходимо применить многократное переименование файла (в качестве одного из алгоритмов переименования можно использовать 26-и кратное переименование одним из символов латинского алфавита). Низкоуровневые манипуляции со служебной информацией в этом случае крайне нежелательны, поскольку, хотя директории и могут содержать информацию об именах удаленных файлов, это дисковое пространство не доступно для непосредственного использования. 3. Оборудование
Персональный компьютер с установленной операционной системой MSWindows 2000 SP4, XPSP2, Vista или 7 и средами разработки ПО BorlandC++ Builder или MSVisualStudio 2005/2008/2010. 4. Задание на работу
1. Изучить теоретические положения по данной лабораторной работе.
2. Разработать программное обеспечение согласно заданию преподавателя. Варианты заданий:
| Задание | 1
| Разработать программный модуль, обеспечивающий безопасное удаление информации с диска (без возможности восстановления)
| 2
| Разработать программный модуль, обеспечивающий безопасную (без возможности восстановления) очистку свободного места на диске
| 3
| Разработать программный модуль, обеспечивающий безопасное (без возможности восстановления) удаление сжатых и зашифрованных NTFS-файлов
| 4
| Разработать программный модуль, производящий шифрование и расшифрование NTFS-файлов
| 5
| Разработать программный модуль, выдающий установки прав доступа к заданному файлу (папке) для файловой системы NTFS
| 6
| Разработать программный модуль, устанавливающий права доступа к заданному файлу (папке) для файловой системы NTFS
| |
|
|