Sicherheitsaspekte bei der C-Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
SQL Injection – Funktionsweise und Gegenmaßnahmen
Advertisements

Einführung in die Programmiersprache C/C++
Datenbankzugriff über ISAPI-Webservererweiterungen
der Universität Oldenburg
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Die 20 beliebtesten Versäumnisse hinsichtlich Sicherheit in der Softwareentwicklung EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: / 60850,
Das secologic Projekt im Kurzüberblick - Stand Sept
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Universität Stuttgart Institut für Kernenergetik und Energiesysteme Was ist Refactoring? Bevor man die Integration angeht, mag es angebracht sein, den.
es gibt (fast) nichts, was nicht anders gemacht werden könnte
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Dynamischer Speicher und Struktur
1 Named Pipes alias FIFO Haben einen Eintrag im Dateisystem und sind somit durch Zugriffsrechte identifizierbar Ermöglichen die Kommunikation zwischen.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
Oracle WebServer - Einführung. © Prof. T. Kudraß, HTWK Leipzig Oracle Web Application Server HTML WebServer ® File system Static HTML PL/SQL Packages.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Modulare Programmierung
Arrays,Strings&Pointer in C/C++
Einführung MySQL mit PHP
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Don`t make me think! A Common Sense Approach to Web Usability
GWDG – Kurs Parallelrechner-Programmierung mit MPI MPI Punkt-zu-Punkt-Kommunikation Oswald Haan
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Debugging in Lua Universität zu Köln Re-usable Content in 3D und Simulationssystemen Prof. Dr. Manfred Thaller Referent: Artur Wilke.
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
What is todays date and when is your birthday Ask someone what star sign they are and answer Say and ask for the time Say what you do for your birthday.
You need to use your mouse to see this presentation © Heidi Behrens.
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
HORIZONT 1 XINFO ® Das IT - Informationssystem Assembler HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 /
Dynamische Datentypen
Staatsballett Berlin Ein Verbesserungskonzept für den Social- Media Auftritt Your picture here.
Präsentation von Lukas Sulzer
ADAT©2004 Dipl. - Ing. Walter SabinSeite: 1 Version 1.0a Einführung in Reguläre Ausdrücke.
Die Olympischen Sommerspiele 2012 (offiziell Spiele der XXX. Olympiade genannt) sollen vom 27. Juli bis 12. August 2012 in London stattfinden. London ist.
Universität StuttgartInstitut für Wasserbau, Lehrstuhl für Hydrologie und Geohydrologie Copulas (1) András Bárdossy IWS Universität Stuttgart.
Prüfungen neu. Änderungen Probesystem 4 Prüfungen pro Schuljahr Jeweils ganze Lektion, keine Fragemöglichkeit am Anfang der Prüfungslektion Taschenrechner.
Guten Morgen! Heute ist Montag, der 26. September 2005.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Modalverben.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Einfaches Erstellen von Präsentationen aus Einzelfolien heraus.
Institut für Angewandte Mikroelektronik und Datentechnik Phase 5 Architectural impact on ASIC and FPGA Nils Büscher Selected Topics in VLSI Design (Module.
Quelle: xkcd.com SQL Injections.
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
Literary Machines, zusammengestellt für ::COLLABOR:: von H. Mittendorfer Literary MACHINES 1980 bis 1987, by Theodor Holm NELSON ISBN
XML Seminar: XP und XML 1 XP and XML Gregor Zeitlinger.
GERMAN WORD ORDER ORDER s. Sentences are made up by placing a variety of words in a specific order. If the order is wrong, the sentence is difficult to.
1 Konica Minolta IT Solutions Prinzip Partnerschaft MANAGED MONITORING ÜBERWACHJUNG DER SERVERINFRASTRUKTUR UND ANWENDUNGEN DIREKT AUS DER CLOUD.
Probesystem Gym 4 Prüfungen pro Schuljahr, in der 2. Klasse 4 ½ Prüfungen. Jeweils ganze Lektion, keine Fragemöglichkeit am Anfang der Prüfungslektion.
© Crown copyright 2011, Department for Education These materials have been designed to be reproduced for internal circulation, research and teaching or.
Kapitel 2 Grammar INDEX 1.Subjects & Verbs 2.Conjugation of Verbs 3.Subject Verb Agreement 4.Person and Number 5.Present Tense 6.Word Order: Position of.
Kapitel 8 Grammar INDEX 1.Command Forms: The Du-Command Form & Ihr- Command 2.Sentences & Clauses.
Environment problems The problems - The problem of waste  too much trash -People use too much cars -Oil platform accidents -Exhaust gas pollution -Deforestation.
ENVIRONMENT PROBLEMS What can I do? Pineapples Traffic  Use public vehicles  Use more bike and go by walking  There should be a filter in every car.
On the case of German has 4 cases NOMINATIVE ACCUSATIVE GENITIVE DATIVE.
BEISPIEL FÜR EIN BMW F10 EXEMPEL FOR A BMW F10 SERIE Interieur.
Technische Universität München Institute of Aeronautical Engineering Prof. Dr.-Ing. Horst Baier Presentation of the Institute (December 2009)
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Interrogatives and Verbs
Thema: Umwelt: Was könnte man tun, um der Umwelt zu helfen?
Wie viel Uhr ist es? Telling Time.
OFFICE 365 FOCUS SESSION SHAREPOINT ONLINE 101:LERNE DIE BASICS 19. März 2018 Höhr-Grenzhausen.
 Präsentation transkript:

Sicherheitsaspekte bei der C-Programmierung EUROSEC GmbH Chiffriertechnik & Sicherheit Tel: 06173 / 60850, www.eurosec.com © EUROSEC GmbH Chiffriertechnik & Sicherheit, 2005

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Überblick Grundlegendes zur sicheren C-Programmierung Problembereiche Buffer-Overflows Heap-Overflows Integer-Overflows Aufrufe externer Programme/Anwendungen Formatstring-Probleme Tools Beispiele Best Practices (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

C und Web-Applikationen? "Alte" Schnittstelle: CGI Heutzutage immer weniger bei Neuentwicklungen genutzt, trotzdem noch vorhanden Insbesondere bei der Pflege existierender Applikationen wichtig Für Web-Applikationen eine etwas andere Risikoverteilung: Hohes Risiko und große Auswirkungen bei Stack-Buffer-Overflows Heap-Overflows (im allgemeinen schwerer auszunutzen) Formatstring-Probleme (im allgemeinen schwerer auszunutzen) External Program Calls eher untergeordnet (Zugriff auf die Umgebung notwendig)  Sicherheit von C für Web-Applikationen relevant! (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg C und Sicherheit C gilt als unsichere Programmiersprache: Direkte Speicherzugriffe möglich Typsicherheit, Datenkapselung nicht gewährleistet Kein Sandboxing mit Policies möglich Größte Problem-Quelle sind Speicheroperationen: Buffer-Overflows Heap-Overflows Fehler in der Zeigerarithmetik Probleme bei Speicherverwaltung lassen sich im Normalfall schwer entdecken Die Verwendung von Analyse-Tools ist auch kein Allzweckheilmittel (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Buffer-Overflow-Probleme (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Buffer-Overflows Ca. 50% der CERT/CC-Meldungen beziehen sich auf Buffer-Overflow-Attacken. Buffer-Overflow entsteht beim Missachten der Buffer-Grenzen Zu wenig Platz für zu viele Daten C bietet keine integrierten Mechanismen zum Überprüfen/Einhalten der Grenzen Prüfung ist Aufgabe des Programmierers Bei automatisch oder mit alloc() angelegten Daten gilt: Die hinterlegte Rücksprungadresse kann überschrieben werden Somit kann Programmablauf beeinflusst werden Buffer-Overflows resultieren in: Fehlerhaftem Anwendungsverhalten (DoS) bis hin zur Ausführung vom eingeschleusten Angreifer-Code (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

BO - Grundlagen lokale Funktionsvariablen SP alter Frame-Pointer (ebp) Stack-Aufbau beim Aufruf einer Funktion lokale Funktionsvariablen SP alter Frame-Pointer (ebp) SP Return-Adresse SP Funktions-Parameter SP SP (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg BO - Attacke Fehlerhafter Code: Auswirkung bei einem Exploit: int main(int argc, char *argv[]) { char buffer[256]; strcpy(buffer,argv[1]); return 0; } Return-Adresse NOPs Angriffscode (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

BO - kritische Funktionen Unsichere Funktionen nach Möglichkeit vermeiden strcpy, strcat, sprintf, gets, scanf, realpath, getpass, streadd, strecpy, getopt, strtrns, getwd, select, … Oder zumindest einige Vorkehrungen treffen: Problemfall Vorkehrung gets Durch fgets ersetzen strcpy/strcat Durch strncpy/strncat ersetzen (mit Längenangabe) sprintf/scanf Precision Specifiers verwenden (z.B. "%.100s") streadd/strecpy Vierfache Buffer-Allokierung sicherstellen realpath/getpass Buffer ausreichend dimensionieren Gefahr: Zielbuffer nicht groß genug gets(char * s) 0 fgets(char * s, int n, FILE * stream) strcpy(), strcat() 0 strncpy(), strncat() sprintf(), vsprintf() 0 snprintf(), vsnprintf() falls vorhanden, sonst „Precision Specifiers“ in Formatstring (Bsp.: %.100s) (falls implementiert) scanf(), sscanf(), fscanf() : Nutze „Precision Specifiers“ in Formatstring (Bsp.: %.100s) (falls implementiert) streadd(), strecpy() : Zielbuffer sollte allgemein 4 mal so groß wie Inputbuffer sein (e=extend : x01 wird zu String \001) realpath(), getpass() : Zielbuffer angemessen groß PATH_MAX, PASS_MAX, (Solaris: realpath() <-> PATH_MAX, getpass() genau so gefährlich wie gets() (?), getpassphrase() max 256 chars) Gefahr: Inputbuffer zu groß und Implementation der entsp. Systemfunktion fehlerhaft realpath(), syslog() or getopt() ------------------- scanf() : formatiertes lesen von stdin fscanf() : formatiertes lesen aus Datei sscanf() : formatiertes lesen aus String vscanf(), vsscanf(), vfscanf() ??? getopt() : Extrahiert Optionen aus argv (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg BO - Schutzmaßnahmen Sorgfältig programmieren Benutzereingaben prüfen Gefährliche Funktionen vermeiden Review von potentiell gefährlichen Operationen Source-Code Analyse mit Tools Gründliches Testen unter Verwendung von Bibliotheken, die alle Speicherbereichsverletzungen aufzeigen Gefahr: Zielbuffer nicht groß genug gets(char * s) 0 fgets(char * s, int n, FILE * stream) strcpy(), strcat() 0 strncpy(), strncat() sprintf(), vsprintf() 0 snprintf(), vsnprintf() falls vorhanden, sonst „Precision Specifiers“ in Formatstring (Bsp.: %.100s) (falls implementiert) scanf(), sscanf(), fscanf() : Nutze „Precision Specifiers“ in Formatstring (Bsp.: %.100s) (falls implementiert) streadd(), strecpy() : Zielbuffer sollte allgemein 4 mal so groß wie Inputbuffer sein (e=extend : x01 wird zu String \001) realpath(), getpass() : Zielbuffer angemessen groß PATH_MAX, PASS_MAX, (Solaris: realpath() <-> PATH_MAX, getpass() genau so gefährlich wie gets() (?), getpassphrase() max 256 chars) Gefahr: Inputbuffer zu groß und Implementation der entsp. Systemfunktion fehlerhaft realpath(), syslog() or getopt() ------------------- scanf() : formatiertes lesen von stdin fscanf() : formatiertes lesen aus Datei sscanf() : formatiertes lesen aus String vscanf(), vsscanf(), vfscanf() ??? getopt() : Extrahiert Optionen aus argv (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Heap-Overflows (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Heap-Overflows Ursache für Heap-Overflows sind wie auch bei Stack-Overflows fehlerhafte Operationen Zu wenig Platz für zu viele Daten Heap-Overflow erfolgt bei mit malloc() dynamisch angelegten Daten Kontrollstrukturen für free() können damit überschrieben werden Durch die Manipulation der Heap-Block-Strukturen kann beim Freigeben beliebige Speicheradresse mit beliebigem Wert beschrieben werden → Gegenmaßnahmen: Benutzereingaben prüfen (Längenprüfung) Gewährleisten, dass free() und delete() nur einmalig ausgeführt werden Freigeben eines bereits freigegebenen Speichers ruft Probleme hervor Testtools ??? (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Integer-Overflows (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Integer-Overflows Integer-Overflows entstehen durch Über- bzw. Unterschreitung eines gültigen Wertebereichs Resultiert sich u.U. im Fehlverhalten der Anwendung Beispiel: Bei Verwendung von 232 − 1 werden 4GB gelesen → Gegenmaßnahmen Benutzereingaben prüfen Wertebereiche festlegen Konvertierung prüfen (insbesondere signed ↔ unsigned) size = strtoul(argv[1], NULL, 10); buf = alloca(size + 1); … ret = read(0, buf, size); Testtools ??? (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Aufrufe externer Programme (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Aufrufen externer Programme Verwendung von Umgebungsvariablen einschränken Nach Möglichkeit darauf verzichten Variablenwerte sind als Input-Daten zu behandeln Längenprüfungen, Prüfungen auf erlaubte Zeichen Keine Aufrufe externer Programme über die Shell Programme sind direkt aufzurufen (execve()) und nicht über die Shell (system() oder popen()) Ansonsten sind Angriffe durch Modifikation der Umgebungsvariablen möglich (z.B. PATH) Umgebungsunabhängige Schnittstellen verwenden Umgebungsunabhängige Schnittstellen wie execve() oder execle() benutzen Die Umgebung kann für diese Aufrufe explizit gesetzt werden (Inputparameter im Funktionsaufruf) Andere exec*-Schnittstellen (z.B. execl(), execv(), execlp() und execvp()) verwenden Systemumgebungsvariablen und sind dadurch angreifbar Testtools ??? (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Formatstring-Probleme (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Formatstrings Formatierte Ausgabe von Daten Umwandlungszeichen in einem Formatstring: %d, %x, %p, %s, ... printf() ist eine Funktion mit variabler Parameteranzahl d.h. Parameter werden vom Stack gelesen Probleme verursacht durch Verwendung eines Input-Strings als Formatstring printf( outPt, inPt ); Direkte Ausgabe eines Strings printf ( buffer ); Relevante Formatierungszeichen Durch Einfügen von Formatierungszeichen in den Inputstring (z.B. %x) können Daten vom Stack gelesen werden Durch Einfügen von Formatierungszeichen %n in den Inputstring kann auf den Stack geschrieben werden (Länge der bisherigen Ausgabe) Konsequenzen: Überschreiben von Rücksprungadresse möglich Ausführung von Exploit-Code möglich Liest Wert vom Stack, falls Argument &a fehlen würde! (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Formatstring - Schutzmaßnahmen Sorgfältig programmieren Vermeidung jeglicher Inputstrings als Teil eines Formatstrings bei formatierenden Funktionen: printf(), sprintf(), fprintf(), snprintf() scanf(), sscanf(), fscanf() syslog() Korrekte Nutzung: printf( outPt, "%s", inPt ); Reviews für bestehenden Code durchführen Source-Code Analyse Tools verwenden Testtools ??? (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Tools (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Tools Unterschiedliche Ansätze: Statisch: nur Source-Code Review Dynamisch: zu Laufzeiten, Source-Code-Modifikationen Source-Code Analyse-Tools Prüfen des Source-Codes auf Verwendung potentiell gefährlicher Funktionen, Programm-Fluss kaum berücksichtigt Freie Lösungen: z.B. Flawfinder, ITS4, RATS, Splint, BOON Kommerzielle Produkte: z.B. Fortify, Prexis, CodeAssure, SPI Dynamics Laufzeit-Prüftools Erkennung und Vermeidung von Problemen Lösungen: z.B. STOBO, CRED, StackGuard, StackShield, ProPolice SSP, CCured Allgemeine Problematik: Verhältnis zwischen korrekt erkannten Problemen und False-Positives Flawfinder, RATS (Rough Auditing Tools for Security) Splint (ehemals LCLint) Compiler die Testcode generieren. Purify, Insure++ Stackguard tool (canary) Extension to gcc performs array bound checking preventing all buffer overflows libsafe: Erstzt unsichere Funktionen durch solche die sicherstellen, dass der Stackframe nicht überschrieben wird. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Flawfinder - Beispiel Flawfinder version 1.26, (C) 2001-2004 David A. Wheeler. Number of dangerous functions in C/C++ ruleset: 158 Examining xxx.c xxx.c:31: [2] (misc) fopen: Check when opening files - can an attacker redirect it (via symlinks), force the opening of special file type (e.g., device files), move things around to create a race condition, control its ancestors, or change its contents?. xxx.c:600: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination. Make sure destination can always hold the source data. xxx.c:742: [2] (buffer) char: Statically-sized arrays can be overflowed. Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. xxx.c:4597: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination. Consider using strncpy or strlcpy (warning, strncpy is easily misused). (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Flawfinder - Beispiel (Forts.) xxx.c:747: [4] (format) vsprintf: Potential format string problem. Make format string constant. xxx.c:1095: [1] (buffer) strlen: Does not handle strings that are not \0-terminated (it could cause a crash if unprotected). Hits = 64 Lines analyzed = 7713 in 1.34 seconds (9171 lines/second) Physical Source Lines of Code (SLOC) = 7570 Hits@level = [0] 0 [1] 29 [2] 20 [3] 4 [4] 11 [5] 0 Hits@level+ = [0+] 64 [1+] 64 [2+] 35 [3+] 15 [4+] 11 [5+] 0 Hits/KSLOC@level+ = [0+] 8.45443 [1+] 8.45443 [2+] 4.62351 [3+] 1.98151 [4+] 1.4531 [5+] 0 Minimum risk level = 1 Not every hit is necessarily a security vulnerability. There may be other security vulnerabilities; review your code! (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg RATS - Beispiel Entries in perl database: 33 Entries in python database: 62 Entries in c database: 334 Entries in php database: 55 Analyzing xxx.c xxx.c:742: High: fixed size local buffer Extra care should be taken to ensure that character arrays that are allocated on the stack are used safely. They are prime targets for buffer overflow attacks. xxx.c:747: High: vsprintf Check to be sure that the format string passed as argument 2 to this function call does not come from an untrusted source that could have added formatting characters that the code is not prepared to handle. Additionally, the format string could contain `%s' without precision that could result in a buffer overflow. xxx.c:836: High: LoadLibrary LoadLibrary will search several places for a library if no path is specified, allowing trojan DLL's to be inserted elsewhere even if the intended DLL is correctly protected from overwriting. Make sure to specify the full path. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

RATS - Beispiel (Forts.) xxx.c:4364: High: getenv Environment variables are highly untrustable input. They may be of any length, and contain any data. Do not make any assumptions regarding content or length. If at all possible avoid using them, and if it is necessary, sanitize them and truncate them to a reasonable length. xxx.c:6959: High: strcpy Check to be sure that argument 2 passed to this function call will not copy more data than can be handled, resulting in a buffer overflow. xxx.c:3951: Low: memcpy Double check that your buffer is as big as you specify. When using functions that accept a number n of bytes to copy, such as strncpy, be aware that if the dest buffer size = n it may not NULL-terminate the string. xxx.c:6955: Low: strlen This function does not properly handle non-NULL terminated strings. This does not result in exploitable code, but can lead to access violations. Total lines analyzed: 7677 Total time 0.047000 seconds 163340 lines per second (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Best Practices (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

C-Security Best Practices Berücksichtigung aller Input-Parameter Input-Validierung (Länge, gültige Zeichen) Verwendung sicherer Konstrukte Kopier- und generell Speicheroperationen Formatstrings Ausreichende Dimensionierung von Daten-Buffern Vollständige Spezifikation des Verhaltens in Fehlersituationen Berücksichtigung aller Abhängigkeiten Programmbibliotheken, Betriebssystem, Umgebung Vermeidung von Funktionen, die von Umgebungsvariablen abhängen Analyse-Tools in den Entwicklungsprozess integrieren Wahl eines passenden Tools u.U. schwierig (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Anhang (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

Warum dieser Vortrag von uns? - Unsere Erfahrung: mehrere Personenjahre in Forschungsprojekten zur sicheren Softwareentwicklung; derzeit gemeinsam mit Partnern wie SAP, Commerzbank, Universitäten, ... zahlreiche Schwachstellenanalysen für Softwarehersteller, nebst intensiver Feedbackzyklen mit den Entwicklern Erstellung von Anforderungs- und Designspezifikationen in mehreren großen Entwicklungsprojekten Erstellung von Guidelines zur sicheren Softwareentwicklung, mit Schwerpunkten Banking & Finance, sowie Webapplikationen Reverse Engineering und Gutachten von Sicherheitsfunktionen und Kryptomechanismen Implementierung von Sicherheitsfunktionen im Auftrag (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Abschlussbemerkung die vorliegende Dokumentation wurde von EUROSEC erstellt im Rahmen des secologic Forschungsprojekts, Laufzeit 2005 und 2006, nähere Informationen unter www.secologic.org wir bedanken uns beim Bundesministerium für Wirtschaft für die Förderung dieses Projektes Anregungen und Feedback sind jederzeit willkommen, ebenso Anfragen zu Sicherheitsaspekten, die hier nicht behandelt werden konnten. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg

(c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg Copyright Hinweis Diese Folien wurden von EUROSEC erstellt und dienen der Durchführung von Schulungen oder Seminaren zum Thema Sichere Anwendungsentwicklung, mit Fokus Webapplikationen. Wir haben diese Folien veröffentlicht, um die Entwicklung besserer Softwareprodukte zu unterstützen. Die Folien dürfen gerne von Ihnen für eigene Zwecke im eigenen Unternehmen verwendet werden, unter Beibehaltung eines Herkunfts-Hinweises auf EUROSEC. Eine kommerzielle Verwertung, insbesondere durch Schulungs- oder Beratungsunternehmen, wie beispielsweise Verkauf an Dritte oder ähnliches ist jedoch nicht gestattet. (c) 2005, EUROSEC GmbH Chiffriertechnik & Sicherheit, Kronberg