Получить консультацию по Solar appScreener

Чтобы оперативно выпускать на рынок качественные приложения, важно решать вопросы безопасности параллельно с разработкой ПО. А именно — уже на первых этапах их создания внедрять разноплановые инструменты контроля безопасности. Один из них — метод фаззинг-тестирования, которое относится к классу динамического анализа ПО. Обсудим суть метода, его этапы и разберемся, как его грамотно внедрить.

Что такое фаззинг-тестирование

Фаззинг (fuzzing или fuzz testing) — тестирование, призванное намеренно вызвать сбои в проверяемом ПО, «прорвать» защиту. Этого можно добиться, передавая приложению неверные или случайные данные. Несмотря на простоту, метод показал высокую эффективность, поэтому часто применяется в рамках комплексного подхода к обеспечению безопасности. 

Что можно выявить с помощью фаззинг-тестирования:

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

Фаззинг-тестирование позволяет обеспечить максимальное покрытие кода при исследовании. Также с его помощью можно выявить проблемы планирования и производительности ПО. 

Этапы анализа

Фаззинг-тестирование ПО включает следующие этапы:

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

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

Методы фаззинг-тестирования

Метод анализа зависит от способа генерации входных данных. По этому принципу можно выделить следующие методы:

  • Мутационный (случайный) — метод, подразумевающий генерацию произвольных данных, которые никак не будут зависеть от результатов предыдущих тестов. Благодаря этому метод более быстрый и проще в реализации.
  • С учетом покрытия кода — метод, в рамках которого при генерации входных данных учитываются результаты предыдущих тестирований, чтобы увеличить покрытие кода для следующего исследования. Сформировать тестовые комбинации с нуля в этом случае не получится — нужен минимальный набор данных. 
  • На базе протокола — принцип, подразумевающий запись в фаззер спецификации, которая потом ляжет в основу генерации входных данных для анализа. Сначала разрабатывается тестовая комбинация, затем в нее вносятся изменения согласно используемому протоколу. 

Метод фаззинг-тестирования в каждом конкретном случае зависит от подхода к проверке. Например, иногда реализуется фаззинг «белого ящика» — исследование внутренней структуры ПО, что позволяет увеличить покрытие кода. Второй подход — анализ методом «серого ящика», подразумевающий расчет покрытия кода, но не направленный на детальное изучение структуры. Третий вариант тестирования — фаззинг «черного ящика», который не предполагает осведомленности о структуре программного обеспечения.

Сильные и слабые стороны фаззинг-тестирования программного обеспечения

К преимуществам фаззинг-тестирования можно отнести то, что оно позволяет:

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

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

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

отчеты по фаззинг-тестированию

Фаззинг-тесты в комплексе с другими видами анализа

Фаззинг-тестирование часто применяется в комплексном подходе к обеспечению безопасности ПО совместно с другими видами анализа:

  • SCA — исследованием состава программного обеспечения.
  • SAST — статическим анализом кода.
  • DAST — динамическим анализом кода.
  • SCS — анализом цепочки поставок ПО.

Все эти проверки можно выполнять с помощью одного инструмента — Solar appScreener. Он позволяет всесторонне контролировать безопасность ПО, вовремя выявлять уязвимости, ошибки и недостатки кода. По результатам SAST, DAST, SCA и SCS инструмент формирует отчеты с детальным описанием обнаруженных недочетов и рекомендациями по их устранению. 

Заключение 

Фаззинг-тестирование показывает высокую эффективность в обнаружении уязвимостей в приложениях, поэтому рекомендуется встраивать этот вид проверки в цикл безопасной разработки ПО наряду с другими инструментами – SAST, DAST, SCA, SCS.

ДРУГИЕ СТАТЬИ ПРОДУКТА

Еще больше о наших возможностях

Zero Day уязвимость: что такое уязвимость нулевого дня

Zero Day уязвимость: что такое уязвимость нулевого дня

Узнать больше
White Box-тестирование: что это такое, и когда применяется

White Box-тестирование: что это такое, и когда применяется

Узнать больше
Cross Site Scripting: что такое XSS-атаки и как от них защититься

Cross Site Scripting: что такое XSS-атаки и как от них защититься

Узнать больше
Веб-приложения: как контролировать безопасность кода

Веб-приложения: как контролировать безопасность кода

Узнать больше