Revizuire de securitate
Această pagină reflectă revizuirea curentă de securitate a arhitecturii și folosește versiuni SVG statice ale diagramelor Mermaid din repository.
Rezumat executiv
Baza de cod are un nivel bun de securitate pentru o aplicație internă line-of-business.
- Secretele sunt încărcate din configurație, nu hardcodate.
- Frontendul emite acum explicit browser-security headers cu CSP și propagare pe bază de nonce pentru scripturi.
- Key Vault, Blob Storage și Azure SQL sunt în spatele unor private endpoints, cu acces public dezactivat.
- Microsoft Defender for Cloud este activ la nivel de subscription, iar Defender for Storage și Defender for SQL sunt active la nivelul storage account-ului și al bazei de date.
- Handler-ele pentru utilizatori cer acces autentificat, iar accesul la contracte și documente este legat de Azure user id-ul autentificat.
- Traseul de token cache are acum rate limiting dedicat, comparație constant-time pentru cheia API, propagare de corelare și audit append-only.
- Documentele încărcate sunt limitate prin extensie, MIME type și dimensiune, iar storage account-ul rulează malware scanning la upload cu file indexes activate.
Riscurile rămase sunt goluri de consolidare arhitecturală, nu defecte catastrofale evidente în codul runtime, iar principalul gol pe traseul de documente este lipsa unui flux fail-closed de promovare a fișierelor curate după verdictul de scanare.
Trust boundaries
Controalele de securitate se schimbă la fiecare hop, de la autentificarea browserului la marginea publică până la accesul pe private endpoints în interiorul graniței aplicației.
Controale observate în codebase
Identitate și autorizare
- Backendul aplică autentificare JWT bearer și construiește politica
ApiAccessdin valorile de scope configurate. - Handler-ele protejate cer această politică înainte să ruleze operațiile pe utilizatori, contracte sau documente.
- Ownershipul este rezolvat pe baza Azure user id-ului autentificat înainte de mutații sau descărcări.
Secrete și izolare de rețea
- AppHost proiectează configurația în procesele frontend și backend.
- Secretele de producție sunt stocate în Azure Key Vault, în spatele unui private endpoint.
- Workload-urile folosesc system-assigned managed identities cu privilegii minime.
- Backendul nu are ingress public, iar serviciile de date ale platformei rămân pe private endpoints.
Protecție platformă împotriva amenințărilor
- Microsoft Defender for Cloud este activ la nivel de subscription.
- Defender for Storage este activ pe storage account-ul de documente.
- Malware scanning la upload și file indexes sunt activate pe acel storage account.
- Defender for SQL este activ pe baza de date Azure SQL.
Auditabilitate și consolidare runtime
- Jurnalele de audit sunt păstrate cel puțin 30 de zile.
- Fluxurile token cache, provisioning și documente persistă rânduri append-only de audit cu date comune de corelare.
- Frontendul aplică HTTPS redirection, HSTS, CSP, referrer policy, frame controls, permissions policy și colectare de rapoarte CSP.
- OpenAPI și health endpoints rămân implicit instrumente de diagnostic doar pentru development.
Manipularea fișierelor
- Încărcările de fișiere sunt limitate la 50 MB și respinse când sunt goale.
- Extensiile și MIME type-urile permise sunt impuse.
- Path-urile Blob sunt construite din identificatori interni, nu din nume de fișiere furnizate de utilizator.
Constatări
Constatările rămase sunt goluri de consolidare arhitecturală, nu defecte catastrofale în sursa runtime.
1. Nu există protecție dedicată la edge în fața frontendului public
Severitate: Medie. Frontendul este singura poartă publică, dar nu există un strat WAF sau Front Door în fața lui. Asta lasă hostul aplicației responsabil pentru mai multă filtrare de cereri, mitigare de boți, control al ritmului traficului și controale perimetrale centralizate.
2. Identitatea apelantului pentru token cache se bazează încă pe o cheie API statică partajată
Severitate: Medie. Ingressul privat reduce expunerea, iar traseul are acum throttling și audit, dar orice workload intern compromis care obține cheia partajată poate acționa cu privilegii complete asupra token cache-ului. Acest model rămâne mai slab decât restul modelului bazat pe Entra.
3. Fișierele încărcate sunt scanate, dar promovarea fișierelor curate nu este încă impusă
Severitate: Medie. Defender for Storage face malware scanning la upload și are file indexes activate, dar aplicația nu trimite încă fișierele într-un path temporar și nu promovează doar fișierele curate după verdictul Defender. Sistemul nu are încă un pas fail-closed între upload și traseul normal de retragere a fișierelor.
4. Workload-urile păstrează încă acces outbound către destinații publice de internet
Severitate: Medie. Private endpoints și ingressul intern reduc expunerea inbound, dar accesul outbound nelimitat mărește în continuare blast radius-ul pentru compromisuri de workload, exfiltrare de date și defecte viitoare de tip SSRF.
Observații pozitive
- Revizuirea nu a identificat secrete hardcodate de producție, concatenări brute de SQL, acces anonim extins la endpointurile de contracte, path-uri Blob controlate de utilizator sau uploaduri nelimitate.
- Poziția de deployment confirmă acum dezactivarea accesului public pentru Key Vault, Blob Storage și Azure SQL, nu le mai tratează ca ipoteze.
- Defender for Cloud la nivel de subscription, împreună cu Defender for Storage și Defender for SQL, adaugă detecție de amenințări la nivel de platformă pentru deploymentul curent.
- Throttlingul dedicat, rândurile append-only de audit și propagarea correlation IDs au îmbunătățit semnificativ traseele interne privilegiate.
- Backendul nu este accesibil direct de pe internet, managed identity reduce răspândirea secretelor, iar jurnalele păstrate îmbunătățesc vizibilitatea forensică.
Puncte deschise de verificare
- Accesul outbound către internet este încă mai larg decât setul minim de dependențe necesare.
- Traseul de upload nu este încă fail-closed cu path temporar, flux Event Grid pentru verdict și worker de promovare a fișierelor curate.
- Verificarea autenticată end-to-end pentru fluxurile de provisioning și audit al documentelor rămâne condiționată de mediu.
- Politica CSP shadow mai beneficiază de observație în condiții apropiate de producție după schimbări de deployment.
Prioritizarea riscurilor
Roadmap recomandat de consolidare
Termen scurt
- Decideți dacă frontendul public are nevoie de un strat dedicat de edge protection sau de controale de ingress mai stricte.
- Implementați fluxul securizat de upload cu path Blob temporar, eveniment de verdict Defender și promovare a fișierelor curate în path-ul final.
- Adăugați vizibilitate pentru destinațiile outbound folosite de workload-uri.
- Extindeți verificarea autenticată end-to-end pentru fluxurile de provisioning și audit al documentelor când mediul necesar este disponibil.
Termen mediu
- Adăugați validare a semnăturii fișierelor.
- Adăugați raportare pentru verdicturile de scanare, eșecurile de promovare și fișierele respinse.
- Adăugați o pagină de raportare statistică pentru informații agregate despre contracte, documente și validări.
- Reduceți accesul outbound la un set aprobat de destinații atunci când designul platformei permite asta.
Termen lung
- Înlocuiți sau completați modelul de încredere bazat pe cheia partajată pentru token cache cu o abordare mai puternică de service identity.
- Reevaluați dacă livrarea documentelor ar trebui să folosească signed URLs cu durată limitată sau să rămână backend-streamed pe măsură ce scala crește.
- Adăugați o pagină de administrare pentru membri voluntari, protejată de un extra role claim, astfel încât utilizatorii cu privilegii ridicate să poată vedea fișiere, date agregate și să marcheze contractele ca valide sau invalide.