Криминалистика в облаке

В облаке исчезает привычный «жёсткий диск под подушкой»: главным свидетелем становится управляющий журнал API-вызовов, а сам сервер может испариться за секунды.

Облачный аудит-журнал (CloudTrail в AWS, Activity Log в Azure, Audit Logs в GCP) — это запись управляющих действий: кто, когда, из какого источника и через какой API создал, изменил или удалил ресурс. В облаке именно он, а не образ диска, чаще всего отвечает на вопрос «что произошло».

Этот урок — про то, как меняется криминалистика, когда инфраструктура живёт в чужом дата-центре и управляется через API. Мы смотрим на облако глазами расследователя инцидента в своей организации: где лежат доказательства, почему их легко потерять и как собрать улики так, чтобы им можно было доверять. Расследовать можно только свои облачные аккаунты или те, на которые у вас есть полномочия; доступ к чужим аккаунтам — это ст. 272 УК РФ.

Зачем это знать защитнику

Классическая форензика предполагает, что у вас есть физический носитель: вы снимаете его побитовый образ и анализируете офлайн. В облаке этой опоры нет. Виртуальная машина — это не «железо», а запись в системе провайдера; контейнер живёт минуты; функция (serverless) выполняется доли секунды и не оставляет диска вовсе. Зато каждое действие в аккаунте проходит через плоскость управления (control plane) и может быть записано в журнал. Поэтому центр тяжести расследования смещается: вместо «что лежит на диске» — «какие API-вызовы были сделаны и кем». Понимание этой модели отличает того, кто восстановит картину атаки, от того, кто разведёт руками над удалённым инстансом.

Где живут доказательства в облаке

Плоскость управления: аудит-журналы

Главный источник — журнал управляющих вызовов. Каждая запись описывает одно событие: какой API вызван (например, создание ВМ, выдача прав, удаление бакета), от чьего имени (пользователь, роль, ключ доступа), с какого IP, в какое время, успешно или с отказом. По этой ленте восстанавливается последовательность действий атакующего: вход → повышение прав → создание ресурсов → удаление следов. Так выглядит одна запись (схематично, поля упрощены):

{
  "eventTime": "2026-03-14T09:21:07Z",
  "eventName": "CreateAccessKey",
  "userIdentity": { "type": "IAMUser", "userName": "deploy-bot" },
  "sourceIPAddress": "203.0.113.45",
  "requestParameters": { "userName": "admin" },
  "responseElements": { "accessKey": { "status": "Active" } }
}

Здесь видно тревожный паттерн: сервисная учётка deploy-bot с нового IP создаёт ключ доступа для admin — типичный шаг закрепления. Аудит-журнал отвечает на вопросы «кто» и «что сделал» даже тогда, когда сам ресурс уже удалён.

Плоскость данных и снимки дисков

Иногда нужно содержимое — файлы на диске ВМ, объекты в хранилище. Здесь работает снимок диска (snapshot): облако умеет за секунды сделать консистентную копию тома, не выключая машину. Снимок — это и есть облачный аналог образа диска: его можно скопировать в изолированный криминалистический аккаунт и спокойно анализировать, не трогая работающий сервис. Журналы доступа к данным (например, к объектному хранилищу) показывают, какие именно объекты читались и скачивались, — это прямая улика эксфильтрации.

Идентичность вместо периметра

В облаке нет «сетевого периметра» в привычном смысле — есть идентичности и права (IAM). Поэтому ключевой вопрос инцидента: «чьи учётные данные скомпрометированы и какие права у них были». Утёкший ключ доступа здесь опаснее открытого порта: с ним атакующий действует «легально» от имени жертвы, и отличить его можно только по аномалиям — новый IP, необычное время, нетипичные вызовы.

Эфемерность: почему улики исчезают

Эфемерность — ключевое свойство облака: ресурсы создаются и уничтожаются на лету, автоматически масштабируются и пересоздаются. Для разработки это удобно, для расследования — ловушка. Инстанс, на котором работал злоумышленник, может быть удалён автоскейлингом через минуту; локальный диск контейнера исчезает вместе с ним; serverless-функция вообще не оставляет файловой системы. Если телеметрия не настроена заранее, восстанавливать будет нечего. Отсюда железное правило облачной форензики: доказательства собираются логированием до инцидента, а не образами после. Включённый и выгружаемый в защищённое хранилище аудит-журнал — это и есть ваша «чёрная коробка».

