NFsec Logo

Upakowane ELFy – czerwona flaga dla pliku binarnego w Linuksie

21/06/2024 w Bezpieczeństwo, Debug Brak komentarzy.  (artykuł nr 904, ilość słów: 1835)

U

ltimate Packer for Executables (UPX) to program pakujący dla kilku formatów wykonywalnych, takich jak biblioteki DLL systemu Windows, aplikacji macOS oraz Linux ELF. Jak możemy przeczytać na oficjalnej stronie programu UPX: “potrafi zazwyczaj zmniejszyć rozmiar plików programów i bibliotek DDL o około 50% – 70%, redukując w ten sposób miejsce na dysku, czas ładowania w sieci, czas pobierania oraz inne koszty dystrybucji i przechowywania”. Programy pakujące zasadniczo biorą oryginalny plik wykonywalny i dodają mały fragment kodu zwany “odgałęzieniem” (ang. stub) do nowo utworzonego wykonywalnego pliku. Kod pośredniczący zostanie następnie użyty do rozpakowania pliku i “przywrócenia” pliku wykonywalnego do jego pierwotnego stanu. Podczas, gdy niektóre programu pakujące, takie jak wspomniany UPX, tylko kompresują pliki, inne mogą je również szyfrować. Atakujący często używają kompresji, aby ukrywać złośliwe oprogramowanie jako pozornie nieszkodliwe i legalne pliki, co może oszukać silniki antywirusowe oparte na sygnaturach.

UPX może spakować złośliwe oprogramowanie i zmodyfikować jego bajty, aby wygenerować mniej wykrywalną wersję. Dzięki samorozpakowującemu plikowi wykonywalnemu jego zawartość może rozpakować się w pamięci. Spakowany plik ma zwykle mniejszą objętość na dysku, ale większą w pamięci – kiedy wykonywany jest plik spakowany w formacie UPX, wszystkie spakowane sekcje są rozpakowywane w pamięci, łączenie ze złośliwym kodem, który napisał autor. Program wówczas przeskakuje do pierwotnego punktu wejścia (ang. original entry point – OEP), aby wykonać oryginalny plik wykonawczy. Chociaż na pierwszy rzut oka obejście detekcji oparte na UPX może wydawać się nieco abstrakcyjne do zrozumienia to kompresja jest klasycznym podejściem próbującym zmylić programy antywirusowe. Na przykład przesłanie oryginalnej i spakowanej wersji próbki złośliwego oprogramowania na VirusTotal zazwyczaj kończy się mniejszą ilością rozpoznania jej szkodliwości dla tej drugiej formy. Nie ma zbyt wielu statystyk dotyczących częstotliwości wykorzystania UPX we wdrażaniu szkodliwego oprogramowania, ale matryca MITRE wymienia różne procedury “oparte na pakowaniu”, które atakujący mogą wykorzystać do ukrycia swojego kodu. Wiele przypadków dotyczy właśnie UPX.

Dla przykładu detekcji UPX posłużymy się ostatnio omówioną próbką RedTail. Możemy tego dokonać poprzez wiele poleceń dostępnych standardowo w systemie Linux np. hexdump:

agresor@stardust:~$ hexdump -C redtail.elf | grep UPX
000000e0  10 00 00 00 00 00 00 00  e6 ed 16 24 55 50 58 21  |...........$UPX!|
00198a80  68 65 20 55 50 58 20 54  65 61 6d 2e 20 41 6c 6c  |he UPX Team. All|
001995b0  51 05 50 38 df b0 f1 45  00 00 00 00 55 50 58 21  |Q.P8...E....UPX!|
001995c0  00 00 00 00 55 50 58 21  0e 16 0e 0a a1 a2 ec 9d  |....UPX!........|

xxd:

agresor@stardust:~$ xxd redtail.elf | grep UPX
000000e0: 1000 0000 0000 0000 e6ed 1624 5550 5821  ...........$UPX!
00198a80: 6865 2055 5058 2054 6561 6d2e 2041 6c6c  he UPX Team. All
001995b0: 5105 5038 dfb0 f145 0000 0000 5550 5821  Q.P8...E....UPX!
001995c0: 0000 0000 5550 5821 0e16 0e0a a1a2 ec9d  ....UPX!........

strings:

agresor@stardust:~$ strings redtail.elf | grep UPX
$UPX!H
$Info: This file is packed with the UPX executable packer http://upx.sf.net $
$Id: UPX 4.23 Copyright (C) 1996-2024 the UPX Team. All Rights Reserved. $
UPX!
UPX!

upx:

agresor@stardust:~$ upx -l redtail.elf
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2020
UPX 3.96        Markus Oberhumer, Laszlo Molnar & John Reiser   Jan 23rd 2020

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
upx: redtail.elf: CantUnpackException: need a newer version of UPX

Przy okazji widzimy, że wersja użyta do spakowania (4.23) jest znacznie nowsza niż ta dostępna w systemie (3.96). W celu rozpakowania musimy ściągnąć równą lub nowszą wersję z oficjalnego repozytorium:

