Sandboxing
От: Barbar1an Украина  
Дата: 19.04.18 08:42
Оценка:
а как вообще в общих чертах это делается под виндами начиная с висты?
а точнее могу ли я запустить произвольный процесс которому я хочу запретить использовать какието winapi или виртуализировать их вызовы перенаправив куда мне нужно?
я не очень в теме, но вроде в хп это просто было, а в висте и дальше? там же теперь нельяз ковыряться из драйвера в таблице системных вызовов или можно?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Отредактировано 19.04.2018 8:44 Barbar1an . Предыдущая версия .
Re: Sandboxing
От: EreTIk EreTIk's Box
Дата: 20.04.18 09:57
Оценка: 42 (5)
B>а как вообще в общих чертах это делается под виндами начиная с висты?
B>а точнее могу ли я запустить произвольный процесс которому я хочу запретить использовать какието winapi или виртуализировать их вызовы перенаправив куда мне нужно?
B>я не очень в теме, но вроде в хп это просто было, а в висте и дальше? там же теперь нельяз ковыряться из драйвера в таблице системных вызовов или можно?

Вопрос большой, проще было бы ответить, зная конкретную задачу.

Платформы для перехвата произвольного API нет. На 64-х битных системах ядро следит за своей целостностью (Kernel Patch Protection (KPP) aka PatchGuard), поэтому перехватить без проблем произвольное нативное API тоже не получится. Предоставляемые MS'ом технологии можно, например, посмотреть тут
Автор: okman
Дата: 04.01.18
.

Показательные примеры Sandboxing'а (IMHO) в существующих решениях:
Re[2]: Sandboxing
От: Barbar1an Украина  
Дата: 20.04.18 12:12
Оценка:
Здравствуйте, EreTIk, Вы писали:

по сути у меня задача близкая к хромиуму и прочим,
т.е. нужно запустить exe которому нет доверия так, чтобы он мог нанести никакого вреда случайно или специально,
кстати для этих целей имеет смысл запускать под учеткой с какимто особыми ограничениями прав? ну например чтобы он мог писать тока туда куда разрешат и не мог даже туда где стоит Everyone
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[3]: Sandboxing
От: EreTIk EreTIk's Box
Дата: 20.04.18 12:37
Оценка: 14 (1)
B>т.е. нужно запустить exe которому нет доверия так, чтобы он мог нанести никакого вреда случайно или специально,
B>кстати для этих целей имеет смысл запускать под учеткой с какимто особыми ограничениями прав? ну например чтобы он мог писать тока туда куда разрешат и не мог даже туда где стоит Everyone

Да, для этих целей есть AppContainer:

The AppContainer environment is a restrictive process execution environment that can be used for legacy applications to provide resource security. An application running in an AppContainer can only access resources specifically granted to it.

Этот механизм используется в Edge и в UWP-приложениях из Windows Store, как часть встроенной песочницы. Механизм появился с 8-ки (для более старых систем есть, например, Restricted Tokens).