Как это работает под капотом

Управляющий журнал — побочный продукт самой архитектуры облака. Любое действие (через консоль, CLI или SDK) превращается в вызов REST-API плоскости управления. Провайдер ставит этот вызов на запись: фиксирует вызывающую идентичность (по токену/ключу), параметры, IP и результат, после чего складывает событие в журнал и опционально доставляет его в хранилище или SIEM. Поскольку запись делает сама платформа, а не агент на машине, журнал переживает удаление ресурса — событие «инстанс удалён» останется, даже когда инстанса уже нет. Снимки дисков работают на уровне системы хранения: провайдер фиксирует состояние блоков тома (copy-on-write), поэтому копия консистентна и не требует остановки сервиса. У этой модели есть оборотная сторона доверия: вы полагаетесь на корректность журналов провайдера и на то, что у атакующего не было прав их отключить или почистить, — поэтому защита самих логов критична.

Как защититься

1. Включите аудит во всех аккаунтах и регионах. CloudTrail/Activity Log/Audit Logs должны покрывать весь периметр, а не один регион. Без сплошного логирования слепые зоны становятся местом, где «ничего не было».

2. Защитите сами журналы от подделки. Выгружайте логи в отдельный, изолированный аккаунт-приёмник с неизменяемым (WORM/object-lock) хранилищем. Атакующий с правами в основном аккаунте не должен иметь возможности их стереть или отредактировать.

3. Логируйте плоскость данных там, где это важно. Включайте журналы доступа к объектному хранилищу для чувствительных бакетов — иначе факт скачивания данных останется невидимым.

4. Реагируйте снимками, а не удалением. При инциденте первым делом сделайте снимок диска подозрительной ВМ и сохраните её метаданные, прежде чем что-то останавливать или удалять. Изолируйте ресурс (отдельная сеть/правила), но не уничтожайте улики.

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

Итоги

  • В облаке главное доказательство — управляющий аудит-журнал (кто/что/откуда/когда сделал по API), а не образ диска.
  • Ресурсы эфемерны: ВМ, контейнеры и функции исчезают, поэтому улики собираются логированием заранее, а не после инцидента.
  • Снимок диска — облачный аналог образа: консистентная копия тома для офлайн-анализа без остановки сервиса.
  • Периметр заменён идентичностями: утёкший ключ доступа опаснее открытого порта, а компрометация видна по аномалиям.
  • Журналы нужно защищать (изолированный аккаунт, неизменяемое хранилище), иначе атакующий сотрёт собственные следы; расследуем только свои аккаунты — чужие это ст. 272 УК РФ.
Проверьте себя
1. Почему в облачной криминалистике центр тяжести смещается с образа диска на управляющий аудит-журнал (CloudTrail/Activity Log)?
AПотому что ресурсы эфемерны и могут исчезнуть, а журнал API-вызовов фиксирует, кто и что сделал, даже после удаления ресурса
BПотому что снимать образ диска в облаке технически невозможно
CПотому что журналы всегда содержат полное содержимое файлов с диска ВМ
DПотому что в облаке нет понятия идентичности и прав доступа
2. Что из перечисленного — правильное первое действие при реагировании на скомпрометированную облачную ВМ?
AСделать снимок диска и сохранить метаданные ВМ, изолировать ресурс, но не удалять его
BНемедленно удалить инстанс, чтобы остановить атаку
CОтключить весь аудит-журнал, чтобы атакующий не видел расследования
DПерезагрузить ВМ, чтобы сбросить вредоносные процессы
3. Почему облачные аудит-журналы рекомендуют выгружать в отдельный изолированный аккаунт с неизменяемым хранилищем?
AЧтобы атакующий, получивший права в основном аккаунте, не смог стереть или подделать собственные следы
BЧтобы журналы занимали меньше места и стоили дешевле
CЧтобы ускорить выполнение API-вызовов в основном аккаунте
DЧтобы провайдер не имел доступа к содержимому журналов