hakin9_6_2004_inzynieria_odwrotna_demo.pdf

(230 KB) Pobierz
284678087 UNPDF
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.
promitowanego systemu natraił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.
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.
Niezbędne narzędzia
Jako platformę do przeprowadzenia analizy wy-
korzystałem system Mandrake Linux 10.0. Za-
56
www.hakin9.org
Hakin9 Nr 6/2004
M iesiąc temu podczas analizy skom-
284678087.006.png 284678087.007.png 284678087.008.png
Reverse engineering w analizie powłamaniowej
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.
cje uzyskane na tym etapie nada-
dzą kierunek naszym dalszym dzia-
łaniom. Do uzyskania tych informacji
wykorzystamy standardowe narzę-
dzie systemowe ile .
• 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.
# ile 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
signiicant 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
ile uruchamianego dla programu
wykonywalnego, są ewentualne
nieprawidłowości w nagłówku ELF.
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.
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
strings – do wydobywania cią-
gów drukowalnych znaków ASCII
z pliku.
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.
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.
Wstępne
rozpoznanie obiektu
Proces analizy należy rozpocząć od
uzyskania podstawowych informacji
o analizowanym obiekcie. Informa-
Poza narzędziami zastosowanymi
w trakcie analizy warto wspomnieć
Hakin9 Nr 6/2004
www.hakin9.org
57
284678087.009.png 284678087.001.png 284678087.002.png
 
284678087.003.png 284678087.004.png 284678087.005.png
Zgłoś jeśli naruszono regulamin