Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zatrzymywanie i uruchamianie Windows Defender w ostatnich kompilacjach (Windows 11/10)

wesmar 17 May 2023 11:08 1767 13
Optex
  • Cześć! Publikuję ten artykuł by wyjaśnić zabezpieczenia wbudowanych strażników w nowoczesnych systemach rodziny Windows. Celem będzie udostępnienie narzędzia do zatrzymywania i uruchamiania Windows Defender na żądanie wraz z powiązanymi usługami. Nie chodzi o wyłączenie! W nowoczesnych systemach jak Windows 11/10 klasyczne metody zatrzymywania np. przez komendę „net stop WinDefend” czy nawet za pomocą powershell już nie działają. Strażnik ten stał się oczkiem w głowie firmy Microsoft. Włącza się jak niechciana Hydra lernejska. Ostrożność – matką porcelany, ale bez przesady! Otóż pisząc konsolowy soft do podniesienia uprawnień z poziomu wbudowanego administratora do TrustedInstallera o nazwie „cmdt.exe” ów defender wyciął mi skompilowaną wersję binarną. Tego już było za wiele do dzieła!
    W załączniku udostępniam wersję skompilowaną x86 i x 64 z hasłem "IRFZ44N" W wersji spakowanej z plikami: StopDefender.exe oraz StopDefenderGui.exe (graficzna nakładka), oraz drugie narzędzie, które nie jest potrzebne do zatrzymywania defendera, ale posłużyło jako inspiracja do jego napisania: cmdt.zip (i cmdt_signed.zip). StopDefender jest całkowicie darmowy i otwarty. Narzędzie podnoszące uprawnienie do maksymalnych będzie działać do końca tego roku. W związku, iż napisałem go komercyjnie dla firmy zajmującej się wdrożeniami nie mogę wypuścić wersji publicznej, ale jeżeli ktokolwiek z tego forum poprosi to udostępnię prywatną kompilację na podany numer seryjny komputera by go nie rozpowszechniać. W tym celu można śmiało pisać podając swój S/N z poziomu cmd/powershell – polecenie „wmic bios get serialnumber” lub korzystając z załączonego 2kB sn.exe (sn.zip). Kompilacje prywatne robiłbym co 2 tygodnie. Takich narzędzi trochę jest, jedne działają inne mniej np. psexec z pstools nie dostaje praw TI, ale Nirsoftu czy Nsudo już tak, choć nie przechwytuje wszystkich tokenów jak u mnie. (Sprawdziłem to drogą reverse engineering)

    Przejdźmy jednak do zatrzymywania Defendera. Nagrałem w tym celu film: https://youtu.be/6WqiULYbrh8
    I nie chodzi w nim o oglądanie, gdyż niemal każdy forumowicz jest zaawansowanym użytkownikiem/ ekspertem, a o przeczytanie opisu i sprawdzenia choćby sum kontrolnych plików, wykluczeń i fałszywych alarmów o zagrożeniach.
    To teraz jak już wszystko mamy i wszystko wiecie – trochę teorii:
    Wbudowany domyślnie w systemy operacyjne Microsoft - Windows Defender, jak się zapewne ze mną zgodzicie mocno się poprawił, jeżeli chodzi o manipulację tj. zatrzymywanie czy nawet dłuższe wyłączenia. Niestety jako dodatkowa warstwa abstrakcji strasznie spowalnia mi kompilacje większych projektów, wycina niektóre „pseudo-hackerskie”, a przy operacji kopiowania dużej ilości małych plików nagłówkowych *.h na NVME/USB-C nie znoszę go. Czas kopiowania rośnie nawet 3 krotnie. Brakowało mi narzędzia do zatrzymywania usługi wraz z dowiązaniami, ale teraz już ją mam

    Głównym składnikiem programu Windows Defender jest usługa „WinDefend”, odpowiedzialna za uruchamianie procesu ciągłego monitorowania „MsMpEng.exe” i ładowanie jego silnika „mpengine.dll”, dlatego jeśli jesteśmy w stanie zatrzymać tę usługę, dzierżymy władzę nad systemem.
    Co prawda można go wyłączyć, choć nie można zatrzymać (usługa nadal działa) poprzez interfejs graficzny, ale ta opcja nas nie interesuje, jest niewygodna i nadal pożera zasoby
    Wersja z zatrzymywaniem jet OK. teoretycznie zablokowana, ale…

    Aby zrozumieć „wnętrze” akcji, którą zamierzamy przeprowadzić, musimy jasno określić dwie koncepcje: czym jest Token i czym jest TrustedInstaller (TI). Token w systemie operacyjnym Microsoft Windows jest elementem bezpieczeństwa, który zapewnia identyfikację procesów i wątków, gdy chcą one wykonać działania na sekuryzowalnych obiektach systemu (plikach, rekordach, usługach, kluczach rejestru..). Innymi słowy, to jak pokazanie paszportu, gdy chcesz wlecieć do innych krajów
    Przechowuje między innymi: poziom integralności, użytkownika, do którego należy proces, uprawnienia oraz grupy. Nie będziemy wchodzić w szczegóły, ponieważ dla nas liczy się właśnie to drugie, czyli grupy, do których należy proces/wątek przedstawiający ten token bezpieczeństwa.

    Zauważcie, że dany proces lub wątek, jeżeli tylko zdobędzie odpowiednie uprawnienia, może podszywać się pod innego użytkownika. Dlatego nasza aplikacja może kopiować i/lub używać tokena innego wątku/procesu, o ile mamy uprawnienia do otwarcia interesującego nas procesu i uzyskania jego obsługi Tokena z odpowiednimi uprawnieniami (Impersonate / DuplicateToken) .
    Teraz, gdy wiemy, czym jest token i co możemy z nim zrobić, weźmy pod lupę, TrustedInstaller.
    Może próbowaliście usunąć plik z systemu np. z WinSxS i nie byliście w stanie tego zrobić?, nawet będąc SYSTEMEM czy Administratorem. Właściciel pliku (TrustedInstaller) zwrócił waszą uwagę😊. Cóż, TrustedInstaller to fikcyjna grupa utworzona przez SCM (Service Control Manager) podczas uruchamiania komputera, tworząca tak zwaną „Grupę usług”. A propos - Narzędzie cmdt pozwala ominąć te ograniczenia.
    Oznacza to, że każda usługa będąca częścią nowoczesnego systemu operacyjnego Windows ma fikcyjną grupę pasującą do jej nazwy. Ta funkcja jest przydatna, aby zapewnić dostęp do wszystkich obiektów podlegających sekuryzacji (plików, potoków, rekordów, tokenów, kluczy rejestru) systemu, z których może korzystać proces usługowy, zmniejszając w ten sposób narzut związany ze sprawdzaniem tokena pod kątem wszystkich list DACL . obiektów
    TrustedInstaller to nie tylko grupa, ale także usługa, którą możemy znaleźć na liście usług na komputerze jako taką, zwykle zatrzymaną, ponieważ uruchamia się warunkowo, gdy wymaga tego „Windows Update” – wdrażanie aktualizacji.
    Moi drodzy - ten proces i ta grupa mają wielką moc, nawet większą niż „SYSTEM” w systemie. Jesteście oczywiście taką „mocą” zainteresowani. Jako ciekawostkę, jeśli chcemy odróżnić rzeczywiste grupy/użytkowników od tych fikcyjnych utworzonych przez SCM, musicie spojrzeć na „Domenę”, która jest prefiksem, pojawiającym się przed użytkownikiem/grupą.
    Zwykle te prawdziwe poprzedzone są przedrostkiem "NT AUTHORITY", natomiast syntetyk serwisowy - "NT SERVICE". Jedyną tożsamością bezpieczeństwa zdolną do zatrzymania usługi Antivirus (Full control) jest ona sama oraz usługa TrustedInstaller. Ma to sens, ponieważ aby się zaktualizować, TrustedInstaller.exe musi być w stanie zatrzymać antywirusa i skopiować nowe pliki. Zauważ, że nie jest w stanie tego zrobić nawet Administrator ani grupa SYSTEM.

    Jako pierwsze podejście do naszego celu moglibyśmy pomyśleć o pożyczeniu tokenu od samego "MsMpEng.exe" i podszyciu się pod niego, ponieważ prezentuje on grupę "NT SERVICE/WinDefend", ale nie jest to możliwe, ponieważ proces ten jest procesem typu PPL (Protected Process Light) i dlatego nie będziemy w stanie uzyskać uchwytu procesu, który pozwoli nam ostatecznie odczytać jego token, nawet z uprawnieniami debugowania (SeDebugPrivilege).

    Wiemy już zatem, że tylko jeśli uzyskamy token z zawartą w nim grupą TI, będziemy w stanie zatrzymać usługę WinDefend. Naszym kolejnym celem jest zatem usługa TI.

    Najpierw uruchomimy usługę, będąc administratorami i skontrolujemy uprawnienia otwierające proces. Aby uzyskać dostęp do tokena wystarczy dostęp na poziomie otwarcia procesu zawierającego PROCESS_QUERY_INFORMATION, PROCESS_QUERY_LIMITED_INFORMATION lub PROCESS_ALL_ACCESS (Pełna kontrola).
    Warto również zauważyć, że proces ten nie jest chroniony za pomocą PPL, co pozwoliłoby nam, a priori, na jego otwarcie. Jak to możliwe, że Microsoft nie chroni tak ważnego procesu w systemie? Przecież to jest cecha, a nie błąd!
    Wymagamy użycia przywileju SeDebugPrivilege, ponieważ poziom integralności procesu TI to SYSTEM, a poziom integralności naszej aplikacji to High, więc jest poniżej. Pamiętajmy, że aby sprawdzić czy dany obiekt może uzyskać dostęp do innego, najpierw sprawdzamy Mandatory Integrity Control, a następnie Discretionary access control, w tym przypadku spełniamy drugi, ale nie pierwszy. SeDebugPrivilege pozwala nam pominąć obie, ale tylko dla OpenProcess.

    Sprawdźmy teraz uprawnienia tokena podstawowego tokena procesu TI, ponieważ aby go użyć i podszyć się pod niego, musi on nam na to pozwolić za pomocą uprawnienia IMPERSONATE dla naszego użytkownika.
    Jako Administratorzy widzimy, że to nie wystarczy, więc nie będziemy mogli odczytać i podszyć się pod token TrustedInstaller. Będziemy mogli to zrobić tylko wtedy, gdy jesteśmy SYSTEMEM, więc będziemy musieli wykonać krok pośredni i eskalować uprawnienia z Admina na SYSTEM.

    Najprostszym sposobem na eskalację uprawnień z Admina na SYSTEM jest podszycie się pod token SYSTEM z już działającego procesu. Jednym z najlepszych kandydatów jest Winlogon.exe, ponieważ działa w tej samej sesji co użytkownik, a także ma luźniejsze ACL w tym zakresie (Administrator może otworzyć swój token w trybie IMPERSONATE).
    Zostanie wyważenie ostatnich drzwi, które prowadzą nas do sposobu by zatrzymać Defendera 😊
    Gotowy program w załączniku, a kod źródłowy „silnika” niżej:
    Code: c
    Log in, to see the code

    Cool? Ranking DIY
    About Author
    wesmar
    Level 22  
    Offline 
    wesmar wrote 406 posts with rating 160, helped 39 times. Live in city Warszawa. Been with us since 2008 year.
  • Optex
  • #3
    komputerowiec79
    Level 16  
    Program Defender Control jest w zupełności wystarczający, nawet aktualizacje systemu nie zmieniają jego ustawień. Działa też na Windows 8.0 i 8.1 (na 7 nawet nie ma potrzeby gdyż robi on tam dokładnie nic xD)
  • Optex
  • #4
    wesmar
    Level 22  
    Znam go bo używałem przez chwilę, niestety nie działa jak trzeba. Aby zadziałał przynajmniej w windows 11 musi zostać wyłączona ochrona przed naruszeniami co eliminuje jego stosowanie bo wyłącza elementy kontroli integralności. Naturalnie mój kradnąc token nie potrzebuje żadnej flagi, żadnego suwaka poza wykluczeniem, które zrobię metodą drag&drop.
    Dowód:
    Zatrzymywanie i uruchamianie Windows Defender w ostatnich kompilacjach (Windows 11/10)
  • #5
    KJ
    Level 31  
    Czy da się jakoś to cholerstwo (defendera) całkowicie wywalić z win10 ? Obojętnie czy na poziomie instalki czy zainstalowanego systemu ?
  • #6
    wesmar
    Level 22  
    Da się, jest masa tego typu narzędzi na https://forums.mydigitallife.net/, sam z tamtymi forumowiczami również dyskutuję, ale w sprawie właśnie tzw. "Tamper Protection". Tamte narzędzia muszą mieć interakcję i/lub restart. Tu można za pomocą Pstools (psexec) wyłączać z poziomu konsoli administrując w dowolnej sieci. Cóż jest to lokalny exploit i póki microsoft nie poprawi kodu tego typu narzędzia będzie można tworzyć. W szerszym ujęciu dotyczy to każdego oprogramowania AV.
    Co do deinstalacji poza wycięciem usług (bez "sense") jak niżej w zmodyfikowanym pliku nagłówkowym, który wykorzystuję, wypadałoby pozbyć się jeszcze strażnika z tray'a. Mi to śmigało i zarówno "sfc /scannow" jak i restorehealth przechodziły test integralności. Niestety wersje z pełną aktualizacją przywracały defendera. A takie aktualizację robię gdy debuguję po USB sterowniki w trybie SecureBoot i Vmd-t.
    Poniżej usługi jakie poddaję obróbce i są bezbronne:

    #pragma once
    #include <windows.h>
    #include <iostream>
    #include <tchar.h>
    
    using namespace std;
    
    #ifdef UNICODE
    #define get_username  get_usernameW
    #else
    #define get_username  get_usernameA
    #endif
    
    #define DEF_SERVICES_COUNT 7
    
    const PCTSTR DefenderServices[] = {
     
        TEXT("Sense"),
        TEXT("WdBoot"),
        TEXT("WdFilter"),
        TEXT("Wscsvc"),
        TEXT("WinDefend"),
        TEXT("WdNisSvc"),
        TEXT("WdNisDrv"),
    };
    
    wstring get_usernameW();
    string get_usernameA();
    BOOL StopDefenderService();
    int GetProcessByName(PCTSTR name);
    
  • #8
    wesmar
    Level 22  
    W pierwszym komentarzu pod filmem YT jest do pobrania wersja 1.03. Dodałem tam funkcję, automatycznego samowykluczenia bo skoro "użyczam sobie" prawa WinDefend to warto to zrobić. Niniejszym program uzyskuje dostęp do chronionego klucza HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths. Wyjątek zatem odczytamy z okien "zarządzaj wykluczeniami". Ale tu uwaga przy systemach x64 powinno się użyć wersji x64 - tylko jeżeli chodzi o ten wyjątek. Podobną Technikę można zastosować do każdego AV, bo korzystają one dokładnie z tego samego API. Niestety nie mam ich i nie będę w tym kierunku rozwijał tego programu. Bardziej to koncepcja i pokazanie, że defender jest nadal bezbronny. Przeprowadzę jednak jeszcze jeden manewr: Zastosuję częściowo własny crypter-PE by go zamaskować przez innymi antywirusami. W tym celu zaciemnię określone interfejsy API podstawiając inne. Avasta oszukam peresed'ami z własnych avast/pe_tools. Jak się po tym zabiegu narzędzia AV "nauczą" to zaszyfruję go w czasie wykonywania implementując referencyjną „Hyperion: Implementation of a PE-Crypter”.
    Co do komunikatu przy uruchamianiu, używam 11-ki i kompilowałem pod VS 2022 V 17.6 ostatniej, wydanej ze 3 dni temu, U siebie po uruchomieniu mam "Windows Defender service is running". Może uruchamianie trwa dłużej, a może nie pozwala Eset? Trzeba by było popatrzeć w logi/dziennik zdarzeń (widok niestandardowy). Problem raczej może być z zatrzymaniem i czasami trzeba dwa razy, ale i to wyeliminuję bo ntdll.dll ma multum nieudokumentowanych funkcji przez które muszę się przegryźć.
  • #9
    xangel
    Level 18  
    Chodzi mi o to, że przy zatrzymywaniu jest stopped i przy uruchamianiu jest stopped, a powinno być chyba started?

    Pobrałem ten z linku pod filmem. Zainstalował się, ale po uruchomieniu, jak kliknąłem Stop Defender, to mi go ESET wywalił :)
    Ale jak klikam Start Defender, to dalej mam komunikat, że Defender is stopped.
  • #10
    wesmar
    Level 22  
    Popatrz na ten króciutki 3MB film i napisz w którym momencie. Może popełniłem błąd? Tu jest właśnie przypadek, że za pierwszym razem nie wszystkie usługi się zatrzymały. Drugi raz go dobił, a start jest normalny. W pierwszej wersji trzeba było ponownie nacisnąć "start" Stąd opis oczywiście do zmiany
    Rozumiem, że komunikat u kolegi jest "stopped" a Defender uruchamia się, tak? W wolnej chwili zajrzę w środowisku z ESETEM. Mam jakąś 3 letnią licencję z eBay, z której nie korzystam
    [film:10b1be8381]https://filmy.elektroda.pl/34_1684503778.m34[/film:10b1be8381]
    Jeżeli filmik *.mkv dodany na elektrodzie się nie wczyta (w podglądzie nie widzę) to jeszcze:


  • #11
    xangel
    Level 18  
    U mnie działa to jak w 0:17 - jak wciskam Stok to mam Windows Defender service is Stopped.
    A jak potem wciskam Start, to nie mam Windows Defender Service is running, tylko mam Windows Defender service is stopped :)
    Więc albo go źle zabił, bo mu ESET przeszkodził i teraz nie może go uruchomić poprawnie, albo po prostu komunikat jest zły.
  • #12
    wesmar
    Level 22  
    Chyba wiem jaki jest u kolegi problem. Konsola wymusza "sudo", a GUI nie, wystarczy uruchomić jako administrator z prawego lub trwale we właściwościach oflagować ew poczekać, aż skompiluję kolejnym razem z nowym manifestem podnoszącym rangę atrybut uprawnienia do "requireAdministrator" lub "highestAvailable"
    Pozdrawiam

    Dodano po 8 [minuty]:

    Jeżeli to był taki problem, a zakładam, że włączona jest kontrola konta użytkownika i ustawiona dość wysoko - wystawiam poprawioną wersję graficzną proszącą o uruchomienie jako administrator:
    https://www.atlogika.com/software/StopDefenderGui.zip