Giorno 1
Sicurezza informatica e codifica sicura
Natura della sicurezza
Termini relativi alla sicurezza IT
Definizione di rischio
Diversi aspetti della sicurezza informatica
Requisiti di diverse aree di applicazione
Sicurezza IT vs. codifica sicura
Dalle vulnerabilità alle botnet e al crimine informatico
Natura delle falle di sicurezza
Motivi di difficoltà
Da un computer infetto ad attacchi mirati
Classificazione delle falle di sicurezza
Tassonomia della Landwehr
I Sette Regni Perniciosi
OWASP Top Ten 2013
OWASP Confronto tra i primi dieci 2003 – 2013
Introduzione al Microsoft ® ciclo di vita dello sviluppo della sicurezza (SDL)
Agenda
Applicazioni sotto attacco...
Evoluzione del crimine informatico
Gli attacchi si concentrano sulle applicazioni
La maggior parte delle vulnerabilità si trova nelle app ISV più piccole
Origini del Microsoft SDL...
Sequenza temporale della sicurezza a Microsoft...
Quali app sono necessarie per seguire SDL?
Microsoft Ciclo di vita dello sviluppo della sicurezza (SDL)
Microsoft Ciclo di vita dello sviluppo della sicurezza (SDL)
Requisiti pre-SDL: formazione sulla sicurezza
Fase Uno: Requisiti
Fase due: progettazione
Fase tre: Implementazione
Fase quattro: verifica
Fase cinque: Rilascio – Piano di risposta
Fase cinque: rilascio - Revisione finale della sicurezza
Fase Cinque: Rilascio – Archivio
Requisito post-SDL: Risposta
Linee guida per i processi SDL per le app line-of-business
Linee guida SDL per le metodologie Agile
Lo sviluppo sicuro del software richiede il miglioramento dei processi
Principi di progettazione sicura
Superficie di attacco
Riduzione della superficie di attacco
Superficie di attacco: un esempio
Analisi della superficie di attacco
Riduzione della superficie di attacco: esempi
Privacy
Privacy
Informazioni sui comportamenti e i problemi dell'applicazione
Difesa in profondità
Principio fondamentale di SDL: difesa in profondità
Difesa in profondità – esempio
Principio del privilegio minimo
Privilegio minimo – esempio
Impostazioni predefinite sicure
Impostazioni predefinite sicure – esempi
Principi di implementazione sicura
Agenda
Microsoft Ciclo di vita dello sviluppo della sicurezza (SDL)
Nozioni di base sull'overflow del buffer
Processori Intel 80x86 – registri principali
Il layout dell'indirizzo di memoria
Il meccanismo di chiamata della funzione in C/C++ su x86
Le variabili locali e lo stack frame
Overflow dello stack
Overflow del buffer sullo stack
Esercizi – introduzione
Esercizio BOFIntro
Esercizio BOFIntro: determinare il layout dello stack
Esercizio BOFIntro: un semplice exploit
Convalida dell'input
Concetti di convalida dell'input
Problemi relativi a numeri interi
Rappresentazione di numeri interi negativi
Overflow di numeri interi
Overflow aritmetico: indovina l'output!
Esercizio IntOverflow
Qual è il valore di Math.Abs(int. MinValue)?
Mitigazione dei problemi di numeri interi
Mitigazione dei problemi di numeri interi
Evitare l'overflow aritmetico – addizione
Evitare l'overflow aritmetico – moltiplicazione
Rilevamento dell'overflow con la parola chiave checked in C#
Esercizio – Utilizzo della parola chiave checked in C#
Eccezioni attivate da overflow in C#
Caso di studio - Overflow di numeri interi in .NET
Una vulnerabilità di overflow di numeri interi reali
Sfruttamento della vulnerabilità di overflow di numeri interi
Vulnerabilità dell'attraversamento del percorso
Mitigazione dell'attraversamento del percorso
Giorno 2
Principi di implementazione sicura
Iniezione
Metodi tipici SQL di attacco injection
Iniezione cieca e a tempo SQL
SQL Metodi di protezione dall'iniezione
Inserimento di comandi
Autenticazione interrotta - gestione delle password
Esercizio – Debolezza delle password con hash
Gestione e archiviazione delle password
Algoritmi hash per scopi speciali per l'archiviazione delle password
Scripting intersito (XSS)
Scripting intersito (XSS)
CSS Iniezione
Sfruttamento: iniezione attraverso altri HTML tag
Prevenzione XSS
Controllo dell'accesso a livello di funzione mancante
Filtrare i caricamenti di file
Crittografia pratica
Garantire la riservatezza con la crittografia simmetrica
Simed-up di Simede ims
Cifrari a blocchi: modalità di funzionamento
Hash o digest del messaggio
Algoritmi di hash
Codice di autenticazione del messaggio (MAC)
Garantire integrità e autenticità con una chiave simmetrica
Garantire la riservatezza con la crittografia a chiave pubblica
Regola empirica: possesso della chiave privata
Errori tipici nella gestione delle password
Esercizio – Password codificate
Conclusione
Principi di verifica sicura
Test funzionali e test di sicurezza
Vulnerabilità di sicurezza
Definizione delle priorità
Test di sicurezza nell'SDLC
Fasi della pianificazione dei test (analisi dei rischi)
Definizione dell'ambito di applicazione e raccolta di informazioni
Soggetti interessati
Asset
La superficie di attacco
Obiettivi di sicurezza per i test
Modellazione delle minacce
Modellazione delle minacce
Profili degli utenti malintenzionati
Modellazione delle minacce basata sugli alberi degli attacchi
Modellazione delle minacce basata su casi di uso improprio/abuso
Casi di uso improprio/abuso: un semplice esempio di negozio online
Approccio STRIDE per elemento alla modellazione delle minacce – MS SDL
Identificazione degli obiettivi di sicurezza
Diagrammi – esempi di elementi DFD
Diagramma di flusso dei dati – esempio
Enumerazione delle minacce: elementi STRIDE e DFD di MS SDL
Analisi dei rischi – classificazione delle minacce
Il modello di classificazione delle minacce/rischi DREAD
Tecniche e strumenti di test di sicurezza
Approcci generali ai test
Tecniche per le varie fasi dell'SDLC
Revisione del codice
Revisione del codice per la sicurezza del software
Analisi delle contaminazioni
Euristica
Analisi statica del codice
Analisi statica del codice
Analisi statica del codice
Esercizio – Utilizzo di strumenti di analisi statica del codice
Testare l'implementazione
Verifica manuale in fase di esecuzione
Test di sicurezza manuali e automatizzati a confronto
Test di penetrazione
Prove di stress
Fuzzing
Test di sicurezza automatizzati - fuzzing
Sfide del fuzzing
Scanner di vulnerabilità Web
Esercizio – Utilizzo di uno scanner di vulnerabilità
Controllo e rafforzamento dell'ambiente
Sistema comune di punteggio delle vulnerabilità – CVSS
Scanner di vulnerabilità
Banche dati pubbliche
Caso di studio - Bypass dell'autenticazione basata su form
Vulnerabilità di terminazione dei byte NULL
Vulnerabilità legata all'elusione dell'autenticazione basata su form nel codice
Utilizzo del bypass dell'autenticazione basata su form
Fonti di conoscenza
Fonti di codifica sicure: uno starter kit
Database delle vulnerabilità
Linee guida per la codifica sicura di .NET su MSDN
Schede informative sulla codifica sicura di .NET
Libri consigliati: .NET e ASP.NET