Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten."—  Präsentation transkript:

1 Dominick Baier Security Consultant thinktecture

2 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten Wir 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/ dominick.baier@thinktecture.com

3 Die typischsten Security Probleme Gegenmaßnahmen Coding Techniken Compiler Switches Tools

4 Lassen sich in zwei Kategorien einordnen Eingabe Validierung Buffer Overflows Injection Attacken Encoding / Globalization Probleme Sicherheits-Kontext Administrator vs Standardbenutzer SYSTEM vs Servicekonto Zugriffskontrolllisten UAC

5 Kontroll-KanalDaten-Kanal Console.WriteLine(input);input = "Hello World" Console.WriteLine("Hello World");

6 void main() { char myLongBuffer[256]; myFunction(myLongBuffer); } Stack (bisheriger Stackinhalt) 256 MyLongBuffer Rücksprungadresse Sonstige Daten MyShortBuffer 16 Strings void myFunction(char *input) { char myShortBuffer[16]; strcpy(myShortBuffer, input); } Daten sind zu lang ! MyShortBuffer 16 256 MyShortBuffer Gehackte Adresse Malcode Böser Inhalt von Input: Rücksprung an gehackte Adresse… Malcode ausführen Stack

7 Sichere Libraries Die C Runtime Library ist gut 25 Jahre alt Wurde nicht für Sicherheit designed Lösungsansatz Austauschen der gefährlichen Funktionen durch alternative Implementierungen StrSafe und Safe CRT Bibliotheken Code-Änderungen notwendig Visual Studio gibt C4996 Warnungen aus

8 Ausgangspunkt void Function(char *s1, char *s2) { char temp[16]; strcpy(temp, s1); strcat(temp, s2); } Unter Verwendung von StrSafe errno_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); }

9 Stack (bisheriger Stackinhalt) 256 MyLongBuffer Rücksprungadresse Security Cookie Strings MyShortBuffer Stack 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) ab sub 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

10 /SAFESEH Verhindert die Ausführung ungültiger (überschriebener) Exception-Handler /NXCOMPAT Opt-In für Data Execution Prevention (DEP) /DYNAMICBASE Address Space Layout Randomization (ASLR) Vergabe zufälliger Speicheradressen für Image, Stack und Heap

11 SQL Injection HTML und Script Injection Directory Traversal …

12 Kontroll-KanalDaten-Kanal select userID from users where username = 'input 1 ' and password = 'input 2 ' input 1 = dominick input 2 = geheim select userID from users where username = 'dominick' and password = 'geheim'

13 Kontroll-KanalDaten-Kanal select userID from users where username = 'input 1 ' and password = 'input 2 ' input 1 = dominick' -- input 2 = egal select userID from users where username = 'dominick' -- and password = 'egal'

14 Niemals SQL Statements selbst zusammenbauen Parametrisierte Queries mit SqlCommand anstatt Stored Procedures LINQ to SQL

15 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(); … } 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(); … }

16 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(); … } 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(); … }

17 Kontroll-KanalDaten-Kanal Hello input </html input = dominick Hello dominick </html

18 Kontroll-KanalDaten-Kanal Hello input </html input = dominick Hello dominick </html

19 Daten immer für den entsprechenden Ausgabetyp enkodieren HTML (Attribute) XML (Attribute) URLs JavaScript VBScript Microsoft AntiXSS Library und XSSDetect

20

21 Kontroll-KanalDaten-Kanal string path = "c:\content\"; File.ReadAllText( path + input); input = readme.txt File.ReadAllText(@ "c:\content\readme.txt)

22 Kontroll-KanalDaten-Kanal string path = "c:\content\"; File.ReadAllText( path + input); input =..\inetpub\wwwroot\ web.config File.ReadAllText(@ "c:\content\..\inetpub\wwwroot\ web.config)

23 Flexibilität von Windows macht es äußerst schwierig Diese 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

24 Vermeiden von Dateinamen als Eingabe Ersetzen durch IDs Erzeugen einer Liste von gültigen Dateien Einsatz von CAS static string ReadFile(string filename) { string path = @"c:\content\"; new FileIOPermission( FileIOPermissionAccess.Read, path).PermitOnly(); return File.ReadAllText(path + filename); } static string ReadFile(string filename) { string path = @"c:\content\"; new FileIOPermission( FileIOPermissionAccess.Read, path).PermitOnly(); return File.ReadAllText(path + filename); }

25 Typische Anwendungen/Dienste brauchen kein Administrator Konto SYSTEM Konto Trotzdem viele Anwendungen fehlerhaft Zugriff auf Systemverzeichnisse Zugriff auf HKLM

26 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 entfernt Wird standardmäßig durch 3.5 Kompilierung deaktiviert

27 Code untersuchen Schreiben nur ins Profil und HKCU Virtualization abschalten Immer gewünschter Zugriffsmodus bei Ressourcenzugriffen explizit angeben Standard User Analyzer hilft beim Finden von Problemen

28 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

29 FxCop untersucht regelbasiert managed Code Zwei Varianten Stand-alone VS 2005 integriert

30

31 AppVerifier untersucht unmanaged Code Zugriffe auf Win32 APIs Speicherverwaltung Registry-Zugriffe Dateisystem-Zugriffe NULL DACLs PREfast führt Code Analyse durch /analyze Schalter Wird unterstützt durch SAL (Standard Annotation Language)

32

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

34 © 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.


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

Ähnliche Präsentationen


Google-Anzeigen