Contattataci

Struttura del corso

Giorno 1

Sicurezza informatica e programmazione sicura

  • La natura della sicurezza
  • Termini fondamentali in materia di sicurezza IT
  • Definizione di rischio informatico
  • Aspetti distintivi della sicurezza IT
  • Requisiti specifici delle varie applicazioni
  • Differenze tra sicurezza informatica e programmazione sicura
  • Dalle vulnerabilità alle reti di botnet e alla criminalità informatica
    • Caratteristiche delle debolezze di sicurezza
    • Perché risulta complesso rimediarvi
    • Dal PC infetto fino agli attacchi mirati
  • Classificazione delle vulnerabilità di sicurezza
    • La classificazione proposta da Landwehr
    • I cosiddetti “Sette Regni Perversi”
    • OWASP Top Ten 2013
    • Confronto tra le edizioni OWASP Top Ten del 2003 e del 2013

Introduzione al Microsoft® Security Development Lifecycle (SDL)

  • Panoramica generale dell’SDL
  • Le applicazioni sotto attacco...
    • Evoluzione della criminalità informatica
    • Maggiore frequenza di attacchi alle applicazioni software
    • La maggior parte delle vulnerabilità riguarda piccoli prodotti realizzati da sviluppatori indipendenti
  • Origini del Microsoft SDL...
    • Cronologia della sicurezza presso Microsoft...
    • Quali applicazioni devono aderire allo SDL?
  • Il Microsoft Security Development Lifecycle (SDL)
    • Panoramica complessiva del ciclo di sviluppo sicuro proposto da Microsoft
    • Requisiti preliminari: formazione sulla sicurezza
    • Fase 1: Individuazione dei requisiti di sicurezza
    • Fase 2: Progettazione basata su criteri di sicurezza
    • Fase 3: Implementazione con pratiche di sicurezza rigorose
    • Fase 4: Verifica e validazione dei controlli previsti
    • Fase 5: Pubblicazione – realizzazione del piano di risposta a emergenze
    • Fase 5: Pubblicazione – revisione finale dei requisiti di sicurezza
    • Fase 5: Archiviazione della documentazione relativa all’applicazione
    • Requisiti post-pubblicazione: meccanismi reattivi alla segnalazione di vulnerabilità
    • Linee guida procedurali per l’SDL applicate a software aziendali specifici
    • Adozione dell’SDL in contesti di sviluppo Agile
    • L’importanza del continuo miglioramento dei processi per una programmazione sicura

Principi fondamentali di progettazione sicura

  • La superficie esposta ad attacchi (attack surface)
    • Riduzione della superficie soggetta a minacce
    • Esempio concreto di superficie d’attacco
    • Analisi sistematica di tali aree critiche
    • Alcuni esempi pratici riguardo alla minimizzazione dell’area vulnerabile
  • Privacy dei dati
    • Considerazioni generali sulla privacy
    • Come comprendere correttamente il comportamento del software e i rischi connessi
  • Approccio “difesa a più livelli” (Defense in Depth)
    • Il principio cardine dello SDL: la difesa distribuita lungo le strutture applicative
    • Un caso concreto di applicazione di questo approccio
  • Principio del minimo privilegio (Least Privilege)
    • Esempio d’uso di tale criterio di accessibilità ridotta
  • Configurazioni predefinite sicure
    • Alcuni casi pratici riguardanti le impostazioni standard ritenute sicure

