Содержание статьи
- Вопрос 1. Токены JWT
- Вопрос 2. IPv6
- Вопрос 3. Усиленная аутентификация AD
- Вопрос 4. Бинарная эксплуатация
- Вопрос 5. Какие алгоритмы выгоднее взломать?
- Бонус: три истории из практики
- История #1. Про восхождение от подножия протухшего вайфая к жерлу ДБО
- История #2. Про социнженерию, жадность и внезапную помощь
- История #3. Про лень, хитрость и китайский опенсорс
К сожалению, достаточно развернутых и полных ответов не пришло, а некоторые письма содержали всего пару абзацев текста в ответ на все вопросы. Этого, увы, недостаточно, чтобы получить приглашение на работу!
Сразу обозначим, что на некоторые вопросы нет однозначно правильного ответа. Был интересен скорее способ мышления отвечающего. Ниже ребята из Group-IB опишут, как сами отвечали бы на заданные вопросы, и дадут комментарии.
Вопрос 1. Токены JWT
Есть мобильное банковское приложение, которое выдает такой единственный сессионный токен:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMDIyfQ.srkQQcNR4K3xpoK_SW_sspOoaaDAeNUOjhWWmteuKog
Предложи, какие могут возникнуть сценарии атак на это приложение. Как их предотвратить?
Комментарий: Все ответившие правильно сказали, что это JWT на Hash-based-алгоритме проверки целостности (HS256). Действительно, если ты часто изучаешь приложения, эти токены легко узнаваемы. Многие начали перечислять типичные атаки на такие JWT — возможность обмануть приложение, сменив алгоритм подписи, брутфорс секрета подписи.
Если отбросить в сторону предсказуемые и ожидаемые типовые атаки на JWT, тем более в исследуемом приложении они не работали, у нас остается следующее. Мобильное приложение выдает единственный сессионный токен, в котором вся нагрузка — это один числовой параметр user_id
. Кто‑то начал писать, что тут видно ID, его можно подменять, перебирать, брутить. Но в этом токене есть рабочая проверка подписи, и такие атаки, естественно, не пройдут. У читателей, кстати, была возможность пробрутить секрет, но это ни у кого не получилось сделать.
Зато в дизайне токена есть грубейшая ошибка — такой токен невозможно отозвать, если кто‑то получил доступ к нему на устройстве пользователя. В самом деле, если совершить второй‑третий вход в приложение, токен будет выдан точно такой же: user_id
не поменялся, секрет подписи на сервере — все тот же. Невозможно также отличить, какие устройства пользователя сейчас активны, ведь все имеют один и тот же токен. Нельзя отключить какое‑то конкретное устройство от аккаунта. В общем, полный мрак, учитывая, что это было реальное приложение довольно крупного банка.
Насчет предотвращения — надо как минимум добавить уникальный идентификатор устройства, время истечения токена и черный список скомпрометированных токенов на сервере. Короче, взять от стандарта и рекомендаций по JWT лучшее. Здесь мы вплотную подошли к холивару о целесообразности JWT-токенов для сессий, но это совсем другая история...
Вопрос 2. IPv6
Представь, что весь текущий мир одномоментно перешел на IPv6. IPv4 больше не используется. Как это изменит сетевую безопасность, с учетом современных подходов к настройке сетей и техник атак на сети?
Комментарий: Это, разумеется, вопрос, на который невозможно дать единственно правильный ответ. Лично мы считаем важным в первую очередь следующее.
- Отпадает необходимость в Network Address Translation, NAT. В мире IPv4 выходит, что NAT косвенно выполняет функции межсетевого экрана, даже если настроен только NAT и не настроена сама фильтрация. Если скрыть целую подсеть за единственным адресом, можно сделать невозможным прямое обращение к любому IP/порту в этой сети, без явной публикации сервиса «наружу». Следует понимать, что NAT возник в том числе из‑за нехватки адресов IPv4 и проблем возможного пересечения адресного пространства разных сетей. IPv6 гарантирует, что адресов хватит всем и NAT не нужен — это пустая трата ресурсов. В итоге те, кто привык настраивать NAT, но не настраивать файрвол, внезапно обнаружат, что их сеть целиком доступна из интернета. Автор вопроса сам видел подобные конфигурации на пентестах и пару раз разбирал механизмы работы домашних роутеров — там эта проблема тоже присутствует.
- С другой стороны, гигантское адресное пространство IPv6 больше не позволит вот так просто взять и просканировать все адреса за пару часов, как сейчас принято делать. «Случайная безопасность» от этого выиграет.
- Обязательно найдется множество админов или программистов, которые напишут парсер с ошибкой или неточную регулярку на адрес IPv6. Такой адрес имеет новые нотации, и в первую очередь интересна возможность сократить октеты. Сам факт того, что адрес в hex по умолчанию, добавит возможность пентестерам играть
шрифтамирегистром. IPv6 перестанет влезать в привычное всем 32-битное целое и даже в 64 бита не влезет. Где‑то начнутся «велосипеды» с его размещением в памяти, с вытекающими ошибками арифметики. В совокупности появятся новые вектора атак с байпасом средств защиты. - ICMPv6 — это значительно большая сущность, чем ICMPv4. В шестой версии функции ARP перенесены на ICMPv6-NDP. Все для того, чтобы сеть работала сама. Но теперь администраторам придется вникать в каждый код ICMP, чтобы понять, опасен он или нет, или просто разрешить все — с предсказуемыми последствиями.
- Некоторые хорошо известные атаки поменяли уровень или протокол, но при этом не меняли свою суть, а значит, стали незнакомыми для администраторов, ранее защищенных сетевых конфигураций и некоторых средств защиты. Появился NDP, который по сути являет собой этакий мини-DHCP и ARP в одном флаконе, он позволит атакующему делать MITM и на роутер, и на соседей, и на DNS-протокол. За это раньше отвечали атаки ARP spoofing и DHCP spoofing. Интересно, что DHCPv6 при этом тоже есть.
- Существование работающих автоматических link-local-адресов параллельно с глобальными адресами будет приносить много радости сетевикам и администраторам. Вот только что ими был написан ACL на глобальный адрес, но уже нужно что‑то делать с адресами link-local. И хотя такие адреса работают до ближайшего роутера, все равно требуют отдельного ACL или явного запрета.
- Протокол поддерживает IPSec по умолчанию. Если его поддержка в ОС будет полноценной, программисту не составит труда включить этакий TLS с двусторонней проверкой подлинности и шифрованием на любую L4-сетевую службу, и даже на UDP!
Здесь мы перечислили только основные изменения, но их значительно больше. Есть и новые DoS-векторы, и другая боль администраторов.
Вопрос 3. Усиленная аутентификация AD
Ты находишься внутри корпоративной сети и проводишь тестирование на проникновение. У тебя имеется хеш NT доменного пользователя. В Active Directory настроены смарт‑карты (USB-токены) для основной аутентификации на рабочее место (через непосредственное взаимодействие с компьютером) и в RDP. Есть также механизмы входа по паролю, но они защищены одноразовыми кодами. Можно ли обойти эту усиленную аутентификацию?
Комментарий: Важно понимать, что общие механизмы аутентификации в домене Active Directory (AD), какими бы мегаусиленными они ни были, рано или поздно придут к двум сетевым протоколам — NetNTLMv2 и Kerberos, через которые один хост будет аутентифицироваться на другом. Оба протокола в базовом варианте используют тот самый NT-хеш как исходный материал для аутентификации на хостах. Таким образом, можно прозрачно аутентифицироваться на других хостах при помощи атак pass-the-hash и overpass-the-hash через NetNTLMv2 и Kerberos соответственно. Но только при условии, что администраторы не сумели запретить NetNTLMv2 и Kerberos все еще работает на старых алгоритмах (то есть RC4, где в качестве ключа выступает все тот же NT хеш).
Возникает логичный вопрос: а что же тогда вообще делают эти усиленные средства защиты, если аутентификация остается той же?
В Windows существует локальная система — служба аутентификации, LSA. Та самая, которая представлена процессом lsass.
, куда нацелены и mimikatz, и средства защиты. При этом к LSA можно добавлять расширения, которые дают разные спецэффекты при входе в систему — в виде одноразовых кодов, токенов, пуш‑уведомлений на телефон и прочего. Для безопасности это важно с той точки зрения, что пользователь не сможет поставить пароль Qwerty123
(паролей‑то больше нет!), а администраторы и сами пользователи получают уведомления о том, что аккаунт сейчас прошел начальную аутентификацию на рабочей станции. Что‑то из этих усиленных средств поддерживается в AD «из коробки», например некоторые смарт‑карты. Однако цель у них одна — сделать обертку над все теми же NTLM/Kerberos. Например, для некоторых средств защиты может быть задействован провайдер на контроллере домена, принимающий «усиленное» сообщение аутентификации от пользователя и отсылающий пользователю из базы AD все тот же NТ хеш. В «исходном» же варианте, без этих усиленных средств защиты, этот хеш NT генерируется непосредственно на компьютере пользователя из пароля при его вводе.
Еще можно отметить, что в «усиленном» варианте средства защиты делают NT-хеш таким образом, чтобы было максимально затруднительно подобрать к нему коллизию, то есть найти соответствующий ему пароль. Поэтому брутить имеющийся NT-хеш в «усиленной» среде, вероятнее всего, бесполезно.
Вопрос 4. Бинарная эксплуатация
Exploit-db.com когда‑то был заполнен эксплоитами, нацеленными на повреждение памяти в бинарных приложениях 2000-х годов. Но все поменялось, и там сейчас преобладают эксплоиты, нацеленные на веб, логические баги, мисконфиги. Стоимость бинарных эксплоитов в частной продаже сейчас возросла до сотен тысяч долларов. Как ты думаешь, почему?
Комментарий: Здесь все более‑менее просто. Возьмем для примера архитектуру x86. В какой‑то момент атаки на «бинарь» надоели «защищающейся» стороне, и производителями операционных систем совместно с производителями процессоров были реализованы меры против этих атак — DEP, ASLR, Canaries, Control Flow Guard, SMEP, SMAP. Процесс был долгим и последовательным, и сейчас для успешной атаки, в зависимости от ее типа и атакуемого приложения, нужно обойти какие‑то из этих механизмов. Где‑то в это же время параллельно произошел переход с x32 на x64, что важно с точки зрения, например, того же ASLR, где одни из техник обхода — это «угадывание» адресов или заполнение мусором адресного пространства процесса. Очевидно, что на x32 это делать проще.
И самое главное. Приложения, где требуется прямая, «ручная» работа с памятью (например, написанные на С), постепенно начали вытесняться приложениями, где есть менеджеры памяти (C#, Java, Python, PHP и так далее). Ошибки повреждения памяти в них сошли на нет, зато на первое место вышли ошибки другого рода — логические. А бинарь осталась только там, где требуется исключительно производительность и низкоуровневость, — это что‑то совсем близкое к ОС, ее нативному API или железу. Круг приложений сузился, сложность атак выросла, и поэтому бинарные эксплоиты стали очень сложными и дорогими.
Вопрос 5. Какие алгоритмы выгоднее взломать?
Представь, что у тебя появилась суперспособность — ты теперь можешь моментально взломать что‑то одно на твой выбор:
- либо все симметричные (блочные, потоковые) алгоритмы шифрования (то есть расшифровать любой текст, зашифрованный симметричными алгоритмами);
- либо все асимметричные алгоритмы (то есть восстановить любой приватный ключ по публичному ключу);
- либо все хеш‑функции (то есть подобрать коллизию для любого хеша).
Что бы ты выбрал и почему?
Комментарий: Естественно, на этот вопрос также нет единого и тем более правильного варианта. Мы хотели увидеть, насколько ответы уведут в глубину протоколов. Многие отвечали исходя из своих предпочтений: хотим вскрывать зашифрованное — выбираем взломанные алгоритмы симметричного шифрования. Хотим подделать подпись — выбираем взломанное асимметричное. Хотим взломать базу паролей — выбираем хеширование.
Однако тут есть некоторые неочевидные темы для размышления. И связаны они как раз с конкретными протоколами или реализациями алгоритмов. Покажем на примере.
Очень часто нам писали: хочу читать зашифрованный трафик, поэтому выбираю симметричные алгоритмы. Совсем рядом второй вид ответа — хочу читать трафик (ну кто бы сомневался, в трафике куча интересностей), но уже хочу асимметричные алгоритмы. Если с первым способом все понятно, второй способ чуть более хитрый. Он основан на том, что очень часто ключ шифрования трафика выбирается на основе протоколов обмена ключами, например того же TLS, где используются сертификаты и асимметричные алгоритмы. Получив приватный ключ на основе сертификата, можно было бы восстановить и сессионный симметричный ключ, а затем и расшифровать трафик.
Однако предлагаем пойти дальше и представить, например, что ты можешь не только читать зашифрованный трафик, но и менять его. Обычно эти возможности получаются одновременно в ходе атак. Предположим, что твоей «суперспособностью» был бы поиск любых коллизий к хеш‑функциям. Это означает, что в процессе подмены трафика ты бы смог заменить и содержимое сертификата, и сами служебные сообщения TLS. Это возможно, потому что электронная подпись вычисляется не от самого сообщения, а от его хеша и все те же хеши используются для проверки целостности сообщений через HMAC-алгоритмы, которыми защищаются сообщения TLS. То есть ты бы опять пришел к той же компрометации протокола обмена ключами.
Итого, имея любую из этих «суперспособностей» плюс возможность читать и модифицировать трафик, ты бы смог его расшифровать. Конечно, с хешами это было бы не так удобно (требуется подмена конкретного участка трафика в конкретный момент), чем с симметричным (можно брать любой фрагмент трафика в любой момент) и асимметричным (требуется прочесть начало обмена сообщениями, но можно анализировать трафик в любой момент). Но все же возможно.
Что делать, чтобы стать пентестером в Group-IB?
С момента публикации прошлой статьи к блоку технической оценки защищенности Group-IB присоединились пять человек. Жаль, что среди них нет тех, кто отвечал на вопросы из прошлого материала! Однако в компании не теряют надежд заполучить к себе читателей «Хакера». Пиши на адрес, указанный в предыдущей статье, рассказывай о себе, прикладывай резюме, райтапы по лабораторкам, решения нестандартных проблем на проектах и собственной (легальной!) практике. Для самых въедливых есть и еще одно предложение. Попробуй придумать интересные вопросы для первичной оценки специалистов, вроде тех, ответы на которые мы привели выше. Опиши свои максимально полные ответы на них же.
Бонус: три истории из практики
Чтобы ты лучше представил, чем занимаются пентестеры в Group-IB, мы подготовили для тебя три занимательные истории из практики их работы.
История #1. Про восхождение от подножия протухшего вайфая к жерлу ДБО
В рамках редтим‑проекта для банка стояла сверхзадача получить доступ к сегменту ДБО. Итерация редтиминга была уже далеко не первой, и более классические форматы вроде пентеста и аудитов приложений заказчик проводил регулярно. Соответственно, периметр не изобиловал дырками. Мы решили проверить разные гипотезы, в том числе связанные с неверно настроенным вайфаем в отделениях.
Мы провели разведку в нескольких филиалах «третьего эшелона», выбрали наиболее подходящий с самым интересным радиоэфиром и наименее серьезными сотрудниками. Один из них и купился на легенду нашего специалиста о том, что ему срочно нужно зайти в онлайн‑банкинг при нулевом балансе мобильного счета. Логично: чтобы оплатить интернет, нужен доступ в интернет. Сотрудник выдал пароль от Wi-Fi, специалист потыкал в телефон, поблагодарил и ушел. Ушел, конечно же, в локалку!
Для горизонтального продвижения мы использовали информацию, полученную в процессе внешней разведки: в личном блоге одного из администраторов БД не слишком надежно хранился пароль непривилегированного пользователя от серверов Linux. С этой учеткой мы получили SSH и на одном из серверов нашли билет Kerberos — уже с привилегиями админа.
Повысились на хосте и получили пользователей администраторов Linux. К нашему удивлению, привилегий текущего пользователя уже хватило для достижения цели. Профит: доступ к серверу с ДБО и проектная ачивка!
История #2. Про социнженерию, жадность и внезапную помощь
Когда заказчик просит провести «социалку» в формате awareness (проверяется реакция на письмо пользователей, а не средств защиты), мы заранее знаем, что средний КПД таких воздействий (количество попавшихся к количеству получивших письма пользователей) составит 20–25%. Также знаем, что как минимум такая же часть получивших не перейдет по ссылкам или не запустит исполняемый файл не по причине настороженности, а из лени.
Если отправить еще одно письмо, КПД существенно вырастет, если прозвонить с напоминанием о необходимости реакции — вырастет в разы. Но примерно раз в год мы видим историю, когда эффективность рассылки шкалит и уверенно пробивает 100%. Как это происходит? Очень просто. То получатель решит поделиться с друзьями из других отделов компании, то большой начальник перешлет на подконтрольное ему подразделение. Только успевай подставлять лог‑файлы под льющиеся пруфы и креды.
В последний раз такое было совсем недавно. Сотрудникам заказчика отправлялся документ с предложениями о скидках на покупку гаджетов в крупной торговой сети. Закрытая партнерская распродажа, низкие цены, ограниченное количество — такое работает всегда. Халява манит так сильно, что глаз не цепляется за кучу специально оставленных артефактов, кричащих: «Мошенничество! АЛЯРМ‑АЛЯРМ!»
Пользователю, открывшему документ, предлагалось выбрать позиции, на которые он хотел бы узнать актуальные цены, нажать на кнопку (в документе!), чтобы якобы получить актуальные данные с сервера торговой сети. При нажатии на кнопку выполнялась нагрузка, а пользователю выводилось сообщение о временной недоступности сервера в связи с большим количеством обращений.
В первый час было тихо: ни одного срабатывания. Затем нам пришло письмо с адреса, которого в рассылке изначально не было. Сотрудник представился специалистом PR-департамента заказчика, сказал, что письмо ему отправил один из сотрудников, посетовал на то, что партнерские рассылки не согласованы с PR, сказал, что текст письма содержит ошибки и плохо оформлен, а список получателей вообще странный и крошечный. Также нам сообщили, что поправленный пиарщиками текст с нашим вложением красиво оформлен и разослан на всю компанию. Большое спасибо!
Логи начало заливать минут через пять, нагрузка отработала на двух третях сотрудников компании, awareness, конечно же, был сорван, и его пришлось переделывать по другому сценарию, когда страсти улеглись. Тем не менее служба ИБ заказчика нашла ситуацию поучительной.
История #3. Про лень, хитрость и китайский опенсорс
На проекте проводили исследование ERP-системы. Активное участие в проекте принимал представитель разработчика, создавшего для большой компании ERP с нуля. Полностью кастомная разработка.
Представитель разработчика выражал большие сомнения в том, что на проекте будет найдена хотя бы одна серьезная уязвимость, сильно сомневался в возможности эксплуатации обнаруженных дыр и обсуждал расчеты CVSS. В общем‑то, типичное поведение разработчика от отрицания к принятию! Прохладная часть истории заключается в том, что уже в самом начале проекта, изучая ответы приложения, мы по специфическому тексту ошибки вышли на интересный GitHub-репозиторий. Обнаруженный проект был несколько меньше исследуемого, но слишком часто выдавал полные совпадения.
Проведя небольшое расследование, мы обнаружили, что найденный репозиторий содержал концепт ERP-системы, разработанный китайскими студентами как дипломный проект. Далее открытый репозиторий нашли известные нам разработчики и превратили дипломный эксперимент в коммерческий продукт, доработав который успешно продали нашему заказчику как свою разработку. Браво!
Часть исходного кода продуктовой системы все это время находилась в открытых источниках. В них же мы обнаружили в коде контроллер с говорящим названием — SpyController
, метод которого позволял удаленно исполнять произвольный код.
Разработчики почему‑то решили сохранить эту «фичу» в финальной версии своего продукта. Быть может, для быстрого решения проблем в работе системы, быть может — для более интересных целей... Мы тотчас уведомили заказчика, а что было дальше с разработчиками, мы не знаем, но вопросы по проекту резко закончились.