🔥 5 promocji w KinetyceGemini Pro 170 zł -91%Adobe CC 169 zł -84%Brain.fm 109 zł -70%i 2 więcej do 13.09 Zobacz →
Przejdź do treści
Malware

Stack stringi w złośliwym kodzie. Jak malware ukrywa swoje intencje przed analizą

Złośliwe oprogramowanie stosuje techniki zaciemniania, aby uniknąć prostego wykrycia. Przykładem są stack stringi – łańcuchy znaków budowane w pamięci w czasie wykonania, niewidoczne dla narzędzi takich jak „strings”. Wyjaśniamy, jak działają i co to oznacza dla obrony.

3 min read
Abstract composition of fragmented characters floating over a dark circuit board, with a magnifying glass casting a beam of light that illuminates only a few scattered letters, while the rest remain in shadow.

Ukrywanie intencji w kodzie – czym są stack stringi

Każdy program, również złośliwy, operuje na ciągach znaków – adresach URL, nazwach plików, kluczach rejestru. Tradycyjne narzędzia analityczne, takie jak polecenie „strings” lub skanery sygnatur, wyciągają te dane wprost z pliku binarnego. Atakujący wiedzą o tym od dawna i stosują techniki zaciemniania, które utrudniają automatyczne wykrycie. Jedną z takich technik są stack stringi, opisane w analizie opublikowanej przez badacza ISC SANS.

Stack string to łańcuch znaków konstruowany dynamicznie podczas działania programu – na stosie (stosie procesora), a nie przechowywany jako gotowy tekst w sekcji danych (np. .rodata). Zamiast jednego zwartego fragmentu, w kodzie pojawia się seria instrukcji przypisujących pojedyncze bajty do kolejnych komórek pamięci. W efekcie analityk przeglądający plik nie zobaczy czytelnego adresu czy komendy – zobaczy jedynie szereg liczb szesnastkowych.

Jak wygląda implementacja w języku wysokiego poziomu

Chociaż stack stringi kojarzą się z asemblerem, można je zrealizować także w C czy C++. W artykule przytoczono przykładowy kod, w którym funkcja stackStringExample wypełnia tablicę znak po znaku wartościami szesnastkowymi, np. 0x68 (litera 'h’), 0x74 (’t’) itd. Po skompilowaniu taka tablica nie ląduje w łatwej do odczytania sekcji .rodata, ale w całości w sekcji kodu (.text). Oznacza to, że narzędzia takie jak pestr czy strings nie wyodrębnią z pliku adresu „http://encoded-malicious.com/” – zostanie on odtworzony dopiero w trakcie wykonania.

Badacz Xavier Mertens zauważa, że to popularna technika omijania podstawowej analizy statycznej. „Because characters are hex-encoded, it makes them even more difficult to be spotted by the reverse engineer’s eyes” – wskazał w swoim wpisie.

Skutki dla obrony – więcej niż tylko ciekawostka

Stack stringi to nie akademicki eksperyment. To realny element arsenalu twórców malware, który ma wpływ na skuteczność systemów ochronnych. Jeśli antywirus opiera się wyłącznie na sygnaturach wyciągniętych z pliku, może nie rozpoznać szkodliwego ładunku, który buduje swoje ciągi w locie. Dla zespołów SOC i analityków oznacza to konieczność sięgnięcia po bardziej zaawansowane narzędzia, takie jak FLOSS (FireEye Labs Obfuscated String Solver) – który symuluje wykonanie fragmentów kodu lub odtwarza wartości rejestrów – lub po własne skrypty dekodujące.

W praktyce atakujący używają stack stringów nie tylko do ukrycia adresów C2 (centrum dowodzenia), ale również nazw plików, haseł czy kluczy potrzebnych do deszyfracji. Dla przeciętnego użytkownika nie oznacza to jednak paniki – oznacza, że ochrona nie może polegać na jednym, prostym mechanizmie.

Jak się bronić – praktyczne wskazówki

W obliczu takiej techniki defensywa wymaga wielowarstwowego podejścia:

  • Używaj nowoczesnych rozwiązań EDR/AV – narzędzia wykrywające podejrzane zachowanie w pamięci (np. nietypowe alokacje stosu) są skuteczniejsze niż tylko skanowanie sygnatur.
  • Analizuj próbki w środowisku piaskownicy – stack stringi są odtwarzane w momencie wykonania, więc dynamiczna analiza w bezpiecznym kontenerze ujawni ich zawartość.
  • Stosuj reguły YARA – choć stack stringi omijają prosty pattern matching, można tworzyć reguły wykrywające charakterystyczne sekwencji instrukcji (np. wielokrotne movb w krótkim fragmencie kodu).
  • Szkol zespół – analitycy powinni znać techniki zaciemniania i umieć korzystać z narzędzi takich jak FLOSS. Jak podkreśla Mertens, nawet prosty skrypt w Bashu może pomóc w odtworzeniu ukrytego łańcucha.

Dla firm kluczowe jest też kontrolowanie łańcucha dostaw oprogramowania – atak może zacząć się od złośliwego pakietu w repozytorium open source, który zawiera podobnie zaciemniony kod.

Stack stringi to tylko jeden z wariantów obfuskacji. Warto śledzić raporty analityków malware i regularnie przeglądać alerty publikowane przez zespoły CERT. Dobrym punktem wyjścia jest lektura pełnej notatki ISC SANS na temat tej techniki oraz dokumentacja narzędzia FLOSS.

Redakcja sekuret.pl

Redakcja sekuret.pl

AUTHOR