Criteri fondamentali per l’implementazione del codice in modo sicuro

  • Panoramica complessiva della sezione dedicata
  • Riepilogo sul Microsoft Security Development Lifecycle (SDL)
  • Elementi base sull’overflow di buffer
    • Registri fondamentali nei processori Intel 80x86
    • Struttura degli indirizzi in memoria
    • Modalità di chiamata delle funzioni C/C++ su architetture x86
    • Relazione tra variabili locali e struttura della stack frame
    • Cos’è lo overflow dello stack
      • Meccanismi alla base dell’overflow dei buffer nello stack
      • Introduzione ai tipi di esercitazioni previste
      • Dettagli sull’esercizio BOFIntro
      • Analisi del layout della stack attraverso l’esercizio BOFIntro
      • Realizzazione di semplici “exploit” a partire da tale contesto d’apprendimento
  • Validazione delle informazioni inserite (Input validation)
    • Concetti primari sulla validazione degli input
    • Problematiche tipiche con i dati numerici
      • Modalità di rappresentazione dei valori negativi in formato numerico
      • Come si manifesta l’overflow aritmetico
      • Previsione dell’output in casi d’overflow
      • Esercitazione specifica: IntOverflow
      • Quanto vale esattamente Math.Abs(int.MinValue)?
    • Modalità di prevenzione delle problematiche numeriche
      • Soluzioni consigliate per evitare l’overflow aritmetico
      • Come si gestisce l’addizione in ambiente a rischio d’overflow?
      • Gestione della moltiplicazione con limiti numerici fissati
      • Rilevamento degli overflow tramite la parola chiave “checked” in C#
      • Attività pratica: sperimentazione diretta della parola chiave “checked” nel linguaggio C#
      • Come vengono gestite eccezioni derivanti da overflow in ambienti .NET?
    • Studio di caso specifico: problematiche d’overflow numerico nel framework .NET
      • Una situazione reale in cui si manifesta l’overflow dei dati interi in un’applicazione .NET
      • Procedimenti effettivi per sfruttare tali debolezze numeriche nel codice target
    • Gestione delle vulnerabilità legate alla traversata di percorsi file (Path traversal)
      • Strategie pratiche per contrastare questa tipologia specifica di rischio

Giorno 2

Criteri fondamentali per l’implementazione del codice in modo sicuro (continua)

  • Tecniche d’iniezione di contenuti non desiderati
    • Modalità tipiche di attacco basate sull’iniezione SQL
    • Meccanismi d’attacco “blind” e basati su tempi di risposta verso le richieste in codice SQL
    • Strategie pratiche per proteggere l’applicazione da attacchi di tipo SQL Injection
    • Attacchi basati sull’iniezione di comandi nel sistema operativo (Command injection)
  • Problematiche relative alla gestione dei dati d’identificazione – password
    • Attività pratica: analisi delle debolezze associate alle password memorizzate in formato hash
    • Procedimenti corretti di gestione e salvataggio delle credenziali di accesso
    • Utilizzo appropriato degli algoritmi specifici per la generazione di hash a scopo protettivo dei dati sensibili
  • Cross-Site Scripting (XSS)
    • Concezioni principali riguardanti l’XSS
    • Specifiche forme di attacco con iniezione CSS (Cross-site Scripting Stylesheet)
    • Tecniche d’attacco basate su iniezioni attraverso tag HTML particolari
    • Metodiche per prevenire l’utilizzo indesiderato di codice non sicuro nel contesto XSS
  • Assenza o carenza dei controlli di accesso a livello funzionale
    • Moduli specifici dedicati al filtraggio sicuro dei file in fase d’upload
  • Concetti di base riguardanti la crittografia
    • Garanzie di riservatezza offerte dalla cifratura simmetrica
    • Algoritmi principali previsti per l’esecuzione della crittografia simmetrica
    • Le modalità d’utilizzo dei “block cipher” nella gestione di dati
    • Struttura e utilizzo dei cosiddetti digest o hash dei messaggi
    • Principali tipologie di algoritmi in grado di generare tali hash
    • Concetto e struttura del Message Authentication Code (MAC)
    • Modalità d’utilizzo della chiave simmetrica per garantire autenticità e integrità dei dati
    • Utilizzo delle chiavi asimmetriche nella cifratura
    • Norme generali riguardo alla corretta gestione della chiave privata
    • Errori ricorrenti nell’ambito della conservazione sicura delle credenziali d’accesso
    • Attività pratica: riconoscimento e correzione di password rigidamente scritte all’interno del codice sorgente
    • Sintesi finale dei concetti trattati

Criteri fondamentali per la verifica e validazione delle funzionalità in modo sicuro

  • Differenze tra i test standard e quelli mirati alla sicurezza informatica
  • Identificazione precoce di potenziali vulnerabilità
  • Processo di prioritizzazione delle criticità riscontrate
  • Integrazione dei test specifici per la sicurezza nell’ambito del ciclo SDLC
  • Elementi preliminari di pianificazione e valutazione dei rischi in fase di test
  • Definizioni specifiche e analisi sistematica delle informazioni d’interesse
    • Le parti direttamente coinvolte nel processo
    • Gli elementi critici costituenti il patrimonio informativo del sistema
    • Individuazione delle zone più esposte all’influenza di attacchi esterni
    • Scopi specifici da ottenere tramite l’attività stessa di test
  • Modelli formale d’analisi delle minacce
    • Il processo fondamentale della modellazione d’emergenza di minacce
    • Profili caratteristici dei potenziali aggressori e loro comportamenti
    • Strutture basate su alberi degli attacchi per la creazione modelli predittivi
    • Implementazioni alternative: basate su casi ipotetici d’abuso o di utilizzo scorretto dei software
    • Applicazione diretta ai contesti pratici tramite un semplice esempio legato a negozi online
    • Struttura analitica STRIDE adattata specificamente allo standard Microsoft SDL
    • Procedimenti per definire correttamente i fini di sicurezza da raggiungere nel contesto esaminato
    • Struttura e composizione dei Diagrammi a Flusso dei Dati (DFD)
    • Analisi di un esempio specifico riguardante la costruzione pratica di tali diagrammi
    • Metodologia per identificare le singole fonti di pericolo sfruttando sia il sistema STRIDE che i modelli DFD
    • Criteri specifici di valutazione e classificazione delle minacce individuate
    • Il modello DREAD per una classificazione standardizzata del rischio informatico
  • Tecniche specifiche e strumenti a disposizione per la verifica della sicurezza
    • Linee guida generali per l’individuazione delle soluzioni migliori ai vari problemi analizzati
    • Modalità di applicazione dei test nelle singole fasi del ciclo di sviluppo previsto dallo SDLC
  • Analisi diretta e revisione sistematica del codice
    • Come procedere a una revisione tecnica mirata alla sicurezza dei software prodotti
    • Tecniche avanzate di “Taint Analysis” per il rilevamento di flussi dati rischiosi
    • Utilizzo intelligente delle regole heuristiche per una ricerca rapida d’anomalie
  • Analisi statica del codice prodotto
    • Principi tecnici alla base dell’analisi statica
    • Esercitazione: sperimentazione diretta con strumenti dedicati all’analisi statica
  • Verifica dell’operatività in tempo reale
    • Metodiche standardizzate di controllo delle attività in esecuzione diretta
    • Rispetto e limiti del test manuale vs automatizzato per la sicurezza informatica
    • Procedure tipiche di Penetration Testing
    • Test finalizzati alla misurazione della resistenza complessiva del sistema
  • Tecniche Fuzzing per l’esecuzione di test automatici
    • Cos’è il “Fuzzing” come tecnica consolidata nel mondo della verifica informatica
    • Principali difficoltà incontrate durante l’utilizzo corretto di questo strumento d’automazione
  • Strumenti dedicati al rilevamento rapido delle vulnerabilità in applicazioni web
    • Esercitazione pratica: utilizzo dei programmi scanner di vulnerabilità più diffusi
  • Valutazioni finali sull’integrità complessiva del sistema e ottimizzazioni ambientali
    • Il Common Vulnerability Scoring System (CVSS) come metrica universalmente riconosciuta
    • Strumenti dedicati specificatamente alla scansione di debolezze informative
    • Basi di dati accessibili a chiunque contenenti informazioni fondamentali su problemi riscontrati
  • Studio caso specifico: superamento indesiderato dei controlli d’accesso per autenticazione
    • Come si manifesta la cosiddetta vulnerabilità legata alla terminazione arbitraria dei dati mediante il carattere NULL
    • Descrizione analitica delle condizioni che permettono effettivamente tale superamento nel codice
    • Procedimenti corretti per sfruttare appieno questa debolezza da parte degli attaccanti

Fonti di informazione e risorse utili

  • Iniziative in corso mirate a rendere disponibili linee guida per lo sviluppo sicuro di programmi
  • Database consolidati contenenti informazioni riguardanti le vulnerabilità più note
  • Documentazione ufficiale Microsoft relativa alle corrette pratiche per lo sviluppo .NET
  • Schede riassuntive per facilitare l’implementazione corretta delle norme di sicurezza nei progetti basati su .NET e ASP.NET
  • Elenco consigliato di testi specializzati relativamente a .NET e ASP.NET
 14 ore

Numero di Partecipanti


Prezzo per partecipante

Recensioni (3)

Corsi in Arrivo

Categorie relative