Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und...

34
Secure Coding mit Visual Studio 2008 Dominick Baier Security Consultant thinktecture

Transcript of Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und...

Page 1: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Secure Codingmit Visual Studio 2008

Dominick BaierSecurity Consultantthinktecture

Page 2: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

2

Dominick Baier und thinktecture

Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von .NET- und Web Services-ProjektenWir versuchen, am Puls der Zeit zu bleiben und gleichzeitig die heutigen Probleme mit heutiger Technologie zu lösen

Meine Spezialgebiete sind Sicherheit in verteilten Anwendungen, Identitäts-Management sowie die Windows/.NET Sicherheits-APIs und Technologien

http://www.thinktecture.com/http://www.leastprivilege.com/[email protected]

Page 3: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Agenda

Die typischsten Security ProblemeGegenmaßnahmenCoding TechnikenCompiler SwitchesTools

Page 4: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Die typischsten Probleme

Lassen sich in zwei Kategorien einordnen

Eingabe ValidierungBuffer OverflowsInjection AttackenEncoding / Globalization Probleme

Sicherheits-KontextAdministrator vs StandardbenutzerSYSTEM vs ServicekontoZugriffskontrolllistenUAC

Page 5: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Typische ProblemeEingabe Validierung

Kontroll-Kanal Daten-Kanal

Console.WriteLine(input);

input = "Hello World"

Console.WriteLine("Hello World");

Page 6: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Buffer Overrun: Das Prinzip

void main() { char myLongBuffer[256]; myFunction(myLongBuffer);}

Stack

(bisheriger Stackinhalt)

256MyLongBuffer

Rücksprungadresse

Sonstige Daten

MyShortBuffer 16 Str

ing

s

void myFunction(char *input) { char myShortBuffer[16]; strcpy(myShortBuffer, input); }

Daten sind zu lang !

MyShortBuffer 16256

MyShortBuffer

Gehackte Adresse

Gehackte AdresseMalcode

„Böser“ Inhalt von Input:

Rücksprung an gehackte Adresse…

Malcode ausführen

Sta

ck

Page 7: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Sichere LibrariesDie C Runtime Library ist gut 25 Jahre alt Wurde nicht für Sicherheit designed

LösungsansatzAustauschen der „gefährlichen“ Funktionen durch alternative ImplementierungenStrSafe und Safe CRT BibliothekenCode-Änderungen notwendigVisual Studio gibt C4996 Warnungen aus

Page 8: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Beispiel: Safe CRT

Ausgangspunktvoid Function(char *s1, char *s2) { char temp[16]; strcpy(temp, s1); strcat(temp, s2);}

Unter Verwendung von StrSafeerrno_t Function(char *s1, char *s2) { char temp[16]; errno_t err = strcpy_s(temp, _countof(temp), s1); if (!err) return err; return strcat_s(temp, _countof(temp), s2);}

Page 9: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Compilerswitch /GS

Stack

(bisheriger Stackinhalt)

256MyLongBuffer

Rücksprungadresse

Security Cookie

Str

ing

s

MyShortBuffer

Sta

ck

Prolog: Alloziiert Speicher auf dem Stack für lokale Variablen

sub esp,20h

Epilog: Führt Rücksprung durch

add esp,20h ret

void myFunction(char *input) { char myShortBuffer[16]; strcpy(myShortBuffer, input); }

Prolog: Alloziiert Speicher auf dem Stack für lokale Variablen und speichert Zufallswert für Security Cookie (Canary) absub esp,24h mov eax,dword ptr [___security_cookie (408040h)] xor eax,dword ptr [esp+24h] mov dword ptr [esp+20h],eax Epilog: Prüft den Security Cookie (Canary) und führt anchließend Rücksprung durch mov ecx,dword ptr [esp+20h] xor ecx,dword ptr [esp+24h] add esp,24h jmp __security_check_cookie (4010B2h)

MyShortBuffer 16

Page 10: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Andere Speicherschutz-Mechanismen

/SAFESEHVerhindert die Ausführung ungültiger (überschriebener) Exception-Handler

/NXCOMPATOpt-In für Data Execution Prevention (DEP)

/DYNAMICBASEAddress Space Layout Randomization (ASLR)Vergabe zufälliger Speicheradressen für Image, Stack und Heap

Page 11: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Injection Attacken

SQL InjectionHTML und Script InjectionDirectory Traversal…

Page 12: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

SQL Injection

Kontroll-Kanal Daten-Kanal

select userID from users where

username = 'input1'and password =

'input2'

input1 = dominickinput2 = geheim

select userID from users where username = 'dominick'

and password = 'geheim'

Page 13: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

SQL Injection

Kontroll-Kanal Daten-Kanal

select userID from users where

username = 'input1'and password =

'input2'

input1 = dominick' --input2 = egal

select userID from users where username = 'dominick' --

and password = 'egal'

Page 14: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Niemals SQL Statements selbst „zusammenbauen“

Parametrisierte Queries mit SqlCommand anstattStored ProceduresLINQ to SQL

Page 15: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

SqlCommand und SPROCs

private bool CheckUser(string name, string passwordHash){ SqlCommand cmd = new SqlCommand("dbo.GetUser"); cmd.CommandType = CommandType.StoredProcedure;

SqlParameter nameParam = new SqlParameter() { ParameterName = "@Name", Value = name, SqlDbType = SqlDbType.NVarChar };

SqlParameter pwdParam = new SqlParameter() { ParameterName = "@PasswordHash", Value = passwordHash, SqlDbType = SqlDbType.NVarChar };

cmd.Parameters.AddRange(new SqlParameter[] { nameParam, pwdParam }); SqlDataReader reader = cmd.ExecuteReader();

…}

Page 16: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

LINQ to SQL

Benutzt SqlCommand unter der Haube

private static bool CheckUser(string name, string passwordHash){ UsersDataContext context = new UsersDataContext();

int userId = (from u in context.Users where u.Name.Equals(name) && u.PasswordHash.Equals(passwordHash) select u.UserId).Single(); …}

Page 17: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

HTML/Script Injection

Kontroll-Kanal Daten-Kanal

<html> Hello input</html

input = dominick

<html> Hello dominick</html

Page 18: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

HTML/Script Injection

Kontroll-Kanal Daten-Kanal

<html> Hello input</html

input = <h1>dominick</h1>

<html> Hello <h1>dominick</h1></html

Page 19: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Daten immer für den entsprechenden Ausgabetyp enkodieren

HTML (Attribute)XML (Attribute)URLsJavaScriptVBScript

Microsoft AntiXSS Library und XSSDetect

Page 20: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

XSS Detect

Page 21: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Directory Traversal

Kontroll-Kanal Daten-Kanal

string path = "c:\content\";File.ReadAllText( path + input);

input = readme.txt

File.ReadAllText(@ "c:\content\readme.txt)

Page 22: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Directory Traversal

Kontroll-Kanal Daten-Kanal

string path = "c:\content\";File.ReadAllText( path + input);

input = ..\inetpub\wwwroot\web.config

File.ReadAllText(@ "c:\content\..\inetpub\wwwroot\ web.config)

Page 23: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Flexibilität von Windows macht es äußerst schwierigDiese Pfade sind identisch:

..\privat\geheim.doc

..%5c%5cprivate%5cgeheim.doc%2e.\privat\geheim.doc%25%02%54.\privat\geheim.doc..\privat\geheim.doc...\privat\geheim.doc::$data

Page 24: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Vermeiden von Dateinamen als Eingabe

Ersetzen durch IDsErzeugen einer Liste von gültigen DateienEinsatz von CASstatic string ReadFile(string filename)

{ string path = @"c:\content\";

new FileIOPermission( FileIOPermissionAccess.Read, path).PermitOnly();

return File.ReadAllText(path + filename);}

Page 25: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Typische ProblemeSicherheits-Kontext

Typische Anwendungen/Dienste brauchen kein

Administrator KontoSYSTEM Konto

Trotzdem viele Anwendungen fehlerhaft

Zugriff auf SystemverzeichnisseZugriff auf HKLM

Page 26: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Sicherheits-Kontext

Vista läuft im Standard-Benutzer Modus

Entweder „echter“ Standard-Benutzer oder UAC

„Virtualization“ Feature bietet begrenzte Kompatibiliät

Wird in der Version nach Vista entferntWird standardmäßig durch 3.5 Kompilierung deaktiviert

Page 27: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Gegenmaßnahmen

Code untersuchenSchreiben nur ins Profil und HKCU

Virtualization abschalten

Immer gewünschter Zugriffsmodus bei Ressourcenzugriffen explizit angeben

Standard User Analyzer hilft beim Finden von Problemen

Page 28: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Analyse-Werkzeuge

Nie vergessen: Tools machen keine Software (automatisch) sicher

Analyse-Werkzeuge adressieren bekannte Schwachstellen

und diese auch nur in ganz bestimmten Mustern

Trotzdem hilfreich um Probleme besser zu verstehen

Page 29: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Code-Analyse mit FxCop

FxCop untersucht regelbasiert managed Code

Zwei VariantenStand-aloneVS 2005 integriert

Page 30: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

FxCop Security Regeln

Page 31: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

AppVerifier und PREfast

AppVerifier untersucht unmanaged CodeZugriffe auf Win32 APIsSpeicherverwaltungRegistry-ZugriffeDateisystem-ZugriffeNULL DACLs

PREfast führt Code Analysedurch

/analyze SchalterWird unterstützt durch SAL(Standard Annotation Language)

Page 33: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

Fazit

95% aller Sicherheitslücken entstehen durch bekannte und wohl verstandene ProgrammierfehlerGegenmaßnahmen sind meist mechanisch durchzuführenHalten Sie die benötigten Privilegien für Ihren Anwendungen und Dienste so niedrig wie möglich

Page 34: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten.

© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after

the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.