Fredrik Hesse Säkerhetskonsult Nexus Technology AB Att skriva säker kod – del 1.

Slides:



Advertisements
Liknande presentationer
Skydda dig mot okända faror
Advertisements

Anneli och Christians Datorskola
Avlusning Debugger (”avlusare”) Breakpoints Watch.
Migrera befintliga system till Windows Azure
system för handläggarstöd
Serverkampanj för mellanmarknaden – genom partnerpresentation: Bild endast för presentatör: visa inte Talare: Partner Presentationens titel: Kraften att.
Basic Security (Grundläggande säkerhet) Methods Of Attack (Attackmetoder)
Föreläsare: Per Sahlin
E-post juni 2013.
Flexicon – Din systempartner
Programmering B PHP Lektion 1
”Ett sätt att distribuera Business Objects via webben”
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Trådlös (o)säkerhet Vanliga missuppfattningar Det krävs dyr utrustning Vi har inte trådlös access Vi är säkra för vi använder kryptering Vi är säkra för.
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
Andreas Carlsson Barvefjord och Carlsson Datakraft AB Svarkråkev Värnamo Tel: Epost: Databasteknik 2.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Metoder i java Det finns två typer av metoder i java
Polymorfism.
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Att programmera i språket Java
NETinfo 2009–10-09 Magnus Persson Epost: Telefon: 046 –
Säkerhet i praktiken – med Windows Server 2003 och XP! Marcus Thorén, MCT, MCSE+Security Security Consultant Nexus Security Consultants Technology Nexus.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Next previous Lite mer om CGI-programmering Innehåll Vad är CGI? Vad är Forms? Vad är Perl? Forms, CGI och Perl. Något om Cookies. Internetprogrammering.
Next previous Lite mer om CGI-programmering Innehåll Vad är CGI? Vad är Forms? Vad är Perl? Forms, CGI och Perl Internetprogrammering F 14 Läs också: Kursboken.
Virus och skräppost
En introduktion till Datakommunikation och Säkerhetstänkande
Databaser i B2KUNO Johan Eklund. Hur går jag vidare? Avancerade tillämpningar:  Analysera data  Generera information Utveckla följande färdigheter:
i olika programmeringsspråk
Programmering B PHP Lektion 2
Föreläsning 5.  Idag  Kap 7 i Dawson  Filer  Felhantering med try…except.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Programmering B PHP Lektion 1 Mahmud Al Hakim Folkuniversitetet
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Internet Styrdatorer och kablar Uppkopplade användare Servrar 182.QRZN.
DATABASHANTERING för programmerare Lektion 3 Mahmud Al Hakim
Wireless Technologies (Trådlös nätverksteknik) Security Considerations (Säkerhetsapaspekter)
NETinfo Magnus Persson Johan Silverup Epost: Telefon: 046 –
A Federation-Ninja’s warstories from the field…
IT-säkerhet Gästföreläsning av Christian Ohlsson 2011.
© Anders Ingeborn IT-säkerhetsprojekt Vinnande strategier.
Föreläsning 14 ”Enkel” Filhantering.
© Anders Ingeborn, Infosec 2000 Penetrationstester Att bryta sig in i andras datorer.
Java servlets och databaskopplingar
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Att skriva säker kod – del 2
Presentationsöversikt Syfte med presentationen: Ge en första introduktion till nyheterna i Windows Vista Målgrupp: TDMs i små till stora organisationer.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Microsoft Dynamics AX (fd Axapta)
Datorer och privat säkerhet (privacy). Innehåll Handel på internet Risker som en användare utsätt för på internet Hur man skyddar sig från attacker Hur.
Security Management John Laerum Instruktör Upprätthålla säkerhetsnivån Group Policies i Active Directory IIS Lockdown tool och IIS 6 VPN karantän i RAS.
Modul 6 Använda Internet för arbete och lärande. Inlärningsmål  6.1 Identifiera metoder för att få åtkomst till Internet.  6.2 Använda webbläsare för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Programmering i C# Laborationer.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
Trådlösa nätverk WPA v1 TKIP EAP Christian Johansson, Robin Nilsson, Jonas Rådström.
Anpassa fri programvara - Frihet ett, hur nyttjar man den? Copyright © 2006, 2007 Marcus Rejås Rejås Datakonsult Jag ger härmed rätten till alla att nyttja.
Datasäkerhet 1.Skydda informationen – Ändra, förstöras eller kopieras 2.Säkerställa driften – Se till att program, datorer, servrar, nätverk och kommunikation.
Presentationens avskrift:

