La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist Microsoft Italy.

Presentazioni simili


Presentazione sul tema: "Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist Microsoft Italy."— Transcript della presentazione:

1

2 Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist Microsoft Italy

3 Agenda Buffer Overruns Buffer Overruns Errori aritmetici Errori aritmetici CSS (Cross-Site Scripting) CSS (Cross-Site Scripting) SQL Injection SQL Injection Canonicalization Canonicalization Isolated Storage Isolated Storage ViewState ViewState

4 La necessit à di codice protetto Porto USA colpito da un hacker inglese Diverse aziende hanno dichiarato di aver perso 10 milioni di dollari in un solo attacco "Il recente attacco di un hacker potrebbe aver causato danni a circa 1500 siti Web La pirateria ha causato la perdita di posti di lavoro ed ha provocato danni per 850 milioni di dollari Il virus Sobig ha provocato in tutto il mondo danni pari a 30 miliardi di dollari Gli attacchi costeranno all'economia mondiale 1,6 trilioni di dollari quest'anno

5 Cos' è un Buffer Overrun Si verifica quando i dati superano la dimensione prevista e sovrascrivono altri valori Si verifica quando i dati superano la dimensione prevista e sovrascrivono altri valori È frequente soprattutto nel codice C/C++ non gestito È frequente soprattutto nel codice C/C++ non gestito Può essere di quattro tipi: Può essere di quattro tipi: buffer overrun basato sullo stack buffer overrun basato sullo stack buffer overrun dell'heap buffer overrun dell'heap Sovrascrittura della v-table e del puntatore a funzione Sovrascrittura della v-table e del puntatore a funzione Sovrascrittura del gestore eccezioni Sovrascrittura del gestore eccezioni Può essere sfruttato dai worm Può essere sfruttato dai worm

6 Possibile conseguenzaObiettivo dell'hacker Violazione dell'accesso Realizzare gli attacchi DoS (denial of service) contro i server Instabilità Interferire con il normale funzionamento del software Inserimento di codice Ottenere privilegi per il proprio codice Sfruttare dati aziendali di vitale importanza Eseguire azioni distruttive Possibili conseguenze dei sovraccarichi buffer

7 void UnSafe (const char* uncheckedData) { int anotherLocalVariable; strcpy (localVariable, uncheckedData); } char localVariable[4]; Esempio di sovraccarico buffer basato sullo stack Parte superiore dello stack char[4] int Indirizzo di ritorno

8 I buffer overrun dell'heap Sovrascrivono i dati memorizzati nell'heap Sovrascrivono i dati memorizzati nell'heap Sono pi ù difficili da sfruttare di un buffer overrun Sono pi ù difficili da sfruttare di un buffer overrun Dati Puntatore Dati Puntatore strcpy xxxxxxx xxxxxxx

9 Come difendersi dai buffer overrun (1 di 2) Utilizzare con particolare cautela le seguenti funzioni: Utilizzare con particolare cautela le seguenti funzioni: strcpy strcpy strncpy strncpy CopyMemory CopyMemory MultiByteToWideChar MultiByteToWideChar Utilizzare l'opzione di compilazione /GS in Visual C++ per individuare i sovraccarichi buffer Utilizzare l'opzione di compilazione /GS in Visual C++ per individuare i sovraccarichi buffer Utilizzare strsafe.h per un gestione del buffer pi ù sicura Utilizzare strsafe.h per un gestione del buffer pi ù sicura

10 Come difendersi dai buffer overrun (2 di 2)

11 DEMO

12 Gli errori aritmetici Si verificano quando vengono superati i limiti di una variabile Si verificano quando vengono superati i limiti di una variabile Causano gravi errori in fase di esecuzione Causano gravi errori in fase di esecuzione Vengono spesso sottovalutati Vengono spesso sottovalutati Includono: Includono: Overflow – valore troppo grande per il tipo di dati Overflow – valore troppo grande per il tipo di dati Underflow – valore troppo piccolo per il tipo di dati Underflow – valore troppo piccolo per il tipo di dati

13 Come difendersi dagli errori aritmetici Tenere conto dei limiti del tipo di dati scelto Tenere conto dei limiti del tipo di dati scelto Scrivere codice a prova di attacchi che verifichi la presenza di overflow Scrivere codice a prova di attacchi che verifichi la presenza di overflow Scrivere funzioni sicure e riutilizzabili Scrivere funzioni sicure e riutilizzabili Utilizzare una classe sicura basata su modello (se si scrive codice in C++) Utilizzare una classe sicura basata su modello (se si scrive codice in C++)

14 DEMO

15 Cos' è il CSS? Una tecnica che consente agli hacker di: Una tecnica che consente agli hacker di: Eseguire script dannoso nel browser Web di un client Eseguire script dannoso nel browser Web di un client Inserire tag,,, e Inserire tag,,, e Rubare informazioni sulla sessione Web e cookie di autenticazione Rubare informazioni sulla sessione Web e cookie di autenticazione Accedere al computer client Accedere al computer client Qualsiasi pagina Web che esegue il rendering HTML e contenente input dell'utente è vulnerabile

16 Due impieghi comuni del CSS Attaccare le piattaforme di posta elettronica basate sul Web e i forum Attaccare le piattaforme di posta elettronica basate sul Web e i forum Utilizzo dei tag HTML per reindirizzare informazioni private Utilizzo dei tag HTML per reindirizzare informazioni private

17 Attacchi basati su form (1 di 2) Response.Write("Welcome" & Request.QueryString("UserName"))

18 Attacchi basati su form (2 di 2) idForm.cookie.value=document.cookie; idForm.submit(); > here

19 Come difendersi dagli attacchi CSS Operazioni da non eseguire: Operazioni da non eseguire: Considerare attendibile l'input dell'utente Considerare attendibile l'input dell'utente Attivare l'eco dell'input dell'utente basato sul Web a meno che non sia stato convalidato Attivare l'eco dell'input dell'utente basato sul Web a meno che non sia stato convalidato Memorizzare informazioni segrete nei cookie Memorizzare informazioni segrete nei cookie Operazioni da eseguire: Operazioni da eseguire: Utilizzare l'opzione del cookie HttpOnly Utilizzare l'opzione del cookie HttpOnly Sfruttare le funzionalit à di ASP.NET Sfruttare le funzionalit à di ASP.NET

20 DEMO

21 Cos' è l'SQL Injection? L'SQL Injection è : L'SQL Injection è : L'aggiunta di istruzioni SQL nell'input dell'utente L'aggiunta di istruzioni SQL nell'input dell'utente Viene utilizzato dagli hacker per: Viene utilizzato dagli hacker per: Effettuare la scansione dei database Effettuare la scansione dei database Ignorare l'autorizzazione Ignorare l'autorizzazione Eseguire pi ù istruzioni SQL Eseguire pi ù istruzioni SQL Richiamare stored procedure incorporate Richiamare stored procedure incorporate

22 Esempi di SQL Injection Se la variabile ID viene letta direttamente da una casella di testo di un Web Form o di un form di Windows, l'utente potrebbe immettere: Se la variabile ID viene letta direttamente da una casella di testo di un Web Form o di un form di Windows, l'utente potrebbe immettere: ALFKI1001 ALFKI1001 ALFKI1001' or 1=1 -- ALFKI1001' or 1=1 -- ALFKI1001' DROP TABLE OrderDetail -- ALFKI1001' DROP TABLE OrderDetail -- ALFKI1001' exec xp_cmdshell('fdisk.exe') -- ALFKI1001' exec xp_cmdshell('fdisk.exe') -- sqlString = "SELECT HasShipped FROM" + " OrderDetail WHERE OrderID ='" + ID + "'";

23 Come difendersi dall'SQL Injection Verificare che l'input non sia infetto. Verificare che l'input non sia infetto. Considerare tutto l'input pericoloso fino a quando non viene dimostrato il contrario Considerare tutto l'input pericoloso fino a quando non viene dimostrato il contrario Cercare dati validi e respingere tutto il resto Cercare dati validi e respingere tutto il resto Utilizzare espressioni regolari per rimuovere i caratteri indesiderati Utilizzare espressioni regolari per rimuovere i caratteri indesiderati Eseguire con i privilegi pi ù bassi Eseguire con i privilegi pi ù bassi Non eseguire mai come sa Non eseguire mai come sa Limitare l'accesso a stored procedure incorporate Limitare l'accesso a stored procedure incorporate Utilizzare stored procedure o query con parametri SQL per accedere ai dati Utilizzare stored procedure o query con parametri SQL per accedere ai dati Non attivare l'eco di errori ODBC Non attivare l'eco di errori ODBC

24 DEMO

25 Problemi di Canonicalization Generalmente esistono pi ù metodi per assegnare i nomi Generalmente esistono pi ù metodi per assegnare i nomi Sono disponibili rappresentazioni alternative per: Sono disponibili rappresentazioni alternative per: Nomi file URL Periferiche (ad esempio stampanti) Gli hacker possono sfruttare il codice che consente di effettuare determinate operazioni in base ai nomi file o agli URL Gli hacker possono sfruttare il codice che consente di effettuare determinate operazioni in base ai nomi file o agli URL

26 Problemi di Canonicalization Esempio 1 – Nomi file 1. MyLongFile.txt 2. MyLongFile.txt. 3. MyLong~1.txt 4. MyLongFile.txt::$DATA

27 Esistono molti modi per rappresentare i caratteri su Internet Esistono molti modi per rappresentare i caratteri su Internet Problemi di Canonicalization Esempio 2 – Rappresentazione dei caratteri Equivale a =

28 DEMO

29 © 2002 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.


Scaricare ppt "Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist Microsoft Italy."

Presentazioni simili


Annunci Google