Интернет магазин китайских планшетных компьютеров



Компьютеры - Перехват (программирование) - Виды перехвата системных функций

19 февраля 2011


Оглавление:
1. Перехват (программирование)
2. Виды перехвата системных функций
3. Перехват в режиме ядра
4. Иные формы перехвата



Основными методами перехвата являются:

  • Подмена адреса настоящей функции
  • Непосредственное изменение функции
  • Непосредственная подмена всего компонента приложения/системы

Методы можно также разделить по критерию режима выполнения:

  • Пользовательские методы: модификация IAT таблиц, сплайсинг. Их особенность в том, что невозможно что-либо изменить в поведении ядра операционной системы и его расширений.
  • Режима ядра:модификация SSDT/IDT таблиц, перехват в режиме ядра с модификацией тела функции. Позволяет модифицировать структуры данных и код любой части операционной системы и приложений.

Сплайсинг

метод перехвата API функций путем изменения кода целевой функции. Обычно изменяются первые 5 байт функции. Вместо них вставляется переход на функцию, которую определяет программист. Чтобы обеспечить корректность выполнения операции, приложение, которое перехватывает функцию, обязано дать возможность выполниться коду, который был изменен в результате сплайсинга. Для этого приложение сохраняет заменяемый участок памяти у себя, а после отработки функции перехвата восстанавливает измененный участок функции и дает полностью выполниться настоящей функции.

Особенности технологии

Для того чтобы программа могла использовать данную технологию, она должна иметь встроенный дизассемблерный движок и специальный дизассемблер длин, который позволит находить нужную функцию и корректно её изменять. Эта технология крайне платформенно-зависима, а потому требует тщательного контроля и проверки системы на соответствие версий, а также проверки самой функции на соответствие целевой. Системные функции могут меняться при выходе патчей и обновлений Windows, а также в результате модификаций со стороны других приложений. Ошибки при работе с данной технологией могут приводить к BSOD. В то же время эта технология позволяет осуществлять глобальный перехват API функций, влияя таким образом на все процессы в системе. Начиная с Windows XP SP2 для поддержки "горячего патча" Microsoft изменила стандартный пролог функций с трех байт до пяти, что позволяет не проводить анализ длин. Длины в пять байт хватает для замены пролога на опкоды дальнего перехода, а известный пролог позволяет корректно передать управление подменяемой функции.

Сферы применения сплайсинга и методы обнаружения

Он применяется:

  • В ПО, которому необходимо осуществлять функции мониторинга системы
  • Механизмом хуков в Windows
  • Различного рода вредоносными программами. Это основная технология сокрытия для руткитов пользовательского уровня

Основной метод обнаружения факта сплайсинга — это сравнение машинного кода функции, проверяемой на сплайсинг, и кода системной функции, полученного в заведомо чистой системе. Также в обнаружении сплайсинга функции может помочь контроль адресов перехода.

Сравнение с другими технологиями

  • Изменение IAT таблиц процесса. Данная технология не позволяет изменить поведение самой системной функции, а лишь дает возможность «обмануть» выбранное приложение, заставив его использовать вашу функцию. IAT таблица — таблица адресов функций, импортируемых процессом. Технология носит лишь локальный характер, хотя может быть применена сразу к группе приложений. Может быть довольно быстро обнаружена из-за необходимости загрузки DLL в адресное пространство целевого процесса. Сплайсинг же не требует DLL и внедрения в чужой процесс, обладает возможностью глобального захвата функции. У сплайсинга есть ещё одно преимущество: не все системные функции импортируются процессом через IAT. Например, функция может быть загружена вызовом GetProcAddress. Использование же непосредственной модификации кода функции снимает подобное ограничение.
  • Перехват в режиме ядра. Позволяет перехватывать любые функции, в том числе и экспортируемые ядром. Наиболее труден для обнаружения в случае успеха, так как позволяет фальсифицировать любые данные, предоставляемые операционной системой. Требует написания специального компонента для взаимодействия с ядром драйвера. Может привести к BSOD при неправильном программировании в режиме ядра. Может быть обнаружен на фазе загрузки драйвера в ядро или при проверке активных драйверов, а также при проверке ядра на изменения. Более трудный в программировании метод, чем сплайсинг, но более гибкий, так как позволяет перехватить функции самого ядра, а не только WinAPI функции, которые служат лишь посредником между ядром и программой, которая что-либо запрашивает у операционной системы.
  • Замена самой библиотеки с функцией. Весьма радикальное решение проблемы, обладающее рядом существенных недостатков:
  1. Требует замены файла на диске, что может быть запрещено и пресечено самой системой. Например, замену системных файлов Windows не позволит выполнить защита файлов Windows, хотя её можно и отключить. Такое действие может быть также обнаружено при статическом анализе системы ревизорами.
  2. Требуется полная эмуляция всех возможностей заменяемой DLL или иного компонента, что весьма трудоемко даже в случае открытости и осложняется необходимостью дизассемблирования в случае закрытости целевой программы.

Все это показывает, что это весьма нерациональный способ решения проблемы изменения поведения программы в случае возможности применения первых двух подходов или сплайсинга.



Просмотров: 3816


<<< Отладчик
Kernel panic >>>