Niebezpieczne skrypty base64

Popularny system kodowania treści base64 może służyć do obchodzenia zabezpieczeń.

Gdy powstawał internet, niezbędne było opracowanie mechanizmów transmisji danych binarnych za pomocą urządzeń przystosowanych jedynie do niezawodnego przesyłania informacji złożonych z liter, cyfr i znaków specjalnych. Stworzone wtedy dwa standardy, uuencode oraz base64, są używane do dziś, przy czym ten drugi jest popularniejszy, wykorzystywany na przykład do przesyłania binarnych załączników w poczcie elektronicznej. System ma także inne zastosowania, np. enkodowanie znaków w LDAP lub pakowanie archiwów zawierających komplet plików binarnych, by ominąć problem zależności - wszystkie niezbędne pliki są wysyłane w jednym archiwum. W ten sam sposób są enkodowane szyfrowane pliki cookies, a także podstawowe uwierzytelnienie stron (auth basic).

Jak ominąć proste systemy DLP

Ponieważ enkodowanie za pomocą base64 jest bardzo proste i daje w wyniku różne ciągi, zależnie od każdego z elementów, niektórzy włamywacze wykorzystują tę zależność do omijania zabezpieczeń wprowadzanych przez systemy takie jak DLP. Chociaż są wzorce umożliwiające wykrycie transmisji enkodowanej za pomocą base64, a następnie jej dekodowanie, wzorce te albo generują wiele fałszywych alarmów, albo są mało skuteczne. W przypadku danych takich jak karty kredytowe lub numery ubezpieczenia społecznego w USA istnieją wzorce dla danych enkodowanych w base64, ale wystarczy prosta modyfikacja przed kodowaniem, by wzorzec taki nie zadziałał. Modyfikacja może objąć dodanie spacji, wprowadzenie co drugiego znaku (spacji lub nawet losowej litery), a także uzupełnienie informacji losowymi znakami na końcu lub początku. W ten sposób można ominąć wiele narzędzi kontroli ruchu sieciowego, gdyż wachlarz zmian, które można wprowadzić do tekstu przed enkodowaniem, jest bardzo szeroki. Ponadto można wysłać w ten sposób dowolny plik (na komputerach Mac i Linux za pomocą poleceń tar | base64 | nc adres port).

Przemytnicy JavaScriptu

Obecnie wiele ataków (między innymi CSS - Cross Site Scripting) wykorzystuje JavaScript, zatem zadaniem hakera jest takie umieszczenie obcego skryptu, by wykonała go przeglądarka ofiary. Jeśli portal umożliwia umieszczenie kodu enkodowanego jako base64, przeglądarka wykona go, gdyż będzie to obiekt prawidłowo umieszczony, wymagając jedynie dekodowania przed uruchomieniem. Przykładem ataku może być wyświetlanie informacji o prowadzonym właśnie wyszukiwaniu - takie pole można zmanipulować w ten sposób, by wyświetliło skrypt enkodowany w base64, a następnie taki skrypt będzie wykonany przez motor przeglądarki. Nawet usuwanie pól <SCRIPT> nie rozwiązuje problemu, gdyż można enkodować cały blok skryptu wraz z komendami.

Skrypty enkodowane za pomocą base64 spotyka się w wielu stronach internetowych, szczególnie przy obiektach reklamowych lub śledzących odwiedzane witryny. Dodatkowym zastosowaniem może być przenoszenie skryptów lub linków URL umieszczanych w treści rozsyłanych wiadomości e-mail.

Od linku do infekcji

Aby zainfekować komputer ofiary, niezbędne jest wykonanie skryptu oraz pobranie jakiegoś obiektu, który wykorzysta słabość przeglądarek lub zewnętrznych wtyczek, takich jak Flash czy Java. Zamiast umieścić skrypt w ramce IFRAME, można wykorzystać obiekt enkodowany albo wprowadzić kampanię phishingową, w której w treści e-maila byłyby umieszczone linki do złośliwego oprogramowania. Aby utrudnić wykrycie takiego ataku, należy opracowany skrypt JavaScript enkodować za pomocą base64, otrzymując długi ciąg znaków. Taki obiekt po skróceniu za pomocą usługi tinyurl może być następnie wysłany w e-mailu. Użytkownicy przyzwyczajeni są do serwisów skracających linki, zatem wielu z nich kliknie w taki link, odwołując się do serwisu skracającego, który następnie zwróci pełną treść, zawierającą skrypt. Skrypt ten będzie wykonany przez przeglądarkę, prowadząc do infekcji - obecnie tylko Internet Explorer w domyślnej konfiguracji nie wykonuje skryptów wprowadzanych do paska adresu oraz wywoływanych jako link z obcej aplikacji. Aby osiągnąć tę samą funkcjonalność w Firefoksie, niezbędny jest dodatek NoScript, który wprowadza dodatkową barierę zabezpieczeń.

Base64 to nie jest szyfrowanie

Należy odróżnić szyfrowanie od kodowania - do odtworzenia informacji, która była zaszyfrowana, niezbędny jest klucz deszyfrujący, w przypadku kodowania informacji wystarczy użycie algorytmu dekodującego. Przy przesyłaniu zaszyfrowanej informacji najczęściej później jest ona kodowana właśnie za pomocą base64.

Enkodowanie haseł do uwierzytelnienia stron www za pomocą base64 nie jest tożsame z zaszyfrowaniem połączenia, na przykład za pomocą SSL. Jeśli zatem w firmie korzysta się z nieszyfrowanego uwierzytelnienia, pozyskanie hasła przez dekodowanie base64 jest bardzo proste, a zatem jeśli użytkownicy korzystają z tych samych haseł do różnych serwisów, zagrożenie jest oczywiste. Chociaż hasło wysyłane jest w postaci enkodowanej, a zatem nie jest bezpośrednio widoczne dla programu takiego jak tcpdump, brak danych przesyłanych otwartym tekstem nie oznacza bezpieczeństwa transmisji.


TOP 200