Sensitive Mounts
Викладення /proc
та /sys
без належної ізоляції простору імен створює значні ризики безпеки, включаючи збільшення поверхні атаки та розголошення інформації. Ці каталоги містять чутливі файли, якщо їх неправильно налаштовано або доступ до них має несанкціонований користувач, це може призвести до втечі контейнера, модифікації хоста або надання інформації, яка допоможе в подальших атаках. Наприклад, неправильне монтування -v /proc:/host/proc
може обійти захист AppArmor через його шляхову природу, залишаючи /host/proc
незахищеним.
Ви можете знайти додаткові деталі щодо кожної потенційної уразливості за посиланням https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts.
Уразливості procfs
/proc/sys
/proc/sys
Цей каталог дозволяє змінювати ядерні змінні, зазвичай через sysctl(2)
, і містить кілька підкаталогів, що викликають занепокоєння:
/proc/sys/kernel/core_pattern
/proc/sys/kernel/core_pattern
Описано в core(5).
Дозволяє визначити програму для виконання при генерації файлу ядра з першими 128 байтами як аргументами. Це може призвести до виконання коду, якщо файл починається з каналу
|
.Приклад тестування та експлуатації:
/proc/sys/kernel/modprobe
/proc/sys/kernel/modprobe
Детально описано в proc(5).
Містить шлях до завантажувача ядра модулів, який викликається для завантаження ядерних модулів.
Приклад перевірки доступу:
/proc/sys/vm/panic_on_oom
/proc/sys/vm/panic_on_oom
Згадується в proc(5).
Глобальний прапорець, який контролює, чи викликати аварійне завершення ядра або викликати OOM killer при виникненні умови OOM.
/proc/sys/fs
/proc/sys/fs
Згідно з proc(5), містить параметри та інформацію про файлову систему.
Доступ на запис може дозволити різноманітні атаки відмови обслуговування проти хоста.
/proc/sys/fs/binfmt_misc
/proc/sys/fs/binfmt_misc
Дозволяє реєструвати інтерпретатори для неіноземних бінарних форматів на основі їх магічного числа.
Може призвести до підвищення привілеїв або доступу до оболонки root, якщо
/proc/sys/fs/binfmt_misc/register
доступний для запису.Відповідний експлойт та пояснення:
Підробиці в уроці: Посилання на відео
Інші в /proc
/proc
/proc/config.gz
/proc/config.gz
Може розкрити конфігурацію ядра, якщо
CONFIG_IKCONFIG_PROC
увімкнено.Корисно для зловмисників для виявлення вразливостей у робочому ядрі.
/proc/sysrq-trigger
/proc/sysrq-trigger
Дозволяє викликати команди Sysrq, що потенційно можуть призвести до негайних перезавантажень системи або інших критичних дій.
Приклад перезавантаження хоста:
/proc/kmsg
/proc/kmsg
Викриває повідомлення кільцевого буфера ядра.
Може допомогти в експлойтах ядра, витоках адрес та наданні чутливої системної інформації.
/proc/kallsyms
/proc/kallsyms
Перераховує символи ядра та їх адреси.
Необхідний для розробки експлойтів ядра, особливо для подолання KASLR.
Інформація про адресу обмежена з
kptr_restrict
встановлено на1
або2
.Деталі в proc(5).
/proc/[pid]/mem
/proc/[pid]/mem
Взаємодіє з пристроєм пам'яті ядра
/dev/mem
.Історично вразливий до атак підвищення привілеїв.
Докладніше в proc(5).
/proc/kcore
/proc/kcore
Представляє фізичну пам'ять системи у форматі ядра ELF.
Читання може витікати вміст пам'яті хоста та інших контейнерів.
Великий розмір файлу може призвести до проблем з читанням або аварійної зупинки програмного забезпечення.
Детальне використання в Вивантаження /proc/kcore в 2019 році.
/proc/kmem
/proc/kmem
Альтернативний інтерфейс для
/dev/kmem
, що представляє віртуальну пам'ять ядра.Дозволяє читання та запис, отже пряме змінення пам'яті ядра.
/proc/mem
/proc/mem
Альтернативний інтерфейс для
/dev/mem
, що представляє фізичну пам'ять.Дозволяє читання та запис, зміна всієї пам'яті потребує вирішення віртуальних у фізичні адреси.
/proc/sched_debug
/proc/sched_debug
Повертає інформацію про планування процесів, обходячи захисти простору імен PID.
Викриває назви процесів, ідентифікатори та ідентифікатори cgroup.
/proc/[pid]/mountinfo
/proc/[pid]/mountinfo
Надає інформацію про точки монтування в просторі імен монтування процесу.
Викриває місце розташування
rootfs
контейнера або зображення.
Уразливості /sys
/sys
/sys/kernel/uevent_helper
/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 для контейнера
host_path=$(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
/sys/class/thermal
Контролює налаштування температури, потенційно спричиняючи атаки DoS або фізичні пошкодження.
/sys/kernel/vmcoreinfo
/sys/kernel/vmcoreinfo
Витікає адреси ядра, потенційно компрометуючи KASLR.
/sys/kernel/security
/sys/kernel/security
Містить інтерфейс
securityfs
, що дозволяє налаштування модулів безпеки Linux, таких як AppArmor.Доступ може дозволити контейнеру вимкнути свою систему MAC.
/sys/firmware/efi/vars
та /sys/firmware/efi/efivars
/sys/firmware/efi/vars
та /sys/firmware/efi/efivars
Викриває інтерфейси для взаємодії з змінними EFI в NVRAM.
Неправильна конфігурація або експлуатація може призвести до "замурованих" ноутбуків або незавантажуваних хост-машин.
/sys/kernel/debug
/sys/kernel/debug
debugfs
пропонує інтерфейс налагодження "без правил" для ядра.Історія проблем з безпекою через його необмежений характер.
References
Last updated