06 listopada 2010

Dlaczego w obcej sieci nie należy pobierać aktualizacji?

Podczas pracy w obcej lub publicznie otwartej sieci komputerowej, bez wątpienia powinniśmy zachować szczególną ostrożność. Cały nasz ruch sieciowy może być w takim wypadku podsłuchiwany przez innych użytkowników sieci, bądź też samych operatorów lokalnych urządzeń sieciowych. W takiej sytuacji zagrażają nam również głośne w ostatnim czacie ataki przechwytywania sesji HTTP oraz bezpośrednie ataki wymierzone w nasz system operacyjny oraz pracujące pod jego kontrolą usługi i programy. W związku z tym, w trakcie korzystania z obcej sieci najlepiej w ogóle nie transmitować poufnych lub ważnych dla nas informacji oraz w zasadzie warto unikać korzystania z jakichkolwiek zasobów i serwisów wymagających od nas jakiegokolwiek potwierdzenia naszej tożsamości. Jak się jednak okazuje, niezaufane sieci nie są również dobrym miejscem do przeprowadzania jakichkolwiek aktualizacji oprogramowania. Spójrzmy przykładowo, w jak prosty sposób można przejąć całkowitą kontrolę nad w pełni aktualnym systemem operacyjnym, wykorzystując słabości obecne w mechanizmach aktualizacyjnych wbudowanych w najrozmaitsze oprogramowanie użytkowe.

