Menu dostępności

Eksfiltracja danych przy użyciu protokołu ICMP i komendy ping.exe

Badając różne metody eksfiltracji danych, natknęliśmy się na pewien ciekawy proof of concept, który postanowiliśmy przetestować i opisać w dzisiejszym artykule. Tym razem skupiliśmy się na możliwości przesłania ładunku (shellcode) za pomocą protokołu ICMP i zaimplementowanej w systemach funkcji ping.

Na temat eksfiltracji danych przy użyciu różnych metod i protokołów pisaliśmy już wcześniej w kilku artykułach tutaj. Ostatnim jaki opisaliśmy było użycie protokołu Finger do wykradania i pobierania danych z Internetu.
Czas opisać kolejny atak z użyciem ICMP.


Możliwości ICMP do przeprowadzania ataku

Jeśli nie czytaliście naszego poprzedniego artykułu o ataku ICMP, to gorąco polecamy. Opisaliśmy w nim sam protokół ICMP i pokazaliśmy tunelowanie. Specjalnej uwagi wymaga fakt, że w ICMP można dostarczyć bufor, który może pomieścić aż 65 500 bajtów! Mając tak duży limit, możemy łatwo przemycić kod powłoki (shellcode) do naszego żądania ICMP, a następnie wstrzyknąć go do procesu po stronie słuchacza (ang. listener), czyli inaczej komputera, na którym jest uruchomiony program kliencki. W kontekście ataku i eksfiltracji danych z sieci powyższa informacja oznacza, że odpowiednio przygotowane złośliwe oprogramowania na komputerze klienckim może załadować (przygotować) pakiety ICMP z zawartością pliku lub dane i przekazać je dalej w postaci pakietów żądań ICMP do miejsca docelowego. Miejsce docelowe to na ogół program nasłuchujący (serwer nasłuchujący C2), który odczytuje i rozpakowuje pakiety ICMP. Inną metodą może być przechwytywanie pakietów, takie jak TCPDUMP – nasłuchiwanie pakietów ICMP z adresu IP inicjującego klienta.

Zaczynając od dostarczania ładunku (shellcode), wymagana jest tylko kompilacja lokalnie kodu w C# w programie Visual Studio lub przy użyciu wbudowanego w Windows programu „csc.exe”. Musimy pamiętać o zaimportowaniu zależności. Jedyny potrzebny pakiet to „System.Net.NetworkInformation”.

Poniżej prezentujemy kod klienta i serwera C2, który należy skompilować i uruchomić w celu umożliwienia komunikacji i przesłania shellcode.


Kod serwera ICMP

Kod serwera to nic innego jak funkcja sendShellcode, przesyłająca shellcode określany w zmiennej „buf” do adresu IP podanego w wywołaniu funkcji Send. TTL ustawiony jest na 64 a timeout na 1000. To pozwoli nam przesłać w interwałach czasowych przez ping kod do drugiego hosta.


Kod klienta ICMP

Kod klienta jest nieco dłuższy niż serwera, ponieważ po jego stronie leży przetwarzanie i uruchomienie schellcode. Implementuje dwie funkcje. Jedna do pobierania kodu (getShellCode) druga do jego uruchomnienia (shellCodeInjection). Klient wykorzystuje także zewnętrzne klasy biblioteki Windows „kernel32.dll”: OpenProcess, VirtualAllocEx, WriteProcessMemory oraz CreateRemoteThread.

Cała komunikacja odbywa się po Socket.


Scenariusz przesłania shellcode po ICMP

W naszym scenariuszu będziemy chcieli przesłać za pomocą ICMP kod z serwera C2 o adresie IP: 172.16.215.100 do klienta o adresie IP:172.16.215.3 ładunek (shellcode) pozwalający uruchomić na nim kalkulator Windows. W tym celu musimy wykonać następujące kroki.


Krok 1. Przygotowanie ładunku i kompilacja kodu serwera c2

Zanim skomplikujemy kod serwera najpierw wygenerujemy ładunek (shellcode). Wykorzystamy do tego serwer Kali i narzędzie metasploit. Za pomocą przełącznika „-f csharp” wygenerujemy shellcode dla C#, który posłuży nam jako kod do pliku źródłowego.

Zaznaczoną na biało sekcję kodu shellcode należy przekopiować do pliku serwera „shellcodeInjector.cs”. Należy tez zmienić adres IP wskazując na adres IP klienta Windows 10.


Krok 2. Kompilacja i uruchomienie kodu na kliencie (komputerze ofiary)

Kopiujemy na maszynę kliencką Windows 10 plik „pingInjection.cs”. Musimy w nim zmienić dwie wartości:

– adres IP lokalnej maszyny, w funkcji getShellCode() w wywołaniu Bind. Bind wykonywany jest do lokalnego adresu IP z portem o wartości 0.

– Numer pid procesu programu Windows, pod który chcemy wstrzyknąć shellcode. Wartość parametru „notepadIPID”.

Kompilację kodu uzyskamy poprzez poniższą komendę.

Podobnie musimy zrobić z kodem na kliencie Windows 10 z plikiem „pingInjection.cs”.

Po udanej kompilacji i uruchomieniu obu programów na kliencie Windows 10 oraz na serwerze C2 powinniśmy zobaczyć uruchomione okno kalkulatora Windows:

Popularne

Alarm dla administratorów i działów bezpieczeństwa – krytyczna luka CVE-2025-59287 w Windows Server Update Services wykorzystywana przez cyberprzestępców! Zabezpiecz się, zanim Twoja infrastruktura padnie ofiarą ataku

Alarm dla administratorów i działów bezpieczeństwa – krytyczna luka CVE-2025-59287 w Windows Server Update Services wykorzystywana przez cyberprzestępców! Zabezpiecz się, zanim Twoja infrastruktura padnie ofiarą ataku

Pojawiła się groźna luka, oznaczona jako CVE-2025-59287, pozwalająca atakującym na zdalne wykonanie kodu w systemach z rolą Windows Server Update Services („WSUS”). Co gorsza, został już udostępniony publiczny ex...
Jak poznać hasło administratora lub użytkowników logujących się do Twojego komputera?

Jak poznać hasło administratora lub użytkowników logujących się do Twojego komputera?

Jeśli masz odrobinę szczęścia lub „odpowiednie umiejętności” i potrafisz zdobyć lokalne uprawnienia administracyjne na Twoim komputerze w firmie lub zaliczasz się do grona tych szczęściarzy, którzy pracuj...
Nowo odkryte podatności w ChatGPT pozwalają przekonać chatbota do ujawnienia wrażliwych danych

Nowo odkryte podatności w ChatGPT pozwalają przekonać chatbota do ujawnienia wrażliwych danych

Najnowsze badania firmy Tenable ujawniają zestaw co najmniej siedmiu poważnych podatności w modelach AI GPT‑4o i GPT‑5, wykorzystywanych przez ChatGPT, które umożliwiają złośliwym podmiotom przejęcie k...
Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

Jak zmienić nieznane/zapomniane hasło Administratora na Windows?

W tym artykule pokażemy, jak możemy zmienić hasło administratora na komputerze posiadając do niego fizyczny dostęp. Artykuł ten można potraktować także jako przestrogę dla firm, które nie zaimplementowały jeszcze odpo...
Krytyczna aktualizacja – Microsoft łata aktywnie wykorzystywaną podatność w jądrze systemu Windows

Krytyczna aktualizacja – Microsoft łata aktywnie wykorzystywaną podatność w jądrze systemu Windows

W listopadowych aktualizacjach bezpieczeństwa Microsoft załatał ponad 60 podatności, w tym jedną klasyfikowaną jako aktywnie wykorzystywany „zero-day” w jądrze systemu Windows. Luka oznaczona numerem CV...