Главная страница
Навигация по странице:

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

  • NetShareEnum

  • PsSetCreateProcessNotifyRoutine

  • EnumServicesStatus

  • 3. Оборудование

  • МУ_ЛР_БОС. А. С. Новиковым и обсуждены на заседании кафедры


    Скачать 1.1 Mb.
    НазваниеА. С. Новиковым и обсуждены на заседании кафедры
    Дата15.03.2022
    Размер1.1 Mb.
    Формат файлаdoc
    Имя файлаМУ_ЛР_БОС.doc
    ТипЛабораторная работа
    #396953
    страница12 из 17
    1   ...   9   10   11   12   13   14   15   16   17

    Лабораторная работа № 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 устанавливает соединение с базой данных сервисов на удалённом компьютере.
    3. Оборудование

    Персональный компьютер с установленной операционной системой MSWindows 2000 SP4, XPSP2, Vista или 7 и средами разработки ПО BorlandC++ Builder или MSVisualStudio 2005/2008/2010.
    4. Задание на работу

    1. Изучить теоретические положения по данной лабораторной работе.

    2. Разработать программное обеспечение согласно заданию преподавателя. Варианты заданий:


    Задание


    1

    Разработать программный модуль, осуществляющий просмотр открытых ресурсов и настроек доступа к ним (тип, путь (локальный и общий), домен и т.п.)

    2

    Разработать программный модуль для отображения локальных дисков на сетевые каталоги. Оформить в виде таблицы: “Локальный диск – Сетевое имя – Провайдер”

    3

    Разработать программный модуль, выдающий список установленных в системе сервисов с полной информацией о них

    4

    Разработать программный модуль, выдающий список работающих процессов в виде древовидной структуры, отражающей связь дочерний – родительский

    5

    Разработать программный модуль, обеспечивающий журналирование запускаемых процессов с указанием родительских процессов

    6

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

    7

    Разработать программный модуль, перечисляющий все открытые файлы в контексте заданного процесса.
    1   ...   9   10   11   12   13   14   15   16   17


    написать администратору сайта