Разработка и исследование метода защиты от удаленных атак на основе диверсификации программного обеспечения тема диссертации и автореферата по ВАК РФ 05.13.19, кандидат технических наук Терешкин, Александр Васильевич

  • Терешкин, Александр Васильевич
  • кандидат технических науккандидат технических наук
  • 2007, Таганрог
  • Специальность ВАК РФ05.13.19
  • Количество страниц 157
Терешкин, Александр Васильевич. Разработка и исследование метода защиты от удаленных атак на основе диверсификации программного обеспечения: дис. кандидат технических наук: 05.13.19 - Методы и системы защиты информации, информационная безопасность. Таганрог. 2007. 157 с.

Оглавление диссертации кандидат технических наук Терешкин, Александр Васильевич

Введение.

Глава 1. Обзор средств защиты от удаленной эксплуатации уязвимостей.

1.1. Системы, внедряемые во время компиляции.

1.2. Системы, внедряемые на этапе компоновки программы.

1.3. Рандомизация расположения адресного пространства (ASLR).

1.4. Иные проекты.

1.5. Технологии защиты от эксплуатации ошибок в Windows.

1.5.1. Защита стека.

1.5.2. Защита кучи.

1.5.3. Безопасность SEH.

1.5.4. Рандомизация РЕВ.

1.5.5. Определение относительного виртуального адреса API функции.

1.5.6. Переписывание критичных указателей.

1.5.7. Запуск шелкода в РЕВ.

1.5.8. Безопасность указателей.

1.5.9. NX память и аппаратный DEP.

1.6. Выводы.

Глава 2. Теоретическое обоснование возможности диверсификации ПО.

2.1. Формальное определение нефункционального преобразования.

2.1.1. Базовые определения.

2.1.2. Эквивалентность программ.

2.1.3. Нефункциональные преобразования.

2.1.4. Свойства НФП.

2.2. Оценки НФП.

2.2.1. Мощность НФП.

2.2.2. Устойчивость преобразования.

2.2.3 Цена преобразования.

2.2.4 Главная мера.

2.3. Реализация нефункциональных преобразований на процессорах х86.

2.3.1. Замена регистров (уровень 1).

2.3.2. Перестановка множеств инструкций местами (уровень 2).

2.3.3. Процедурный подход (уровень 3).

2.3.4. Изменение прототипа функций (уровень 4).

2.3.5. Выделение случайных подфункций (уровень 5).

2.4. Выводы.

Глава 3. Разработка метода диверсификации программного обеспечения.

3.1. Общая архитектура генератора кода.

3.2. Язык FuzzAsm.

3.3. Используемость переменных.

3.4. Определение каркаса функции.

3.5. Внедрение «мусорного» кода.

3.6. Генерация кода.

3.7. Сборка кода.

3.8. Выводы.

Глава 4. Разработка алгоритмов декомпиляции и рекомпиляции исполнимого кода.

4.1. Декомпиляция.

4.1.1. Этапы декомпиляции.

4.1.2. Анализ структуры РЕ.

4.1.3. Предварительный анализ кода.

4.1.4. Дизассемблирование.

4.1.5. Построение связного списка блоков.

4.2. Рекомпиляция.

4.2.1. Пересчет относительных виртуальных и физических адресов.

4.2.2. Пересчет таблицы элементов релокации.

4.2.3. Перелинковка указателей.

4.2.4. Ассемблирование результатов в файл.

4.3. Выводы.

Глава 5. Экспериментальное исследование алгоритмов диверсифицирующих преобразований.

5.1. Измерение характеристик программ, оценка НФП.

5.2. Выводы.

Рекомендованный список диссертаций по специальности «Методы и системы защиты информации, информационная безопасность», 05.13.19 шифр ВАК

Введение диссертации (часть автореферата) на тему «Разработка и исследование метода защиты от удаленных атак на основе диверсификации программного обеспечения»

Актуальность темы

Теория компиляции начала разрабатываться и приобрела законченный вид задолго до того времени, когда необходимость защиты информации дала о себе знать. Возможно, поэтому разработчики компиляторов неохотно модифицируют языки и компиляторы для них, руководствуясь идеями экспертов защиты информации. К примеру, широко известная особенность языков С и С++, позволяющая адресовать элементы массива, находящихся за последним объявленным его элементом, требует от программиста особенного внимания при разработке ПО. Уязвимости в программах (в частности, сетевых), связанных именно с подобного рода ошибками, до сих пор являются самыми распространенными, причем пояснения для написания корректного кода существуют с 1989 года. Лишь относительно недавно появились «надстройки» над компиляторами для автоматического контроля ошибочного кода, причем только для времени исполнения. Ни один разработчик компиляторов языка С/С++ не расширил функциональность языка, добавив в нее проверки диапазонов памяти, к которым возможно обращение генерируемого кода.

Большинство существующих эксплоитов для успешной работы требуют предварительного указания некоторых характеристик, специфичных для атакуемой программной среды - к примеру, эксплоиты переполнения локальных буферов и кучи обычно привязываются к целевой системе путем указания в них фиксированного адреса определенной инструкции, передающей управления на шелкод, либо требуют точного указания размера переполняемого буфера. В обоих приведенных случаях для проведения успешной атаки атакующий должен иметь точную информацию о параметрах целевой системы. Существующие в настоящее время методы защиты от удаленных атак не предусматривают никакую модификацию защищаемого дистрибутива на машине конечного пользователя, тем самым, позволяя атакующему использовать факт абсолютной идентичности всех дистрибутивов атакуемого ПО. При наличии информации об уязвимости, присутствующей в ПО целевой машины, успешность атаки напрямую зависит от возможности обойти установленные механизмы защиты - иначе говоря, для успешной эксплуатации необходима информация об уязвимости целевого ПО и об уязвимости используемой системы защиты. Использование методов модификации исполнимых файлов дистрибутивов без изменения их функциональности, делающих популяцию дистрибутивов на машинах пользователей разнородной (то есть диверсифицированной), позволяет скрыть информацию, необходимую для подготовки эксплоита, что позволяет обезопасить защищаемую систему от удаленных атак, эксплуатирующих неизвестные ранее уязвимости захвата управления.

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

Целью работы является разработка и исследование метода диверсификации, обеспечивающего защиту сетевого программного обеспечения от атак, направленных на удаленный захват управления.

Для достижения указанной цели необходимо решить следующие задачи:

1. Разработать алгоритмы анализа (декомпиляции) ПО с закрытым исходным кодом для последующей модификации.

2. Разработать алгоритмы модификации исполнимого кода, позволяющие защищать ПО с закрытым исходным кодом от атак, использующих фиксированные адреса и фиксированные размеры локальных буферов, с целью захвата управления.

3. Выполнить обоснование использования диверсифицирующих преобразований с целью защиты от атак, направленных на захват управления.

4. Разработать алгоритмы рекомпиляции ПО с закрытым кодом, позволяющие интегрировать дополнительный функционал в исполнимый файл с сохранением оригинального функционала.

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

Методы исследования основаны на использовании теории нефункциональных преобразований, теории компиляции и теории вероятностей.

Основные положения и результаты, выносимые на защиту:

1. Метод диверсификации ПО с закрытым исходным кодом.

2. Алгоритмы диверсификации исполнимого кода.

3. Алгоритмы анализа и модификации исполнимого кода, позволяющие осуществить встраивание пассивных алгоритмов защиты путем его рекомпиляции.

4. Результаты экспериментального исследования предлагаемого метода.

Научная новизна работы заключается в следующем:

1. Разработан новый метод диверсификации исполнимого кода ПО.

2. Разработаны теоретические основы диверсификации ПО. Даны определения запутывающим и диверсифицирующим нефункциональным преобразованиям (НФП). Доказано, что НФП обладают рядом свойств, делающих возможным создание алгоритма, осуществляющего диверсификацию кода ПО.

3. Разработаны алгоритмы модификации исполнимого кода ПО, позволяющие осуществить эффективную защиту от атак, направленных на удаленный захват управления.

