Модель, алгоритмы и программный комплекс для автоматизированного поиска уязвимостей в исполняемом коде тема диссертации и автореферата по ВАК РФ 05.13.19, кандидат наук Шудрак Максим Олегович

  • Шудрак Максим Олегович
  • кандидат науккандидат наук
  • 2016, ФГБОУ ВО «Томский государственный университет систем управления и радиоэлектроники»
  • Специальность ВАК РФ05.13.19
  • Количество страниц 183
Шудрак Максим Олегович. Модель, алгоритмы и программный комплекс для автоматизированного поиска уязвимостей в исполняемом коде: дис. кандидат наук: 05.13.19 - Методы и системы защиты информации, информационная безопасность. ФГБОУ ВО «Томский государственный университет систем управления и радиоэлектроники». 2016. 183 с.

Оглавление диссертации кандидат наук Шудрак Максим Олегович

Введение

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

1.1. Введение в проблематику, основные термины и определения

1.2. Классификация уязвимостей и ошибок программного обеспечения

1.3. Модели и алгоритмы для поиска уязвимостей в исполняемом коде

1.4. Обзор и сравнение существующих инструментальных средств для автоматизированного поиска уязвимостей в исполняемом коде

1.5. Выводы

Глава 2. Модель и алгоритмы автоматизированного поиска уязвимостей в трассе программы с оценкой эффективности

2.1. Модель поиска уязвимостей в трассе программы

2.1.1. Алгоритм автоматизированного поиска уязвимостей в трассе

2.2. Методика трансляции исполняемого кода

2.2.1. Общий алгоритм частичной декомпиляции

2.2.2. Алгоритм интерпретации исполняемого кода

2.2.3. Алгоритм сборки

2.3. Алгоритм анализа помеченных данных

2.4. Метрики программного кода и их применение к задаче расчета эффективности тестирования

2.4.1. Алгоритм преобразования процедуры в граф

2.4.2. Описание метрик оценки сложности кода

2.5. Алгоритм расчета полноты и повышения эффективности тестирования ... 74 2.5.1. Алгоритм расчёта количества достижимых вершин в программе

2.6. Выводы

Глава 3. Элементы системы автоматизированного поиска уязвимостей и повышения эффективности

3.1. Описание подсистемы расчета полноты и повышения эффективности систем тестирования

3.2. Модуль расчета сложности покрытия

3.3. Описание подсистемы автоматизированного поиска уязвимостей в трассе

программы

3.3.1. Описание модуля частичной декомпиляции

3.3.2. Описание модуля анализа помеченных данных

3.3.3. Описание модуля детектирования уязвимостей

3.4. Выводы

Глава 4. Экспериментальная оценка эффективности комплекса

4.1. Общая схема взаимодействия подсистем в программном комплексе

4.2. Экспериментальная оценка эффективности метрик расчета сложности

покрытия

4.3. Экспериментальная оценка эффективности подсистем и программного

комплекса

4.4. Описание внедрений результатов диссертационной работы

4.5. Выводы

Заключение

Список сокращений и условных обозначений

Словарь терминов

Список литературы

Приложение 1. Список проанализированных приложений

Приложение 2. Статистический анализ частоты использования инструкций

архитектуры x86 современными компиляторами

Приложение 3. Показатели эффективности используемых метрик

Приложение 4. Результаты сравнительного анализа эффективности подсистем автоматизированного поиска уязвимостей в трассе программы 152 Приложение 5. Результаты экспериментального анализа подсистемы расчета

полноты и повышения эффективности тестирования

Приложение 6. Свидетельства о регистрации программы для ЭВМ

Приложение 7. Акты внедрения

Приложение 8. Дипломы и награды

4

Введение

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

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

Актуальность

Процесс безопасной разработки программного обеспечения сегодня регулируется множеством различных стандартов как в России, так и за рубежом. Несмотря на это разработчики и архитекторы продолжают допускать ошибки при разработке программных продуктов. Такие ошибки в свою очередь могут порождать серьезные проблемы, связанные с безопасностью информационных систем, в которых будут функционировать такие программные средства. В международной базе уязвимостей CVE (The Common Vulnerabilities and Exposures) ежедневно регистрируются десятки уязвимостей различного уровня опасности, в том числе и критические, которые могут приводить к компрометации информации на миллионах вычислительных устройств во всем мире.

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

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

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

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

Степень проработки темы исследования

Проблемой поиска уязвимостей в бинарном коде активно занимаются в следующих университетах: Беркли (Д. Сон, Л. Тао Вей, М. Пэйер, Ч. Хьёнсанг), Карне-ги-Меллона (Д. Брумли, С. К. Ча, Т. Авгеринос, А. Реберт, Э. Шварц), Техаса (Р. Вартел, В. Мохан, К. Гамлен, Ж. Лин), Калифорнии (М. Кова, В. Фельмештейгер), Колумбийском университете (А. Керомтис), а также в исследовательских лабораториях корпораций: Microsoft Research (П. Годефронд, М. Левин), IBM Research (Е.Р. Гарольд), Google (Д. Браунинг, Ж. Квин).

В РФ этой проблемой активно занимается Институт системного программирования РАН (Аветисян А.И., Падарян В. А). Проблема отказоустойчивости и безопасности программного обеспечения активно изучается на базе ФГУП НТЦ «Атлас» (Чижухин Г.Н., Бочкарева Ю.Г. и др.), на базе Сибирского государственного аэрокосмического университета им. М.Ф. Решетнева (Ковалев И.В., Антамошкин А.Н., Царев Р.Ю.). Также проблема изучалась в рамках кандидатских диссертационных работ на базе Санкт-Петербургского политехнического университета (Пе-ченкин А.И.) и Южного федерального университета (Благодаренко А.В.). На сегодняшний день авторы выделяют следующие базовые критерии для оценки эффективности систем поиска уязвимостей в исполняемом коде:

- количество детектируемых типов уязвимостей за промежуток времени;

- количество ошибок первого и второго рода;

- покрытие кода (отношение количества выполненных инструкций к их общему количеству в программе).

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

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

Целью данной работы является повышение эффективности автоматизированного поиска уязвимостей в исполняемом коде.

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

1. Провести критический анализ современных моделей, алгоритмов и их программных реализаций для поиска уязвимостей в исполняемом коде.

2. Разработать формальную модель автоматизированного поиска уязвимостей в трассе программы.

3. Разработать алгоритм автоматизированного поиска уязвимостей в трассе программы.

4. Разработать алгоритм расчета полноты и повышения эффективности тестирования.

5. Провести анализ эффективности разработанного алгоритма автоматизированного поиска уязвимостей в трассе программы.

6. Провести сравнительный анализ разработанного алгоритма расчета полноты и повышения эффективности тестирования с аналогами.

7. Реализовать предложенные алгоритмы в виде программного комплекса для экспериментальной оценки возможности детектирования ранее неизвестных уяз-вимостей в актуальных версиях программных продуктов.

Объектом исследования является исполняемый код программного обеспечения.

Предметом исследования являются инструменты поиска уязвимостей в исполняемом коде программного обеспечения.

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

Достоверность работы подтверждается результатами, полученными с использованием предлагаемого в работе подхода, и их сопоставлением с имеющимися современными теоретическими и экспериментальными данными, полученными другими авторами в этой области, а также обнаружением c помощью разработанного программного комплекса специально заложенных и ранее известных уязви-мостей вместе с фактом обнаружения ранее неизвестных уязвимостей в широко распространенных программных продуктах, которые были официально подтверждены Internet System Consortium и Национальным институтом стандартов и технологий США.

