Nowe podejście zmusza agenta do testów penetracyjnych sterowanego przez LLM do udowodnienia naruszenia, zamiast jedynie go deklarować, wykorzystując nonce typu challenge-response, które eliminują fałszywe alarmy. Technika ta, zaprezentowana w ramach frameworka HALO, zmienia „wygląda na to, że uzyskaliśmy powłokę” na „faktycznie mamy powłokę”.
Dlaczego fałszywe alarmy dotyczące naruszeń są istotne
Automatyczne silniki eksploatacji oparte na dużych modelach językowych mogą generować dziesiątki „skutecznych” przejęć portów podczas jednego uruchomienia. Wiele usług w bannerach wyświetla ciągi znaków takie jak „uid=0”, a specjalnie przygotowany cel może naśladować te wyniki bez faktycznego wykonania kodu atakującego. Gdy agent ufa takim odpowiedziom, każda kolejna decyzja — czy to dotycząca ruchu bocznego (pivot), eksfiltracji danych, czy przemieszczania się wewnątrz sieci — opiera się na kłamstwie. Zespoły ds. bezpieczeństwa marnują godziny na ściganie fantomowych punktów wejścia, a osoby reagujące na incydenty mogą błędnie priorytetyzować realne zagrożenia.
Zamiana deklaracji w dowód
Rozwiązanie to czerpie z klasycznych trików uwierzytelniających. Przed uruchomieniem exploita system atakującego generuje unikalny token, czyli nonce, i osadza go w ładunku (payload). Exploit musi zwrócić dokładnie ten sam token, aby kontroler uznał wynik za autentyczne naruszenie. Podrobiony banner nie jest w stanie odgadnąć nonce; musi on wykonać kod atakującego, aby osadzić token w odpowiedzi. Jeśli zwrócone dane nie zawierają pasującego nonce, próba zostaje odrzucona jako fałszywy alarm.
Ta zmiana zmienia model weryfikacji z „wynik wygląda poprawnie” na „wynik dowodzi wykonania kodu”. Eliminuje to błąd optymizmu, który dotyka autonomiczne narzędzia ofensywne.
Budowanie niezawodnej drabiny dostarczania
Dostarczenie ładunku do celu wciąż wymaga solidnego łańcucha dostaw. HALO klasyfikuje trzy powszechne ścieżki:
- Reverse shells – przejęty host inicjuje połączenie zwrotne do nasłuchującego serwera kontrolowanego przez atakującego. Przydatne, gdy ruch przychodzący jest blokowany.
- Bind shells – atakujący łączy się bezpośrednio z usługą nasłuchującą na celu. Działa, gdy filtry ruchu wychodzącego są mało restrykcyjne.
- Blind callbacks – jednostronny sygnał (np. zapytanie DNS), który potwierdza wykonanie kodu w wysoce ograniczonych środowiskach, gdzie nie można otworzyć bezpośredniego kanału komunikacji.
Każdy krok w tej drabinie musi zachować nonce, w przeciwnym razie etap dowodzenia zawiedzie w dalszej części procesu.
Zapewnienie samowystarczalnych exploitów
Innym źródłem fałszywej pewności jest poleganie na zewnętrznych bibliotekach, których może brakować na celu. HALO pakuje każdy wymagany komponent do pojedynczego pliku przed wysyłką. Następnie pakiet jest testowany w piaskownicy (sandbox), która celowo nie posiada oryginalnych zależności. Jeśli exploit nadal działa, artefakt jest prawdziwie samowystarczalny i można mu ufać w rygorystycznie zabezpieczonym systemie.
Czyszczenie śladów deweloperskich
Podczas przygotowań do publicznego wydania autor odkrył, że w historii Git wciąż znajdują się rzeczywiste adresy IP. Czyste drzewo robocze nie usuwa tych rekordów; Git przechowuje każdy commit. Autor przeredagował repozytorium do pojedynczego, czystego commita i zastąpił wyciekłe adresy zakresami przeznaczonymi wyłącznie do dokumentacji, zdefiniowanymi przez RFC 5737 (na przykład 192.0.2.0/24). Zapobiega to przypadkowemu ujawnieniu infrastruktury produkcyjnej podczas udostępniania narzędzia.
Praktyczne zasady dla narzędzi bezpieczeństwa
- Używaj zakresów IP przeznaczonych wyłącznie do dokumentacji w każdym zestawie testowym.
- Usuwaj sekrety i pliki o określonym zakresie (scope files) z pierwszego commita.
- Stosuj nonce typu challenge-response, aby zweryfikować każde zgłoszone naruszenie.
- Waliduj dokładnie ten plik, który zostanie wysłany, a nie tylko luźno powiązany ze sobą skrypt.
Dowód wygrywa z optymizmem. Zmuszając autonomicznego agenta do testów penetracyjnych do przedstawienia weryfikowalnego tokena, HALO pokazuje, że naruszenie jest naruszeniem tylko wtedy, gdy cel może udowodnić, że wykonał kod atakującego. Najpierw buduje się bramę; wszystko inne przychodzi później.
