Обзор различных средств фаззинга как инструментов динамического анализа программного обеспечения | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 30 ноября, печатный экземпляр отправим 4 декабря.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №52 (186) декабрь 2017 г.

Дата публикации: 30.12.2017

Статья просмотрена: 3445 раз

Библиографическое описание:

Мишечкин, М. В. Обзор различных средств фаззинга как инструментов динамического анализа программного обеспечения / М. В. Мишечкин. — Текст : непосредственный // Молодой ученый. — 2017. — № 52 (186). — С. 28-31. — URL: https://moluch.ru/archive/186/47575/ (дата обращения: 18.11.2024).



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

Ключевые слова: фаззинг, fuzzing, динамический анализ, уязвимость, ошибка, AFL, LibFuzzer, Syzkaller, информационная безопасность, информатика, эксплойты, автоматический анализ, тестирование, fuzz, LLVM.

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

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

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

Фаззинг (Fuzzing) — это технология тестирования программного обеспечения, когда вместо ожидаемых входных данных программе передаются случайные или специально сформированные данные [2]. В большинстве своем это некорректно составленные данные.

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

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

Основные фазы фаззинга:

– Определение цели.

– Определение протокола и типа входных данных. Для старта анализа требуются начальные входные данные.

– Изменение данных с учетом особенностей протокола передачи и типа данных. Изменение входных данных производится двумя методами — мутацией и генерацией.

– Исполнение программы с подачей ей на вход некорректных данных.

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

– Исследование уязвимости на возможность её эксплуатации.

Рис. 1. Принципиальная схема фаззинга

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

Обзор применяемых в разработке ПО технологий фаззинга

AFL (American fuzzy lop) — это ориентированный на поиск ошибок инструмент анализа ПО, который использует обширный список типов инструментации кода для получения информации о покрытии и множество генетических алгоритмов мутации для автоматического обнаружения различных тестовых примеров, которые вызывают новые внутренние состояния в бинарном коде ПО. Фаззер AFL поддерживает инструментацию, реализующуюся на этапе компиляции из исходного кода с помощью оберток afl-gcc/afl-g++. afl-gcc/afl-g++ подменяет вызываемую команду на обертку, переписывающую ассемблерный код, сгенерированный компилятором. Для фаззинга уже скомпилированных бинарных файлов используется qemu mode — это патч к QEMU, эмулирующий запуск одного процесса и реализующий требуемую для анализа инструментацию кода. Изначально QEMU предназначалась для того, чтобы запускать отдельные процессы, собранные для другой архитектуры, используя ядро целевой операционной системы. На официальном сайте фаззера размещены различные «трофеи» данного инструмента. С его помощью были обнаружены уязвимости в следующем ПО: LibreOffice, GnuPG, OpenSSH, nginx, Internet Explorer, sqlite и др.

LibFuzzer — это инструмент анализа ПО, являющийся частью проекта LLVM, позволяющий производить анализ ПО без его перезапуска, осуществляя мутацию напрямую в памяти. Данный инструмент собирает информацию о покрытии (пройденных базовых блоках) и накапливает тестовые примеры, приводящие к его увеличению. В этом фаззере используется технология белого ящика, поэтому инструментация осуществляется средствами LLVM после компиляции исходного кода. LibFuzzer позволяет осуществлять фаззинг различных компонентов браузера Google Chrome, что освобождает от необходимости генерировать HTML страницу или полезную нагрузку, а также перезапускать браузер целиком. Это позволяет существенно сократить накладные расходы. LibFuzzer имеет возможность осуществлять анализ функций API напрямую. Благодаря перечисленным особенностям данный инструмент позволяет проводить анализ в несколько раз быстрее чем традиционные инструменты фаззинга. Данный инструмент используется в открытой разработке браузера Chromium, каждое изменение кода которого, вносимое разработчиками, проверяется на кластере с использованием LibFuzzer.

