27
Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Malware-AnalyseundReverseEngineering

3:Laufzeit!30.3.2017

Prof.Dr.MichaelEngel

Page 2: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Überblick(heute)

Themen:• LadenundAusführen vonBinärprogrammen• Linkerskripte• Dynamischer Loaderld.so• Statische undDynamische Libraries• Speicherallokation

MARE03– Laufzeit 2

Page 3: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Übersetzungeines(C-)ProgrammsPräprozessor• Expandiert#include undMakrosCompiler• ErzeugtAssembler-Quellcode

ausC-SourcecodeAssembler• ErzeugtObjektcodeausAssembler-

QuellcodeLinker• Fügt(einoder)mehrereObjektdateien

(+evtl.Libraries)zuausführbarerDatei(oderLibrary) zusammen

Loader• LädtausführbareDateizur

Ausführung inHauptspeicherMARE03– Laufzeit 3

Page 4: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Wiederholung:ELF-Struktur

ELF-DateibestehtausSektionen,u.a.:• Programmtext• VerschiedeneDatensegmente• Symbole

MARE03– Laufzeit 4

Sektion Funktion.text Maschinencode (Instruktionen)

undEinsprungadresse

.rodata Vorinitialisierte Konstanten

.data Vorinitialisierte Variable

.bss Uninitialisierte Daten

.symtab Adressen zu symbolischenNamen

Page 5: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

VirtuellerSpeicherinUnix/Linux(1)

LinuxsetztVorhandenseineinerMMU*voraus• ÜbersetztvirtuelleAdresseninphysikalischeAdressen

• Illusion: JederProzesshatgesamtenAdressraumfürsichzurVerfügung• Schutzvon(physikalischem)SpeichervorungewünschtemZugriff• Granularität:„Seite“(z.B.4096Bytes)

MARE03– Laufzeit 5

*MMU=MemoryManage-ment Unit

Page 6: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

VirtuellerSpeicherinUnix/Linux(2)

ÜbersetzungvonAdressenüberSeitentabellen• Fürjede(abgebildete)Speicherseite (page):Adressedeszugehörigen(gleich

großen)physikalischenSeitenrahmens (page frame)• Sparse mapping:nurimphys.SpeichervorhandeneSeitenabgebildet• Seitentabelleneintrag(page table entry)enthältnebenAdresseauch

InformationüberZugriffsrechte: Lesen/Schreiben*(undvielesmehr)

MARE03– Laufzeit 6

*Bei 32-BitIntel-CPUsfehlt Bit,dasAusführenvonCodeausderSeiteverbietet!

Page 7: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

VirtuellerSpeicherinUnix/Linux(3)

StrukturderSeitentabelle• Seitentabelle(page table)istDatenstrukturimRAM• KleineAusschnitteimTranslationLookaside Buffer (TLB) zwischengespeichert

MARE03– Laufzeit 7

Page 8: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

VirtuellesSpeicherlayoutvonProzessen(1)AufteilungdesvirtuellenAdressraums (hier:32Bit=4GB)• UserModeSpace=Prozessadressraum,separatfürjedenProzess• JederProzessbesitzteigeneSeitentabelle• KernelimoberemTeil(25/50%)jedes Prozessadressraumseingeblendet(Ausnahme:MacOSX)

MARE03– Laufzeit 8http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Page 9: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

VirtuellesSpeicherlayoutvonProzessen(2)JederProzessbesitzteigeneSeitentabelle• WirdbeiProzessumschaltungvomKernelumgeschaltet• AdressraumfürdenKernel(oberstesGigabytevirtuelleAdressen)bleibtimmereingeblendet

MARE03– Laufzeit 9http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Page 10: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

LayouteinesProzessesimSpeicher(1)

ÜbergangvonProgrammzuProzess• Definition:

