Złośliwe pliki PDF cz. 2

W poprzednim odcinku.
Witam w drugiej części bliskich spotkań ze złośliwymi plikami PDF. W poprzednim odcinku przedstawione zostały informacje na temat budowy i potencjalnego zagrożenia jakim stają się pliki PDF. Szerokie możliwości jakie oferuje format zwróciły uwagę grup, które wykorzystując jego popularność rozpowszechniają wirusy, trojany i innego rodzaju złośliwe oprogramowanie. W poniższym artykule postaram się pokazać sposoby obrony przed atakami z wykorzystaniem plików PDF. Osoby bardziej zainteresowane znajdą opis w jaki sposób sprawdzić czy dany plik jest złośliwy i ewentualnie wyłuskać kod odpowiedzialny za zarażenie komputera.

Jak się (nie) zarazić.
Najwięcej złośliwych plików PDF udało się znaleźć na skompromitowanych serwisach WWW. Były one wykorzystywane jako jedna z metod infekowania komputerów poprzez przeglądarki WWW. Odkąd razem z Adobe Acrobat Reader’em instalowane są rozszerzenia do przeglądarek ta forma rozprzestrzeniania się zagrożeń związanych z plikami PDF jest najczęściej wykorzystywana. Typowym sposobem jest otwieranie pliku PDF w tzw. ramce pływającej (IFRAME), która jest niewidoczna dla użytkownika. W tle uruchamiana jest wtyczka, która otwiera przesłany plik i tym samym powoduje infekcję maszyny. Bardzo rzadko ale także zdarzają się złośliwe pliki PDF przesyłane w postaci załączników w SPAM’ie. W takim przypadku wymagana jest interakcja z użytkownikiem i zachęcenie go do otwarcia takiego pliku.
Ochroną przed zarażeniem się poprzez pliki PDF jest przede wszystkim zdrowy rozsądek. Nie należy otwierać plików pochodzących z nieznanych źródeł. Dobrą praktyką jest także wyłączenie obsługi plików PDF w przeglądarce. Dodatkowo możemy wyłączyć obsługę JavaScript’u w programie Adobe Acrobat Reader, lecz nie jest to rozwiązanie do końca skuteczne. Ale o tym za chwilę.

Odrobinę ochrony przed złośliwymi PDF’ami mogą nam zapewnić programy antywirusowe. Niestety szybkość aktualizacji baz antywirusowych i wykrywanie (nawet plików obserwowanych od dłuższego czasu) jest sprawą mocno dyskusyjną. Przykładem może być tu wynik ze skanowania jednego ze znalezionych w sieci plików. Do określenia poziomu zagrożenia jaki on stanowił posłużył serwis VirusTotal.com.

Plik zgłoszony do skanowania 19 czerwca 2009 – rezultat:
http://www.virustotal.com/analisis/d6609a00d4e8b6491350a0eb635892c91a6797a964631e744f1e2ae6fb7d4e90-1245418521
Tylko 1 z 41 silników antywirusowych zauważył, że plik jest podejrzany.

Drugie skanowanie z dnia 7 lipca nie przyniosło znacznie lepszych rezultatów:
http://www.virustotal.com/analisis/d6609a00d4e8b6491350a0eb635892c91a6797a964631e744f1e2ae6fb7d4e90-1246955424

Ostatnie skanowanie z dnia 27 lipca:

http://www.virustotal.com/analisis/d6609a00d4e8b6491350a0eb635892c91a6797a964631e744f1e2ae6fb7d4e90-1248685040

Jedynie 4 antywirusy (na 41!!!) zaklasyfikowały plik jako złośliwy.

Jak widać z powyższych danych, nie można całej wiary pokładać w oprogramowanie antywirusowe. Zdecydowanie większe szanse daje stosowanie dobrych praktyk.

