Journal influence
Bookmark
Next issue
Abstract:
Аннотация:
Author: () - | |
Ключевое слово: |
|
Page views: 13589 |
Print version Full issue in PDF (2.00Mb) |
Современные компьютерные локальные сети предоставляют большие возможности для разграничения прав доступа для различных пользователей, однако пользователь может повысить свои права в рамках локальной сети, воспользовавшись уязвимостями установленного в рамках сети программного обеспечения. Возможность воспользоваться уязвимостями внутри системы повышается благодаря тому, что зачастую вопросам внутренней безопасности уделяется гораздо меньше внимания. Актуальность проведения аналитического исследования ядра Windows NT заключается в необходимости создания надежных операционных систем реального времени, в повышении уровня защищенности и предоставлении конечным пользователям сведений о недекларированных возможностях операционных систем реального времени. Объект исследования – подсистема ввода-вывода, менеджер виртуальной памяти, микроядро ОС Windows NT 5.1. Целью данного исследования является разработка новых методов поиска скрытых процессов ядра. Для достижения поставленной цели необходимо выполнить следующие задачи: изучить модули планировщика задач ядра, реализовать алгоритмы поиска и предоставить общее описание принципов их работы. Рассмотрим основные положения предлагаемых программных методов.
Реализация методов SwapContex-факторинга и PsCidTable-сканирования Метод SwapContex-факторинга решает проблему повышения эффективности обнаружения вредоносного кода программ, эмулирует полностью системные вызовы в стеке процессора при обращении к ресурсам виртуальной памяти. Метод сканирования скрытых процессов (потоков) ядра посредством перехвата обращений к PsCidСontext-таблицам позволяет детектировать запуск любых процессов (потоков) в исполнительном пространстве ядра с введением проактивного контроля процессов планировщика ядра. Данный подход решает проблему повышения эффективности скрытых процессов ядра на уровне базовых примитивов безопасности. В работах Джоанны Ратковской, ведущего специалиста по разработке методов поиска сигнатур вирусов Массачусетского технологического университета, был описан метод перехвата вызовов базовых интерфейсов ядра (Ratkowska J., Heckerman D. A tutorial on learning NT Kern: Technical Report MSR-TR-95-06. – Microsoft Research: Advanced Technology Division, 2003). Однако данный подход не решает проблему обнаружения модифицированных потоков в контексте системных процессов. Необходимо разработать оригинальный метод поиска скрытых процессов с введением эффективного контроля исполнительной среды менеджера виртуальной памяти и реализовать алгоритм перехвата операций чтения-записи на уровне внутренних таблиц процессора. Если в системе имеется процесс, то, соответственно, он будет иметь свои потоки. Само переключение потоков выполняется неэкспортируемой функцией ядра SwapContext. Следует отметить, что на сегодняшний день не решена проблема сопряжения проектов верхнего и нижнего уровней Windows NT. Классический подход к анализу структуры swap-контекста не позволяет контролировать исполнение кода страниц подкачки, поскольку не учитывает интерфейсные механизмы нижнего уровня стека ядра. C точки зрения теории алгоритмов Маркова в системе должны быть описатель – блок, содержащий информацию об активационной записи процесса, и динамическая ссылка в таблицах выделения памяти. Поскольку каждый тип представления кода распознается процессором по 4 бита, а дешифратор памяти оперирует тетрадами кода адреса, то запись в базовые регистры осуществляется последовательно, с линейным смещением в булевом кольце на 4 позиции. При вызове процедуры записи данных в индексные и сегментные регистры командой lea производится вычисление исполнительного адреса (Executive task) со смещением +28h. Массив системных указателей создается со смещением 89h((100h-12h)+1), причем 12 бит – смещение за счет слова управления (PSW). Блок обработки событий записывает данные со смещением 12h. В глобальном пространстве ядро детектирует сегмент двойной ошибки стека. Весь цикл представляет собой чтение данных системных таблиц и активационной записи. При этом не учитывается процедура явного определения системного бита s при смене контекста задач. Интервалы временных диаграмм распознавания процессором данных имеют размерность 6 за счет преобразования в конвейере параллельного потока данных. На данном элементарном уровне представления была выявлена коллизия. В структуре описания состояния конечного автомата разница 28-24=4 содержит явно неопределенные значения булева вектора. Метод SwapContext-факторинг позволяет эмулировать неявные механизмы чтения-записи ps-таблиц ядра при обращении к дисковым устройствам. Опишем кратко новый метод поиска скрытых процессов при взаимодействии с менеджером памяти и подсистемой ввода-вывода. Данный метод основан на анализе опкода процессорных инструкций исполняемого кода. Переменная p содержит указатель на страницы кода (проверка значения маски Access), а системный бит s инициализируется при изменении cтатуса контекста активных задач. Значит, описанный 4-битный вектор представляет собой структуру вида p1s1 p2 s2, где p1p2 – указатели на контекст текущего и следующего потоков; s1s2 – атрибуты потоков соответственно. Стек имеет размерность 100h, причем старшие биты адресуют область защищенных страниц памяти, а младшие – сегменты общедоступной виртуальной памяти. Проиллюстрируем работу алгоритма сканирования при загрузке страниц виртуальной памяти фрагментом кода: void GetSwapContextinpsTable – функция просмотра кода внутреннего обработчика ядра{ PUCHAR cPtr, pOpcode; // передача опкода ULONG Length; {Length = SizeOfCode(cPtr, &pOpcode);(*(PUSHORT)pOpcode==0x2354 && *(pOpcode+2)==0xE8 }Значение опкода 2354 определяет режим уровня двоичной карты ввода-вывода, в котором разрешен прямой доступ к защищенным сегментам памяти при подкачке страниц. В методе Swap-факторинга используются специальные модификаторы кодового представления инструкций процессора. Старшие биты 01 в десятичном формате определяют область размерности 256 бит (зарезервированную системную область для стека). Младшие биты кодируют вектор размерности 192(256–64), поскольку необходимо резервировать память для записи 64-битного поля инструкций процессора. Мы эмулируем полностью вызов функции call ebx[esp] на уровне P-кода. Список структур EPROCESS (исполнительное пространство процессов) всех процессов в системе начинается с переменной ядра PsActiveProcessesLink, которая ядром не экспортируется, но ее можно получить с помощью анализа двухсвязного списка структур EPROCESS. Для получения списка всех процессов в системе нужно реализовать алгоритм сканирования PsCid-таблиц, минуя стандартные интерфейсные вызовы, получить указатель на EPROCESS любого процесса, после чего двигаться по спискам ActiveProcessesLink до той структуры, с которой начали. В качестве эталона необходимо получить указатель на EPROCESS процесса System, так как это единственный обязательный процесс в системе, который существует все время ее работы (после загрузки). Для получения этого указателя сначала получим с помощью функции ядра IoGetCurrentProcess указатель на EPROCESS текущего процесса, после чего будем двигаться по связанным спискам, просматривая содержимое структуры PsContext, пока не обнаружится процесс с Pid=0 и со значением бита подчинения Ord=0 (родительский процесс) – это и будет процесс System. В ходе экспериментов были выявлены недокументированные структуры внутренних дескрипторных таблиц ядра Windows, которые позволяют эффективно обнаруживать базовые процессы-потоки во взаимодействии с низкоуровневыми микрообъектами. Процессор разрешает обращаться к внутренним структурам через указатель &Context, поскольку во время операции теневого копирования блокируется доступ к внутренним регистрам программными средствами. Внедрившись в системный стек, автор получил прямой доступ к Context ID процессов ядра посредством оригинального метода. Теперь краткий фрагмент кода поиска EPROCESS процесса System выглядит так:UndocData: packed record // описание недокументированной внутренней структуры планировщика процессов ядра{Получение списка процессов прямым доступом к структурам ядра. {получение указателя на структуру EPROCESS для System }function GetSystemEPROCESS(): dword;Data.UndocAdr := @UndocData; // декларация недокументированных структур ps-таблиц ядра CallRing0(@Ring0Call, @Data);// вызов функции перехвата полного контекста Offset=01B0 (данное смещение позволяет получить доступ к контексту TSS-регистра)(*(PUSHORT)pOpcode==0x01B1 &&*(pOpcode+2)==0xE8)CurrentStruct:=pdword(dword(@Eprocess)+UndocData.ActivePsListOffset)^;// указатель на полный список активного контекста процессов ядра}. В заключение отметим, что материалы проведенных исследований использованы при создании средства защиты информации ViPNet Office Firewall компании «ИнфоТеКС» (г. Москва). Эффективность полученных результатов подтверждена документально. Уникальность предложенных автором методов заключается в том, что реализованные алгоритмы сканируют списки процессов и потоков посредством чтения данных из внутренних недокументированных структур микроядра. |
Permanent link: http://swsys.ru/index.php?id=298&lang=en&page=article |
Print version Full issue in PDF (2.00Mb) |
The article was published in issue no. № 4, 2007 |
Perhaps, you might be interested in the following articles of similar topics:
- Базовое программное обеспечение целостных компьютеризированных курсов в современной операционной обстановке
- Автоматизированное рабочее место расчета стоимости эксплуатации кораблей
- Автоматизированная система принятия решений при стратегическом планировании устойчивого развития региона в условиях нечеткой информации
- Компьютерный тренажер для операторов технологических процессов доменного производства
- Схемотехнические САПР для персональных компьютеров
Back to the list of articles