Praktycznie co drugi nasz artykuł przedstawia podatności i błędy w systemach Windows. Wcale nie oznacza to, że przyczepiliśmy się do Microsoftu i chcemy coś udowodnić. Po prostu na tym najlepiej się znamy, a popularność Windowsów sprawia, że każdy znajdzie w takiej treści coś dla siebie.
Dziś, z okazji Prima Aprilis przedstawimy „niegroźne”, małe niedopatrzenie w systemie plików Windows, które z powodzeniem może zostać wykorzystane do zrobienia komuś żartu.
Błąd powoduje tymczasową niedostępność procesu explorer.exe, a w zasadzie jego zawieszenie i natychmiastowy restart, co jak się domyślamy powoduje zamknięcie wszystkich otwartych okien File Explorer’a. Jest to całkiem interesujące, ponieważ do takiego zachowania wymagane jest jedynie otwarcie lub odwiedzenie folderu ze specjalnie spreparowanym, niezłośliwym plikiem.

Mechanizm błędu działa dzięki sposobowi, w jaki lokalne linki (piki z rozszerzeniem .URL oraz .LNK) są obsługiwane przez system Windows w sytuacji, gdy są one samoreferencyjne, czyli przekierowują do samego siebie. Zasada tej „podatności” nie jest nowa, podobny problem występował w starszych wersjach Windows 7 z samoreferencyjnymi dowiązaniami symbolicznymi. Odkrywca nowego błędu powiadomił o nim Microsoft, jednak otrzymał odpowiedź, że z powodu ograniczonego wpływu na działanie środowiska problem nie zostanie załatany.


Link z rozszerzeniem URL

W przypadku plików URL stworzenie nowego odnośnika jest bardzo proste. Wystarczy kliknąć prawym przyciskiem myszy w miejsce utworzenia -> Nowy -> Skrót i wprowadzić adres jako cel przekierowania. Może to być adres sieciowy bądź lokalny, strona web czy lokalizacja pliku. Niestety z tego poziomu nie jesteśmy w stanie utworzyć odniesienia do tworzonego właśnie pliku. Po takiej próbie otrzymamy poniższy komunikat:

Należy podejść do tego w inny sposób. Wprowadźmy tymczasową referencję do strony kapitanhack.pl wpisując w lokalizację elementu: https://kapitanhack.pl. Klikając dalej, podając nazwę dla pliku i zatwierdzając, z powodzeniem utworzymy plik o rozszerzeniu .URL, który po otwarciu przekieruje nas do strony internetowej.

Spróbujmy zatem podejrzeć plik w notatniku i sprawdzić jego zawartość:

Jego struktura jest bardzo prosta i opiera się w zasadzie o konstrukcję plików INI (nagłówek, parametr, wartość). Aby stworzyć nasz chytry pliczek potrzebujemy w zasadzie tylko dwóch linijek, w jednej z nich wskażemy ścieżkę do pliku:

Po zapisaniu i zmianie rozszerzenia na URL jesteśmy gotowi do testów. Otwierając plik będziemy świadkami crash’a procesu explorer.exe, zamknięciu wszystkich naszych okien oraz odświeżenia pulpitu.

To intrygujące zachowanie działa również w przypadku udostępnionych zasobów na systemie plików Windows. Po zmianie domyślnej ikonki linku i wymyśleniu prawdziwie brzmiącej nazwy, może być idealnym narzędziem do prankowania, po umieszczeniu na udostępnionym zasobie w firmie. Po za tym, nie widać innych sensownych zastosowań tego błędu. Dopóki nie przejdziemy do drugiego rozszerzenia i bardziej złośliwej metody.


Link z rozszerzeniem LNK

Samoreferencyjne linki z rozszerzeniem LNK, czyli tzw. Shell Links, są czasami wykorzystywane przez zespoły Red Team czy w bezpośrednim ataku hackera na system. To dlatego, że pozwalają na interakcje ze wskazanym w odniesieniu adresem tylko poprzez otwarcie folderu, w którym się znajdują. Nie wymagają żadnej interakcji ze strony użytkownika. Jak się domyślacie mogą być także wykorzystane do zawieszenia procesu explorer.exe i spowodowania sporej frustracji.
Zachowanie plików LNK daje w ogóle sporo możliwości. W adres linku można wpisać na przykład ścieżkę do pliku wykonywalnego EXE i bez żadnej interakcji (tylko poprzez otwarcie folderu) uruchomić plik ukryty gdzieś w systemie. Umieszczenie takiego linku bezpośrednio na pulpicie i dodatkowo ukrycie go powoduje, że użytkownik nie jest świadomy uruchamianego za każdym razem procesu wskazanego w pliku LNK.

Spróbujmy stworzyć plik z rozszerzeniem LNK i skonfigurować go odpowiednio, tak aby kierował do samego siebie. Możemy zacząć od stworzenia skrótu (PPM -> Nowy -> Skrót) do jakiekolwiek pliku, a następnie wejść we właściwości i edytować nasz docelowy „malware”.

Po wpisaniu odpowiednich wartości w polach „Element docelowy” oraz „Rozpocznij w” i próbie zatwierdzenia, otrzymamy komunikat:

Jak widzimy Windows powstrzymuje nas przed stworzeniem skrótu do innego skrótu. Prawdopodobnie ktoś przewidział takie zabawy i ma to na celu zapobieganie tworzeniu nieskończonych pętli skrótów do siebie nawzajem itp.

Edycja pliku LNK manualnie jest nie taka trywialna, ponieważ jest on zapisany w formacie binarnym. Potrzebujemy do tego edytora heksydecymalnego oraz pomocy z oficjalnej dokumentacji Microsoft – tutaj.
Znajdziemy tam informację, o którą nam chodzi. Mianowicie wystarczy ustawić flagę „AllowLinkToLink” znajdującą się w nagłówku pliku Shell Link. Dokładnie jest to dodanie wartości 0x80 do baju na offsecie 0x16. Dla mocno technicznych czytelników zamieszczamy screen z edytora heksydecymalnego z podglądem naszego pliku LNK:

Po zapisaniu zmian trik zadziała tak jak przypuszczaliśmy. Wejście do folderu, w którym znajduje się skrót spowoduje crash procesu explorer.exe.

Możliwe zastosowanie tego błędu zostawiamy do dywagacji czytelnikom. Według nas złośliwych zastosowań może być wiele, chociażby wrzucenie takiego pliku do folderu, w którym znajdują się inne złośliwe pliki i uniemożliwienie ich łatwego podglądu i usunięcia.

Nie zalecamy testowania drugiego sposobu bezpośrednio na pulpicie. Może się to źle skończyć.