W tym artykule zebraliśmy najciekawsze, niedawno odkryte i egzotyczne metody pozwalające w niekonwencjonalny sposób uruchomić pliki binarne (*.exe) na Windows. Opiszemy pośrednie uruchomienie kodu przy użyciu innych wbudowanych w Windows narzędzi.

Cyberprzestępcy stale szukają nowych sposobów pozwalających im na uniknięcie wykrycia przez korporacyjne systemy bezpieczeństwa. Okazuje się, że system plików Windows udostępnia wiele plików binarnych, których ukryte polecenia i przełączniki umożliwiają uruchomienie innych plików binarnych. Nawet jeśli środowisko IT posiada wdrożone restrykcje do uruchamiania aplikacji Windows bądź jest monitorowane uruchomienie takich plików jak „cmd.exe”, istnieje możliwość ominięcia monitoringu i uruchomienia takiego pliku.
W niektórych przypadkach techniki opisane poniżej mogą być użyte do ominięcia produktów pilnujących „białej listy” aplikacji, jeśli reguły nie są poprawnie skonfigurowane (biała lista według ścieżki lub nazwy pliku) lub do zmylenia zdarzeń systemu Windows.

Poniżej prezentujemy 7 najciekawszych metod, jakie udało nam się przetestować i sprawdzić w kontrolowanym środowisku IT.


1. Metoda wykorzystująca ADS (Alternate Data Stream)

Opisywana metoda zakłada uruchomienie programu binarnego ukrytego w metadanych pliku – tak zwanym alternatywnym strumieniu danych (ang. Alternate Data Stream) lub w skrócie ADS. Sposób ten jest mniej znany w obecnym Świecie IT, ale mimio to jest wykorzystywany między innymi w rootkit o nazwie Backdoor.Rustock.A.
Aby ukryć program binarny w pliku (np. pliku tekstowym) możemy wykorzystać do tego wbudowane w Windows polecenie „type”. Istnieją też inne sposobny na ukrycie danych w pliku, takie jak print.exe lub polecenia w Powershell (Set-Content z przełącznikiem -Stream)

Po wykonaniu poniższej komendy, ukryjemy plik binarny kalkulatora w pliku tekstowym „kapitanhack.txt”.

type c:\windows\system32\calc.exe > c:\temp\kapitanhack.txt:calc.exe

Ciekawostką jest, że ADS nie jest widoczny dla użytkownika. Komenda dir zwraca jedynie główne pliki, natomiast nie zwróci strumienia ukrytego w pliku. Żeby zobaczyć strumień należy wykonać komendę „dir” z przełącznikiem „/r”.

Widzimy w sekcji $DATA ukryty program binarny „calc.exe”.

Jak uruchomić program binarny z ADS?

W celu uruchomienia ukrytego strumienia danych z pliku możemy wykorzystać komendę Windows Management Instrumentation (WMI), która prawdopodobnie pozostanie niewykryta przez systemy bezpieczeństwa, jeśli nie wdrożyliśmy w nich odpowiednich reguł. Jej użycie wygląda w następujący sposób.

wmic process call create “ścieżka:stream”

W naszym przypadku musimy wykonać w systemie następująca komendę:

wmic process call create c:\Temp\kapitanhack.txt:calc.exe


2. Metoda z przekazywaniem sygnału „waitfor.exe”

“Waitfor.exe” to plik binarny firmy Microsoft używany do synchronizowania komputerów w sieci poprzez wysyłanie sygnałów. Można go użyć do ukrycia się przed systemami bezpieczeństwa lub do utworzenie przyczółku w środowisku do pobrania payload. Szczegóły na temat komendy znajdziesz w bazie Microsoft tutaj.

