NFsec Logo

Upakowane ELFy – czerwona flaga dla pliku binarnego w Linuksie

21/06/2024 w Bezpieczeństwo, Debug Możliwość komentowania Upakowane ELFy – czerwona flaga dla pliku binarnego w Linuksie została wyłączona

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.
[ czytaj całość… ]

Polecenie ldd i niezaufane pliki binarne

29/07/2023 w Bezpieczeństwo Możliwość komentowania Polecenie ldd i niezaufane pliki binarne została wyłączona

N

iewiele osób zdaje sobie sprawę z faktu, że polecenie ldd służące do wyświetlania bibliotek współdzielonych wymaganych przez dany program nie jest plikiem binarnym tylko skryptem w języku bash:

agresor@darkstar:~$ whereis ldd
ldd: /usr/bin/ldd /usr/share/man/man1/ldd.1.gz
agresor@darkstar:~$ file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable

W dodatku, jeśli przeczytamy stronę manualną tego polecenia natchniemy się na taki zapis:

Należy pamiętać, że w pewnych okolicznościach (np. gdy program określa interpreter ELF inny niż ld-linux.so), niektóre wersje ldd mogą próbować uzyskać informacje o zależnościach, próbując bezpośrednio wykonać program, co może doprowadzić do wykonania dowolnego kodu zdefiniowanego w interpreterze programu ELF, a być może do wykonania samego programu (w wersjach glibc 2.27, implementacja upstream ldd na przykład to robiła, chociaż większość dystrybucji dostarczała zmodyfikowaną wersję, która tego nie robiła).

Dlatego nigdy nie należy używać ldd na niezaufanym pliku wykonywalnym, ponieważ może to spowodować wykonanie dowolnego kodu.

Zapis ten znajduje swoją historię w CVE-2009-5064, czyli luce w sposobie, w jaki narzędzie ldd identyfikowało biblioteki dołączane dynamicznie. Jeśli osoba atakująca mogłaby nakłonić użytkownika do uruchomienia ldd na złośliwym pliku binarnym, mogłoby to spowodować wykonanie dowolnego kodu z uprawnieniami użytkownika uruchamiającego ldd. Przykłady takich aplikacji mogą zostać stworzone np. za pomocą osobnej biblioteki C do tworzenia wbudowanych systemów Linux. Wystarczy zlinkować szkodliwy kod z nowym programem ładującym, z którego usuniemy / zakomentujemy wykrywanie zmiennej LD_TRACE_LOADED_OBJECTS:

/*
   if (_dl_getenv("LD_TRACE_LOADED_OBJECTS", envp) != NULL) {
           trace_loaded_objects++;
   }
*/

Spowoduje to, że szkodliwy program zostanie uruchomiony przez program ładujący nawet, jeśli narzędzie systemowe ustawi taką zmienną. Teraz w samym programie należy wykrywać w/w zmienną, aby uzależnić od niej wersję uruchomionego kodu:

#include <stdio.h>
#include <stdlib.h>

int main()
{
   /* wykrycie uruchomienia ldd */
   if (getenv("LD_TRACE_LOADED_OBJECTS") != 0) {
      printf("szkodliwy kod\n");
      printf("\tlibc.so.6 => /lib/libc.so.6 (0x4001d000)\n");
      printf("\t/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)\n");
      return 0;
   }

   printf("normalny kod\n");
   return 0;
}

Jak widzimy nie do końca jest bezpieczne uruchamianie ldd na niezaufanych plikach binarnych. Skrypt ldd używa dynamicznego linkera do załadowania pliku binarnego i jego zależności do pamięci, a następnie polega na samym dynamicznym konsolidatorze, aby wyświetlić szczegóły w konsoli. Z tego powodu proces ten może być nadużywany w inny sposób niż zgodnie z przeznaczeniem np. do wstrzyknięcia kodu, jak było to w przypadku CVE-2019-1010023. W jaki więc sposób sprawdzać zależności? Oczywiście nieznane pliki binarne powinny być sprawdzane na specjalnie przygotowanym do tego środowisku. Po drugie możemy skorzystać bezpośrednio z linkera systemowego:

agresor@darkstar:~$ /lib64/ld-linux-x86-64.so.2 --verify /bin/ls \
                    && echo 'Plik obsługiwany!' || echo 'Plik nieobsługiwany!'

Jeśli plik jest obsługiwany, możemy go sprawdzić za pomocą składni:

agresor@darkstar:~$ LD_TRACE_LOADED_OBJECTS=1 /lib64/ld-linux-x86-64.so.2 /bin/ls
	linux-vdso.so.1 (0x00007ffe3b1dd000)
	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f4b1111f000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4b10ef7000)
	libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f4b10e60000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4b11177000)

No i proszę. Otrzymujemy dokładnie taki sam wynik, jaki wytworzyłby skrypt ldd (minus różnice w adresach pamięci pod którymi zostały załadowane biblioteki, ale to ze względu na ASLR).

Więcej informacji: ldd(1) and untrusted binaries, Compromising analysis tools, ldd can execute an app unexpectedly, The GNU C Library version 2.27 is now available

Gdy host ma być tym hostem którym chcemy aby był

28/12/2022 w Administracja Możliwość komentowania Gdy host ma być tym hostem którym chcemy aby był została wyłączona

C

zasami zachodzi potrzeba pobrania próbki złośliwego oprogramowania / phishingu ze złośliwego serwera, ale nazwa domeny nie jest już rozwiązywalna (została usunięta / zablokowana). Niestety cyberprzestępcy nie zawsze są na tyle niezdarni, że udostępniają te same artefakty na czystym adresie IP i polecenie:

curl http://212.45.19.19/redline_stealer.exe

zwraca kod 404, ponieważ serwer taki często obsługuje wiele szkodliwych witryn i reaguje na konkretną nazwę domenową. W takim przypadku posiadając historyczne dane DNS o domenie możemy połączyć się z serwerem za pomocą narzędzia curl na kilka sposobów. Najstarszą metodą, na której kiedyś opierał się system DNS jest edycja pliku hosts (/etc/hosts w systemach Linux i systemach uniksopodobnych). Dodając na przykład wpis:
[ czytaj całość… ]

NordVPN – zabawy z API i Cloudflare X-Forwarder-For

07/01/2021 w Pen Test Możliwość komentowania NordVPN – zabawy z API i Cloudflare X-Forwarder-For została wyłączona

S

erwery API serwisu NordVPN stoją za Cloudflare. Jeśli wejdziemy na jeden z adresów API otrzymamy w formacie JSON geo informację o swoim adresie IP z zaznaczeniem czy jest on chroniony przez wspomnianą usługę, czy nie: "protected": false. Jeśli z ciekawości do metody insights dodamy parametr ?ip=$IP okazuje się, że możemy taką informację otrzymać o dowolnym (poprawnym) adresie IP w internecie. Na przykład: 1.1.1.1. W praktyce oznacza to, że oprócz VPN możemy gratis dostać usługę GeoIP znaną z Maxmind. W celach testowych zebrałem sobie 1000 adresów IP, dla których chciałbym sprawdzić informacje geo. Skoro północny serwis mi to oferuje za darmo to wystarczy uruchomić prosty skrypt:
[ czytaj całość… ]

Ataki na systemy statystyczne za pomocą HTTP Referer Spoofing

02/08/2020 w Ataki Internetowe Możliwość komentowania Ataki na systemy statystyczne za pomocą HTTP Referer Spoofing została wyłączona

Pierwszy raz z opisem ataku HTTP Referer Spoofing spotkałem się w 2008 roku na łamach magazynu Linux+. Paweł Szcześniak opisał, jak za pomocą tej metody możemy wstrzykiwać odnośniki do agresywnej strony w innych systemach statystycznych w celu zwiększenia pozycji SEO – z oryginałem publikacji, który został udostępniony za darmo przez wydawcę możemy zapoznać się tutaj. Rozważmy teraz, jakie inne konsekwencje może nam przynieść taki atak – oraz czy istnieje możliwość jego dostosowania do dzisiejszych systemów statystycznych.
[ czytaj całość… ]