Windows – cichy zabójca.
Czasem jednak nawet stosowanie się do wszystkich zaleceń, utrzymywanie aktualnej wersji bazy antywirusowej, filtrowanie poczty i tym podobne techniki nie są w stanie zapewnić odpowiedniego poziomu bezpieczeństwa. Jeżeli złośliwy plik PDF przedostanie się na nasz komputer jest to wystarczające, aby zostać zainfekowanym. Nie musimy nawet otwierać takiego pliku. Dzięki rozszerzeniom jakie instaluje Adobe Acrobat Reader system indeksujący pliki na dysku komputera jest w stanie sam otworzyć plik PDF co w rezultacie uruchamia osadzony wewnątrz niego JavaScript i infekuje maszynę. Wyłączenie obsługi JavaScript’u w programie Acrobat Reader nie pomoże, gdyż wtyczka ignoruje te ustawienia. W takim wypadku użytkownik nawet się nie zorientuje, że właśnie został podłączony do botnet’u i jego komputer służy jako proxy do rozsyłania SPAM’u.

Lepiej zapobiegać niż leczyć.
Na szczęście sytuacja nie jest tak straszna jak mogłoby się wydawać. Microsoft oraz Adobe starają się w miarę szybko wypuszczać aktualizacje swoich produktów, tak by w jak największym stopniu zminimalizować ryzyko nowych infekcji. Utrzymywanie systemu i oprogramowania w aktualnej wersji to podstawowa linia obrony. Monitorowanie informacji na różnego rodzaju portalach związanych z bezpieczeństwem komputerowym może ustrzec przed nieprzyjemną niespodzianką, która często kosztuje nie tylko dane ale także fundusze.

„Doktorze, skalpel proszę…”
Tak jak wspomniano na początku artykułu, nadeszła pora, aby przyjrzeć się jak funkcjonuje złośliwy plik PDF na który można się natknąć w sieci. Za przykład posłuży nam plik, który był skanowany z użyciem serwisu VirusTotal.com. Na początek jednak parę uwag dla amatorów zabaw z wirusami.
1.    NIGDY ale to NIGDY nie nie należy otwierać tego typu plików na komputerze używanym na co dzień. Najlepszym rozwiązaniem jest praca na maszynie wirtualnej (np. VirtualBox) lub w systemie Linux. Polecam drugie rozwiązanie ze względu na ilość dostępnych narzędzi pomocnych w analizie zawartości plików PDF.
2.    Nie należy odwiedzać serwerów, których adresy można znaleźć wewnątrz kodu. A z całą pewnością błędem są próby włamywania się na takie serwery (nawet jeśli intencje macie dobre). Autorzy takich PDFów mają z reguły słabe poczucie humoru i mogą odpowiedzieć na tego typu postępowanie atakiem (typowo: DDoS). Najlepszym wyjściem jest zgłoszenie adresu URL strony WWW (zwłaszcza jeśli jest z Polski) na której wykryliście zagrożenie.
3.    Zdrowy rozsądek – bez niego nie należy zabierać się do roboty :) .
4.    Zestaw narzędzi – będą przedstawione w dalszej części.

Z takim ekwipunkiem można śmiało zaczynać sekcję na pliku PDF.

Pierwsze cięcie…
Na początku warto zorientować się czy dany plik PDF zawiera kod JavaScript. Jak wcześniej było wspomniane, lwia część obecnych w sieci złośliwych plików wykorzystuje błędy w silniku JS. Bardzo prostym i dającym dobre wyniki narzędziem jest PDFiD. Jest to skaner napisany w języku Python, który potrafi wykrywać i usuwać proste techniki zaciemniania w nazwach (patrz rozdział 7.3.5 w opisie formatu PDF). Podaje także statystyki dotyczące obiektów w pliku PDF. Gdy narzędzie stwierdzi, że dany plik zawiera JavaScript możemy przystąpić do kolejnego kroku, czyli do zlokalizowania i wyodrębnienia kodu.

