Чем раньше вы находите ошибки приложений, тем дешевле она их исправить. Это одна из причин, по которой многие организации приняли тестовое развитие (TDD). TDD позволяет разработчикам более точно определить, если код вы собираетесь совершить, собирается сломать и не передавать тесты, которые вы учитывали в CI/CD. Аналогично процессу TDD, мы верим в автоматизировании тестирования по безопасности приложений. Вот почему мы создали StackHawk!
Проверь как это работает
Этот пост демонстрирует, как использовать Stackhawk для автоматизации тестирования для ошибок Appsec в вашем конвейере CI/CD. Мы идем через:
- Примерное приложение, «Vulny django», используется для тестирования Stackhawk
- Как я притеснил мое приложение Django
- Строительство и тестирование мое приложение в GitLab
- Поиск ошибок безопасности приложений в трубопроводе с StackHawk
Примечание. StackHawk — это динамический сканер для тестирования безопасности приложений (Dast), который активно проверяет код, который разработчики пишут для ошибок безопасности
Пример приложения: Опрос с Джанго + Местное скачащееся скача
Я взял Учебник Django при совершении применения опросов и изменено его в проект, который я звоню Vulny Django тестировать стекhawk. Я не самый лучший кодер, так как я создал приложение, я хотел запустить тесты, которые мы встроили в учебном пособие вместе с узором Stackhawk Dast Scanner. Запуск StackHawk локально позволяет мне убедиться, что я не ввел никаких ошибок Appsec, как я строю.
Возможность сканирования Stackhawk настроен через YAML-файл Это описывает, как сканировать ваше приложение. В этом примере приложение у нас довольно простая Cackhawk Config . Чтобы отсканировать локально, так как мы в основном приходим к инструменту, как войти на страницу администратора и несколько URL для исключения. С этой конфигурацией я могу легко отсканировать приложение My Polls и интерфейс администратора от моего локального ноутбука, используя команду:
vulny_django_play/ $ docker run -e API_KEY=${HAWK_API_KEY} --rm -v $(pwd):/hawk:rw -it stackhawk/hawkscan:latest
Эта команда динамически сканирует моего приложения Django, чтобы проверить его для проблем безопасности, которые могут быть перерезаны на платформе StackHawk.
Контейнерное управление приложением опросов для тестирования в трубопроводе
Я также приблизил мой проект Django, потому что не так ли ты!? Я хочу быть в состоянии просканировать свой проект Django в Удивительная платформа DEVOPS Gitlab Отказ Для этого мое приложение должно быть где-то заканчиваться. Хотя я мог развернуть свое приложение на место постановки и иметь Hawkscan, сканер Stackhawk, сканируйте его там, я выбираю эфемерный маршрут, где все временно просто живет, пока я проверяю его. Это позволяет мне сломать сборки, если я нахожу проблему, прежде чем развертывать мое приложение к месту, которое может использоваться для тестирования пользователей или других вещей.
Используя Docker, я могу создать докеровную сеть и прикрепить свои контейнеры Django и Cackhawk/Hawkscan, чтобы они могли говорить друг с другом. Это выглядит так, как это на командной строке.
/vulny_django_play/ $ docker network create scan_net /vulny_django_play/ $ docker run --detach -p 8020:8020 --network scan_net --name vuln-django --rm vuln_django:latest /vulny_django_play/ $ docker run -e API_KEY=${HAWK_API_KEY} -e HOST=http://vuln-django --rm -v $(pwd):/hawk:rw --tty --network scan_net stackhawk/hawkscan:latest
С этими командами мы:
- Создание виртуальной сети Docker с именем «Scan_net»
- Запуск изображения Django Docker прикреплен к сети сканирования, которую мы построили (
Docker Build. -t vuln_django: последние
Несомненно - Запуск изображения Django Docker прикреплен к сети сканирования, которую мы построили (
Docker Build. -t vuln_django: последние
Несомненно - Запуск Hawkscan при прикреплении его к Scan_net и переопределив переменную хоста в Stackhawk.yml, чтобы указать на Network Docker Network Time приложения Django
PSA : Django не позволит вам поставить подчеркивание в имени хоста, как это http://vuln_django потому что это не соответствует RFC. Если вы это сделаете, вы будете получать поиск по Google некоторое время, чтобы попытаться понять, почему ваше приложение не работает в сети Docker, только чтобы найти, что если вы измените это на тире, http://vuln-django , все будет работать нормально, и вы будете смущены (на самом деле эта последняя часть может быть только мной).
Как только это все настроен, у вас будут два контейнера докеров, разговаривающие друг с другом через виртуальную докерную сеть. Это идеальное время, чтобы начать работать над нашим Gitlab Config, поскольку мы можем сделать докер в Docker в GitLab.
Go Go Gadget Gitlab!
Платформа DevOps Gitlab имеет удивительные возможности. Я хотел провести свой проект Django с помощью платформы, которая могла бы запустить свои тесты на PRS при совершении кода или когда я хочу объединить код. GitLab CI/CD сделали этот процесс довольно легко. Они используют красивую Простой файл конфигурации YML к инструменту какой трубопровод должен выглядеть и делать.
Я выбрал несколько тестов для запуска, например, Flake8, а также миграции и тесты, которые я написал, чтобы запустить в тестовой фазе, используя изображение Python: 3.7-buster. Таким образом, здесь мы устанавливаем требования к библиотеке Python, запустив FLAKE8, а затем предварительно заполнили DB с информацией и выполняя тестовый набор.
test: stage: test image: python:3.7-buster script: # This configures the test stuff - apt-get update -qy - apt-get install -y python-dev python-pip - pip install -r src/requirements.txt - flake8 vuln_django --max-line-length=127 - cd src - python manage.py migrate - python manage.py test
Это позволяет мне убедиться, что мой код здоров, прежде чем делать все остальное, как, скажем …
Тестирование сборки контейнера докеров
Теперь мне пора убедиться, что мой контейнер Docker будет успешно построить в CI/CD. Здесь мне нужно сказать GitLab Runner, как построить свой образ, который является супер легким. Я говорю это, мне нужно изображение докера, и я также хотел бы также сервер докена-докера, чтобы убедиться, что не вводит никаких проблем с моей сборкой:
docker-build: stage: build image: docker:19.03.1 services: - docker:19.03.1-dind script: - docker build -t vuln_django:latest .
Этот раздел довольно прост и похоже на создание образа докера на вашей рабочей станции или ноутбуке. Это снова только для того, чтобы имидж построил, чтобы мы могли добраться до хорошего.
Сканирование моих приложений по связыванию составляющих со штатами
Теперь пришло время отсканировать докеренную версию моего приложения Django. Мы знаем, что мы можем отсканировать приложение на нашу рабочую станцию в виде виртуальной среды, либо на доке. Мы знаем, что мы можем сделать один контейнер докера разговаривать с другим контейнером Docker, поэтому давайте скажем подъему Gitlab, как это сделать.
- Нам понадобится образ докера, чтобы построить на
- Нам понадобится сервис докена докера
- Мы построим виртуальную сеть Docker
- Мы должны построить контейнер Django и скачать контейнер StackHawk/Hawkscan
- Нам нужно будет установить два изображения Docker, чтобы запустить на виртуальную сеть
- Мы будем использовать переопределение YML, чтобы сообщить сканеру StackHawk о новой среде и где найти запущенное приложение.
Этот раздел нашего файла .gitlab-Ci.yml выглядит так:
hawk_scan_execute: stage: scan image: docker:19.03.1 services: - docker:19.03.1-dind script: - docker build -t vuln_django:latest . - docker network create scan_net - docker pull stackhawk/hawkscan:latest - docker run --detach -p 8020:8020 --network scan_net --name vuln-django --rm vuln_django:latest - | docker run --network scan_net --volume $(pwd):/hawk:r --tty --rm \ --env API_KEY="hawk.${HAWK_API_ID}.${HAWK_API_SECRET}" \ --env BRANCH=GitLab:${CI_COMMIT_BRANCH} \ --env NO_COLOR=true \ stackhawk/hawkscan:latest stackhawk.yml stackhawk-gitlab.yml
Здесь мы использовали переопределенный файл YML и вызов конфигурации, чтобы сообщить сканеру несколько новых вещей. Этот переопределенный файл выглядит так:
app: env: GitLab-CI # The url of your application to scan host: http://vuln-django:8020 # (required)
Мы переопределяем два настроек в файле YML: ENV и Host. Переопределение хоста довольно прост, просто идентифицируя, как сканер может найти приложение, поэтому для этой конфигурации мы дали ей простое короткое имя. ENV — это так, что я могу сказать в приложении Kackhawk, какую среду запустил мою сканирование. У меня могут быть другие технологии, введенные или удаляют ошибки безопасности здесь, поэтому я хочу иметь возможность дифференцировать. Сканер Stackhawk сделает среду в портале Gitlab-Ci.
(Интересно, у нас был клиент, используя это для идентификации имени ветви Git .. Они хотели знать, какая отрасль представила любые проблемы, которые они нашли. Я думаю, что это действительно аккуратный способ подумать о том, как группировать результаты, но я думаю, что я предпочитаю свою среду более слабо сгруппирован, как CI/CD или GitLab .. Я буду и я нажимаю этот филиал имя в функцию тегов, которые мы будем реализовать позже.)
Теперь у меня есть настроенный бегун GitLab для моего проекта Django, с выходом выглядит так:
И результаты на платформе Stackhawk выглядят так:
Теперь легко знать Прежде чем ты уйдешь!
Как видите, это действительно легко реализовать DAST Appsec сканирование в трубопровод GitLab CI/CD и иметь результаты, доступные в организованной моде, которые могут помочь вам понять ошибки Appsec, которые могут существовать в вашем приложении, прежде чем он пойдет в прямом эфире. Если вы хотите интегрировать StackHawk в ваш CI/CD-трубопровод, зарегистрируйтесь на CADHHAWK Ранний доступ И мы начнем вас. Кроме того, если вы хотите поиграть с мое приложение Django , не стесняйтесь вилить его и используйте его, чтобы проверить Stackhawk в вашем трубопроводе CI.
Оригинал: «https://dev.to/sgerlach/using-stackhawk-in-gitlab-know-before-you-go-live-1nhp»