← Verbal Voyager · разборы

Взлом, который пережил первую чистку

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

Сигнал

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

Первая чистка

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

Повторный аудит

Через три недели, во время планового аудита сервера, нашлась служба с именем, почти совпадающим со штатным системным компонентом. Она запускала неизвестный бинарник от root, скрывала вывод и держала внешнее соединение. По метаданным файлов восстановил хронологию: атакующий успел подняться до root и закрепиться так, что первая чистка этого не задела.

Порядок работ

  1. Улики. Копии бинарников, состояние процесса и его соединения, всё до любых удалений.
  2. Изоляция. Git-сервер закрыт от интернета, доступен только изнутри.
  3. Зачистка. Бэкдоры и остатки майнера удалены, модули аутентификации переустановлены, все системные пакеты сверены с эталонными контрольными суммами.
  4. Причина. Git-сервер обновлён на шесть версий вперёд по шагам: проверка подписей, резервная копия, готовый откат, сверка всех веток и тегов до и после. Совпали полностью.

Выводы

Удалить видимое ещё не значит вычистить. После взлома нужен аудит закреплений: службы, задачи, SUID-файлы, модули аутентификации. Служебные интерфейсы не должны смотреть в интернет, в SSH пускать только по ключам, а после компрометации менять все секреты.

Следующий разборДоход, которого не было