Aktualizacje oprogramowania możemy podzielić na automatyczne (wykonywane bez jakiejkolwiek interwencji użytkownika), pół automatyczne (użytkownik zostaje powiadomiony o dostępności aktualizacji, jednak w celu jej zainstalowania musi podjąć jakąś akcję) oraz ręczne (użytkownik musi podjąć jakąś akcję w celu sprawdzenia dostępności aktualizacji.). Niezależnie od stopnia automatyzacji procesu aktualizacji, sprowadza się on zazwyczaj do sprawdzenia w Internecie odpowiedniego pliku informacyjnego (np. http://updateserver.com/update.xml), z którego to aplikacja może się dowiedzieć o tym, jaka jest aktualna wersja oprogramowania oraz jaka jest lokacja dostępnych plików aktualizacyjnych. Często proces przesyłu pliku informacyjnego nie jest szyfrowany (przesył z wykorzystaniem HTTP) lub w jakikolwiek inny sposób zabezpieczony (np. za pomocą cyfrowych podpisów). Jeśli więc intruzowi uda się (np. za pomocą technik: DNS spoofing, DNS cache poisoning, uruchomienia własnego złośliwego serwera DNS, itp.) skierować aplikację na własny, fałszywy serwer aktualizacji, to będzie on w stanie zainstalować w docelowym systemie praktycznie dowolny, własny kod.

Nawet jeśli proces aktualizacji jest zabezpieczony za pomocą protokołu SSL, nie oznacza to pełnego bezpieczeństwa. Znane są przypadki, że klient procesu aktualizacji i tak nie weryfikuje poprawnie certyfikatu serwera, wobec czego nadal możliwe jest podstawienie fałszywego serwera przez intruza. Podpisywanie pakietów aktualizacyjnych również nie zapewnia pełnego bezpieczeństwa. W takim przypadku wystarczy przykładowo, że intruz zamiast najnowszej wersji oprogramowania, przekaże poprzez fałszywy serwer jego bardzo stare (czyli zawierające wiele znanych luk) wydanie. Aplikacja przyjmie taki pakiet, ponieważ będzie on podpisany jak najbardziej prawidłowym certyfikatem producenta oprogramowania. Podsumowując, proces instalowania fałszywych aktualizacji w systemie ofiary wygląda więc zazwyczaj następująco:
  • aplikacja lub jej użytkownik rozpoczyna proces aktualizacji,
  • aplikacja z pomocą serwera DNS rozwiązuje nazwę domeny (np. updateserver.com), która wg jej wiedzy przechowuje plik informacji o aktualizacjach (np. http://updateserver.com/update.xml),
  • intruz przy pomocy technik zaburzania pracy systemu DNS przekazuje aplikacji jako adres IP serwera aktualizacji adres własnego, fałszywego serwera,
  • aplikacja pobiera i przetwarza fałszywy plik informacji o aktualizacjach (http://adres_IP_intruza/update.xml),
  • aplikacja stwierdza dostępność aktualizacji, pobiera wskazaną (fałszywą) aktualizację i rozpoczyna proces instalacji kodu dostarczonego przez intruza.
W lipcu 2008 roku Francisco Amato, specjalista związany z grupą InfoByte opublikował narzędzie ISR-evilgrade v1.0.0. Evilgrade pozwala na wykorzystanie słabo zabezpieczonych mechanizmów aktualizacji wielu aplikacji w celu instalacji w docelowym systemie dowolnego, własnego kodu, z wykorzystaniem  fałszywego serwera aktualizacji. Narzędzie to w ostatnim czacie doczekało się wydania 2.0.0 i przy tej okazji warto zapoznać się z jego interesującymi możliwościami. Evilgrade pozwala potencjalnemu intruzowi na wykorzystanie procesów aktualizacyjnych w ponad 60 popularnych aplikacjach. Spójrzmy na praktyczny przykład całkowitego przejęcia kontroli nad docelowym systemem Windows za pomocą procesu aktualizacyjnego Javy:


W praktyce intruz musiał więc tylko uruchomić fałszywy serwer aktualizacji Javy, za pomocą uruchomienia odpowiedniego modułu Evilgrade'a. Następnie musiał już tylko przekonać ofiarę, że serwer (javadl-esd.sun.com) z którego Java pobiera aktualizacje znajduje się pod lokalnym adresem IP systemu, na którym pracuje Evilgrade. Możliwe jest to przykładowo w wyniku zastosowania lokalnego specjalnie spreparowanego serwera DNS, który będzie poszczególnym stacjom w sieci LAN podsuwany za pomocą serwera DHCP lub za pomocą dowolnego innego ataku zdolnego do wpływania na usługę DNS. Ręczne lub automatyczne sprawdzenie dostępności nowej wersji Javy spowoduje w takich warunkach nawiązanie kontaktu z fałszywym serwerem aktualizacji, który powiadomi klienta o dostępności rzekomej bardzo ważnej aktualizacji. Zainstalowanie fałszywej aktualizacji spowoduje wprowadzenie do systemu ofiary dowolnego kodu zdefiniowanego przez intruza.

Co ciekawe, proces aktualizacji Javy został zabezpieczony w taki sposób, że możliwe jest jedynie wykonanie plików wykonywalnych podpisanych odpowiednim certyfikatem. Okazuje się jednak, że zabezpieczenie to można łatwo obejść, podsuwając na początek plik Java Web Start (javaws.exe) z argumentami pozwalającymi na pobranie i zainstalowanie kolejnego, tym razem dowolnego programu! Poszczególne programy aktualizacyjne są więc podatne na powyższy typ ataków albo w wyniku niestosowania żadnych zabezpieczeń, albo tak jak to ma miejsce w przypadku Javy, w wyniku stosowania zabezpieczeń łatwych do obejścia.

Podsumowując powyższy przykład, należy przede wszystkim zapamiętać, że wykonywanie jakichkolwiek czynności administracyjnych, w tym pobieranie aktualizacji jakiegokolwiek oprogramowania powinno się odbywać wyłącznie w środowisku znanej nam, bezpiecznej sieci komputerowej. Oczywiście sama zasada przeprowadzanie tego typu ataków jest już znana od lat, niemniej jednak dopiero narzędzia takie jak Evilgrade pozwalają każdemu na bliższe zapoznanie się zagrożeniami oraz przeprowadzanie praktycznych ataków testowych. Warto również podkreślić, że ataki na procesy aktualizacyjne są praktycznie niezależne od docelowej platformy. W podobny sposób można wprowadzić dowolny kod do innych systemów operacyjnych niż Windows. Jedyne co musi w tym celu zrobić potencjalny intruz, to dobranie odpowiedniego kodu transmitowanego pod postacią rzekomej aktualizacji.