Scrittura di codice protetto: procedure consigliate Marco Russo .NET Consultant & Trainer DevLeap Argomenti trattati Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione Prerequisiti di sessione Esperienza di sviluppo con Microsoft Visual Basic®, Microsoft Visual C++® o C# Livello 200 Agenda Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione Miglioramento del processo di sviluppo delle applicazioni Prendere in considerazione la protezione All'inizio del processo Nel corso dello sviluppo Fino alla distribuzione Durante tutte le fasi di verifica del software Non smettere di cercare bug di protezione fino alla fine del processo di sviluppo Struttura di protezione SD3 SD3 Protezione come caratteristica di progettazione Protezione per impostazione predefinita Protezione nella distribuzione Architettura e codice protetti Analisi delle minacce Riduzione delle vulnerabilità Riduzione della superficie di attacco Disattivazione delle funzioni non utilizzate per impostazione predefinita Utilizzo di privilegi minimi Protezione: rilevamento, difesa, ripristino e gestione Processo: guide all'esecuzione delle operazioni, guide all'architettura Utenti: formazione Cronologia di sviluppo protetto dei prodotti Analisi delle minacce Valutazione della conoscenza relativa alla protezione durante l'assunzione di membri del team Concetto Esecuzione di verifiche esterne Verifica delle vulnerabilità di protezione Determinazione dei criteri di approvazione della protezione Progettazione completata Formazione dei membri del team Esecuzione di verifiche di team della protezione Apprendimento e perfezionamento Procedure di verifica completate Codice completato Postcommercializzazione Commercializzazione Risoluzione dei problemi di protezione, verifica del codice rispetto alle linee guida di protezione Verifica della mutazione dei dati e dei privilegi più ridotti possibili = Attività continue Protezione come caratteristica di progettazione Aumentare la consapevolezza in fatto di protezione del team di progettazione Prevedere una formazione continua Combattere gli atteggiamenti come "Ciò che non conosco non potrà crearmi problemi" Prendere in considerazione la protezione fin dalla fase di progettazione Definire gli obiettivi di protezione del prodotto Implementare la protezione come una funzione chiave del prodotto Utilizzare la modellizzazione delle minacce durante la fase di progettazione Agenda Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione Definizione di modellizzazione delle minacce La modellizzazione delle minacce è un'analisi basata sulla protezione che: Consente al team di un prodotto di identificare i punti in cui il prodotto è più vulnerabile Consente di valutare le minacce a un'applicazione Ha come obiettivo quello di ridurre i rischi di protezione complessivi Consente di individuare le risorse Consente di rilevare le vulnerabilità Consente di identificare le minacce Dovrebbe essere alla base delle specifiche di progettazione relative alla protezione Vantaggi della modellizzazione delle minacce Migliore comprensione dell'applicazione Individuazione di bug Vulnerabilità Identificazione di bug di progettazione complessi Integrazione dei nuovi Minaccia Risorsa membri del team Definisce piani di testing per la protezione ben progettati Processo di modellizzazione delle minacce Processo di modellizzazione delle minacce 1 Identificazione delle risorse 2 Creazione di una panoramica dell'architettura 3 Scomposizione dell'applicazione 4 Identificazione delle minacce 5 Documentazione delle minacce 6 Classificazione delle minacce Processo di modellizzazione delle minacce Fase 1: identificazione delle risorse Creare un elenco di risorse da proteggere tra cui: Dati riservati, come database di clienti Pagine Web Disponibilità del sistema Altri componenti che, se danneggiati, impedirebbero il corretto funzionamento dell'applicazione Identificazione della funzione dell'applicazione Creazione di un diagramma dell'architettura dell'applicazione Processo di modellizzazione delle minacce Autorizzazioni NTFS (autenticazione) Autorizzazione di file Autorizzazione di URL Ruoli di .NET(autenticazione) Ruolo definito dall'utente (autenticazione) Limite di attendibilità Fase 2: creazione di una panoramica Limite di attendibilità dell'architettura ASP .NET Marcella Monica Alberto IIS Microsoft ASP .NET SSL (privacy/integrità) Autenticazione Autenticazione anonima basata su form Identificazione delle tecnologie (identità del processo) Microsoft SQL Server™ IPSec (privacy/integrità) Autenticazione di Microsoft Windows® Processo di modellizzazione delle minacce Fase 3: scomposizione dell'applicazione Scomporre l'applicazione Creare un profilo di protezione basato sulle tradizionali aree di vulnerabilità Esaminare l'interazione tra i diversi sottosistemi Utilizzare i diagrammi DFD o UML Identificazione dei limiti di attendibilità Identificazione del flusso di dati Identificazione dei punti di ingresso Identificazione di codice privilegiato Documentazione del profilo di protezione Processo di modellizzazione delle minacce Fase 4: identificazione delle minacce Creazione del team Identificazione delle minacce Minacce alla rete Minacce all'host Minacce all'applicazione Processo di modellizzazione delle minacce Identificazione delle minacce mediante STRIDE Tipi di minacce •Esempi Spoofing Falsificazione di messaggi di posta elettronica Riproduzione di pacchetti di autenticazione •Tampering Alterazione di dati durante la trasmissione Modifica dei dati contenuti nei file •Repudiation Eliminazione di un file importante e negazione di tale operazione Acquisto di un prodotto e negazione di tale operazione •Information disclosure Esposizione di informazioni in messaggi di errore Esposizione di codice su siti Web •Denial of service Saturazione di una rete con pacchetti SYN Saturazione di una rete con pacchetti ICMP contraffatti •Elevation of privilege Sfruttamento di sovraccarichi buffer per ottenere privilegi di sistema Ottenimento di privilegi di amministratore in maniera illegale Processo di modellizzazione delle minacce Identificazione delle minacce mediante l'utilizzo di strutture di attacco 1.0 Visualizzazione dei dati sullo stipendio (I) 1.1 Il traffico non è protetto (E) 1.2 L'hacker visualizza il traffico 1.2.1 Intercettazione del traffico mediante l'analizzatore di protocolli 1.2.2 Ascolto del traffico del router 1.2 1.2.2.1 Il router non è provvisto di patch (E) L'hacker visualizza 1.2.2.2 Compromissione del router il traffico 1.2.2.3 Tentativo di indovinare la password del router Minaccia 1 (I) Visualizzazione dei dati sullo stipendio 1.1 Il traffico non è protetto 1.2.1 Intercettazione del traffico mediante l'analizzatore di protocolli 1.2.2.1 Il router non è provvisto di patch 1.2.2 Ascolto del traffico del router 1.2.2.2 Compromissione del router 1.2.2.3 Tentativo di indovinare la password del router Processo di modellizzazione delle minacce Utilizzare un modello per documentare le minacce Fase 5: documentazione delle minacce Descrizione della minaccia Obiettivo della minaccia Rischio Tecniche di attacco Contromisure Inserimento di comandi SQL Componente di accesso ai dati L'hacker aggiunge comandi SQL al nome utente utilizzato per creare una query SQL Utilizzare un'espressione regolare per convalidare il nome utente e una stored procedure con parametri per accedere al database Lasciare vuoto il campo Rischio (per il momento) Processo di modellizzazione delle minacce Fase 6: classificazione delle minacce Utilizzare la seguente formula: Rischio = probabilità * potenziale del danno Utilizzare il modello DREAD per classificare le minacce Damage potential (potenziale del danno) Reproducibility (riproducibilità) Exploitability (sfruttabilità) Affected Users (utenti interessati) Discoverability (identificabilità) Processo di modellizzazione delle minacce Esempio: classificazione delle minacce •Damage potential (potenziale del danno) •Affected users (utenti interessati) - oppure •Danno Minaccia 1 (I) Visualizzazione dei dati sullo stipendio 1.1 Il traffico non è protetto 1.2 L'hacker visualizza il traffico 1.2.1 Intercettazione del traffico mediante l'analizzatore di protocolli 1.2.2.1 Il router non è provvisto di patch 1.2.2 Ascolto del traffico del router 1.2.2.2 Compromissione del router 1.2.2.3 Tentativo di indovinare la password del router •Reproducibility (riproducibilità) •Exploitability (sfruttabilità) •Discoverability (identificabilità) - oppure •Probabilità Codifica in base a un modello di minaccia Utilizzare la modellizzazione delle minacce per: Determinare i componenti più pericolosi dell'applicazione Assegnare priorità agli sforzi per implementare la protezione Assegnare priorità alle continue verifiche del codice Determinare le tecniche di contenimento delle minacce da utilizzare Determinare il flusso di dati Agenda Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione Opzioni di contenimento dei rischi Opzione 1: non intraprendere alcuna misura Opzione 2: avvisare l'utente Opzione 3: eliminare il problema Opzione 4: correggere il problema Controllo Processo di contenimento dei rischi 1. Identificare la categoria, ad esempio: spoofing 2. Selezionare le tecniche, ad esempio: autenticazione o protezione di dati riservati 3. Scegliere la tecnologia, ad esempio: Kerberos Tipo di minaccia (STRIDE) Tecnica di contenimento Tecnologia Spoofing Tecnologia Tecnica di contenimento Tecnologia Autenticazione Tecnologia NTLM Certificati X.509 Chiavi PGP Autenticazione di base Digest Kerberos SSL/TLS Tecniche di contenimento di esempio SSL/TLS IPSec RPC/DCO con Privacy STRIDE STRIDE Dati di configurazione STRIDE Controllo di accesso avanzato Firme digitali Controllo Rete non protetta Client Firewall Limitazione dell'utilizzo delle risorse per le connessioni anonime Server Dati permanenti Dati di autenticazione STRIDE Agenda Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione Esecuzione con i privilegi più ridotti possibili Dottrina di protezione nota: Un'applicazione dovrebbe essere eseguita con i privilegi minimi necessari per il funzionamento L'elevazione dei privilegi può avere conseguenze disastrose Codice dannoso in esecuzione in un processo altamente privilegiato viene eseguito con privilegi elevati Molti virus si diffondono perché il destinatario dispone di privilegi di amministratore Dimostrazione 1 Protezione delle applicazioni ASP .NET Analisi dei privilegi delle applicazioni ASP .NET Limitazione dei livelli di attendibilità delle applicazioni ASP .NET Sandboxing di codice privilegiato Utilizzo di assembly sottoposti a sandboxing Riduzione della superficie di attacco Esporre solo interfacce dell'applicazione limitate e ben documentate Utilizzare solo i servizi richiesti dall'applicazione I virus Slammer e CodeRed non si sarebbero diffusi se determinate funzioni fossero state disattivate per impostazione predefinita ILoveYou (e altri virus) non si sarebbero diffusi se la funzione di script fosse stata disattivata Disattivare tutte le funzioni non necessarie Non ritenere attendibile l'input dell'utente Convalidare tutto l'input Considerare dannoso tutto l'input fino a prova contraria Cercare dati validi e rifiutare tutto il resto Vincolare, rifiutare e sterilizzare l'input dell'utente mediante Verifiche dei tipi Verifiche della lunghezza Verifiche dell'intervallo Verifiche del formato Validator.ValidationExpression = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"; Dimostrazione 2 Convalida di Windows Form Visualizzazione di un'applicazione in cui non viene eseguita la convalida Aggiunta della convalida dell'input Convalida del form completo Difesa a più livelli (1 di 3) Utilizzo di più gatekeeper Firewall ISA IIS Firewall ISA SSL SQL Server IPSec Difesa a più livelli (2 di 3) Applicazione di misure appropriate per ogni livello Verifica della protezione Verifica della protezione Applicazione.dll Applicazione.exe Protezione delle risorse mediante un ACL Verifica della protezione Applicazione.dll Verifica della protezione Difesa a più livelli (3 di 3) Progettare gli ACL nell'applicazione dall'inizio Utilizzo di ACL efficienti per le risorse Applicare gli ACL a file, cartelle, pagine Web, impostazioni del Registro di sistema, file di database, stampanti e oggetti presenti in Active Directory Creare ACL personalizzati durante l'installazione dell'applicazione Includere ACE DENY Non utilizzare DACL NULL Protezione non basata sul nascondimento Non nascondere le chiavi di protezione nei file Non fare affidamento su chiavi del Registro di sistema non documentate Supporre sempre che un hacker abbia a disposizione le stesse informazioni dello sviluppatore Utilizzo dell'API di protezione dei dati (DPAPI, Data Protection API) per la protezione di informazioni riservate Due funzioni DPAPI: CryptProtectData CryptUnprotectData Due archivi per i dati crittografati mediante DPAPI: Archivio dell'utente Archivio del computer Dimostrazione 3 DPAPI Memorizzazione delle stringhe di connessione in Web.config Crittografia delle stringhe di connessione mediante DPAPI Installazione dell'utilità Aspnet_setreg Utilizzo di attributi crittografati in un file di configurazione Concessione di autorizzazioni sulle chiavi del Registro di sistema Gestione degli errori (1 di 2) DWORD if } } dwRet = IsAccessAllowed(…); (dwRet == ERROR_ACCESS_DENIED) { // Security check failed. // Inform user that access is denied else { // Security check OK. // Perform task… Cosa succederebbe se IsAccessAllowed() restituisse ERROR_NOT_ ENOUGH_MEMORY? Assicurarsi che un eventuale errore del codice si verifichi in modo protetto Gestione degli errori (2 di 2) Operazioni sconsigliate: Rivelazione di informazioni in messaggi di errore <customErrors mode="On"/> Utilizzo di risorse a lungo dopo un errore Operazioni consigliate: Utilizzo di blocchi di gestione delle eccezioni per evitare la propagazione degli errori al chiamante Scrittura di errori sospetti in un log eventi Verifica della protezione Coinvolgere i team di testing all'inizio dei progetti Utilizzare la modellizzazione delle minacce per sviluppare la strategia di verifica della protezione Prevedere i possibili attacchi e verificare il livello di protezione Automatizzare gli attacchi con script e linguaggi di programmazione di basso livello Inviare numerosi dati non validi Eliminare o negare l'accesso a file o voci del Registro di sistema Eseguire le verifiche con un account che non disponga di privilegi di amministratore Conoscere il nemico e conoscere se stessi Conoscere le tecniche e le tecnologie utilizzabili dagli hacker Conoscere le tecniche e le tecnologie utilizzabili dai tester Come imparare dagli errori Se si rileva un problema di protezione, imparare dall'errore Come si è verificato l'errore di protezione? Lo stesso errore è presente in altre parti del codice? Come avrebbe potuto essere impedito? Cosa è necessario modificare per evitare il ripetersi di questo tipo di errore? È necessario aggiornare materiale di formazione o strumenti di analisi? Riepilogo della sessione Processo di sviluppo protetto Modellizzazione delle minacce Contenimento dei rischi Procedure ottimali per la protezione 1. Fasi successive Per essere sempre aggiornati nel campo della protezione 2. Abbonarsi ai bollettini sulla protezione all'indirizzo: http://www.microsoft.com/security/security_bulletins/alerts2.asp (in lingua inglese) Informazioni aggiornate relative alla protezione Microsoft sono disponibili all'indirizzo: http://www.microsoft.com/security/guidance/ (in lingua inglese) Accesso a materiale di formazione aggiuntivo sulla protezione Seminari di formazione on-line e con istruttore sono disponibili all'indirizzo: http://www.microsoft.com/seminar/events/security.mspx (in lingua inglese) Per trovare un CTEC di zona che offre corsi di formazione pratica, visitare l'indirizzo: http://www.microsoft.com/italy/traincert/Default.mspx Ulteriori informazioni Sito Microsoft dedicato alla protezione (per tutti gli utenti) http://www.microsoft.com/italy/security Sito MSDN dedicato alla protezione (per sviluppatori) http://msdn.microsoft.com/security (in lingua inglese) Sito TechNet dedicato alla protezione (per professionisti IT) http://www.microsoft.com/italy/technet/ sicurezza.asp