Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 02.09.23 09:32
Оценка:
Написал здесь вопрос https://rsdn.org/forum/security/8593169.flat
Автор: Sаныч
Дата: 02.09.23
(запретить программе запускать другие программы). Но продублирую в контексте .NET.

Можно ли это сделать родными средствами? Суть программы — хост, который запускае динамический код, полученные после компиляции? Анализ кода не предлагать, это утопия не реальная защита.
windows process
Re: Запрет программе запуск других программ
От: Pavel Dvorkin Россия  
Дата: 02.09.23 10:54
Оценка:
Здравствуйте, Sаныч, Вы писали:

S>Написал здесь вопрос https://rsdn.org/forum/security/8593169.flat
Автор: Sаныч
Дата: 02.09.23
(запретить программе запускать другие программы). Но продублирую в контексте .NET.


S>Можно ли это сделать родными средствами? Суть программы — хост, который запускае динамический код, полученные после компиляции? Анализ кода не предлагать, это утопия не реальная защита.


Можно сформулировать точнее ? Запрещать — но, видимо, когда-то и разрешать ? По каким критериям ?

Если же просто запретить — так не вводите в нее код, который запускает. Например, программа "Hello, World" никак не может запустить другую программу
With best regards
Pavel Dvorkin
Re: Запрет программе запуск других программ
От: m2user  
Дата: 02.09.23 11:05
Оценка:
У Вас кросспост существенно по тексту отличается, что сбивает с толку.

По теме: не понимаю, чем собственно поможет ограничение только на запуск дочерних процессов. Я бы производил запуск динамического кода в процессе, запущенном от пользователя с низкими правами.
Re[2]: Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 02.09.23 11:43
Оценка:
Здравствуйте, m2user, Вы писали:

M>У Вас кросспост существенно по тексту отличается, что сбивает с толку.


M>По теме: не понимаю, чем собственно поможет ограничение только на запуск дочерних процессов. Я бы производил запуск динамического кода в процессе, запущенном от пользователя с низкими правами.


Хорошо, как этому пользователю с ограниченными правами запретить запуск других программ? Какие настройки, код?
Re[2]: Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 02.09.23 11:45
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Если же просто запретить — так не вводите в нее код, который запускает. Например, программа "Hello, World" никак не может запустить другую программу


Это юзер код. Хост лишь исполняет код, что пришлет юзер. Код должен быть выполнен в изолированной песочнице. Со всякими сетевыми подключения и доступу к файлам — понятно — это через учетку в Windows+Firewall. А как запретить использовать Process.Start?
Re[3]: Запрет программе запуск других программ
От: Pavel Dvorkin Россия  
Дата: 02.09.23 12:15
Оценка:
Здравствуйте, Sаныч, Вы писали:

S>Это юзер код. Хост лишь исполняет код, что пришлет юзер. Код должен быть выполнен в изолированной песочнице. Со всякими сетевыми подключения и доступу к файлам — понятно — это через учетку в Windows+Firewall. А как запретить использовать Process.Start?


Хм. Не знаю, что за песочницу ты используешь, но если вот эту

https://learn.microsoft.com/ru-ru/windows/security/application-security/application-isolation/windows-sandbox/windows-sandbox-overview

то в нее надо копировать исполняемый файл

А на хосте ему дать такие разрешения на доступ, чтобы никто и не мог его запустить.
With best regards
Pavel Dvorkin
Re[3]: Запрет программе запуск других программ
От: m2user  
Дата: 02.09.23 12:39
Оценка: +1
S>Хорошо, как этому пользователю с ограниченными правами запретить запуск других программ? Какие настройки, код?

Можно назначить процессу job object и ограничить число процессов в job`е.
Но это повлияет только на дочерние процессы. Т.е. не ограничит запуск например через через scheduled task или WMI (Win32_Process.Create).
Re[4]: Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 03.09.23 03:32
Оценка:
Здравствуйте, m2user, Вы писали:

S>>Хорошо, как этому пользователю с ограниченными правами запретить запуск других программ? Какие настройки, код?


M>Можно назначить процессу job object и ограничить число процессов в job`е.

