PsExec и что он может делать

Введение

Большинство инструментов, используемых нами для администрирования
сетей, представляют две стороны одной медали. Эти инструменты
предоставляют значительную степень гибкости и упрощают управление
устройствами, службами и программами. Если эти инструменты находятся в
нужных руках, то нам не о чем беспокоиться, но если инструменты
удалённого управления сетями попадут не в те руки, они становятся мощным
оружием, которое может использоваться для выполнения атак широкого
спектра. В этой статье мы рассмотрим инструмент, попадающий под это
описание. Это инструмент Microsoft Sysinternals PsExec. В этой статье я
предоставлю обзор того, что собой представляет инструмент PsExec и какие
возможности он дает с точки зрения администрирования. После чего я
встану на сторону злоумышленника и продемонстрирую некоторые ужасные
вещи, которые можно выполнить с помощью этого инструмента в сети.

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

Что такое PsExec?

Утилита PsExec была разработана как часть пакета инструментов
PsTools, изначально разработанного Марком Руссиновичем (Mark
Russinovich) из компании Sysinternals, которая теперь принадлежит
компании Microsoft. Инструмент выполнен как инструмент управления на
основе командной строки и позволяет удаленно выполнять процессы в другой
системе. Этот инструмент очень гибкий в том отношении, что он позволяет
использовать различные учетные данные, а не те, которые использует
пользователь, выполняющий программу, а это означает, что вы можете
управлять устройствами, разделенными границами домена и сайта. PsExec не
только выполняет программы на удаленной системе, она может
перенаправлять входные и выходные данные между системами так, что вы
можете использовать интерактивные инструменты удаленно.

В отличие от большинства программных продуктов, связанных с
Microsoft, внутренний принцип работы PsExec не представляет собой
секрета и довольно прост. PsExec позволяет перенаправлять входные и
выходные данные удаленно запущенной исполняемой программы посредством
использования SMB и скрытого ресурса общего доступа $ADMIN на удаленной
системе. С помощью этого ресурса PsExec использует интерфейс
программирования диспетчера управления Windows Service control Manager
API для запуска службы PsExecsvc на удаленной системе, которая создает
именованный канал (named pipe), по которому работает PsExec. Именно этот
именованный канал позволяет перенаправление ввода/вывода обратно в
систему, на которой работает PsExec.

Положительная сторона PsExec

Как и предполагалось при начальном создании программы PsExec, она
может использоваться для выполнения большого количества полезных задач,
которые могут помочь администратору системы. Одной из таких ситуаций, в
которой мне пришлось оказаться, была ситуация, когда я знал DNS имя
компьютера, но не знал точных параметров IP конфигурации (DNS сервер,
основной шлюз и т.д.). При нормальных обстоятельствах я бы использовал
ipconfig на локальной системе для определения этой информации. Однако в
большинстве случаев это означает, что мне пришлось бы ехать в другое
место и одалживать компьютер пользователя, соответственно снижая уровень
его продуктивности на этот день. Поскольку команда ipconfig не имеет
возможности выполнения на удалённых машинах, я могу использовать PsExec
для ее успешного выполнения, как показано на рисунке 1.

Рисунок 1: Использование PsExec для выполнения ipconfig на удаленной системе
Рисунок 1: Использование PsExec для выполнения ipconfig на удаленной системе

После вызова PsExec, удаленный компьютер вводится вслед за двумя
наклонными (\\), после чего вводиться команда ipconfig. Когда вы
выполняете PsExec, она по умолчанию входит в %SYSTEM% каталог удаленной
системы, на которой вы пытаетесь ее выполнить, и по этой причине мне не
пришлось указывать полный путь. Наконец, ключ /all для команды ipconfig
указывается, чтобы отобразить всю доступную информацию ipconfig.

