Скрытый взлом паролей с помощью Smbexec

Скрытый взлом паролей с помощью Smbexec

Мы регулярно пишем о том, как хакеры часто опираются на использование методов взлома без вредоносного кода, чтобы избежать обнаружения. Они буквально «выживают на подножном корму», используя стандартные средства Windows, тем самым обходя антивирусы и другие утилиты выявления вредоносной активности. Мы, как защитники, теперь вынуждены иметь дело с печальными последствиями таких хитрых техник взлома: удачно расположенный сотрудник может использовать тот же подход для скрытой кражи данных (интеллектуальная собственность компании, номера кредиток). И если он не будет торопиться, а работать медленно и незаметно, будет чрезвычайно сложно — но все же возможно, если применять правильный подход и соответствующие инструменты, — выявить такую активность.

С другой стороны, мне бы не хотелось демонизировать сотрудников, так как никто не хочет работать в бизнес-среде прямиком из «1984» Оруэлла. К счастью, существуют ряд практичных шагов и лайфхаков, которое могут значительно усложнить жизнь инсайдерам. Мы рассмотрим скрытные методы атаки, используемые хакерами сотрудниками с некоторым техническим бэкграундом. А чуть дальше мы обсудим варианты сокращения таких рисков – изучим как технический, так и организационный вариант действий.

Что плохого в PsExec?

Эдвард Сноуден, справедливо или нет, стал синонимом инсайдерской кражи данных. Кстати говоря, не забудьте взглянуть на эту заметку о других инсайдерах, также заслуживающих некоторого статуса известности. Стоит подчеркнуть один важный момент о методах, которые использовал Сноуден, — насколько нам известно, он не устанавливал никакого внешнего вредоносного софта!

Наоборот, Сноуден применил немного социальной инженерии и воспользовался своим должностным положением системного администратора для сбора паролей и создания учётных данных. Ничего сложного – никаких mimikatz, атак man-in-the-middle или metasploit.

Сотрудники организаций не всегда находятся в уникальной позиции Сноудена, но из концепции «выживания на подножном корму» можно извлечь ряд уроков, о которых следует знать – не производить никаких вредоносных действий, которые можно обнаружить, и особенно аккуратно использовать учётные данные. Запомните эту мысль.

Psexec и его двоюродный брат crackmapexec произвели впечатление на бесчисленное множество пентестеров, хакеров и блогеров по информационной безопасности. А в комбинации с mimikatz, psexec позволяет атакующим перемещаться внутри сети без необходимости знать пароль в открытом виде.

Mimikatz перехватывает NTLM- хэш у процесса LSASS, а затем передаёт токен или учётные данные – т.н. «pass the hash» атака – в psexec, позволяя злоумышленнику войти на другой сервер от лица другого пользователя. И с каждым последующим перемещением на новый сервер, атакующий собирает дополнительные учётные данные, расширяя спектр своих возможностей в поиске доступного контента.

Когда я впервые начал работать с psexec, он показался мне просто магическим – спасибо Марку Руссиновичу, гениальному разработчику psexec, — но я также знаю и о его шумных компонентах. Он ни разу не скрытный!

Первый интересный факт о psexec заключается в том, что он использует чрезвычайно сложный сетевой файловый протокол SMB от Microsoft. С помощью SMB psexec передаёт небольшие бинарные файлы на целевую систему, помещая их в папку C:Windows.

Далее psexec создаёт Windows-службу с помощью скопированного бинарника и запускает её под крайне «неожиданным» именем PSEXECSVC. При этом вы можете реально увидеть всё это, как и я, наблюдая за удалённой машиной (см. ниже).

Скрытый взлом паролей с помощью Smbexec

Визитная карточка Psexec: служба «PSEXECSVC». Она запускает бинарный файл, который был помещён по SMB в папку C:Windows.

В качестве финальной стадии, скопированный бинарный файл открывает RPC-подключение к целевому серверу и затем принимает управляющие команды (по умолчанию – через cmd-шелл Windows), запуская их и перенаправляя ввод и вывод на домашнюю машину атакующего. При этом злоумышленник видит базовую командную строку – такую же, как если бы он был подключён напрямую.

Множество компонентов и очень шумный процесс!

Сложный механизм внутренних процессов psexec объясняет сообщение, которое озадачило меня во время моих первых тестов несколько лет назад: «Starting PSEXECSVC …» и последующую паузу перед появлением командной строки.

Скрытый взлом паролей с помощью Smbexec

Psexec от Impacket в действительности показывает, что происходит «под капотом».

Не удивительно: psexec проделывал огромное количество работы «под капотом». Если вас интересует более подробное объяснение, ознакомьтесь вот с этим замечательным описанием.

Очевидно, что при использовании в качестве инструмента системного администрирования, что и являлось изначальным предназначением psexec, ничего страшного в «жужжании» всех этих механизмов Windows нет. Для атакующего, однако, psexec создаст осложнения, и для осторожного и хитрого инсайдера, такого как Сноуден, psexec или похожая утилита будет слишком большим риском.

И тут приходит Smbexec

SMB – это искусный и скрытный способ передачи файлов между серверами, и хакеры внедрялись напрямую в SMB ещё испокон веков. Полагаю, что все уже знают, что не стоит открывать SMB порты 445 и 139 в интернет, не так ли?

В 2013 году на Defcon Эрик Милман (brav0hax) представил в свет smbexec, чтобы пентестеры могли опробовать скрытный взлом SMB. Я не знаю всей истории, но затем Impacket дополнительно отточил smbexec. На самом деле, для своего тестирования я скачал именно скрипты от Impacket на питоне с Github.

В отличие от psexec, smbexec избегает передачи потенциально детектируемого бинарного файла на целевую машину. Вместо этого утилита полностью живёт с «подножного корма» через запуск локальной командной строки Windows.

Вот что она делает: передаёт команду от атакующей машины через SMB в специальный входящий файл, а затем создаёт и запускает сложную командную строку (как служба Windows), которая покажется знакомой линуксоидам. Вкратце: она запускает нативный Windows-шелл cmd, перенаправляет вывод в другой файл и затем отправляет его по SMB обратно на машину злоумышленника.

Лучшим способом понять это будет изучение командной строки, которую я смог заполучить из журнала событий (см. ниже).

Скрытый взлом паролей с помощью Smbexec

Не это ли величайший способ перенаправления ввода/вывода? Кстати говоря, создание службы имеет идентификатор события 7045.

Как и psexec, она также создаёт службу, которая выполняет всю работу, но служба после этого удаляется – она используется только один раз для запуска команды и потом пропадает! Сотрудник информационной безопасности, наблюдающий за машиной жертвы, не сможет обнаружить очевидных индикаторов атаки: нет никакого вредоносного запускаемого файла, никакой постоянной службы не устанавливается, и нет доказательства использования RPC, так как SMB является единственным средством передачи данных. Гениально!

Со стороны атакующего при этом доступен «псевдо-шелл» с задержками между отправкой команды и получением ответа. Но этого вполне достаточно для работы злоумышленника – либо инсайдера, либо внешнего хакера, у которого уже есть плацдарм, – чтобы начать искать интересный контент.

Скрытый взлом паролей с помощью Smbexec

Для вывода данных обратно с целевой машины на машину злоумышленника, используется smbclient. Да, это та же самая Samba утилита, но только переделанная под Python-скрипт Impacket’ом. Фактически, smbclient позволяет вам скрытно организовать передачу FTP поверх SMB.

Давайте сделаем шаг назад и подумаем над тем, что это может дать для сотрудника. В моём вымышленном сценарии, скажем, блогеру, финансовому аналитику или высокооплачиваемому консультанту по безопасности разрешено использовать личный ноутбук для работы. В результате некоего магического процесса, она обижается на компанию и «пускается во все тяжкие». В зависимости от операционной системы ноутбука, она либо использует Python версию от Impact, либо Windows версию smbexec или smbclient в виде .exe файла.

Как и Сноуден, она узнаёт пароль другого пользователя либо подглядев его через плечо, либо ей везёт, и она натыкается на текстовый файл с паролем. И с помощью этих учётных данных она начинает копаться вокруг системы на новом уровне привилегий.

Взлом DCC: нам не нужен никакой «дурацкий» Mimikatz

В моим предыдущих постах, посвящённых пентесту, я очень часто использовал mimikatz. Это замечательный инструмент для перехвата учётных данных — NTLM-хэшей и даже паролей в открытом виде, затаившихся внутри ноутбуков и так и ждущих, чтобы ими воспользовались.
Времена изменились. Инструменты мониторинга стали лучше в детектировании и блокировке mimikatz. Администраторы информационной безопасности также стали обладать большим числом опций по сокращению рисков, связанных с атаками «pass the hash»-типа (далее – PtH).
Так что же должен сделать умный сотрудник, чтобы собрать дополнительные учётные данные без использования mimikatz?

В набор от Impacket входит утилита под названием secretsdump, которая извлекает учётные данные из кэша Domain Credential Cache, или кратко DCC. Насколько я понимаю, если доменный пользователь входит на сервер, но контроллер домена при этом недоступен, DCC позволяет серверу аутентифицировать пользователя. Так или иначе, secretsdump позволяет вам сдампить все эти хэши, если они доступны.

DCC-хэши – это не NTML-хэши и их нельзя использовать для PtH-атаки.

Ну, вы можете попытаться взломать их, чтобы получить исходный пароль. Однако Microsoft стала умнее при работе с DCC и взломать DCC-хэши стало чрезвыйчайно сложно. Да, есть hashcat, «самый быстрый в мире подборщик паролей», но он требует наличия GPU для эффективной работы.

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

И это тот сценарий, по которому я решил пойти. Давайте предположим, что инсайдер узнал, что его руководитель, Круэлла, несколько раз была взломана на разных веб-ресурсах. После анализа нескольких из этих паролей, он осознаёт, что Круэлла предпочитает использовать формат названия бейсбольной команды «Yankees» и идущим за ним текущим годом – «Yankees2015».

Если вы сейчас пытаетесь воспроизвести это у себя в домашних условиях, то вы можете скачать небольшой, «C» код, реализующий алгоритм хэширования DCC, и скомпилировать его. John the Ripper, кстати говоря, добавил поддержку DCC, поэтому его тоже можно использовать. Давайте предположим, что инсайдер не хочет связываться с изучением John the Ripper и любит запускать «gcc» на устаревшем C-коде.

Изображая роль инсайдера, я запустил несколько разных комбинаций и в конце концов смог обнаружить, что пароль Круэллы – «Yankees2019» (см. ниже). Миссия выполнена!

Скрытый взлом паролей с помощью Smbexec

Немного социальной инженерии, толику гадания и щепотку Maltego – и вы уже на пути взлома хэша DCC.

Предлагаю на этом закончить. Мы ещё вернёмся к этому вопросу в других публикациях и рассмотрим ещё больше медленных и скрытных методов атаки, продолжая опираться на великолепный набор утилит от Impacket.

Источник: habr.com