open atlas
↑ К треку
Безопасность облака и инфраструктуры CLOUD · 04 · 02

Облачное логирование и журналы аудита

Журнал управляющего слоя — единственная запись о том, кто что сделал в облаке, и первое, что удаляет атакующий. Если он может его править, у вас лог, а не доказательство. Защита от подделки превращает одно в другое.

CLOUD Middle ◷ 15 min
Уровень
ОсновыJuniorMiddleSenior

Звонок о взломе приходит в 02:00. Кто-то поднял парк GPU-инстансов в регионе, которым вы не пользуетесь, на счёт от ключа сервисного аккаунта. Первый инстинкт верен: вытащить журнал аудита управляющего слоя и восстановить, какая именно личность сделала какой API-вызов, с какого IP и в каком порядке. Вы открываете журнал — а нужных часов нет. Не повреждены, не пропуски из-за сбоя. Удалены. У того же ключа, что запустил майнеры, были права cloudtrail:StopLogging и cloudtrail:DeleteTrail, и самое первое, что он сделал, ещё не трогая вычисления, — выключил камеру. У вас больше нет хронологии инцидента. У вас есть догадка.

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

Что на самом деле записывает журнал аудита

В любом облаке два слоя логов, и их постоянно путают. Логи слоя данных фиксируют трафик через твои сервисы: HTTP-запросы к балансировщику, чтения объекта, запросы к базе. Логи управляющего слоя — AWS CloudTrail, GCP Cloud Audit Logs, Azure Activity Log — фиксируют управляющие действия против самого облачного API: кто вызвал CreateUser, кто привязал политику, кто изменил security group, кто проротировал ключ, кто удалил бакет. Когда ты восстанавливаешь взлом, важен именно журнал управляющего слоя, потому что любое повышение привилегий и любой акт закрепления — это под капотом последовательность аутентифицированных API-вызовов.

Одно событие CloudTrail — это структурированная запись с полями, которые реально нужны расследователю: eventTime, eventName (вызванный API), userIdentity (IAM-принципал, включая сессию принятой роли и исходный аккаунт), sourceIPAddress, userAgent, параметры запроса и ответ. Прочитай эти пять полей по нескольким тысячам событий — и ты ответишь на единственный важный в 02:00 вопрос: какая личность это сделала, когда, откуда и чего коснулась. Поэтому журнал и называют источником истины — это единственное место, где само облако, а не твоё приложение, свидетельствует о том, что произошло.

Подвох — в покрытии по умолчанию. Из коробки журнал обычно логирует управляющие события, но не события данных: атакующий, вычитывающий каждый объект из S3-бакета, не порождает ни одной записи управляющего слоя, пока ты явно не включишь логирование событий данных — а оно отключено по умолчанию отчасти потому, что объёмно и тарифицируется поштучно. Зрелый рефлекс: точно знать, что твой журнал захватывает, а что — нет, до инцидента, потому что «мы предполагали, что S3 GetObject логируется» — открытие, которое не хочется делать, когда эксфильтрация уже идёт.

Почему журнал — первая цель атакующего

Подумай как противник один абзац. Ты скомпрометировал учётку. Твои цели — повысить привилегии, закрепиться и действовать: майнить крипту, выкачивать данные, шантажировать аккаунт. Каждое из этих действий оставляет в журнале следы API-вызовов. Поэтому ход с наибольшим рычагом, который можно сделать перед всем шумным, — ослепить защитника: остановить журнал, удалить его или прервать доставку в место назначения. Это не теория — «уклонение от защиты через подрыв логирования» — поименованная, каталогизированная техника в облачной матрице MITRE ATT&CK именно потому, что это стандартный дебютный ход. Журнал, который атакующий может выключить, — это датчик дыма с доступным выключателем: он защищает ровно до момента, когда становится нужен.

Защита от подделки: превращаем лог в доказательство

Разница между логом и доказательством — в том, мог ли записываемый его изменить. До цели доводят четыре меры, наложенные слоями.

Доставляй в неизменяемое append-only хранилище. Журнал должен писать в объектное хранилище с политикой object-lock / удержания в режиме compliance, чтобы даже администратор аккаунта не мог удалить или перезаписать объект до истечения срока удержания. Append-only — то свойство, что бьёт «правку истории»: можно добавлять записи, но никогда не переписывать.

Размести сток в отдельном аккаунте. Это единственный архитектурный ход с наибольшей ценностью. У скомпрометированного принципала в рабочем аккаунте вообще не должно быть IAM-прав над архивом логов. Централизуй журналы со всех аккаунтов в один выделенный, наглухо запертый логирующий аккаунт, единственная работа которого — принимать и хранить. Теперь, чтобы ослепить журнал, нужно скомпрометировать второй, куда меньший и куда строже контролируемый аккаунт — ты поднял стоимость уклонения на порядок.

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

Алертируй на сам акт подделки. API-вызовы, отключающие логирование — StopLogging, DeleteTrail, сужающий охват PutEventSelectors, удаление стока логов, — сами являются логируемыми событиями. Повесь на них алерт в реальном времени. Первый ход атакующего становится его самым громким. Это же и ответ на премису непрерывного мониторинга из NIST SP 800-137: мера, которую выставили один раз и никогда не наблюдают, имеет неизвестный статус; состояние безопасности нужно наблюдать на постоянной основе, и «логирование всё ещё включено?» — самое базовое, что стоит наблюдать.