M>Но это повлияет только на дочерние процессы. Т.е. не ограничит запуск например через через scheduled task или WMI (Win32_Process.Create).

Получается средствами Windows или .NET никак не ограничить запускать сторонние процессы из динамического кода? Ведь DLL Import будет работать так и так и в .NET CORE уже нет средств на подобие CAS?
Re: Запрет программе запуск других программ
От: · Великобритания  
Дата: 03.09.23 15:36
Оценка:
Здравствуйте, Sаныч, Вы писали:

S>Суть программы — хост, который запускае динамический код, полученные после компиляции?

Докер же. Пусть творит что сможет, но в контейнере.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Запрет программе запуск других программ
От: okman Беларусь https://searchinform.ru/
Дата: 03.09.23 17:05
Оценка:
Здравствуйте, Sаныч, Вы писали:

S>Получается средствами Windows или .NET никак не ограничить запускать сторонние процессы из динамического кода? Ведь DLL Import будет работать так и так и в .NET CORE уже нет средств на подобие CAS?


В Windows есть вот такая функция:

SetProcessMitigationPolicy
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-setprocessmitigationpolicy

См. код ProcessChildProcessPolicy, он позволяет ограничить запуск дочерних процессов:

PROCESS_MITIGATION_CHILD_PROCESS_POLICY
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_process_mitigation_child_process_policy

Есть, правда, нюанс:

Minimum supported client Windows 10, version 1709
Minimum supported server Windows Server 2016

Re[6]: Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 03.09.23 17:38
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Sаныч, Вы писали:


S>>Получается средствами Windows или .NET никак не ограничить запускать сторонние процессы из динамического кода? Ведь DLL Import будет работать так и так и в .NET CORE уже нет средств на подобие CAS?


O>В Windows есть вот такая функция:


O>SetProcessMitigationPolicy

O>https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-setprocessmitigationpolicy

O>См. код ProcessChildProcessPolicy, он позволяет ограничить запуск дочерних процессов:


O>PROCESS_MITIGATION_CHILD_PROCESS_POLICY

O>https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_process_mitigation_child_process_policy

O>Есть, правда, нюанс:

O>

O>Minimum supported client Windows 10, version 1709
O>Minimum supported server Windows Server 2016


Интересно то, что сам процесс это может вернуть взад. Уже проверил, код под ограниченной учеткой и с JOB умеет общаться и менять различные атрибуты. Не совсем понятно, можно ли такие вещи дать только администратору, и в хост программе делать имперсонацию для изменения параметров, прежде чем начать работать с динамическим кодом.
Re[6]: Запрет программе запуск других программ
От: m2user  
Дата: 03.09.23 17:49
Оценка:
А это не то же самое, что UpdateProcThreadAttribute с параметром PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY ?
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute

там в ремарках пишут, что работает только в andboxed applications.

The process being created is not allowed to create child processes. This restriction becomes a property of the token as which the process runs.
It should be noted that this restriction is only effective in sandboxed applications (such as AppContainer) which ensure privileged process handles are not accessible to the process.
For example, if a process restricting child process creation is able to access another process handle with PROCESS_CREATE_PROCESS or PROCESS_VM_WRITE access rights, then it may be possible to bypass the child process restriction.

Re[7]: Запрет программе запуск других программ
От: Sаныч Таиланд  
Дата: 03.09.23 17:56
Оценка: 1 (1)
Здравствуйте, m2user, Вы писали:

M>А это не то же самое, что UpdateProcThreadAttribute с параметром PROC_THREAD_ATTRIBUTE_CHILD_PROCESS_POLICY ?

M>https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute

M>там в ремарках пишут, что работает только в andboxed applications.

M>

M>The process being created is not allowed to create child processes. This restriction becomes a property of the token as which the process runs.
M>It should be noted that this restriction is only effective in sandboxed applications (such as AppContainer) which ensure privileged process handles are not accessible to the process.
M>For example, if a process restricting child process creation is able to access another process handle with PROCESS_CREATE_PROCESS or PROCESS_VM_WRITE access rights, then it may be possible to bypass the child process restriction.