Kilka komplikacji związanych z używaniem DNS Prefetchingu

31/03/2019 w Bezpieczeństwo Możliwość komentowania Kilka komplikacji związanych z używaniem DNS Prefetchingu została wyłączona

K

ilka lat temu opisałem, jak w prosty sposób można przyśpieszyć działanie strony za pomocą mechanizmu DNS Prefetch. Zdając sobie sprawę, że usługa DNS, a prywatność to dwie różne ścieżki – okazuje się, że i ten mechanizm z punktu widzenia bezpieczeństwa ma swoje negatywne aspekty. Duża liczba zapytań DNS, które wywołuje ten mechanizm może dać atakującemu przydatne informacje na temat rozwoju potencjalnych ataków. Na przykład możemy wyobrazić sobie złośliwą stronę internetową, która śledzi użytkowników za pomocą łączy do określonych domen na stronach HTML, a także obserwuje żądania rozpoznawania DNS dla tych domen. Jeśli nasza przeglądarka zaczyna “wchodzić” w tle na inne linki, z których nie mamy zamiaru skorzystać buduje to przestrzeń do potencjalnych nadużyć. W ten sposób ktoś może nam podsunąć złośliwe domeny i wykorzystać je do ataków pokrewnych np. DNS rebinding.
[ czytaj całość… ]

Analiza nagłówka HTTP Server z sieci 1.0.0.0/8 – 5.0.0.0/8

05/05/2015 w Bezpieczeństwo Możliwość komentowania Analiza nagłówka HTTP Server z sieci 1.0.0.0/8 – 5.0.0.0/8 została wyłączona

Z

a pomocą HTTPsrvREAPER (uruchomionego w pięciu wątkach) oraz pracującego dzień i noc Raspberry Pi udało się przeskanować przeanalizować w czasie od sierpnia 2014 r. do kwietnia 2015 r. sieci z zakresu: 1.0.0.0/8 – 5.0.0.0/8. Razem powstało 1.312.618 wpisów zawierających informacje o używanej (bądź nie – Undefined) wersji oprogramowania serwera httpd przez dany adres IP.
[ czytaj całość… ]

HTTP Cache Poisoning via Host Header Injection

27/06/2013 w Ataki Internetowe, Bezpieczeństwo Możliwość komentowania HTTP Cache Poisoning via Host Header Injection została wyłączona

P

owszechną praktyką wśród programistów piszących własne webaplikacje oraz webowych frameworków odkrywających koło od nowa jest poleganie na wartościach zwracanych w nagłówku HTTP Host. Jest to bardzo wygodny sposób na gwarancję, że ta sama aplikacja zostanie uruchomiona na localhoście, serwerach środowiska: developerskiego, testowego, produkcyjnego, innych domenach i subdomenach itd., bez wprowadzania modyfikacji w kod aplikacji. Prosty przykład w PHP:
[ czytaj całość… ]

Nagłówek HTTP X-Frame-Options

25/04/2013 w Bezpieczeństwo Możliwość komentowania Nagłówek HTTP X-Frame-Options została wyłączona

Nagłówek HTTP X-Frame-Options może zostać używany, aby określić politykę zachowania przeglądarki w stosunku do renderowania strony, która została zamknięta w ramkach: <FRAME> lub <IFRAME>. Serwisy internetowe mogą go wykorzystać, aby uniknąć ataków typu clickjacking – poprzez zapewnienie, że ich treść nie zostanie osadzona w innych witrynach.
[ czytaj całość… ]

Format BMP okiem hackera

18/02/2010 w Magazyny Możliwość komentowania Format BMP okiem hackera została wyłączona

P

liki graficzne są dziś szeroko rozpowszechnionym nośnikiem informacji, spotyka się je praktycznie na każdym komputerze. Dobry programista powinien wiedzieć jak wyglądają nagłówki poszczególnych formatów plików graficznych, i jak są przechowywany jest sam obraz. A jak to zwykle bywa, diabeł tkwi w szczegółach.
[ czytaj całość… ]