Еще одной распространённой ситуацией применения PsExec является ее
использование для установки обновлений, заплаток и исправлений. Хотя
предпочитаемым способом выполнения этой задачи является использование
групповой политики, могут быть ситуации, когда этот способ слишком
медленный. Я сталкивался со многими ситуациями, где нужно было
устанавливать высокоприоритетное исправление безопасности, которое не
могло ждать стандартного времени обновления групповой политики, поэтому я
использовал PsExec для более быстрой установки файла. Этот пример
показан на рисунке 2.

Рисунок 2: Удаленное выполнение исполняемого исправления
Рисунок 2: Удаленное выполнение исполняемого исправления

На рисунке выше в команде используются дополнительные компоненты.
Во-первых, обратите внимание, что там указаны имена двух других
компьютеров, разделённых запятыми после двойной наклонной (\\). PsExec
позволяет указывать несколько целевых устройств, или файл, содержащий
список имен или адресов устройств. Эта команда также включает /c ключ,
который используется, когда нужно указать файл на локальной системе,
который нужно выполнить на удаленной системе. В этом примере я указал
файл patch.exe. Этот файл расположен в моей локальной системе в корне
диска C, поэтому я указал полный путь к файлу. Ключ /c просматривает
%SYSTEM% каталог локальной системы по умолчанию. Как вы видите, файл
успешно выполнен, и выходная информация перенаправлена обратно в
локальную консоль системы, на которой выполняется PsExec.

И еще одной, последней ситуацией законного использования PsExec
является ситуация удаленного администрирования систем с высоким уровнем
привилегий, при использовании системы от имени учетной записи с более
низким уровнем привилегий. Не могу вспомнить точное количество раз,
когда мне приходилось работать с компьютерами пользователей и получать
звонки, требовавшие от меня выполнения административных задач, таких как
смена пароля. Конечно, в среде Active Directory я мог просто
использовать протокол RDP для входа в контроллер домена и выполнения
этой задачи, но у меня было несколько клиентов, которые не использовали
active directory или RDP по ряду причин. В этой ситуации очень удобно
просто вставить USB накопитель и воспользоваться установленной на него
утилитой PsExec. В случае, показанном на рисунке 3, я использовал PsExec
для сброса пользовательского пароля на системе, путем подъема уровня
привилегий сетевого инструмента, выполняемого под PsExec.

Рисунок 3: Смена пользовательского пароля путем повышения привилегий PsExec
Рисунок 3: Смена пользовательского пароля путем повышения привилегий PsExec

Выполнение незаконных операций с помощью PsExec

Теперь давайте рассмотрим темную сторону инструмента и посмотрим на
те вещи, которые можно выполнить с помощью PsExec в недобрых намерениях.
Прежде всего, давайте рассмотрим ситуацию, в которой злоумышленник
получил учетные данные системы, но не имеет непосредственного доступа к
ней. В этом случае, злоумышленник намеревается получить контроль над GUI
или командной строкой системы, но возможности использования этих
учетных данных могут быть ограничены. Одним из способов, который может
оказаться полезным в такой ситуации, является использование PsExec для
выполнения исполняемых файлов лазеек (backdoor executable) на системе,
как показано на рисунке 4.

Рисунок 4: Вредоносная программа запущена на системе удаленно
Рисунок 4: Вредоносная программа запущена на системе удаленно

В этой ситуации удаленный злоумышленник использует PsExec с ключом /c
для выполнения файла nc.exe на удаленной системе. Наряду с этим
используются 'u и 'p ключи, которые указывают имя и пароль взломанной
системы, чтобы файл мог выполняться с привилегиями корневого уровня. Без
ведома жертвы, файл, исполняемый на его системе, представляет собой
лазейку, которая позволит взломщику подключаться к системе и получать
доступ к административному интерпретатору команд.

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

Рисунок 5: Использование хэш-значения пароля для удаленного выполнения файла
Рисунок 5: Использование хэш-значения пароля для удаленного выполнения файла

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

Еще одним трюком, который возможен благодаря PsExec, является
возможность получения доступа к файлам и процессам, выполняемым
встроенной учетной записью SYSTEM. Учетная запись SYSTEM в машине
Windows является учетной записью с максимальными полномочиями,
обеспечивающими доступ практически ко всему, включая некоторые элементы,
которые недоступны для учетной записи администратора и создаваемых
пользователем учетных записей. На рисунке 6 показан пример доступа к
приложению regedit.

Рисунок 6: Доступ к реестру компьютера жертвы
Рисунок 6: Доступ к реестру компьютера жертвы

Вышеуказанная команда выполняется непосредственно на локальной
системе, но указывает ключ 's, чтобы использовать локальную учетную
запись SYSTEM. Этот ключ используется в сочетании с опцией 'I
(интерактивный), которая выполняет regedit в интерактивном режиме.
Выполнение этой команды запустит regedit с доступом SYSTEM, что
обеспечит дополнительный доступ к некоторым интересующим файлам. Одним
из примеров такого является SAM файл, содержащий хэш-значения паролей
пользователя. Учитывая определенные мотивы, взломщик с таким доступом к
системе и PsExec с легкостью может извлечь все хэши паролей из системы,
используя данную методику, обеспечив себя информацией, которая может
позволить скомпрометировать другие системы или учетные записи.

Несколько предупреждений

Учетные данные в открытом виде – если вас волнует то, кто может
прослушивать активность в вашей сети, то использование инструмента
PsExec является не самым удачным выбором. PsExec передает все учетные
данные пользователя в чистом (незашифрованном) виде, а это означает, что
если вы передаете имя пользователя или пароль для удаленного доступа к
системе, любой пользователь в сети может перехватить эти учетные данные с
помощью инструмента Wireshark или Tcpdump.

Антивирусное определение – ранее это не представляло больших проблем,
но сейчас большинство приложений сканирования на вирусы выполняют
определенный уровень мониторинга системы и памяти, и поэтому они
способны определить использование PsExec в той системе, которую они
проверяют. Если вы выполняете проверку системы на возможность
проникновения и PsExec не работает должным образом, высока вероятность
того, что вас блокирует антивирусная программа, или и того хуже, ваши
пользователи знают о том, что вы влезли к ним в систему.

PsExec и Metasploit – по возможности я никогда не использую PsExec
отдельно. Изменённая версия PsExec теперь включена в Metasploit
Framework. Metasploit представляет собой среду для тестирования систем
на возможность проникновения, которая предоставляет приличный набор
функций. Если вы хотите использовать PsExec для определенного рода
оценки безопасности, то следует воспользоваться дополнительными
функциями, предлагаемыми Metasploit. Я использовал эту версию PsExec в
своей предыдущей статье о технике передачи хэша Passing the Hash.

Заключение

Инструмент PsExec имеет множество областей применения для различных
целей. Надеюсь, данная статья поможет вам узнать о компонентах и
функциях и о том, как они могут использоваться в незаконных целях.
PsExec представляет собой тот тип инструментов, который позволяет
взломщику подходить к делу творчески. Хотя здесь мы рассмотрели лишь
некоторые ситуации применения этого инструмента, осмелюсь предположить,
что существуют десятки или даже сотни направлений, в которых взломщик
может использовать эту утилиту. Я планирую написать статью, содержащую
более сложные и интересные области применения PsExec. А пока, если у вас
есть интересные примеры использования PsExec, присылайте их мне, чтобы я мог включить их в свою следующую статью.

Автор: Крис Сандерс(Chris Sanders)

Крис
Сандерс -старший консультант по сетевым технологиям в KeeFORCE,
расположенном к Кентуки. Крис является автором книги Practical Packet
Analysis. Его персональный сайт находящийся по адресу:
www.chrissanders.org содержит много статей и руководств по сетевому
администрированию, сетевой безопасности, анализу пакетов, и много другой
полезной информации.

Источник: https://www.Redline-Software.com

Возникли вопросы?

Обращайтесь на форум!