Fredrik Hesse Säkerhetskonsult Nexus Technology AB Att skriva säker kod – del 1

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Behovet av säker kod US port 'hit by UK hacker‘ “ ” “Several corporations said they lost $10 million in a single break-in” “Up to 1,500 websites could have been affected by a recent hack attack” ” “Piracy cost more than 4,300 jobs and $850 million in damage” ” “Sobig virus accounted for $30 billion worth of economic damages worldwide” “Attacks will cost the world economy a whopping $1.6 trillion (US$) this year”

Hotfulla scenarios  Anställda kopplar upp sig till företagets nätverk –Via TP, trådlöst, uppringda förbindelser eller VPN –Företagsdatorer, hem-PC  Anställda kopplar upp sig till andra nätverk –“HotSpots” på internet, partners, bredband  Partners kopplar upp sig till företagets nätverk –Lokal och/eller gemensam autentisering –Anonyma gäster  Nya scenarier och hot

Vad vill vi skydda oss emot?  Internet är grogrunden för: –Tjuvar –Bedragare –Vandaler –Kriminella –Hackers  Du borde inte vara förvånad över att attacker förekommer!

Vanliga attacker Tappad uppkoppling Organisations- attacker Skyddad data Säkerhetsintrång av misstag Automatiserade attacker Hackers Virus, trojaner, maskar “Denial of Service” (DoS) DoS

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

 Existerar primärt i ohanterad kod (C/C++)  Data överskrider förväntad storlek  Fyra vanliga typer: –Stackbaserade buffertöverskrivningar –Heap-baserade överskrivningar –Funktionspekare i “V-table” –Felhantering  Kan utnyttjas av maskar –Robert Morris mask och CodeRed Vad är en buffertöverskrivning?

void UnSafeMethod(const char* uncheckedData) { int anotherLocalVariable; strcpy (localVariable, uncheckedData); } char localVariable[4]; Överst på stacken int char[4] returadress Exempel på buffertöverskrivning

“Heap” överskrivningar Data Pekare Data Pekare strcpy xxxxxxx xxxxxxx  Skriver över data som lagrats på “heapen” –Stackbaserad överskrivning skriver över adresser i stacken  Svårare att utnyttja –En hacker måste lära sig om en funktionspekare är lagrad nära en inmatningsbuffert

Skydd mot buffertöverskrivningar (1/2)  Var försiktig när du använder: –strcpy –strncpy –memcpy  Använd flaggan /GS vid kompilering i Visual C++ för att identifiera överskrivningar –/GS valet är inte en ersättning för försiktig och noggrann programmering  Används strsafe.h för säker bufferthantering

Skydd mot buffertöverskrivningar (2/2)  Kontrollera alla vektorindex –Använd med fördel “wrapper”-klasser –Kan innehålla inbyggt skydd  Kontrollera längden på sökvägar till filer –_MAX_PATH (men var observant)  Skriv inte egna algoritmer för att dela filer –Använd splitpath eller någon liknande  Optimalt är att använda hanterad kod –Men glöm inte bort PInvoke/COM interoperabilitet samt kod som markerats som “unsafe”

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Aritmetiska fel  Aritmetiska fel –Uppstår när begränsningarna för en variabel överskrids –Underskattas och förkastas ofta –Kan leda till allvarliga fel vid exekvering  Exempel på aritmetiska fel inkluderar –“Overflow” –“Underflow”

int Concat(char *buf1, char *buf2, size_t len1, size_t len2){ char buf[256]; if((len1 + len2) > 256) return -1; memcpy(buf, buf1, len1); memcpy(buf + len1, buf2, len2);... }  Hur stor är en size_t?  Är en size_t teckenbestämd?  Vad händer om: len1 == 0xFFFFFFFE len2 == 0x Exempel på aritmetiska fel

Skydd mot aritmetiska fel  För att förhindra aritmetiska fel: –Var medveten om begränsningarna på de datatyper som du använder –Skriv defensiv kod, kontrollera efter “overflows” –Överväg att skriva säkra funktioner som kan återanvändas Till exempel: SafeAdd –Överväg att skapa en säker “template”-klass om du använder C++ Till exempel: class SafeInt

if (A + B > MAX) return -1; // Kontrollera fel if (A + B >= A && A + B < MAX) { // coolt! } eller // Skapa egna säkra funktioner if UAdd(A,B,&R) { // coolt, resultatet i R } eller // dleblanc (SafeInt.hpp) SafeInt A = 0x5000; SafeInt B = 0xffff; if (A + B < MAX) { } Skydd mot aritmetiska fel

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Vad är “Cross-Site Scripting”?  XSS ger hackers möjligheten att exekvera skadliga skript i en klients webbläsare  Vilken webbsida som helst som renderar HTML och innehåller inmatning från användare är sårbar  Hackers kan föra in,, och taggar  Hackers kan potentiellt stjäla information om sessioner och autentiserings-cookies och då få tillgång till den lokala klientens dator

