17:45
8/5/2010

Na Facebooku co pewien czas pojawiają się aplikacje (względnie grupy, fanpage lub profile) szybko zdobywające popularność. Ktoś widząc ciekawą stronę na Facebooku, wysyła jej adres do wszystkich swoich znajomych, a następnie ci znajomi do swoich znajomych i tak dalej… W ten sposób, w stosunkowo krótkim czasie, ogromna liczba ludzi wychodzi na stronę facebookowej aplikacji — niestety, niektóre z Facebookowych aplikacji próbują zrobić nam “kuku“. Poniżej opis analizy złośliwej Facebookowej aplikacji, która w błyskawicznym tempie “zainfekowała” setki tysięcy internautów.

Analiza aplikacji na Facebooku

7 maja 2010 sporo osób otrzymało od swoich znajomych “sugestię” dołączenia do Facebookowego Fanpage’a o nazwie “why you should not add your parents as friends on Facebook?“.

zaproszenie/sugestia od zajomego z Facebooka

To co odróżnia Facebookową “sugestię” od klasycznego “zaproszenia” do aplikacji, jest to, że ta pierwsza wysyłana jest przez użytkownika ręcznie, a więc świadomie — prawdopodobieństwo klasycznego spamu jest więc niewielkie. Z tego powodu postanowiłem kliknąć w otrzymanego linka.

why you should not add your parents as friends on Facebook?

Po kliknięciu, moim oczom ukazało się:

Strona złośliwej aplikacji wita nas takim tekstem

Nic prostszego, wystarczy jedynie kliknąć, aby poznać odpowiedź na przedstawione pytanie [przez myśl przemkąć też może atak typu Click-Jacking — dop. redakcji]. W tym momencie spodziewałem się zobaczyć jakąś zabawną fotografię lub filmik, jednak moim oczom ukazało się:

Kolejne instrukcje złośliwej aplikacji Facebookowej

Zgodnie z poleceniem przytrzymałem przez kilka sekund wciśnięty klawisz CTRL. Wtedy pojawiła się kolejna z instrukcji.

OK, czyli właśnie “coś” skopiowałem. Chcąc sprawdzić co mam w schowku, otworzyłem edytor tekstu i wkleiłem tam zawartość schowka.

Zawartość schowka -- do skopiowania tych instrukcji skłoniła nas aplikacja

Na pierwszy rzut oka widać (na podstawie obecności w kodzie “function(p,a,c,k,e,r)“), że został tu zastosowany packer JavaScript base62. Nie jest to jeszcze nic podejrzanego. Packer ten stosowany jest często do zmniejszenia objętości plików, a więc ktoś chciał, aby wklejany kod był po prostu mniejszy. Postanowiłem zapisać kod na dysku do późniejszej analizy, jednak jego zapis został przerwany przez mój program antywirusowy, który poinformował mnie, że próbuje zapisać wirusa (JS/FoobNoob.A). W tym momencie wszelkie podejrzenia na temat “złośliwości” aplikacji nabrały sensu.

Facebookowy “Robak” szybki jak błyskawica

Postanowiłem wrócić na początek całej aplikacji i udokumentować jej działanie za pomocą screenów — wtedy zorientowałem się, że mamy tu do czynienia z czymś rozsyłąjącym się z niesamowitą szybkością. Licznik “fanów” aplikacji zwiększał się szybkością około 30 osób na sekundę.

Poniżej screeny z kolejnymi poleceniami wydawanymi przez aplikację:

Po udokumentowaniu sprawy, przystąpiłem do analizy kodu.

Analiza kodu złośliwej aplikacji

Na początek należy pozbyć się packera. Można to zrobić za pomocą dostępnych w sieci dekompresorów, lub prościej, zamieniając po prostu wywołanie funkcji eval() na document.write(). To spowoduje wypisanie na ekran zdekompresowanej wersji.

zdekompresowany, ale wciąż niezbyt czytelny kod złośliwej aplikacji

Autor kodu przewiedział, że ktoś będzie próbował “rozpakować” skrypt. Kolejny raz mamy więc przed swoimi oczami kod, który kompletnie nic nam nie mówi. Chcąc ułatwić sobie analizę kodu, można go lekko przeformatować i zaznaczyć cechy charakterystyczne:

Kod po 'uporządkowaniu'

To, co najczęściej powtarza się w kodzie, to tajemnicza zmienna “_0x95ea“, która zapewne została tak nazwana w celu utrudnienia analizy kodu. Zmieńmy zatem “_0x95ea” na inną, przyjaźniejszą dla użytkownika nazwę, np. “zm“.

Rozkodowanie facebookowego robaka

