6 Sicherheitsprobleme!

Ähnliche Dokumente
Multicast dt. Gruppenruf. Robert Tolksdorf und Peter Löhr

2 Typische Angriffe. Trojanisches Pferd. Virus. Wurm. Umgehung von Sicherheitsmechanismen. Ausnutzung von Software-Verletzlichkeiten

2 Typische Angriffe. nutzen technische oder menschliche Schwachstellen aus

C-Kurs 2011: Arrays, Strings, Pointer

12.5 Sicherer Programmcode

Übungen zu Softwaresysteme I Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2004 K-Uebung9.fm

Zeiger in C und C++ Zeiger in Java und C/C++

Strings (Zeichenketten)

Tafelübung zu BSRvS 1 6. Sicherheit

Sicherheit in Software

Zeiger in C und C++ Zeiger in Java und C/C++

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

INE1 Mehr zu Funktionen Ausserdem: Strings (Saiten) Call by value, struct's Call by reference Array Parameter Strings und Stringfunktionen

C-Kurs 2010 Pointer. 16. September v2.7.3

int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) {

Arrays (Felder/Vektoren)

Teil I Debuggen mit gdb

Betriebssysteme. Tafelübung 6. Sicherheit. Olaf Spinczyk.

Programmier-Befehle - Woche 10

Hacking in C (Windows) Reinhard Oertel

Praxis der Programmierung

Programmiersprachen Einführung in C

Programmier-Befehle - Woche 08

Verwenden Sie für jede Aufgabe die C++ IDE von Eclipse (pro Aufgabe ein Projekt).

Übungspaket 24 Zeichenketten

Softwaresicherheit. Eine Präsentation von Benedikt Streitwieser und Max Göttl. Einführung Kryptographie und IT-Sicherheit

Embedded Toolchain. 1 C/C++-Grundlagen. strncpy_s, strcpy_s etc. V 4.02; Hon. Prof. Helmke 1

Buffer Overflows. Daniel Hepper, Irina Krivochtchekova, Elyasin Shaladi

Ausgewählte Bibliotheksfunktionen

Arrays,Strings&Pointer in C/C++

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Lösung Übungszettel 6

Exploit-Entwicklung mit Python

Netzwerksicherheit Musterlösung Übungsblatt 5: Firewalls

Buffer Overflow 1c) Angriffsstring: TTTTTTTTTTTTTTTT (16x) Beachte: Padding GCC-Compiler Zusatz: gcc O2 verhindert hier den Angriff (Code Optimierung)

Sichere Programmierung. Klaus Kusche

Programmiersprachen Einführung in C

Informatik - Übungsstunde

Eine Mini-Shell als Literate Program

4.12 Datenstrukturen/String-Bibliothek

6. Bearbeitung von Strings in C Bearbeitung von Strings in C

Zeiger, Arrays und Strings in C und C++

Informatik für Mathematiker und Physiker Woche 7. David Sommer

GI Vektoren

Vorbemerkungen Einführung Buffer Heap vs. Stack Sicherheit Literatur. Umgang mit Buffern. Stefan Bruhns

Grundlagen der Informatik 6. Arrays I

Angewandte IT-Sicherheit

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

Embedded SQL in PostgreSQL

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

Exploits Wie kann das sein?

Installation MySQL Replikationsserver

Datei: svn/ckurs/trunk/c_texte/c_arrptr.txt, Datum: 30. Juni Felder und Zeiger

Programmieren in C SS Vorlesung 4, Dienstag 14. Mai (Strings, Zeiger, Allokation, Strukturen)

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

FEBE Die Frontend-Backend-Lösung für Excel

Ein- und Ausgabe mit Dateien

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Vorlesung Sicherheit

Midterm NS Aufgabe 1

Programmieren in C++

C/C++-Programmierung

Operating Systems Principles. Event Queue

Stephan Brumme, SST, 3.FS, Matrikelnr

Pascal Schärli

Ein- und Ausgabe mit Dateien

Schutz und Sicherheit

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Malware. Carlo U. Nicola 09. Dezember Die Struktur eines (harmlosen) aber echten Virus-Programmes analysieren;

ESP Tutorium. Studienassistent: Ewald Moitzi. Gruppe 1

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Praktikum Netzwerke. Für den Speicherort tragen Sie Ihr Netzlaufwerk und entsprechende Unterverzeichnisse ein, z.b.:

Programmieren in Java

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

PS Kryptographie und IT-Sicherheit. Thema: Software-Sicherheit. Thomas Loch, Michael Streif 2012

Übungsstunde: Informatik 1 D-MAVT

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

1. Definition. 2. Interne Speicherung der Zeichenketten. 3. Vereinbarung von Zeichenketten

