Атаки на сервис метаданных

«Сервис метаданных, это тот внутренний портал управления, о котором часто забывают, пока кто-то не получит через него ключи от всей корпоративной облачной инфраструктуры. Защита периметра бесполезна, если атакующий может ‘запросить изнутри’ токены доступа, просто обратившись на внутренний IP-адрес.»

Введение: эволюция управления доступом

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

Что такое сервис метаданных?

Сервис метаданных, это внутренний веб-сервис, работающий в облачной виртуальной машине (например, инстансе EC2 в AWS или виртуальной машине в Yandex Cloud). Его основная задача — предоставлять самому инстансу информацию о нём самом и о среде, в которой он работает. Самый известный пример — служба метаданных AWS EC2 Instance Metadata Service (IMDS), доступная по фиксированному link-local IP-адресу 169.254.169.254.

Два типа критических данных

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

  • Метаданные инстанса (Instance Metadata): техническая информация: ID инстанса, тип, данные о сети, публичные ключи SSH. Полезна для разведки.
  • Временные учётные данные (Instance IAM Role Credentials): самый ценный трофей. Если инстансу назначена IAM-роль, сервис выдаёт временные ключи доступа (AccessKeyId, SecretAccessKey, Token), позволяющие выполнять действия от имени этой роли в облачных сервисах (S3, Lambda, RDS и т.д.).

Почему атаки на метаданные так эффективны?

Привлекательность этой цели обусловлена её уникальным положением в архитектуре безопасности:

  • Внутренний доверенный сервис: Доступ к нему по умолчанию разрешён только с самой виртуальной машины. Средства защиты периметра (фаерволы, WAF) для него бесполезны, так как трафик не выходит наружу.
  • Отсутствие аутентификации: Запросы к метаданным не требуют паролей или ключей. Любой процесс на инстансе может запросить токены роли, назначенной этому инстансу.
  • Высокий уровень привилегий: IAM-роли для инстансов часто настраиваются с избыточными правами («для удобства»), что позволяет скомпрометированным токенам наносить значительный ущерб: читать конфиденциальные данные из S3, запускать или останавливать инстансы, изменять конфигурации.

Ключевая уязвимость

Основная опасность возникает, когда внешний злоумышленник получает возможность сделать запрос к этому внутреннему адресу. Это возможно при двух условиях: либо в правилах безопасности сети (Security Groups, NACLs) ошибочно разрешён входящий трафик на порт сервиса метаданных, что крайне маловероятно, либо, что гораздо чаще, при наличии в веб-приложении уязвимости типа Server-Side Request Forgery (SSRF).

Типичные сценарии атак

1. Эксплуатация SSRF-уязвимости

Это самый распространённый вектор. Если приложение принимает URL от пользователя и выполняет к нему запрос (функция импорта данных, проверки ссылки, работы с веб-хуками), злоумышленник может подставить адрес сервиса метаданных.

# Пример уязвимого кода (Python, Flask)
@app.route('/fetch')
def fetch_url():
    url = request.args.get('url')
    response = requests.get(url) # SSRF!
    return response.text

Атакующий отправит запрос на /fetch?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ и получит в ответ токены IAM.

2. Извлечение секретов из User Data

При запуске инстанса в него можно передать скрипт или конфигурацию (User Data). Разработчики иногда ошибочно помещают туда пароли, API-ключи или приватные SSH-ключи для первоначальной настройки. Эти данные также можно получить через сервис метаданных по пути /latest/user-data.

3. Использование уязвимостей в управляющих панелях

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

Практическая эксплуатация: от запроса к доступу

Рассмотрим типичный сценарий пентеста после обнаружения SSRF.

  1. Разведка: Сначала проверяется сам факт доступности сервиса и его версия.
    curl http://169.254.169.254/
    curl http://169.254.169.254/latest/meta-data/
  2. Поиск роли: Определяется, есть ли у инстанса привязанная IAM-роль.
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
    Если роль есть, запрос вернёт её имя.
  3. Получение токенов: Запрашиваются временные учётные данные для этой роли.
    curl http://169.254.169.254/latest/meta-data/iam/security-credentials/[role-name]
    Ответ — JSON с ключами и токеном сессии.
  4. Использование: Полученные ключи настраиваются в AWS CLI или используются напрямую с SDK для исследования и взаимодействия с облачными ресурсами в рамках разрешений роли.
Возвращаемый параметрНазначение и риск
AccessKeyIdИдентификатор для аутентификации в AWS API. Публичный.
SecretAccessKeyСекретный ключ, аналог пароля. Основная цель компрометации.
TokenВременный токен сессии. Без него пара ключей недействительна.
ExpirationСрок действия. Обычно несколько часов, что достаточно для атаки.

Меры защиты и рекомендации по ФСТЭК и 152-ФЗ

В российском корпоративном сегменте, особенно для госсектора и ФГИС, защита от таких атак является обязательной частью обеспечения безопасности информации.

Приоритетные меры:
  • Запрет доступа к метаданным по умолчанию: Если функциональность инстанса не требует обращения к метаданным, доступ должен быть заблокирован на уровне гипервизора или с помощью правил ОС (iptables, firewalld). В AWS для этого можно использовать IMDSv2 с обязательным заголовком X-aws-ec2-metadata-token и блокировать IMDSv1.
  • Борьба с первопричиной — SSRF: Все входящие данные, которые могут содержать URL, должны валидироваться по белому списку разрешённых схем и доменов. Запрещать обращение к приватным (RFC 1918), loopback (127.0.0.0/8) и link-local (169.254.0.0/16) адресам.
  • Строгое следование принципу наименьших привилегий (ПНП) для IAM-ролей: Роль инстанса должна иметь только те разрешения, которые критически необходимы для его работы. Запрещать широкие действия типа s3:* или ec2:*.
  • Отказ от хранения секретов в User Data: Для передачи конфиденциальных данных при запуске необходимо использовать специализированные сервисы управления секретами (AWS Secrets Manager, HashiCorp Vault), которые предоставляют API для безопасного получения секретов уже после запуска инстанса.
  • Регулярный аудит и мониторинг: Внедрение CloudTrail-логов (или их аналогов в других облаках) для отслеживания необычной активности, связанной с IAM-ролями инстансов, особенно запросов на получение учётных данных с подозрительных IP-адресов внутри сети.

Заключение

Атаки на сервисы метаданных обнажают фундаментальный сдвиг в модели угроз: внутренние доверенные сервисы становятся новым периметром. Их безопасность нельзя обеспечить только сетевыми мерами. Требуется комплексный подход, включающий безопасную разработку приложений (защита от SSRF), строгое управление доступом на основе ролей и архитектурные решения, минимизирующие доверие внутри системы. В контексте регуляторных требований (152-ФЗ, ФСТЭК) контроль над каналами получения учётных данных и минимизация привилегий для автоматизированных систем являются обязательными элементами защиты критической информационной инфраструктуры от цепочек компрометации, начинающихся с одной уязвимости в веб-интерфейсе.

Оставьте комментарий