Сначала создайте форк https://github.com/glimow/dvpwa.
Затем клонируйте только что форкнутый репозиторий и переключитесь на нужную ветку:
git clone -b tutorial-part-2 git@github.com:<your-username>/dvpwa.git
Интеграционное тестирование безопасности
Анализ кода не может найти все недостатки безопасности: некоторые связаны с окружением, конфигурацией.
Некоторые просто слишком сложны, чтобы их могли найти автоматические инструменты, читающие код.
Чтобы получить дополнительный уровень тестирования безопасности, более близкий к производственному контексту приложения, команды безопасности используют специализированные инструменты, которые моделируют атаки на работающее приложение и сообщают об успешных.
Этот процесс называется динамическим тестированием безопасности приложений (Dynamic Application Security Testing, DAST).
Как и инструменты анализа безопасности кода, инструменты DAST были сложны в использовании, или дороги, или и то, и другое.
Но недавно мое внимание привлек новый бесплатный проект с открытым исходным кодом: nuclei.
Или на Java.
Nuclei – это простой в использовании инструмент тестирования безопасности приложений, написанный на языке go.
Он использует возможности сообщества для создания новых автоматизированных тестов с помощью простых файлов шаблонов YAML.
Nuclei сканирует ваше веб-приложение на основе тысяч написанных сообществом шаблонов YAML
В простой командной строке nuclei может запустить почти 2500 тестов безопасности на ваши приложения на скорости golang.
Что очень быстро. 🚀
Запуск Nuclei на веб-приложении
Сначала давайте установим Nuclei.
Для пользователей macOS это довольно просто:
brew install nuclei
Для пользователей Linux, к сожалению, nuclei не предоставляет менеджера пакетов для установки, поэтому вам придется либо использовать go, либо загрузить бинарник.
Для краткости в этом руководстве мы будем использовать второй вариант.
wget https://github.com/projectdiscovery/nuclei/releases/download/v2.5.5/nuclei_2.5.5_linux_amd64.zip
unzip nuclei
sudo mv ./nuclei /usr/bin
nuclei
Конечно, результатов нет, так как мы не указали URL!
Давайте запустим dvpwa, чтобы мы могли проверить его по-настоящему.
Откройте другой терминал, войдите в репозиторий dvpwa, который вы использовали для этого руководства, и запустите:
docker-compose up
Ваше уязвимое веб-приложение python запущено и работает на порту 8080.
Давайте просканируем его.
В первой консоли выполните:
nuclei -u http://localhost:8080
Всего за 5 минут мы обнаружили, что нашему python-приложению не хватает многих функций безопасности.
Если используемая вами машина имеет несколько открытых портов, nuclei может даже обнаружить их и выдать еще несколько предупреждений о безопасности!
Интеграция Nuclei в CI/CD
К счастью, разработчики nuclei уже создали GitHub Action для простой интеграции в любой CI/CD конвейер.
“Но подождите, если мы тестируем живое приложение, это значит, что нам придется запускать полное приложение внутри GitHub Actions?”.
Да. Именно так. Но не волнуйтесь, это очень просто: docker-compose работает из коробки!
Просто добавьте следующее в ваш .github/workflows/main.yaml :
dynamic_security_testing:
runs-on: ubuntu-latest
name: Scan live web app for security flaws
steps:
- uses: actions/checkout@v2
- name: Start containers
run: docker-compose -f "docker-compose.yml" up -d --build
- name: Dynamic Security Testing
uses: projectdiscovery/nuclei-action@main
with:
target: http://localhost:8080
- name: Stop containers
if: always()
run: docker-compose -f "docker-compose.yml" down
Затем, в консоли:
git add .github/workflows
git commit -m "Add dynamic security testing"
git push origin master
Обратите внимание, что наше динамическое сканирование не даст сбоя, если nuclei обнаружит только уязвимости с менее критичностью чем low.
Заключение
И снова, всего за несколько шагов, мы установили инструмент, который сканирует наше приложение на наличие уязвимостей прямо внутри CI/CD.
На этот раз мы просканировали наше работающее приложение, используя HTTP-запросы, отправленные nuclei, сканером безопасности веб-приложений, разработанным сообществом.
¯\_(ツ)_/¯ Примечание: Информация для исследования, обучения или проведения аудита. Применение в корыстных целях карается законодательством РФ.
см. также:
- ⚒️ Инструменты с открытым исходным кодом для DAST
- 🐳 Образы Docker для тестирования на проникновение и безопасности