„Programm=ProzessinAusführung“• Prozess=Laufzeitkontext einesProgramms• LadendesProgrammsinRAM• Zuteilungvirtueller AdressbereichezuProgrammsektionen• ZusätzlichReservierungvonAdressbereichenfürdynamischwachsendeBereiche• Heap,Stack

• Adressbereichoberhalb3GB(=0xC0000000)fürProgrammnichtles-/schreib-/ausführbar(dortistderKernel!)

MARE03– Laufzeit 10

Page 11: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

LayouteinesProzessesimSpeicher(2)

MARE03– Laufzeit 11

InELF-Dateienthalten

Dynamischalloziert

Dynamischalloziert

MetainformationeninELFenthalten

Page 12: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

DefinierendesSpeicherlayoutseinesProgramms(1)LinkerberücksichtigtLinkerScript• DefiniertAdressbereichefürELF-Sektionen• ZusätzlichauchEinsprungadressen,Reihenfolgen,Alignment,...

MARE03– Laufzeit 12

Einfaches Linker-Skript:

SECTIONS{

. = 0x10000;

.text : { *(.text) }

. = 0x8000000;

.data : { *(.data) }

.bss : { *(.bss) }}

Startbei virtuellerAdresse 0x10000:• Textsektion

Startbei virtuellerAdresse 0x80000000:• Zuerst .data• Direkt danach .bss

Page 13: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

DefinierendesSpeicherlayoutseinesProgramms(2)Kontrolle:FunktioniertdasLinker-Skript?• AusgabevonSymbolenmitnm:

MARE03– Laufzeit 13

Linker-Skript foo.ld:SECTIONS{

. = 0x10000;

.text : { *(.text) }

. = 0x8000000;

.data : { *(.data) }

.bss : { *(.bss) }}

$ gcc –m32 –c foo.c$ ld –m elf_i386 –T foo.ld –o foo foo.o$ nm foo0001002c R a08000000 D b08000004 B c00010000 T main

Beispielprogramm foo.c:

const int a = 42;int b = 23;int c;

int main(void) {c = a + b;return c;

}

✓✓

Page 14: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

DefinierendesSpeicherlayoutseinesProgramms(3)...Sektion.rodata imLinkerskriptnichtangegeben:automatischalloziert!

MARE03– Laufzeit 14

Linker-Skript foo.ld:SECTIONS{

. = 0x10000;

.text : { *(.text) }

. = 0x8000000;

.rodata : { *(.rodata) }

.data : { *(.data) }

.bss : { *(.bss) }}

$ gcc –m32 –c foo.c$ ld –m elf_i386 –T foo.ld –o fox foo.o$ nm fox08000000 R a08000004 D b08000008 B c00010000 T main

Beispielprogramm foo.c:

const int a = 42;int b = 23;int c;

int main(void) {c = a + b;return c;

}

✓✓

…gehtdoch!

Linkerskripte können viel mehr – Anordnen einzelnerObjektdateien,Arithmetik aufAdressen,Alignment,Aufteilen zwischen ROM/RAM-Bereichen,…

Page 15: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

DefinierendesSpeicherlayoutseinesProgramms(4)KontrolledesLayoutsmitreadelf:

MARE03– Laufzeit 15

$ readelf -l fox

Elf file type is EXEC (Executable file)Entry point 0x10000There are 3 program headers, starting at offset 52

Program Headers:Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg AlignLOAD 0x001000 0x00010000 0x00010000 0x00030 0x00030 R E 0x1000LOAD 0x002000 0x08000000 0x08000000 0x00004 0x00008 RW 0x1000GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4

Section to Segment mapping:Segment Sections...00 .text01 .rodata .data .bss02

Linker-Skript foo.ld:SECTIONS{. = 0x10000;.text : { *(.text) }. = 0x8000000;.rodata : { *(.rodata) }.data : { *(.data) }.bss : { *(.bss) }

}

Page 16: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Shared Libraries(1)

