W świecie bezpieczeństwa IT czasem to, co wydaje się trywialne – jak zwykłe drukowanie – może skrywać poważne zagrożenie. W artykule „From Zero to SYSTEM: Building PrintSpoofer from Scratch” autor o pseudonimie bl4ckarch dokładnie pokazuje, jak dzięki mechanizmów systemowych Windows można skonstruować exploit (o nazwie PrintSpoofer), który zaczynając od zwykłego konta z uprawnieniem na Windows „SeImpersonatePrivilege”, doprowadza do uzyskania uprawnień systemowych („NT AUTHORITY\SYSTEM”). To kolejny dowód na to, iż choćby z pozoru banalne elementy systemu, jak usługa drukowania, mogą być punktem wejścia dla zaawansowanego ataku.
Szerszy kontekst zagrożeń związanych z drukowaniem
Drukarki i usługi drukowania często są niedostatecznie zabezpieczone, jako iż protokoły drukowania (np. PostScript, PJL, RPC) były projektowane dekady temu – kiedy bezpieczeństwo sieci nie było priorytetem. Ponadto ataki na usługi drukowania (opisywaliśmy je tutaj) mogą być wykorzystywane do uzyskania wysokich uprawnień, ruchu bocznego w sieci czy wykradania danych – często bez wzbudzania podejrzeń, bo operacje drukowania uważane są za normalny ruch.
Na czym polega techniczna magia PrintSpoofera?
Autor rozpoczyna od podstaw – mechanizmu nazwanych potoków (Named Pipes), który w Windows służy do komunikacji między procesami. Dzięki uprawnieniu SeImpersonatePrivilege, proces może naśladować inny, jeżeli ten łączy się z jego Named Pipe.
Kluczowy błąd tkwi w tym, jak działa usługa drukowania – Windows Print Spooler. Spooler udostępnia interfejs RPC, m.in. funkcję RpcRemoteFindFirstPrinterChangeNotificationEx, która pozwala wskazać ścieżkę do potoku (pipe) do powiadomień. Zwykle oczekuje się czegoś w stylu \\PRINTSERVER\pipe\spoolss. Jednak autor wykorzystuje tzw. slash trick: podaje ścieżkę w formacie z ukośnikami: np. \\COMPUTER/pipe/evil. System wewnętrznie normalizuje to do \\COMPUTER\pipe\evil\pipe\spoolss, co powoduje, iż Spooler (działający jako SYSTEM) łączy się z potokiem kontrolowanym przez atakującego. W momencie połączenia można wywołać ImpersonateNamedPipeClient() – i voilà: proces przejmuje token użytkownika SYSTEM.
W skrócie – exploit składa się z następujących kroków:
- utworzenie Named Pipe: \\.\pipe\random\pipe\spoolss,
- wywołanie RPC do Spoolera, by wymusić połączenie do Named Pipe,
- Spooler łączy się jako SYSTEM → impersonacja → duplikacja tokena → uruchomienie procesu z uprawnieniami SYSTEM.
Praktyczne efekty i problemy z wykryciem
Po stworzeniu działającego narzędzia autor sprawdził wykrywalność, wrzucając je na VirusTotal. Wynik: 30/72 wykrywalności przez antywirusy. Nie poprzestał na tym – podjął próbę ukrycia swojego exploit-kodu: usuwał czytelne ciągi znaków (np. nazwy potoków, RPC, API) i ładował funkcje dynamicznie przez hashe. Znacznie utrudniło to detekcję na podstawie sygnatur. Wniosek – atakujący mogą bardzo skutecznie ukryć złośliwe narzędzie korzystające z PrintSpoofera, a tradycyjne programy antywirusowe mogą nie wystarczyć.
Jak się chronić przed PrintSpooferem i podobnymi atakami?
1. Wyłącz usługę Print Spooler, jeżeli nie jest potrzebna
To najskuteczniejsza metoda – jeżeli stacja lub serwer nie musi drukować, wyłączenie Spoolera całkowicie usuwa wektor ataku.
Polecenia PowerShell:
Stop-Service Spooler
Set-Service Spooler -StartupType Disabled
Dotyczy głównie:
- kontrolerów domeny (najważniejsze!),
- serwerów infrastrukturalnych,
- maszyn wrażliwych, które nie drukują.
2. jeżeli Print Spooler musi działać, ogranicz jego funkcjonalność
Od Windows 10 i Server 2019 możesz wymusić, aby Spooler NIE akceptował zdalnych połączeń RPC:
GPO → Computer Configuration → Administrative Templates → Printers:
- „Allow Print Spooler to accept client connections” → Disabled
To blokuje zdalną komunikację i utrudnia większość exploitów, w tym PrintSpoofera.
3. Minimalizuj uprawnienia SeImpersonatePrivilege
PrintSpoofer działa tylko, jeżeli proces ma SeImpersonatePrivilege.
Zadbaj, by:
- aplikacje firm trzecich nie działały jako usługi z tym uprawnieniem,
- konta serwisowe miały profil „Least Privilege”,
- środowiska terminalowe były regularnie audytowane pod kątem tokenów i uprawnień.
4. Stosuj WDAC / AppLocker / SRP
Ustal listę procesów, które mogą się uruchamiać:
- blokuj EXE z niezaufanych lokalizacji,
- wymuszaj podpis cyfrowy,
- ogranicz możliwość uruchamiania niestandardowych binarek.
To uniemożliwia użycie własnoręcznie skompilowanych exploitów.
5. Monitoruj Named Pipes i tokeny uprawnień
Eksploity PrintSpoofera korzystają z nietypowych potoków:
- \\.\pipe\*\pipe\spoolss,
- ImpersonateNamedPipeClient,
- dynamiczne wywoływanie RPC.
W systemach EDR warto tworzyć reguły wykrywające:
- tworzenie niestandardowych Named Pipes z sufiksem pipe\spoolss,
- duplikację tokenów SYSTEM,
- uruchamianie procesów z nietypowym rodzicem (cmd.exe, powershell.exe od procesów nieuprzywilejowanych).
6. Regularnie aktualizuj systemy Windows
Microsoft wprowadził serię łatek związanych z PrintNightmare i PrintSpoofer.
Nowsze buildy Windows znacznie ograniczają możliwość eskalacji.
Ważne:
- Windows Server 2016/2019 są bardziej narażone, jeżeli nie są aktualizowane.
- W środowiskach AD łatki bezpieczeństwa są krytyczne dla DC.
7. Segmentacja sieci i izolacja hostów
Nawet jeżeli atakujący przejmie pojedyncze konto, utrudnij mu dostęp do:
- kontrolerów domeny,
- serwerów plików,
- systemów krytycznych.
Wprowadzaj zasadę „Tiered Administration”:
- Tier 0 – tylko dla administratorskich systemów,
- Tier 1 – serwery,
- Tier 2 – stacje robocze.
8. Audytuj konfiguracje drukarek sieciowych
Drukarki przez cały czas bywają źle zabezpieczone, niezaktualizowane czy wystawione przez SMB lub RPC. Zalecenia:
- zmień hasła administratorów,
- wyłącz nieużywane protokoły (PJL, FTP, SMB),
- odetnij drukarki od sieci krytycznej.
Podsumowanie
PrintSpoofer – szczególnie w wersji własnoręcznej, zrozumianej i ukrytej – to przykład, iż ataki „z wnętrza” systemu, z pozoru niewinnych usług, mogą być niezwykle groźne. Firmy i administratorzy powinni być świadomi, że:
- uprawnienia takie jak SeImpersonatePrivilege mogą wystarczyć do eskalacji;
- usługa Print Spooler to punkt krytyczny – jeżeli nie jest potrzebna, warto ją wyłączyć lub mocno ograniczyć;
- tradycyjny antywirus to nie zawsze wystarczająca ochrona – potrzebne są rozwiązania behawioralne i monitoring nietypowych działań.














