Возможно ли, чтобы один процесс внедрил код в другой без прав администратора?

CryptProtectMemory API в DPAPI позволяет передавать CRYPTPROTECTMEMORY_SAME_PROCESS флаг, который запрещает другим процессам дешифровать память. Одним из способов обойти это было бы использовать OpenProcess, WriteProcessMemory, а также CreateRemoteThread ввести код в целевой процесс и вызвать его CryptUnprotectMemory таким образом расшифровывая память и передавая ее другому процессу.

Предполагая, что оба процесса выполняются в контексте одного и того же пользователя с ограниченными правами (т.е. не администратора) в Windows Vista или более поздней версии, возможно ли это по-прежнему? У меня сложилось впечатление, что операции записи в память процесса были запрещены для ограниченных пользователей, независимо от ACL процесса, но я могу ошибаться.

2 ответа

Вы не описываете точный сценарий, в котором вам нужно использовать внедрение кода. Если процесс запущен без административных прав, создайте другой процесс в отношении CreateProcess, например, один дескриптор get для нового процесса со всеми правами PROCESS_ALL_ACCESS (hProcess из PROCESS_INFORMATION). Вы можете прочитать здесь, например, следующее

Ручка, возвращаемая CreateProcess функция имеет доступ PROCESS_ALL_ACCESS к объекту процесса.

Так что нужно просто держать обработчик, возвращенный из CreateProcess и не закрывайте его, пока вам не понадобится полный доступ к дочернему процессу. Таким образом, у вас будут права доступа PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE и PROCESS_VM_READ, необходимые для вызова CreateRemoteThread и WriteProcessMemory.

Таким образом, ответ на ваш вопрос будет: "Да, это возможно при некоторых дополнительных условиях".

Windows учитывает ACL процесса, и по умолчанию это разрешает доступ пользователю, для которого выполняется процесс, а также учетной записи локальной системы и SID сеанса входа пользователя. Администраторы могут обойти этот ACL, используя SeDebugPrivilege.

В противном случае вам нужно быть администратором, чтобы отладить свой собственный код.

Вы можете изменить ACL процесса, но, поскольку обычно (IIRC) текущий пользователь является владельцем процесса, я не уверен, сможете ли вы помешать другому процессу в текущем пользовательском контексте изменить его обратно. Кроме того, поскольку вполне вероятно, что процессы выполняются на одном и том же рабочем столе, вы все равно подвергнетесь осколочным атакам.

Другие вопросы по тегам