Hausarbeit. Thema: Computersicherheit. Friedrich-Schiller-Universität Jena Informatik B.Sc. Wintersemester 2009 / 2010

Lösung zur Praktikumsaufgabe 1

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

Zeichenketten (Strings) in C

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Einführung in C. EDV1-04C-Einführung 1

Typische Speicherfehler in C

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Sicherheit von Webapplikationen Sichere Web-Anwendungen

Funktionale Programmierung

Transkript:

Klaus-Peter Löhr! 6 Sicherheitsprobleme! 6.1 Unsichere Programmiersprachen!5! 6.2 Angriffe mit Pufferüberlauf!8! Zusammenfassung!!!16! WS 13/14 ALP 5 - Sicherheitsprobleme 1

IT-Sicherheit (IT security) : Systemsicherheit + Netzsicherheit Schwachstellen (vulnerabilities) in der Software gefährden die Sicherheit: werden von Angreifern ausgenutzt Verteidigung gegen Angriffe: l technisch (Hardware, Software) l organisatorisch (System/Netzverwaltung) l pragmatisch (Benutzer) WS 13/14 ALP 5 - Sicherheitsprobleme 2

Typische Angriffe im Netz: Abhören (eavesdropping) übertragener Daten Beschädigen/Zerstören (corruption) übertragener Daten Verfälschen (tampering) übertragener Daten Umlenken einer Verbindung zum Angreifer (session hijacking) Eindringen (intrusion) in fremdes System Maskerade (spoofing): Täuschung über die Identität eines Partners... und natürlich Bauernfang bei E-mail, Web,...!! Ú sichere Verbindungen helfen ein Stück weit: Secure Socket Layer (SSL) oberhalb von TCP Ú javax.net.ssl! (z.b. für https - sichere Web-Verbindungen) WS 13/14 ALP 5 - Sicherheitsprobleme 3

Ein angebotener Dienst kann von beliebigen Klienten, die nicht registrierte Benutzer sein müssen, in Anspruch genommen werden. Eine Zugangskontrolle ist zunächst nicht vorgesehen. Konsequenz: Klient kann bösartige Daten an Server schicken - und umgekehrt. Offener Port ist Einfallstor für Angriffe. WS 13/14 ALP 5 - Sicherheitsprobleme 4

6.1 Unsichere Programmiersprachen! Def.: Eine Programmiersprache heißt unsicher (unsafe), wenn Programmfehler die Speicherverwaltung stören können. Beispiele: ungültige Verweise in C, Pascal, Modula,...; zusätzlich Feldgrenzenüberschreitung in C/C++, bei Eingabedaten: Pufferüberlauf (buffer overflow) Folgen: chaotisches Programmverhalten, Absturz mit Bus Error, Segmentation Fault u.ä. WS 13/14 ALP 5 - Sicherheitsprobleme 5

SYNOPSIS Beispiel aus der C-Bibliothek #include <stdio.h> char *gets(char *s); char *fgets(char *s, int n, FILE *stream); DESCRIPTION The gets() function reads characters from the standard input stream (see intro(3)), stdin, into the array pointed to by s, until a newline character is read or an end-of-file condition is encountered. The newline character is discarded and the string is terminated with a null character. The fgets() function reads characters from the stream into the array pointed to by s, until n-1 characters are read, or a newline character is read and transferred to s, or an end-of-file condition is encountered. The string is then terminated with a null character. When using gets(), if the length of an input line exceeds the size of s, indeterminate behavior may result. For this reason, it is strongly recommended that gets() be avoided in favor of fgets(). WS 13/14 ALP 5 - Sicherheitsprobleme 6

... und viele andere: NAME string, strcasecmp, strncasecmp, strcat, strncat, strlcat, strchr, strrchr, strcmp, strncmp, strcpy, strncpy, strlcpy, strcspn, strspn, strdup, strlen, strpbrk, strstr, strtok, strtok_r - string operations DESCRIPTION The arguments s, s1, and s2 point to strings (arrays of characters terminated by a null character). The strcat(), strncat(), strlcat(), strcpy(), strncpy(), strlcpy(), strtok(), and strtok_r() functions all alter their first argument. These functions do not check for overflow of the array pointed to by the first argument. WS 13/14 ALP 5 - Sicherheitsprobleme 7

6.2 Angriff mit Pufferüberlauf! Anwendung von gets z.b. so:!char line[100];..... gets(line);! wobei der Programmierer vergessen hat, längere Zeilen (länger als 99 Zeichen) als fehlerhaft abzufangen! Gefahr: Wenn versehentlich eine längere Zeile eingegeben wird, wird der Keller beschädigt, und das Programm arbeitet fehlerhaft oder stürzt ab. WS 13/14 ALP 5 - Sicherheitsprobleme 8

