Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Humboldt University Computer Science Department Systems Architecture Group IT-Sicherheit Grundlagen Sichere Implementierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Humboldt University Computer Science Department Systems Architecture Group IT-Sicherheit Grundlagen Sichere Implementierung."—  Präsentation transkript:

1 Humboldt University Computer Science Department Systems Architecture Group IT-Sicherheit Grundlagen Sichere Implementierung Systemsicherheit: Bufferoverflow, FormatString

2 IT-Sicherheit Grundlagen Motivation Übungsaufgabe Lab3: Stack-basierte Buffer Overflows Dr. Wolf Müller 2

3 IT-Sicherheit Grundlagen Dr. Wolf Müller 3 Buffer Overflow-Angriffe Buffer Overflow-Angriffe nutzen Schachstellen, die sich aus Implementierungsfehlern infolge nachlässiger Programmierung resultieren. Ansatzpunkt: Programme, wo Daten in Variablen fester Länge (String, Array), eingelesen oder kopiert werden, ohne, dass die reale Länge durch das Programm geprüft wird. Variablen, in die Daten kopiert werden sind abstrakt betrachtet Pufferbereiche (buffer). Schreiben einer zu großen Datenmenge führt zum Überlauf (overflow).

4 IT-Sicherheit Grundlagen Dr. Wolf Müller 4 Ziel, Ablauf Absicht: –Ausführung beliebigen Codes Ausführung einer Remote-Shell, Installation eines Virus, Keyloggers, … –Denial of service Schritte: –Einbringen von Code in den Puffer –Umleitung des Kontrollflusses zum Angriffs-Code –Ausführung des Angriffs-Codes

5 IT-Sicherheit Grundlagen Dr. Wolf Müller 5 Buffer Overflow: Entwicklung Anfangs nur Ausnutzung von Operationen zum Kopieren von Zeichenketten Später auch Integer-Overflow Schleifen die nicht korrekt terminieren Unicode-Probleme - Länge einzelner Zeichen ist variabel

6 IT-Sicherheit Grundlagen Dr. Wolf Müller 6 Angriffsmöglichkeiten Ziele –stack, heap, static area –Parameter Veränderung (non-pointer data) D. h. Ändern von Parametern für existierende Aufrufe zu exec() Injizierter Code und existierender Code Absolute und relative Adressenabhängigkeiten Ähnliche Attacken –Integer overflows –Format-string Angriffe

7 IT-Sicherheit Grundlagen Dr. Wolf Müller 7 Adressraumverwaltung Alle gängigen OS unterstützen virtuellen Speicher Jedem Prozess virtueller Adressraum zugeordnet Drei logische Bereiche –Text bzw. Codesegmet Enthält Befehle des Prozesses In der Regel durch OS gegen Überschreiben geschützt – Heap Enthält dynamisch angelegte Datenobjekte, globale Variablen, globale Konstanten Wächst von niedrigen zu höheren Adressen Grenze zum Stack fließend –Stack LIFO Dient Verwaltung von Prozeduraufrufen Enthält lokale Variablen von Prozeduraufrufen, deren Eingabeparameter, Rücksprungadresse, Umgebungsvariablen Wächst von höheren zu niedrigen Adressen Compiler erzeugt Maschinencode, um Daten auf Stack und Heap zu speichern oder wieder zu entfernen –Stack und Heap können nicht gegen Überschreiben geschützt werden, sind in der Regel ausführbar.

8 IT-Sicherheit Grundlagen Dr. Wolf Müller 8 Segmentierung des virtuellen Adressraums 0x x code static data bss heap shared library stack kernel space 0x xC xFFFFFFFF argument 2 argument 1 RA frame pointer locals buffer Attack code Address of Attack code

9 IT-Sicherheit Grundlagen Stack Stack Layout Jede aufgerufene Prozedur bekommt neuen Stack Frame auf Stack Stack wächst (in der Regel) zu niedrigen Adressen Stack Pointer zeigt auf aktuell oberstes Stackelement (erstes verfügbares Element) Frame Pointer zeigt auf Anfang des aktuellen Stackframes Größe und Offset des Frames werden zur Compile-Zeit festgelegt. Inhalt des Stackframes wird als Offset relativ zum Stackpointer oder Framepointer addressiert.