Syzkaller — это инструмент, предназначенный для поиска ошибок в ядрах ОС. Данный инструмент в различной степени поддерживает множество различных ОС, таких как akaros, freebsd, fuchsia, netbsd, windows и linux. Изначально syzkaller разрабатывался для анализа ядра ОС Linux, но со временем он стал поддерживать большее количество операционных систем.

https://i.imgur.com/5BpYxL7.png

Рис. 2. Схема работы инструмента syzkaller

На рисунке 2 представлена схема работы инструмента syzkaller. Процесс syz-manager запускает, осуществляет мониторинг и перезапускает различные экземпляры виртуальных машин, в которых порождает процесс syz-fuzzer. Syz-manager хранит различные корпуса входных данных и информацию об аварийных завершениях, которые были обнаружены в результате анализа ядер внутри виртуальных машин. Данный процесс работает на стабильном ядре, которое не подвержено влиянию процессов syz-fuzzer. Процесс Syz-fuzzer запускается внутри предположительно нестабильной виртуальной машины и осуществляет процесс фаззинга (генерацию и мутацию входов, минимизацию входных данных и т. д.), при этом отправляя входы, вызывающие прирост покрытия по базовым блокам, в процесс Syz-manager через механизм удаленного вызова процедур RPC. Syz-fuzzer запускает временный процесс syz-executor. Каждый процесс syz-executor исполняет единственный вход, являющийся последовательностью системных вызовов, после чего отправляет результат исполнения обратно в syz-fuzzer. Syz-executor осуществляет взаимодействие с syz-fuzzer через разделяемую память. Исследователь компании Google Андрей Коновалов, используя данный инструмент обнаружил множество различных уязвимостей в подсистеме Linux USB. В ходе исследования он обнаружил десятки ошибок, а при дальнейшем исследовании найденных ошибок выявил 22 уязвимости, различных типов, таких как: использование указателя после его освобождения, выход за границы чтения, разыменование указателя с значением NULL и др.

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

Литература:

  1. И. Исаев, Д. Сидоров. Применение динамического анализа для генерации входных данных, демонстрирующих критические ошибки и уязвимости в программах. Программирование, № 4 2010.
  2. Fuzzing. Технология охоты за багами // VR-Online. URL: http://www.vr-online.ru/?q=content/fuzzing-tehnologija-ohoty-za-bagami-752 (дата обращения: 28.12.2017).
  3. Майкл Дж.Д. Саттон, Адам Грин, Педрам Амини. Fuzzing. Исследование уязвимостей методом грубой силы. ISBN 978–5-93286–147–9. 2009.
  4. P. Godefroid, M. Levin, D. Molnar. SAGE: Whitebox Fuzzing for Security Testing. 2012.
  5. american fuzzy lop (2.52b) // american fuzzy lop. URL: http://lcamtuf.coredump.cx/afl/ (дата обращения: 28.12.2017).
  6. Guided in-process fuzzing of Chrome components // Google Security Blog. URL: https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html (дата обращения: 28.12.2017).
  7. syzkaller — kernel fuzzer // GitHub. URL: https://github.com/google/syzkaller (дата обращения: 28.12.2017).
Основные термины (генерируются автоматически): AFL, LLVM, данные, динамический анализ, API, QEMU, инструмент, исходный код, программа, процесс.


Ключевые слова

Информационная безопасность, тестирование, информатика, ошибка, уязвимость, динамический анализ, эксплойты, фаззинг, fuzzing, AFL, LibFuzzer, Syzkaller, автоматический анализ, fuzz, LLVM

Похожие статьи

Методы обработки видеоизображений с помощью языка программирования Python

В статье рассматриваются современные методы обработки видеоизображений с использованием языка программирования Python. Описываются ключевые библиотеки, такие как OpenCV и scikit-image, а также их применение для выполнения задач, включая распознавание...

Обзор и сравнительный анализ промышленных хранилищ данных и баз данных

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

Роль студентов в использовании платформы Arduino в высших учебных заведениях

