IBCOURSES / СПРАВОЧНИК ИБ

Не удаётся войти: маршрут проверки AD и Keycloak

К ответу ↓

Определите этап отказа: клиент, IdP, LDAP/Kerberos, создание сеанса или авторизация приложения. Каждый шаг ведёт к точному источнику и сохраняет границы вывода.

Например
Материалов с пояснениями: 94 · Записей реестров: 11 678

Уточнить поиск

События и журналы

Найдено: 84
Инструкция по проверке

Не удаётся войти: маршрут проверки AD и Keycloak

Определите этап отказа: клиент, IdP, LDAP/Kerberos, создание сеанса или авторизация приложения. Каждый шаг ведёт к точному источнику и сохраняет границы вывода.

1. Зафиксируйте исходную ошибку

Сохраните время, систему, название клиента и безопасный фрагмент сообщения. Не переносите в справочник пароли, токены, cookies или SAML assertions. Запишите, на каком экране или endpoint произошёл отказ и достиг ли запрос IdP. Сбой TLS, неверный redirect и ошибка пароля относятся к разным этапам. Не запускайте повторную попытку до понимания политики блокировки и назначения запроса.

2. Выберите ветку по наблюдаемым данным

При Windows Security 4625 разберите тип входа и Status/SubStatus на узле назначения. Для Kerberos на DC откройте 4768/4771, затем 4769 при запросе службы. LDAP resultCode 49 ведёт к ответу bind и необязательной диагностике AD. Для Keycloak определите OIDC или SAML и точный этап. Это альтернативные ветви: один вход не обязан порождать все перечисленные записи.

3. Установите область связи

Зафиксируйте учётную базу, SID или realm и правила сопоставления между приложением и каталогом. Ненулевой LogonGuid может помочь связать 4769 с 4624, тогда как LogonId используется в границах узла. У IdP и приложения собственные идентификаторы. При отсутствии общего ключа оформите сопоставление как гипотезу с временным окном; одинаковый логин и IP не дают гарантии.

4. Прочитайте учебную цепочку

Авторский JSON показывает 4771, 4740 и LDAP 49 рядом по времени: состояние учётной записи может объяснять часть отказов, но нужно подтвердить узел, identity и маршрут bind. Отдельный Keycloak invalid_redirect_uri относится к настройке OIDC клиента и не доказывает блокировку AD. Не выбирайте одну причину только потому, что сообщения появились в одной минуте. Сохраняйте независимые наблюдения.

5. Проверьте права после аутентификации

Успешный TGT, TGS или сеанс 4624 не означает разрешение нужного действия. Если пользователь вошёл и получил 403, исследуйте авторизацию приложения и изменения доступа. Для Windows смотрите релевантное членство или изменение AD, для Keycloak — административный аудит и фактическое сопоставление ролей. Текущее состояние само не доказывает, какие права действовали в исследуемый момент.

6. Завершите проверяемым выводом

Сформулируйте факт: какой этап, источник, код, identity и период подтверждены. Затем отдельно перечислите возможную причину, её подтверждения и недостающие данные. Не меняйте политики, пароли, SPN или защитные проверки как часть этого маршрута. Если нет нужного журнала, зафиксируйте ограничение; отсутствие записи не превращается в успех или доказательство атаки.

Поля и область применения

Исходное полеСмысл и ограничения
Этап / владелецКлиент, Keycloak, каталог, DC или приложение; не смешивать точки наблюдения.
Время UTC / погрешность / источникИспользовать время генерации отдельно от доставки; сохранить границы периода.
Учётная запись / областьИмя, SID, realm и локальные правила сопоставления; одинаковая строка не доказывает одного субъекта.
Код / пространствоStatus в Kerberos, LDAP resultCode и диагностический текст, OAuth error и NTSTATUS относятся к разным пространствам кодов.
Идентификатор связиНенулевой LogonGuid, локальный LogonId или доступный request ID или session ID применимы в своей области.
Результат / пробелОтдельно подтверждённое наблюдение, гипотеза и отсутствующий источник.

Примеры записей

Данные в примерах условные. Состав полей зависит от версии и настроек источника.

Учебный журнал наблюдений по этапам

Поясняющая схема. Схема сопоставления событий Windows, LDAP и Keycloak. Названия обозначают роли данных, а не нативные поля SIEM.

{
  "notice": "Авторская схема сопоставления, не нативный формат продукта и не автоматическое доказательство причинности.",
  "observations": [
    {
      "utc": "2026-11-04T07:00:00Z",
      "source": "DC Security4771",
      "account": "EXAMPLE/demo.user",
      "status": "0x18",
      "role": "pre-auth rejected"
    },
    {
      "utc": "2026-11-04T07:03:00Z",
      "source": "DC Security4740",
      "account": "EXAMPLE/demo.user",
      "role": "account locked"
    },
    {
      "utc": "2026-11-04T07:03:01Z",
      "source": "application LDAP BindResponse",
      "resultCode": 49,
      "diagnostic": "data775 if supplied; nonstandard debug suffix",
      "role": "separate protocol result, possible state correlation"
    },
    {
      "utc": "2026-11-04T07:03:02Z",
      "source": "Keycloak LOGIN_ERROR",
      "client": "demo-web",
      "error": "invalid_redirect_uri",
      "role": "separate client configuration failure; not proved to be account lockout"
    }
  ],
  "conclusion": "Близость по времени не объединяет четыре наблюдения в одну попытку входа."
}

