Błąd Windows użyty w Stuxnecie nie był prawidłowo załatany od 5 lat

dodał 11 marca 2015 o 10:29 w kategorii Błędy  z tagami:
Błąd Windows użyty w Stuxnecie nie był prawidłowo załatany od 5 lat

W roku 2010 Microsoft nieskutecznie załatał błąd w obsłudze plików LNK umożliwiający zainfekowanie komputera przez samo włożenie do niego odpowiednio spreparowanego dysku USB. Łatę MS można było łatwo ominąć.

Podstawową bronią Stuxnetu był błąd w przetwarzaniu plików LNK (СVE-2010-2568), który pozwalał infekować każdy komputer, do którego został podłączony zarażony napęd USB. Komputery irańskich naukowców, które stanowiły ostateczny cel ataku, nie były podłączone do internetu, zatem możliwość ich zainfekowania przez napędy USB była główną nadzieją twórców wirusa. Błąd ten został pierwszy raz użyty w listopadzie 2008 przez konia trojańskiego Zlob. Z bliżej niesprecyzowanych powodów nikt – oprócz najwyraźniej twórców Stuxnetu – nie zwrócił wtedy uwagi na fakt używania przez Zloba błędu typu 0day i został on załatany dopiero kilka tygodni po odkryciu Stuxnetu. Łata była jednak nie do końca skuteczna.

Wczytywanie ikonek z plików wykonywalnych? Świetny pomysł!

Nie wiemy, jaka idea przyświecała twórcom mechanizmu wyświetlania ikon plików LNK w systemie Windows, gdy wpadli na pomysł, by można je było wczytywać z bibliotek DLL. Pliki LNK, zawierające skróty do innych plików lub folderów, mogą w Windowsie ładować swoje ikony z plików CPL. Z kolei pliki CPL to w istocie pliki DLL. Oryginalny eksploit polegał zatem na wskazaniu jako źródło ikony pliku LNK złośliwej biblioteki DLL. Wystarczyło samo podłączenie do komputera napędu USB je zawierającego i otwarcie dowolnego folderu (lub posiadanie włączonej funkcji AutoPlay) by doszło do infekcji.

Załatane, ale dalej podatne

Gdy błąd został nagłośniony Microsoft wypuścił łatę MS10-046, która wprowadziła listę dozwolonych plików CPL, z których można wczytywać ikony. W styczniu tego roku niejaki Michael Heerklotz odkrył jednak sposób na ominięcie tych ograniczeń. Wykorzystał on logikę mechanizmów zabezpieczeń by przemycić taką ścieżkę do złośliwego pliku, która na skutek wewnętrznej obróbki w systemie przejdzie wszystkie weryfikacje poprawności a jednocześnie wskaże na plik wybrany przez atakującego spoza białej listy.

Fragment kodu umożliwiającego atak

Fragment kodu umożliwiającego atak

Opisany atak ma tym poważniejsze konsekwencje, że działa stabilnie i skutecznie we wszystkich wersjach Windowsa, ponieważ wykorzystuje wbudowane mechanizmy systemu i nie musi przejmować się zabezpieczeniami typu ASLR. Microsoft zainwestował w ostatnich latach wiele wysiłku w utrudnienie przeprowadzenia licznych klas ataków, jednak tego rodzaju błędy są praktycznie niemożliwe do wyeliminowania przez stosowanie ogólnych mechanizmów zabezpieczeń na poziomie systemu operacyjnego.

Aktualizujcie Windowsy albo przynajmniej modyfikujcie rejestr

Aby zabezpieczyć swój system trzeba zainstalować najnowsze aktualizacje. Aby tymczasowo uchronić swój system przed atakiem wystarczy z kluczy rejestru

HKEY_CLASSES_ROOT\lnkfile\shellex\IconHandler
HKEY_CLASSES_ROOT\piffile\shellex\IconHandler

usunąć wartość pola (Default) i zostawić je puste. Spowoduje to, że ikony plików LNK będą białe – ale przynajmniej nikt nie wykona w ten sposób swojego kodu na Waszym komputerze.