Научная новизна

В диссертационной работе были разработаны:

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

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

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

Практическая значимость работы

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

Результаты работы по повышению эффективности поиска уязвимостей в программных продуктах были внедрены в рабочий процесс ООО «ГуардНет», ООО

«ИнфоТраст», а также в образовательный процесс ФГБОУ ВО СибГАУ им М.Ф. Решетнева для студентов следующих специальностей: 090105 «Комплексное обеспечение информационной безопасности», 090106 «Информационная безопасность телекоммуникационных систем», 090900.68 «Информационная безопасность». Элементы подсистемы декомпиляции бинарного кода были внедрены в проект по анализу бинарного кода в IBM Research Israel в 2014 г., а элементы подсистемы анализа ошибок были разработаны и внедрены в систему тестирования внутренних разработок компании Google в рамках программы поддержки проектов с открытым исходным кодом Google Summer of Code 2014.

Помимо этого в ходе экспериментального тестирования системы были найдены две ранее неизвестные критические уязвимости в видеофильтре LAV и в DNS - сервере BIND9, за что получена официальная благодарность от международной организации Internet System Consortium с присвоением идентификатора в международной базе уязвимостей CVE-2013-4854.

Положения, выносимые на защиту:

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

Соответствует пункту 7 паспорта специальности 05.13.19. Анализ рисков нарушения информационной безопасности и уязвимости процессов переработки информации в информационных системах любого вида и области применения.

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

Соответствует пункту 7 паспорта специальности 05.13.19. Анализ рисков нарушения информационной безопасности и уязвимости процессов переработки информации в информационных системах любого вида и области применения.

3. Программная реализация алгоритма расчета полноты и повышения эффективности тестирования позволяет путём удаления и приоритизации тестовых данных снижать на 26-29% временные затраты, необходимые на поиск уязвимостей в анализируемой программе.

Соответствует пункту 10 паспорта специальности 05.13.19. Модели и методы оценки эффективности систем (комплексов) обеспечения информационной безопасности объектов защиты.

Апробация результатов работы

Основные положения и результаты работы были опубликованы в 14 научных статьях и тезисах докладов. Из них 5 публикаций в журналах, входящих в перечень рецензируемых научных журналов и изданий, рекомендованных ВАК, 2 зарубежные статьи индексируются в международной базе Scopus. Результаты работы докладывались на семинарах кафедры БИТ СибГАУ им. М.Ф. Решетнева в 2013 и 2015 г., на семинаре кафедры КИБЭВС Томского государственного университета систем управления и радиоэлектроники в 2015 г., на научно-техническом семинаре группы Emerging Quality Technologies научно-исследовательского подразделения IBM Research Израиль в 2014 г., а также на следующих конференциях:

1. Третья международная научная конференция «High performance computing HPC-UA 2013». Киев, Украина 04 - 08 октября 2013.

2. Международная научно - практическая конференция «Kaspersky CyberSecu-rity for the Next Generation 2013». Лондон, Великобритания 25 - 26 июня 2013.

3. Международная научная конференция «IEEE EuroCon 2013», Загреб, Хорватия 01- 04 июля 2013.

4. Региональный этап международной научно-практической конференции «Kaspersky CyberSecurity for the Next Generation. CIS round 2013» Ереван, Армения 20 - 22 февраля 2013.

5. Международный симпозиум «UKSim 6th European Symposium on Computer Modeling and Simulation». Валлетта, Мальта 14-16 ноября 2012.

6. II Всероссийская молодежная конференция «Перспектива - 2012». Таганрог. 24 - 28 июня 2012.

7. XVI и XIV Международные научные конференции «Решетневские чтения» Красноярск. 11 - 14 ноября 2012 и 2014 гг.

8. XVII Всероссийская научно-техническая конференция студентов, аспирантов и молодых ученых «Научная сессия ТУСУР». Томск 16-18 мая 2012.

9. XI Всероссийский конкурс - конференция студентов и аспирантов по информационной безопасности - 2011». Томск 20 - 22 апреля 2011.

По теме работы было получено 6 свидетельств на регистрацию программы для ЭВМ и БД (см. приложение 6). Также результаты работы были отдельно отмечены дипломами и наградами (см. приложение 8). Работа по теме диссертации (в качестве основного проекта под руководством автора диссертации) проводилась в рамках следующих грантов и контрактов:

- грант РФФИ №14-07-31350 мол_а на 2013-2015 гг. «Разработка и апробация методик автоматизированной оценки надежности и безопасности современных программных продуктов в условии отсутствия исходных кодов».

- грант Минобрнауки РФ №14.132.21.1365 на 2012-2013 гг. «Разработка программного комплекса декомпиляции бинарного кода».

- контракт № ВГ_2011_6 ЗАО «Лаборатория Касперского» на 2010 - 2011 гг. «Анализ запутывающих преобразований в машинном коде относительно вредоносных объектов».

Личный вклад

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

Объем и структура работы

Диссертация содержит: введение, 4 главы, заключение, список литературы (105 наименований) и 8 приложений. Общий объем диссертации составляет 183 страницы, включающих в себя 16 таблиц и 50 рисунков.

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

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

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

В третьей главе описываются основные подсистемы и модули разрабатываемого комплекса. Дается описание методики динамической бинарной инструмен-

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

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

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

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

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

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

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

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

Глава 1. Проблемы и анализ существующих подходов для поиска уязвимо-

стей в исполняемом коде

1.1. Введение в проблематику, основные термины и определения

Процесс разработки программного обеспечения невозможен без тех или иных ошибок, допускаемых программистами или архитекторами в ходе своей работы. Такие ошибки в свою очередь могут порождать серьезные уязвимости, связанные с безопасностью разрабатываемого программного продукта и обрабатываемой им информации. Статистическое исследование международной базы уязвимостей CVE [1] за период с 1988 по 2014 показывает, что пик выявления уязвимостей пришёлся на 2006-2007 год, после чего наблюдался спад до 2011 года, а затем рост возобновился [2] (рисунок 1.1).

5 01

5 <0

ю

к >

0 <0 I-

и

01 т

е; О 5С

12000 10000 8000 6000 4000 2000

9685

7423

6612 6518

5636 5733

4931

2 3 11 15 13 13 25 25 75 252 247

2156 2451 1677 1528

|152< _1

5281

4638 4151

ооо10*4гчт^1люг-~ооо10*4гчт^1люг-~ооо10*4гчт^ 0000010101010101010101010000000000*4*4*4*4*4 010101010101010101010101000000000000000 *4*4*4*4*4*4*4*4*4*4*4*4ГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧГЧ

Год

0

Рисунок 1.1. Статистика уязвимостей, зарегистрированных в международной

базе CVE с 1988 по 2014 год

Причем необходимо отметить, что 72% всех уязвимостей за все годы наблюдения были обусловлены некорректной работой программы с памятью и ошибкой переполнения буфера (рисунок 1.2). Классификация и детальный анализ каждого типа ошибок и порождаемых ими уязвимостей будет приведен далее в этой главе.

Форматирование строк Состояние гонки

Целочисленные

■ Работа с памятью

■ Переполнение буфера

■ Гибридные

■ Целочисленные

■ Форматирование строк

■ Состояние гонки

■ Другие

Рисунок 1.2. Доля каждого типа ошибки в общей статистике международной

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

Рассмотрим вопрос природы возникновения уязвимостей в программном обеспечении. Как было отмечено выше, уязвимость является следствием ошибок, допущенных в процессе проектирования или разработки. Ошибки в программном обеспечении в свою очередь являются следствием развития современных информационных технологий в части увеличения объема, сложности и требований к масштабируемости программного кода. Достаточно показательным является статистическое исследование компании Coverity по 500 проприетарным программным продуктам, содержащим более 600 млн. строк кода и 741 самому популярному продукту с открытым исходным кодом [3]. Так, по данным этого отчета, на 1000 строк кода в программном обеспечении с открытым исходным кодом приходится в среднем 0.72 ошибок, а для проприетарного эта цифра составляет в среднем 0.59 ошибки на тот же объем программного кода. Современный же программный продукт состоит из миллионов строк (например, ядро Linux содержит более 15 млн. строк кода) и может содержать десятки и сотни потенциальных ошибок, которые могут порождать уязвимости.

базы CVE для компилируемых языков

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

Необходимо отдельно отметить, что в РФ требования по анализу безопасности программного кода содержатся в ряде нормативно - методических документов [4,5]. Не будем подробно останавливаться на анализе нормативно - методической базы, а лишь отметим ряд ключевых моментов. Так в [6] устанавливается процедура обязательного прохождения сертификации средств обработки и защиты информации, обрабатывающих государственную тайну, а в [7] устанавливается процедура обязательного применения сертифицированных средств защиты информации для защиты персональных данных. В рамках сертификации предусмотрено проведение анализа программного кода на предмет отсутствия НДВ в испытательной лаборатории.

Стоит отметить, хотя верификация программы является в общем случае алгоритмически неразрешимой задачей [8], на практике активно применяются различные методики, наибольшую популярность среди которых получили методы статического и динамического тестирования ПО. Российские руководящие документы [5, 6] в рамках этого анализа предусматривают:

1. Контроль состава и содержания документации.

2. Контроль исходного состояния ПО.

3. Статический анализ исходных текстов программ, включающий в себя:

- контроль полноты и отсутствия избыточности исходных текстов;

- контроль соответствия исходных текстов по его объектному (загрузочному) коду;

- контроль связей функциональных объектов по управлению;

- контроль связей функциональных объектов по информации;

- контроль информационных объектов;

- контроль наличия заданных конструкций в исходных текстах;

- формирование перечня маршрутов выполнения функциональных объектов;

- анализ критических маршрутов выполнения функциональных объектов;

- анализ алгоритма работы функциональных объектов на основе блок-схем, диаграмм и т. п., построенных по исходным текстам контролируемого ПО.

4. Динамический анализ исходных текстов программ, включающий в себя:

- контроль выполнения функциональных объектов;

- сопоставление фактических маршрутов выполнения функциональных объектов и маршрутов, построенных в процессе проведения статического анализа.

Вышеописанные методики позволяют проводить анализ ПО на НДВ при наличии исходного кода, однако их применение для анализа исполняемого кода ограничено. Также даже при наличии исходного кода существует проблема того, что

преобразования, выполняемые компилятором и различными оптимизаторами, могут значительно изменить поведение приложения, сделав результаты аудита исходного кода недостоверными. Например, ниже С - функция memset выполняет перезапись пароля пользователя нулями в участок памяти, на который указывает переменная password:

memset(password, Л\0', len);

Для статического анализатора и даже для эксперта такой код будет вполне безопасным, однако компилятор при оптимизации может удалить вызов функции memset, тем самым оставив конфиденциальную информацию в куче. В зарубежной литературе эта проблема носит название «What You See Is Not What You execute» [9].

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

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

Список литературы диссертационного исследования кандидат наук Шудрак Максим Олегович, 2016 год

- 20 с.

13. ГОСТ Р 50922-2006 Защита информации. Основные термины и определения - М.: Стандартинформ, 2008 - 12 c.

14. Dowd M. The art of software security assessment: Identifying and preventing software vulnerabilities / M. Dowd, J. McDonald, J. Schuh - Boston, USA: Addison-Wesley Professional, 2006 - 1244 p.

15. Krsul I.V. Software vulnerability analysis: PhD dissertation / Krsul Ivan Victor

- Purdue University, USA, 1998 - 188 p.

16. Christey S. Vulnerability type distributions in CVE [Электронный ресурс] / Christey S., Martin R.A // Mitre report - 2007 - Режим доступа: http: //cwe.mitre. org/documents/vuln-trends/index.html.

17. Piessens F. A taxonomy of causes of software vulnerabilities in internet software / Piessens F. // Supplementary Proceedings of the 13th International Symposium on Software Reliability Engineering. IEEE Computer Society Press. - 2002. - p. 47-52.

18. Cifuentes C. Interprocedural data flow recovery of high-level language code from assembly. / Cifuentes C., Fraboulet A. // Technical Report 421. - University Queensland. - 1997. - 16 p.

19. Долгова, К. Н. О некоторых задачах обратной инженерии. / Долгова, К. Н., Чернов А. В. // Труды Института системного программирования РАН. - 2008 -№15 - с. 119-134.

20. Дизассемблер IDA. // Доступ осуществлен 30.07.2015 по адресу: https://www.hex-rays.com/products/ida/

21. Встроенный отладчик и дизассемблер в Linux gdb. // Доступ осуществлен 30.07.2015 по адресу: www.gnu.org/s/gdb/

22. Интерактивный отладчик OllyDbg. // Доступ осуществлен 30.07.2015 по адресу: www.ollydbg.de.

23. Интерактивный отладчик WinDbg. // Доступ осуществлён по адресу www.windbg.org 30.07.2015.

24. Система динамической бинарной инструментации Intel PIN. // Доступ осуществлен 30.07.2015 по адресу: https://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool.

25. Система динамической бинарной инструментации DynamoRIO. // Доступ осуществлен 30.07.2015 по адресу: www.dynamorio.org.

26. Cova M. Static detection of vulnerabilities in x86 executables. / Cova M., Felmetsger V., Banks G., Vigna G. // IEEE 22nd Annual Conference in Computer Security Applications ACSAC'06 - 2006 - pp. 269-278.

27. King J. C. Symbolic Execution and Program Testing. / King J. C. // Journal of the ACM - 1976 - № 19(7) - pp. 385-394.

28. De Moura L. Z3: An efficient SMT solver. / De Mourn L., Bj0rner N // InTools and Algorithms for the Construction and Analysis of Systems, - Springer Berlin Heidelberg - 2008 - pp. 337-340.

29. Brummayer R. Boolector: An efficient SMT solver for bit-vectors and arrays. / Brummayer R., Biere A. // In Tools and Algorithms for the Construction and Analysis of Systems. - Springer Berlin Heidelberg - 2009 - p. 174-177.

30. Bofill M. The barcelogic SMT solver. / Bofill M., Nieuwenhuis R., Oliveras A., Rodriguez-Carbonell E., Rubio A. // In Computer Aided Verification - Springer Berlin Heidelberg - 2008. - p. 294-298.

31. Ganesh V. A decision procedure for bit-vectors and arrays. / Ganesh V., Dill D.L. // In Computer Aided Verification - Springer Berlin Heidelberg - 2007 - p. 519531.

32. Каушан В.В. Методы поиска ошибок в бинарном коде / В.В. Каушан, Ю.В. Маркин, В.А. Падарян, А.Ю. Тихонов // Технический отчет Института системного программирования РАН - 2013 - № 2013-1 - с 42.

33. Desoli G. Deli: A new run-time control point / Desoli G., Mateev N., Duester-wald E., Faraboschi P., Fisher J.A. // in Proceeding of the 35th annual ACM/IEEE international symposium on Microarchitecture - IEEE Computer Society Press - 2002 -p. 257-268.

34. Miller B. P. An Empirical Study of the Reliability of UNIX Utilities / Miller B. P., Fredriksen L, So B. // Communications of the ACM - 1990 - №33 (12) - p. 32 - 44.

35. Благодаренко А.В. Разработка метода, алгоритмов и программ для автоматического поиска уязвимостей программного обеспечения в условиях отсутствия исходного кода: дис. ... канд. тех. наук: 05.13.19 / Благодаренко Артем Васильевич. - Таганрог, 2011. - 129 с.

36. Довгалюк П.М. Внесение неисправностей в программу с использованием детерминированного воспроизведения / П.М. Довгалюк, Ю.В. Маркин. // Труды Института системного программирования РАН/ - 2014 - том 26, вып. 2 - с 119.

37. Аветисян А.И. Восстановление структуры бинарных данных по трассам программ / А.И. Аветисян А.И. Гетьман // Труды Института системного программирования РАН. - 2010 - т. 19 - с. 195 - 214.

38. Banks G. SNOOZE: toward a Stateful NetwOrk prOtocol fuzZEr. / Banks G, Cova M., Felmetsger V., Almeroth K., Kemmerer R., Vigna G. // In Information Security - Springer Berlin Heidelberg - 2006 - p. 343-358.

39. Kim H. Practical security testing using file fuzzing. / Kim H., Choi Y., Lee D., Lee D. // 10th International Conference on Advanced Communication Technology. -2008 - vol. 2 - p. 1304-1307.

40. Brumley, D. Automatic patch-based exploit generation is possible: Techniques and implications. / Brumley, D., Poosankam, P., Song, D., Zheng, J. // IEEE Symposium on Security and Privacy - 2008 - p. 143-157.

41. Takanen A. Fuzzing for software security testing and quality assurance / Takanen A., Demott J.D., Miller C. - USA., Artech House Norwood, 2008- 230 p.

42. Schwartz E.J. All you ever wanted to know about dynamic taint analysis and forward symbolic execution (but might have been afraid to ask). / Schwartz E.J., Avge-rinos T., Brumley D. // IEEE Symposium on Security and Privacy (SP). - 2010 - pp. 317-331.

43. Cadar C. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. / Cadar C., Dunbar D., Engler D. // In Proceedings of the USENIX Symposium on Operating System Design and Implementation. - 2008 - vol. 8 - pp. 209-224.

44. Godefroid P. DART: directed automated random testing. / Godefroid P., Klar-lund N., Sen K // ACM Sigplan Notices - 2005 - vol. 40 № 6 - pp. 213-223.

45. Sen K. CUTE: A concolic unit testing engine for C. / Sen K., Marinov D., Agha G. // In Proceedings of the joint meeting of the European Software Engineering Conference and the ACM Symposium on the Foundations of Software Engineering - 2005 -Vol. 30, No. 5 - pp. 263-272.

46. Тихонов А. Ю. Развитие taint-анализа для решения задачи поиска программных закладок. / А. Ю. Тихонов, А. И. Аветисян. // Труды Института системного программирования РАН - 2011 - 20 - 8 c.

47. Last M. Effective Black-Box Testing with Genetic Algorithms / M. Last, S. Ey-al, A. Kandel // Haifa Verification Conference. Lecture Notes in Computer Science -Springer - 2005 - vol. 3875 - pp. 134-148.

48. Sparks S. Automated vulnerability analysis: Leveraging control flow for evolutionary input crafting. / Sparks S., Embleton S., Cunningham R., Zou C // Twenty-Third Annual Conference in Computer Security Applications IEEE ACSAC 2007 - 2007 -pp. 477-486.

49. Seagle R.L. A Framework for File Format Fuzzing with Genetic Algorithms: PhD thesis / Seagle R.L. - Univ. of Tennessee, Knoxville - 2012 - 144 p.

50. Rawat S. An evolutionary computing approach for hunting buffer overflow vulnerabilities: A case of aiming in dim light. / Rawat S., Mounier L // IEEE European Conference on Computer Network Defense (EC2ND) - 2010 - pp. 37-45.

51. Godefroid P., Kiezun A., Levin M.Y. Grammar-based whitebox fuzzing. / Godefroid P., Kiezun A., Levin M.Y // ACM Sigplan Notices. - 2008 - vol. 43 № 6 -pp. 206-215.

52. Sutton M. Fuzzing: Brute Force Vulnerability Discovery. / Sutton M., Greene A., Amini P. - USA: Addison-Wesley Professional - 2007 - 576 p.

53. DeMott J. The evolving art of fuzzing / DeMott J. // DefCon 14 - 2006.

54. Fuzzing for software vulnerability discovery: technical report / Clarke T. -Department of Mathematic, Royal Holloway University of London, 2009 - RHUL-MA-2009-4 - 178 p.

55. Duran D. Targeted taint driven fuzzing using software metrics. / Duran D., Weston D., Miller M. // CanSecWest 2011.

56. Iozzo V. 0-knowledge fuzzing [электронный ресурс] / Iozzo V. Режим доступа: http://resources.sei.cmu.edu/asset_files/WhitePaper/2010_019_001_53555.pdf

57. McCabe T.J. A complexity measure. / McCabe T.J. // IEEE Transactions on Software Engineering - 1976 - №4 - pp. 308-320.

58. Bruening D. Practical memory checking with Dr. Memory. / Bruening D., Zhao Q. // In Proceedings of the 9th Annual IEEE/ACM International Symposium on Code Generation and Optimization - 2011 - pp. 213-223

59. Nethercote N. Valgrind: a framework for heavyweight dynamic binary instrumentation. / Nethercote N., Seward J // ACM Sigplan notices - №42(6) - 2007.

60. Lanzi A. A smart fuzzer for x86 executables / Lanzi A., Martignoni L., Monga M., Paleari R. // IEEE Third International Workshop on Software Engineering for Secure Systems. SESS'07. - 2007 - pp. 7-7.

61. Zhang S. Combined static and dynamic automated test generation. / Zhang S., Saff D., Bu Y., Ernst M. D. // Proceedings of the 2011 ACM International Symposium on Software Testing and Analysis. - 2011 - pp. 353-363.

62. Тихонов А.Ю. Комбинированный (статический и динамический) анализ бинарного кода. / А.Ю. Тихонов, А.И. Аветисян // Труды Института системного программирования РАН - 2012 - том 22 - стр. 131-152.

63. Фреймворк для разработки утилит динамического анализа Valgrind. // Доступ осуществлен 07.11.2014 по адресу: www.valgrind.org

64. Ермаков М. К. Avalanche: применение параллельного и распределенного динамического анализа программ для ускорения поиска дефектов и уязвимостей. / М. К. Ермаков, А. Ю. Герасимов // Труды Института системного программирования РАН - 2013 - том 25 - с. 29 - 38.

65. Drewry W. Flayer: Exposing Application Internals. / Drewry W., Ormandy T. // WOOT - 2007 - №7- pp. 1-9.

66. Программный комплекс DrMemory // Доступ осуществлен 30.07.2015 по адресу: www.drmemory.org

67. Программный комплекс DynamoRIO // Доступ осуществлен 30.07.2015 по адресу: www.dynamorio.org

68. Программный комплекс SPIKE. // Доступ осуществлен 30.07.2015 по адресу: www.immunitysec.com/resources-freesoftware.shtml

69. . Программный комплекс Peach. // Доступ осуществлен 30.07.2015 по адресу: www.peachfuzzer.com

70. Программный комплекс Sulley. // Доступ осуществлен 30.07.2015 по адресу: https: //github .com/OpenRCE/sulley

71. Программный комплекс American Fuzzy Lop // Доступ осуществлен 30.07.2015 по адресу: http://lcamtuf.coredump.cx/afl

72. Программный комплекс CERT Fuzzer // Доступ осуществлен 30.07.2015 по адресу: https://www.cert.org/vulnerability-analysis/tools/bff.cfm?

73. Шудрак М.О. Анализ вредоносных объектов методом декомпиляции бинарного кода. XI Всероссийский конкурс - конференция студентов и аспирантов по информационной безопасности «IEEE SibInfo - 2011». Томск - 2011

74. Shudrak M. The new technique of decompilation and its application in information security. / Shudrak M. Zolotarev V. // UKSim 6th European Symposium on Computer Modeling and Simulation. Valletta, Malta. 2012 - pp. 115 - 120.

75. Shudrak M. The system of dynamic software security and reliability analysis with high-performance. / Shudrak M., Zolotarev V. // Third International Conference on High Performance Computing HPC-UA 2013. Kyiv, Ukraine. 2013 - pp. 354-357.

76. Шудрак М.О. Автоматизированный поиск уязвимостей в бинарном коде. / Шудрак М.О. Хеирхабаров Т.С. // Материалы XVI Международной научной конференции «Решетневские чтения». Красноярск. 2012 - стр. 691-692.

77. Шудрак М.О. Методика и программное средство защиты кода от несанкционированного анализа. / Шудрак М.О. Лубкин И.А. // Программные продукты и системы. Тверь. 2012 - №4 - 176-180.

78. Шудрак М.О. Методика декомпиляции бинарного кода и её применение в сфере информационной безопасности / Шудрак М.О. Лубкин И.А. // Материалы II Всероссийской молодежной конференции «Перспектива - 2012». Таганрог. 2012 -стр. 197-202

79. Shudrak M. The technique of dynamic binary analysis and its application in the information security sphere / Shudrak M., Zolotarev V. // In Proceedings of IEEE Eu-roCon - 2013, Zagreb, Croatia. 2013 - pp. 112-118

80. Шудрак М.О. Методика декомпиляции бинарного кода и её применения в сфере информационной безопасности. / Шудрак М.О. Лубкин И.А. // Материалы Всероссийской научно-технической конференции студентов, аспирантов и молодых ученых ТУСУР. Томск. 2012 - стр. 245-250.

81. Шудрак М.О. Анализ вредоносных объектов методом декомпиляции бинарного кода. XI Всероссийский конкурс - конференция студентов и аспирантов по информационной безопасности «IEEE SibInfo - 2011». Томск - 2011.

82. Basili V.R. Software errors and complexity: an empirical investigation. / Basili V.R., Perricone B.T. // Communications of the ACM - 1984 - 27.1 - pp. 42-52.

83. Khoshgoftaar T.M. Predicting software development errors using software complexity metrics. / Khoshgoftaar T.M., Munson J.C. // IEEE Journal on Selected Areas in Communications. - 1990 - vol.8 №2 - pp.253-261.

84. Olague H. M. Empirical validation of three software metrics suites to predict fault-proneness of object-oriented classes developed using highly iterative or agile

software development processes. / Olague H. M., Etzkorn L. H., Gholston S., Quattle-baum S. // IEEE Transactions on Software Engineering - 2007 - vol. 33.6 - pp. 402419.

85. Метрики сложности кода: технический отчет. / Ледовских И.Н. - М.: Институт системного программирования РАН, 2012 - 22 с.

86. Halstead M. H. Elements of Software Science / Halstead M. H. -Amsterdam: Elsevier North-Holland Inc - 127 p.

87. Abran A. Software Metrics and Software Metrology / Abran A. - Hoboken, NJ: Wiley-IEEE Computer Society Press. - 2010 - 348 p.

88. Harrison W.A. A complexity measure based on nesting level. / Harrison W.A., Magel K. I. // ACM Sigplan Notices 16.3 - 1981 - 63-74.

89. Henry S. Software structure metrics based on information flow. / Henry S., Ka-fura D. // IEEE Transactions on Software Engineering - 1981 - vol. 5 - pp. 510-518

90. Oviedo E. I. Control Flow, Data Flow and Program Complexity. / Oviedo E. I. // In Proceedings of COMPSAC'80 - 1980 - pp. 146-152

91. Chapin N. An entropy metric for software maintainability / Chapin N. // In Proceeding of the Twenty-Second Annual Hawaii International Conference on System Sciences, vol. II: Software Track - 1989 - pp. 522 - 523

92. Howard M. The security development lifecycle. SDL: A Process for Developing Demonstrably More Secure Software (Developer Best Practices) / Howard M., Lipner S. - USA: O'Reilly Media, Inc., 2009 - 352 p.

93. Schneidewind N. F. Methodology for validating software metrics. / Schneidewind N. F. // IEEE Transactions on Software Engineering - 1992 - vol. 18.5 -pp. 410422.

94. Шудрак М.О. Статический анализ бинарного кода в сфере информационной безопасности. / Шудрак М.О., Лубкин И.А., Золотарев В.В. // Известия ЮФУ. Технические науки. Таганрог. 2012 - №12 - стр. 54-60.

95. Luk C. K. Pin: building customized program analysis tools with dynamic instrumentation. / Luk C. K., Cohn R., Muth R., Patil H., Klauser A., Lowney G., Hazel-wood, K. // In Acm Sigplan Notices - 2005 - Vol. 40 № 6 - pp. 190-200.

96. Uh G. R. Analyzing dynamic binary instrumentation overhead. / Uh G. R., Cohn R., Yadavalli B., Peri R., Ayyagari R. // In WBIA Workshop at ASPLOS - 2006.

97. Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 3B: System Programming Guide, Part 2. Доступ осуществлен 19.02.2015 по адресу: http://intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

98. Шудрак М.О. Методика декомпиляции бинарного кода и её применение в сфере информационной безопасности. / Шудрак М.О., Лубкин И.А., Золотарев В.В. // Безопасность информационных технологий НИЯУ МИФИ. Москва. 2012 -№3 - стр. 75-80

99. Shudrak M. A new technique and tool for vulnerabilities detection in binary executables [электронный журнал]. / Shudrak M. // Kaspersky CyberSecurity for the Next Generation 2013 // London, United Kingdom 2013 - Режим доступа: http://www.kaspersky.com/images/Maxim_Shudrak.pdf.

100.Шудрак М.О. Методика динамического анализа уязвимостей в бинарном коде. / Шудрак М.О. Золотарев В.В. Лубкин И.А // Вестник Сибирского государственного аэрокосмического университета им М.Ф. Решетнева. Красноярск. 2013 - №4(50) - стр. 84-87

101. Открытая база уязвимостей exploit-db. http://exploit-db.com Доступ осуществлен 04.05.2015.

102.Шудрак М.О. Методика и программный комплекс для динамического поиска уязвимостей в бинарном коде. / Шудрак М.О. // Программные продукты и системы. Тверь. 2014 - №4 - стр. 176-180

103. База уязвимостей NIST. // Доступ осуществлен 23.07.2015 по адресу: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4854

104. Информация об уязвимости CVE-2013-4854 и официальная благодарность от Internet System Consortium. // Доступ осуществлен 23.07.2015 по адресу: https://kb.isc.org/article/AA-01015/0/CVE-2013-4854%3A-A-specially-crafted-query-can-cause-BIND-to-terminate-abnormally.html.

105. Подсистемы детектирования уязвимостей, оценки покрытия и расчета

метрик сложности. Доступ осуществлен 23.07.2015 по адресу: https://github.com/MShudrak

Приложение 1. Список проанализированных приложений

Название уязвимого модуля приложения и его версия Адрес или название уязвимой функции в бинарном коде Тип уязвимости Дата публикации ошибки

palringo.exe, версия 2.8.1 sub 5A9544 Переполнение буфера 10.01.2015

pls.plf, Zinf версии 2.2.1 sub 111016B0 Переполнение буфера 28.09.2004

ZCentral.exe, ZipCentral версии 4.01 sub 46F1A4 Переполнение буфера 30,08,2006

atomixmp3.exe, AtomixMP3 2.3 sub 41FF10 Переполнение буфера 30,11,2006

libmp4v2.dll, Winamp 5.34 sub 10008D96 Переполнение буфера 30.04.2007

vuplayer.exe, VUPlayer 2.49 sub 455120 Переполнение буфера 07.01.2009

gom.exe, GOM Player 2.0.12 sub 42EB10 Переполнение буфера 30.01.2009

MSRMfilter03.dll, Easy RM to MP3 Converter 2.7.3.700 Playlist FindNextItem Переполнение буфера 16.07.2009

Amp.exe, dBpowerAMP Audio Player sub 422BD0 Переполнение буфера 05.02.2009

WmDownloader.exe, WM Downloader 3.0.0.9 sub 435B40 Переполнение буфера 13.04.2009

coolplayer2-19.exe, CoolPlayer Portable 2.19.1 sub 41B570 Переполнение буфера 23.04.2009

MP3Studio.exe, MP3 Studio 1.0 sub 403728 Переполнение буфера 14.09.2009

destiny.exe, Destiny Media Player 1.61 sub 426590 Переполнение буфера 01.08.2009

OtsTTfre.exe, OTSTurntables 1.00.027 sub 401610 Переполнение буфера 04.09.2009

sap.exe, SAP Player 0.9 sub 4015D0 Переполнение буфера 03.09.2009

Wmpcon.exe, Free WMA MP3 Converter 1.1 sub 405044 Переполнение буфера 09.10.2009

M3utoASX-WPL11.exe, M3U To ASX-WPL 1.1 sub 4D250B Переполнение буфера 05.12.2009

serenity.exe, Serenity Audio Player 3.2.3 sub 404870 Переполнение буфера 25.11.2009

icarus.exe, Icarus 2.0 sub 419D40 Переполнение буфера 17.11.2009

galan.dll, Galan 0.2.1 sub 63348600 Переполнение буфера 07.12.2009

MSMEDIAPLAYER.apo sub 10006FB0 Переполнение буфера 22.12.2009

RMDownloader.exe, RM Downloader 3.0.2.1 sub 435950 Переполнение буфера 14.12.2009

SoriTong.exe, Soritong 1.0 sub 40C444 Переполнение буфера 29.12.2009

CastRipper.exe, CastRipper 2.50.70 sub 41F0F0 Переполнение буфера 24.12.2009

coolplayer2-18.exe, CoolPlayer 2.18 sub 40C8E0 Переполнение буфера 22.12.2009

Название уязвимого модуля приложения и его версия Адрес или название уязвимой функции в бинарном коде Тип уязвимости Дата публикации ошибки

vcl50.bpl, SOMPL Player 1.0 sub 400486CC Переполнение буфера 22.01.2010

bpftpclient.exe, BulletProof FTP Client 2010 sub 40CF94 Переполнение буфера 05.09.2014

RosoftMediaPlayerFree.exe, Rosoft Media Player 4.4.4 sub 427450 Переполнение буфера 16.01.2010

libdjvulibre.dll, DjVuLibre 3.5.25.3 sub 100A79F0 Чтение за границами выделенной памяти 22.07.2014

quartz.dll, Light Audio Player 1.0.14 sub 748BE62C Деление на нуль 24.03.2014

madplug.dll, Audacious Player 3.4.2/3.4.1 sub 6B04125C Запись/чтение по недопустимому адресу 30.11.2013

macv2.exe, Music AlarmClock 2.1.0 sub 4E3F70 Запись/чтение по недопустимому адресу 26.02.2014

httpd.exe, Static Http Server 1.0 sub 4044C0 Запись/чтение по недопустимому адресу 25.11.2013

mshtml.dll, GreenBrowser 6.4.0515 sub 7DC83CE7 Переполнение кучи 03.09.2013

vncviewer240.exe, EchoVNC Viewer 2.40 sub 413160 Запись/чтение по недопустимому адресу 02.08.2013

vbsedit.exe, VbsEdit 5.9.3 sub 589490 Переполнение буфера 22.07.2013

libpng-plugin207.dll, VLC Media Player 2.0.7 sub 683D8AA2 Запись/чтение по недопустимому адресу 01.07.2013

peparser.dll, PEStudio 3.69 sub 3001CE40 Запись/чтение по недопустимому адресу 05.06.2013

LAN-Messenger.exe, Lan Messenger 1.2 sub 403640 Переполнение буфера 11.05.2013

quicksearch.dll, Quick Search 1.1.0.189 FindItemFile Переполнение буфера 14.05.2013

NCTAudioInformation2.dll, IconCool MP3 WAV Converter 3.00 Build 120518 sub 1000BD30 Запись/чтение по недопустимому адресу 25.03.2013

core-wma.dll, Aktiv Player 2.80 sub 100060F0 Запись/чтение по недопустимому адресу 31.12.2012

imgview5.exe, DIMIN Viewer 5.4.0 sub 59B354 Чтение за границами выделенной памяти 19.12.2012

dns4nt.exe, HaneWin DNS Server 1.5.3 sub 404110 Переполнение SEH 29.01.2014

PCManFTPD2.exe, PCMan FTPD 2.07 sub 4029B0 Переполнение буфера 20.02.2014

Название уязвимого модуля приложения и его версия Адрес или название уязвимой функции в бинарном коде Тип уязвимости Дата публикации ошибки

IMAP4A.exe, Eudora Qualcomm WorldMail

9.0.333.0 sub 40c606 Переполнение буфера 16.02.2014

tmp0.dll, Sami FTP Server 2.0.1 strlen user Переполнение буфера 12.08.2013

fsfs.exe, Easy File Sharing FTP 2.0.5 sub 4326b0 Переполнение буфера 27.05.2014

abws.exe, Easy Address Book WS 1.6 sub 43eb80 Переполнение буфера 19.05.2014

EasyChat.exe, Easy Chat Server 3.1 sub 439503 Переполнение буфера 9.05.2014

minalic.exe, Minalic WS 2.0.0 sub 405c9e Переполнение буфера 31.05.2014

ff-FTPServer.exe, Free Float FTP Server 1.0 sub 402de0 Переполнение буфера 10.04.2013

Knet.exe, KNET Web Server 1.04b sub 40cfa0 Переполнение буфера 11.04.2013

AntDS.exe, Big ANT DS Server 2.97 sub 4020cc Переполнение буфера 10.04.2013

mediaserver.exe, All Media Server 0.8 sub 407cb4 Переполнение буфера 07.04.2012

httpdx.exe, Httpdx 1.5.4 sub 40896C Переполнение буфера 12.07.2012

xm-ftpserver.exe, XM FTP Server 1.5.3.0 sub 458300 Ошибка форматирования строк 28.02.2007

swscore.dll, Simple Web Server 2.2 ZN17ProcessingRequest6ThreadEv Переполнение буфера 28.8.2012

dmp4.dll, RealPlayer 15.0.6.14 realplay.exe sub 6142DC60 Запись/чтение по недопустимому адресу 01.11.2012

libpng-plugin.dll, VLC Player 2.0.3 sub 683C1AC0 Запись/чтение по недопустимому адресу 11.10.2012

JPEGsnoop.exe, JPEGsnoop 1.5.2 sub 40C7A0 Запись/чтение по недопустимому адресу 04.10.2012

if.dnt, Photodex ProShow Producer 5.0.3256 sub 10021D50 Переполнение буфера 03.07.2012

wavesurfer.exe, WaveSurfer 1.8.8p4 sub 456240 Запись/чтение по недопустимому адресу 12.07.2012

xnview.exe, xnview 1.98.5 sub 47DB20 Целочисленное переполнение 16.02.2012

mapedit.exe, GPSMapEdit 1.1.73.2 sub 508E3F Запись/чтение по недопустимому адресу 09.01.2012

reader.exe, Mobipocket Reader 6.2 Build 608 sub 5EC340 Переполнение буфера 23.04.2012

Ezserver6.exe, Ezhometech EzServer 6.4 sub 473FE0 Переполнение буфера 16.06.2012

AbsoluteFTP.exe, Absolute FTP Client 2.2.10 sub 496C70 Переполнение буфера 09.11.2011

Название уязвимого модуля приложения и его версия Адрес или название уязвимой функции в бинарном коде Тип уязвимости Дата публикации ошибки

vncviewer.exe, Ultra VNC 1.0.1 sub 405460 Ошибка форматирования строк 30.04.2010

knftpd.exe, KnFTPd 1.0.0 sub 4013C0 Переполнение буфера 04.10.2010

DownloadMng.dll, CocSoft Stream Down 6.8.0 sub 10020770 Переполнение буфера 18.12.2011

ZipItFast.exe, ZipItFast 3.0 sub 48D428 Переполнение кучи 08.07.2011

zwp32.exe, ZipWiz 2005 5.0 sub 41E530 Переполнение буфера 08.07.2011

ALPshell.dll, ESTsoft ALPlayer 2.0 sub 601922F0 Запись/чтение по недопустимому адресу 06.07.2011

Запись/чтение по недопусти-

avipreview.exe, AVIPreview 0.26 sub 405B27 мому адресу 16.03.2011

ftpd.exe, SpoonFTP 1.2 sub 410210 Переполнение буфера 21.03.2011

vzipper.dll, Vallen Zipper 2.30 sub 6768C9DC Переполнение буфера 11.04.2011

WinMergeU.exe, WinMerge 2.12.4 sub 464b33 Переполнение буфера 22.02.2011

MAMPlayer.exe, Music Animation Machine MIDI Запись/чтение по недопусти-

Player sub 41B790 мому адресу 03.01.2011

MpegPlayer.exe, Elecard MPEG Player 5.7 sub 458240 Переполнение буфера 24.02.2011

NCTAudioEditor2.dll, WaveMax Sound Editor 4.5.1 sub 10016370 Целочисленное переполнение 04.12.2010

Исключение в блоке

httpBlitz.exe, HttpBlitz Web Server sub 4055B0 try/except 24.12.2010

wplotfr.exe, Plotwn 18 sub 40BCCD Переполнение буфера 24.06.2010

Hanso Converter.exe, Hanso Converter 1.4.0 sub 419020 Запись/чтение по недопустимому адресу 19.10.2010

TPlayer.exe, Tplayer V1R10 sub 452990 Запись/чтение по недопустимому адресу 23.08.2010

wcalcru.exe, Wincalc 2 sub 417A2F Запись/чтение по недопустимому адресу 24.06.2010

fennec-player.exe, Fennec 1.2 Beta 3 sub 404E50 Целочисленные ошибки 19.08.2010

wstatfr.exe, Winstats sub 4422C9 Целочисленные ошибки 24.06.2010

MoreAmp.exe, sub 46D430 Переполнение буфера 19.06.2010

Исключение в блоке

ftpserver.exe, Quick 'n Easy FTP Server Lite 3.1 sub 416A30 try/except 03.06.2010

Название уязвимого модуля приложения и его версия Адрес или название уязвимой функции в бинарном коде Тип уязвимости Дата публикации ошибки

ZipExplorer70.exe, ZipExplorer 7.0 sub 41D85C Переполнение буфера 31.05.2010

RadASM.exe, Radasm 2.2.1.6 sub 4010C5 Переполнение буфера 11.02.2010

ypops.exe, YPOPS! 0.9.7.3 sub 414B80 Переполнение буфера 10.01.2010

OfilterPlayer.exe, Ofilter Player sub 4182C0 Запись/чтение по недопустимому адресу 13.01.2010

NPlayer.exe, NPlayer sub 496E50 Переполнение кучи 13.01.2010

smallftpd.exe, SmallFTPD FTP Server 1.0.3 sub 412D90 Запись/чтение по недопустимому адресу 14.05.2010

FatPlayer.exe, Fat Player 0.6 sub 479898 Переполнение буфера 09.08.2010

audacity.exe, Audacity 1.2.6 sub 6B3480 Переполнение буфера 01.01.2009

TzArchive10.tgp, TugZip 3.5 TtzDm ZipTVRead Переполнение буфера 01.04.2010

cdlabel.exe, Acoustica 3.32 CD/DVD Label Maker sub 44E630 Переполнение буфера 27.04.2010

SimplePlayer.exe, SimplePlayer 0.2 sub 4071D0 Запись/чтение по недопустимому адресу 31.12.2009

MyVideoConverter.exe, MyVideoConverter 2.15 sub 4356DB Запись/чтение по недопустимому адресу 05.04.2010

ov.exe, Orbital Viewer 1.04 sub 40DF6A Переполнение буфера 19.06.2010

zip4.exe, KenWard's Zipper 1.400 sub 408E90 Переполнение буфера 25.03.2010

cedt.exe, Crimson Editor r3.70 sub 419AE0 Переполнение буфера 21.03.2010

Приложение 2. Статистический анализ частоты использования ин-

струкций архитектуры x86 современными компиляторами

Мнемоника Мнемоника Мнемоника

инструкции Количество инструкции Количество инструкции Количество

mov 6930693 setnz 11932 fabs 731

push 3581941 idiv 11840 psrlq 731

call 1984305 scas 11660 seto 712

PoP 1075458 setz 10538 pand 703

lea 1010480 nop 10082 setb 670

cmp 858990 fsub 9671 shrd 650

add 820645 fcomp 8689 psrad 642

jz 708363 fxch 7918 paddd 635

jmP 637804 jns 7441 setle 620

test 613660 adc 6749 fucompp 600

jnz 478754 faddp 6598 movlpd 508

retn 471911 int 6522 fimul 463

xor 436056 sahf 5563 psubw 460

sub 276630 div 5005 std 459

and 183295 wait 4491 rcr 445

inc 144615 cmps 4126 pxor 435

dec 111732 fst 4046 fsubrp 425

or 109533 movq 3906 psllq 423

movzx 95239 js 3848 lods 416

fld 80001 fmulp 3841 punpckhbw 415

jl 73067 fdiv 3730 punpckldq 405

fstp 69452 fsubp 3477 fdivrp 404

jle 67862 fldcw 3183 por 403

shl 56206 fldz 2995 setnbe 378

movs 56058 fcom 2689 mulsd 374

shr 52293 xchg 2604 addsd 372

jge 47219 mul 2575 fsqrt 370

jb 43017 setnle 2510 packuswb 346

imul 40686 jp 2483 frndint 344

jbe 37687 xadd 2155 movapd 336

leave 37214 fistp 2118 psraw 324

sar 34968 fcompp 2035 punpcklwd 314

movsx 34848 movd 1977 packssdw 309

jnb 33581 fsubr 1917 ror 297

jg 32366 fchs 1866 fcos 283

fmul 28936 fdivp 1716 jno 281

cdq 25758 fnstcw 1477 fiadd 281

neg 25287 setl 1421 paddb 277

ja 23148 fld1 1353 fstcw 276

sbb 21274 fstsw 1108 mulpd 266

stos 20101 fdivr 1079 fscale 261

fild 15832 punpcklbw 1058 movdqa 255

fadd 15584 pmaddwd 1041 enter 251

not 14731 rol 970 shld 246

fnstsw 13601 cld 894 movaps 246

Мнемоника Мнемоника Мнемоника

инструкции Количество инструкции Количество инструкции Количество

pusha 20S paddsw 54 pushfw 1S

bts 204 psrld 52 pfmul 1S

f2xm1 203 bswap 52 pfadd 17

fucomp 1S3 unpcklpd 51 cmpltpd 16

emms 177 psrlw 50 popfw 16

andpd 174 pcmpeqd 4S ucomisd 16

rcl 166 fldenv 43 fist 15

pushf 164 prefetch 42 les 15

fldl2e 163 fnstenv 42 psubsw 15

fsin 155 hlt 41 fucomi 15

pextrw 153 clc 41 cvttsd2si 14

fldln2 152 fucom 40 comisd 14

fisub 146 pinsrw 39 jcxz 13

fprem 140 out 39 cvtsd2si 13

loop 137 setbe 3S aas 13

pmulhw 137 xlat 37 cmpnlepd 12

sets 132 aam 37 movlps 12

jecxz 131 pmovmskb 37 loope 12

addpd 129 ffree 35 packsswb 12

setnb 12S retf 33 sldt 11

movsd 125 subpd 33 stc 11

popa 123 iret 32 setalc 10

punpckhdq 120 loopne 32 arpl 10

fnclex 112 cmovnz 32 pcmpgtb 10

fpatan 111 btr 31 pandn 10

cwde 110 bsr 31 cmovg 10

paddusb 105 fidivr 31 ficomp 10

cmc 103 prefetchtO 31 aad 9

in 97 setns 31 das 9

fxam 95 fninit 30 movups 9

fldpi 94 fbstp 30 bound 9

psubd 91 fclex 30 psubusw 9

stmxcsr S9 bsf 30 femms 9

addps S7 pshufw 30 cmovle S

mulps S6 pslld 29 lahf S

cpuid S5 ldmxcsr 2S icebp S

ins S2 psubusb 2S cmpeqsd S

jo 79 cmovz 26 cli 7

p°pf 76 unpckhpd 26 subss 7

subps 76 into 25 rdtsc 7

pshufd 75 pause 24 addss 7

fpreml 64 daa 22 unpcklps 6

fldlg2 63 sal 22 shufps 6

orpd 63 divsd 22 cvtdq2pd 6

xorpd 62 fptan 21 shufpd 6

psllw 60 movss 20 unpckhps 6

cmpxchg 59 fsave 19 psubq 6

outs 57 frstor 19 pmaxsw 6

Мнемоника инструкции

Количество

Мнемоника инструкции

Количество

Мнемоника инструкции

Количество

Адсошф

56

19

ШОуЫрБ

6

шоуШд

55

рБиЬвЬ

18

ГвтсоБ

сшоуЬ

йПЦ

sшsw

smsw

йПЦ

addusw

сшоуЬе

xorps

рсшредЬ

psadbw

flsuЬr

cуtsi2sd

paddд

сшоу^

lds

sдrtsd

flncstp

Гу12хр1

сшоу§е

psuЬЬ

сшоу1

prefetchnta

fxtract

cшpneдpd

stl

cЬw

шu1ss

рсшр§^

setp

orps

pfnacc

fndlsl

fnsave

cуtdд2ps

pшu1udд

fstp9

cwd

cmp1tsd

cшoуs

c1ts

fb1d

setnp

pfacc

РСШОУПЬ

andnpd

paddusw

4

Всего

21 757 940

5

5

4

5

5

4

Приложение 3. Показатели эффективности используемых метрик

Имя приложения и имя процедуры LOC СС ABC H.B Нагг Сосо1 Вои^ 8рап Оу1е^ н&с Р1 СИерт Экспер.

аЪ8о1иейр_8иЪ_496С70 99,90 99,93 99,84 99,90 99,94 99,93 99,90 99,80 99,91 97,48 99,90 99,42 99,99

атр_5иЪ_422ВБ0 61,69 59,21 65,54 68,70 57,63 62,26 59,32 54,80 57,51 82,82 59,44 56,72 86,89

а1ош1хтр3_8иЪ_41РР10 97,12 94,83 96,92 97,81 95,63 97,22 94,14 97,22 97,81 70,58 94,43 98,31 95,73

аМас^_8иЪ_6В3480 84,31 89,70 83,79 85,16 88,80 85,09 90,69 85,54 88,91 84,78 90,87 81,60 99,50

Ър!!рс11еп1_8иЬ_40СР94 58,73 57,71 67,24 71,65 65,76 59,97 58,00 0,00 42,63 90,29 60,66 0,00 99,22

са81г1ррег_8иЪ_41Р0Р0 99,75 99,96 99,79 99,92 99,92 99,75 99,96 99,46 99,75 97,87 99,96 98,96 99,92

се&_8иЪ_419ЛБ0 91,12 90,06 91,31 90,37 90,99 91,18 89,85 91,99 93,29 82,55 89,74 82,86 93,56

соо1р1ауег2-18_8иЪ_40С8Б0 67,17 34,76 69,38 68,97 62,62 66,21 48,28 64,00 63,31 57,79 47,86 44,00 88,28

соо1р1ауег2 -19_БиЬ_41В570 95,45 90,48 92,97 91,59 96,55 95,17 94,76 94,34 94,76 96,14 94,90 92,28 99,03

ае8Ипу_8иЪ_426590 97,83 97,57 97,22 97,83 98,52 97,87 98,39 96,18 97,39 96,66 98,39 94,27 98,96

dowпIoadmпg_suЪ_10020770 91,82 95,96 89,93 90,12 95,24 92,44 96,49 89,61 92,44 80,75 96,52 86,72 97,32

fatp1ayer_sub_479898 99,64 99,40 99,88 99,64 99,88 99,64 99,86 99,73 99,45 87,36 99,86 99,18 99,57

gaIaп-copy_suЪ_63348600 96,52 94,78 96,52 97,29 97,29 96,13 96,52 90,14 91,68 94,58 96,52 83,17 96,32

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