PsExec и неприятные вещи, которые он может сделать

Опубликовано: 8 Апреля, 2023

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

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

Что такое PsExec?

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

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

Хорошая игра с PsExec

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

Изображение 23432

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

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

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

Изображение 23433

Рисунок 2: Удаленный запуск исполняемого патча

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

Последнее дружественное использование PsExec, которое я нашел очень удобным, — это его использование для удаленного администрирования систем с более высоким уровнем привилегий при использовании системы под учетной записью с более низкими привилегиями. Я не могу сосчитать, сколько раз я был на месте, работая на компьютере пользователя, и мне звонили, требуя от меня выполнения административной функции, такой как смена пароля. Конечно, в среде Active Directory я мог бы просто подключить RDP к контроллеру домена и выполнить это изменение, но у меня было несколько клиентов, которые по разным причинам не используют активный каталог или RDP. В этом случае довольно легко вставить флэш-накопитель USB и получить доступ к копии PsExec, которую я установил на нем. В случае с рис. 3 я использовал PsExec для сброса пароля пользователя в системе путем повышения привилегий сетевого инструмента, выполняемого PsExec.

Изображение 23434

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

Делать неприятные вещи с PsExec

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

Изображение 23435

Рисунок 4. Удаленный запуск вредоносного исполняемого файла

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

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

Изображение 23436

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

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

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

Изображение 23437

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

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

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

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

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

PsExec и Metasploit. Когда это возможно, я больше никогда не использую PsExec сам по себе. Модифицированная версия PsExec теперь включена в Metasploit Framework. Metasploit — это фреймворк для тестирования на проникновение, который предоставляет довольно много функций. Если вы хотите использовать PsExec для какой-либо оценки безопасности, рассмотрите возможность изучения дополнительных функций, которые предоставляет Metasploit. На самом деле я использовал эту версию PsExec в статье, которую я написал ранее о методах передачи хэша.

Вывод

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