Я решил задачу пока что так, что для всего компа для учетки ввел запрет на запуск приложений. cmd запускает, но другие процессы нет.
Re[7]: Запрет программе запуск других программ
От: m2user  
Дата: 03.09.23 17:59
Оценка:
S>Интересно то, что сам процесс это может вернуть взад. Уже проверил, код под ограниченной учеткой и с JOB умеет общаться и менять различные атрибуты. Не совсем понятно, можно ли такие вещи дать только администратору, и в хост программе делать имперсонацию для изменения параметров, прежде чем начать работать с динамическим кодом.

Назначить security на job`у.
https://learn.microsoft.com/en-us/windows/win32/procthread/job-object-security-and-access-rights
Т.е. вероятно так: создаешь дочерний процесс под слабой учеткой и назначаешь ему job`у, на которую у слабой учетки нет прав.
И динамический код в дочернем процессе запускаешь.
Re[2]: Запрет программе запуск других программ
От: m2user  
Дата: 03.09.23 18:18
Оценка:
·>Докер же. Пусть творит что сможет, но в контейнере.

Насколько мне известно под MS Windows оно работает через hardware virtualization.
И до определенной версии Windows не совместимо с другими гипервизорами.

https://docs.docker.com/desktop/faqs/windowsfaqs/#can-i-use-virtualbox-alongside-docker-desktop

Yes, you can run VirtualBox along with Docker Desktop if you have enabled the Windows Hypervisor Platform feature on your machine.


https://learn.microsoft.com/en-us/virtualization/api/#windows-hypervisor-platform

Windows Hypervisor Platform

This API is available starting in the Windows April 2018 Update.

The Windows Hypervisor Platform adds an extended user-mode API for third-party virtualization stacks and applications to create and manage partitions at the hypervisor level, configure memory mappings for the partition, and create and control execution of virtual processors.

Ex: A client such as QEMU can run on the hypervisor while maintaining its management, configuration, guest/host protocols and guest supported drivers. All while running alongside a Hyper-V managed partition with no overlap.

For more information see: Windows Hypervisor Platform API

Re[3]: Запрет программе запуск других программ
От: rudzuk  
Дата: 03.09.23 20:22
Оценка: 4 (1)
Здравствуйте, m2user, Вы писали:

m> ·>Докер же. Пусть творит что сможет, но в контейнере.


m> Насколько мне известно под MS Windows оно работает через hardware virtualization.


Когда-то так и было. Но это в прошлом:
https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/#containers-vs-virtual-machines
avalon/3.0.2
Re[4]: Запрет программе запуск других программ
От: m2user  
Дата: 03.09.23 22:28
Оценка:
m>> Насколько мне известно под MS Windows оно работает через hardware virtualization.

R>Когда-то так и было. Но это в прошлом:

R>https://learn.microsoft.com/en-us/virtualization/windowscontainers/about/#containers-vs-virtual-machines

Действительно.
Выходит, что process-isolated режим на w2k16 изначально был, а в win10 pro/ent. его добавили в октябре 2018 г.
При этом для WCOW (Windows containers on Windows) лицензия разрешает использовать контейнеры только в целях тестирования и разработки, если host OS несерверная.
Для production нужен Windows Server.

А LCOW (Linux containers on Windows) можно запускать в process-isolated режиме?
Re[5]: Запрет программе запуск других программ
От: rudzuk  
Дата: 04.09.23 09:21
Оценка:
Здравствуйте, m2user, Вы писали:

m> А LCOW (Linux containers on Windows) можно запускать в process-isolated режиме?


Насколько я понимаю можно при установке WSL2:

However, since WSL 2 now runs on a Linux kernel with full system call capacity, Docker can fully run in WSL 2. This means that Linux containers can run natively without emulation, resulting in better performance and interoperability between your Windows and Linux tools.

avalon/3.0.2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.