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
Scarica

Scrittura di codice protetto: procedure consigliate