Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_ЛР_БОС.doc
Скачиваний:
112
Добавлен:
08.05.2019
Размер:
1.15 Mб
Скачать

7. Библиографический список

1. Олифер В.Г. Сетевые операционные системы: Учеб. пособие для вузов / В.Г. Олифер, Н.А. Олифер .— М.: Питер, 2003. — 544с.

2. Таненбаум Э. Современные операционные системы / Э. Таненбаум.— 2-е изд. — М.: Питер, 2006 .— 1038с.

3. Монадьеми П. Защита от хакеров в Windows XP/ П. Монадьеми, Б. Мюллер; пер. с нем. под ред. С.Н. Банникова.— М.: БИНОМ, 2005 .— 320с.

4. Немет Э. UNIX: Руководство системного администратора/ Э. Немет, Г. Снайдер, С. Сибасс, Т.Р. Хейн. 3-е изд. — М.: Питер, 2003 .— 925с.

Лабораторная работа № 10. Методы и средства несанкционированного доступа к ресурсам ос

1. Цель работы

Получить навыки в исследовании методов несанкционированного доступа к системе, изучить способы его предотвращения и устранения, а также способы сокрытия важной информации.

2. Теоретические сведения

Одним из аспектов сетевой безопасности NT-систем, которому часто уделяется недостаточно внимания, являются совместно используемые ресурсы (shares). Объявление общих ресурсов со слабой защищенностью, позволяющей неавторизированным пользователям просматривать системные файлы, является одной из наиболее распространенных брешей в безопасности. Система не предоставляет средств для просмотра видимых в сети ресурсов машины и их установок безопасности. Однако, используя NetBIOS, можно просмотреть доступные компьютеры внутри домена и изучить доступные дисковые ресурсы, общие принтеры, а также их установки безопасности. Данный способ наиболее эффективен для администратора домена, поскольку именно он имеет возможность просматривать все ресурсы сети.

Для отображения локальных дисков на сетевые каталоги используются функции:

WNetOpenEnum - получение манипулятора перечисления сетевых ресурсов (дисков и принтеров) с заданными параметрами;

WNetEnumResource – заполнение структуры NETRESOURCE информацией о перечисляемом сетевом ресурсе;

WNetCloseEnum – удаление манипулятора перечисления.

Для получения списка совместно используемых ресурсов (включая скрытые), а также количества подключённых к ним пользователей существуют следующие API функции:

NetShareEnum – перечисление совместно используемых ресурсов;

NetShareAdd – добавление совместно используемого ресурса;

NetShareDel – удаление совместно используемого ресурса.

Другой деятельностью, так или иначе связанной с безопасностью системы, являются:

  • вход в системы/выход из системы;

  • запуск и остановка процессов;

  • создание и удаление токенов (tokens);

  • запуск и остановка сервисов;

  • заимствование прав (Windows NT позволяет одному процессу заимствовать атрибуты безопасности у другого процесса);

  • изменение приложением привилегий безопасности.

Для управления и слежения за этими действиями существуют различные функции Win32 API, в том числе и недокументированные. Так, например, для отслеживания процесса выхода из системы нам понадобится использование недокументированных функций для регистрации callback-процедур, наблюдения за данным процессом:

NTSTATUS SeRegisterLogonSessionTerminatedRoutine(PVOID CallbackRoutine);

NTSTATUS SeUnregisterLogonSessionTerminatedRoutine(PVOID CallbackRoutine);

В то же время процедуру входа системы можно отследить с помощью перехвата (hook) системной функции NtCreateToken из Native API.

С помощью функции PsSetCreateProcessNotifyRoutine, описанной в Windows 2000 DDK, но доступной и в NT 4.0, можно зарегистрировать callback–функцию, отслеживающую запуск и остановку процессов в системе. При этом важно получить информацию и о контексте запуска, что позволяет произвести полный анализ происходящего в системе. Это приобретает особенную актуальность при исследовании машины на наличие программных закладок.

Получение имени родительского процесса демонстрирует следующий участок кода:

PsLookupProcessByProcessId( ParentId, &Parent );

ObDereferenceObject( Parent );

ProcessMonitorGetProcess( Parent, ParentName );

Здесь используется недокументированная функция PsLookupProcessByProcessId, которая может быть описана как:

NTSTATUS PsLookupProcessByProcessId(PVOID ProcessId, PEPROCESS *Process );

Для получения имени исполняемого процесса можно воспользоваться следующей функцией:

// Используется недокументированное смещение в структуре данных

// для получения имени исполняемого в данный момент процесса

PWCHAR ProcessMonitorGetProcess(PEPROCESS Process, PWCHAR Name)

{

char *nameptr;

int i;

if( ProcessNameOffset ) {

i = 0;

nameptr = (PCHAR) Process + ProcessNameOffset;

while( nameptr[i] && i < NT_PROCNAMELEN-1 ) {

Name[i] = (WCHAR) nameptr[i++];

}

Name[i] = 0;

swprintf( Name + wcslen(Name), L":%d", PsGetCurrentProcessId());

} else {

wcscpy( Name, L"???" );

}

return Name;

}

Для получения значения переменной ProcessNameOffset можно воспользоваться следующей функцией:

// Используется непосредственный разбор Kernel Process

//Environment Block для поиска имени соответствующего системного

// процесса

ULONG TokenmonGetProcessNameOffset(VOID)

{

PEPROCESS curproc;

int i;

curproc = PsGetCurrentProcess();

for( i = 0; i < 3*PAGE_SIZE; i++ ) {

if( !strncmp( SYSNAME, (PCHAR) curproc + i, strlen(SYSNAME) )) {

return i;

}

}

// Имя не найдено

return 0;

}

Для получения информации о запущенных в системе процессах необходимо использовать специально предназначенные для этого API функции. С помощью API-функции CreateToolhelp32Snapshot, описанной в tlhelp32.dll сначала делается моментальный снимок системы, после чего функциями Process32First и Process32Next перечисляются все активные процессы. В параметрах этим функциям передается указатель на снимок (SnapShot) и адрес структуры, из которой извлекается вся информация о процессе, включая информацию о запущенных им нитях.

Сервисом или службой называется обычное Windows-приложение, содержащую дополнительную инфраструктуру, которая позволяет рассматривать его особым образом, например, давать возможность администратору запускать и останавливать это приложение с удалённой машины.

Сама ОС Windows включает много служб, например Event Log, Net Logon, Messenger и др. Работа служб обеспечивается взаимодействием компонентов трёх типов:

  1. диспетчер управления службами (Service Control Manager, SCM);

  2. приложение-служба;

  3. программа управления службой (Service Control Program, SCP).

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

Информация о системных сервисах может быть получена непосредственно из реестра, где в разделе HKLM\System\CurrentControlSet\Services располагается информация о каждом из системных сервисов и его параметрах (подробнее об этом можно прочитать в соответствующем разделе книги David A. Solomon, Mark Russinovich Inside Microsoft Windows 2000 ISBN 0-7356-1021-5, где приводится также и таблица с подробным описанием всех параметров), либо с помощью функций Win32 API для работы с сервисами. Например, функция EnumServicesStatus перечисляет сервисы из специальной базы данных сервисов, а функция OpenSCManager устанавливает соединение с базой данных сервисов на удалённом компьютере.