Este estudo de caso se refere a implementação e segurança de um sistema de gerenciamento de tarefas pessoais, integrando processos de SDLC, DevOps e DevSecOps para garantir eficiência e segurança.
- Clonar o projeto e instalar das dependências a partir do requiriments.txt:
Flask==2.3.2
Flask-Bcrypt==1.0.1
Flask-Login==0.6.3
Flask-SQLAlchemy==3.0.5
Flask-WTF==1.1.1
WTForms==3.1.1
Jinja2==3.1.2
werkzeug==2.3.3
coverage
python-dotenv
prometheus-flask-exporter
- Construir o Diagrama para entender o dominio do problema:
Branchs:
- master: produção
- development: desenvolvimento
- staging: homologação
Ferramentas Utilizadas:
- Visual Studio Code
- Gitlab
- Docker
- Python
- Pytest
- Unittest
- Zed Attack Proxy
- Bandit
- OWASP Dependency-Check
- OWASP ZAP
- Hydra
- Prometheus
- Grafana
- Implementação do Dockerfile
- Aplicação executada na porta 5000:
- Implementação do build e deploy na pipeline
- Pipeline em execução no gitlab:
- Implementação do Bandit na pipeline:
- Artefato gerado mostrando dados sensíveis expostos na aplicação:
- Correção no código da falha capturada pelo Bandit:
- Implementação do OWASP Dependency Check na pipeline:
- Artefato gerado com vulnerabilidades no código javascript:
- Foi utilizada a aplicação Zed Attack Proxy (ZAP) para fazer uma varredura rápida na aplicação:
- Artefato gerado mostrando as vulnerabilidades e níveis de risco:
- Implementação da etapa revisão de código na pipeline:
- Implementação do OWASP ZAP para executar em toda pipeline na homologação:
- Implementação do Prometheus e Grafana na produção:
- Implementação do ataque de bruta force em python:
#!/bin/bash
URL="http://localhost:5000/login"
USERNAMES="usernames.txt"
PASSWORDS="passwords.txt"
if [[ ! -f "$USERNAMES" || ! -f "$PASSWORDS" ]]; then
echo "Os arquivos usernames.txt ou passwords.txt não foram encontrados."
exit 1
fi
while IFS= read -r username; do
while IFS= read -r password; do
echo "Tentando login com Username: $username e Password: $password"
response=$(curl -s -X POST -d "username=$username&password=$password" "$URL")
if [[ $response == *"Login successful"* ]]; then
echo "SUCESSO! Username: $username | Password: $password"
exit 0
fi
done < "$PASSWORDS"
done < "$USERNAMES"
- Acompanhamento pelo Grafana com o ataque de bruta force em execução na rota de login:
-
A aplicação é antiga e precisou que algumas bibliotecas fossem atualizadas;
-
Foi corrigida uma das vulnerabilidades críticas capturada pelo bandit;
-
Testes funcionais e de integração foram implementados na etapa de homologação
-
A pipeline foi testada de ponta a ponta, do desenvolvimento a homologação e produção: