Защита PostgreSQL от кампаний криптоджекинга в Kubernetes
PostgreSQL — это мощная система управления реляционными базами данных (RDBMS) с открытым кодом. Благодаря своей надежности и масштабируемости PostgreSQL широко используется в облаке. Большинство публичных облачных провайдеров, включая AWS, Azure и GCP, предоставляют своим клиентам услуги баз данных на основе PostgreSQL.
Согласно отчету Google «Threat Horizons» за январь 2023 года – PostgreSQL является одним из наиболее часто компрометируемых клиентских приложений Google, занимая третье место по частоте (17%) после SSH (26%) и Jenkins (22%). Слабые пароли остаются самым распространенным вектором начального доступа, играя роль в 41% зарегистрированных случаев компрометации. Злоумышленники часто ищут плохо настроенные или незащищенные экземпляры PostgreSQL, развернутые в облаке, Kubernetes или локальной инфраструктуре.
Многие игроки на рынке криптоджекинга, в том числе TeamTNT и Kinsing, используют неправильно настроенные экземпляры PostgreSQL для майнинга криптовалюты. В этой статье рассматриваются самые популярные неправильные конфигурации, используемые этими злоумышленниками.
Неправильная конфигурация PostgreSQL повышает вероятность криптоджекинга
Распространенные сервисы PostgreSQL, размещенные провайдерами облачных услуг (такими, как Amazon RDS для PostgreSQL, Azure Database для PostgreSQL или GCP Cloud SQL для PostgreSQL), не позволяют настраивать элементы управления аутентификацией, что может привести к таким нарушениям. Однако при развертывании PostgreSQL вручную можно допустить много неправильных конфигураций методов аутентификации, ролей пользователей, доступа и разрешений, что может привести к созданию уязвимостей, которыми могут воспользоваться злоумышленники.
При ручном развертывании PostgreSQL поддерживает несколько методов аутентификации. Из них «trust» аутентификация является наиболее незащищенной и предоставляет доступ без необходимости ввода пароля, именно поэтому группы криптомайнинга любят атаковать облачные экземпляры PostgreSQL с включенным типом аутентификации «trust». Включить аутентификацию «trust» можно двумя способами:
- Используя файл pg_hba.conf
- Используя значение переменной среды POSTGRES_HOST_AUTH_METHOD=trust
На рисунке 1 показана «trust» аутентификация с помощью pg_hba.conf, где любой пользователь с любого IP может подключиться к серверу PostgreSQL без пароля. Имя пользователя может быть именем суперпользователя, в этом случае злоумышленник получит все привилегии суперпользователя PostgreSQL.
Рисунок 1. Незащищенный файл pg_hba.conf
Аутентификацию «trust» также можно включить, настроив переменную среды POSTGRES_HOST_AUTH_METHOD=trust в модуле Kubernetes или на сервере. После установки любой IP-адрес или пользователь может подключиться к базе данных без пароля.
Кроме того, «trust» аутентификация в сочетании с базовыми ролями пользователей PostgreSQL по умолчанию (указанными ниже) предоставляет злоумышленникам идеальную возможность злоупотреблять базами данных для чтения или записи конфиденциальных файлов в файловой системе, модификации конфигурации и повышения привилегий.
- pg_read_server_files (позволяет считывать файлы ОС)
- pg_write_server_files (позволяет записывать файлы ОС)
- pg_execute_server_program (позволяет выполнение двоичных файлов ОС)
Во время атаки на неправильно сконфигурированный PostgreSQL злоумышленник может авторизоваться как суперпользователь или пользователь с соответствующими ролями, например, pg_execute_server_program позволяет ему загрузить и запустить скрытые файлы для майнинга криптовалюты. На рисунке 2.A показано, как злоумышленники с помощью команды COPY загружают и запускают xmrig, который майнит цифровую валюту типа Monero; на рисунке 2.B – процесс xmrig, запущенный внутри контейнера, успешно майнит криптовалюту.
Рисунок 2.A. Злоумышленник использует команду COPY для загрузки и запуска xmrig
Рисунок 2.B. Xmrig майнит криптовалюту путем удаленного доступа к неправильно настроенному PostgreSQL
В качестве еще одного примера, на рисунках 3.A и 3.B показано, как неправильно настроенный PostgreSQL может быть использован для отображения списка всех уязвимых файлов без использования каких-либо подозрительных инструментов. После того, как злоумышленник получил доступ к службе PostgreSQL, он может настроить задание cron, чтобы получить реверсную оболочку, повысить привилегии до root контейнера и перейти к атаке на хост Kubernetes, API или API облачного провайдера, чтобы повысить привилегии и захватить кластер Kubernetes или облачную учетную запись.
Рисунок 3.A. Злоумышленник использует команду COPY для считывания конфиденциальных файлов в /etc /passwd
Рисунок 3.B. Результаты использования злоумышленником команды COPY для считывания конфиденциальных файлов
Обнаружение и защита от CrowdStrike
Платформа Falcon объединяет облачную безопасность для обеспечения комплексной защиты клиентов от любых атак на Kubernetes, облачную или гибридную инфраструктуру.
Платформа Falcon, благодаря своим моделям машинного обучения, обнаруживает и предотвращает угрозы во время работы облака, Kubernetes или бессерверной инфраструктуры. В примере, показанном на рисунке 4.A, платформа Falcon идентифицирует и обнаруживает дочерний процесс PostgreSQL, который пытается загрузить и запустить майнер xmrig в контейнере. На рисунке 4.B показано, как платформа Falcon идентифицирует и останавливает вредоносный процесс на ранней стадии kill chain, когда загружается вредоносный файл. На рисунке 4.C показано, как платформа Falcon обнаруживает неправильную конфигурацию PostgreSQL во время работы.
Рисунок 4.A. Платформа Falcon обнаруживает и предупреждает на каждом этапе kill chain
Рисунок 4.B. Платформа Falcon останавливает процесс wget, который используется для загрузки вредоносного программного обеспечения
Рисунок 4.C. Платформа Falcon обнаруживает опасную конфигурацию PostgreSQL с помощью переменной среды
Платформа Falcon применяет подход на основе глубокой защиты, используя входящую телеметрию для обнаружения и устранения угроз в режиме реального времени. Она включает следующие индикаторы, которые используются для обнаружения попыток криптоджекинга, подобных рассмотренным:
- Предотвращение дрифта контейнера
- Поддельный контейнер, работающий на вашем экземпляре Docker
- Неправильно настроенный экземпляр Kubernetes или Docker
Общедоступные облачные сервисы для PostgreSQL не уязвимы к такой неправильной конфигурации. Управление безопасностью облачных сервисов CrowdStrike Falcon Horizon позволяет специалистам по DevOps обеспечивать безопасность таких приложений, как PostgreSQL, путем проактивного мониторинга, обнаружения неправильных конфигураций и обеспечения соответствия требованиям в инфраструктуре публичного облака. В следующей таблице приведен перечень индикаторов неправильных конфигураций (IOM) Falcon Horizon для PostgreSQL, которые помогают выявить пробелы в безопасности.
Платформа | Сервис | Серьезность | Название политики | Описание политики |
Azure | PostgreSQL | Medium | PostgreSQL database does not enforce SSL | Был обнаружен сервер базы данных PostgreSQL, который не использует SSL для соединений с базой данных. Это означает, что клиенты могут устанавливать открытые соединения с базой данных, что позволяет отслеживать/перехватывать их трафик, если они подключаются через ненадежные сети. |
Azure | PostgreSQL | Informational | PostgreSQL database has the connection throttling parameter disabled | Обнаружена база данных PostgreSQL с параметром дросселирования соединений, установленным в значение «отключено». Дросселирование соединений временно блокирует входящие соединения с IP-адреса после нескольких неудачных попыток входа, защищая базу данных от атак грубой силы. |
Azure | PostgreSQL | Informational | PostgreSQL database has the log checkpoints parameter disabled | Была обнаружена база данных PostgreSQL с параметром логирования контрольных точек, установленным на «отключено». Без этого типа логирования вы не будете иметь представления о процессе проверки контрольных точек, что может негативно повлиять на производительность базы данных и надежность соединения. |
Azure | PostgreSQL | Informational | PostgreSQL database has the log connections parameter disabled | Была обнаружена база данных PostgreSQL с параметром логирования соединений, установленным на «отключено». Без этого типа логирования вы не будете иметь представления о попытках соединения с базой данных. Логи соединений могут помочь определить, когда на базу данных пытаются совершить грубую атаку, и могут помочь в отслеживании злоумышленников во время расследования. |
Azure | PostgreSQL | Informational | PostgreSQL database has the log disconnections parameter disabled | Была обнаружена база данных PostgreSQL с параметром логирования разъединений, установленным на «отключено». Без этого типа логирования вы не будете иметь представления о сеансах соединения с базой данных, которые могут содержать информацию о продолжительности сеанса и времени разъединения. |
Azure | PostgreSQL | Informational | PostgreSQL database has the log duration parameter disabled | Была обнаружена база данных PostgreSQL с отключенным параметром регистрации времени. Без этого типа регистрации вы не будете иметь представления о времени, необходимом для выполнения запросов к базе данных. Это может помочь определить, когда база данных находится под стрессовой нагрузкой или если есть другие проблемы с производительностью запросов и/или базы данных. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_checkpoints” flag is disabled | Включение log_checkpoints приводит к тому, что контрольные точки и точки перезапуска записываются в логи сервера. К сообщениям лога добавляется некоторая статистика, в частности количество записанных буферов и время, потраченное на их запись. Этот параметр можно установить только в файле postgresql.conf или в командной строке сервера. Эта рекомендация касается экземпляров баз данных PostgreSQL. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_connections” flag is disabled | По умолчанию PostgreSQL не регистрирует попытки соединения. Включение параметра log_connections будет создавать записи в логах для каждой попытки соединения, а также для успешного завершения аутентификации клиента, что может быть полезным при устранении неисправностей и для определения любых необычных попыток соединения с сервером. Эта рекомендация касается экземпляров баз данных PostgreSQL. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_ disconnections” flag is disabled | По умолчанию PostgreSQL не регистрирует данные о продолжительности и времени завершения сеанса. Включение параметра log_disconnections будет создавать записи логов в конце каждого сеанса, что может быть полезно для устранения неполадок и определения любой необычной активности в течение определенного периода времени. Параметры log_disconnections и log_connections работают вместе, и обычно их следует включать/выключать вместе. Эта рекомендация касается экземпляров баз данных PostgreSQL. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_lock_waits” flag is disabled | Тайм-аут блокировки определяет время ожидания блокировки перед проверкой на наличие каких-либо условий. Частые превышения тайм-аута ожидания блокировки могут свидетельствовать об основной проблеме. Логирование таких задержек блокировки путем включения параметра log_lock_waits может быть использовано для обнаружения низкой производительности из-за задержек блокировки или если специально разработанный SQL пытается использовать ресурсы, удерживая блокировку в течение чрезмерного количества времени. Эта рекомендация относится к экземплярам баз данных PostgreSQL. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_temp_files” flag is disabled | Параметр log_temp_files отключен. Временные файлы не записываются в логи, поэтому может быть сложнее обнаружить потенциальные проблемы с производительностью, которые могут быть вызваны преднамеренными попытками истощения ресурсов. |
GCP | Cloud SQL | Informational | Cloud SQL for PostgreSQL “log_min_ duration_ statement” flag is enabled | Логирование SQL-запросов может содержать конфиденциальную информацию, которую не следует записывать. Эта рекомендация относится к экземплярам баз данных PostgreSQL. |
GCP | Cloud SQL | Medium | Cloud SQL database instance does not require SSL | Подключение к базе данных SQL в случае успешного перехвата (MITM) может раскрыть конфиденциальные данные, такие как учетные данные, запросы к базе данных, результаты запросов и т. Д. Для безопасности рекомендуется всегда использовать SSL-шифрование при подключении к вашему экземпляру. Эта рекомендация относится к экземплярам PostgreSQL, MySQL поколения 1 и MySQL поколения 2. |
GCP | Cloud SQL | Informational | Cloud SQL instance not configured for backups | Резервные копии предоставляют возможность восстановить экземпляр облачного SQL для возвращения утраченных данных или устранения проблем с этим экземпляром. Автоматическое резервное копирование нужно настроить для любого экземпляра, содержащего данные, которые должны быть защищены от потери или повреждения. Эта рекомендация касается экземпляров SQL Server, PostgreSQL, MySQL поколения 1 и MySQL поколения 2. |
GCP | VPC | High | VPC allows access to PostgreSQL from all networks | Разрешая входящий сетевой трафик из глобального IP-пространства (0.0.0.0.0/0), вы открываете ненужные, часто используемые сервисы для любого злоумышленника в Интернете. Этот порт высокого риска обычно сканируется злоумышленниками, и одна неправильная конфигурация или устаревший сервер может представлять серьезную угрозу для организации. Доступ, полученный злоумышленником, может привести к компрометации данных или дальнейшей эксплуатации в сети, где размещены уязвимые сервисы. |
MITRE для защиты инфраструктуры как услуги (IaaS)
Crowdstrike объединился с MITRE Engenuity Center for Threat-Informed Defense, чтобы разработать ATT&CK Defense для IaaS. Целью этого проекта была разработка эффективных методов и стратегий защиты от злоумышленников, которые атакуют IaaS к облаке, контейнерах и Linux aaS. Поскольку самой популярной техникой, используемой злоумышленниками для получения начального доступа к облачной инфраструктуре, является использование общедоступных приложений, таких как PostgreSQL, крайне важно оценить уязвимость вашего корпоративного приложения в Интернете и впоследствии следовать лучшим практикам для его защиты.
Лучшие практики защиты PostgreSQL
Защита рабочей нагрузки PostgreSQL требует сочетания надлежащей практики конфигурации и регулярного мониторинга. Вот некоторые общие рекомендации по безопасному развертыванию PostgreSQL в облачных средах и средах Kubernetes:
- Используйте последнюю версию PostgreSQL и установите необходимые патчи.
- Используйте надежный пароль при применении методов аутентификации на основе пароля.
- Применяйте соответствующие разрешения для защиты конфигурационных файлов, таких как pg_hba.conf.
- Включите SSL/TLS для защиты соединения между клиентом и службой PostgreSQL.
- Проводите аудит пользователей и их ролей безопасности и придерживайтесь принципа наименьших привилегий.
- Используйте секреты пространства имен Kubernetes.
- Запускайте службу PostgreSQL от имени пользователя не root, что добавит дополнительный уровень защиты на случай компрометации.
- Ограничьте ресурсы контейнеров, доступные службе PostgreSQL, до разумных пределов.
- Отслеживайте хосты и контейнеры на предмет любой злонамеренной активности.
- Используйте механизм нулевого доверия, чтобы разрешить необходимый доступ к сервису в кластере.
- Используйте проактивные решения безопасности для выявления неправильной конфигурации и уязвимостей.
Вывод
Защита PostgreSQL, популярного облачного приложения, имеет решающее значение для предотвращения атак на вашу инфраструктуру. Неправильные конфигурации в PostgreSQL могут служить точкой входа для злоумышленников, как это видно в случаях, когда группы криптозлоумышленников воспользовались такими уязвимостями для майнинга криптовалюты с целью получения прибыли. Чтобы защититься от таких нарушений, важно придерживаться лучших практик защиты PostgreSQL, активно следить за неправильными конфигурациями и поддерживать надежную общую безопасность.
Одним из способов достичь этого является использование комплексной облачной платформы безопасности, такой как платформа защиты облачных приложений CrowdStrike (CNAPP), которая предлагает сочетание средств защиты во время работы и проактивных мер, включая оценку МОМ и индикаторов атак (IOA), а также проверку на соответствие нормативным требованиям. Кроме того, она обнаруживает и предотвращает нарушения со стороны различных типов субъектов, включая хактивистов, занимающихся криптопреступностью, группы eCrime и хакеров спонсируемых государствами, обеспечивая комплексное и надежное решение для защиты вашей облачной инфраструктуры.
Напомним, что iIT Distribution обеспечивает дистрибуцию и продвижение решений CrowdStrike на территории Украины, Казахстана, Узбекистана и Грузии и оказывает профессиональную поддержку в их проектировании и внедрении. Мы всегда обеспечиваем необходимый уровень информационной поддержки нашим партнерам и заказчикам по каждому продукту, а наши эксперты готовы предоставить консультацию по любым вопросам, связанным с повышением эффективности функционирования и защиты вашей IT-инфраструктуры.