4. Разработаны алгоритмы анализа (декомпиляции) исполнимого кода в промежуточный код, которые обеспечивают применение алгоритмов модификации ПО.

5. Разработаны алгоритмы рекомпиляции исполнимого кода из промежуточного кода, позволяющие изменять (в т.ч. добавлять) функционал в исполнимые файлы без нарушения их работоспособности.

Практическая ценность работы.

Практическая значимость результатов диссертации заключается в следующем:

1. Разработанный метод диверсификации позволяют осуществить разнородность популяций ПО с целью защиты от удаленных атак.

2. Разработанный метод диверсификации ПО с закрытым исходным кодом может быть использован для защиты проприетарного ПО в системе конечного пользователя.

Использование результатов. Алгоритмы анализа и модификации исполнимого кода, являющиеся одним из основных результатов работы, были использованы ЗАО «РНТ» (г. Москва) при выполнении научно-исследовательской работы «Плеер».

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

Апробация работы. По теме диссертации опубликовано 10 научных статей и тезисов докладов. Основные результаты, полученные в ходе работы над диссертацией, были представлены на:

1. Всероссийской научной конференции студентов и аспирантов «Информационные технологии, системный анализ и управление», Таганрог (2003 г.).

2. Международной научно-практической конференции «Информационная безопасность», Таганрог (2004, 2005, 2006 г.).

3. Международной научно-практической конференции «Black Hat», Jlac-Berac, США (2006 г.).

Похожие диссертационные работы по специальности «Методы и системы защиты информации, информационная безопасность», 05.13.19 шифр ВАК

Заключение диссертации по теме «Методы и системы защиты информации, информационная безопасность», Терешкин, Александр Васильевич

5.2. Выводы

В данной главе была проведена экспериментальная проверка разработанных алгоритмов нефункциональных преобразований; приведены результаты экспериментов по вычислению характеристик ранее определенных НФП. Было экспериментально показано, что все рассмотренные НФП являются одновременно запутывающими и диверсифицирующими, согласно определениям, данным в главе 2, что дает возможность их использования в диверсифицирующем генераторе кода.

Разнородность популяции выходных исполнимых файлов исключает возможность использования фиксированных адресов кода и фиксированных длин локальных и системных буферов атакующим, что делает атаки, направленные на захват управления, бесполезными.

Заключение

В соответствии с поставленными целями, в итоге проведенных исследований и разработок были получены следующие основные научные результаты:

1. Предложен метод диверсификации исполнимого кода, который позволяет обезопасить защищаемую систему от удаленных атак, эксплуатирующих неизвестные ранее уязвимости захвата управления.

2. Дано строгое определение нефункциональному преобразованию программы, а также диверсифицирующему преобразованию программы. Доказано, что НФП обладают рядом свойств, делающих возможным создание алгоритма, осуществляющего диверсификацию кода. Разработанные алгоритмы диверсификации ПО с закрытым исходным кодом позволяют осуществлять генерирование разнородных участков кода, обладающих одинаковой функциональностью. Язык Р^гАвт, разработанный с целью использования его в качестве основного инструмента записи диверсифицированного кода, обеспечивает простоту осуществления диверсифицирующих преобразований на практике.

3. Разработанные алгоритмы анализа (декомпиляции) и рекомпиляции ПО с закрытым кодом позволяют интегрировать дополнительный функционал в исполнимый файл с сохранением оригинального функционала. Было выполнено обоснование использования НФП с целью противодействия атакам, направленным на срыв стека функции, а также направленным на срыв системной кучи.

4. Проведенная экспериментальная проверка разработанных алгоритмов нефункциональных преобразований показала, что все рассмотренные НФП являются одновременно запутывающими и диверсифицирующими, согласно определениям, данным в главе 2, что дает возможность их использования в диверсифицирующем генераторе кода. Согласно обоснованию использования диверсифицирующих НФП с целью противодействия атакам, направленным на срыв стека функции и переполнению системной кучи, данному в главе 3, данные преобразования защищают ПО от атак, направленных на захват управления.

