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

Slides:



Advertisements
Ähnliche Präsentationen
OmsCube Objektverwaltung, basierend auf einem relationalen Datenbankmanagementsystem.
Advertisements

M a r c – o l i v e r p a h l Informatik I – Kapitel 7 Klassen und höhere Datentypen Zusammenfassung des Kapitel 7 Küchlin, Weber, Einführung in die Informatik,
der Universität Oldenburg
Klassen - Verkettete Liste -
PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,
1 Datenbankapplikationen 9.1MS Visio 9.2MS Access 9.3Embedded SQL 9.4JDBC 9.5Cold Fusion 9.6PHP.
PL/SQL - Kurze Einführung -.
JPQL Java Persistence Query Language
Agenda Sitzung 2 für den Programmaufbau
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
5 Security-Todsünden in der Softwareentwicklung
Student Technology Conference 2004 Daniel Kirstenpfad Writing Secure Code.
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Microsoft Academic Program Datenzugriff mit Framework 2.0 Student Technology Conference 2005.
Zusammenfassung des Kapitels 8
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Seite 1Maria, Philipp, Herbert Seite 1 Fitnessplaner Ziele: >Fitnessplaner für Onlinebetrieb >Registrierung >individuelle Trainingsplanerstellung.
Dipl. Inf. (FH) Paul Mizel Compilerbau.NET Compiler / Codegeneratoren / Skriptsprachen.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Dynamische Webseiten Java servlets.
PL/SQL - Programmierung von Programmeinheiten. © Prof. T. Kudraß, HTWK Leipzig Gespeicherte Prozeduren – Eine Prozedur ist ein benannter PL/SQL Block,
Objektorientierte Programmierung JDK-Klassenbibliothek
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
.NET – Quo Vadis? Dariusz Parys Developer Group Microsoft GmbH.
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
Presenter: Daniel Walzenbach Technologieberater
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Systemcalls (Systemaufrufe)
Metro-Style Apps mit Expression Blend 5 für HTML designen Christian Moser User Experience Designer Zühlke Engineering AG
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Automated Software Testing
Martin LöfflerMurat Yilmaz Labor Informationstechnologie.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
ORMapper: NHibernate Henning Eiben
GOLF3000 Datenbankhandling. Einleitung Vorstellung Team Eckdaten des Projekts Technischer Hintergrund Datenbanksystem ERD Datenbankanbindung.
Developer Day Webseiten auf Windows Azure hosten Britta Labud bbv Software Services AG Roland Krummenacher bbv Software Services AG.
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH.
Frank Fischer + Bernhard Frank Microsoft Deutschland GmbH.
MVVM in Windows 8 und Windows Phone 8
Grundlagen der Informatik 4 Lehrstuhl für Betriebssysteme 1 Wie werden Funktionen realisiert? Beispiel: int maximum(int x, int y) { int j = x; if (y >
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
XML IV: Cocoon 2.
Linker & Loader in .NET August Steinbacher.
Real Time Operating System
Computerorientierte Physik VORLESUNG
Einführung in das Wissenschaftliche Arbeiten Andreas Hechenblaickner Programmiersprache Eiffel
Jan-Cornelius Molnar Student Partner.
Softwaresponsoren Mediasponsoren. Vorstellung KnowledgeCenter Neue Sprachfeautres in VB 9.0 LINQ to SQL in der Praxis.
Making people work together! Folie 1 NEXPLORE AG Stefan von Niederhäusern Einfache Anwendung der SuisseID durch das Software Development KIT
Compiled Queries: LINQ-Abfragen mit Pegasus-Stiefeln © msg systems ag, August Gordon Breuer IT Consultant & Software Engineer Travel & Logistics.
CuP - Java Zwölfte Vorlesung Klassen – Komposition und Vererbung Freitag, 15. November 2002.
Hacking InfoPoint Jörg Wüthrich Infopoint - Hacking - Jörg Wüthrich 2/26 Inhalte Rund um das Thema Hacking Angriffs-Techniken Session.
Informatik Grundlagen, WS04, Seminar 7
RateMe Slides. Ablauf Präsentation des Konzepts (5-10 min) Demonstration der laufenden Software (5-10 min) Fazit der gesammelten Erkenntnisse.
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
Programmiervorkurs WS 2014/15 Methoden
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Quelle: xkcd.com SQL Injections.
Informatik II – Übung 4 Gruppe 3
Pentestlab — Bufferoverflows dud.inf.tu-dresden.de
 Präsentation transkript:

Dominick Baier Security Consultant thinktecture

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

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

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

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

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 MyShortBuffer Gehackte Adresse Malcode Böser Inhalt von Input: Rücksprung an gehackte Adresse… Malcode ausführen Stack

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

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); }

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

/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

SQL Injection HTML und Script Injection Directory Traversal …

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'

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'

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

private bool CheckUser(string name, string passwordHash) { SqlCommand cmd = new SqlCommand("dbo.GetUser"); cmd.CommandType = CommandType.StoredProcedure; SqlParameter nameParam = new SqlParameter() { ParameterName = Value = name, SqlDbType = SqlDbType.NVarChar }; SqlParameter pwdParam = new SqlParameter() { ParameterName = 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 = Value = name, SqlDbType = SqlDbType.NVarChar }; SqlParameter pwdParam = new SqlParameter() { ParameterName = Value = passwordHash, SqlDbType = SqlDbType.NVarChar }; cmd.Parameters.AddRange(new SqlParameter[] { nameParam, pwdParam }); SqlDataReader reader = cmd.ExecuteReader(); … }

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

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

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

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

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

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

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

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 new FileIOPermission( FileIOPermissionAccess.Read, path).PermitOnly(); return File.ReadAllText(path + filename); } static string ReadFile(string filename) { string path new FileIOPermission( FileIOPermissionAccess.Read, path).PermitOnly(); return File.ReadAllText(path + filename); }

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

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

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

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

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

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)

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

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