На правах рекламы:
Чистка от пыли и замена клавиатуры ноутбука.
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Публикационная активность

(сведения по итогам 2016 г.)
2-летний импакт-фактор РИНЦ: 0,493
2-летний импакт-фактор РИНЦ без самоцитирования: 0,389
Двухлетний импакт-фактор РИНЦ с учетом цитирования из всех
источников: 0,732
5-летний импакт-фактор РИНЦ: 0,364
5-летний импакт-фактор РИНЦ без самоцитирования: 0,303
Суммарное число цитирований журнала в РИНЦ: 5022
Пятилетний индекс Херфиндаля по цитирующим журналам: 355
Индекс Херфиндаля по организациям авторов: 499
Десятилетний индекс Хирша: 11
Место в общем рейтинге SCIENCE INDEX за 2016 год: 304
Место в рейтинге SCIENCE INDEX за 2016 год по тематике "Автоматика. Вычислительная техника": 11

Больше данных по публикационной активности нашего журнале за 2008-2016 гг. на сайте РИНЦ

Вход


Забыли пароль? / Регистрация

Добавить в закладки

Следующий номер на сайте

4
Ожидается:
16 Декабря 2017

Новые методы поиска скрытых процессов ядра Windows NT 5.1

Статья опубликована в выпуске журнала № 4 за 2007 год.[ 21.12.2007 ]
Аннотация:
Abstract:
Авторы: Моляков А.С. () - , ,
Ключевое слово:
Ключевое слово:
Количество просмотров: 7648
Версия для печати
Выпуск в формате PDF (2.00Мб)

Размер шрифта:       Шрифт:

Современные компьютерные локальные сети предоставляют большие возможности для разграничения прав доступа для различных пользователей, однако пользователь может повысить свои права в рамках локальной сети, воспользовавшись уязвимостями установленного в рамках сети программного обеспечения. Возможность воспользоваться уязвимостями внутри системы повышается благодаря тому, что зачастую вопросам внутренней безопасности уделяется гораздо меньше внимания. Актуальность проведения аналитического исследования ядра 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 любого процесса, после чего двигаться по спискам ActiveProcess­esLink до той структуры, с которой начали. В качестве эталона необходимо получить указатель на 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 Fire­wall компании «ИнфоТеКС» (г. Москва). Эффективность полученных результатов подтверждена документально. Уникальность предложенных автором методов заключается в том, что реализованные алгоритмы сканируют списки процессов и потоков посредством чтения данных из внутренних недокументированных структур микроядра.


Постоянный адрес статьи:
http://swsys.ru/index.php?page=article&id=298
Версия для печати
Выпуск в формате PDF (2.00Мб)
Статья опубликована в выпуске журнала № 4 за 2007 год.

Возможно, Вас заинтересуют следующие статьи схожих тематик: