OGOwnGate

Как уволенный инженер полгода ходил в прод через забытую вики: анатомия факапа

Отключить доменную почту и заблокировать Active Directory — это только 20% оффбординга. Разбираем реальный кейс, как бывший сотрудник полгода спокойно заглядывал во внутренние сервисы, и почему ручной чек-лист увольнения всегда даёт сбой.

Забытый доступ и ретроспектива инцидента

Пятница, 17:45. Ведущий бэкендер компании на 120 человек подписывает обходной лист, жмёт руки коллегам и уходит в закат к конкурентам.

HR отправляет стандартное письмо в техподдержку: *«Просьба заблокировать доступы Иванову И.И.»*. Дежурный сисадмин открывает консоль Active Directory, нажимает Disable-ADAccount, ставит галочку в Jira-тикете и уходит пить пиво с чистой совестью.

Через семь месяцев компания проводит плановый аудит логов Nginx перед сертификацией безопасности.

И внезапно обнаруживает: все эти семь месяцев с IP-адреса одного из домашних провайдеров каждую неделю происходили аккуратные входы во внутреннюю базу знаний компании, просмотр схем сетевой архитектуры и скачивание документации по новым релизам.

Кто заходил? Тот самый Иванов.

Как? Очень просто: шесть лет назад корпоративную Wiki развернули на отдельной виртуальной машине с локальной базой пользователей в PostgreSQL, потому что «надо было быстро, а LDAP прикрутим потом». «Потом», разумеется, не наступило никогда.

---

Анатомия ложной безопасности: почему ADUC не спасает

Большинство технических руководителей искренне уверены, что если у них есть Active Directory (или FreeIPA, или OpenLDAP), то процесс оффбординга у них под контролем. Нажал кнопку — и человека нет.

В реальности ландшафт сервисов средней ИТ-компании выглядит как слоёный пирог из костылей:

| Категория сервиса | Как там авторизовался Иванов | Что произошло при Disable-ADAccount |

|---|---|---|

| Корпоративная почта | Exchange / Google Workspace | Доступ заблокирован |

| GitLab | LDAP Bind | Пароль не подходит, но Personal Access Token на ноутбуке продолжает работать |

| Внутренняя Wiki | Локальная база (локальный логин/пароль) | Доступ активен, пароль не менялся |

| Grafana (мониторинг) | Базовая авторизация (admin:admin или личный логин) | Доступ активен |

| VPN (OpenVPN) | Сертификат на ноутбуке без проверки CRL | Туннель поднимается до истечения срока сертификата |

| Sentry (ошибки прода) | Приглашение по личной почте GitHub | Доступ активен, видны стектрейсы с токенами и данными клиентов |

В итоге из 10 критических точек входа заблокированной оказалась ровно половина.

---

Почему ручной чек-лист увольнения всегда даёт сбой

Классическая попытка решить проблему зомби-доступов — это составление сакрального документа: «Регламент вывода сотрудника из эксплуатации».

В этом регламенте обычно содержится 25 пунктов:

1. Заблокировать в AD;

2. Отозвать лицензию в CRM;

3. Зайти в админку базы знаний и перевести в Inactive;

4. Отозвать сертификат OpenVPN и перегенерировать CRL;

5. Удалить из Mattermost;

6. Проверить токены GitLab...

Знаете, какова вероятность того, что дежурный админ в запарке спринта выполнит все 25 пунктов без единой ошибки? Около нуля.

Достаточно, чтобы:

  • Админ заболел, и увольнением занимался стажёр;
  • Увольнение произошло экстренно в выходной день;
  • Полгода назад отдел маркетинга втихаря поднял для себя новый сервис и никому о нём не сказал.

Ручной контроль распределённых доступов математически обречён на появление «дыр».

---

Как это устроено, когда не нужно надеяться на человеческий фактор

Единственный способ гарантировать 100% блокировку сотрудника в момент увольнения — это лишить сервисы права иметь собственные базы пользователей и собственные сессии авторизации.

В архитектуре с централизованным шлюзом доступа (OwnGate):

1. Сервисы не хранят пароли и учётки. Никаких локальных юзеров в Grafana, GitLab, Wiki или Sentry. Все сервисы делегируют аутентификацию шлюзу по OIDC / SAML.

2. Единая точка валидации. При каждом обращении сервис либо валидирует короткоживущий токен (срок жизни — 5–15 минут), либо шлюз форсированно отзывает сессию через Backchannel Logout.

3. Один клик. Когда HR блокирует сотрудника в кадровой системе или Active Directory, шлюз моментально получает событие (или видит флаг disabled при очередной проверке).

В эту же секунду:

  • Текущие веб-сессии во всех открытых вкладках браузера аннулируются;
  • Все выпущенные шлюзом токены доступа признаются недействительными;
  • Попытка подключиться к VPN отбивается на этапе шлюзовой проверки второго фактора;
  • Личные токены и сессии превращаются в тыкву.

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

← Все статьи