Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

5 Security-Todsünden in der Softwareentwicklung Dirk Primbs Developer Evangelist Microsoft Deutschland GmbH

Ähnliche Präsentationen


Präsentation zum Thema: "5 Security-Todsünden in der Softwareentwicklung Dirk Primbs Developer Evangelist Microsoft Deutschland GmbH"—  Präsentation transkript:

1 5 Security-Todsünden in der Softwareentwicklung Dirk Primbs Developer Evangelist Microsoft Deutschland GmbH

2 Agenda 5 Sünden Demos Fazit

3 IT-Sicherheit Richtlinien, Verfahren und Bewusstsein Betriebssystemhärtung, Authentifizierung, Patchverwaltung, HIDS Firewalls, VPN-Quarantäne Sicherheitskräfte, Schlösser, Überwachungsgeräte Netzwerksegmente, IPSec, NIDS Anwendungshärtung, Antivirussoftware ACL, Verschlüsselung Benutzerschulung Physische Sicherheit Perimeter Internes Netzwerk Host Anwendung Daten

4 Spot the security bug error_status_t _RemoteActivation(WCHAR *pwszObjectName,... ) { *phr = GetServerPath(pwszObjectName, &pwszObjectName); … } HRESULT GetServerPath(WCHAR *pwszPath, WCHAR **pwszServerPath ){ WCHAR * pwszFinalPath = pwszPath; WCHAR wszMachineName[MAX_COMPUTERNAME_LENGTH_FQDN + 1]; hr = GetMachineName(pwszPath, wszMachineName); *pwszServerPath = pwszFinalPath; } HRESULT GetMachineName( WCHAR * pwszPath, WCHAR wszMachineName[MAX_COMPUTERNAME_LENGTH_FQDN + 1]) { pwszServerName = wszMachineName; LPWSTR pwszTemp = pwszPath + 2; while ( *pwszTemp != L'\\' ) *pwszServerName++ = *pwszTemp++; !!! Port 135 (Z.B. aus dem Internet)

5 Sünde #1: Der Buffer Overrun

6 Buffer Overrun: Das Prinzip [1] void main() { char myLongBuffer[256]; myFunction(myBuffer); } void myFunction(char *myString) { char myShortBuffer[16]; strcpy(myShortBuffer, myString); } Was passiert, wenn der übergebene String größer als 16 Zeichen ist?

7 Buffer Overrun: Das Prinzip [2] void main() { char myLongBuffer[256]; myFunction(myLongBuffer); } Stack (bisheriger Stackinhalt) 256 MyLongBuffer Rücksprungadresse Sonstige Daten MyShortBuffer 16 Strings void myFunction(char *myString) { char myShortBuffer[16]; strcpy(myShortBuffer, myString); } Daten sind zu lang ! MyShortBuffer MyShortBuffer Gehackte Adresse Viruscode Böser Inhalt von MyShortBuffer: Rücksprung an gehackte Adresse… Virus ausführen Stack

8 Ein erprobter Ansatz Quelle: West Virginia Office of Miners Health, Safety and Training Bergarbeiter mit Kanarienvogel (Welsh Miners Canary) Prinzip: Vogel tot = zuviel Methangas

9 Maßnahmen gegen BOs Bestimmte C/C++ Kommandos sind besonders anfällig strcpy, gets, scanf, sprintf, strcat, … BOs werden in Managed Code durch Laufzeitchecks verhindert. Compilerswitch /GS aktiviert in Visual C/C++ verbessertes Stackhandling Static Analysis mit Prefast

10 Compilerswitch /GS 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 *myString) { char myShortBuffer[16]; strcpy(myShortBuffer, myString); } 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

11 Spot the security bug void LookupPath(string computer, string path) { const int max_size = 63; byte len = (byte)(computer.Length + path.Length); if (len > max_size) throw new SecurityException("Pfad zu lang!"); // irgendwas sinnvolles }

12 Sünde #2: Integer Overflow

13 Das Prinzip [1] Implizite und explizite Casts können Werte unerwartet verändern In jeder gebräuchlichen Programmiersprache finden sich derartige Überläufe vorzeichenbehaftete Datentypen sind hauptsächlich anfällig

14 Das Prinzip [2] Vorzeichenbehaftete Datentypen nutzen das erste Bit als Vorzeichen Beim Cast von unsignierte auf signierte Datentypen ändert sich so die Bedeutung des Datums Beim Upcast wird das oberste Bit um ein Vorzeichenbit erweitert

15 Demo: Arithmetic Overflows

16 Spot the security bug CREATE PROCEDURE nvarchar(128)) AS nchar(256) nchar(256) ccnum from cust where id= + ccnum from cust where id= +

17 Sünde #3: Command Injection

18 Das Prinzip Durch geschickte Wahl von Benutzereingaben den Sinn damit arbeitender Operationen verändern Prominente Vertreter: SQL Injection Format String Probleme Cross Site Scripting

19 Demo: Command Injection

20 Spot the security Bug string status = "No"; string sqlstring = ""; try { // SQL Zugriffscode // SQL Zugriffscode } catch (SqlException se) { Status = sqlstring + " failed\r\n"; Status = sqlstring + " failed\r\n"; foreach (SqlError e in se.Errors) foreach (SqlError e in se.Errors) Status += e.Message + "\r\n"; Status += e.Message + "\r\n";} if (Status.CompareTo("No") != 0) { Response.WriteLine(Status); Response.WriteLine(Status);}

22 Lösung... try { // SQL Zugriffscode // SQL Zugriffscode } catch (SqlException se) { Status = sqlstring + " failed\r\n"; Status = sqlstring + " failed\r\n"; foreach (SqlError e in se.Errors) foreach (SqlError e in se.Errors) Status += e.Message + "\r\n"; Status += e.Message + "\r\n"; WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsIdentity user = WindowsIdentity.GetCurrent(); WindowsPrincipal prin = new WindowsPrincipal(user); WindowsPrincipal prin = new WindowsPrincipal(user); if (prin.IsInRole(WindowsBuiltInRole.Administrator)) if (prin.IsInRole(WindowsBuiltInRole.Administrator)) Response.WriteLine(Status); Response.WriteLine(Status); else { else { Response.Write("An error occurred, please bug your admin"); Response.Write("An error occurred, please bug your admin"); EventLog.WriteEntry("SqlApp", Status, EventLogEntryType.Error); EventLog.WriteEntry("SqlApp", Status, EventLogEntryType.Error); }}

23 Das Problem Dem Nutzer wird zu viel Information präsentiert Versehentlich => z.B. Fehlermeldungen Absichtlich => Nutzerdaten Warum ist das problematisch? Hacker können zusätzliche Informationen erlangen die Angriffe erleichtern! Datenschutz!

24

25

26

27

28 TMI – Too Much Information Benutzername oder Paßwort falsch? Versionsinformationen verwendeter Software IP-Adressen, MAC-Adressen, etc... Pfade Genaue Fehlermeldungen

29 Abhilfe? Informationen zur Fehlersuche an vertrauenswürdiger Stelle ablegen EventLog Ggf. Geeignet abgesichertes Logfile Informationen nur an Administratoren ausgeben

30 Spot the security bug

31 Sünde #5: Schlechte Bedienbarkeit

32 Spot the security bug Salopp übersetzt: Klick Ja, und alles geht, klick Nein und Du hast nur Ärger mit der Seite

33

34

35

36 Zusammenfassung Viele Sicherheitsprobleme lassen sich einfach verhindern Kein Vertrauen in Eingabedaten! Schon während der Planung mögliche Angriffsszenarien berücksichtigen Das Gesamtsystem ist immer so sicher wie sein schwächstes Glied

37 Weitere Informationen 19 Deadly Sins Of Software Security ISBN Microsoft Security Developer Center

38 Fragen?

39


Herunterladen ppt "5 Security-Todsünden in der Softwareentwicklung Dirk Primbs Developer Evangelist Microsoft Deutschland GmbH"

Ähnliche Präsentationen


Google-Anzeigen