El threat model del checkout que vam construir a la lliçó anterior va deixar una llista de mitigacions convertides en requisits verificables. Ara bé, un requisit que només es comprova quan algú se'n recorda és un requisit fràgil. La promesa d'aquest mòdul era que la seguretat passés de fase final a propietat contínua del procés, i aquesta continuïtat l'aporta l'automatització. DevSecOps és l'evolució de DevOps que integra la seguretat com a responsabilitat compartida i automatitzada dins del flux de lliurament de programari. En aquesta lliçó veiem com orquestrar els controls —SAST, SCA, DAST, secret scanning, IaC i contenidors— dins d'un pipeline, i dissenyem el pipeline DevSecOps de BazarNube.
Contingut
- Què és DevSecOps i per què sorgeix
- Cultura de responsabilitat compartida
- Security as Code
- Els controls del pipeline segur
- Gates, gestió de secrets i polítiques com a codi
- El pipeline DevSecOps de BazarNube
- Errors comuns i consells
- Exercicis
- Conclusió
Què és DevSecOps i per què sorgeix
DevOps va unir desenvolupament i operacions per lliurar programari més ràpid i amb més freqüència. Però aquesta velocitat va xocar amb el model clàssic de seguretat: una revisió manual al final, que es convertia en coll d'ampolla o, pitjor, s'ometia. DevSecOps resol la tensió integrant la seguretat en el flux automatitzat, no després d'ell. La "Sec" no és una tercera fase entre "Dev" i "Ops": és un atribut transversal de tots dos.
La idea central és que si despleguem cent vegades al dia, la seguretat no pot dependre d'una persona que revisa a mà; ha d'executar-se sola, a cada canvi, i donar feedback en minuts. És el shift-left de la lliçó 07-01 portat a la seva conseqüència operativa.
Cultura de responsabilitat compartida
DevSecOps és, abans que eines, un canvi cultural. En el model antic la seguretat "pertanyia" a l'equip de seguretat; en DevSecOps és responsabilitat de tothom que toca el producte.
- El desenvolupament corregeix les troballes de seguretat com qualsevol altre bug, en el seu propi flux.
- Operacions/SRE aporten enduriment, monitorització i resposta.
- L'equip de seguretat passa de "fer" la seguretat a habilitar-la: defineix polítiques, tria eines, forma i assessora. És el model de security champions que aprofundirem a 07-04.
L'antipatró a evitar és el "mur sobre el qual es llança": desenvolupament acaba i "llança" el codi a seguretat. DevSecOps enderroca aquest mur. Aquesta cultura és exactament el que SAMM mesura al seu domini de Govern i a la pràctica de formació.
Security as Code
El principi tècnic que fa possible DevSecOps és security as code: expressar la seguretat —controls, polítiques, configuració, infraestructura— com a fitxers versionats al repositori, no com a passos manuals o documents en un wiki.
Avantatges de tractar la seguretat com a codi:
- Versionable i auditable: cada canvi de política té història a Git (qui, quan, per què).
- Revisable: una política passa per pull request com qualsevol codi.
- Repetible: s'aplica igual a tots els entorns, eliminant el "a la meva màquina funciona".
- Automatitzable: el pipeline l'executa sense intervenció.
Sota aquest paraigua cauen el pipeline mateix (YAML de CI), la infraestructura (Terraform), les polítiques (OPA/Rego) i la configuració dels escàners.
Els controls del pipeline segur
Un pipeline DevSecOps orquestra diverses famílies d'eines, cadascuna cobrint un angle diferent del risc. Aquí les presentem a alt nivell com a peces del procés; el catàleg concret d'eines el veurem a 07-05, i el detall de ZAP ja el vam cobrir al mòdul 6.
| Control | Què analitza | Quan s'executa | Risc Top Ten que cobreix |
|---|---|---|---|
| Secret scanning | Credencials/claus al codi | Pre-commit i en CI | A05, A07 |
| SAST | Codi font a la cerca de patrons insegurs | A cada push/PR | A03, A01 i altres |
| SCA | Dependències de tercers amb CVE coneguts | A cada push/PR | A06 |
| IaC scanning | Configuració d'infra (Terraform, k8s) | A cada push/PR | A05 |
| Escaneig de contenidors | Imatge Docker: SO i llibreries | En construir la imatge | A06, A05 |
| DAST | L'app en execució (aquí entra ZAP) | En staging, després de desplegar | A01, A03, A05... |
La lògica de col·locació segueix el cost del feedback: el més ràpid i amb menys falsos positius (secrets, SAST, SCA) s'executa aviat i sovint; el més lent (DAST, que necessita l'app aixecada) s'executa després, contra un entorn desplegat.
graph LR
Dev[Commit] --> Hook[Pre-commit: secrets]
Hook --> CI[CI: SAST + SCA + IaC]
CI --> Build[Build imatge + escaneig contenidor]
Build --> Deploy[Deploy a staging]
Deploy --> DAST[DAST ZAP en staging]
DAST --> Gate[Gate de release]
Gate --> Prod[Deploy a produccio]
Prod --> Mon[Monitoritzacio runtime]
Mon -.feedback.-> Dev
Gates, gestió de secrets i polítiques com a codi
Gates al pipeline
Com vam veure a 07-01, un gate impedeix avançar si no es compleix un criteri. En DevSecOps els gates es codifiquen al pipeline. La clau pràctica és distingir severitats: bloquejar davant del crític, avisar davant de la resta, per no paralitzar el lliurament amb soroll.
Gestió de secrets en CI
Un pipeline necessita credencials (per desplegar, per accedir a registries), i aquest és un punt sensible: si el mateix pipeline filtra secrets, hem obert una bretxa al cor del procés. Regles bàsiques:
- Mai secrets al YAML ni al codi: s'injecten des d'un gestor de secrets (Vault, secrets del proveïdor de CI, etc.).
- Mínim privilegi i vida curta: credencials acotades al que el job necessita i, si és possible, efímeres (OIDC en lloc de claus de llarga durada).
- Secret scanning com a xarxa de seguretat per detectar filtracions accidentals.
Polítiques com a codi
Les regles de seguretat s'expressen com a codi avaluable. Per exemple, amb Open Policy Agent (OPA) es pot exigir que cap imatge es desplegui sense haver passat l'escaneig, o que cap bucket sigui públic.
# Exemple conceptual: job de CI amb gate per severitat (GitHub Actions)
jobs:
sast:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Analisi estatica
run: semgrep ci --config auto
# semgrep retorna codi != 0 si hi ha troballes bloquejants
gate:
needs: [sast, sca, secrets]
runs-on: ubuntu-latest
steps:
- name: Verificar llindar de severitat
run: |
echo "Bloquejar si hi ha troballes critiques o altes"
# la logica real consulta els informes de cada jobEl pipeline DevSecOps de BazarNube
BazarNube parteix d'un CI que només executava tests unitaris. La SRE i Lucía dissenyen una evolució per etapes, mapejant cada control amb la mitigació del threat model del checkout que quedava pendent d'automatitzar.
| Etapa | Control | Eina (categoria) | Bloquejant | Mitigació que automatitza |
|---|---|---|---|---|
| Pre-commit | Secret scanning | gitleaks | Sí | Evitar filtrar claus de la passarel·la |
| PR / push | SAST | Semgrep | Només crític/alt | Injecció, control d'accés en codi |
| PR / push | SCA | Dependency-Check | Només crític/alt | A06 en libs de Node/Java |
| PR / push | IaC scan | Checkov/trivy | Avís a l'inici | Configuració endurida (A05) |
| Build | Escaneig d'imatge | trivy | Només crític | Base image sense CVE crítics |
| Staging | DAST | ZAP baseline | Només High | Verificar headers, IDOR, etc. |
| Release | Gate agregat | Política CI | Sí | Complir el gate de 07-01 |
| Producció | Monitorització | Logs + alertes | — | A09; detectar abús del checkout |
Estratègia d'adopció (evita el rebuig de l'equip):
- Setmana 1-2: secret scanning bloquejant (alt valor, baix soroll) i la resta en mode avís.
- Mes 1: SAST i SCA bloquejants només per a severitat crítica/alta, després d'haver netejat les troballes existents.
- Mes 2: DAST en staging i gate de release agregat.
- Continu: pujar el llistó a mesura que baixa el deute, alineat amb l'objectiu de maduresa de SAMM.
El resultat és que les mitigacions que a 07-02 eren "requisits al backlog" passen a ser comprovacions que el pipeline executa a cada canvi, sense dependre que algú se'n recordi.
Errors Comuns i Consells
- Encendre tots els gates alhora. L'equip es troba el build trencat per desenes de troballes preexistents i perd la confiança en el procés. Introdueix controls en mode avís, neteja el deute i després bloqueja.
- Fatiga d'alertes. Mil troballes de baixa severitat enterren les tres que importen. Prioritza per severitat, suprimeix falsos positius coneguts i ajusta les regles.
- Secrets al pipeline. Posar un token directament al YAML és una bretxa esperant a passar. Usa sempre el gestor de secrets i credencials de vida curta.
- Automatitzar sense cultura. Un pipeline perfecte no serveix si desenvolupament ignora les troballes per no ser "la seva" feina. La responsabilitat compartida és el prerequisit.
- Consell: mesura el temps de feedback. Si el pipeline de seguretat triga 40 minuts, la gent l'evita. Paral·lelitza jobs i mou el lent (DAST) a una fase posterior perquè el feedback ràpid arribi en minuts.
Exercicis
Exercici 1. Ordena aquests controls de més primerenc a més tardà al pipeline i justifica-ho: DAST, secret scanning, SCA.
Exercici 2. Un desenvolupador de BazarNube vol desplegar urgent i el gate de release bloqueja per una vulnerabilitat "High" en una dependència. Quines opcions legítimes hi ha i quin és l'antipatró?
Exercici 3. Explica per què el secret scanning és un bon candidat a primer gate bloquejant en termes de la relació valor/soroll, connectant-ho amb la gestió de secrets en CI.
Solucions
Solució 1. Ordre: secret scanning → SCA → DAST. El secret scanning és el més barat i ràpid (analitza text, gairebé sense falsos positius) i s'executa ja en pre-commit. El SCA analitza l'arbre de dependències en CI, ràpid i determinista. El DAST és el més tardà perquè necessita l'aplicació desplegada i en execució en staging, per la qual cosa només pot córrer després del build i el deploy. L'ordre segueix el principi de donar el feedback més ràpid com abans millor.
Solució 2. Opcions legítimes: (a) actualitzar la dependència a una versió pedaçada —l'ideal—; (b) si no hi ha pedaç, avaluar si la vulnerabilitat és explotable en el context i aplicar una mitigació compensatòria; (c) sol·licitar una excepció formal, aprovada per un responsable (el CTO a BazarNube), registrada i amb caducitat. L'antipatró és desactivar el gate o pujar el llindar "temporalment" sense registre: aquesta excepció es torna permanent i erosiona tot el procés.
Solució 3. El secret scanning té una relació valor/soroll excel·lent: un token o clau filtrada és pràcticament inequívoc (baixíssim fals positiu) i el seu impacte és màxim (una credencial exposada és un incident immediat, potencialment al mateix pipeline). Com que a més la gestió de secrets en CI és un punt especialment sensible, detectar filtracions accidentals de forma bloquejant protegeix el cor del procés sense alentir la feina legítima, cosa que el fa ideal com a primer gate.
Conclusió
DevSecOps converteix els controls de seguretat en comprovacions automàtiques, versionades i de responsabilitat compartida, orquestrades dins del pipeline de lliurament. Hem vist les seves famílies de controls, la gestió de secrets i les polítiques com a codi, i hem dissenyat el pipeline de BazarNube amb una estratègia d'adopció realista que automatitza les mitigacions del threat model. Però cap eina ni pipeline substitueix el criteri de les persones que escriuen el codi i aproven els pull requests: el baula decisiu segueix sent humà. A la lliçó següent, 07-04, abordem aquest factor humà: com la formació i conscienciació —secure coding, security champions, gamificació— sosté tota la cultura que DevSecOps pressuposa.
Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web
Mòdul 1: Introducció a OWASP
Mòdul 2: Principals Projectes d'OWASP
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
- Altres Projectes Clau: WSTG, Cheat Sheets i Dependency-Check
Mòdul 3: OWASP Top Ten 2021 en Profunditat
- A01:2021 – Pèrdua de Control d'Accés
- A02:2021 – Errors Criptogràfics i Exposició de Dades Sensibles
- A03:2021 – Injecció
- Cross-Site Scripting (XSS) en Profunditat
- A04:2021 – Disseny Insegur
- A05:2021 – Configuració de Seguretat Incorrecta
- Entitats Externes XML (XXE)
- A06:2021 – Components Vulnerables i Desactualitzats
- A07:2021 – Errors d'Identificació i Autenticació
- A08:2021 – Errors d'Integritat de Programari i Dades (Deserialització Insegura)
- A09:2021 – Errors de Registre i Monitorització
- A10:2021 – Server-Side Request Forgery (SSRF)
Mòdul 4: OWASP ASVS (Application Security Verification Standard)
Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)
Mòdul 6: OWASP ZAP (Zed Attack Proxy)
- Introducció a ZAP
- Instal·lació i Configuració
- Escaneig de Vulnerabilitats
- Automatització de Proves de Seguretat
Mòdul 7: Bones Pràctiques i Recomanacions
- Cicle de Vida de Desenvolupament Segur (SDLC)
- Modelatge d'Amenaces (Threat Modeling)
- Integració de Seguretat en DevOps (DevSecOps)
- Formació i Conscienciació en Seguretat
- Eines i Recursos Addicionals
Mòdul 8: Exercicis Pràctics i Casos d'Estudi
- Exercici 1: Identificació de Vulnerabilitats
- Exercici 2: Implementació de Controls de Seguretat
- Cas d'Estudi 1: Anàlisi d'un Incident de Seguretat
- Cas d'Estudi 2: Millora de la Seguretat en una Aplicació Web
