Złośliwe pliki PDF cz. 1

Wszędobylski PDF.
Każdy z nas spotkał się z plikami PDF. Są one jednym z najpopularniejszych formatów służącym do przenoszenia i udostępniania informacji. Gdy w 1993 Adobe Systems opracowało jego pierwszą wersję najprawdopodobniej nie podejrzewało, że wzbudzi on tak duże zainteresowanie. Obecnie obsługa plików PDF jest możliwa w każdym systemie operacyjnym oraz w większości urządzeń przenośnych z uwzględnieniem najnowszych telefonów komórkowych. Powszechność formatu szybko wzbudziła zainteresowanie środowisk, które specjalizują się w poszukiwaniach podatności w programach oraz potencjalnych metod ich wykorzystania. Nie trzeba było długo czekać, aby w sieci pojawiły się pierwsze złośliwe pliki PDF wykorzystujące luki w najpopularniejszym programie do odczytu – Adobe Acrobat Readerze. Znaczny wzrost ilości krążących w sieci złośliwych PDF’ów nastąpił w drugiej połowie 2008 roku. Miało to najprawdopodobniej związek z uwolnieniem standardu przez Adobe Systems w lipcu 2008 i publikacją pełnego dokumentu opisującego strukturę i funkcjonalność formatu.

Udział procentowy aktywnych w sieci typów exploitów
związanych z plikami PDF

(w odniesieniu do maksimum aktywności w październiku 2008)

Źródło: Microsoft Security Intelligence Report volume 6 (July through December 2008)
CVE-2007-5659 – exploit związany z podatnością funkcji JavaScript CollabEmailInfo
CVE-2008-2992 – exploit związany z podatnością funkcji util.printf




PDF od środka.
Pliki PDF mają dosyć prostą budowę wewnętrzną. Możemy wyróżnić w nich: nagłówek , sekcję z obiektami , tablicę referencji  oraz stopkę dokumentu . Najważniejszymi elementami są oczywiście obiekty, które przechowują informacje na temat treści jaka wyświetlana jest na ekranie komputera. Format udostępnia funkcjonalność, umożliwiającą osadzanie w dokumencie PDF praktycznie dowolnej zawartości – od standardowego tekstu, poprzez obrazy i nagrania audio do nawet całych animacji i krótkich filmów. Ułożenie obiektów w dokumencie jest prawie dowolne, tzn. muszą one znajdować się pomiędzy nagłówkiem a stopką ale ich kolejność może być przypadkowa. Za prawidłowe lokalizowanie obiektów odpowiada, wspomniana już wcześniej, tablica referencji, która określa położenie każdego z obiektów w pliku.

Nie taki bezpieczny jak by się wydawało.
Rozpatrując aspekty związane z bezpieczeństwem informacji musimy zwrócić uwagę na metody jakie mogą być użyte w celu przejęcia kontroli nad komputerem użytkownika lub zarażenia go złośliwym kodem. Przede wszystkim nowe zagrożenia maskują się przed skanerami antywirusowymi, głównie z wykorzystaniem polimorfizmu jaki jest zapewniany przez format PDF. Realizowany jest on na wiele różnych sposobów: od zamiany kolejności obiektów w dokumencie, poprzez kodowanie lub kompresję strumieni w obiektach na zaciemnianiu kodu infekującego komputer kończąc. Napotykane w sieci pliki z reguły łączą kilka z wymienionych technik uzyskując w ten sposób pewność, że przez długi czas nie będą rozpoznawane przez popularne antywirusy.

Potęga strumieni.
To co stanowi o sile formatu PDF to strumienie. Przechowują one wszelkie informacje jakie możemy zobaczyć po otwarciu pliku… i nie tylko . Od wprowadzenia obsługi języka JavaScript, strumienie mogą przechowywać także kod do wykonania przez interpreter. I to właśnie spędza sen z powiek specjalistów z dziedziny bezpieczeństwa. O ile wcześniej także istniały luki w plikach PDF, które mogły być wykorzystywane do przejmowania kontroli nad komputerem niczego nie świadomej ofiary, to były one nieliczne i stosunkowo łatwe do wykrycia. Obecnie sytuacja jest inna. W związku z tym, że JavaScript jest przechowywany w strumieniach, może on być maskowany z użyciem dostępnych w samym formacie narzędzi, np. kompresowany, kodowany do innej reprezentacji lub nawet szyfrowany. W tabeli poniżej wymienione są tzw. filtry, które dekodują dane binarne zawarte w strumieniu do postaci oryginalnej. Wymienione zostały tylko te filtry które są w stanie odzyskać dane w ich oryginalnej formie. Pominięto np. te odpowiedzialne za kompresję obrazów. Niektóre z nich są parametryzowane, co dodatkowo utrudnia heurystykom analizę i ocenę potencjalnej szkodliwości.

Nazwa filtru

Parametryzowany

Opis

ASCIIHexDecode

Nie

Dekoduje dane binarne zapisane w  reprezentacji heksadecymalnej

ASCII85Decode

Nie

Dekoduje dane binarne zapisane
z wykorzystaniem reprezentacji base-85

LZWDecode

Tak

Dekompresuje dane zakodowane z użyciem metody LZW (Lempel-Ziv-Welch)

FlateDecode

Tak

Dekompresuje dane zakodowane z użyciem metody zlib/deflate

RunLengthDecode

Nie

Dekompresuje dane zakodowane z użyciem algorytmu kodowania długości serii (RLE) zorientowanego na bajty

Crypt

Tak

Dekoduje dane zakodowane z wykorzystaniem algorytmów AES, RC4 lub kryptografii klucza publicznego.


W ostatnio zaobserwowanych plikach PDF, które okazały się być złośliwe, kod JavaScript był kompresowany z użyciem biblioteki zlib/deflate a dekodowany z użyciem filtru FlateDecode przez program do odczytu dokumentów. Dodatkowo bardzo często kod JavaScript jest zaciemniany poprzez użycie różnego rodzaju pakerów, np. udostępnionego na stronie http://dean.edwards.name/packer/. Zwykła linijka w postaci

Zostaje zamieniona na prawie nieczytelną formę:

Takie modyfikacje znacznie utrudniają rozpoznanie, czy dany kod jest złośliwy lub powodują generowanie fałszywych alarmów gdy napotka się zwykły kod JavaScript skompresowany z użyciem takiego narzędzia (np. niektóre biblioteki JavaScript).

Dziurawy silnik.
Obsługa kodu JavaScript w aplikacji nie oznacza od razu, że dane oprogramowanie jest podatne na atak. Głównym odpowiedzialnym jest tu interpreter języka, tzw. silnik. To błędy w nim zawarte pozwalają na wykorzystanie odpowiednio spreparowanych wywołań funkcji do uruchamiania złośliwego kodu. Najczęściej wykorzystywane metody polegają na błędach przepełnienia bufora oraz dostarczeniu tzw. shellcode’u, który wstrzyknięty do pamięci działającego programu (np. Adobe Acrobat Reader’a) pozwala na przejęcie kontroli nad komputerem i zainfekowanie go wirusem. Wszystko odbywa się oczywiście za plecami użytkownika niejednokrotnie bez żadnych zauważalnych sygnałów od strony programu. Najczęściej jedynym objawem jest wzmożony ruch sieciowy jaki generuje komputer. Podczas infekcji shellcode stara się skontaktować ze zdalnym serwerem i pobrać aktualną wersję oprogramowania, które później z reguły podłącza nas do botnet’u i wykorzystuje komputer do rozsyłania SPAM’u.

Gotowy do drogi.
Po tej skondensowanej dawce informacji o budowie i możliwościach formatu, następnym krokiem będzie bliższe przyjrzenie się jak działa prawdziwy, możliwy do znalezienia w sieci, złośliwy plik PDF. Z wykorzystaniem narzędzi, które są ogólnie dostępne, pokażę jak wykryć czy dany plik jest zagrożeniem i ewentualnie jak odzyskać złośliwy kod, który później można poddać analizie. Do zobaczenia w następnej części.

Źródła informacji:
Microsoft Security Intelligence Report volume 6 (July – December 2008)
SANS Internet Storm Center (j. ang.)
Common Vulnerabilities and Exposures (j. ang.) – CVE
Security Focus (j. ang.)
Specyfikacja formatu PDF (j. ang.)

Tags: , , , ,

Comments are closed.