Р.Р. Гилязов
ОЦЕНКА ВРЕМЕНИ, ПРОШЕДШЕГО МЕЖДУ ДВУМЯ СОБЫТИЯМИ, В ОПЕРАЦИОННОЙ СИСТЕМЕ
В ходе данной работы будут рассмотрены практические аспекты и обозначена проблематика задачи измерения времени, прошедшего между двумя событиями. Также в соответствии с разработанной методикой будет проведена серия практических экспериментов, которые устанавливают влияние операционной системы, время реакции защитного программного обеспечения на вредоносное воздействие, а также оценивают некоторые свойства эвристики для конкретно выбранного программного продукта.
Ключевые слова: измерение времени, информационная безопасность, влияние операционной системы, эвристика, время реагирования защитного ПО, временные датчики.
В операционной системе в произвольные моменты времени в процессе функционирования происходят различного рода события. Представляет интерес задача подсчета времени, прошедшего между двумя событиями, особенно если одно из них влечет другое. В класс таких задач попадает множество тем, например оценка времени реакции защитного программного обеспечения на вредоносное воздействие, влияние операционной системы на время работы некоторых последовательностей машинных инструкций, профилирование и т. п. Однако по причине воздействия внешних факторов подсчет времени является нетривиальной задачей.
© Гилязов Р.Р., 2011
Постановка задачи
- Анализ средств и методик, позволяющих оценить количество времени, прошедшего между двумя событиями в операционной системе.
- Обозначение проблематики оценки количества времени, прошедшего между различными событиями.
- Проведение экспериментов, позволяющих оценить степень воздействия операционной системы на исполняемый код.
- Проведение экспериментов, позволяющих оценить время реакции защитного программного обеспечения на вредоносное воздействие.
Определение события
Пример 1
шоу еах, 0 // событие А
стр еах, 1 // событие В
Расстояние между событиями А и В в данном примере - это время работы последовательности машинных инструкций М.
Пример 2
Analyze
:Событие А
VirtualAllocEx
;Событие В
WriteProcessMemory CreateRemoteThread
Detect
7"
Y
ЗПО детектирует вредоносную активность на основе поведенческого
ВПО пытается внедрить вредоносную (111 в сторонний процесс
У
У
Расстояние между событиями A и B в данном примере - реакция защитного программного обеспечения (ЗПО) на вредоносное воздействие. В данном случае вредоносное программное обеспечение (ВПО) пытается внедрить dll в сторонний процесс, для получения доступа к его закрытому адресному пространству.
Введение функции расстояния между событиями
Для оценки расстояния между двумя событиями A и B введем функцию p(A, B).
Проанализируем аппаратные компоненты современного компьютера, которые можно использовать для введения такой функ-ции1, 2.
1. Programmable Interval Timer (PIT) (8253/8254)
Появился у первых ПК фирмы IBM. Имеет три эквивалентных канала. На вход каждого канала подается тактовая частота синхронизации - 1,193 либо 14,31818 МГц, точность порядка - 1 мс. Стандартная продолжительность одного тика таймера в Windows - 10 мс. Каждые 10 мс таймер генерирует прерывание, и соответствующий обработчик увеличивает системное время на 10 мс. Точность измерений сильно падает, если по какой-либо причине обработчик не сработает после соответствующего прерывания, что вполне вероятно. Windows использует PIT-аймер в основном для планирования потоков, для измерения времени ОС чаще использует другие, более точные таймеры, переход на PIT осуществляется только тогда, когда дополнительные таймеры недоступны.
2. Real Time Clock (RTC).
Общее название класса микросхем. Появился впервые в IBM-AT элемент (MC146818), дополнительно к 8254. Так же, как и с 8254, доступ обеспечивается через порт ввода-вывода. Точность часов - 1 мс, стандартная частота работы - 32768 Гц. RTC-таймер может быть перепрограммирован, в результате чего часы будут идти медленнее или быстрее. Точность показаний зависит как от состояния питающей батарейки (литиевый аккумулятор), так и от качества реализации микросхемы RTC со всеми обслуживающими ее компонентами. Некоторые из реализаций обнаруживают значительную нестабильность на временных интервалах порядка десятых долей секунды, что уменьшает точность измерений.
3. Таймер APIC
Обладает большинством свойств RTC. Создавался для синхронизации процессоров в многопроцессорных системах. Имеет низкую точность и невысокую стабильность работы ввиду конструктивных
недоработок. Существенный недостаток также в том, что некоторые реализации ведут себя нестабильно при определенных настройках электропитания. Присутствует не во всех современных системах. Стандартная частота таймера - 18,2 Гц, стандартное время тика -10 мс. APIC-ядра используют APIC-таймер в качестве основного таймера системы, при этом величина одного тика составляет 15 мс.
4. Таймер PM (ACPI-таймер)
По умолчанию тактируется частой 3,579545 MHz (тактовая частота PIT, разделенная на четыре), что обеспечивает точность измерений порядка 0,3 мс. ACPI-ядра используют PM-таймер в качестве основного таймера системы. Некоторые APCI-контролле-ры динамически изменяют частоту процессора или усыпляют его в паузах между работой для лучшего охлаждения, поэтому может присутствовать высокая корреляция между таймером PM и счетчиком TSC.
5. Таймер HPET3 (High Precision Event Timers)
Тактируется частотой от 10 MHz, при которой время одного тика составляет от 0,1 мс при точности порядка ±0,2% на интервалах от 1 до 100 мс. HPET планировался как замена программируемому интервальному таймеру PIT и возможностям RTC по генерации прерываний. В сравнении с прочими таймерами HPET имеет более высокую разрешающую и большую интервальную способность (число, по которому срабатывает таймер, хранится в 64-битном счетчике).
Примечание: 8254 и RTC способны аналогично HPET работать в режиме единичного срабатывания, однако процесс их настройки столь медленен, что их не используют в областях, требующих высокой разрешающей способности счетчика; вместо этого RTC/8254 обычно используются в периодическом режиме с малыми интервалами (порядка нескольких миллисекунд) с пропуском нужного количества интервалов. Подобное приводит к появлению частых прерываний, даже если они не нужны программе. При использовании HPET дополнительные прерывания не нужны, так как настройка HPET для единичного срабатывания существенно проще (и требует меньшего времени), чем для RTC/8254.
6. Счетчик TSC (Time Stamp Counter)
Увеличивается на 1 каждый такт работы процессора с момента его включения. Для чтения используется команда RDTSC. В современных процессорах не зависит от технологии энергосбережения.
Если в качестве функции p(A, B) выбирать таймер, то возникают проблемы следующего плана:
- сильная зависимость от оборудования, и особенно от производительности системы;
- низкая точность.
Такие недостатки меньше всего проявляются в счетчике TSC. В дальнейшем положим, что p(A, B) = RDTSC(B) - RDTSC(A). Данная функция должна быть строго положительной, поэтому событию B должно обязательно предшествовать событие A и данные события должны быть различны. Причем значение функции не определено, если одно из событий, являющихся аргументами данной функции, не произошло.
Рассмотрим практически аспекты применения данной функции при проведении экспериментов.
Практические аспекты применения функции p(A, B) для измерений
Для измерения расстояния между двумя событиями была выбрана функция p(A, B) = RDTSC(A) - RDTSC(B). Рассмотрим практические аспекты ее применения. Современный процессор имеет сложную архитектуру, которую необходимо учитывать при проведении измерений. Пусть A и B события. Для ускорения вычислений в процессоре присутствует конвейер. Если машинные инструкции, находящиеся между A и B, по каким-то причинам простаивают, процессор для оптимизации может выполнить другие команды, которые не попадают в измеряемый диапазон, что исказит результат. Чтобы избежать этого, необходимо использовать команды приоритетного выполнения, очищающие конвейер4. Одной из таких команд является CPUID. Важно помнить, что входной параметр этой команды при проведении измерений должен иметь одно и то же значение (передается через регистр eax).
Пример использования RDTSC
XOR EAX,EAX
CPUID
RDTSC
MOV[var],EAX;
; // событие A
;//. . .
;// событие B
XOR EAX,EAX CPUID RDTSC
SUB EAX, [var]
Конвейер процессора характеризуется пропускной способностью и латентностью. Если p(A, B) < латентности, то результаты
измерений крайне неточны. Также конвейер характеризуется длиной очевидно, что если p(A, B) < длины конвейера, то результаты измерений некорректны5.
Так как операционная система поддерживает многозадачность, то если p(A, B) > кванта переключения контекста, точность измерений падает из-за смены контекста процесса.
Кроме того, общая аппаратная конфигурация должна быть пригодна для измерений. Как правило, аппаратная погрешность незначительна и не превышает 1-3%, однако на некоторых тестируемых системах конфигурация вносила погрешность до 100%.
Если проводятся серии последовательных измерений, искажения вносят различные механизмы, разработанные для оптимизации, в основном это кэш и буферы ввода / вывода6, однако эти механизмы при необходимости можно отключить.
Так как измерения проводятся в среде операционной системы, она оказывает непосредственное влияние на проводимые эксперименты. Ставились эксперименты, в которых операционная система настолько влияла на проводимые измерения, что они отличались на несколько порядков.
При определенных экспериментах методика измерений очень сильно влияла на сами измерения, что не позволяло получать хоть сколько-нибудь значимые оценки.
Проведение экспериментов
Испытательный стенд
ЭВМ
Для получения более точных оценок используется однопроцессорная система.
Основные характеристики:
ЦП: Pentium 4 2.8Ghz, HyperThreading отключен, FSB 200 MHz ОЗУ: 2048 мб, DDR3 6400
ЖД: 120 gb, 7200 rpm
Операционная система
Для того чтобы уменьшить воздействие посторонних факторов на проводимые эксперименты, на испытательный стенд установлена оригинальная версия операционной системы с минимально необходимым для конкретного испытания программным обеспечением.
Защитное программное обеспечение
Общедоступное коммерческое защитное программное обеспечение. Предполагается, что все настройки являются настройками по умолчанию.
Компоненты, разработанные для тестирования
1. Был реализован компонент, который работает вне операционной системы и позволяет получить монопольный доступ к ресурсам компьютера.
2. Были разработаны компоненты, которые распознаются защитным ПО как вредоносные.
3. Был разработан компонент, при помощи которого отслеживается, сколько машинных тактов проходит между двумя событиями в операционной системе.
Методика подсчета метрик
Аспекты проведения экспериментов были проанализированы в теоретической части. Для оценки расстояния между событиями используется команда RDTSC.
Серия испытаний № 1
Цель: Выявление влияния операционной системы на выполнение последовательных инструкций в одном адресном пространстве одного процесса.
Методика эксперимента
Интересной задачей является установление влияния ОС на выполнение промежутков кода различного содержания. Для данного эксперимента был написан компонент, который работает вне операционной системы и позволяет получить монопольный доступ к ресурсам операционной системы. Был переписан MBR (Master Boot Record) загрузочного диска таким образом, чтобы управление отдавалось сначала на наше приложение, затем на загрузчик операционной системы. Конечно, можно выполнить вычисления для заданного промежутка кода вручную, однако такая методика не учитывала бы влияние аппаратной составляющей. Очевидно, что для корректности экспериментов требуется аккуратным образом выбирать промежутки кода. В теоретической части работы указаны проблемы вычисления расстояния между событиями и даны некоторые указания для проведения серий испытаний. Выберем участки кода различных типов и подсчитаем время их работы в режиме монопольного доступа к оборудованию и сравним с временем работы в среде операционной системы.
Описание экспериментов
1. Работа только с регистрами без участия оперативной памяти.
2. Работа преимущественно с оперативной памятью. При работе с памятью отключено кэширование и буферизация.
3. Работа преимущественно со стеком.
Количество прогонов в каждом эксперименте было равно 106. Для усреднения бралось среднее арифметическое.
Регистры Стек Память ф
ДА НЕТ НЕТ 1
ДА НЕТ ДА 1,31
ДА ДА НЕТ 1,43
ДА ДА ДА 1,36
Примечание. ф = pw / ре, где pw - время работы промежутка кода в среде операционной системы Windows, ре - время работы промежутка кода в режиме эксклюзивного доступа к оборудованию.
Полученные результаты
В ходе проведения данных серий первого эксперимента существенного влияния операционной системы не было установлено. Для остальных экспериментов были обнаружены воздействия, обусловленные, по всей видимости, механизмами кэширования стека и трансляции виртуальных адресов в физические. Полноценно природа влияния операционной системы изучена не была, так как это выходит за рамки данной работы.
Серия испытаний № 2
Цель: Выявление времени реакции защитного программного обеспечения на вредоносное воздействие.
Методика эксперимента
Интересной задачей является установление времени реакции на вредоносное ПО (ВПО) защитным программным обеспечением (ЗПО). В качестве вредоносного ПО были написаны небольшие примитивы, которые однозначно детектируются ЗПО. Дополнительно для данного эксперимента был написан компонент, который позволяет вычислять количество машинных тактов, прошедших между событием, произошедшим в адресном пространстве вредоносного примитива, и событием, являющимся реакцией на него ЗПО. Очевидно, что для корректности экспериментов требуется правильно разработать такую утилиту для ВПО. Так как мы обладаем исходными кодами, получать значение TSC несложно, но получение этого значения во время реакции ЗПО сопряжено с некоторыми трудностями. В данной серии испытаний под реакцией ЗПО будет считаться момент возникновения информационного окна с сообщением о вредоносной активности.
Описание экспериментов
1. Вредоносный файл находится на флэш-носителе. Он содержит сигнатуру, известную защитному ПО. Измеряется количество
машинных тактов, прошедших с момента включения режима сканирования до момента обнаружения вредоносного файла.
2. Вредоносный файл находится на флэш-носителе. Пользователь активирует его. Сигнатура известна ЗПО.
3. Вредоносный файл находится на флэш-носителе. Пользователь активирует его. Сигнатура неизвестна ЗПО. Однако ЗПО способно обнаружить ВПО, используя механизмы эвристического анализа.
4. Вредоносный файл находится на флэш-носителе. Пользователь активирует его. Сигнатура неизвестна ЗПО. ЗПО способно обнаружить ВПО, используя механизмы эвристического анализа. Однако перед промежутком кода, который распознается эвристикой как вредоносный, стоит значительное количество машинных инструкций, которые не распознаются эвристикой как потенциально опасные (см. рисунок).
;точка входа ¿событие А
событие В
:код, распознающийся эвристикой как потенциально опасный
¡событие С
р АЗ)=Д. Варьируя А, можно эффективно сбивать эвристику.
Полученные результаты
В ходе серий испытаний были получены конкретные значения для экспериментов № 1 и 2, которые являются статистически устойчивыми. Для эксперимента № 3 не удалось получить конкретных устойчивых значений.
Время работы Среднеквадратичное отклонение Номер эксперимента
316418419 22430711 1
2744532904 424891383 2
4708124743 3255607282 3
Для эксперимента № 4 удалось выбрать минимальную А так, чтобы эвристический анализатор не обнаруживал вредоносной активности.
Заключение
В ходе проведенных исследований была обозначена проблематика оценки времени, прошедшего между двумя событиями в системе. Были выявлены особенности, влияющие на точность оценок и корректность испытаний. Были поставлены серии практических экспериментов, которые выявляют влияние операционной системы на время выполнения кода. Также частично была рассмотрена задача оценки времени реагирования защитного программного обеспечения на вредоносное воздействие. В некоторых экспериментах для этой задачи установлена крайняя нестабильность получаемых результатов, что приводит к трудностям построения математической статистики и проведения комплексного анализа. Дополнительно были произведены некоторые исследования в области эвристики защитного программного обеспечения и было построено ВПО, не обнаруживаемое эвристическими механизмами.
Примечания
См.: Касперски К. Разгон и торможение Windows NT // Системный администратор. 2004. № 8.
См.: Руссинович М, Соломон Д. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Window 2000: Пер. с англ. 4-е изд. СПб.: Питер, 2008.
См.: Intel Corporation (October 2004), IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a) [Электронный ресурс]. [USA, 2004]. URL: http://www.intel.com/hardwaredesign/hpetspec_1.pdf (дата обращения: 20.12.2010).
_
3
См.: Intel, Using the RDTSC Instruction for Performance Monitoring [Элекронный ресурс]. [USA: Intel Corporation, 1997]. URL: http://pasta.east.isi.edu/ algorithms/IntegerMath/Timers/rdtscpml.pdf (дата обращения: 20.12.2010). См.: Касперски К. Техника оптимизации программ. Эффективное использование памяти. М.: БХВ-Петербург, 2003. См.: Руссинович М, Соломон Д. Указ. соч.
5
6