hakin9 6 2004 inzynieria odwrotna demo

background image

www.hakin9.org

56

Hakin9 Nr 6/2004

O

br

on

a

www.hakin9.org

57

Hakin9 Nr 6/2004

Reverse engineering w analizie powłamaniowej

M

iesiąc temu podczas analizy skom-
promitowanego systemu natrafiłem
na pozostawiony przez intruza w ka-

talogu /usr/share/doc/shellutils program o na-
zwie kstatd. Standardowa analiza powłama-
niowa, oparta na badaniu informacji w pamięci
i na dysku skompromitowanego systemu, nie
pozwoliła na pełne ustalenie roli pełnionej
przez podejrzany plik. Nie miałem możliwości
odtworzenia śladów kodu źródłowego – pro-
gram albo został skompilowany na skompromi-
towanej maszynie i skutecznie usunięto ślady
jego kodu źródłowego, albo został wprowadzo-
ny do systemu w postaci skompilowanej. W ta-
kiej sytuacji jedynym rozwiązaniem było prze-
prowadzenie szczegółowej analizy kodu znale-
zionego programu, zwanej również inżynierią
odwrotną (reverse engineering).

Działania, które przeprowadziłem można

nazwać analizą statyczną – analizowany kod
nie był w ogóle uruchamiany. Końcowe wnioski
powstały wyłącznie na podstawie badania bu-
dowy i zawartości analizowanego obiektu.

Niezbędne narzędzia

Jako platformę do przeprowadzenia analizy wy-
korzystałem system Mandrake Linux 10.0. Za-

Inżynieria odwrotna

kodu wykonywalnego ELF

w analizie powłamaniowej

Marek Janiczek

Inżynieria odwrotna, kojarząca

się najczęściej z łamaniem

zabezpieczeń oprogramowania,

może być z powodzeniem

zastosowana w analizie

powłamaniowej. W jej wyniku

uzyskamy odpowiedzi na pytania

o rolę, możliwości i mechanizm

działania znalezionych

w systemie podejrzanych plików.

stosowane narzędzia to programy standardo-
wo dostępne w systemach Linux i rodzinie BSD
oraz kilka innych, dostępnych publicznie w Inter-
necie. Standardowe narzędzia systemowe do-
starczane w dystrybucjach to przede wszystkim
pakiet binutils (GNU binary utilities). Z tego pa-
kietu wykorzystamy następujące programy:

ar – do uzyskania informacji o obiektach biblio-

tek (z archiwów *.a) oraz ich wydobywania,

nm – do otrzymania listy odniesień symbo-

licznych (symboli) w obiektach,

objdump – umożliwiający uzyskanie szcze-

gółowych informacji o obiekcie i jego za-
wartości,

Z artykułu nauczysz się...

• w jaki sposób przeprowadzić deasemblację ko-

du wykonywalnego ELF,

• jak wykorzystać inżynierię odwrotną podczas

analizy powłamaniowej w Linuksie.

Powinienieś wiedzieć...

• powinieneś znać przynajmniej podstawy pro-

gramowania w językach C i Asembler.

background image

www.hakin9.org

56

Hakin9 Nr 6/2004

O

br

on

a

www.hakin9.org

57

Hakin9 Nr 6/2004

Reverse engineering w analizie powłamaniowej

strings – do wydobywania cią-

gów drukowalnych znaków ASCII
z pliku.

Dodatkowo zastosujemy:

ht – przeglądarkę, edytor i anali-

zator wielu typów plików wykony-
walnych,

elfsh – narzędzie umożliwiają-

ce interaktywne przeglądanie
szczegółów formatu ELF,

ndisasm – program do deasem-

blacji plików binarnych dla plat-
formy x86,

elfgrep – narzędzie do wyszuki-

wania obiektów (na przykład bi-
bliotek) w innych obiektach ELF.

Poza narzędziami zastosowanymi
w trakcie analizy warto wspomnieć

o bardzo dobrym komercyjnym na-
rzędziu IDAPro. Jest to program
działający w środowisku Windows,
służący do deasemblacji różnych
typów plików wykonywalnych (rów-
nież ELF), dla różnych rodzin pro-
cesorów. Przeprowadza automa-
tyczną analizę oraz posiada moż-
liwość autokomentowania. My jed-
nak – ze względu na jego komer-
cyjny charakter i użyty do badania
system operacyjny – nie będziemy
go stosować. Wykorzystamy narzę-
dzia darmowe, udostępniane na li-
cencji GNU.

Wstępne

rozpoznanie obiektu

Proces analizy należy rozpocząć od
uzyskania podstawowych informacji
o analizowanym obiekcie. Informa-

cje uzyskane na tym etapie nada-
dzą kierunek naszym dalszym dzia-
łaniom. Do uzyskania tych informacji
wykorzystamy standardowe narzę-
dzie systemowe file.

# file kstatd
kstatd: ELF 32-bit LSB executable,
Intel 80386, version 1 (SYSV),
for GNU/Linux 2.2.5,
statically linked, stripped