Список литературы диссертационного исследования кандидат технических наук Терешкин, Александр Васильевич, 2007 год

1. C. Cowan et al. StackGuard: Automatic adaptive detection and prevention of buffer-overflow attacks. In USENIX Security Conference, January 1998. online at http://sheiTv.ifi.unizh.ch/cowan98stackguard.html

2. H Etoh, GCC extension for protecting applications from stack-smashing attacks, http://www.research.ibm.com/trl/projects/security/ssp/ June 20, 20053. 5 Vendicator, Stack Shield, http://www.angelfire.com/sk/stackshield/ June 20, 2005

3. G Richarte, Four different tricks to bypass StackShield and StackGuard protection, 2002, http://wwwl .corest.com/files/files/11 /StackguardPaper.pdf

4. A. Baratloo, T. Tsai, and N. Singh. Transparent Run-Time Defense Against Stack Smashing Attacks. In Proceedings of the USENIX Annual Technical Conference, 2000, online athttp://www.research.avavalabs.com/proiect/libsafe/doc/usenixOQ/paper.html

5. Homepage of the PaX Team, http://pax.grsecurity.net/

6. T. Durden, Bypassing PaX ASLR protection, Phrack 59, Article 9, 2002, available at http://www.phrack.org/show.php?p=59&a=9

7. H Shacham, M Page et al, On the effectiveness of address-space randomization, in Proceedings of the 11th ACM conference on Computer and communications security, 2004 online athttp://www.stanford.edu/~blp/papers/asrandom.pdf

8. Solar Designer, StackPatch, http://www.openwall.com/linux

9. C. Dik, posting to comp.security.unix, January 2, 1997http://groups.google.com/group/comp.security.unix/msg/9fafDc96a3blfc5f

10. H. Etoh, Stack Protection Systems: (propolice, StackGuard, XP SP2), 2005, Presented at CanSecWest 2005, online at http://cansecwest.com/core05/propolicehttp://www.nextgenss.com/papers/defeating'

11. MITRE, CVE Common Vulnerabilities and Exposures, http://cve.mitre.org

12. Y Huang, Protection Against Exploitation of Stack and Heap Overflows, 2003, online at http://www.cgisecurity.com/lib/AntiOverflows.pdf

13. M. Conover, XPSP2 Heap Exploitation.ppt, available at http://www.cvbertech.net/~shOkshOk/heap/

14. A. Anisimov, Defeating Microsoft Windows XP SP2 Heap protection and DEP bypass, 2005, online at http://www.maxpatrol.com/defeating-xpsp2-heap-protection.pdf

15. M. Pietrek, A Crash Course on the Depths of Win32™ Structured Exception Handling, in Microsoft Systems Journal, January 1997, online at http://www.microsoft.eom/msi/Q 197/exception/exception.aspx

16. B. Bray, Compiler Security Checks In Depth, 2002, available at http://msdn.microsoft.com/

17. M. Conover, 0. Horovitz, Reliable Windows Heap Exploits, 2004, presented at CanSecWest 2004, online at http://cansecwest.com/csw04/cswQ4-Oded+Connover.ppt

18. P. Ferrie, F. Perriot, Mostly Harmless, in Virus Bulletin, August 2004, online at http ://pferri e. tripod.com/vb/sasser.pd f

19. A. Ionescu, Introduction to NT Internals, Part 1, 2004, http://www.relsoft.net/Articles/Process/partl.pdf

20. S. Eclipse, kill-bill, 2005, http://www.phreedom.org/solar/exploits/msasn 1 -bitstring/

21. Intel Corporation, IA-32 Intel Architecture Software Developer's Manual, Volume 3, 2005, section 3.8, available athttp://developer.intel.com/design/pentium4/manuals/index new.htm

22. S. Andersen, V. Abella, Changes to Functionality in Microsoft Windows XP Service Pack 2, Part 3, 2004, http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2mempr.insp x

23. G. Wroblewski, General Method of Program Code Obfiiscation, Wroclaw, 2002