... und desgleichen wenn absichtlich eine längere Zeile eingegeben wird! è sicherheitsrelevante Schwachstelle, wenn das Programm mit anderer Autorisierung als der des Benutzers/Klienten ausgeführt wird! (typisch: setuid-programm, Server-Programm!) Bösartige Eingabedaten können gezieltes Fehlverhalten auslösen. WS 13/14 ALP 5 - Sicherheitsprobleme 9

void getarg (char *arg ){!!!char text[4] = "ABC";!!!char buff[4];!!!strcpy(buff, arg);!!!...! }! int main( int argc, char *argv[]) {!!!if (argc >1) getarg(argv[1]);!!!...! }! $ a.out INPUT! Keller (wächst von oben nach unten): I N P U T ABC\0 buff!text!ebp EIP!arg! EBP EIP!argc!argv! wachsender Keller wachsende Adressen WS 13/14 ALP 5 - Sicherheitsprobleme 10

Trivialer Echo-Dienst - in C : #include <sys/types.h>! #include <sys/socket.h>!! #include <netinet/in.h>! int main(int argc, char *argv[]) {! int max = 100;! char line[max];!...!// initialization, port 54321! for(;;) {! int connfd =! accept(listenfd,!!!!(struct sockaddr *) &clientaddr, &len);!! readln(connfd, line, max);!!! print(line);! line[5] = '\n'; write(connfd, line, 6);!! close(connfd); }! }!!!!! WS 13/14 ALP 5 - Sicherheitsprobleme 11

void print(char *str) {!!char buf[10];!// eine 0 vergessen!!!strcpy(buf, str);!!printf("got %s", buf);! }! server: a.out!!!!!badguy: nc localhost 54321!!!!!first test! got first test!!!!!!!!first!!!!!badguy:!!!!!!!!fuzzfuzzfuzzfuzzfuzzfuzzfuzz! got fuzzfuzzfuzzfu...!badguy:!kein Echo!! Segmentation fault!! server:!!!server abgeschossen! WS 13/14 ALP 5 - Sicherheitsprobleme 12

Was ist passiert? Rücksprungadresse aus print im Keller wurde durch strcpy mit Daten überschrieben. Rücksprung aus print erfolgte an eine ungültige Adresse Ú Segmentation fault Effekt: Abschuss des Servers Ú denial of service Beachte: mit der gleichen Technik kann auch ein bösartiger Server einen schwachstellenbehafteten Klienten zum Absturz bringen! WS 13/14 ALP 5 - Sicherheitsprobleme 13

Noch viel gefährlicher ist Einschleusen von Schadcode (malware): Effekt: Keller mit Daten und Code (!) überschreiben und dabei die Rücksprungadresse so setzen, dass der eingeschleuste Code aktiviert wird, der eventuell weiteren Code nachziehen kann. Ursprünglicher Dienst ist mit Schadcode des Angreifers infiziert, d.h. der Schadcode läuft mit der Autorisierung des Angegriffenen. Falls das (bei Unix) der Super-User root ist, ist das System vollständig unterwandert (compromised). WS 13/14 ALP 5 - Sicherheitsprobleme 14

Gegenmaßnahmen: Sichere Programmiersprachen! Keller-Segment ohne "execute"-rechte (Solaris; OpenBSD 3.2; Linux: OpenWall, PaX,...) (verhindert allerdings nicht den Pufferüberlauf selbst) Andere Keller-Organisation, Hüllen für die unsicheren Funktionen, alle möglichen Tricks restriktive Autorisierung der bedrohten Prozesse restriktive Öffnung von Ports Einsatz von Firewalls Nicht vergessen: patches einspielen bzw. sicherheitsrelevante Updates beachten! WS 13/14 ALP 5 - Sicherheitsprobleme 15

Zusammenfassung! Schlecht programmierte Server sind durch angreifende Klienten gefährdet. Denken Sie 3-mal nach, bevor Sie Ihren Server ans Netz bringen! Statten Sie ihn mit möglichst schwacher Autorisierung aus, damit eventueller Schaden begrenzt bleibt! Schlecht programmierte Klienten sind durch bösartige Server gefährdet. Meiden Sie Mailtools, Browser etc. aus unsicherer Quelle! Sicherheits-Updates wahrnehmen! Meiden Sie ominöse Server, damit Ihr Rechner nicht infiziert wird! WS 13/14 ALP 5 - Sicherheitsprobleme 16

Quellen! A. Lockhart: Network Security Hacks. O'Reilly 2006... und jede Menge Literatur über IT-Sicherheit WS 13/14 ALP 5 - Sicherheitsprobleme 17