Сам я этот механизм не пробовал, но есть мысль, что запустить именно произвольный exe не получится: на какую-то опасную операцию он получит ERROR_ACCESS_DENIED и выйдет. Придется часть функций (набор функций заранее сказать сложно, но, например, Win32-hook'и вне своего процесса, RPC к системным процессам, типа SCM) банально перехватывать и эмулировать пустые ответы (или что-то вроде того).
Re[3]: Sandboxing
От: okman Беларусь https://searchinform.ru/
Дата: 20.04.18 14:13
Оценка: 6 (1)
Здравствуйте, Barbar1an, Вы писали:

B>Здравствуйте, EreTIk, Вы писали:


B>по сути у меня задача близкая к хромиуму и прочим,

B>т.е. нужно запустить exe которому нет доверия так, чтобы он мог нанести никакого вреда случайно или специально,
B>кстати для этих целей имеет смысл запускать под учеткой с какимто особыми ограничениями прав? ну например чтобы он мог писать тока туда куда разрешат и не мог даже туда где стоит Everyone

Очень хорошо EreTIk уже все расписал. Я лишь добавлю:

1. Даже на Windows XP можно использовать потоки, запущенные под Restricted-токенами и/или внутри Job-объектов с
соответствующими ограничениями. Restricted-субъект не имеет доступа ни к каким объектам, за исключением тех, к
которым ему доступ был выдан в явном виде (т.е. даже "Everyone" не поможет, нужно именно разрешающиее правило
для соответствующего SID-а). Дополнительно можно повырезать все "опасные" привилегии из токена.

2. В Windows Vista и выше для ограничений можно использовать Integrity Levels.
Например, Internet Explorer запускается на Low Integrity Level, песочницы Chrome/Acrobat и других
приложений — на Untrusted Integrity Level. Low/Untrusted-приложения не имеют доступа на запись в
объекты с более высоким IL, если только не присвоить тем нужный IL в явном виде.

3. Начиная с Windows 7 (если не изменяет память), есть дополнительный механизм защиты — Process Mitigation.
Например, можно запретить загружать неподписанные в Microsoft dll, работать с динамическим кодом
(VirtualAlloc/VirtualProtect/etc), запрещать системные вызовы GDI/Win32k, дочерние процессы и т.п.
См. функции SetProcessMitigationPolicy и UpdateProcThreadAttributes.

4. В Windows 8 и выше есть AppContainer — это встроенная "песочница", изолированная еще сильнее, чем
Integrity Levels. Запустить свое AppContainer-приложение не так уж сложно, хотя эта технология еще не совсем
документированная, но вот работать из AppContainer с объектами "как обычно" не выйдет, т.к. там целая
пачка самых разных ограничений. И снова, открывать из AppContainer-процесса можно лишь те объекты,
доступ к которым был выдан явно (либо для SID-а, соответствующего данному AppContainer-у, либо для
SID-ов "All Application Packages" или "All Restricted Application Packages" — Win10'1607).

5. Последнее слово в Sandboxing — это виртуализация (Virtualization-Based Security).
В Windows 10 эту тему подняли до такого уровня, что теперь, например, при включенном VBS даже из драйвера
нельзя вызывать некоторые инструкции (типа сброса WP или SMEP-битов в регистрах CR) или читать память
определенных приложений, несмотря на kernel mode и, казалось бы, абсолютный контроль над системой.
Но реализовать такой же гипервизор невероятно сложно...

Кстати, рекомендую к прочтению исходники Chromium Browser, там очень много по данной теме.
Отредактировано 20.04.2018 14:14 okman . Предыдущая версия .
Re[4]: Sandboxing
От: Barbar1an Украина  
Дата: 20.04.18 14:48
Оценка:
Здравствуйте, okman, Вы писали:

у меня требования такие:

— вендор будет в курсе что его ехе будет отсендбоксен, поэтому сюрпризов ему ожидать не нужно
— нужны пайпы
— нужны дочерние процессы
— фс и всё остальное опасное — виртуализировано или изолировано
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: Sandboxing
От: IID Россия  
Дата: 18.07.19 17:13
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>- вендор будет в курсе что его ехе будет отсендбоксен, поэтому сюрпризов ему ожидать не нужно


Привилегии какие у процесса ожидаются ?

B>- нужны дочерние процессы


дочерние процессы из комплекта EXE или сторонние тоже ?
LPC к системным службам ?
COM ?

B>- фс и всё остальное опасное — виртуализировано или изолировано


Опасными могут быть обычные сисколлы. Которые EXE вполне способен вызывать напрямую, а не через ntdll.
Эксплуатируем kernel bug и говорим "песочница, досвидания".

Кстати, устройства разрешаем открывать ?
Если нет — отвалится солидный пласт функционала ОС.
Если да — вот ещё один вектор атаки.
kalsarikännit
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.