Upakowane ELFy – czerwona flaga dla pliku binarnego w Linuksie

nfsec.pl 5 miesięcy temu

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 zwykle 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 systemu na VirusTotal zwykle 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, iż 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

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 dzięki edytora szesnastkowego utrudniają wykrycie lub dalszą analizę pliku. Chociaż taka operacja prawdopodobnie przerwie klasyczne rozpakowywanie pliku dzięki polecenia: upx -d i wygeneruje błędy, sam plik binarny będzie przez cały czas 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żeli jednak naprawimy jego nagłówek dzięki 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

UPX mimo, iż 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żeli 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

Idź do oryginalnego materiału