Komendą można przesyłać sygnał (ciąg znaków o max. długości 255) do drugiego komputera w sieci. Np. Jeśli odpalimy skrypt z odpowiednimi parametrami, możemy go uruchomić zdalnie. Poniżej przykład – stacja robocza Windows 10 ENG (lewe okno) – komenda waitfor czeka na sygnał “kapitanhack”. Jeśli go otrzyma (od prawe okno) uruchomia payload “calc.exe”. Trigerem komendy jest serwer (prawe okno), który również uruchamia komendę waitfor.exe i wysyła sygnał “kapitanhack” do komputera Win10ENG (lewe okno).

Polecenie waitfor.exe możemy wykorzystać do uruchomienia ładunku (pliku binarnego) także na tym samym komputerze. W tym przypadku będziemy musieli uruchomić 2 polecenia. Pierwsze:

waitfor kapitanhack && calc.exe

oraz drugie uruchomione z drugiego okna:

waitfor /s 127.0.0.1 /si kapitanhack

W tym przypadku po przełączniku „/s” podajemy adres IP 127.0.0.1


3. Metoda z użyciem „Forfiles”

„Forfiles” to narzędzie poleceń Windows, które może wybrać wiele plików i uruchomić na nich polecenie. Jest zwykle używany w zadaniach wsadowych (batch), ale równie dobrze możemy je wykorzystać do wykonania dowolnego polecenia lub pliku wykonywalnego/binarnego.

W celu uruchomienia kalkulatora możemy użyć następującej składni polecenia:

forfiles /p c:\windows\system32 /m notepad.exe /c calc.exe

Parametry „/ p” i „/ m” służą do wyszukiwania pliku o masce „notepad.exe” w katalogu systemu Windows „C:\windows\System32”. Po parametrze „/ c” jest wykonywane polecenie.
W konsekwencji program calc.exe powinien uruchomić się jako proces potomny polecenia forfiles.exe


4. Metoda z asystentem zgodności programów (pcalua.exe)

Asystent zgodności programów (pcalua.exe) to narzędzie systemu Windows, które uruchamia się, gdy wykryje oprogramowanie z problemami ze zgodnością. Jak większość opisywanych w tym artykule narzędzi, również pcalua.exe znajduje się w katalogu systemowym „C:\Windows\System32” i może wykonywać pliki binarne po argumencie „-a”.

pcalua.exe -a calc.exe


5. Metoda z publikowaniem wirtualizacji aplikacji SyncAppvPublishingServer

Sposób ten dokładniej opisaliśmy w artykule tutaj.

SyncAppvPublishingServer inicjuje operację odświeżania publikowania wirtualizacji aplikacji firmy Microsoft (App-V).
SyncAppvPublishingServer występuje w postaci pliku binarnego jak i Visual Basic Script.
Poniżej uruchomienie calc.exe odbywa się z poziomu PowerShell. Do uruchomienia pliku wykonywalnego użyliśmy polecenia „Start-Process”.

SyncAppvPublishingServer.vbs “n; Start-Process calc.exe”


6. Metoda conhost

Host konsoli systemu Windows (conhost.exe) jest uruchamiany w systemie Windows w celu zapewnienia interfejsu między wierszem poleceń, a eksploratorem Windows (explorer.exe). Jednak ma również możliwość wykonywania poleceń i plików binarnych w sposób, który mógłby ominąć reguły bezpieczeństwa Windows.

Polecenie: Conhost.exe calc.exe


7. Metoda z błędem przeglądania ścieżek Windows

Metoda odkryta przez Juliana Horoszkiewicza, którą dokładniej opisaliśmy tutaj.
Twórca odkrył, że możliwe jest użycie ataku typu przemierzanie ścieżki w celu wprowadzenia zamieszania w systemie monitorowania i wykonania polecenia lub ładunku. Szczegóły tego odkrycia można znaleźć na jego blogu. Możliwe jest również określenie, który proces nadrzędny będzie, wykonując następujące polecenie:

cmd.exe /c “ping 127.0.0.1/../../../../../../../../../../windows/system32/calc.exe”

Inne, ciekawe metody, które prezentowaliśmy wcześniej na Kapitanie Hack’u: