dominick baier security consultant thinktecture. 2 wir unterstützen software-entwickler und...
TRANSCRIPT
![Page 1: Dominick Baier Security Consultant thinktecture. 2 Wir unterstützen Software-Entwickler und Architekten bei der Realisierung von.NET- und Web Services-Projekten](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022070310/55204d7549795902118ca060/html5/thumbnails/34.jpg)
© 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.