24. C. Collberg, C. Thomborson, D. Low, A Taxonomy of Obfuscating Transformations, Technical Report #148, Department of Computer Science, The university of Auckland, 1997

25. M. H. Halstead, Elements of Software Science, Elsevier North-Holland, 1977

26. Warren A. Harrison, Kenneth I. Magel, A complexity measure based on nesting level, SIGPLAN Notices 16(3):63-74,1981

27. Enrique I. Oviedo, Control Flow, Data Flow and Programmers Complexity, Proceedings of COMPSAC 80, Chicaho IL, 1980

28. C. Collberg, C. Thomborson, D. Low, Manufacturing Cheap, Resilient, and Stealthy Opaque Constructs, SIGPLAN-SIGACT POPL'98, ACM Press, San Diego, С A, January 1998

29. Терёшкин A.B. Нечеткая компиляция и ее использование в рекомпилирующей системе // Материалы VI Международной научно-практической конференции «Информационная безопасность», Таганрог, 2004 г.

30. Терёшкин А.В. Применение нечеткой компиляции в целях диверсификации ПО // Научная сессия МИФИ-2006. XIII Всероссийская научная конференция «Проблемы информационной безопасности в системе высшей школы» Сборник научных трудов, Москва, 2006 г.

31. Терёшкин А.В. Нечеткая компиляция и ее использование в целях диверсификации ПО // Материалы VIII Международной научно-практической конференции «Информационная безопасность», Таганрог, 2006 г.

32. Терёшкин А.В. Реализация методов нечеткой компиляции в генераторе кода // Известия ТРТУ №9 Специальный выпуск. Технические науки Материалы LII научно-технической конференции, Таганрог, 2006 г.

33. Терёшкин А.В. Маскирование системных вызовов от систем локального обнаружения вредоносного кода в ОС семейства Windows NT // Материалы VII Международной научно-практической конференции «Информационная безопасность», Таганрог, 2005 г.

34. Терёшкин А.В. Клонирование функций планировщика потоков в системах семейства Windows NT // Материалы VIII Международной научно-практической конференции «Информационная безопасность», Таганрог, 2006 г.

35. Терёшкин А.В. Нестандартное использование таблицы релокаций РЕ файла // Изд-во ООО «Радиомир Пресс». Радиомир. Ваш компьютер, №4, 2004 г.

36. Tereshkin A. Rootkits: Attacking Personal Firewalls // Black Hat USA, Las Vegas, 2006

37. Терёшкин А.В. Автоматическое генерирование кода планировщика потоков в системах семейства Windows NT // Известия ТРТУ №16 Тематический выпуск. Интеллектуальные и многопроцессорные системы, Таганрог, 2006 г.

38. S. Muchnik. Advanced Compiler Design Implementation // Academic Press, San Diego, CA, 1997

39. Y.N. Srikant, P. Shankar. The Compiler Design Handbook. Optimizations and Machine Code Generation // CRC Press, 2003.

40. A. Ахо, P. Сети, Дж. Ульман. Компиляторы: принципы, технологии и инструменты // Вильяме, 2003.

41. А. В. Костельцов. Построение интерпретаторов и компиляторов // СПб: Наука и Техника, 2001.

42. А. V. Aho, S. С. Johnson and J.D. Ullman, Code generation for expressions with common subexpressions, J. ACM, 24(1), January 1997.

43. J.R. Allen, K. Kennedy, C. Porterfield and J. Warren, Conversion of Control Dependence to Data Dependence, in conference Record for the 10th Annual ACM Symposium on Principles of Programming Languages, Austin, TX, January 1983.

44. К. Gallaher, J. Lyle, Using program slicing in software maintenance, IEEE Trans. Software Eng,. SE-17(8), August 1991.

45. D. Binkley, K.B. Gallaher, Program slicing, Adv. Comput., M. Zelkowitz, Ed., Academic Press, San Diego, CA, 1996.

46. M. Weiser, Program slicing, IEEE Trans. Software Eng,. 10(4), July 1984.

47. R. Allen, K. Kennedy, Optimizing Compilers for Modern Architectures, Morgan Kaufman, San Francisco, 2002.

