Методы и средства фаззинга
Методы анализа программного обеспечения. Методика исследования программного обеспечения на наличие уязвимостей – фаззинг. Метод случайных данных, мутационного тестирования протокола вручную и автоматического. Программные средства для исследования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 21.07.2020 |
Размер файла | 15,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Московский государственный технический университет им. Н.Э. Баумана
Методы и средства фаззинга
Е.А. Ефремов, А.Е. Ковалевский
Аннотация
В статье рассматриваются методы анализа программного обеспечения, методика исследования программного обеспечения на наличие уязвимостей - фаззинг, методы фаззинга, а именно метод случайных данных, мутационного тестирования протокола вручную, мутационного тестирования и автоматически порождающего тестирования протокола, а также некоторые программные средства, позволяющие проводить данные исследования.
Ключевые слова: информационная безопасность, уязвимости, фаззинг, методы фаззинга, тестирование.
В настоящее время люди окружены множеством электронных устройств - компьютеры, смартфоны, умные часы, системы видеонаблюдения и различные хозяйственные устройства, которые получили доступ к интернету. В последнее время участились атаки хакеров с использованием устройств умного дома, камер видеонаблюдения и подобных устройств. Это связано с недостаточно хорошо организованной безопасностью программного обеспечения устройств.
Долгое время считалось, что динамический анализ программного обеспечения является слишком тяжеловесным подходом к обнаружению программных дефектов, и полученные результаты не оправдывают затраченных усилий и ресурсов. Однако, две важные тенденции развития современной индустрии производства программного обеспечения позволяют по-новому взглянуть на эту проблему. С одной стороны, при постоянном увеличении объема и сложности ПО любые автоматические средства обнаружения ошибок и контроля качества могут оказаться полезными и востребованными. С другой - непрерывный рост производительности современных вычислительных систем позволяет эффективно решать все более сложные вычислительные задачи.
В качестве более эффективной альтернативы динамическому анализу часто рассматривают статический анализ. В случае статического анализа поиск возможных ошибок осуществляется без запуска исследуемой программы, например, по исходному коду приложения. Обычно при этом строится абстрактная модель программы, которая, собственно, и является объектом анализа.
При этом следует подчеркнуть следующие характерные особенности статического анализа:
1. Возможен раздельный анализ отдельно взятых фрагментов программы (обычно отдельных функций или процедур), что дает достаточно эффективный способ борьбы с нелинейным ростом сложности анализа.
2. Возможны ложные срабатывания, обусловленные либо тем, что при построении абстрактной модели некоторые детали игнорируются, либо тем, что анализ модели не является исчерпывающим.
3. При обнаружении дефекта возникают, во-первых, проблема проверки истинности обнаруженного дефекта и, во-вторых, проблема воспроизведения найденного дефекта при запуске программы на определенных входных данных.
В отличие от статического анализа, динамический анализ осуществляется во время работы программы. При этом:
1. Для запуска программы требуются некоторые входные данные.
2. Динамический анализ обнаруживает дефекты только на трассе, определяемой конкретными входными данными; дефекты, находящиеся в других частях программы, не будут обнаружены.
3. В большинстве реализаций появление ложных срабатываний исключено, так как обнаружение ошибки происходит в момент ее возникновения в программе; таким образом, обнаруженная ошибка является не предсказанием, сделанным на основе анализа модели программы, а констатацией факта ее возникновения.
Фаззинг - методика тестирования, при которой на вход программы подаются невалидные, непредусмотренные или случайные данные.
Термин Fuzzing появился еще в 1988 году в работе «The Fuzz Generator», опубликованной Бартом Миллером, который решил подсовывать программе заведомо некорректные и зачастую вообще случайные данные, отлавливая ситуации, когда та не сможет их обработать. Эффективность такого подхода до сих пор велика. Точки ввода данных в программу могут быть самые разные: текстовая строка, введенная через графический интерфейс, бинарные данные из файла, значение поля в сетевом запросе. Вместо программы может быть драйвер, ActiveX-компонент или, например, SWF-приложение.
Не смотря на различные методы фаззинга, можно выделить несколько основных фаз, которые будут присутствовать всегда:
1. Определение цели. На данном этапе оцениваются особенности исследуемого объекта и выбирается соответствующий метод и инструмент анализа.
2. Определение вводимых значений. Необходимо определить все возможные варианты входных данных.
3. Порождение некорректных данных.
4. Исполнение некорректных данных.
5. Мониторинг исключений. Важный шаг, позволяющий оценить причины возникновения исключений.
6. Определение работоспособности. Определение возможности эксплуатации найденных уязвимостей.
Фаззеры делятся на две категории:
1. Мутационные, которые изменяют существующие образцы данных и создают условия для тестирования.
2. Порождающие, которые создают условия для тестирования с чистого листа, моделируя необходимый протокол или формат файла.
Существует несколько методов фаззинга: метод случайных данных, мутационного тестирования протокола вручную, мутационного тестирования и автоматически порождающего тестирования протокола.
Метод случайных данных наименее эффективен, однако может быть использован как самый быстрый способ поиска неверного кода. Подход с использованием случайных данных заключается в подстановке псевдослучайных данных в объект исследования. Самый простой пример такого подхода - бесконечный цикл, в котором случайные данные передаются на нужный адрес или порт.
Мутационное тестирование протокола вручную проще в использовании, чем метод случайных чисел. При ручном тестировании протокола автоматические фаззеры не применяются. Загрузив тестируемое приложение, тестер вручную вводит некорректные данные в попытке вызвать нежелательное поведение приложения. Чаще всего такой метод фаззинга применяется для веб-приложений.
Мутационное тестирование (тестирование методом грубой силы) представляет собой фаззер, который начинается с действующего образца протокола или формата данных и искажает каждые байт, слово, двойное слово в пакете данных или файле. Охват кода при подходе грубой силы зависит от того, сколько файлов тестируется. Большинство определений файлов довольно сложны, поэтому придется брать множество образцов, чтобы обеспечить сколько-нибудь приемлемый охват.
Автоматическое порождающее тестирование протокола - более продвинутый метод тестирования грубой силы. Для его реализации требуется предварительное исследование. Вместо того чтобы создавать образец для тестирования с жестко заданным кодом, создается грамматика, в которой описывается работа спецификации протокола. Таким образом определяются те порции пакета или файла, которые должны остаться неизменными, и те, которые служат переменными для фаззинга.
Выше были рассмотрены различные методы тестирования, теперь рассмотрим типы фаззеров.
Часто при запуске приложение выполняет аргументы командной строки, введенные пользователем. Фаззеры командной строки позволяют тестировать уязвимости формата строки и переполнения буфера в приложениях.
Множество приложений имеют дело с вводом и выводом файлов. Например, офисный модуль, который требуется для открытия документа. Приложения такого типа могут оказаться чувствительными к уязвимостям, которые возникают при анализе неверно созданных файлов. Фаззеры формата файлов динамически создают некорректные файлы, которые затем обрабатываются объектом тестирования.
Одна из простейших утилит для реализации фаззинга формата файлов - MiniFuzz. Проект разработан внутри Microsoft для тестирования своих собственных проектов. Дело в том, что использование фаззеров является обязательным этапом методологии SDL, принятой в Microsoft для разработчиков безопасного кода, включающей помимо прочего обильное fuzz-тестирование. С Minifuzz можно тестировать любое приложение; главное, чтобы в качестве параметра для запуска оно воспринимало указание на файл, который ему необходимо открыть (например, winword.exe test.doc). Для начала работы необходимо набрать несколько образцов «правильных» файлов и переместить их в каталог, обозначенный как Template files, а также выбрать приложение для проверки, указав формат параметров для его запуска.
Сетевые приложения прочно вошли в нашу жизнь, настолько прочно, что мы доверяем им наши конфиденциальные данные (пароли, данные банковских карт и т.д.). Почтовые сервера, веб-сайты, система доменных имен (DNS) - примеры сетевых приложений. Уязвимость в любой из таких систем дает нападающему доступ к важным данным или плацдарм для дальнейших атак на другие серверы. Для тестирования программ, которые занимаются сетевым интерфейсом, используются фаззеры удаленного доступа, которые подразделяются следующим образом:
- фаззеры сетевых протоколов;
- фаззеры веб-браузеров;
- фаззеры веб-приложений.
Фаззинг позволяет определить слабые места в программном обеспечении и предупредить их эксплуатацию в дальнейшем. Применение данного метода исследования программ на уязвимости является актуальным.
фаззинг программный мутационное тестирование
Библиографический список
1. Саттон М. Грин А. Амини П. Fuzzing: Исследование уязвимостей методом грубой силы, «Символ Плюс». - СПб.-Москва; 2009. - 560 с.
Размещено на Allbest.ru
Подобные документы
Методика исследования и анализа средств аудита системы Windows с целью обнаружения несанкционированного доступа программного обеспечения к ресурсам вычислительных машин. Анализ угрозы информационной безопасности. Алгоритм работы программного средства.
дипломная работа [2,9 M], добавлен 28.06.2011Угрозы безопасности программного обеспечения и классификация средств атаки на средства защиты ПО. Методы и средства защиты программ от компьютерных вирусов и средств исследования программ. Анализ стандартов в области информационной безопасности.
дипломная работа [1,4 M], добавлен 29.06.2012История развития и виды тестирования программного обеспечения. Инсталляционное, регрессионное, конфигурационное, интеграционное, локализационное, модульное тестирование. Методы сокращения трудоемкости модульного тестирования разрабатываемого приложения.
курсовая работа [309,5 K], добавлен 16.12.2015Неразрешимость проблемы тестирования программного обеспечения. Виды и уровни тестирования. Стратегии восходящего и нисходящего тестирования. Методы "белого" и "черного" ящика. Автоматизированное и ручное тестирование. Разработка через тестирование.
курсовая работа [112,2 K], добавлен 22.03.2015Проект системы автоматизированного аудита программного обеспечения вычислительного центра ЛГТУ; функциональное назначение, методы и средства разработки концептуальных статических и динамических моделей пользовательского интерфейса; технические средства.
курсовая работа [4,2 M], добавлен 04.01.2012Виды и классификация программного обеспечения. Операционные системы. Виды прикладного программного обеспечения. Программные средства работы с текстом, для вычислительных работ, с графикой, со звуком. Базы данных. Языки и системы программирования.
реферат [87,7 K], добавлен 07.03.2009Реализация программного средства "Действия над матрицами". Разработка кода программного продукта на основе готовой спецификации на уровне модуля. Использование инструментальных средств на этапе отладки программного модуля. Выбор стратегии тестирования.
отчет по практике [296,1 K], добавлен 19.04.2015Требования к разработке программного обеспечения. Анализ существующих уровней и классификаций требований. Предложение расширенной классификации с дополнительными атрибутами. Стадии разработки программного обеспечения. Наблюдение за бизнесом заказчика.
дипломная работа [2,4 M], добавлен 24.08.2016Разработка информационной системы для управления оперативной деятельностью фирмы, занимающейся ремонтом и технической поддержкой компьютеров и программного обеспечения, этапы и особенности. Программные средства реализации проекта, их выбор и обоснование.
дипломная работа [306,6 K], добавлен 28.08.2014Цели и задачи программной инженерии. Понятие программного обеспечения. Шесть принципов эффективного использования программного обеспечения. Виды программного обеспечения: общесистемное, сетевое и прикладное. Принципы построения программного обеспечения.
курсовая работа [30,4 K], добавлен 29.06.2010