Этот репозиторий содержит проект с настройкой безопасного CI/CD пайплайна для веб-приложения с использованием Django-DefectDojo и других инструментов для анализа безопасности кода и конфигурации. Цель пайплайна — интегрировать тесты безопасности в процессе разработки и доставки кода, чтобы минимизировать риски уязвимостей.
Процесс включает в себя использование инструментов для статического и динамического анализа, проверки секретов, проверок конфигураций и механизма блокировки релиза при нахождении критических уязвимостей.
- Настроить безопасный пайплайн CI/CD для проекта.
- Интегрировать инструменты для поиска уязвимостей на всех этапах разработки.
- Использовать инструменты как для статического (SAST), так и для динамического анализа (DAST).
- Блокировать релизы с критическими уязвимостями.
- Автоматически проверять секреты в репозитории и конфигурационные файлы.
Цель: Автоматическая сборка и доставка программного обеспечения с помощью GitHub Actions.
- Репозиторий настроен так, чтобы запускать пайплайн на каждом пуше в ветку
mainи при создании pull request. - Workflow включает установку зависимостей, выполнение тестов, проверку на уязвимости и успешную доставку кода.
Пример конфигурации GitHub Actions:
name: CI Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
pytest tests/Цель: Проверка Python-кода на наличие уязвимостей с помощью инструмента Bandit.
- Используется для поиска проблем безопасности в исходном коде проекта.
- Результаты анализа отображаются в отчёте и могут быть интегрированы в Pull Request.
Пример конфигурации для Bandit в GitHub Actions:
- name: Run static analysis (Bandit)
run: |
pip install bandit
bandit -r .Цель: Динамическое сканирование веб-приложения для выявления уязвимостей.
- OWASP ZAP используется для сканирования веб-приложений.
- Запуск сканирования производится в Docker контейнере, сканируя URL, указывающий на развернутую версию приложения.
Пример конфигурации для OWASP ZAP в GitHub Actions:
- name: Run dynamic analysis (OWASP ZAP)
run: |
docker run -t owasp/zap2docker-stable zap-full-scan.py -t http://your-vps-ip/Цель: Проверка репозитория на наличие секретов и уязвимостей в Docker-конфигурациях.
- TruffleHog используется для поиска секретных ключей и токенов в репозитории.
- Hadolint используется для проверки Dockerfile и других конфигурационных файлов на уязвимости.
Пример конфигурации для TruffleHog и Hadolint:
- name: Run secret scanning (TruffleHog)
run: |
pip install truffleHog
trufflehog --json . > trufflehog-results.json
- name: Run Hadolint for Dockerfile
run: |
curl -s https://raw.githubusercontent.com/hadolint/hadolint/master/hadolint-linux-amd64 -o /usr/local/bin/hadolint
chmod +x /usr/local/bin/hadolint
hadolint DockerfileЦель: Остановка релиза, если на этапе статического или динамического тестирования обнаружены серьёзные уязвимости.
- При обнаружении критических уязвимостей на любом из этапов, релиз автоматически блокируется с помощью механизма GitHub Actions.
Пример конфигурации для блокировки релиза:
- name: Stop release if critical vulnerabilities found
if: failure()
run: |
echo "Critical vulnerabilities found, stopping release!"
exit 1- Bandit — Статический анализатор безопасности для Python, который помогает находить уязвимости в исходном коде.
- OWASP ZAP — Инструмент для динамического тестирования веб-приложений на наличие уязвимостей.
- TruffleHog — Поиск секретов (например, API ключей) в репозиториях.
- Hadolint — Статический анализатор Dockerfile для выявления потенциальных проблем в конфигурации контейнеров.
- GitHub Actions — Платформа для CI/CD, которая автоматически выполняет различные задачи, такие как сборка, тестирование и проверка кода.
-
Клонируйте репозиторий:
git clone https://github.com/ваш_репозиторий.git cd ваш_репозиторий -
Настройка зависимостей: В проекте используется виртуальное окружение для управления зависимостями. Вы можете создать и активировать виртуальное окружение с помощью следующих команд:
python3 -m venv venv source venv/bin/activate # Для Linux/macOS venv\Scripts\activate # Для Windows
Установите все зависимости:
pip install -r requirements.txt
-
Запуск тестов и анализа безопасности: Чтобы вручную запустить анализаторы безопасности, используйте команды:
-
Статический анализ (Bandit):
bandit -r . -
Динамическое тестирование (OWASP ZAP): Для этого нужно запустить контейнер ZAP, указав URL вашего веб-приложения.
-
Этот репозиторий представляет собой пример интеграции инструментов безопасности в процесс CI/CD для открытых проектов. Пайплайн настроен для автоматического выявления уязвимостей на разных этапах разработки и развертывания, что повышает безопасность всего процесса.