48. P. Feautrier, Dataflow analysis of array and scalar references, Int. J. Parallel Programming, 20(1), February, 1991.

49. U. Benerjee, A theory of loop permutations, in Languages and Compilers for Parallel Processing, Research Monographs in Parallel and Distributed Computing, D. Gelernter, A. Nicolau and D. Padua, Eds., Pitman, London, 1990.

50. A. Appel, Modern Compiler Implementation in C, Cambridge University Press, London, 1998.

51. A. Appel, К. Supowit, Generalization of the Sethi-Ullman algorithm for register allocation, September 1996.

52. G. J. Chaitin, M.A. Alexander, A.K. Chandra, J.Cocke, M.E. Hopkins, P.W. Markstein, Register Allocation via coloring, Comput. Langages, 6,1981.

53. K.D. Cooper, T.J. Harvey, L. Torczon, How to build an interference graph, Software-Pract. Exper., 1998.

54. L.J. Hendren, G.R. Gao, E.R. Altman, C. Mukerjii, A Register Allocation Framework Based on Hierarchical Cyclic Interval Graphs, ACAPS Technical Memo 33 (revised), McGill University, February, 1993.

55. J. Fabri, Automatic Storage Optimization, SIGPLAN'79, 1979.

56. T.A. Proebsting, C.N. Fischer, Probabilistic Register Allocation

57. C. Ferdinand, H. Seldi, R. Wilhelm, Tree automata for code selection, Acta Inf,., 31, 1994.

58. M.Ganapathi, C.N. Fischer, J.L. Hennessy, Retargetable compiler code generation, Comput. Surv., 14(4), 1982.

59. E. Pelegri-Llopart, S.L. Graham, Optimal Code Generation for Expression Trees, in Proceedings of the 15th ACM Symposium on Principles of Programming Languages, 1988.

60. R. Wilhelm, D. Maurer, Compiler Design, International Computer Science Series, Addison-Wesley, Reading, MA, 1995.

61. M. Wolfe, Advanced Loop Interchange, in Proceedings 1986 International Conference on Parallel Processing, St. Charles, IL, August 1986.

62. M.J. Wolfe, C. Tseng, The power test for data dependence, IEEE Trans. Parallel and Distributes Syst., 3(5), September 1992.

63. A.C. Myers, Bidirectional object layout for separate compilation, in OOPSLA'95 Conference Proceedings: Object-Oriented Programming Systems, Languages and Applications, ACM Press, New York, 1995.

64. R.E. Hank, W.-M. Hwu, B.R. Rau, Region-based Compilation: Anth1.troduction and Motivation, in 28 IEEE-ACM International Symposium on Microarchitecture (MICRO), Ann Arbor, MI, 1995.

65. F. Mueller, D. Whalley, Avoiding Conditional Branches by Code Replication, in ACM SIGPLAN Conference on Programming Language Design and Implementation, La Jolla, CA, 1995.

66. В. Steffen, Data Flow Analysis as Model Checking, TACS, Sendai, Japan, Lecture Notes in Computer Science, Vol. 526, Springer-Verlag, New York, 1991.

67. Yinrong Huang. «Разнообразие ради выживания. Популяция из различных исполняемых модулей с одинаковой функциональностью». http://www.bugtraq.ru/librarv/programming/diversifv.html

68. J. Davidson, S. Jinturkar, Memory Access Coalescing: A Technique for eliminating Redundant Memory Access, in ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), Orlando, FL, June 1994.

69. T. Reps, S. Horwitz, M. Sagiv, Precise Interprocedural Dataflow Analysis Via Graph Reachability, in ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL), San Francisco, CA, January 1995.

Обратите внимание, представленные выше научные тексты размещены для ознакомления и получены посредством распознавания оригинальных текстов диссертаций (OCR). В связи с чем, в них могут содержаться ошибки, связанные с несовершенством алгоритмов распознавания. В PDF файлах диссертаций и авторефератов, которые мы доставляем, подобных ошибок нет.