10 IT-Sicherheit Grundlagen Stack Frame: Was liegt drin? Parameter Lokale Variablen Temporäre Werte Rückgabewert Stack Pointer Frame Pointer Returnadresse –(gespeicherter PC) Dynamisch gelinkt –Referenz auf Frame des Aufrufenden, um nach Aufruf ursprünglichen Stack wieder zu rekonstruieren. Statisch gelinkt –Referenz auf auf nächsten Frame der lexikalisch einschließenden Prozedur.

11 IT-Sicherheit Grundlagen Stack Layout Angenommen, Funktion f ruft g und g bereitet Aufruf von h vor parameter 5 parameter 6... temporary values return value saved fp return address local variables other saved registers parameters saved fp return address return value f-Frame g-Frame Aktueller FP Aktueller SP Erste 4 Parameter in der Regel in Registern. Rest in umgekehrter Reihenfolge gespeichert, damit mit fp+increment zugegriffen werden kann. Erste 4 Parameter in der Regel in Registern. Rest in umgekehrter Reihenfolge gespeichert, damit mit fp+increment zugegriffen werden kann. fs Frame Pointer. Wird wieder hergestellt bei Return von g. Wichtig bei dynamischem Linken. fs Frame Pointer. Wird wieder hergestellt bei Return von g. Wichtig bei dynamischem Linken. Temporäre Variablen, erzeugt durch Compiler bei Code-Generierung. g verantwortich für Sicherung und Wiederherstellung potentiell von f benutzter Register. h's Parameter. Oft in Registern gespeichert. Program Counter, damit g nächste Instruktion nach Return von h weiß.

12 IT-Sicherheit Grundlagen Dr. Wolf Müller 12 Raten der Einsprungaddresse Real program new return address nop instructions new return address

13 IT-Sicherheit Grundlagen Dr. Wolf Müller 13 NOPs (90) mal anders IA32 27 daa ' IA32 2f das / IA32 33 c0 xor %eax,%eax IA32 37 aaa 7 IA32 3f aas ? IA32 40 inc IA32 41 inc %ecx A IA32 42 inc %edx B IA32 43 inc %ebx C IA32 44 inc %esp D IA32 45 inc %ebp E IA32 46 inc %esi F IA32 47 inc %edi G IA32 48 dec %eax, H IA32 4a dec %edx J IA32 4b dec %ebx K …

