Инструменты автоматического тестирования безопасности QA

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

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

c5ac4c15dfa07e4e80b4c4a2660f7816.png

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

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

Итак, далее мы будем считать, что у нас разрабатывается проект веб-портала на Python и используются контейнеры. В Jenkins уже созданы задачи для обеспечения функционала CI/CD (непрерывной интеграции и развертывания) и нам необходимо встроить в этот цикл тесты по безопасности.

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

За решение этой задачи отвечают SAST (Static Application Security Testing) анализаторы. Эти средства бывают как платные, так и бесплатные. Для Python можно воспользоваться анализатором Bandit.

Bandit

Этот бесплатный инструмент входит в состав Kali Linux, но если вы не хотите в своем конвейере использовать данный «хакерский» дистрибутив, то Bandit легко можно установить с помощью pip:

pip install bandit

Далее просто натравливаем анализатор на файлы с исходным кодом.

dd99e5310ea8d21343d9a576d3993b20.png

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

Отчет можно создать в формате JSON для последующего парсинга скриптом, анализирующим результаты.

2e4507f19fc6572888b0eb8026f5d96d.png

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

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

Существует множество различных сканеров веб ресурсов, как коммерческих, так и бесплатных. Я предлагаю рассмотреть в качестве примера сканер Wapiti. Он также входит в состав Kali Linux, и также может быть установлен через pip:

pip install Wapiti3 

Wapiti — это бесплатный сканер безопасности, который позволяет пользователям проверять веб-сайты и приложения на наличие уязвимостей. Этот инструмент, в отличии от предыдущего выполняет сканирование по принципу «черного ящика», то есть не изучает исходный код веб-страницы. Он сканирует страницы веб-приложений, атакуя скрипты и вводя полезную нагрузку, чтобы определить наличие уязвимостей. В связи с этим мы можем использовать данный сканер для анализа сайтов, написанных на любом языке.

Сканер может обнаруживать различные уязвимости: инъекции SQL (включая Blind SQL injection), XPath, открытые перенаправления и захват поддоменов. Система также может обнаруживать межсайтовый скриптинг (XSS) и различать постоянные и отраженные уязвимости XSS.

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

После каждого сканирования Wapiti генерирует отчеты об уязвимостях, доступные для скачивания в различных форматах, включая HTML, XML и CSV.

35ecfe4cdc938d20ff015602d07e03a0.png

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

Trivy

Для автоматизации процесса тестирования контейнеров можно воспользоваться сканером Trivy, который легко можно интегрировать в CI/CD-пайплайн. Вообще этот сканер может выявлять уязвимости не только в образах Docker, но также может проверять и образы виртуальных машин, и файлы. Но в рамках этой статьи нас будет интересовать именно анализ образов Docker. 

Установить Trivy можно из пакетов, например, с помощью snap:

snap install trivy

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

trivy image имя_образа

Например, для того, чтобы получить результаты сканирования образа Python 3.12 в формате JSON нужно выполнить:

trivy image python:3.12 -f json

6568c326acd5ed02f08af4b3f461aedc.png

В результате получим отчет в формате JSON, который затем уже можно будет парсить, например выявляя значения поля severity,  

87a954b32b6860e49d91af5b1a2c1055.png

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

Заключение

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

В завершение статьи хочу пригласить вас на бесплатные уроки курса Python QA про тестирование API на Python и про знакомство с Robot Framework и принципами ATDD/BDD.

© Habrahabr.ru