W wyniku działania tego pole-
cenia uzyskaliśmy między in-
nymi informację o typie obiek-
tu – jest to program wykonywal-
ny w formacie ELF (patrz Ram-
ka Format ELF) oraz architektu-
rze, dla której został skompilowa-
ny (Intel 80386, 32-bit, LSB – least
significant byte
). Uzyskaliśmy rów-
nież informację o tym, że ana-
lizowany obiekt jest skompilo-
wany statycznie (statically lin-
ked
), oraz że został on podda-
ny procesowi strippingu (strip-
ped
). Przykładem innych infor-
macji, które również można uzy-
skać w wyniku działania polecenia
file uruchamianego dla programu
wykonywalnego, są ewentualne
nieprawidłowości w nagłówku ELF.

Wyszukiwanie ciągów znaków

Kolejnym etapem wstępnego roz-
poznania jest wyszukanie w anali-
zowanym programie interesujących
(podejrzanych) łańcuchów znaków.
Przeszukanie programu pod tym ką-
tem da nam kilka wskazówek o plat-
formie, na której został zbudowa-
ny oraz pozwoli na wstępne ustale-
nie, jakie podejrzane działania mo-
że wykonywać. Należy pamiętać,
że nawet najdrobniejsze szczegó-
ły mogą się okazać pomocne w dal-
szej analizie.

Do wyszukania łańcuchów zna-

ków

zastosujemy

niezastąpio-

ne narzędzie strings, wyświetlają-
ce sekwencje drukowalnych zna-
ków (ASCII) ze wskazanego obiek-
tu, których długość ma nie mniej niż
4 znaki (wartość domyślna; można ją
zmienić – opcja

-n

). Stosując narzę-

dzie strings trzeba mieć jednak świa-
domość, że w przypadku obiektów

Format ELF

ELF (Executable and Linking Format) to typowy dla systemów Linux format trzech ty-
pów obiektów binarnych: realokowalnych, wykonywalnych oraz współdzielonych.

• Obiekty realokowalne (z rozszerzeniem *.o) to takie, które podlegają łączeniu z in-

nymi w celu utworzenia pliku wykonywalnego lub biblioteki współdzielonej – są to
pliki wynikowe kompilatorów i asemblerów.

• Obiekty wykonywalne to pliki gotowe do uruchomienia, już po procesie realokacji

i z rozwiązanymi odwołaniami symbolicznymi (z wyjątkiem tych, które dotyczą od-
wołań do bibliotek współdzielonych, rozwiązywalnych w trakcie uruchomienia).

• Obiekty współdzielone (z rozszerzeniem

*

.so) to takie, które zawierają kod i dane

mogące brać udział w procesie łączenia obiektów w dwóch kontekstach. Pierw-
szy to łączenie przez linker z realokowanymi lub współdzielonymi obiektami w ce-
lu utworzenia innego obiektu. Natomiast drugi to łączenie z kodem programu wy-
konywalnego przez systemowy program ładujący (linker/loader) w celu utworzenia
w pamięci obrazu procesu.

Podstawowym elementem plików w formacie ELF jest nagłówek ELF (patrz Rysunek 1).
Nagłówek ten stanowi swego rodzaju mapę organizacji pozostałej części pliku i znajdu-
je się zawsze na jego początku. W nagłówku ELF znajdują się m.in. takie elementy jak:
lokalizacja nagłówka programu i nagłówka sekcji względem początku pliku, adres (tzw.
entrypoint), pod który będzie przekazana kontrola po uruchomieniu programu oraz nie-
zależne od platformy sprzętowej informacje określające sposób interpretacji danych za-
wartych w pliku (ident).

Dla zapewnienia właściwej elastyczności formatu ELF zaprojektowano dwa rów-

noległe widoki obiektów w tym formacie: widok łączenia i widok wykonywania (patrz
Rysunek 2). W trakcie budowy obiektu, kompilatory, assemblery i linkery traktują plik
w formacie ELF jako zbiór sekcji opisanych w nagłówku sekcji (tzw. widok łączenia),
z opcjonalnym nagłówkiem programu (patrz Rysunek 3). Natomiast systemowy pro-
gram ładujący pliki wykonywalne (linker/loader) traktuje plik w formacie ELF jako zbiór
segmentów opisanych w nagłówku programu (tzw. widok wykonywania), z opcjonal-
nym nagłówkiem sekcji. Widok łączenia nie jest konieczny do poprawnego uruchomie-
nia i działania kodu wykonywalnego.

Do przeglądania i analizy struktury plików w formacie ELF oraz zawartych w nich

informacji można wykorzystać program objdump, narzędzie elfsh lub program ht peł-
niący jednocześnie rolę przeglądarki, edytora i analizatora.


Wyszukiwarka

Podobne podstrony:
hakin9 6 2004 wykrywanie sniffingu demo
hakin9 5 2004 demaskowanie nadawcy demo
hakin9 5 2004 szelkod python demo
hakin9 6 2004 testy penetracyjne demo
hakin9 6 2004 przechowywanie danych demo
hakin9 5 2004 skanowanie portow demo
hakin9 5 2004 rozpoznawanie honeypotow demo
hakin9 6 2004 cisco ios demo
hakin9 5 2004 ddos obrona demo
hakin9 5 2004 atak jabber demo
hakin9 6 2004 wykrywanie sniffingu demo

więcej podobnych podstron