14 IT-Sicherheit Grundlagen Dr. Wolf Müller 14 Beispiele (In)famous: Morris worm (1988) –gets() in fingerd Code Red (2001) –MS IIS.ida vulnerability Blaster (2003) –MS DCOM RPC vulnerability Mplayer URL heap allocation (2004) % mplayer –e print \x1024;`...

15 IT-Sicherheit Grundlagen Privilegierte Programme (suid | sgid) openSuSE-10.3 find / -type f \( -perm o -perm \) -rwsr-xr-x 1 root audio /bin/eject -rwsr-xr-x 1 root root /bin/mount -rwsr-xr-x 1 root root /bin/ping -rwsr-xr-x 1 root root /bin/ping6 -rwsr-xr-x 1 root root /bin/su -rwsr-xr-x 1 root root /bin/umount -rwsr-xr-x 1 root root /opt/kde3/bin/artswrapper -rwsr-xr-x 1 root shadow /opt/kde3/bin/kcheckpass -rwxr-sr-x 1 root nogroup /opt/kde3/bin/kdesud -rwsr-xr-x 1 root root /opt/kde3/bin/kpac_dhcp_helper -rwsr-xr-x 1 root root /opt/kde3/bin/start_kdeinit -rwsr-x--- 1 root dialout /sbin/isdnctrl -rwsr-xr-x 1 root shadow /sbin/unix2_chkpwd -rwsr-xr-x 1 root shadow /sbin/unix_chkpwd -rwsr-xr-x 1 root trusted /usr/bin/at -rwsr-xr-x 1 root shadow /usr/bin/chage -rwsr-xr-x 1 root shadow /usr/bin/chfn -rwsr-xr-x 1 root shadow /usr/bin/chsh -rwsr-xr-x 1 root trusted /usr/bin/crontab -rwsr-xr-x 1 root shadow /usr/bin/expiry -rwsr-xr-x 1 root root /usr/bin/fileshareset -rwsr-xr-x 1 root trusted /usr/bin/fusermount -rwxr-sr-x 1 games games /usr/bin/glines -rwxr-sr-x 1 games games /usr/bin/gnibbles -rwxr-sr-x 1 games games /usr/bin/gnobots2 -rwxr-sr-x 1 games games /usr/bin/gnometris -rwxr-sr-x 1 games games /usr/bin/gnomine -rwxr-sr-x 1 games games /usr/bin/gnotravex -rwxr-sr-x 1 games games /usr/bin/gnotski -rwsr-xr-x 1 root shadow /usr/bin/gpasswd -rwxr-sr-x 1 games games /usr/bin/gtali -rwsr-xr-x 1 root shadow /usr/bin/kcheckpass -rwxr-sr-x 1 root nogroup /usr/bin/kdesud -rwsr-xr-x 1 lp sys /usr/bin/lppasswd -rwxr-sr-x 1 games games /usr/bin/mahjongg -rwsr-xr-x 2 root root /usr/bin/man -rwsr-xr-x 2 root root /usr/bin/mandb -rwsr-xr-x 1 root root /usr/bin/newgrp -rwsr-xr-x 1 root shadow /usr/bin/passwd -rwsr-xr-x 1 root root /usr/bin/rcp -rwsr-xr-x 1 root root /usr/bin/rlogin -rwsr-xr-x 1 root root /usr/bin/rsh -rwxr-sr-x 1 games games /usr/bin/same-gnome -rwsr-xr-x 1 root root /usr/bin/sudo -rwsr-xr-x 1 root video /usr/bin/v4l-conf -rwxr-sr-x 1 root tty /usr/bin/wall -rwxr-sr-x 1 root tty /usr/bin/write -rws--x--x 1 root root /usr/bin/Xorg -rwxr-sr-x 1 games games /usr/games/lbreakout2 -rwxr-sr-x 1 root mail /usr/lib/cyrus/bin/deliver -rwsr-xr-x 1 root root /usr/lib/libgnomesu/gnomesu-pam-backend -rwsr-xr-x 1 root root /usr/lib/mc/cons.saver -rwxr-sr-x 1 root polkituser /usr/lib/PolicyKit/polkit-grant-helper -rwsr-xr-x 1 root root /usr/lib/PolicyKit/polkit-grant-helper-pam -rwsr-xr-x 1 root root /usr/lib/pt_chown -r-xr-sr-x 1 root uucp /usr/lib/vmware-tools/bin32/vmware-tpvmlp -r-sr-xr-x 1 root root /usr/lib/vmware-tools/sbin32/vmware- hgfsmounter -rwxr-sr-x 1 root tty /usr/lib/vte/gnome-pty-helper -rwsr-xr-x 1 root root /usr/local/lib/xcdroast-0.98/bin/xcdrwrap -rwsr-xr-x 1 root root /usr/sbin/change-passwd -rwsr-xr-x 1 root uucp /usr/sbin/mgnokiidev -rwxr-sr-x 1 root maildrop /usr/sbin/postdrop -rwxr-sr-x 1 root maildrop /usr/sbin/postqueue -rwsr-xr-x 1 root root /usr/sbin/suexec2 -rwxr-sr-x 1 root tty /usr/sbin/utempter -rwsr-xr-x 1 root root /usr/sbin/zypp-checkpatches-wrapper Dr. Wolf Müller 15

16 IT-Sicherheit Grundlagen Dr. Wolf Müller 16 Demo Buffer Overflow Vulnerabilities (http://nsfsecurity.pr.erau.edu/bom/index.html)Buffer Overflow Vulnerabilitieshttp://nsfsecurity.pr.erau.edu/bom/index.html –http://nsfsecurity.pr.erau.edu/bom/Jumps.htmlhttp://nsfsecurity.pr.erau.edu/bom/Jumps.html –http://nsfsecurity.pr.erau.edu/bom/Spock.htmlhttp://nsfsecurity.pr.erau.edu/bom/Spock.html –http://nsfsecurity.pr.erau.edu/bom/Smasher.htmlhttp://nsfsecurity.pr.erau.edu/bom/Smasher.html –http://nsfsecurity.pr.erau.edu/bom/StackGuard.htmlhttp://nsfsecurity.pr.erau.edu/bom/StackGuard.html Linux SuSE 12.1 –https://www2.informatik.hu- berlin.de/sar/Itsec/slides_ssl/demo_bufferoverflow.tgzhttps://www2.informatik.hu- berlin.de/sar/Itsec/slides_ssl/demo_bufferoverflow.tgz

17 IT-Sicherheit Grundlagen ASCII-Tabelle Dr. Wolf Müller 17

18 IT-Sicherheit Grundlagen BufferOverflow/README.txt # It is a demo for buffer overflow, please use with care and only on your own system! # (c) # run as as root echo "0" > /proc/sys/kernel/randomize_va_space # not present in OpenSuSE 11.4 #echo "0" > /proc/sys/kernel/exec-shield gcc -fno-stack-protector -z execstack -o unsafe unsafe.c chmod u+s unsafe # run cmds as convetional user: su user./exploit.pl #Local Root-Shell./root_sk.pl #Local Root-Shell./open_port*.pl #Opens Root-Shell over network # Access to networked Root-Shell via command given in rsh*. Dr. Wolf Müller 18

19 IT-Sicherheit Grundlagen Dr. Wolf Müller 19 Vorbeugung Strategien –Erkennen und entfernen der Schwachstellen (am besten) –Verhindern von Code-Einschleusung –Erkennung von Code-Einschleusung –Verhindern der Code-Ausführung Wo kann eingegriffen werden? –Analyse und Kompilierung des Codes –Linken der Objekte zum Programm –Laden des Programm in den Speicher –Ausführung des Programms

20 IT-Sicherheit Grundlagen Dr. Wolf Müller 20 Gefährliche C-Funktionen Funktionsprototypmögliches Problem strcpy(char *dest, const char *src) strcat(char *dest, const char *src) getwd(char *buf) gets(char *s) fscanf(FILE *stream, const char *format,...) scanf(const char *format,...) realpath(char *path, char resolved path[ ]) sprintf(char *str, const char *format,...) sizeof() Overflow des dest-Puffers. Overflow des buf-Puffers. Overflow des s-Puffers. Overflow der Argumente. Overflow des path-Puffers. Verschiedene Größe bei Unicode-Transformation (Bestimmung in Byte, nicht nach Buchstabenzahl)

21 IT-Sicherheit Grundlagen Dr. Wolf Müller 21 Werkzeuge / Strategien Secure Programming (strcpy strncpy, …) Typesafe Programming Languages (Java) Splint - Check array bounds and pointers Non-executable stack Stackguard – put canary before RA Libsafe – replace vulnerable library functions RAD – check RA against copy Analyze call trace for abnormality PointGuard – encrypt pointers Binary diversity – change code to slow worm propagation PAX – binary layout randomization by kernel Randomize system call numbers

22 IT-Sicherheit Grundlagen Dr. Wolf Müller 22 Libsafe / StackGuard Wenn Quellcode vorhanden! Libsafe (Linux) –Wrapper für Standard-C Bibliotheksaufrufe, insbesondere für riskante Funktionen StackGuard Tool (UNIX) –Patch für C-Compiler / aktuell default im gcc –Compiler: Fügt spezielles Kontrollzeichen (Canary) direkt hinter der Rücksprungadresse auf dem Stack ein. Erzeugt Code, der vor dem Rücksprung prüft, ob das Kontrollzeichen verändert wurde. Bei Änderung Warnung in SysLog analog Stack Cookies (Microsoft für Windows Server 2003)

23 IT-Sicherheit Grundlagen Dr. Wolf Müller 23 Futher Reading Randomize code –Barrantes, Ackley, Forrest, Palmer, Stefanovic, Zovi, Randomized Instruction Set Emulation to Disrupt Binary Code Injection Attacks, ACM CCS Randomize location of code/data –Bhatkar, DuVarney, Sekar, Address Obfuscation: an Efficient Approach to Combat a Broad Range of Memory Error Exploits, USENIX Security 2003.

24 IT-Sicherheit Grundlagen Dr. Wolf Müller 24 Randomized Instruction Sets (RISE) Bedrohung: –Einschleusung von Binärcode über das Netzwerk Ziel: –Diversifizierung jedes Systems in von außen nicht vorhersagbarer Weise Lösung: –Jedes Programm hat verschiedenes und geheimes Instruction-Set –Übersetzer der Instructions zur Ladezeitpunkt in zufälliger Weise modifiziert. –In HW oder Software implementierbar Grenzen: –Keine Abwehr von Manipulationen nur im Datenbereich

25 IT-Sicherheit Grundlagen Dr. Wolf Müller 25 Data Scrambled Code RISE: loading binary Code Data RISEMemory ELF binary file + Key

26 IT-Sicherheit Grundlagen Dr. Wolf Müller 26 RISE: executing code Hardware Data Scrambled Code RISE Memory + Key Code

27 IT-Sicherheit Grundlagen Dr. Wolf Müller 27 Code RISE: foreign code Hardware Data Scrambled Code RISEMemory + Key Code Injected from network Scrambled Code SIGILL

28 IT-Sicherheit Grundlagen Dr. Wolf Müller 28 Adressen Randomisierung Bedrohung: –Speicherfehler-Exploits Ziel: –Verhinderung der Vorhersagbarkeit von Speicheradressen Lösung: –Neuzuordnung von Speicherbereichen –Vertauchen der Reihenfolge von Variablen und Code –Einführung zufälliger Lücken zwischen Grenzen: –schwierig zu implementieren mit üblichen Application Binary Interface zur Ladezeit

29 IT-Sicherheit Grundlagen Dr. Wolf Müller 29 Randomisierung Randomisierung der Startadressen von Speicherbereichen –Stack: großen Wert –Heap: großen Block allocieren –DLLs: linken mit Dummy-lib –Code/static data: Konvertierung in shared lib, oder an verschiedenen Adressen neu linken Macht Angriffe mit absoluten Adressen schwieriger! code static data bss heap shared library stack kernel space

30 IT-Sicherheit Grundlagen Stackrandomisierung SuSE 9.3 Kernel: default, ohne Stackrandomisierung Output: konstant 0xbffff570 0xbffff570 openSuSE 11.4 Kernel: desktop mit Stackrandomisierung Output 0xbf7fd300…0xbfffbf90 0xbfa xbf92bc20 0xbff xbf9b4a70 0xbfb xbfb16e10 0xbfda88a0 Dr. Wolf Müller 30 #include int main() {int foo; printf("%p\n", &foo); return 0;} 8MB

31 IT-Sicherheit Grundlagen Dr. Wolf Müller 31 Randomisierung Vertauschen der Reihenfolge von Variablen und Routinen routines –Lokale Variables in den Stackbereich –Reihenfolge statischer Variablen –Reihenfolge der Routines in DLLs or ausfürbaren Programmen Macht Angriffe mit relativen Adressen schwieriger

32 IT-Sicherheit Grundlagen Dr. Wolf Müller 32 Verhinderung der Ausführung Solaris 10 –Stack-Segment als nicht ausführbar konfigurierbar ähnliche Patches auch für –Linux (www.openwall.org)www.openwall.org –Windows NT/2000 (securewave.com) Trusted OS (speziell abgesicherte Varianten von Standard OS) –Trusted Solaris –Trusted HP-UX –Einbau von speziellen Compartments, die Systembereiche gegeneinander abschotten, Wirkung des BO bleibt begrenzt.

33 IT-Sicherheit Grundlagen NX-Bit / XD-Bit NX-Bit (no execute) Athlon 64 XD-Bit (execution disable) Itanium, P4, Core, Pentium-M Hardwareunterstützung : –Bit wird Betriebssystem für Stack im Arbeitsspeicher gesetzt –Unterscheidung zwischen Daten und Code –als Daten markiertem Speicherbereich, (z.B. Bild), kann nicht ausgeführt werden. Betriebssystem muss dieses Bit unterstützen. Nicht für alle Programme möglich: –Just in time Compiler –Dynamischer Linker Dr. Wolf Müller 33

34 IT-Sicherheit Grundlagen Buffer Overflow: Timeline Dr. Wolf Müller 34 Quelle: https://zynamics.files.wordpress.com/2010/02/code_reuse_timeline1.pnghttps://zynamics.files.wordpress.com/2010/02/code_reuse_timeline1.png

35 IT-Sicherheit Grundlagen Tools: Statische Code-Analyse nalysishttp://en.wikipedia.org/wiki/List_of_tools_for_static_code_a nalysis Lint Dr. Wolf Müller 35

36 IT-Sicherheit Grundlagen Tools: Framework für dynamische Analysewerkzeuge Ziel: automatische Erkennung von: –Fehler in Speicherverwaltung eines Programms –Fehler im Verwalten von Thrreads Profiling der Speichernutzung Dr. Wolf Müller 36

37 IT-Sicherheit Grundlagen Dr. Wolf Müller 37 Fazit & Info Sicheres Programmieren = Königsoption Secure Programming HOWTO :Secure Programming HOWTO –http://www.dwheeler.com/secure-programs/Secure-Programs- HOWTO/index.htmlhttp://www.dwheeler.com/secure-programs/Secure-Programs- HOWTO/index.html Weiterführende Informationen: –Simple Buffer Overflow Exploitation Tutorial - Ubuntu –Erster Buffer Overflow auf dem Heap (Solar Designer): –"Exploit Writing Tutorial" auf corelan.be Teil 10 Umgehung von DEP mit ROP (return oriented programming): part-10-chaining-dep-with-rop-the-rubikstm-cube/ part-10-chaining-dep-with-rop-the-rubikstm-cube/

38 IT-Sicherheit Grundlagen Formatsrings: printf() Funktion: int printf(const char* format,...); format Regelt, wie nachfolgende Parameter interpretiert werden. Beispiele: –printf("n=%d", 42); n=42 //dezimal –printf("n=%u", 42); n=42 //unsigned dezimal –printf("n=%x", 42); n=2A //hex –printf("n=%.10d", 42); n= //10 Stellen –printf("%s %n", string, &num_of_chars); gibt string aus und schreibt Anzahl der ausgegebenen Zeichen nach num_of_chars in den Speicher Dr. Wolf Müller 38

39 IT-Sicherheit Grundlagen Formatsrings: Probleme printf() Was wenn keine Parameter? printf nimmt implizit an, dass Parameter auf dem Stack liegen! Beispiele: printf("%x"); oberstes Wort (32bit) vom Stack //b760bc05 printf(%.10x"); oberstes Wort (32bit) vom Stack mit 10facher Genauigkeit // printf("%x…%x"); n * oberste Worte vom Stack printf("A…A%n"); schreibt in Speicherbereich, auf den das oberste Stackelement (Wort) zeigt Zahl der ausgegebenen Zeichen! Dr. Wolf Müller 39

40 IT-Sicherheit Grundlagen Formatstrings: hw.c //hw.c #include int main(int argc, char* argv[]) { if (argc > 1) printf(argv[1]); return 0; } #> hw "Hello World!" Hello World! #> hw "%x%x%x%x" b75efc b7727ff Dr. Wolf Müller 40

41 IT-Sicherheit Grundlagen Formatsrings: Angriffsmöglichkeiten %x Analyse des Stacks %n (mit passend vielen ausgegebenen Zeichen) schreiben von Speicherbereichen Z.B. Rücksprungadresse auf Stack legen, anschließend mit Hilfe von %n überschreiben. Dr. Wolf Müller 41


Herunterladen ppt "Humboldt University Computer Science Department Systems Architecture Group IT-Sicherheit Grundlagen Sichere Implementierung."

Ähnliche Präsentationen


Google-Anzeigen