Programmesind(meist)nichtstandalone• Gehtauch,istaberaufwendig...• LibrariesenthaltennützlicheFunktionalität,z.B.:• libc – C-Standardfunktionen• libm– Mathematikfunktionen• libX11– FunktionenfürX11WindowSystem

• VieleProgrammeenthaltendieselbenLibraries• BeistatischemLinken:KopievonLibrary-CodeistinjedemausführbarenProgrammenthalten➙ benötigtPlattenplatz

• KopievonLibrary-CodemussfürjedenProzessinHauptspeicheralloziert werden➙ benötigtRAM

MARE03– Laufzeit 16

Page 17: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Shared Libraries(2)

Shared LibrariessindELF-Dateien• Enthaltenüblicherweisekeinmain• NichtinELF-DateieinesProgrammsenthalteneFunktionen/Symbolemüsseninshared library/ies gesuchtwerden

• Namensauflösungistaufwendig• Shared libraries verwendenHashtabellen

• MehrzuNamensauflösungnächsteWoche...

MARE03– Laufzeit 17

Page 18: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

DynamischerLinkerld.so

Welcheshared libraries werdenvoneinemELF-Filereferenziert?

MARE03– Laufzeit 18

$ gcc -m32 -o foo foo.o$ ldd foo

linux-gate.so.1 => (0xb7701000)libc.so.6 => /lib32/libc.so.6 (0xb759f000)/lib/ld-linux.so.2 (0xb7702000)

Weit “oben”imProzessadressraum:“kurz vor”0xC0000000

“ldd”(listdynamicdependencies)gibt Listedersharedlibsaus

ld.so (hier:/lib/ld-linux.so.2– für ELF)…• sucht undlädt diesharedlibraries,dieein Programm benötigt• bereitet dasProgramm aufdieAusführung vor• undstartet es

Dateiname dersharedlibrary“libc”Dateiname deszu verwendenden dynamischen Loaders

Page 19: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Besondereshared libraries

Wasistlinux-gate.so.1?

MARE03– Laufzeit 19

$ gcc -m32 -o foo foo.o$ ldd foo

linux-gate.so.1 => (0xb7701000)libc.so.6 => /lib32/libc.so.6 (0xb759f000)/lib/ld-linux.so.2 (0xb7702000)

Zu linux-gate.so.1existiertkeineDatei!• Virtuelle shared library,vomKernelindenProzessadressraumeingeblendet• StelltportableMechanismen fürSystemaufrufezurVerfügung

…nurderVollständigkeithalber...

Detailsunter http://www.trilithium.com/johan/2005/08/linux-gate/

Page 20: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

SpeicherlayouteinesProzesseszurLaufzeit(1)VirtuellesDateisystem/proc• EnthältInformationendesKernelsüberSystem- undProzesszustände,z.B.:• Speicherbelegung:/proc/meminfo• Systemlaufzeit:/proc/uptime• VersiondesKernels:/proc/version

• InformationüberlaufendeProzessein/proc/[pid]/,z.B.• /proc/[pid]/cmdline:KommandozeilebeimAufruf• /proc/[pid]/sched:Scheduling-Statistik• /proc/[pid]/stack:AktuellerStackinhalt (Funktionshierarchie)• /proc/[pid]/maps:BelegungdesvirtuellenSpeichers

MARE03– Laufzeit 20

Page 21: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

SpeicherlayouteinesProzesseszurLaufzeit(2)/proc/[pid]/maps• Beispiel:SpeicherlayoutfürProzess„foo“herausfinden

MARE03– Laufzeit 21

$ ps ax | grep foo10323

Welche Prozess-IDhatfoohier?10323