В этой статье будет говориться о том, какая польза студентам ВУЗов в изучении платформы arduino, изучении среды разработки arduino, скетча, основные стандарты arduino. Также будут приведены пару примеров о том, как использовать arduino, какие модули ...

ETL: обзор и роль в развитии компаний

В статье рассматриваются понятия ETL, ETL-инструмент, а также OLTP и OLAP. Проводится краткий обзор ETL-инструментов от крупнейших мировых компаний разработчиков их роль в современном мире и развитии бизнеса крупных компаний.

Сравнительный анализ современных инструментов Data Mining

В статье анализируются современные инструменты Data Mining. Дается подробная характеристика каждому инструменту Data Mining. Рассмотрены принципы работы данных инструментов, представлены основные критерии для сравнения. Указаны плюсы и минусы каждого...

Адаптивный дизайн в проектировании интерфейсов

В статье описывается разработка мобильных приложений и сайтов. Дается определение языкам, используемым при создании сайта, а также характеристика front-end и back-end разработкам. Подробно рассматривается адаптивный дизайн, выделяются его особенности...

Сравнение моделей качества программного обеспечения

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

Инструменты для анализа данных: сравнение Python, R и других популярных платформ

В статье автор сравнил различные языки программирование такие как «Python», «R», «Julia», «SAS» и «MATLAB» и выявил их характерные особенности, на основе которых каждый сможет для себя решить с каким языком программирования он захочет работать.

Исследование проблем инфраструктурных цифровых платформ

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

Современные системы автоматизированного динамического анализа вредоносных файлов

Статья посвящена исследованию трех современных систем автоматизированного динамического анализа вредоносных файлов: Cuckoo Sandbox, Anubis и DRAKVUF. Показано значение подобных систем в области изучения функциональности вредоносных программ. Раскрыты...

Похожие статьи

Методы обработки видеоизображений с помощью языка программирования Python

В статье рассматриваются современные методы обработки видеоизображений с использованием языка программирования Python. Описываются ключевые библиотеки, такие как OpenCV и scikit-image, а также их применение для выполнения задач, включая распознавание...

Обзор и сравнительный анализ промышленных хранилищ данных и баз данных

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

Роль студентов в использовании платформы Arduino в высших учебных заведениях

В этой статье будет говориться о том, какая польза студентам ВУЗов в изучении платформы arduino, изучении среды разработки arduino, скетча, основные стандарты arduino. Также будут приведены пару примеров о том, как использовать arduino, какие модули ...

ETL: обзор и роль в развитии компаний

В статье рассматриваются понятия ETL, ETL-инструмент, а также OLTP и OLAP. Проводится краткий обзор ETL-инструментов от крупнейших мировых компаний разработчиков их роль в современном мире и развитии бизнеса крупных компаний.

Сравнительный анализ современных инструментов Data Mining

В статье анализируются современные инструменты Data Mining. Дается подробная характеристика каждому инструменту Data Mining. Рассмотрены принципы работы данных инструментов, представлены основные критерии для сравнения. Указаны плюсы и минусы каждого...

Адаптивный дизайн в проектировании интерфейсов

В статье описывается разработка мобильных приложений и сайтов. Дается определение языкам, используемым при создании сайта, а также характеристика front-end и back-end разработкам. Подробно рассматривается адаптивный дизайн, выделяются его особенности...

Сравнение моделей качества программного обеспечения

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

Инструменты для анализа данных: сравнение Python, R и других популярных платформ

В статье автор сравнил различные языки программирование такие как «Python», «R», «Julia», «SAS» и «MATLAB» и выявил их характерные особенности, на основе которых каждый сможет для себя решить с каким языком программирования он захочет работать.

Исследование проблем инфраструктурных цифровых платформ

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

Современные системы автоматизированного динамического анализа вредоносных файлов

Статья посвящена исследованию трех современных систем автоматизированного динамического анализа вредоносных файлов: Cuckoo Sandbox, Anubis и DRAKVUF. Показано значение подобных систем в области изучения функциональности вредоносных программ. Раскрыты...

Задать вопрос