Jak obiecaliśmy w jednym z naszych poprzednich wpisów na temat zestawów exploitów (Nuclear EK), zamierzamy przyjrzeć się bardziej dogłębnie zestawowi Angler Exploit Kit. Angler EK jest prawdopodobnie najbardziej wyrafinowanym zestawem exploitów wykorzystywanym obecnie przez cyberprzestępców. Jest on pionierem rozwiązań, które inne zestawy exploitów zaczęły stosować później, takich jak wykrywanie antywirusów oraz szyfrowane pliki droppera. Ponadto, Angler zazwyczaj najszybciej integruje najnowsze zagrożenia zero-day, takie jak zagrożenie zero-day dla Adobe Flash (CVE-2015-0311) sprzed kilku tygodni, a także stosuje wyjątkową obfuskację. Wreszcie, Angler uruchamia zrzucone złośliwe oprogramowanie z pamięci, bez konieczności zapisywania go na dysku twardym; ta unikalna technika wśród zestawów exploitów sprawia, że tradycyjne technologie antywirusowe mają ogromne trudności z jego wykryciem, ponieważ opierają się na skanowaniu systemu plików.
Aczkolwiek Angler jest najbardziej zaawansowanym zestawem exploitów w dzisiejszym krajobrazie zagrożeń, klienci Websense są chronieni przed tym zagrożeniem za pomocą ACE, naszego zaawansowanego silnika klasyfikacyjnego, na następujących etapach:
- Etap 2 (przynęta) – ACE wykrywa zagrożone strony internetowe.
- Faza 3 (Przekierowanie) – ACE wykrywa wstrzyknięty kod, który przekierowuje użytkownika na stronę z exploitem.
- Faza 4 (Exploit Kit) – ACE wykrywa złośliwy kod, który próbuje wykonać ten cyberatak.
- Stage 5 (Dropper Files) – ACE posiada detekcję dla plików binarnych związanych z tym atakiem
Obfuscation
Strona docelowa Anglera składa się z czterech podstawowych części. Po pierwsze, znajduje się na niej widoczny angielski tekst, który jest wykorzystywany do tego, aby ofiara zestawu exploitów uwierzyła, że trafiła na legalną stronę. Po drugie, zawiera ona różne procedury deobfuscacji, których zadaniem jest usunięcie złośliwych skryptów. Skrypty te znajdują się w znacznikach klasy p i są zakodowane jako base64. Dekodowanie ciągów znaków base64 ujawnia rzeczywisty, zakodowany kod zestawu exploitów. I wreszcie, strona docelowa zawiera kilka zaszyfrowanych ciągów znaków, które zawierają różne adresy URL prowadzące do różnych exploitów (Flash, Silverlight, Internet Explorer) zawartych w zestawie.
Przykłady ze strony docelowej Anglera
Deobfuscated Exploit Code
Po deobfuscacji strony docelowej ujawniona zostaje prawdziwa natura kodu. Angler, podobnie jak Nuclear i różne inne zestawy exploitów, wykorzystuje bardzo podstawową drugą warstwę obfuskacji, aby jeszcze bardziej utrudnić wykrywanie przez produkty bezpieczeństwa.
Używa on również detekcji antywirusowej, a także wykrywa różne rozwiązania wirtualizacyjne (VMWare, VirtualBox, Parallels) oraz proxy do debugowania stron internetowych o nazwie Fiddler, które jest szeroko wykorzystywane przez badaczy bezpieczeństwa. Zaimplementowanie tych środków bardzo utrudnia obserwowanie i badanie tego zestawu exploitów w środowisku naturalnym, ponieważ większość badaczy bezpieczeństwa często opiera się w dużym stopniu na tych narzędziach.
Wykrywanie różnych plików .sys i .dll, które należą do oprogramowania AV i wirtualizacyjnego
VMWare, VirtualBox, Parallels wykrywanie, jak również Fiddler web debugging proxy
Najbardziej unikalną cechą Anglera jest wykorzystanie tych zaszyfrowanych ścieżek URL. Do szyfrowania i deszyfrowania tych danych Angler wykorzystuje prosty szyfr oparty na transpozycji (w uproszczeniu: szyfrowanie liter).
Rutyna deszyfrująca jest osadzona w zaszyfrowanej części zestawu exploitów.
Rutyna deszyfrująca znaleziona w zestawie
Rutyna deszyfrująca sformatowana i skomentowana
Użyjemy bardzo prostego przykładu, aby zademonstrować, jak działa deszyfrowanie. Załóżmy, że nasz szyfr (zaszyfrowane dane) to „TEER CSURH TO PLTAOEL IX TP”, a nasz klucz deszyfrujący to „OBFUSCATE”. To co robi Angler, to bierze pod uwagę kolejność alfabetyczną liter w kluczu i na tej podstawie zmienia układ tekstu szyfrującego. Na przykład:
OBFUSCATE → 6,2,5,9,7,3,1,8,4
To daje nam kolejność liter w tekście szyfrującym. Używając tego możemy go łatwo odszyfrować poprzez zmianę kolejności liter.
Przykładowe odszyfrowanie
Na koniec usuwamy białe znaki z odszyfrowanego ciągu znaków. Oczywiście, jest to niezwykle rudymentarna forma szyfrowania i byłaby bardzo łatwa do złamania nawet bez klucza, gdyby (jak w powyższym przykładzie) tekst jawny składał się z rzeczywistych słów. Jednak Angler wykorzystuje wysoce losowe adresy URL, więc ten rodzaj szyfrowania jest więcej niż wystarczający do ukrycia prawdziwej natury tych ciągów i rzeczywistych ścieżek URL przed różnymi produktami zabezpieczającymi.
Reszta odobfuskowanego kodu jest zgodna z typowymi schematami zestawów exploitów: znajdują się tam różne procedury wykrywania wtyczek i sprawdzania wersji, dzięki czemu zestaw exploitów „wie”, który exploit (lub które exploity) należy uruchomić na celu. Jest tam również sporo procedur do tworzenia shellcode’u, ponieważ Angler wykorzystuje wieloetapowy shellcode, w którym poszczególne etapy są kodowane i dekodowane przez poprzednie. Zawiera również zakodowany na sztywno klucz szyfrowania/deszyfrowania dla pliku droppera.
Klucz szyfrujący dla ładunku
Wieloetapowy kod powłoki
Dropper
Jeśli exploit się powiedzie, ładunek Anglera zostaje zrzucony na system ofiary. W trakcie podróży przez sieć ładunek jest nadal zaszyfrowany i zostaje później odszyfrowany przez końcowy etap shellcodu. Technika ta jest wykorzystywana w celu utrudnienia wykrycia złośliwego droppera przez tradycyjne systemy wykrywania włamań (IDS). Jak wspomnieliśmy wcześniej, Angler wykorzystuje droppery „bezplikowe”, co oznacza, że są one uruchamiane bezpośrednio z pamięci. Dropper wykorzystywany przez Anglera nosi nazwę Bedep, który jest właściwie tylko downloaderem – to znaczy, sam w sobie nie jest złośliwy, ale jest wykorzystywany do pobierania i wykonywania różnych rodzajów złośliwego oprogramowania.
Ładunek składa się z kombinacji shellcodu i Bedep DLL. Jeśli pierwsze kilka bajtów ładunku to „909090” (NOPs lub No Operations w asemblerze x86), DLL zostanie załadowana z pamięci, w przeciwnym razie zostanie zapisana na dysku, tak jak zwykły plik droppera. Kod powłoki jest odpowiedzialny za uruchomienie DLL z pamięci.
Kod powłoki rozwiązuje interfejsy API takie jak kernel32.dll i wininet.dll
Podsumowanie
Angler Exploit Kit jest bez wątpienia jednym z najniebezpieczniejszych zestawów exploitów, jakie istnieją obecnie na wolności. W swoim arsenale posiada różne techniki pozwalające na pokonanie tradycyjnych metod wykrywania, takie jak:
- Unikalna obfuskacja
- Wykrywanie oprogramowania antywirusowego/wirtualizacyjnego
- Zaszyfrowany ładunek
- Infekcje bezplikowe
Dodatkowo Angler często jako pierwszy przyjmuje najnowsze exploity, które od czasu do czasu obejmują zero-day. Stale ewoluująca natura Anglera podkreśla również potrzebę rozwiązań bezpieczeństwa, które zapewniają ochronę w całym łańcuchu zabójstw, zamiast skupiać się tylko na jednym jego etapie.
.