Två vanliga användningsområden  Attackera webbaserade plattformar för epost och diskussionsgrupper –Hackern för in HTML-taggar i meddelanden och poster i diskussionsgrupper  Använda HTML -taggar för att skicka privat information vidare –Hackern lägger till HTML -taggar i hyperlänkar som går till en legitim webbsida. Attributet “Action” på -taggen leder till hackerns webbsida och privat information kan skickas dit.

XSS exempel Aktörerna Bosse, vår hacker Maria, en vanlig användare

Response.Write(“Välkommen " & Request.QueryString("UserName")) Formulärbaserade attacker (1/2)

idForm.cookie.value=document.cookie; idForm.submit(); > here Formulärbaserade attacker (2/2)

Skydd mot XSS (1/2)  Lita inte på inmatning från användare –Validera all data som ges av användare –Var extra noggrann med data som innehåller eller  Eka inte blint tillbaka inmatning från webben –Eka bara när det behövs –Validera data innan du ekar  Lagra inte känslig information i “cookies” –Relativt enkelt för hackers att ta en “cookie”

Skydd mot XSS (2/2)  Använd valet HttpOnly för cookies –Hindrar åtkomst från skript på klientsidan  Använd säkerhetsattributet i –Stödjer zon inställningar i Internet Explorer  Definera en explicit teckenuppsättning för sidan  Använd funktioner i ASP.NET –Använd “validateRequest” för att testa taggar –Använd “HTMLEncode” och “URLEncode” för att filtrera det som skrivs tillbaka

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Vad är “SQL Injection”?  “SQL injection” uppkommer när användare kontrollerar kriterier i SQL-program och hackers matar in värden som förändrar det asviktliga syftet med programmet  Fyra vanliga exempel på “SQL Injection”: –Utforska databaser –Kringgå auktorisering –Exekvera flera SQL-program –Anropa inbyggda lagrade procedurer

string Status = "No"; string sqlstring =""; try { SqlConnection sql= new source=localhost; user id=sa;password=password;"); sql.Open(); sqlstring="SELECT HasShipped" + " FROM detail WHERE ID='" + Id + "'"; SqlCommand cmd = new SqlCommand(sqlstring,sql); if ((int)cmd.ExecuteScalar() != 0) Status = "Yes"; } catch (SqlException se) { Status = sqlstring + " failed\n\r"; foreach (SqlError e in se.Errors) { Status += e.Message + "\n\r"; } } catch (Exception e) { Status = e.ToString(); } “SQL Injection” i C#

Dim Status As String = "No" Dim sqlstring As String Try Dim sql As New SqlConnection( _ "data source=localhost; user id=sa;password=password") sqlstring = "SELECT HasShipped FROM detail WHERE ID='“ + Id + "'" sql.Open() Dim cmd As New SqlCommand(sqlstring, sql) If cmd.ExecuteScalar() <> 0 Then Status = "Yes" End If Catch se As SqlException Status = sqlstring + " failed” + System.Environment.NewLine For i As Integer = 0 To se.Errors.Count - 1 Status += se.Errors(i).Message + System.Environment.NewLine Next Catch e As Exception Status = e.ToString() End Try “SQL Injection” i VB.NET

SELECT HasShipped FROM detail WHERE ID= '1001' SELECT HasShipped FROM detail WHERE ID= '1001' or 1=1 -- ' En bussig en skriver 1001 En mindre bussig en skriver 1001’ or 1=1 - - Hur används ”SQL Injection”? (1/3)

SELECT HasShipped FROM detail WHERE ID= '1001' drop table orders -- ' SELECT HasShipped FROM detail WHERE ID= '1001' exec xp_cmdshell('fdisk.exe') -- ' En riktigt elak en skriver 1001' drop table orders -- En person vid namn “ondskan” skriver 1001' exec xp_cmdshell(‘fdisk.exe’) -- Om en server är nere i 5 timmar Och vi har normalt 200 transaktioner i timmen Varje transaktion är på 300 kronor i förlorade intäkter Hur används ”SQL Injection”? (2/3)

Hur används ”SQL Injection”? (3/3)  SQL Injection och DoS ALFKI’; exec master..xp_cmdshell ’ipconfig /release SELECT * FROM customers WHERE ID= 'ALFKI’; exec master..xp_cmdshell ’ipconfig /release' SELECT * FROM customers WHERE ID = ‘" & customerSearch & “ ‘ "

Skydd mot “SQL Injection”  Validera och sanera ALL inmatning –Anta att inmatning är ond tills motsatsen bevisats –Leta efter korrekt data och förkasta allt annat –Fundera på att använda reguljära uttryck  Exekvera med så lite rättigheter som möjligt –Exekvera aldrig som ‘sa’ –Begränsa åtkomsten till lagrade procedurer  Favorisera “SQL parameterized queries” –Bygg inte program med ihopfogning av strängar  Skicka inte tillbaka meddelanden från ODBC

SqlDataAdapter myCommand = new SqlDataAdapter("SELECT au_lname, au_fname FROM Authors WHERE au_id conn); SqlParameter parm = SqlDbType.VarChar, 11); parm.Value = Login.Text;  Bygg en parameteriserad fråga i C#  Bygg en parameteriserad fråga i VB Dim myCommand As New SqlDataAdapter("SELECT au_lname, au_fname FROM Authors WHERE au_id conn) Dim parm As SqlParameter = SqlDbType.VarChar, 11) parm.Value = Login.Text Skydd mot “SQL Injection”

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

“Canonicalization”  Det finns fler än ett sätt att namnge saker  Alternativa representationer finns för: –Filnamn –URL:er  Hackers kan utnyttja kod där beslut baserats på filnamn eller URL:er

1. MinStoraFil.txt 2. MinStoraFil.txt. 3. MinSto~1.txt 4. MinStoraFil.txt::$DATA “Canonicalization”

Är det samma som.: = “Canonicalization”  Det finns många sätt att representera tecken på Internet

Skydd mot “Canonicalization”  Basera aldrig beslut på namn –Det finns ett antal sätt att beskriva sökvägar och URL’er –Chansen finns att du gör fel  Använd säkerheten i filsystemet –Begränsa åtkomst till privat data  Slå av “Parent Paths” i IIS

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

 Saker som kan bli fel –Att skapa en egen –Svaga algoritmer –Felaktigheter i krypteringsalgoritmer –Säkerheten på nyckeln –Livslängden på nyckeln –Den mänskliga faktorn Svagheter vid kryptering Nyckel KlartextKryptotext Algoritm Jag behöver tre av ovanstående för att ta ditt data!

 Om det går, använd DPAPI för att slippa hantera nycklar  Om nyckelhantering krävs –Byt nycklar regelbundet, återanvänd inte! –Använd ACL:er för att begränsa åtkomst –Använd större nycklar för ökad säkerhet  Implementera INTE dina egna kryptografiska rutiner Kryptografiska hackningsförsök

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Utmaningar med Unicode  Vanliga misstag –Behandla ett Unicode-tecken som en enstaka byte –Felberäkning av behövd storlek på bufferts –Missanvändning av MultiByteToWideChar –Validering innan konvertering Alla tecken i Unicode kan inte översättas till ASCII  Resultat –Buffertöverskrivningar –Potentiellt farliga teckensekvenser kommer igenom nätet

 Beräkna storlek på buffert med sizeof(WCHAR)  Glöm inte GB18030 (4 bytes per tecken)  Konvertera från Unicode till ASCII och validera efteråt  Använd IsNLSDefinedString vid validering  Använd MultiByteToWideChar korrekt –Erbjud en tillräckligt stor buffert Skydd mot utmaningar i Unicode

Vad kommer vi gå igenom  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

 Brist i applikationen eller operativsystem  CPU brist (“svält”)  Minnesbrist  Resursbrist  Nätverksbrist “Denial of Service” attacker

Skydda mot DOS-attacker  Designa dina applikationer att vara säkra från första dagen –Ha eventuella planer på plats direkt  Lita inte på användarinmatning  Hantera fel intelligent –Fånga fel –(Try-Catch-Finally)  Gör säkerhetstester  Förvänta det oförväntade

Sammanfattning  Behovet av säker kod  Hur skyddar vi oss mot: –Minnesutmaningar –Aritmetiska fel –“Cross-site Scripting” –“SQL Injection” –“Canonicalization” utmaningar –Svagheter vid kryptering –Utmaningar med Unicode –“Denial of Service” attacker

Kontrollskott  Vilken flagga används i VS.NET för att skydda mot buffertöverskrivningar? –Svar:  Vem drabbas av XSS? –Svar:  Hur många har skrivit egna krypteringsalgoritmer? –Svar:

Nästa presentation  Att skriva säker kod –Rekommendationer och riktlinjer