Ja tens les quatre primitives: xifratge simètric, xifratge asimètric, hash amb MAC, i signatura digital. La lliçó anterior va tancar anunciant una cosa incòmoda, i aquesta la desenvolupa: combinar primitives correctes no garanteix un sistema segur. L'assemblatge —l'ordre dels missatges, què s'autentica, què es negocia, què passa quan alguna cosa falla— té els seus propis modes de fallada, i la història de la criptografia aplicada és plena de protocols fets amb AES impecable i RSA impecable que es van trencar per com estaven muntats. Aquesta lliçó estudia el TLS que fa vuit lliçons que dones per suposat —complint la promesa del mòdul 2—, amb la seva encaixada pas a pas, com verificar-lo i com configurar-lo; i hi afegeix SSH, VPN, mTLS, el correu xifrat i els atacs clàssics contra protocols: downgrade, stripping, MITM i repetició.
Contingut
- Què és un protocol criptogràfic i per què pot fallar
- TLS: què protegeix i què no
- De SSL a TLS 1.3: què millora cada versió
- L'encaixada de TLS 1.3 pas a pas
- Suites de xifratge: com es llegeixen
- Verificar TLS des de la línia d'ordres
- Configuració segura del servidor de Nimbus
- mTLS: TLS mutu i quan té sentit
- Altres protocols: SSH, VPN, correu i xifratge extrem a extrem
- Atacs contra protocols i les seves defenses
- Errors d'implementació amb impacte real
- Què és un protocol criptogràfic i per què pot fallar
Un protocol criptogràfic és una seqüència acordada de missatges entre dues o més parts que, fent servir primitives criptogràfiques, aconsegueix un objectiu de seguretat concret: establir un canal confidencial, autenticar algú, acordar una clau, provar una possessió.
La diferència amb una primitiva és la mateixa que hi ha entre un maó i un edifici. Un maó s'assaja al laboratori i aguanta; un edifici cau pel disseny, no pel maó. Els modes de fallada típics d'un protocol són aquests, i cap no implica trencar l'àlgebra:
| Mode de fallada | En què consisteix | Exemple |
|---|---|---|
| No autenticar l'intercanvi | S'acorda una clau, però amb qui no toca | Diffie-Hellman sense certificat → MITM (03-03) |
| Negociació manipulable | L'atacant força l'opció més feble | Atacs de downgrade (apartat 10) |
| Manca de frescor | Un missatge vàlid antic es reenvia | Repetició del webhook sense marca de temps (03-04) |
| Filtrar informació en els errors | La resposta distingeix tipus de fallada | Oracle de farciment (03-02) |
| Confondre l'ordre d'operacions | Autenticar i xifrar mal combinats | MAC-then-encrypt davant d'AEAD |
| Estats no previstos | Missatges fora de seqüència o repetits | Fallades de màquina d'estats en implementacions de TLS |
D'aquí la regla de l'apartat, coherent amb tot el mòdul: els protocols tampoc no es dissenyen ni s'implementen a mà. Es fan servir protocols estàndard, amb implementacions madures, actualitzades i ben configurades. La teva feina professional és triar la versió correcta, configurar-la bé i verificar que efectivament fa el que creus.
- TLS: què protegeix i què no
TLS (Transport Layer Security) és el protocol que converteix HTTP en HTTPS, i també protegeix SMTP, IMAP, connexions a bases de dades i pràcticament qualsevol cosa que viatgi per una xarxa avui. És l'exemple perfecte de xifratge híbrid (03-03) portat a producció.
| TLS sí que protegeix | TLS no protegeix |
|---|---|
| Confidencialitat del contingut en trànsit | Les dades un cop arriben al servidor |
| Integritat: detecta modificació pel camí | Davant d'un servidor compromès o maliciós |
| Autenticitat del servidor mitjançant el seu certificat | El nom de domini al qual et connectes (viatja visible al DNS i, tret d'amb ECH, al SNI) |
| Forward secrecy amb ECDHE | Metadades: qui parla amb qui, quan i quant |
| Confidencialitat davant de la xarxa intermèdia | Davant d'un client compromès (mòbil amb programari maliciós) |
Dues conseqüències pràctiques que convé dir en veu alta:
- «Va per HTTPS» no significa «és segur». L'IDOR de 01-01, la injecció SQL de 02-02 i la fuita del bucket de 02-06 passarien igual sobre TLS impecable. TLS protegeix el tram, no l'aplicació.
- El cadenat del navegador no acredita honestedat. Acredita que parles amb el domini que hi ha a la barra. Un web de phishing amb domini
nimbus-reservas-clientes.exampletindrà el seu cadenat perfecte (02-03).
- De SSL a TLS 1.3: què millora cada versió
| Versió | Any | Estat el 2026 | Nota |
|---|---|---|---|
| SSL 2.0 / 3.0 | 1995/1996 | Prohibits | Trencats (POODLE i altres) |
| TLS 1.0 | 1999 | Obsolet | Retirat pels navegadors i per PCI DSS |
| TLS 1.1 | 2006 | Obsolet | Retirat juntament amb 1.0 |
| TLS 1.2 | 2008 | Acceptable si es restringeixen les suites | Encara necessari per a clients antics |
| TLS 1.3 | 2018 | Recomanat | El que ha de fer servir Nimbus per defecte |
Què millora TLS 1.3, que és el que cal saber explicar:
- Menys voltes. L'encaixada es completa en 1-RTT (una anada i tornada) davant de les dues de TLS 1.2. Es nota en latència, especialment des del mòbil.
- Suites reduïdes i sense peces trencades. Es van eliminar de l'estàndard RC4, 3DES, MD5, SHA-1, la compressió, la renegociació i els modes CBC amb MAC-then-encrypt. Només queden suites AEAD (03-02).
- Forward secrecy obligatòria. Desapareix l'intercanvi de clau per RSA estàtic: tot és ECDHE (03-03). Ja no ho pots configurar malament, perquè l'opció dolenta no existeix.
- Més part de l'encaixada va xifrada, inclòs el certificat del servidor, cosa que redueix el que un observador aprèn.
- Menys marge per a errors de configuració. És la millora més subestimada: TLS 1.3 és segur per defecte, mentre que TLS 1.2 exigeix que l'administrador encerti amb la llista de suites.
Hi ha un matís que convé conèixer: TLS 1.3 permet represa en 0-RTT, que envia dades al primer missatge. És ràpid, però aquestes dades són susceptibles de repetició, així que només s'ha de fer servir per a peticions idempotents. Per a l'API de Nimbus, la recomanació és no habilitar 0-RTT.
- L'encaixada de TLS 1.3 pas a pas
sequenceDiagram
participant C as Client (app movil)
participant S as Servidor (API Nimbus)
C->>S: ClientHello<br/>versions, suites AEAD,<br/>clau publica efimera (ECDHE),<br/>SNI = api.nimbusreservas.example
S->>S: Genera el seu parell efimer<br/>i calcula el secret compartit
S->>C: ServerHello<br/>suite triada + clau publica efimera
Note over C,S: A partir d aqui TOT va xifrat
S->>C: {Certificat + cadena}<br/>{CertificateVerify: signatura amb la clau privada}<br/>{Finished}
C->>C: Valida la cadena, el nom,<br/>la vigencia i la signatura
C->>S: {Finished}
Note over C,S: Canal establert: AES-GCM o ChaCha20-Poly1305
Els cinc moments, amb el que aporta cadascun:
- ClientHello. El client proposa versions i suites i —clau per al 1-RTT— ja envia la seva clau pública efímera, avançant l'intercanvi ECDHE. Inclou el SNI, el nom del servidor al qual es vol connectar, necessari perquè una mateixa IP allotja molts dominis.
- ServerHello. El servidor tria la suite i envia la seva clau pública efímera. Amb les dues meitats, tots dos calculen el mateix secret compartit (03-03) i en deriven les claus de sessió mitjançant HKDF (03-02). Aquí entra ECDHE i aquí neix la forward secrecy.
- A partir d'aquest punt tot va xifrat, inclòs el certificat.
- Certificat i CertificateVerify. El servidor envia el seu certificat i la seva cadena, i signa amb la seva clau privada un resum de tota l'encaixada. Això és el que autentica l'intercanvi i tanca la porta al MITM de 03-03: l'atacant pot fer el seu propi ECDHE, però no pot produir aquella signatura sense la clau privada corresponent al certificat. El client valida la cadena fins a una arrel de confiança, el nom del domini, la vigència i la signatura —el que s'emet i com es valida és matèria de 03-06—.
- Finished en tots dos sentits. Cada extrem demostra que ha vist exactament els mateixos missatges. Això és el que detecta un downgrade: si un atacant hagués alterat el
ClientHelloper forçar una suite feble, el resum no quadraria.
A partir d'aquí, el trànsit es xifra amb AES-GCM o ChaCha20-Poly1305 i claus simètriques. És exactament el patró híbrid de 03-03: l'asimètric només per acordar i autenticar, el simètric per a les dades.
- Suites de xifratge: com es llegeixen
Una suite de xifratge és la combinació concreta d'algorismes que es fa servir en una sessió. En TLS 1.2 el nom inclou quatre peces:
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
| | | |
| | | +-- funcio hash per a derivacio i MAC
| | +-- xifratge de les dades: AES-256 en mode GCM (AEAD)
| +-- autenticacio del servidor: signatura RSA (del certificat)
+-- intercanvi de claus: ECDHE (efimer -> forward secrecy)En TLS 1.3 els noms són molt més curts, perquè l'intercanvi i l'autenticació ja no es negocien a la suite:
Com avaluar una suite d'un cop d'ull: si l'intercanvi no comença per ECDHE (o DHE), no hi ha forward secrecy; si el xifratge és CBC, RC4 o 3DES, queda fora; si el hash és MD5 o SHA (per SHA-1), queda fora. Les tres suites de TLS 1.3 són totes correctes, que és precisament l'avantatge d'aquella versió.
- Verificar TLS des de la línia d'ordres
Saber llegir l'estat real d'un servidor és una habilitat operativa bàsica. La Lucía comprova l'API de Nimbus:
# Connexio completa: mostra certificat, cadena, versio i suite
openssl s_client -connect api.nimbusreservas.example:443 \
-servername api.nimbusreservas.example </dev/null 2>/dev/null | head -40
# Comprovar si el servidor ACCEPTA una versio obsoleta (ha de FALLAR)
openssl s_client -connect api.nimbusreservas.example:443 -tls1_1 </dev/null
# Veure nomes dates de validesa del certificat
echo | openssl s_client -connect api.nimbusreservas.example:443 \
-servername api.nimbusreservas.example 2>/dev/null \
| openssl x509 -noout -dates -subject -issuerSortida comentada de la primera ordre:
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R11
verify return:1
depth=0 CN = api.nimbusreservas.example
verify return:1
---
Certificate chain
0 s:CN = api.nimbusreservas.example
i:C = US, O = Let's Encrypt, CN = R11
1 s:C = US, O = Let's Encrypt, CN = R11
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
---
SSL handshake has read 4521 bytes and written 396 bytes
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
Verify return code: 0 (ok)Com es llegeix aquesta sortida, que és l'important:
depth=2,depth=1,depth=0són els tres graons de la cadena: arrel, intermèdia i certificat del servidor.verify return:1a cadascun significa que aquell graó va validar.Certificate chainmostra, per a cada certificat, el seu subjecte (s:) i el seu emissor (i:). Fixa't en l'encadenament: l'emissor d'un és el subjecte del següent. La jerarquia completa és matèria de 03-06.New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384és la línia que resumeix el resultat: versió negociada i suite. Si aquí apareguésTLSv1.0o una suite amb CBC, hi hauria troballa.Server public key is 256 bitindica una clau ECC de 256 bits (equivalent a RSA-3072, taula de 03-03). Si digués 2048, seria RSA.Verify return code: 0 (ok)és la validació completa. Qualsevol altre valor —10caducat,18autosignat,19arrel no fiable,21no s'ha pogut verificar— és un problema.- Les opcions:
-servernameenvia el SNI, imprescindible quan la IP allotja diversos dominis; sense ell pots estar veient un certificat que no és el teu.</dev/nulltanca l'entrada perquè l'ordre no es quedi esperant.
I la comprovació d'HSTS, que es fa sobre les capçaleres HTTP:
- Configuració segura del servidor de Nimbus
Fragment de configuració de Nginx per al frontal de Nimbus, explicat directiva a directiva:
server {
listen 443 ssl;
http2 on;
server_name api.nimbusreservas.example;
ssl_certificate /etc/letsencrypt/live/nimbus/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nimbus/privkey.pem;
# 1. Nomes versions vigents
ssl_protocols TLSv1.2 TLSv1.3;
# 2. Suites permeses en TLS 1.2 (en 1.3 les fixa el mateix protocol)
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
# 3. Corbes per a l intercanvi efimer
ssl_ecdh_curve X25519:prime256v1;
# 4. Represa de sessio, sense 0-RTT
ssl_session_cache shared:TLS:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_early_data off;
# 5. Grapat OCSP
ssl_stapling on;
ssl_stapling_verify on;
resolver 1.1.1.1 9.9.9.9 valid=300s;
# 6. HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
}
# 7. Redireccio permanent d HTTP a HTTPS
server {
listen 80;
server_name api.nimbusreservas.example;
return 301 https://$host$request_uri;
}Què fa cada bloc:
ssl_protocols TLSv1.2 TLSv1.3. Deshabilita SSL i TLS 1.0/1.1. Si tota la teva base de clients és moderna, deixar nomésTLSv1.3encara és millor; mesura-ho abans amb els registres d'accés.ssl_ciphers. Només suites ECDHE (forward secrecy) amb AEAD.ssl_prefer_server_ciphers offés el recomanat avui: es deixa triar al client dins de la llista permesa, perquè un mòbil sense acceleració AES triarà ChaCha20 i anirà més ràpid amb la mateixa seguretat.ssl_ecdh_curve X25519:prime256v1. Prioritza X25519 (03-03), més ràpida i més difícil d'implementar malament.- Represa. La memòria cau accelera reconnexions.
ssl_session_tickets offevita el risc que una clau de tiquets mal rotada anul·li la forward secrecy;ssl_early_data offdesactiva 0-RTT pel risc de repetició. - Grapat OCSP. El servidor adjunta a l'encaixada una prova recent que el seu certificat no està revocat, en lloc d'obligar el client a consultar-la. Millora privacitat i latència; el mecanisme de revocació s'estudia a 03-06.
- HSTS.
max-age=63072000(dos anys) indica al navegador que només faci servir HTTPS per a aquest domini;includeSubDomainsho estén a tots els subdominis ipreloadpermet incloure'l a la llista precarregada dels navegadors. És la defensa contra l'stripping de l'apartat 10. Compte:includeSubDomainsipreloadsón difícils de revertir; verifica abans que tots els subdominis serveixen HTTPS. - Redirecció 301 d'HTTP a HTTPS. Necessària, però no suficient: la primera petició continua viatjant en clar. Per això cal HSTS.
Verifica sempre el resultat amb un analitzador extern de configuració TLS i amb les ordres de l'apartat 6: la configuració escrita i l'efectiva no sempre coincideixen, sobretot amb balancejadors o CDN al davant.
- mTLS: TLS mutu i quan té sentit
En TLS normal només s'autentica el servidor; el client s'identifica després, dins del canal, amb una contrasenya o un token. En mTLS (mutual TLS), tots dos extrems presenten certificat i tots dos s'autentiquen durant la mateixa encaixada.
| Escenari a Nimbus | mTLS? | Motiu |
|---|---|---|
| App mòbil i SPA de clients finals | No | Milers de dispositius: distribuir i rotar certificats és inviable. Fes servir OIDC i tokens (02-05) |
| Comunicació amb la passarel·la de pagament | Sí, si el proveïdor l'ofereix | Pocs extrems, alt valor, requisit habitual del sector |
| Entre serveis interns (API ↔ treballadors en segon pla) | Sí, recomanable | Materialitza el Zero Trust de 01-03: cada servei prova la seva identitat a cada connexió |
| Accés de la consultora (A-19) | Convé, juntament amb MFA i accés just-in-time | Reforça el control del tercer que va originar l'incident de 02-06 |
El que aporta: l'autenticació passa abans que l'aplicació processi res, així que un atacant sense certificat vàlid ni tan sols arriba a la lògica de negoci. El que costa: cal emetre, distribuir, renovar i revocar un certificat per client, cosa que exigeix una PKI interna —l'assumpte de 03-06—. La regla pràctica: mTLS entre pocs sistemes d'alt valor, tokens per a molts usuaris.
- Altres protocols: SSH, VPN, correu i xifratge extrem a extrem
| Protocol | Què garanteix | Ús a Nimbus |
|---|---|---|
| SSH | Canal xifrat i autenticat per a administració remota | Accés de la Lucía als servidors |
| IPsec | Xifratge a nivell de xarxa, estàndard i madur, configuració complexa | VPN de lloc a lloc |
| WireGuard | Xifratge modern, codi petit, molt ràpid, sense opcions per triar malament | VPN d'accés remot |
| S/MIME | Signatura i xifratge de correu amb certificats d'una CA | Correu corporatiu amb requisits formals |
| PGP/GPG | Signatura i xifratge de correu i fitxers, amb xarxa de confiança | Intercanvis puntuals; usable però incòmode |
| Signal Protocol | Xifratge extrem a extrem amb forward secrecy per missatge | Missatgeria; concepte de referència per a E2EE |
| RFC 3161 (segellat de temps) | Prova que una dada existia en una data | Segellar registres d'auditoria |
SSH mereix un detall, perquè el seu model de confiança és diferent del de TLS: no hi ha autoritats de certificació, sinó una empremta del host que el client memoritza la primera vegada (trust on first use).
# Generar una clau Ed25519 per a la Lucia (03-03)
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_nimbus
# Veure l empremta de la clau publica
ssh-keygen -lf ~/.ssh/id_ed25519_nimbus.pub
# Obtenir l empremta del servidor ABANS de connectar-s hi per primera vegada,
# per un canal diferent (panell del proveidor, documentacio interna)
ssh-keyscan -t ed25519 bastion.nimbusreservas.example | ssh-keygen -lf -256 SHA256:aQ2vR7xK0mN3pLdT9wYcF1uZgB8sEjH5rXo4VnQiM2k [email protected] (ED25519)
256 SHA256:7fJkP0sWqL9mR2xN4dV6yTgB1cZuH8eA3oXiK5vQnE0 bastion.nimbusreservas.example (ED25519)L'essencial: quan SSH avisa que la clau del host ha canviat o és desconeguda, acceptar-ho a cegues equival a acceptar un possible MITM. L'empremta s'ha de comparar amb l'obtinguda per un altre canal. I per a un parc com el de Nimbus, la solució que escala és signar les claus de host amb una CA d'SSH, cosa que substitueix la memorització per una confiança jeràrquica (03-06). A més: autenticació només per clau —PasswordAuthentication no—, clau protegida amb frase de pas i root sense accés directe; l'enduriment complet del servidor és de 05-06.
Sobre les VPN, aquí només interessa què garanteixen: un túnel xifrat i autenticat entre dos punts. No donen control d'accés a les aplicacions ni converteixen en fiable el que hi ha a dins. El desplegament de xarxa es tracta a 05-04.
I el xifratge extrem a extrem com a concepte: les dades es xifren al dispositiu de l'emissor i només es desxifren al del destinatari, de manera que ni el proveïdor del servei no les pot llegir. És la diferència amb TLS, on el servidor sí que veu el contingut. Per a Nimbus, un E2EE complet seria incompatible amb la seva funció —l'aplicació necessita processar les cites—, però el concepte reapareix a 03-07 en parlar del xifratge a nivell de camp.
- Atacs contra protocols i les seves defenses
| Atac | Com funciona | Defensa |
|---|---|---|
| Downgrade | Es manipula la negociació per forçar una versió o suite feble | Deshabilitar versions antigues; el Finished de TLS 1.3 detecta la manipulació |
| SSL stripping | L'atacant intercepta la petició HTTP inicial i serveix tot per HTTP, sense que l'usuari ho noti | HSTS (millor amb preload), redirecció 301, galetes amb Secure |
| MITM amb certificat fals | L'atacant presenta un certificat propi; només funciona si el client no valida o si una CA el va emetre indegudament | Validació estricta, pinning, transparència de certificats (03-06) |
| Repetició | Es reenvia un missatge legítim capturat | Nonces, marques de temps, finestres, comptadors, idempotència |
| Oracle de farciment | Es desxifra observant com respon el servidor a farciments no vàlids | AEAD; TLS 1.3 l'elimina per disseny |
| Compressió (CRIME/BREACH) | La mida comprimida filtra informació del secret | Sense compressió TLS; compte amb la compressió a nivell d'aplicació |
Dos mereixen desenvolupament:
L'stripping és l'atac més rendible contra un usuari en una wifi pública, i no trenca TLS: l'esquiva. La víctima escriu nimbusreservas.example sense https://, el navegador prova HTTP, i l'atacant intercepta aquella petició inicial i actua de proxy en clar cap a l'usuari mentre parla en HTTPS amb el servidor real. HSTS ho talla perquè el navegador, després de la primera visita legítima, es nega a fer servir HTTP per a aquell domini. I preload tanca també aquella primera visita, en venir la regla de fàbrica al navegador.
El pinning consisteix que el client exigeixi no només un certificat vàlid, sinó un de concret (o una CA concreta). Serveix contra l'escenari d'una CA que emet un certificat indegut per al teu domini. Té un risc seriós: si es rota el certificat sense actualitzar el pin, l'aplicació deixa de funcionar i només s'arregla publicant una versió nova. Recomanació per a Nimbus: valorar-ho a l'app mòbil —on el cicle d'actualització és controlable i el pin pot apuntar a la CA, no a la fulla—, i no al navegador. Per a la resta, la transparència de certificats (03-06) cobreix el mateix risc amb molt menys cost operatiu.
- Errors d'implementació amb impacte real
El protocol pot ser impecable i la implementació anul·lar-lo. L'exemple canònic, ja citat a 02-02:
# =============== INCORRECTE — NO FER SERVIR MAI ===============
import requests
# "No em funcionava per un error de certificat i aixi ja va"
r = requests.get("https://api.pasarela-pago.example/v1/cobros",
verify=False) # <-- DESACTIVA TOTA LA VALIDACIO
# ==============================================================Què significa exactament aquella línia: la connexió continua xifrada, però s'accepta qualsevol certificat, inclòs el d'un atacant. És a dir, es conserva el cost de TLS i se'n perd per complet la garantia, perquè sense autenticar l'altre extrem el xifratge protegeix una conversa amb qui sigui. És el MITM de 03-03 servit en safata, i en aquest cas concret exposaria el trànsit amb la passarel·la de pagament.
La versió correcta, amb les tres situacions que solen provocar la drecera:
import requests
# 1. CAS NORMAL: la validacio esta activada per defecte. No toquis res.
r = requests.get("https://api.pasarela-pago.example/v1/cobros",
timeout=10)
# 2. CA INTERNA (serveis interns de Nimbus amb PKI propia, 03-06):
# s indica el certificat arrel de confianca, NO es desactiva la validacio.
r = requests.get("https://interno.nimbus.local/metricas",
verify="/etc/nimbus/ca-interna.pem", timeout=10)
# 3. mTLS (apartat 8): certificat de client a mes de validar el servidor.
r = requests.get("https://api.pasarela-pago.example/v1/cobros",
cert=("/etc/nimbus/cliente.pem", "/etc/nimbus/cliente.key"),
timeout=10)Altres errors del mateix grup, tots habituals i tots igual de greus:
| Error | Conseqüència |
|---|---|
| Validar la signatura del certificat però no el nom del domini | Qualsevol certificat vàlid de qualsevol domini serveix |
| No comprovar la caducitat o ignorar la revocació | S'accepta un certificat retirat |
| Capturar l'excepció de validació i reintentar sense validar | La fallada es converteix en una vulnerabilitat silenciosa |
| Confiar en una CA afegida al magatzem del sistema per depurar i oblidar-la | Porta del darrere permanent |
Posar el verify=False només en desenvolupament… i que el codi arribi a producció |
Passa constantment |
La defensa organitzativa és la de sempre: una comprovació al CI (02-04) que rebutgi verify=False, InsecureSkipVerify, rejectUnauthorized: false i curl -k, i revisió obligatòria entre dues persones per a qualsevol excepció justificada, amb data de caducitat i tiquet associat.
Errors Comuns i Consells
Conceptuals
- Creure que HTTPS fa segura l'aplicació. Protegeix el tram, no la lògica.
- Prendre el cadenat per una acreditació d'honestedat. Acredita el domini, res més.
- Pensar que una VPN substitueix el control d'accés. Dona un túnel; dins del túnel encara cal autoritzar.
- Suposar que el certificat es renova sol perquè «el vam posar amb Let's Encrypt». La renovació automàtica també es trenca, i cal monitorar-la (03-06).
De configuració
- Deixar habilitats TLS 1.0/1.1 o suites amb CBC, RC4 o 3DES.
- Redirigir a HTTPS sense HSTS. La primera petició continua viatjant en clar.
- Activar
includeSubDomainsipreloadsense comprovar tots els subdominis. Difícil de revertir; pot deixar serveis inaccessibles. - Habilitar 0-RTT sense analitzar la repetició.
- No verificar la configuració efectiva quan hi ha CDN o balancejador al davant: el que serveix el frontal pot no ser el que vas configurar.
D'implementació
verify=Falsei equivalents. L'error canònic.- Validar la cadena però no el nom del host.
- Acceptar a cegues una empremta SSH nova o canviada.
- Fixar un pin de certificat sense pla de rotació. Converteix una renovació rutinària en una caiguda.
Consells
- Configura TLS 1.3 per defecte, deixa 1.2 només amb suites ECDHE-AEAD si tens clients antics, i revisa aquesta decisió amb dades dels teus registres cada sis mesos.
- Monitora la data de caducitat de cada certificat amb alerta a 30 i a 7 dies. Un certificat caducat és una incidència de disponibilitat, i a Equifax (02-06) va encegar a més la detecció.
- Automatitza la verificació: una comprovació programada que executi
openssl s_clientcontra els teus dominis i alerti si canvien la versió, la suite o l'empremta del certificat. - Recorda la jerarquia de responsabilitat: el protocol el trien els estàndards, la versió i la configuració les tries tu, i la validació la respecta el teu codi. Els tres han d'estar bé.
Exercicis
Exercici 1 — Llegir un diagnòstic de TLS
La Lucía executa openssl s_client contra un servei intern i obté:
depth=0 CN = interno.nimbus.local
verify error:num=18:self signed certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
Verify return code: 18 (self signed certificate)Es demana: (a) enumera tots els problemes que revela aquesta sortida i ordena'ls per gravetat; (b) explica quina garantia concreta es perd amb cadascun; (c) indica si el certificat autosignat és sempre una fallada o pot ser acceptable, i sota quines condicions; (d) proposa la configuració objectiu per a aquest servei intern.
Exercici 2 — Dissenyar la protecció del canal amb la passarel·la
Nimbus integra una nova passarel·la de pagament. El proveïdor ofereix: TLS 1.2 o 1.3, mTLS opcional, signatura HMAC dels webhooks i una llista blanca d'IP.
Es demana: (a) decideix quins mecanismes activar i en quina direcció actua cadascun (Nimbus→passarel·la, passarel·la→Nimbus); (b) explica quina amenaça concreta atura cada mecanisme i quins se superposen; (c) indica què passa si la clau privada del certificat de client de Nimbus es filtra, i què ha de passar aleshores; (d) raona si la llista blanca d'IP és un control criptogràfic i quin valor real aporta.
Exercici 3 — Explicar HSTS i l'stripping
El Rubén pregunta per què, si el web de Nimbus «redirigeix sol a HTTPS», cal configurar res més.
Es demana: (a) descriu pas a pas un atac d'stripping contra un client de Nimbus a la wifi d'una cafeteria; (b) explica per què la redirecció 301 no l'impedeix; (c) explica què fa HSTS i què hi afegeix preload; (d) indica els dos riscos operatius d'includeSubDomains i preload i com es mitiguen abans d'activar-los.
Solucions
Exercici 1
(a) i (b) Problemes per gravetat:
| Gravetat | Problema | Garantia que es perd |
|---|---|---|
| Alta | Certificat autosignat (code 18): no l'avala cap CA de confiança |
Autenticació del servidor. Sense ella, el canal està xifrat amb qui sigui: MITM possible |
| Mitjana | Suite AES256-SHA384 sense GCM: és CBC amb MAC-then-encrypt |
Integritat robusta i resistència a oracles de farciment. No és AEAD |
| Mitjana | TLS 1.2 en lloc d'1.3 | Encaixada amb més superfície, negociació configurable, més marge d'error |
| Baixa | Clau RSA de 2048 bits | Res urgent (~112 bits), però per sota de la recomanació de 128; migrar a ECC P-256 o RSA-3072 |
(c) És sempre una fallada? No necessàriament. Per a un servei intern, l'inacceptable no és que el certificat no el signi una CA pública, sinó que no el signi res en què el client confiï explícitament. És acceptable si existeix una CA interna el certificat arrel de la qual està instal·lat als clients i aquests el validen de debò (verify="/ruta/ca-interna.pem", apartat 11). El que no és mai acceptable és la combinació habitual: certificat autosignat més verify=False als clients, que és xifratge sense autenticació.
(d) Configuració objectiu: certificat emès per la CA interna de Nimbus (03-06), amb SAN correcte per a interno.nimbus.local; només TLS 1.3, en ser tots els clients propis; clau ECDSA P-256 o Ed25519; validació estricta a tots els clients contra l'arrel interna; i, com que és comunicació entre serveis, mTLS (apartat 8), amb renovació automatitzada i alerta de caducitat.
Exercici 2
(a) i (b) Mecanismes:
| Mecanisme | Direcció | Amenaça que atura |
|---|---|---|
| TLS 1.3 amb validació estricta | Nimbus → passarel·la | Interceptació i MITM del trànsit de cobraments. Imprescindible |
| mTLS | Nimbus → passarel·la | Que un tercer amb credencials robades invoqui l'API de la passarel·la en nom de Nimbus. Afegeix autenticació abans de l'aplicació |
| HMAC al webhook | Passarel·la → Nimbus | Notificacions de pagament falsificades per qui descobreixi l'URL (03-04). Imprescindible |
| Llista blanca d'IP | Totes dues | Redueix la superfície: només s'accepten connexions des de rangs coneguts |
Superposicions. mTLS i llista blanca se superposen parcialment en la direcció Nimbus→passarel·la, però actuen en capes diferents (identitat criptogràfica davant d'origen de xarxa) i són complementaris en defensa en profunditat (01-03). TLS i HMAC no se superposen: TLS protegeix el canal, HMAC protegeix el missatge, i encara cal HMAC encara que el webhook arribi per HTTPS, perquè HTTPS acredita el canal, no qui va compondre el contingut.
(c) Si es filtra la clau privada del certificat de client: un atacant podria autenticar-se davant de la passarel·la com a Nimbus. Cal revocar el certificat immediatament, emetre'n un de nou amb una clau nova, desplegar-lo, notificar-ho al proveïdor, revisar els registres de la passarel·la a la recerca d'operacions no reconegudes i executar l'anàlisi de causa arrel (per què la clau era accessible). El cicle de vida complet, a 03-06.
(d) La llista blanca d'IP no és un control criptogràfic: no aporta confidencialitat, integritat ni autenticitat demostrable, i l'adreça d'origen és suplantable en alguns escenaris. El seu valor real és reduir la superfície d'atac (01-04) i filtrar soroll automatitzat. És un control útil i barat, però mai no pot substituir TLS ni l'HMAC.
Exercici 3
(a) L'atac, pas a pas. (1) El client es connecta a la wifi de la cafeteria, on l'atacant controla el punt d'accés o fa enverinament ARP. (2) Escriu nimbusreservas.example al navegador, sense https://. (3) El navegador emet una petició HTTP en clar. (4) L'atacant la intercepta i no la deixa arribar; en lloc d'això estableix ell una connexió HTTPS legítima amb Nimbus i serveix a l'usuari el mateix contingut per HTTP. (5) L'usuari veu el web correcte, sense cadenat —pocs se'l miren— i introdueix les seves credencials. (6) L'atacant les llegeix en clar i les reenvia a Nimbus, que veu una sessió perfectament normal.
(b) Per què la redirecció 301 no basta. La redirecció l'envia el servidor, i en aquest atac la petició inicial no arriba mai al servidor: la intercepta l'atacant, que simplement no redirigeix. La redirecció només actua quan el trànsit arriba a Nimbus; l'atac viu precisament al tram anterior.
(c) Què fa HSTS. La capçalera Strict-Transport-Security indica al navegador que, durant max-age segons, ha de fer servir HTTPS obligatòriament per a aquell domini, convertint internament qualsevol http:// en https:// abans d'enviar res per la xarxa. Després d'una sola visita legítima, l'stripping deixa de funcionar. preload va més enllà: el domini s'inscriu en una llista que els navegadors porten de fàbrica, de manera que la regla s'aplica fins i tot a la primera visita, cobrint l'únic forat que quedava.
(d) Els dos riscos operatius. (1) includeSubDomains obliga a HTTPS a tots els subdominis, presents i futurs; si algun —un web intern, un entorn de proves, un panell antic— només serveix HTTP, deixarà de ser accessible des dels navegadors que hagin vist la capçalera. (2) preload és molt difícil de revertir: la retirada de la llista triga mesos a propagar-se amb les versions dels navegadors, així que un error s'arrossega molt de temps. Mitigació: inventariar tots els subdominis i comprovar que serveixen HTTPS vàlid; desplegar primer amb un max-age curt (per exemple, 300 segons) i sense preload; verificar durant unes setmanes; i només aleshores pujar a dos anys i sol·licitar la inscripció.
Conclusió
Has fet el salt de les peces a l'assemblatge, i amb ell una idea que convé no oblidar: combinar primitives correctes no basta, perquè un protocol falla per no autenticar l'intercanvi, per una negociació manipulable, per manca de frescor, per filtrar informació en els errors o per estats no previstos —cap d'aquestes fallades no requereix trencar l'àlgebra—. D'aquí l'extensió natural de la regla del mòdul: els protocols tampoc no es dissenyen a mà; es trien, es configuren i es verifiquen.
I has saldat el deute pendent des del mòdul 2. Saps què protegeix TLS —confidencialitat, integritat, autenticitat del servidor i forward secrecy al tram— i què no: l'aplicació, les metadades, el servidor compromès i el client infectat. Coneixes l'evolució fins a TLS 1.3 i les seves cinc millores, sent la més important la que menys es cita: que és segur per defecte, perquè les opcions dolentes ja no existeixen. Has recorregut l'encaixada pas a pas veient exactament on entra ECDHE —i amb ell la forward secrecy—, on entra el certificat amb el seu CertificateVerify, que és el que tanca la porta al MITM, i on comença el xifratge simètric AEAD; saps llegir una suite i descartar d'un cop d'ull les que no porten ECDHE o porten CBC. Ho has verificat a la pràctica amb openssl s_client interpretant depth, cadena, versió, suite i Verify return code, i amb curl -I per a HSTS; i has configurat el frontal de Nimbus directiva a directiva: versions, suites, corbes, represa sense 0-RTT, grapat OCSP, HSTS i redirecció. Hi afegeixes mTLS per a pocs sistemes d'alt valor, la panoràmica d'SSH amb la seva confiança a la primera connexió i l'empremta que mai no s'accepta a cegues, IPsec i WireGuard, S/MIME i PGP, l'E2EE com a concepte i el segellat de temps. Tanques amb els atacs clàssics —downgrade, stripping amb HSTS com a resposta, MITM amb certificat fals i el paper real i els riscos del pinning, repetició, oracle de farciment i compressió— i amb l'error d'implementació canònic, el verify=False, que conserva íntegre el cost de TLS i n'anul·la per complet la garantia.
Però fixa't en quantes vegades has hagut d'ajornar la mateixa resposta. Com sap el client que aquell certificat és de Nimbus? Qui el va emetre i amb quina garantia? Què passa quan la clau es filtra o el certificat caduca? Com es munta la CA interna que necessiten l'mTLS i els serveis interns? Tota la seguretat d'aquest capítol descansa sobre la validació d'un certificat, i encara no hem obert aquella caixa.
A Gestió de Claus, Certificats i PKI (03-06) entrem en el que el mòdul 2 va anunciar com «el problema realment difícil», i la tesi és contundent: els algorismes gairebé mai no fallen; la gestió de claus sí. Veuràs el cicle de vida complet d'una clau, on ha de viure —de la variable d'entorn a l'HSM—, per què esborrar el commit del .env filtrat en l'incident de 02-06 no basta, com es rota sense tallar el servei, què conté exactament un certificat X.509, com funciona la cadena de confiança, què garanteixen les CA, com s'emet amb ACME, com es revoca i com la transparència de certificats permet a Nimbus detectar un certificat emès indegudament per al seu domini.
Curs de Fonaments de Seguretat Informàtica
Mòdul 1: Introducció a la Seguretat Informàtica
- Conceptes Bàsics de Seguretat Informàtica
- Tipus d'Amenaces i Vulnerabilitats
- Principis de la Seguretat Informàtica
- Actius, Superfície d'Atac i Actors d'Amenaça
Mòdul 2: Ciberseguretat
- Definició i Abast de la Ciberseguretat
- Tipus d'Atacs Cibernètics
- Enginyeria Social i Pesca de Credencials
- Mesures de Protecció en Ciberseguretat
- Identitat, Autenticació i Control d'Accés
- Casos d'Estudi d'Incidents de Ciberseguretat
Mòdul 3: Criptografia
- Introducció a la Criptografia
- Criptografia Simètrica
- Criptografia Asimètrica
- Funcions Hash, HMAC i Emmagatzematge de Contrasenyes
- Protocols Criptogràfics
- Gestió de Claus, Certificats i PKI
- Aplicacions de la Criptografia
Mòdul 4: Gestió de Riscos i Mesures de Protecció
- Avaluació de Riscos
- Polítiques de Seguretat
- Controls de Seguretat
- Risc de Tercers i Cadena de Subministrament
- Pla de Resposta a Incidents
- Recuperació davant Desastres i Continuïtat de Negoci
Mòdul 5: Eines i Tècniques de Seguretat
- Eines d'Anàlisi de Vulnerabilitats
- Tècniques de Monitoratge i Detecció
- Proves de Penetració
- Seguretat en Xarxes
- Seguretat en Aplicacions
- Enfortiment de Sistemes i Seguretat de l'Endpoint
- Seguretat al Núvol i en Contenidors
Mòdul 6: Bones Pràctiques i Normatives
- Bones Pràctiques en Seguretat Informàtica
- Normatives i Estàndards de Seguretat
- Protecció de Dades Personals i RGPD a la Pràctica
- Compliment i Auditoria
- Formació i Sensibilització
- Ètica, Aspectes Legals i Divulgació Responsable