Команды и способы проверки

Укажите свой узел, путь к журналу и временной интервал. Требуемая среда указана рядом с командой.

PowerShell 7.5 / Windows: чтение разрешённой локальной копии EVTX. Заменить путь и учебное UTC-окно.

$referenceStartUtc = [DateTimeOffset]::Parse('2026-11-04T06:55:00Z').UtcDateTime
$referenceEndUtc = [DateTimeOffset]::Parse('2026-11-04T07:10:00Z').UtcDateTime
Get-WinEvent -FilterHashtable @{
  Path='C:\Evidence\Security.evtx'
  ProviderName='Microsoft-Windows-Security-Auditing'
  Id=4624,4625,4740,4768,4769,4771
  StartTime=$referenceStartUtc
  EndTime=$referenceEndUtc
} | ForEach-Object {
  $referenceEvent = $_
  [xml]$referenceXml = $referenceEvent.ToXml()
  $referenceNs = [System.Xml.XmlNamespaceManager]::new($referenceXml.NameTable)
  $referenceNs.AddNamespace('e','http://schemas.microsoft.com/win/2004/08/events/event')
  $referenceData = @{}
  foreach ($referenceNode in $referenceXml.SelectNodes('/e:Event/e:EventData/e:Data',$referenceNs)) {
    $referenceData[$referenceNode.GetAttribute('Name')] = $referenceNode.InnerText
  }
  [pscustomobject]@{
    TimeCreatedUtc = $referenceEvent.TimeCreated.ToUniversalTime().ToString('o')
    Computer = $referenceEvent.MachineName
    Provider = $referenceEvent.ProviderName
    EventId = $referenceEvent.Id
    RecordId = $referenceEvent.RecordId
    Version = $referenceXml.SelectSingleNode('/e:Event/e:System/e:Version',$referenceNs).InnerText
    TargetUserName = $referenceData['TargetUserName']
    TargetDomainName = $referenceData['TargetDomainName']
    TargetSid = $referenceData['TargetSid']
    ServiceName = $referenceData['ServiceName']
    Status = $referenceData['Status']
    IpAddress = $referenceData['IpAddress']
    PreAuthType = $referenceData['PreAuthType']
    LogonGuid = $referenceData['LogonGuid']
    TicketEncryptionType = $referenceData['TicketEncryptionType']
    SessionKeyEncryptionType = $referenceData['SessionKeyEncryptionType']
    SubjectUserSid = $referenceData['SubjectUserSid']
    SubjectUserName = $referenceData['SubjectUserName']
    SubjectLogonId = $referenceData['SubjectLogonId']
    CallerComputerName = $referenceData['CallerComputerName']
  }
}

Первоисточники

Не каждый вход проходит все перечисленные протоколы; близкие время/имя/IP не доказывают общий запрос. Схема маршрута не выполняет автоматическую корреляцию.

Связанные материалы

Как пользоваться техническим справочником

Найдите порт, код ошибки, событие или источник журнала. Уточните протокол и систему, затем сверяйте значение, поля, примеры и первоисточники. Назначение порта не определяет фактическую службу, а одна запись не доказывает инцидент.

Материалы по разделам

События и журналы

Два ответа рядом

Сравнение источников

Сравнение показывает различия. События и поля разных систем не считаются эквивалентными.

Выберите службу

В списке — службы, доступные с текущими условиями. Число рядом — количество записей портов, а не программ на вашем узле.

Как искать в справочнике

Введите число, код, фрагмент сообщения или вопрос. Известный идентификатор поможет найти карточку; это не анализ самого инцидента.

  1. Введите номер, код, имя или фрагмент записи. Для портов можно использовать список: 80, 443, 8000–8010.
  2. Уточните поиск фильтрами. Все условия действуют одновременно. Числа в списках показывают, сколько материалов останется при выборе варианта.
  3. Службу выбирайте из каталога: поиск внутри списка помогает найти название, а кнопка «Выбрать» применяет его.
  4. Убирайте отдельные условия кнопкой × рядом с фильтром. «Сбросить фильтры» сохраняет текст поиска и текущий раздел.
  5. В карточке сверьте источник, версию и условия регистрации, затем откройте поля, примеры и первоисточник.

/ — перейти к поиску. Прямые ссылки открывают выбранную карточку в этом же справочнике.

Назначения портов и коды приведены по официальным реестрам. Версии, условия регистрации и ссылки на документацию указаны в карточках.

Избранное и недавние материалы хранятся в этом браузере. Запрос и фильтры сохраняются при возврате к выдаче и обновлении вкладки. Поиск работает локально.

Что есть в справочнике

От вопроса к свидетельствам: кто вошёл, что запустил, к каким данным обратился, что изменил и где искать следы.

Выберите область, чтобы посмотреть доступные источники и перейти к материалам.

Уточнить или исправить ответ

Скопируйте сообщение и отправьте его на mail@ibcourses.ru.