[Перевод] Враг внутри: как я попался на инсайдерском редтиминге
У меня были все преимущества. Я уже был внутри сети. Я был вне подозрений. Но они обнаружили мой взлом, выкинули из сети… и выследили физически.
Многие тестирования на проникновение начинаются снаружи, чтобы проверить, как можно преодолеть периметр. На этот раз заказчик хотел посмотреть, насколько далеко может зайти атакующий, который уже сумел оказаться внутри организации. Разве они могли бы остановить меня, если я уже был в сети?
Итак, они тайком провели меня в офис, замаскировав под нового работника. Мне дали рабочий компьютер, бейджик, учётку в системе… чёрт, у меня даже была своя кабинка с вымышленным именем на ней. Единственным человеком, знавшим, кто я на самом деле, был их директор по информационной безопасности. Все остальные думали, что я Джереми из Маркетинга.
Разведка
Бо́льшую часть утра первого дня я был занят процедурами оформления на работу, знакомства с коллегами и выполнением чёрной работы. Но я должен был действовать быстро. На всё про всё у меня была только неделя, и нужно было успеть всё взломать, не вызвав подозрений. Так что я занялся делом.
Чтобы вы понимали: большинство тестирований на проникновение довольно прямолинейны. Самое трудное — пробиться в сеть. Но оказавшись внутри, получаешь широкий выбор целей: старые компьютеры, пароли по-умолчанию, все сидят под локальными администраторами… Обычно я получаю учётку доменного админа за день-два, а вскоре после этого и администратора организации. Оставшееся время уходит на заметание следов и сбор доказательств возможных последствий атаки. Но на этот раз всё было иначе. Пришло время удивляться.
Сев за компьютер, я сделал вид, что работаю. Я собирался использовать свой служебный компьютер для исследования, изучения настроек других рабочих станций, но я бы не стал атаковать непосредственно с него, чтобы не оставлять следов, указывающих на меня. Вместо этого я принёс отдельное устройство для взлома: личный ноутбук с линуксом и кучей хакерских инструментов. Я подключил его к сети и получил IP-адрес. Их NAC не охватывал всю сеть: любое подключение из рабочей кабинки было доверенным.
Я начал, как обычно. Перехват и анализ сетевого трафика с Wireshark, смена MAC-адреса и имени моего ноутбука, чтобы он затерялся в их инфраструктуре и выглядел, как обычное оборудование. Затем — использование Responder в своей подсети для вылавливания хэшей и взлома паролей. Довольно быстро мне удалось насобирать полную горсть хэшей. Я находился в обычной подсети для работников, поэтому вокруг было много залогиненных учёток с открытыми браузерами, разбрасывающими аутентификационные данные.
Первые сюрпризы
Я запустил перебор найденных хэшей на своей ферме из 8 видеокарт, но… что-то пошло не так. Довольно быстро были проверены все 8-символьные комбинации из больших и маленьких букв, цифр и спецсимволов (NetNTLMv2). Большинство обычных паролей (одно слово, первая заглавная буква, заканчивающийся на цифру или символ) я взламываю мгновенно. Но не здесь.
Я мог бы запустить net accounts на своей рабочей станции, чтобы посмотреть парольную политику непосредственно в AD, но для начала я решил поискать где-нибудь ещё. Не хотелось оставлять лишних следов. Порывшись в сети, мне удалось найти Требования безопасности. Оказалось, что минимальная длина пароля, который должен был включать большие и маленькие буквы, спецсимволы и цифры, составляла 12 знаков. И они уже начали переход на парольные фразы… Я поменял свой набор правил для брутфорса на использование более длинных слов, заглавных первых букв и окончаний из цифр и специсимволов. Это принесло мне несколько паролей!
Круто! Погнали! Я сразу попытался удалённо зайти на компьютер пользователя под его паролем…, и был заблокирован. Какого…? Это всегда срабатывало. Пароль верный. Но доступ закрыт. Я перепроверил себя. Начинай с основ. Делай всё правильно. Некоторое время ушло на поиски контроллера домена. На VoIP-телефонах нашлись конфиги веб-страниц, где был прописан его адрес. С контроллера я через LDAP вытащил свойства групповых политик, чтобы посмотреть привилегии. После долгих раскопок в куче настроек, я понял, что удалённый доступ разрешён лишь небольшой части айтишников, даже не всему IT-отделу. И я не взломал ни одного из их паролей. Они реализовали модель наименьших привилегий… Кто так делает?
Ладно, идите к чёрту. Обойдусь без доступа к компьютерам. Залезу в их переписку! Так я и поступил. Я искал пароли в почте, Skype-чатах, проверил заметки и черновики в Outlook. Мне попалась куча личных паролей от чего угодно… Но ни одного от служебной учётки. Зато я нашёл письмо от отдела информационной безопасности, где говорилось, что они в течение недели планируют внедрить двухфакторную аутентификацию для почты. Похоже, мне ещё повезло.
Самое слабое место любой системы
Затем я отправился на SSO-портал. Все внутренние приложения в одном месте. Мечта хакера! Я кликнул на одно из приложений. Оно требовало двухфакторной аутентификации. Следующее тоже. И следующее. Да что ж за Алькатрас-то такой?! Ночной кошмар хакера!
Я видел, что они используют Citrix. Он за двухфакторной аутентификацией, ну, и пофиг. Я с этим разберусь. Citrix даст мне доступ к внутреннему серверу. Мне нужно было попасть на внутренний хост, чтобы убрать мой хакерский ноутбук и начать уже продвигаться в сеть. Я запустил Citrix, получив в ответ запрос 6-значного пина. Тут есть кнопка с надписью «Нажмите для получения токена» и немного подредактированным номером телефона: (xxx)xxx-5309. Поискав в почте »5309», я нашёл подпись пользователя, в которой этот номер телефона был указан полностью. Я позвонил по нему.
Ответила женщина. «Добрый день, Пэм. Я Джош из айти. Мы переносим Ваш профиль Citrix на новый сервер. Я сейчас отправлю Вам 6-значное число. Мне нужно, чтобы Вы прочитали мне его. На всякий случай напоминаю, мы никогда не спрашиваем Ваш пароль». У меня уже был её пароль. Она колебалась: «Хорошооо…» Я нажал кнопку для отправки токена аутентификации и сказал: «Готово. Я отправил Вам число, прочитайте его мне, пожалуйста, когда получите». Она ответила: «Эммм… Да, получила. 9–0–5–2–1–2». «Благодарю! Пожалуйста, не запускайте Citrix пару часов!» На экране тикал таймер на 60 секунд. Я набрал цифры в окне двухфакторной аутентификации и нажал «Ok». Залогинен. Иди в пень, двухфакторная аутентификация! Оказавшись внутри, я увидел… ничего. НИЧЕГО! Этому пользователю не нужен был Citrix, поэтому к нему не было привязано НИЧЕГО. Я взломал подсобку.
Так. Это безумие. Я возможно подберу длинный пароль, но только если мне повезёт поймать нужный хэш. Даже со взломанным паролем кого-то из небольшой группы людей мне придётся обходить двухфакторную аутентификацию. Каждая попытка, особенно с кем-то из этой защищённой группы, повышает риск обнаружения. Проклятье…
Я перепробовал всё. Я запускал всё более и более агрессивные сканы, стараясь всё же оставаться ниже радаров. Я прощупал всю сеть и все службы, которые сумел найти, со всеми атаками, которые знал. И хотя то тут, то там я находил какие-то мелочи, этого не хватало, чтобы где-нибудь закрепиться. Я начал впадать в отчаяние. Уже конец второго дня. Обычно в это время я уже потрошу базы данных, читаю почту генерального директора и снимаю людей на их веб-камеры. Чёрт возьми. Пора вломиться в логово айтишников. Я собираюсь урасть ноутбуки.
Ночной рейд
Я задержался после работы. Коллегам сказал, что нужно закончить курс по безопасности при трудоустройстве. Они покивали и свалили. Потом пришли уборщики. Когда они закончили, я остался один. Я направился к кабинету айтишников. Нашёл дверь. Оглядевшись по сторонам, я взялся за ручку…
До этого я уже попробовал разные штуки с моим служебным ноутбуком, но я не был локальным админом, а диск был полностью зашифрован. Моей целью было найти старый незашифрованный ноутбук, на котором будет хэш пароля локального админа.
Я проверил холл, чтобы никого не было рядом. Я осмотрел потолок в поисках камер безопасности. Я приоткрыл рот и наклонил голову, чтобы услышать, что кто-то подходит из-за угла. Ничего. Я был готов действовать. Я приготовился ковыряться в механическом замке, разбираться с электронными системами контроля доступа или снимать дверь с петель, но обнаружил, что дверь приоткрыта. Повезло. На двери был и электронный замок, и механический. Даже защищённые петли. Но кто-то оставил её незакрытой в ту ночь. Приоткрыв дверь, я заглянул, ожидая натолкнуться на кого-то внутри. Никого. Да ну нафиг. Просто пруха. Я вошёл внутрь.
Понятия не имею, почему дверь была открыта, но 80% моей работы — это пользовательские ошибки, 56% — навыки, 63% — приспособляемость, 90% — использование особенностей и жирные 80% — удача. И лишь около 1% связаны с математикой…
Как бы то ни было. Я не знал, не вернётся ли кто-нибудь сюда с минуты на минуту, поэтому принялся за работу. В углу лежали стопками ноутбуки разного возраста, производителей и моделей. Взвесив риски попасться в кабинете айтишников или с кучей ноутов на моём столе, я выбрал свой стол. И вот я уже перетаскиваю охапки старых ноутбуков из айтишной норы в свою кабинку, складывая из них Пизанскую башню под своим столом. Затем я начал методично пытаться загрузить каждый ноутбук с флешки в поисках незашифрованного Святого Грааля.
У меня есть загрузочная флешка с Kali и утилитой samdump2. Я подключаю её к одному из ноутбуков, загружаю его и пытаюсь смонтировать жёсткий диск. С каждым разом натыкаясь на шифрование, я всё сильнее расстраиваюсь. Наконец, после 30 проверенных ноутбуков я нахожу три полуживых с незашифрованными дисками. С помощью samdump2 я вытаскиваю локальные NTLM-хэши из SAM и сравниваю их. Таким образом удаётся найти нестандартную учётку локального админа «ladm» на всех трёх машинах. Хэши совпадают. Слава Эриде, они не используют LAPS. Учётка локального админа одинаковая на всех компьютерах. Я взломал этот хэш довольно легко. Пароль оказался <Название компании><Год>, и этот год прошёл пару лет назад. Ошибка в управлении активами. Обожаю.
Я попытался зайти под новой учёткой удалённо и получил ту же ошибку, что и до этого. Даже локальному админу был запрещён удалённый вход… Я попытался зайти локально на собственный служебный ноутбук, и у меня получилось! Эта учётка обходила полное шифрование! Мастер-ключ! Так… тааак! Этим можно воспользоваться! Но потом я заметил одну странность… У меня не было прав доступа к пользовательским данным. Что? Они ограничили доступ ДАЖЕ ДЛЯ ЛОКАЛЬНЫХ АДМИНОВ?! Чёрт. Нужно было повышать привилегии до системных.
Я перепробовал все трюки, которые приходили в голову. В конце концов я поискал уязвимости Unquoted Service Path и нашёл парочку! Но вывод говорил о том, что мой локальный администратор не имеет права записи в нужные папки. Да бросьте! К тому времени я уже был измотан и сломлен. Заканчивалась моя 17-часовая смена. Мозг уже не работал. Это был ещё один тупик. Ещё одна серия тяжёлой борьбы и успешных взломов ради очередного фейла. Нужно было пойти домой и немного поспать, чтобы начать заново на следующий день.
Звонок другу
На следующий день я снова всё перепроверил, чтобы убедиться, что ничего не упустил. Я проверил всё, что мог проверить, просканировал всё, что мог просканировать, сделал всё, что приходило в голову. Всюду небольшие зацепки, но ничего стоящего. Я позвонил коллеге из Dallas Hackers. Рассказав ему о своих мытарствах, я закончил рухнувшими надеждами на уязвимость Unquoted Service Path, когда вывод показал мне отсутствие необходимых привилегий. Он спросил: «А ты все-таки попробовал проэксплуатировать её, несмотря на это?». Я замер. Я не попробовал. В том состоянии я поверил выводу и не проверил сам. Хорошо. Я попробовал записать данные в директорию. Ту же самую, для записи в которую по словам Windows у меня не было доступа. И мне это удалось. Чёртова винда. Снова меня обманула. Но ладно. Это ж офигительно. Новая зацепка.
Коллега быстро накидал мне на C загрузчик, который запускал нагрузку на Powershell. Я рискнул проверить связку на собственном компьютере, и похоже всё работало отлично. Это была извращённая атака. Но это всё, что у меня было. Я собирался:
- Запустить listener на моём хакерском ноутбуке
- Получить физический доступ к ноутбуку в офисе
- Зайти под учёткой локального администратора
- Загрузить свою связку малвари по адресу Unquoted Service Path
- Выйти
- Дождаться входа пользователя и запуска нагрузки
Приближался перерыв на обед. Я ответил улыбкой на приглашения коллег пойти перекусить и немного задержался. Сначала я планировал наведаться к айтишникам и добраться до одного из их компьютеров, пока они обедают. Но когда я подошёл к их кабинету, то увидел, что они все на месте! Едят свой обед перед компьютерами! Они что, не в курсе, как это вредно?! Как отсутствие разделения работы и отдыха и нехватка перерывов ведут к стрессу?! Почему они не обедают, как нормальные люди?!
Да пошли вы. Я собираюсь взломать компьютер. Любой компьютер. Я прошёлся по офису и нашёл кабинет, где никого не было. Финансисты. Хорошо, взломаем финансы. Я ответил что-то милой маленькой старушке, вернувшейся за своим кошельком. Дал ей понять, что я айтишник, обновляющий компьютеры. Она кивнула и, мило улыбнувшись, ушла. Раздражённый, с лицом, наполненным ненавистью и злорадством, я повернулся к одному из компьютеров её коллег и взломал его.
На всё ушло менее 30 секунд. Я вернул кресло и мышку в то состояние, в котором они были до моего прихода. Ещё раз бегло осмотрелся, убедившись, что всё выглядит нормально. И вернулся на своё рабочее место. Сидеть, уставившись на свой listener. В какой-то момент обед закончился. Мне не хотелось даже разговаривать. Уже начав терять надежду, я увидел: > Meterpreter session 1 opened
А затем…> Meterpreter session 2 opened
> Meterpreter session 3 opened
...
> Meterpreter session 7 opened
Твою ж налево! Я запустил GETUID и увидел NT AUTHORITY\SYSTEM. Иии-ха!
Хорошо! Отлично! Так! Эмм… Поехали! Да! Закрепившись в системе, я сделал дамп памяти и начал копаться в файловой системе. Какая-то финансовая информация. Какие-то пароли в открытом виде. Чувствительная информация, но ничего серьёзного. Но да ладно. Это только начало. Плацдарм. А затем…> Meterpreter session 1 closed
Я пытаюсь цепляться к сессиям, но они все закрыты. Я пингую систему, не отвечает. Сканирую 445 порт. Ничего. Система недоступна. Это. Уж. Слишком. Я встаю и направляюсь прямиком в финансовый отдел. Что стряслось с моими шеллами?!
Повернув за угол, я вижу, что милая старушка разговаривает с самым здоровенным и свирепым айтишником. Я быстро делаю «Ох, ё…» и разворачиваюсь, когда старушка смотрит в мою сторону, показывает пальцем прямо на меня и кричит: «Это он! Он возился с нашими компьютерами!» Я издаю истошный крик и кидаюсь наутёк. Развернувшись спиной к свирепому айтишнику, я бегу в противоположном направлении и натыкаюсь на двух безопасников. Они выглядят очень недружелюбно и ясно дают понять, что я забрёл не в тот район. Я очнулся в крови, пристёгнутый к эргономичному офисному креслу стяжками, которыми они стягивают кабели в серверной. Начальник DFIR стоит передо мной, её костяшки сбиты. За её спиной ухмыляется небольшая команда аналитиков из группы обнаружения вторжений. Я выдавливаю из себя одно слово… Мне нужно знать… «Как…?» Она склоняется над моим ухом и шепчет: «Никто в финотделе никогда не запускает Powershell…»
Ладно… Я немного добавил драматизма в конце. Но история с тем, как я наткнулся на старушку, которая сдала меня айтишникам, настоящая. Они задержали меня прямо там. Отобрали мой ноутбук и доложили обо мне руководству. Пришёл директор по информационной безопасности и подтвердил моё присутствие. И способ, которым они меня вычислили, тоже настоящий. Они получили уведомление о том, что Powershell был запущен на системе, которая не относилась к небольшой группе айтишников и разработчиков, запускавших Powershell в обычных условиях. Простой и надёжный метод выявления аномалий.
Выводы
Blue Team
- Модель наименьших привилегий
- Мультифакторная аутентификация
- Простые правила выявления аномалий
- Глубокая защита
Red Team
- Продолжать пытаться
- Не предполагать
- Обращаться за помощью
- Везёт подготовленным
- Адаптация и преодоление