$ cat /proc/10323/maps08048000-08049000 r-xp 00000000 90:5a 10520727 /home/me/f/foo08049000-0804a000 rw-p 00000000 90:5a 10520727 /home/me/f/foob75f8000-b75f9000 rw-p 00000000 00:00 0 b75f9000-b7745000 r-xp 00000000 90:5a 8529693 /emul/ia32-linux/lib/libc-2.7.sob7745000-b7746000 r--p 0014c000 90:5a 8529693 /emul/ia32-linux/lib/libc-2.7.sob7746000-b7748000 rw-p 0014d000 90:5a 8529693 /emul/ia32-linux/lib/libc-2.7.sob7748000-b774b000 rw-p 00000000 00:00 0 b7758000-b775b000 rw-p 00000000 00:00 0 b775b000-b775c000 r-xp 00000000 00:00 0 [vdso]b775c000-b7779000 r-xp 00000000 90:5a 8529726 /emul/ia32-linux/lib/ld-2.7.sob7779000-b777b000 rw-p 0001c000 90:5a 8529726 /emul/ia32-linux/lib/ld-2.7.sobf9ee000-bfa03000 rw-p 00000000 00:00 0 [stack]

Wird dynamisch bei StartvonProzess vergeben

linux-gate.so

libc

Dynamischer Loader

DasProgramm selbst

Page 22: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

SpeicherlayouteinesProzesseszurLaufzeit(3)

MARE03– Laufzeit 22

...umsortiert und gekürzt...

bf9ee000-bfa03000 [stack]

b7779000-b777b000 ld-2.7.sob775c000-b7779000 ld-2.7.so

b775b000-b775c000 [vdso]

b7746000-b7748000 libc-2.7.sob7745000-b7746000 libc-2.7.sob75f9000-b7745000 libc-2.7.so

08049000-0804a000 /home/me/f/foo08048000-08049000 /home/me/f/foo

Page 23: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Laden:vonELF-DateizuSpeicherinhalt

MARE03– Laufzeit 23

http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

Page 24: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

SpeicherlayoutvonCausermitteln(1)Voncrt0vordefinierteglobaleVariable(viaLinkerskript):#include <stdio.h>

extern char __executable_start;extern char __etext;

int main(void){

printf("0x%lx\n", (unsigned long)&__executable_start);printf("0x%lx\n", (unsigned long)&__etext);return 0;

}

MARE03– Laufzeit 24

Ausgabe:$ gcc –m32 –o etext etext.c && ./etext0x80480000x80484a8

etext.c

_etext =“endof.textsection”

Page 25: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

SpeicherlayoutvonCausermitteln(2)WelcheVariablenstehenzurVerfügung?

MARE03– Laufzeit 25

$ gcc –m32 –o etext -Wl,--verbose etext.c && ./etext

... 250 Zeilen Ausgaben (Demo) ...

-Wl,xxx übergibt Parameter“xxx”andenLinker!

Page 26: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Fazit

LinkenundLaden• VirtuellerSpeicherundSpeicherlayoutvonProzessen• DefinitionüberLinkerskripte

• Shared LibrariesunddynamischerLader• Speicherlayout• ...undzugehörigeLinux-Tools

MARE03– Laufzeit 26

Page 27: Malware-Analyse und Reverse Engineeringmulticores.org/teaching/files/MARE_03-Laufzeit.pdf · Malware-Analyse und Reverse Engineering 3: Laufzeit! 30.3.2017 Prof. Dr. Michael Engel

Literatur

ELF• TISCommittee,„ToolInterfaceStandard(TIS)Executable and LinkingFormat

(ELF)Specification“,Version1.2Onlineunterhttps://www.uclibc.org/docs/elf.pdf

Linker• JohnR.Levine, „Linkers and Loaders“,MKP1999,ISBN1-55860-496-0

Online(beta)unterhttps://www.iecc.com/linker/• Workingwithlibrariesandthelinker

http://www.bottomupcs.com/libraries_and_the_linker.xhtmlld.so undShared Libraries• UlrichDrepper,„How to write shared libraries“

https://software.intel.com/sites/default/files/m/a/1/e/dsohowto.pdf• Optimizing linkerload times – https://lwn.net/Articles/192624/ABI-Konventionen• https://sites.google.com/site/x32abi/

MARE03– Laufzeit 27