Szukamy głębiej…
Stwierdzenie, że plik PDF zawiera JavaScript nie oznacza od razu, że jest on złośliwy, ale daje poważne przesłanki by tak sądzić, zwłaszcza jeżeli pochodzi z niewiadomego źródła. Aby się przekonać o szkodliwości kodu JS w danym pliku należy go wydobyć i poddać analizie. Pomocnym narzędziem w tym etapie może być PDF-Parser. Potrafi on analizować struktury wewnętrzne i wyszukuje zależności pomiędzy obiektami. Jego bardzo pomocną funkcją jest także możliwość dekompresji strumieni zachowanych z wykorzystaniem biblioteki zlib/deflate (bardzo często stosowana technika ukrywania kodu JS).

Z reguły kod, jeśli jest złośliwy, jest zaciemniony. W przypadku gdy developer poszedł na łatwiznę i wykorzystał jedną z ogólnie dostępnych metod (np. packer) możemy w prosty i szybki sposób odzyskać oryginalny kod. Jednak coraz częściej stosowane są autorskie sposoby kodowania, wtedy musimy użyć specjalnych narzędzi do analizy JavaScript’u.

Malzilla – szwajcarski scyzoryk analityka malware’u
Niezmiernie przydatnym narzędziem wspomagającym pracę każdego analityka złośliwego oprogramowania jest Malzilla. Oprogramowanie umożliwia między innymi analizę kodu JavaScript, uruchamianie go w zamkniętym środowisku i dekodowanie w przypadku gdy jest on zaciemniony. Z naszego punktu widzenia ostatnia z funkcji jest najbardziej przydatna.
Odzyskany z pliku PDF kod JavaScript po uruchomieniu w Malzilli zostanie zdekodowany. Można wtedy podejrzeć właściwy skrypt, który wykorzystując lukę w jednej z funkcji silnika JS wstrzykuje tzw. shellcode. Dalsza część infekcji zależy już od procedur zawartych we wstrzykniętym kodzie. Zwykle ściągany jest wirus lub trojan, który zamienia komputer w masowo wysyłające SPAM zombie.

Shellcode zapisywany jest bezpośrednio w kodzie JavaScript w postaci łańcucha znaków reprezentującego dane binarne. Podawany jest on jako argument do funkcji unescape, która w wyniku zwraca obiekt w pamięci komputera, który następnie jest uruchamiany. W najprostszych przypadkach znalezionego shellcode’u, można było bezpośrednio z niego odczytać adresy URL serwerów, z których pobierane było oprogramowanie infekujące. Jednakże, gdy shellcode jest kodowany, np. z uzyciem funkcji XOR, nie jest to już aż tak proste. O zaawansowanej analizie shellcode’u powstało wiele publikacji i książek, które można łatwo znaleźć w sieci. Tematyka z tym związana znacznie wykracza poza ramy tego artykułu.

Używając wyżej przedstawionych narzędzi i postępując zgodnie ze wskazówkami można określić czy dany plik PDF jest złośliwy i ewentualnie odpowiedzialny za infekcję kod odzyskać do dalszej analizy. O odkryciach i sukcesach w dekodowaniu plików PDF warto informować, także jako przestrogę przed odwiedzaniem stron WWW, którymi się takie pliki propagują.

Krótko na koniec.
Mam nadzieję, że ten krótki artykuł pokazał jak ważną rzeczą jest świadomość tego, że zagrożenia mogą czaić się wszędzie. Nie tylko w formie aktywnie propagujących się robaków internetowych, wirusów które doklejają się do plików wykonywalnych czy złośliwych stron WWW. Także zwykłe pliki, które nie są programami potrafią być niebezpieczne. Jako przykład wybrano pliki PDF – najpopularniejszego i najszerzej obsługiwanego formatu udostępniania informacji. Drogi Czytelniku, miej oczy szeroko otwarte!

Ź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.)

Przydatne narzędzia:
Malzilla
PDFiD
PDF-Parser

Tags: , , , ,

Comments are closed.