МераКакую атаку блокируетЧего стоит
Append-only / object-lock стокУдаление или перезапись прошлых записейЗатраты на хранение; нельзя рано чистить
Отдельный логирующий аккаунтДоступ к логам через взлом рабочего аккаунтаКросс-аккаунт-настройка + управление org
Валидация целостности файловТихие правки после доставкиШаг проверки на этапе расследования
Алерт на StopLogging / DeleteTrailТихое выключение камерыКонвейер алертов; борьба с ложными
Мультирегион + логи событий данныхДействия в немониторируемом регионе / слое данныхПоштучная тарификация; больше объёма
Почему это работает

Почему бы просто не хранить логи вечно и не возиться со сложностью object-lock? Потому что «сохранён» и «неизменяем» — разные свойства. Обычный бакет, в который пишет рабочий аккаунт, может быть и опустошён любым, у кого есть право на удаление в нём, — а учётка, владеющая рабочим аккаунтом, часто имеет такое право или может выдать его себе сама. Удержание без неизменяемости защищает от случайного удаления и отказа диска; против мотивированного инсайдера или атакующего с правами админа оно не даёт ничего. Object-lock в режиме compliance — та часть, что говорит даже root не укоротит срок, а это и есть весь смысл, когда модель угроз включает скомпрометированного администратора.

Читать журнал хорошо, а не только хранить

Защита от подделки держит запись честной; полезной саму по себе она её не делает. Журнал, к которому ты никогда не делаешь запросов, — это просто дорогое хранилище. Две зрелые привычки закрывают разрыв. Первая — централизуй и нормализуй: сливай журнал каждого аккаунта в одно запросопригодное хранилище, чтобы расследователь делал один запрос по всей организации, а не двенадцать. Вторая — выстрой базовую линию нормы, чтобы аномалия бросалась в глаза: новый IAM-пользователь, созданный в 03:00, console login из страны, где вы не работаете, внезапный всплеск RunInstances в неиспользуемом регионе — это сигнал только тогда, когда ты знаешь, как выглядит скучное. Это ровно тот цикл, что NIST SP 800-137 называет непрерывным мониторингом: собрать, сравнить с известной базовой линией, отреагировать, повторить — статус безопасности это то, что ты продолжаешь измерять, а не галочка, поставленная на старте.

Выбери лучший вариант

Твой журнал управляющего слоя сейчас доставляет в S3-бакет в том же рабочем аккаунте, с включённым версионированием. Атакующий, скомпрометировавший роль администратора в этом аккаунте, хочет стереть последние 6 часов активности. Какое изменение реально его остановит?

Викторина

Атакующий компрометирует учётку и сразу вызывает `StopLogging` на журнале, прежде чем сделать что-либо ещё. Почему это стандартный дебютный ход?

Викторина

Что даёт валидация целостности файлов журнала (подписанные дайджесты, связанные хеш-цепочкой), чего не даёт одно лишь удержание?

Расставь шаги по порядку

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

  1. 1 Доставлять журнал в отдельный, наглухо запертый логирующий аккаунт
  2. 2 Применить object-lock / удержание в режиме compliance, чтобы записи были append-only
  3. 3 Включить валидацию целостности файлов журнала (подписанные, хеш-связанные)
  4. 4 Алертировать в реальном времени на StopLogging / DeleteTrail / удаление стока
Вспомните перед уходом
  1. 01
    Почему журнал аудита управляющего слоя — источник истины при расследовании облачного взлома, и какой пробел есть в его покрытии по умолчанию?
  2. 02
    Какие четыре наложенных слоями меры превращают журнал из лога, который атакующий может править, в доказательство, и какая из них самая ценная?
Итог

Журнал аудита управляющего слоя — CloudTrail и его собратья — источник истины при любом облачном взломе: он фиксирует каждый управляющий API-вызов с личностью, временем, исходным IP и параметрами, нужными расследователю, — именно поэтому его отключение и есть стандартный дебютный ход атакующего (каталогизированная техника уклонения от защиты в MITRE ATT&CK). Журнал, который атакующий может остановить или удалить, — это датчик дыма с выключателем. Четыре наложенных слоями меры делают из него доказательство: доставка в неизменяемое append-only хранилище; изоляция стока в отдельном запертом логирующем аккаунте, до которого скомпрометированный рабочий аккаунт не дотянется; криптографическая валидация целостности, делающая правки после доставки доказуемыми; и алерт в реальном времени на StopLogging / DeleteTrail, чтобы ослепляющий ход сам себя выдавал. Следи за пробелом покрытия по умолчанию — события данных вроде чтений S3 отключены. И помни цикл NIST SP 800-137: хранить журнал недостаточно — за ним надо продолжать наблюдать, ведь мера, которую не наблюдаешь, имеет неизвестный статус. В следующий раз, поднимая облачный аккаунт, твой первый вопрос: если бы учётку, которую я только что выдал, скомпрометировали, смогла бы она стереть собственные следы?

Практика

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

вспомнитьприменитьуглубить0 из 6 завершено
Связанные уроки
углубляется в

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

Примени это

Примени этот урок в реальном проекте.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.