"Secure Software Design and Coding"
Durata: 2 gg
Il corso si basa sui concetti di sicurezza nella progettazione, realizzazione e gestione del software, basandosi sui contenuti del CBK (Common Body of Knowledge) per la Sicurezza Applicativa elaborato da ISC2. Le linee guida sono indipendenti dalla particolare tecnologia, tuttavia il corso presenta anche alcune delle principali vulnerabilità tecnologiche presenti in software realizzati utilizzando Java/.NET, JavaScript e tecnologie Web, facendo riferimento alla classifica Top 10 OWASP e alla classificazione CWE (Common Weakness Enumeration).
Nel laboratorio vengono presentati brani di codice insicuro, e verrà spiegato agli allievi come procederne all’individuazione e alla bonifica con l’aiuto di strumenti di analisi statica (SonarQube con profilo OWASP).
Sarà inoltre offerta una applicazione d’esempio che contiene diverse vulnerabilità (SQL Injection, XXE, XSS (Dom, Reflected e Stored), CSRF, Broken Authentication, IDOR, Token Hijacking…). Ai partecipanti verrà chiesto, tramite strumenti come Zed Attack Proxy, Burp, Wireshark, Zenmap, di effettuare gli attacchi per capirne la portata. Sarà inoltre spiegato l’uso di ZAP per operazioni di Spidering, Forced Browsing, Fuzzing, Active Scanning e Penetration Test dell’applicazione di esempio.
Gli strumenti SonarQube, ZAP e Dependency Checker saranno mostrati anche in catena di integrazione Continuous Integration con Maven e Jenkins, tramite opportuni plugin.
Al termine del corso, i partecipanti acquisiranno consapevolezza di come innervare il concetto di sicurezza in tutte le fasi di realizzazione del software (dai requisiti al deploy), e da quali principali vulnerabilità devono difendere lo sviluppo del proprio codice.
Prerequisiti: Senza LAB: Conoscenza dei processi di sviluppo del software; Con LAB: Sviluppatori Java-.NET/JavaScript e tecnologie Web
LAB: Installata Java JDK 1.8, OWASP ZAP, Possibilità di accesso Admin e Firewall alla macchina.
CONTENUTI:
Aspetti di Design e SSDLC
Concetti principali di sicurezza: Principi di progettazione della sicurezza; Requisiti software sicuri; Identificare i requisiti di sicurezza; Interpretare i requisiti di classificazione dei dati; Identificare i requisiti di privacy; Sviluppare la matrice di tracciabilità del requisito di sicurezza
Progettazione di software sicuro: Modello delle minacce; Definire l'architettura di sicurezza; Progettare interfacce sicure; Valutazione del rischio architettonico; Modelli (non funzionali) di sicurezza e vincoli; Utilizzo di architetture e strumenti di progettazione che migliorano la sicurezza; Utilizzare principi e modelli di progettazione sicura
Implementazione / programmazione di software in modo sicuro: Prassi di codifica sicure; Analizzare il codice per le vulnerabilità di sicurezza: OWASP e CWE. Commento delle principali vulnerabilità.
Esercizi di Attacco e Remediation
Presentazione di porzioni di codice Java e JavaScript con vulnerabilità. Classificazione OWASP/CWE delle vulnerabilità. Simulazione di penetrazione delle vulnerabilità. Discussione sulle modalità di hardening del codice e implementazione.
Attacchi presentati (OWASP A1 – A9) e discussione delle mitigation:
SQL Injection
Blind SQL Injection; attacchi Union e Order By
XXE; Blind XXE; XXE su architetture REST based
Broken Authentication; Parameter Tampering; Web Token Tampering; Reset Password Interception; Elevazione di autorizzazione a pari autenticazione
XSS: Stored, Reflected, DOM-Based. Alcuni esempi di attacchi.
IDOR (Insecure Direct Object Reference).
CSRF, vari esempi di attacchi
Vulnerabilità nelle dipendenze (OWASP A9), uso di dependency checker, esempi
Tutti gli attacchi sono presentati con esempi concreti e challenge presentate agli allievi, che le dovranno risolvere con opportuni strumenti (ZAP, Burp, Wireshark, Zenmap…)
Continuous Integration e Strumenti
Setup di tool di security in continuous integration. SonarQube e Sonarlint come strumenti di SAST. Generazione report SonarQube OWASP Top 10 / Sans Top 25.
Uso di ZAP come DAST per Fuzzing (con FuzzDB); Forced Browsing, Attacco Attivo con relativa configurazione. Generazione del report dei risultati di attacco dinamico.
Integrazione di Owasp Dependency Check con Maven