agresor@stardust:~/upx-4.2.4-amd64_linux$ ./upx -l ../redtail.elf
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.4       Markus Oberhumer, Laszlo Molnar & John Reiser    May 9th 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   4532144 ->   1676776   37.00%   linux/amd64   ../redtail.elf

agresor@stardust:~/upx-4.2.4-amd64_linux$ ./upx -d ../redtail.elf -o unpacked-redtail.elf
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.4       Markus Oberhumer, Laszlo Molnar & John Reiser    May 9th 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   4534827 <-   1676776   36.98%   linux/amd64   unpacked-redtail.elf

Unpacked 1 file.

Wiele szkodników zaobserwowanych w eterze internetu posiada również ciekawą technikę uszkadzania nagłówków programu pakującego. W ten sposób generując celowo uszkodzone pliki poprzez zamianę bajtów lub wstawianie ciągów znaków za pomocą edytora szesnastkowego utrudniają wykrycie lub dalszą analizę pliku. Chociaż taka operacja prawdopodobnie przerwie klasyczne rozpakowywanie pliku za pomocą polecenia: upx -d i wygeneruje błędy, sam plik binarny będzie nadal sprawny i się wykona. Spójrzmy dla przykładu na próbkę work32 lub tempus:

agresor@stardust:~/upx-4.2.4-amd64_linux$ ./upx -d tempus -o unpacked_tempus
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.4       Markus Oberhumer, Laszlo Molnar & John Reiser    May 9th 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
upx: tempus: NotPackedException: not packed by UPX

Unpacked 0 files.

Packer nie rozpoznaje formatu swojego pliku. Jeśli jednak naprawimy jego nagłówek za pomocą specjalnego narzędzia:

agresor@stardust:~/UPX$ ./upx_dec tempus
+===========================================================================+
|                       UPX! Corrupt Header Fixer v1.3                      |
|                       Larry W. Cashdollar, 2/8/2023                       |
+===========================================================================+
Reading File :tempus
Found UPX corrupted header (YTS.) fixing.
59545399->55505821
Found UPX! Header Position at 152 00000000
Found UPX! Header Position at 22351
Found UPX corrupted header (YTS.) fixing.
59545399->55505821
Found UPX! Header Position at 23646
UPX! p_filesize :0x9b 0xf2 0xd0 0x01
Found UPX corrupted header (YTS.) fixing.
59545399->55505821
Found UPX! Header Position at 23656
Found 4th UPX! Header, using p_filesize :0x58 0xb2 0x00 0x00  Instead.
Header Position:160
File Size Position:23680
0x58 compare 0x58
0xb2 compare 0xb2
0x00 compare 0x00
0x00 compare 0x00

45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 60
d3 04 08 34 00 00 00 00 00 00 00 00 00 00 00 34 00 20 00 03 00 28 00 00
00 00 00 01 00 00 00 00 00 00 00 00 80 04 08 00 80 04 08 77 5b 00 00 77
5b 00 00 05 00 00 00 00 10 00 00 01 00 00 00 00 00 00 00 00 e0 04 08 00
e0 04 08 00 00 00 00 a0 56 00 00 06 00 00 00 00 10 00 00 51 e5 74 64 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 04
00 00 00 10 ca c5 92 55 50 58 21 20 08 0d 0c 00 00 00 00 58 b2 00 00 58
b2 00 00 94 00 00 00 60
Total bytes read 23692

Writing file tempus.fixed -> Done

Wszystko wraca do normy:

agresor@stardust:~/upx-4.2.4-amd64_linux$ ./upx -d tempus.fixed -o unpacked_tempus
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.4       Markus Oberhumer, Laszlo Molnar & John Reiser    May 9th 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     46520 <-     23692   50.93%   linux/i386    unpacked_tempus

Unpacked 1 file.

UPX mimo, że jest uniwersalnym formatem, używa się go do atakowania różnych platform systemowych w tym rodziny *nix. Pozwala on zmylić oprogramowanie antywirusowe i inne rozwiązania oparte o sygnaturach. Techniki uszkadzania plików UPX wykorzystuje się do zakłócania inżynierii wstecznej i automatycznej analizy złośliwego oprogramowania. Na szczęście uszkodzone nagłówki używane do zaciemniania formatu pliku można sprawnie naprawić lub próbki uruchamiać w piaskownicach, które nie będą wymagały działania osobnych wersji pakerów. Dlatego jeśli spotkamy taki plik w naszym systemie Linuksowym powinna pojawić się nam czerwona flaga.

Więcej informacji: Tool to fix intentionally corrupted UPX packed files, UPX-mod, How UPX Compression Is Used to Evade Detection Tools, UPX Anti-Unpacking Techniques in IoT Malware, Corrupted UPX Packed ELF Repair, UPX Packed Headaches, Identifying UPX packed ELF, decompressing, fixing, and analysing Linux malware

Kategorie K a t e g o r i e : Bezpieczeństwo, Debug

Tagi T a g i : , , , , , , , , , ,

Komentowanie tego wpisu jest zablokowane.