оптического потока с традиционными схемами рекуррентной (последовательной) обработки (типа фильтра Калмана).
Другим существенным ограничением рассмотренных локальных метопов является предположение о постоянстве оптического потока в локальной области, которое нарушается на границах объекта. В рас-
смотренных вариационных методах влияние этого ограничения уменьшается за счет использования сглаживающих весовых функций. Внедрение каких-либо методов уменьшения такого влияния на границах объекта в локальные методы может существенно повысить точность выделения объектов и увеличить точность вычисления потока в целом.
СПИСОК ЛИТЕРАТУРЫ
1. Lucas B., Kanade T. An iterative image registration technique with an application to stereo vision // Proc. of Imaging understanding workshop. 1981. P. 121-130.
2. Horn B.K.P., Schunck B.G. Determing optical flow // Artificial Intelligence. 1981. Vol. 17. P. 185-203.
3. Zach C., Pock T., Bischof EI. A duality based approach for realtime tv-11 optical flow // Ann. Symp. German Association Patt. Rccogn, 2007. P. 214-223.
4. Luettgen Mark R., Clem Karl W„ Willsky Alan S.
Efficient Multiscale Regularizaron with Applications to the Computation of Optical Flow // IEEE Trans, on image processing. 1993. P. 41—64.
5. Barron J.L., Fleet D.J., Beauchemin S.S. Performance of optical flow techniques // Intern. Journal of Computer Vision. 1994. P. 43-77.
6. Ryoo S., Rodrigues C., Stone S. et al. Program optimization study on a 128-core GPU // The Firs! Workshop on General Purpose Processing on Graphics Processing Units. 2007.
УДК: 004.258
A.B. Том или н, М.С. Стуков, A.A. Стенин
ПРИМЕНЕНИЕ ДИВЕРСИФИКАЦИИ В ЗАДАЧАХ ДИНАМИЧЕСКОЙ ЗАЩИТЫ ПАМЯТИ
Современные методы несанкционированного доступа (НСД) к компьютерным системам (КС), использующие различного рода уязвимости и ошибки работы с памятью, позволяют менее привилегированному пользователю КС, взаимодействующему с более привилегированной программой, воспользоваться ее правами доступа к системным ресурсам с целью изменения хода ее выполнения. Примерами могут служить несанкционированный запуск командной оболочки (shell) с правами администратора системы, выполнение вредоносного кода или же обход функций программной защиты. Следствием успешной попытки НСД к КС может стать:
несанкционированный доступ к конфиденциальной информации;
нарушение целостности конфиденциальной информации;
60
подмена или повышение привилегий пользователя КС;
отказ в обслуживании сервисов целевой КС.
Как свидетельствует статистика CVE NVD NIST3a 2008 год, в коммерческих операционных системах (ОС) семейства Microsoft Windows, проприетарных ОС семейства UNIX, свободных ОС семейства GNU/Linux было зарегистрировано 5844 уязвимости. При этом 8621 из них (14,75 %)
1 Статистика взята с учетом технических отчетов и уведомлений US-CERT и OVAL из CVE NVD NIST - Common Vulnerabilities and Exposures (CVE) National Vulnerability Database (NVD) National Institute of Standards and Technology (NIST) - Общие уязвимости и воздействия (CVE) в Национальном хранилише стандартов, основные уязвимости управления данными (NVD) при Национальном институте стандартов и технологий (NIST) США (см.: электр. ресурс http://nvd.nist.gov/).
Г
f
Проблемы передачи и обработки информации
пришлись на долю "классической" уязвимости "переполнение буфера" [ I). Статистика CVE NVD NIST, обзор популярного списка рассылки BugTraq, случаи массового распространения вирусов в сети Интернет, эксплуатирующих критические уязвимости в компонентах ОС, такие, как "эпидемии" LoveSun, Sasser, Code Red, показывают, что методы НСД (атак) на основе техник переполнения представляют наиболее серьезную утрозу информационной безопасности КС.
В статье рассматривается подход к защите КС, основанный надиверсификации программ. Предлагаемая технология, названная стохастической адресной обфускацией, представляет собой комбинацию трех различных техник - рандомизации размещения базовых адресов сегментов данных, стека, "кучи" (нераспределенной памяти), кода и библиотек, рандомизации порядка размещения буферов и функций (пермутация) и рандомизации дистанций (относительных адресов) между буферами (переменными) и функциями.
Анализ атак переполнения. Изучение механизмов атак, использующих техники переполнения [2-7), показало, что для успешного проведения любой из них нарушитель должен детально понимать внутреннее устройство целевой программы, а именно знать (предсказать) точное расположение в памяти уязвимых данных, указателей, кода, библиотек; расположение и размеры используемых буферов (переменных) и порядок их следования. Алгоритмы атак в общем случае выполняют подмену адреса возврата, хранимого в стеке, подмену указателя на код или данные л ибо выполняют переполнение уязвимого буфера с целью модификации указателя или
адреса возврата под буфером. В современных ОС, как правило, сегмент кода доступен только для чтения, для остальных сегментов памяти С/С++ программ можно выделить следующие комбинации цели атаки и метода ее достижения:
1. Модификация указателя на код (функции, виртуальные функции, функции динамической компоновки).
2. Модификация указателя на данные (сохраненного в стеке, в куче, в области неинициализированных данных (ВБЗ), в таблицах СОТ, в таблицах динамического связывания, \ТВЬ, в таблицах переходов).
3. Модификация данных (переменные, динамические буферы, буферы 1оп{утр).
В табл. 1 приводится классификация "вектора атаки" согласно комбинациям цели атаки и объекта модификации.
Для осуществления комбинаций 1 и 2 нарушителю требуется знать абсолютный адрес цели модификации, поэтому подобный класс атак можно назвать атаками, зависящими от абсолютных адресов (а); для осуществления комбинации 3 ему необходимо вычислить относительное расстояние (дистанцию) между перезаписываемым буфером и данными (адресами), подлежащими модификации, поэтому такой класс атаки можно назвать атаками, зависящими от относительных адресов (б). На рисунке представлена схема атак согласно их целям, объединяющая (а) и (б).
Анализ методов динамической защиты памяти. Современные методы динамической защиты памяти С/С++ программ от атак на основе техник переполнения можно разделить на пять категорий:
Таблица 1
вектора атак
Объект атаки Стек Указатель в стеке Куча Указатель в куче BSS Указатель BBSS
Цель модификации
Адрес возврата + + — + — +
Сохраненный базовый указатель + + — + — +
Указатель функции Локальная переменная + + + + + +
Параметр функции + + + + + +
Служебные таблицы — + — + — +
Буфер longjmp Локальная переменная + + + + + +
Параметр функции + + + + + +
Указатель кадра + + — + - +
С
Классификация атак, требующих вычисления дистанций и абсолютных адресов
(Объект атаки)
J
Указатель на код
(Цель модификации)
Данные(буфер)
Адрес Указатель
возврата кадра
Q Расположение цели )
Указатель функции
Служебные таблицы
Указатель
Стек
Ц В SS/кума
Данные
Стек 1 BSS 1 Куча I
Стек
BSS Куча
Схема атак согласно целям
методы проверочных значений (StackGuard, Stack Shield, Stack smashing protector);
методы проверки объектов (Jones & Kelly, CRED, Pointguard);
неисполняемая память(PaX, MemGuard); методы на основе эталонных функций с зашитой адреса возврата (LibSafe);
методы диверсификации (PaX ASLR). Проверочные значения эффективны против атак разрушения стека и их аналогов, но не защищают в ситуациях, когда объектом атаки является куча или BSS. Применение неисполняемой памяти приводит к существенному снижению производительности ОС, подобные методы сложны в реализации и не поддерживаются некоторыми аппаратными архитектурами. Проверки объектов эффективны только против атак, нацеленных на указатели, т. е. когда объект атаки — куча. Методы на основе эталонных функций с защитой адреса возврата заменяют ограниченный набор системных функций (getc(), strcpyí), printf() и т. д.) на их доверенные аналоги и не отслеживают ситуации переполнения пользовательских функций.
Задачи динамической зашиты памяти C/C++ программ могут быть эффективно решены методами, подобнымидиверсификации, предложенной Форрестом, Сомаяджи и Экли в [8]. Их подход заключается в искусственном увеличении стекового кадра добавлением случайного числа пробелов. При каждой операции размещения в стеке объекта размером больше 16 байт в стек случайным образом добавляется от 8 до 64 (с дискретным увеличением, кратным восьми) "пустых" байт. Таким образом, каждая копия уязвимой программы становится уникальной, т. е. отла-
женная атака против одной копии программы будет неудачной против других. Описанный метод применяется в модификации GCC v2.7.2.1.
Стохастическая адресная обфускация. Случайность в порядке размещения объектов программы существенно усложняет злоумышленнику задачу сбора информации, необходимой для проведения атаки, значительно повышает трудоемкость разработки атак, снижает не только вероятность успеха атаки, но и степень повторяемости атак на разных экземплярах одной и той же программы. Кроме того, для достижения успеха нарушитель вынужден выполнитьсериюодинаковыхатак, что, вероятнее всего, приведет к разрушению целевой программы и, соответственно, к обнаружению попытки НСД (например, внезапный останов сервиса ОС MS Windows или крах демона ОС UNIX).
На наш взгляд, подход диверсификации программ рандомизацией содержимого стековых кадров, предложенный Форрестом, Сомаяджи и Экли, целесообразно расширить до рандом иза-ции адресов размещения объектов внутри сегментов и рандомизации абсолютных адресов размещения сегментов программ в памяти. Данные задачи могут быть решены за счет комбинации следующих трансформаций объектов защищаемых программ (табл. 2).
В отличие от метода PaX ASLR2, где используются две техники трансформации (ран-
2 РаХ - заплатка (patch) к ядру ОС GNU/Linux 2,4 и 2,6, которая предоставляет возможность настроить минимальные права доступа приложений к страницам памяти и технологию диверсификации ASLR (Address space layout randomization).
4-
Проблемы передачи и обработки информации
Таблица 2
Методы и объекты трансформации
Метод Объекты
Рандомизация базовых адресов Сегмент кода. Сегмент данных. Область неинициализированных данных (BSS). Сегмент стека. Куча
Рандомизация адресов Разделяемые библиотеки: а) при использовании mmap( ); б) на этапе связывания. Пользовательские функции. Локальные переменные в стеке
Пермутация Статические переменные. Функции (в динамических разделяемых библиотеках или в исполняемом файле). Стековый кадр
Рандомизация дистанций Успешные запросы выделения памяти malloc( ). Стековый кадр: а) между базовым указателем и локальной переменной; б) перед параметрами функций. Функции (в динамических разделяемых библиотеках или в исполняемом файле)
домизация базового адреса тшар() разделяемых библиотек и рандомизация базового адреса стека кучи и адресного пространства процесса ОС), стохастическая адресная обфускаиия использует четыре общие техники трансформации и затрагивает практически все аспекты функционирования защищаемой программы.
В общем случае к трансформации программ предъявляются следующие требования:
трансформация должна быть "прозрачной", т. е. не может требовать перекомпиляции защищаемых программ и библиотек;
трансформация должна обеспечивать универсальную защиту от всех методов НСД на основе техник переполнения;
трансформация не должна вносить существенных задержек в работу защищаемых программ.
Предлагаемые методы рандомизации абсолютных адресов объектов программ затруднят осуществление атак (а), рандомизация дистанций между буферами (переменными), функциями и их пермутация, соответственно, затруднит осуществление атак (б). Предлагаемую технологию — стохастической адресной обфускации — можно отнести к семейству методов динамической защиты памяти. Направления дальнейших исследований заключаются в разработке прототипа защиты, осуществляющего описанную трансформацию, и экспериментальном исследовании его свойств.
СПИСОК ЛИТЕРАТУРЫ
1. Fayolle P.-A., Glaume V. A buffer overflow study. Attacks & Defenses, ENSEIEB. Networks and Distributed Systems. 2002. P. 18-28.
2. Levy E. Smashing the stack for fun and profit // Phrack Magazine. 1996. Vol. 49. Article 14.
3. Malt Conover. Security Development, Heap overflow tutorial. 1999.
4. Dil Dog. The Tao of Windows Buffer Overflow. 1998.
5. Riq A., Géra S. Advances in format string exploitation // Phrack Magazine. 2002. Vbt. 59. Article 12.
6. Rix D. Smashing C++ VPTR // Phrack Magazine. 2000. Vol. 56. Article 8.
7. Blexim F. Basic Integer Overflows // Phrack Magazine. 2002. Vol. 60. Article 10.
8. Forrest S., Somayaji A., Ackley D. Building diverse computer systems // 6th Workshop on Hot Topics in Operating Systems. 1997. P. 67-72.