Как защитить приложения на Python Flask
Узнать большеЧтобы оперативно выпускать на рынок качественные приложения, важно решать вопросы безопасности параллельно с разработкой ПО. А именно — уже на первых этапах их создания внедрять разноплановые инструменты контроля безопасности. Один из них — метод фаззинг-тестирования, которое относится к классу динамического анализа ПО. Обсудим суть метода, его этапы и разберемся, как его грамотно внедрить.
Что такое фаззинг-тестирование
Фаззинг (fuzzing или fuzz testing) — тестирование, призванное намеренно вызвать сбои в проверяемом ПО, «прорвать» защиту. Этого можно добиться, передавая приложению неверные или случайные данные. Несмотря на простоту, метод показал высокую эффективность, поэтому часто применяется в рамках комплексного подхода к обеспечению безопасности.
Что можно выявить с помощью фаззинг-тестирования:
- Неочевидные проблемы безопасности ПО.
- Недостатки, не обнаруженные в ходе других тестирований.
- Недочеты, связанные с целостностью потока управления.
- Недекларированное поведение программного обеспечения.
- Необработанные исключения.
- Уязвимости, которые могут быть проэксплуатированы для проведения атаки.
Фаззинг-тестирование позволяет обеспечить максимальное покрытие кода при исследовании. Также с его помощью можно выявить проблемы планирования и производительности ПО.
Этапы анализа
Фаззинг-тестирование ПО включает следующие этапы:
- Определение программного обеспечения, которое нужно проверить.
- Подготовка набора данных, используемых для тестирования.
- Ввод входных данных и выполнение приложения с этими условиями.
- Регистрация проблем и багов, обнаруженных в ходе тестирования.
Чаще всего анализ реализуется благодаря специальным инструментам-фаззерам, позволяющим автоматизировать процесс. С их помощью можно проверить, как интерфейс ПО обрабатывает заведомо ложные входные данные и какую реакцию выдает.
Методы фаззинг-тестирования
Метод анализа зависит от способа генерации входных данных. По этому принципу можно выделить следующие методы:
- Мутационный (случайный) — метод, подразумевающий генерацию произвольных данных, которые никак не будут зависеть от результатов предыдущих тестов. Благодаря этому метод более быстрый и проще в реализации.
- С учетом покрытия кода — метод, в рамках которого при генерации входных данных учитываются результаты предыдущих тестирований, чтобы увеличить покрытие кода для следующего исследования. Сформировать тестовые комбинации с нуля в этом случае не получится — нужен минимальный набор данных.
- На базе протокола — принцип, подразумевающий запись в фаззер спецификации, которая потом ляжет в основу генерации входных данных для анализа. Сначала разрабатывается тестовая комбинация, затем в нее вносятся изменения согласно используемому протоколу.
Метод фаззинг-тестирования в каждом конкретном случае зависит от подхода к проверке. Например, иногда реализуется фаззинг «белого ящика» — исследование внутренней структуры ПО, что позволяет увеличить покрытие кода. Второй подход — анализ методом «серого ящика», подразумевающий расчет покрытия кода, но не направленный на детальное изучение структуры. Третий вариант тестирования — фаззинг «черного ящика», который не предполагает осведомленности о структуре программного обеспечения.
Сильные и слабые стороны фаззинг-тестирования программного обеспечения
К преимуществам фаззинг-тестирования можно отнести то, что оно позволяет:
- Обнаружить проблемы в сложных кодах.
- Найти ошибки, которые не были выявлены в рамках других видов анализа.
- Проверить уровень безопасности ПО.
- Минимизировать человеческое участие в процессе тестирования.
- Сократить затраты на работу команды разработчиков, поскольку такое сканирование обходится намного дешевле, чем ручная проверка силами разработчиков.
Перейдем к слабым сторонам фаззинг-тестирования ПО, которые практически все связаны с финансовыми вопросами. Например, важно учесть затраты на внедрение анализаторов кода. Еще одна статья расходов — привлечение экспертов высокого уровня для оценки результатов тестирования и устранения обнаруженных проблем, если на данный момент в штате компании нет таких специалистов.
Также к недостаткам фаззинг-тестирования программного обеспечения можно отнести немалые временные затраты. В некоторых случаях проводят поверхностный быстрый анализ, однако он не обнаружит все уязвимости и по эффективности будет примерно равен тестированию на проникновение. Поэтому специалисты выступают за детальное фаззинг-тестирование, которое займет больше времени, но оно будет в разы эффективнее.
Фаззинг-тесты в комплексе с другими видами анализа
Фаззинг-тестирование часто применяется в комплексном подходе к обеспечению безопасности ПО совместно с другими видами анализа:
- SCA — исследованием состава программного обеспечения.
- SAST — статическим анализом кода.
- DAST — динамическим анализом кода.
- SCS — анализом цепочки поставок ПО.
Все эти проверки можно выполнять с помощью одного инструмента — Solar appScreener. Он позволяет всесторонне контролировать безопасность ПО, вовремя выявлять уязвимости, ошибки и недостатки кода. По результатам SAST, DAST, SCA и SCS инструмент формирует отчеты с детальным описанием обнаруженных недочетов и рекомендациями по их устранению.
Заключение
Фаззинг-тестирование показывает высокую эффективность в обнаружении уязвимостей в приложениях, поэтому рекомендуется встраивать этот вид проверки в цикл безопасной разработки ПО наряду с другими инструментами – SAST, DAST, SCA, SCS.