Struttura del corso
Giorno 1
Sicurezza IT e codifica sicura
- Natura della sicurezza
- Terminologia legata alla sicurezza IT
- Definizione del rischio
- Diversi aspetti della sicurezza IT
- Requisiti di diverse aree applicative
- Sicurezza IT vs. codifica sicura
-
Dalle vulnerabilità ai botnet e al cybercrime
- Natura dei difetti di sicurezza
- Motivi della difficoltà
- Da un computer infetto a attacchi mirati
-
Classificazione dei difetti di sicurezza
- Taxonomia di Landwehr
- I Sette Regni Perniciosi
- OWASP Top Ten 2013
- Confronto tra OWASP Top Ten 2003 – 2013
Introduzione al Microsoft® Security Development Lifecycle (SDL)
- Programma
-
Applicazioni sotto attacco...
- Evoluzione del cybercrime
- Gli attacchi si concentrano sulle applicazioni
- La maggior parte delle vulnerabilità è in app di piccoli ISV
-
Origini del Microsoft SDL...
- Cronologia della sicurezza a Microsoft...
- Quali app sono tenute a seguire l'SDL?
-
Microsoft Security Development Lifecycle (SDL)
- Microsoft Security Development Lifecycle (SDL)
- Requisiti pre-SDL: Formazione sulla sicurezza
- Fase Uno: Requisiti
- Fase Due: Progettazione
- Fase Tre: Implementazione
- Fase Quattro: Verifica
- Fase Cinque: Rilascio – Pianificazione di risposta
- Fase Cinque: Rilascio – Revisione finale della sicurezza
- Fase Cinque: Rilascio – Archiviazione
- Requisito post-SDL: Risposta
- Guida al processo SDL per applicazioni LOB
- Guida all'SDL per metodologie Agile
- Lo sviluppo di software sicuro richiede miglioramenti del processo
Principi di progettazione sicura
-
Superficie d'attacco
- Riduzione della superficie d'attacco
- Superficie d'attacco – un esempio
- Analisi della superficie d'attacco
- Riduzione della superficie d'attacco – esempi
-
Privacy
- Privacy
- Comprensione dei comportamenti e delle preoccupazioni dell'applicazione
-
Difesa a più livelli
- Principio core dell'SDL: Difesa a più livelli
- Difesa a più livelli – esempio
-
Principio del privilegio minimo
- Privilegio minimo – esempio
-
Impostazioni sicure predefinite
- Impostazioni sicure predefinite – esempi
Principi di implementazione sicura
- Programma
- Microsoft Security Development Lifecycle (SDL)
-
Fondamenti dei buffer overflow
- Processori Intel 80x86 – registri principali
- La disposizione degli indirizzi di memoria
- Il meccanismo di chiamata delle funzioni in C/C++ su x86
- Le variabili locali e il frame dello stack
-
Overflow dello stack
- Buffer overflow sullo stack
- Esercizi – introduzione
- Esercizio BOFIntro
- Esercizio BOFIntro – determinare la disposizione dello stack
- Esercizio BOFIntro – un semplice exploit
-
Validazione degli input
- Concetti di validazione degli input
-
Problemi con gli interi
- Rappresentazione degli interi negativi
- Overflow degli interi
- Overflow aritmetico – indovina l'output!
- Esercizio IntOverflow
- Qual è il valore di Math.Abs(int.MinValue)?
-
Mitigazione dei problemi con gli interi
- Mitigazione dei problemi con gli 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 triggerizzate dagli overflow in C#
-
Studio di caso – Overflow degli interi in .NET
- Una vulnerabilità reale di overflow degli interi
- Sfruttamento della vulnerabilità di overflow degli interi
-
Vulnerabilità di path traversal
- Mitigazione del path traversal
Giorno 2
Principi di implementazione sicura
-
Iniezione
- Metodi di attacco tipici SQL Injection
- SQL injection cieca e basata sul tempo
- Metodi di protezione da SQL Injection
- Iniezione di comandi
-
Autenticazione debole - gestione delle password
- Esercizio – Debolezza delle password hash
- Gestione e archiviazione delle password
- Algoritmi di hash specifici per la gestione delle password
-
Cross-Site Scripting (XSS)
- Cross-Site Scripting (XSS)
- Iniezione di CSS
- Sfruttamento: iniezione attraverso altri tag HTML
- Prevenzione del XSS
-
Mancanza di controllo funzionale a livello di accesso
- Filtraggio degli upload di file
-
Crittografia pratica
- Fornitura della riservatezza con la crittografia simmetrica
- Algoritmi di crittografia simmetrica
- Cifrari a blocchi – modalità di operazione
- Hash o digest del messaggio
- Algoritmi hash
- Codice di autenticazione del messaggio (MAC)
- Fornitura dell'integrità e dell'autenticità con una chiave simmetrica
- Fornitura della riservatezza con la crittografia a chiave pubblica
- Regola pratica – possesso della chiave privata
- Errori tipici nella gestione delle password
- Esercizio – Password hard-coded
- Conclusione
Principi di verifica sicura
- Testing funzionale vs. testing di sicurezza
- Vulnerabilità di sicurezza
- Prioritizzazione
- Testing di sicurezza nell'SDLC
- Passaggi della pianificazione del test (analisi dei rischi)
-
Scoping e raccolta informazioni
- Stakeholders
- Asset
- La superficie d'attacco
- Obiettivi di sicurezza per il testing
-
Modellazione delle minacce
- Modellazione delle minacce
- Profili degli attaccanti
- Modellazione delle minacce basata su alberi di attacco
- Modellazione delle minacce basata su casi di uso maliziosi/abuso
- Casi di uso maliziosi/abuso – un esempio semplice di web shop
- Approccio STRIDE per elemento alla modellazione delle minacce – MS SDL
- Identificazione degli obiettivi di sicurezza
- Diagrammazione – esempi di elementi DFD
- Diagramma dei flussi di dati – esempio
- Enumerazione delle minacce – STRIDE e elementi DFD dell'SDL di Microsoft
- Analisi del rischio – classificazione delle minacce
- Modello di classificazione delle minacce/risk DREAD
-
Tecniche e strumenti di testing di sicurezza
- Approcci generali al testing
- Tecnologie per i vari passaggi dell'SDLC
-
Revisione del codice
- Revisione del codice per la sicurezza software
- Analisi della tinta (taint analysis)
- Euristiche
-
Analisi statica del codice
- Analisi statica del codice
- Esercizio – Utilizzo di strumenti di analisi statica del codice
-
Testing dell'implementazione
- Verifica manuale in tempo reale
- Testing di sicurezza manuale vs. automatizzato
- Test di penetrazione
- Test di stress
-
Fuzzing
- Testing di sicurezza automatizzato – fuzzing
- Sfide del fuzzing
-
Scanner di vulnerabilità web
- Esercizio – Utilizzo di un scanner di vulnerabilità
-
Controllo e hardening dell'ambiente
- Sistema di punteggio delle vulnerabilità comune – CVSS
- Scanner di vulnerabilità
- Database pubblici
-
Studio di caso – Bypass dell'Autenticazione Forms
- Vulnerabilità della terminazione del byte NULL
- La vulnerabilità del bypass dell'autenticazione forms nel codice
- Sfruttamento del bypass dell'autenticazione forms
Fonti di conoscenza
- Fonti di codifica sicura – un kit di partenza
- Database di vulnerabilità
- Linee guida per la codifica sicura .NET su MSDN
- Schede di riferimento per la codifica sicura .NET
- Libri consigliati – .NET e ASP.NET
Recensioni (5)
Numerosi esempi per ogni modulo e grande competenza del formatore.
Sebastian - BRD
Corso - Secure Developer Java (Inc OWASP)
Traduzione automatica
Modulo 3 Attacchi e sfruttamenti delle applicazioni, XSS, iniezione SQL Modulo 4 Attacchi e sfruttamenti dei server, DoS, buffer overflow
Tshifhiwa - Vodacom
Corso - How to Write Secure Code
Traduzione automatica
Informazioni generali sul corso
Paulo Gouveia - EID
Corso - C/C++ Secure Coding
Traduzione automatica
La conoscenza del formatore sull'argomento era eccellente e il modo in cui le sessioni erano organizzate per permettere al pubblico di seguire le dimostrazioni ha davvero contribuito a consolidare quella conoscenza, rispetto a semplicemente sedersi ad ascoltare.
Jack Allan - RSM UK Management Ltd.
Corso - Secure Developer .NET (Inc OWASP)
Traduzione automatica
Non c'era nulla da rimproverare, era perfetto.
Zola Madolo - Vodacom
Corso - Android Security
Traduzione automatica