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

«Сервис метаданных — это тот внутренний портал управления, о котором часто забывают, пока кто-то не получит через него ключи от всей корпоративной облачной инфраструктуры. Защита периметра бесполезна, если атакующий может ‘запросить изнутри’ токены доступа, просто обратившись на внутренний 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-ФЗ, ФСТЭК) контроль над каналами получения учётных данных и минимизация привилегий для автоматизированных систем являются обязательными элементами защиты критической информационной инфраструктуры от цепочек компрометации, начинающихся с одной уязвимости в веб-интерфейсе.

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