Teraz pora rozkodować blok kodów heksadecymalnych. Każdy z kodów powinno się przeliczyć na system dziesiętny, a następnie zamienić na odpowiadający mu znak z tablicy ASCII. Zamiast robić to “ręcznie”, można wykorzystać JavaScript. Pod blokiem z tablicą hexów dodać należy “document.write(zm)“:

Blok hexów po konwersji - tablica ze zbiorem stringów

Na pierwszy rzut oka widać, że mamy do czynienia ze zbiorem funkcji i eventów języka JavaScript, oraz kilkoma bliżej nieokreślonymi nazwami obiektów. Dysponując tablicą funkcji, można podstawić znane już wartości do dalszej części kodu, otrzymując w pełni jasny i zrozumiały kod JavaScript:

Znormalizowany kod

Otrzymany kod w kolejnych liniach wykonuje:

  1. Przypisanie do zmiennej “d” obiektu “document
  2. Ukrycie elementu o ID “mw
  3. Podmiana tekstu na elemencie o ID “a” na ten zawarty w elemencie o ID “b” (teksty wewnętrzne aplikacji – komunikaty)
  4. Przypisanie do zmiennej “s” uchwytu do przycisku “Suggest” na Facebooku
  5. Przypisanie zmiennej “m” uchwytu do przycisku “LikeMe
  6. Zdefiniowanie zmiennej “c” jako zbioru zdarzeń wykonywanych za pomocą myszki
  7. Zdefiniowanie nowego zdarzenia, polegającego na kliknięciu myszką
  8. Wykonanie wcześniej przygotowanego zdarzenia na obiekcie “s” (a więc kliknięcie na “suggest”)
  9. Zaznaczenie wszystkich znajomych z listy (poprzednia instrukcja otworzyła listę znajomych)
  10. Rozesłanie polecenia aplikacji do znajomych za pomocą AJAXa
  11. Kliknięcie na element “m“, czyli dodanie znacznika “Lubię to” przy tej aplikacji. Po tym następuje kolejna podmiana tekstów.

Celem kodu było więc jedynie szybkie rozprzestrzenienie aplikacji w ramach Facebooka. Kod na szczęście nie zawierał instrukcji destrukcyjnych.

Za pomocą powyższego kodu możliwe było wywołanie dowolnej akcji nie wymagającej przeładowywania strony, a więc np.:

  • Wysyłanie wiadomości do znajomych za pomocą czatu
  • Wysyłanie wiadomości wewnętrznych (wiadomość->wyślij nową wiadomość)
  • Zatwierdzanie lub odrzucanie oczekujących zaproszeń
  • Wylogowanie się

Zdecydowanie niemożliwe byłoby wykonanie poniższych czynności:

  • Przejęcie konta użytkownika za pomocą przejęcia sesji — na szczęscie sesje na Facebooku są przypisane do numerów IP, więc samo przejęcie ich identyfikatorów nic nie daje.
  • Skasowanie konta – ta akcja wymaga wielu przeładowań strony i potwierdzeń
  • Zmiana ustawień konta – jak wyżej.

Złośliwe aplikacje na Facebooku — podsumowanie

Przykład powyższej aplikacji dowodzi dwóch rzeczy. Po pierwsze możliwe jest namówienie użytkownika do wykonania szeregu działań, co do których celowości nie jest on przekonany. Po drugie, niezależnie od zabezpieczeń danego serwisu i serwera, aplikacja przestaje być bezpieczna, gdy użytkownik pomaga wykonać “złośliwy” kod po swojej stronie (i niejako za swoją zgodą).

Co Facebook mógłby zrobić, aby zabezpieczyć się przed tego rodzaju atakiem? Najprostszym wyjściem byłoby stosowanie zmiennych nazw elementów wewnątrz strony, a więc używanie np. losowych hashy jako nazw ID. Oczywiście byłoby to jedynie utrudnienie ataku, a nie jego uniemożliwienie, ponieważ elementy te nadal miałyby swoją stałą lokalizację w drzewie DOM.

Chyba pora założyć grupę: “why you should not follow strange instrucions on apps recomended by your friends?” ;-)

Autorem tekstu jest Jakub ‘unknow’ Mrugalski – właściciel serwisu UW-Team.org

 

Chcesz umieścić na Niebezpieczniku swój tekst? Daj nam znać.

Dowiedz się, jak zabezpieczyć swoje dane i pieniądze przed cyberprzestępcami. Wpadnij na nasz kultowy ~3 godzinny wykład pt. "Jak nie dać się zhackować?" i poznaj kilkadziesiąt praktycznych i przede wszystkim prostych do zastosowania porad, które skutecznie podniosą Twoje bezpieczeństwo i pomogą ochronić przed atakami Twoich najbliższych. Uczestnicy tego wykładu oceniają go na: 9,34/10!

Na ten wykład powinien przyjść każdy, kto korzysta z internetu na smartfonie lub komputerze, prywatnie albo służbowo. Wykład prowadzimy prostym językiem, wiec zrozumie go każdy, także osoby spoza branży IT. Dlatego na wykład możesz spokojnie przyjść ze swoimi rodzicami lub mniej technicznymih znajomych. W najbliższych tygodniach będziemy w poniższych miastach:

Zobacz pełen opis wykładu klikając tutaj lub kup bilet na wykład klikając tu.

31 komentarzy

Dodaj komentarz
  1. W świecie, w którym ludzie mają hasła pokroju “kasia1”, pytania do odzyskiwania hasła “Czy lubię placki?” i wykonują takie polecenia, nie ma miejsca na bezpieczeństwo. :)

  2. Ja to wczoraj dostałem, ale byłem na Macbooku. Ta aplikacja wykrywała kod klawisza CTRL, pokazując kolejne instrukcje, ale pod makiem kopiuje się klawiszem “Command”, tak więc (chyba przypadkiem) użytkownicy macbooków byli bezpieczni.

  3. Bardzo dobry tekst, jeden z tych które bardzo wciągają. Ale do odkodowywania i układania kodu są prostsze sposoby np. narzędzia w internecie ;)

  4. @webking: jakie? wymień, niechże się czegoś nowego dowiem!

  5. Do układania kodu korzystam z tego:
    http://www.gosu.pl/decoder/
    Dekodera packer’a trochę się naszukałem, dziś w googlach widnieje na pierwszych stronach, po adres zapraszam via e-mail: webking [malpa] o2.pl

  6. Te 5 skrinów z instrukcją zrób to, zrób tamto przypomniało mi nigeryjskiego(chyba) wirusa dostępnego niegdyś w CDA.

  7. @ipszyc: zaznaj litości czytelnika niebezpiecznika – malzilla, wepawet, http://www.cert.pl/news/2539

  8. To nie jest pierwsza tego typu aplikacja.

    Natknąłem się już na dwie inne wcześniej. Pierwsza to jakieś superprezenty, a druga to jakieś najseksowniejsze filmy.

  9. Sam prawie się dałem nabrać. Prawie bo 1. nie dołączam do każdej grupy i 2. nie jestem idiotą i nie wykonuję wszystkiego co mi się na monitorze wyświetli. Już samo “zmuszanie” usera do wykonania takiego czegoś powinno automatycznie stać się podejrzane.
    Stronę usunęli, jakiś geniusz pokazał co potrafi, team FB miejmy nadzieję zmieni trochę politykę. Koniec historii.

  10. Zawsze pasjonowały mnie takie historie detektywistyczne. :)

  11. Ja natomiast dzisiaj dwa razy dostałem propozycję dodania do ulubionych, stronę http://www.facebook.com/pages/10-Things-A-Woman-SHOULD-Do-That-Will-Make-Sure-Their-Man-Never-CHEATS/123941957621157

    Tutaj skrinszot: http://img441.imageshack.us/img441/5919/cheatingfishing.png

    Też wymagane jest kopiowanie do schowka, tutaj macie kod:

    javascript:(function(){a=’app119466751407827_jop’;b=’app119466751407827_jode’;ifc=’app119466751407827_ifc’;ifo=’app119466751407827_ifo’;mw=’app119466751407827_mwrapper’;eval(function(p,a,c,k,e,r)[…];

    Może te wszystkie zaproszenia i skrypty są robione w ramach eksperymentu, który ma udowodnić, że zabezpieczenia FB obsysają?

  12. @szczypmen
    Ta aplikacja wygląda na identyczną z poprzednią więc pewnie chodzi o to samo ;)

  13. i to jest właśnie to – najsłabszym elementem systemu jest właśnie czynnik ludzki… ;) z tego co pamiętam to Mitnick też o tym wspominał w swojej książce…

  14. Jakiś czas temu w komentarzach pisałem o takich ‘magicznych’ zaproszeniach.
    Najczęściej oferują jakich bug/cheat do gier na FB albo inną, ogólnie pożądaną głupotę (seksowne filmy, jakieś zagadki, możliwość zmiany szaty graficznej FB, itd.).

    Najgorsze jest to, że nawet bez użycia ukrytego kodu JS ludzie rozsyłają to do wszystkich swoich znajomych. Dowcip polega na tym, że robią to wg. instrukcji zamieszczonej na takiej stronie ! Czyli kompletnie nie myślą nad tym, co robią…

    Poprawcie mnie, jeśli się mylę, ale:
    – stworzenie botnetu, przy użyciu stosunkowo świeżych exploitów (dobra, niech będzie, że kupimy sobie zestaw ‘zostań hackerem i posiadaczem botnetu – for dummies’ za ~ $500, żeby było szybciej…) i zastosowaniu opisanej w newsie techniki, jest banalnie proste !
    I mam tu na myśli DUŻY botnet, idący w dziesiątki tysięcy komputerów.
    Co to za problem zrobić kilka takich grup, do których można dołączyć, nadać im kilka chwytliwych nazw i potem patrzeć, jak rośnie nam ilość komputerów-zombie ?

    Dopóki ludzie nie zaczną myśleć, żadne zabezpieczenia nie będą w pełni wystarczające. A patrząc na ilość osób w grupach typu ‘Na to pytanie nie potrafi odpowiedzieć 90% dorosłych, ale każdy 5-latek daje radę ! Sprawdź !’ minie jeszcze duuuużo czasu zanim tak się stanie…

  15. @Torwald – to tylko kwestia czasu. A że stronę może zrobić każdy…
    Wiecie co jest tragiczne? Że nawet studenci trzeciego roku informatyki dali się na to nabrać.

  16. + za arta unknow ;)

  17. @Mike – 3 roku ? Wiesz… Ja na roku mam takie osoby, które w żaden sposób na miano ‘informatyka’ nie zasługują… Potrafi taki obsługiwać komputer, z officem sobie radzi i czasem system postawi. Na tym kończy się ich wiedza…

  18. Widzę pełen profesjonalizm :D Ja właśnie trafiłem na fanpage, który nie robi takich cudów. Tylko żeby pokazać wideo prosi po 1. o Like’owanie tej strony 2. O skopiowanie kawałka javascriptu do paska adresu. Też działa :D

    Co prawda nic malicious nie robi poza rozsyłaniem sugestii do znajomych. A przynajmniej nie zauważyłem niczego złośliwego. Malicious site http://www.face-dontclickme-book.com/pages/WARNING-Proceed-With-Absolute-Caution/113168038718255

  19. Czy da się usunąć to ustrojstwo z konta ?

  20. […] typu ataki zdarzają się na Facebooku coraz częściej. Ciężko powiedzieć, na czym bardziej żerują — czy na braku jasności Facebookowych […]

  21. […] typu ataki zdarzają się na Facebooku coraz częściej. Ciężko powiedzieć, na czym bardziej żerują — czy na braku jasności Facebookowych […]

  22. […] jest przez facebookowe aplikacje — kilka dni temu opublikowaliśmy na Niebezpieczniku analizę złośliwej aplikacji […]

  23. […] się z opublikowaną niedawno na łamach Niebezpiecznika analizą jednej ze złośliwych aplikacji Facebookowych. Dowiesz się jak działa większość ataków […]

  24. […] Unknow z Uw-Team.org (którego znacie m.in. z kapitalnych artykułów o atakach na Blip i analizie złośliwych aplikacji na Facebooku). Bez pomocy Unknowa dziś najprawdopodobniej jeszcze byśmy leżeli — vi.curry na urlopie, […]

  25. […] REMnux umożliwia także analizę złośliwego oprogramowania (JavaScript, Java, Flash) na stronach internetowych (por. nasz artykuł o exploit packach i przykładową analizę złośliwej aplikacji na Facebooku). […]

  26. Dobry artykuł .
    Moja sytuacja jest taka:przyjaciele wysyłają mi jakieś teksty z linkami(co chwilę) potem jak na to się wejdzie to to też ciągle samo za ciebie wysyła to do twoich przyjaciół(to wirus).Np.zmiana tła na fb,i jak na to wejdziesz to ciągle pół obrazu nie widzisz i pisze napis:Instalator Ahora i nic z tym zrobić nie możesz!!

  27. Coś się stało z obrazkami w artykule.

  28. Może troche za późno, ale ja wolałbym tak nie szaleć z document.write(), twórca skryptu mogłby to przewidziec i dodac to jednej ze zmiennych “[jakiskod]” a wtedy wiadomo co by sie stało ;D. Polecam alert() albo document.getElementById(“jakistextarea”).innerText

  29. Hehe, widzę że wasz system komentarzy filtruje XSS i nie tylko :D W poprzednim komentarzu miałem na myśli ” [jakiskod] ” (bez podwójnych liter i spacji oczywiście ;)

  30. Nie wierzę… >tpircs/tpircs< (od tyłu)

  31. Obrazki umarli. Warto jednak kopiować na swój serwer.

Odpowiadasz na komentarz Torwald

Kliknij tu, aby anulować

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: