Как изолировать программу от операционной системы

После перехода на операционную систему Windows 11 многие пользователи заметили снижение производительности в играх. Согласно некоторым тестам, эти потери составляют до 25%.

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

Что такое VBS/HVCI на Windows 11

VBS или Virtualization-based Security (Безопасность на основе виртуализации) – это функция аппаратной виртуализации, которая создает и изолирует от остальной операционной системы безопасную область в оперативной памяти. Windows может использовать эту изолированную безопасную область памяти для хранения важных для безопасности данных и кода.

Использование изолированной части памяти позволяет защититься от эксплойтов, направленных на преодоление средств защиты. Вредоносное ПО часто атакует на встроенные механизмы безопасности Windows, чтобы вывести их из строя или получить доступ к важным системным ресурсам. Например, вредоносный код может получить доступ к ресурсам уровня ядра, обойдя методы проверки подлинности кода Windows.

Операционная система на C#

VBS решает эту проблему, отделяя средства защиты системы от остальной части ОС. Это делает Windows более безопасной, поскольку вредоносные программы не могут обойти встроенную защиту ОС. Одной из таких средств защиты является Hypervisor-Enforced Code Integrity (HVCI).

HVCI использует VBS для выполнения проверки целостности кода. В частности, HVCI проверяет подлинность драйверов и программ режима ядра, чтобы убедиться, что они получены из надежных источников. Таким образом, HVCI гарантирует, что в память загружается только доверенный код.

Как проверить включен ли VBS

Вы можете проверить включен ли VBS на вашем компьютере с Windows 11. Для этого нужно открыть окно « Выполнить » ( Win-R ) или меню « Пуск » и ввести команду « msinfo32 ».

ввести команду msinfo32

В результате откроется окно « Сведения о системе ».

окно Сведения о системе

Здесь в самом низу окна будет пункт « Безопасность на основе виртуализации ». Если в нем указано « Выполнение », значит VBS включен.

Как отключить VBS через настройки

Самый простой способ отключить VBS на Windows 11 – это воспользоваться стандартными настройками Windows 11. Для этого откройте меню « Пуск », введите в поиск фразу « Изоляция ядра » или « Core isolation » и откройте найденную программу.

введите в поиск фразу Изоляция ядра

В результате откроется окно « Безопасность Windows ». Здесь нужно отключить функцию « Изоляция ядра — Целостность памяти ».

Безопасность через Изоляцию и Компартментализацию.90 Windows — песочницы и изоляция

отключить функцию Изоляция ядра - Целостность памяти

После этого нужно перезагрузить компьютер, чтобы настройки применились.

Как отключить VBS через реестр

Также вы можете отключить VBS через реестр Windows 11. Для этого нужно открыть окно « Выполнить » ( Win-R ) или меню « Пуск », ввести команду « regedit » и открыть редактор реестра.

ввести команду regedit

В редакторе реестра нужно перейти в следующий раздел настроек:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlDeviceGuard

И создать там DWORD параметр с названием « EnableVirtualizationBasedSecurity ».

создать DWORD параметр EnableVirtualizationBasedSecurity

Дальше нужно открыть параметр « EnableVirtualizationBasedSecurity » и присвоить ему значение « 0 ».

присвоить параметру значение 0

После этого нужно перезагрузить компьютер, чтобы настройки применились.

Как отключить VBS через политики

Если у вас Pro-версия Windows 11, то вы можете отключить VBS через локальные групповые политики. Для этого нужно открыть окно « Выполнить » ( Win-R ) или меню « Пуск », ввести команду « gpedit.msc » и открыть « Редактор локальных групповых политик ».

открыть Редактор локальных групповых политик

В окне редактора нужно найти следующий раздел: Политика «Локальный компьютер» — Конфигурация компьютера – Административные шаблоны – Система – Device Guard .

раздел Device Guard

Здесь нужно открыть параметр « Включить средство обеспечения безопасности на основе виртуализации ».

Читайте также:
Как работать c программой мой компьютер

параметр Включить средство обеспечения безопасности на основе виртуализации

И перевести его в положение « Отключено ».

отключить VBS

После этого нужно перезагрузить компьютер, чтобы настройки применились.

  • Как установить Windows 7 или 10 на виртуальную машину
  • Как установить Linux на Windows 10 с помощью WSL
  • Как включить и пользоваться Песочницей в Windows 11 или Windows 10

Источник: comp-security.net

Системный изолятор. Изолируем процессы в Windows средствами Less Privileged App Container (LPAC)

Начиная с восьмой версии в Windows появился встроенный механизм контейнеров, которые позволяют изолировать процессы путем значительного усечения их прав. Этому системному механизму дали название Less Privileged App Container (LPAC), он поддерживается некоторыми приложениями, например браузером Chrome. В этой статье я покажу, как использовать его в своих программах.

Сендбокс-изоляция часто применяется в защитных приложениях, а также на ее основе строятся компоненты антивирусов, называемые HIPS (Host-based Intrusion Prevention System), и отдельные приложения для изолированных сред типа Sandboxie. Такие защитные механизмы реализованы через драйвер-фильтр режима ядра. Он сложен в написании и тестировании, имеет громадное количество шаблонного кода и должен перехватывать значительное количество функций NTAPI, чтобы менять их параметры на лету, таким образом создавая песочницу внутри файловой системы.

Существует более простой способ устроить изоляцию произвольных приложений. Инженеры Microsoft уже позаботились об этом и интегрировали интересный механизм в ядро Windows. Его суть заключается в том, что система жестко ограничивает доступ к устройствам (таким как микрофон, камера, GPS или модуль 4G), файлам в системе (иногда — даже для чтения) и процессам (ограничиваются межпроцессные взаимодействия). Также ограничения накладываются на работу с сетью (например, на открытие портов или сокетов), обращения к сетевому реестру и оконному интерфейсу других приложений.

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

Создаем Less Privileged App Container

Прежде чем запускать приложение, нам нужно создать сам контейнер. В этом нам поможет функция WinAPI CreateAppContainerProfile . Вот ее прототип:

HRESULT WINAPI CreateAppContainerProfile( _In_ PCWSTR pszAppContainerName, _In_ PCWSTR pszDisplayName, _In_ PCWSTR pszDescription, _In_ PSID_AND_ATTRIBUTES pCapabilities, _In_ DWORD dwCapabilityCount, _Out_ PSID *ppSidAppContainerSid );

И сам код создания контейнера:

WCHAR sandbox_name[] = L»SandboxLPAC»; WCHAR sandbox_desc[] = L»My SandboxLPAC»; PSID sid = NULL; HRESULT status; result = CreateAppContainerProfile(sandbox_name, sandbox_name, sandbox_desc, NULL, 0,

В случае ошибки неплохо было бы проверить, не создан ли наш контейнер ранее; если создан, то мы получим его SID. Вот прототип функции WinAPI, которая выясняет SID уже созданного контейнера:

HRESULT WINAPI DeriveAppContainerSidFromAppContainerName( _In_ PCWSTR pszAppContainerName, _Out_ PSID *ppsidAppContainerSid );

Далее код реализации проверки. Как видишь, он очень прост.

if (HRESULT_CODE(status) == ERROR_ALREADY_EXISTS) status = DeriveAppContainerSidFromAppContainerName(sandbox_name,

Так или иначе мы получаем SID контейнера.

INFO

Security Identifier (SID) — идентификатор безопасности, структура данных в Windows, которая может идентифицировать системные объекты, например элементы управления доступом (Access Control Entries, ACE), токены доступа (Access Token), дескрипторы безопасности (Security Descriptor). SID всегда начинается с буквы S, далее идут числа, которые обозначают номер редакции ОС, источники выдачи, удостоверяющие центры и другую информацию.

Насколько просто обойти изоляцию LPAC?

  • Теоретически можно, но готовых эксплоитов еще нет
  • Ее научились обходить, правда пока только в Windows 8
  • Ее научились обходить уже и в Windows 10

Пишем LPAC loader для любого приложения

Итак, контейнер LPAC создан, SID получен. Теперь наша задача — заставить Windows запустить произвольное приложение в этом контейнере. Но сначала нам необходимо разобрать процесс запуска приложений и понять, как можно задавать определенные атрибуты запуска и какие системные структуры отвечают за это.

Для запуска приложений в Windows используется функция WinAPI CreateProcess с массой параметров, и именно эта функция имеет ключевое значение в нашей задаче. Давай посмотрим на ее прототип и разберем основные параметры.

Читайте также:
Эта программа не будет открыта в защищенном режиме Internet Explorer

BOOL WINAPI CreateProcess( _In_opt_ LPCTSTR lpApplicationName, _Inout_opt_ LPTSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ BOOL bInheritHandles, _In_ DWORD dwCreationFlags, _In_opt_ LPVOID lpEnvironment, _In_opt_ LPCTSTR lpCurrentDirectory, _In_ LPSTARTUPINFO lpStartupInfo, _Out_ LPPROCESS_INFORMATION lpProcessInformation );

Поле lpApplicationName — это путь к исполняемому файлу, который мы собираемся запускать. Далее идут поля lpCommandLine , lpProcessAttributes , lpThreadAttributes , bInheritHandles , которые сейчас не представляют для нас интереса. Можем им всем присвоить значение NULL (FALSE).

А вот на поле dwCreationFlags мы остановимся подробнее. Оно отвечает за флаги, которые устанавливают приоритет процесса и регламентируют его создание. Например, если в это поле передать значение CREATE_NO_WINDOW для консольного приложения, то оно запустится без создания консольного окна. А если передать значение CREATE_SUSPENDED , тогда процесс (основной поток) будет создан приостановленным (в состоянии ожидания пробуждения функцией ResumeThread ). Нам же необходимо задать флаг EXTENDED_STARTUPINFO_PRESENT : он «разрешит» нам расширенные параметры запуска приложения.

Далее идет поле lpStartupInfo , которое имеет тип LPSTARTUPINFO . Это указатель на структуру STARTUPINFO , которая регламентирует параметры основного окна приложения или терминала, а также его дескриптор.

Важный момент. При передаче флага запуска EXTENDED_STARTUPINFO_PRESENT мы можем вместо стандартной структуры STARTUPINFO передать ее усовершенствованную версию — структуру STARTUPINFOEX . Она имеет вид:

typedef struct _STARTUPINFOEX < STARTUPINFO StartupInfo; PPROC_THREAD_ATTRIBUTE_LIST lpAttributeList; >STARTUPINFOEX, *LPSTARTUPINFOEX;

Можно считать, что это стандартная структура STARTUPINFO (поле StartupInfo ), дополненная списком атрибутов запуска (поле lpAttributeList ). Эти атрибуты можно проинициализировать функцией WinAPI InitializeProcThreadAttributeList :

BOOL WINAPI InitializeProcThreadAttributeList( _Out_opt_ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, _In_ DWORD dwAttributeCount, _Reserved_ DWORD dwFlags, _Inout_ PSIZE_T lpSize );

А теперь добавляем их в список параметров функцией UpdateProcThreadAttribute :

BOOL WINAPI UpdateProcThreadAttribute( _Inout_ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList, _In_ DWORD dwFlags, _In_ DWORD_PTR Attribute, _In_ PVOID lpValue, _In_ SIZE_T cbSize, _Out_opt_ PVOID lpPreviousValue, _In_opt_ PSIZE_T lpReturnSize );

Обрати внимание на поле PVOID lpValue , к нему мы еще вернемся. А теперь переходим к практике. Весь код манипуляций с атрибутами потоков выглядит таким образом:

SIZE_T size_of_attr = 0; STARTUPINFOEX ex_start_info = < 0 >; SECURITY_CAPABILITIES secap = < 0 >; InitializeProcThreadAttributeList(NULL, 1, NULL, ex_start_info.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size_of_attr); InitializeProcThreadAttributeList(ex_start_info.lpAttributeList, 1, NULL, UpdateProcThreadAttribute(ex_start_info.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES,

Первые три строки кода (если не считать объявление переменных) создают PROC_THREAD_ATTRIBUTE_LIST , то есть список параметров запуска. Вызов WinAPI UpdateProcThreadAttribute модифицирует его должным образом и создает нужную нам структуру STARTUPINFOEX ex_start_info , которую мы передадим функции CreateProcess . Четвертое поле этой функции, lpValue , получает на вход структуру secap , которая имеет тип SECURITY_CAPABILITIES и выглядит так:

typedef struct _SECURITY_CAPABILITIES < SID AppContainerSid; PSID_AND_ATTRIBUTES Capabilities; DWORD CapabilityCount; DWORD Reserved; >SECURITY_CAPABILITIES, *PSECURITY_CAPABILITIES;

Чтобы «настроить» ее под свои нужды, заполняем поля перед вызовом UpdateProcThreadAttribute . Первое поле структуры — это AppContainerSid , в него мы передаем SID нашего контейнера LPAC. Второе поле — Capabilities , оно тоже является структурой:

typedef struct _SID_AND_ATTRIBUTES < PSID Sid; DWORD Attributes; >SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;

Третье поле ( SECURITY_CAPABILITIES ) называется CapabilityCount . Это счетчик параметров процесса, которыми мы его наделяем.

Давай посмотрим на код, который реализует все перечисленное выше и создает нам корректно заполненную структуру SECURITY_CAPABILITIES .

SID_AND_ATTRIBUTES sid_attr; DWORD sid_size = SECURITY_MAX_SID_SIZE; sid_attr = (SID_AND_ATTRIBUTES *)malloc(sizeof(SID_AND_ATTRIBUTES)); ZeroMemory(secap, sizeof(SECURITY_CAPABILITIES)); ZeroMemory(sid_attr, sizeof(SID_AND_ATTRIBUTES)); sid_attr.Sid = malloc(SECURITY_MAX_SID_SIZE); CreateWellKnownSid(capabili, NULL, sid_attr.Sid, sid_attr.Attributes = SE_GROUP_ENABLED; Capabilities = sid_attr; AppContainerSid = sid;

Единственная сложность, которую ты можешь встретить в этом коде, заключается в неизвестной еще функции CreateWellKnownSid . Она создает SID для значений, которые были предопределены заранее. Самое интересное для нас — это ее первое поле, в котором через переменную capabili передается перечисление типа WELL_KNOWN_SID_TYPE , где на момент написания статьи содержится 94 пункта. Они наделяют наш SID различными правами. Ознакомиться с полным списком можно в MSDN по ссылке. Для собственных экспериментов можно выбрать любой по вкусу. .

Итак, все основные системные структуры созданы, сам контейнер LPAC создан, осталось только запустить блокнот в контейнере. Зададим нужные параметры вызова и наши заранее подготовленные структуры.

PROCESS_INFORMATION pinfo = < 0 >; BOOL ok = CreateProcessA(«c:windowsnotepad.exe», NULL, NULL, NULL, FALSE, EXTENDED_STARTUPINFO_PRESENT, NULL, NULL, (LPSTARTUPINFOA)pinfo);

Результат работы можно увидеть в программе ProcessExplorer: notepad.exe запустится внутри контейнера Less Privileged App Container.

Системный изолятор. Изолируем процессы в Windows средствами Less Privileged App Container (LPAC)

Какое предустановленное приложение по умолчанию запускается в LPAC?

  • Internet Explorer, начиная с Windows 8.1
  • «Проводник» во всех версиях Windows 10
  • MS Edge, начиная с версии Windows 10 1703
Читайте также:
Какая программа для ГТА 5

Проверка на изоляцию

Как проверить, работает ли процесс в контейнере LPAC или нет, программным путем, без использования сторонних приложений? Достаточно получить хендл интересующего нас процесса. Если процесс сторонний, то нам поможет функция WinAPI OpenProcess , а для своего пригодится GetCurrentProcess . Далее открываем токен доступа процесса (Access token) и смотрим его TOKEN_INFORMATION_CLASS , который будет равен TokenIsAppContainer в том случае, если процесс работает внутри контейнера.

BOOL InLPAC(HANDLE h_proc)

Системный изолятор. Изолируем процессы в Windows средствами Less Privileged App Container (LPAC)

INFO

Маркер доступа (Access token) — объект Windows, содержащий привилегии учетной записи пользователя, от которого был запущен процесс. Помимо этого, Access token содержит информацию об ограничениях доступа к потоку, здесь же перечислены SID и списки привилегий процесса. Посмотреть структуру маркера доступа можно, введя в WinDbg команду dt_TOKEN .

На вход этой функции необходимо передать хендл интересующего нас процесса, и она вернет TRUE , если процесс работает внутри Less Privileged App Container, и FALSE , если процесс выполняется вне его.

С какими новыми методами защиты совместно работает LPAC?

  • No Child Proc и Protected Processes
  • Win32k Syscall Filtering, SEHOP и ASLR
  • LPAC работает независимо от других компонентов

Заключение

Как изолировать и запускать программы, требующие прав администратора, на ПК с ограниченным доступом?

Этот вопрос некоторое время не дает мне покоя. Как мне изолировать любое приложение и запустить его на ПК , где у меня есть только ограниченные права (не административные) ?

Конечно, приложению потребуются права контроля учетных записей и административные привилегии, но программа изолированной среды будет эмулировать их и «воспроизводить» среду для приложения, в которой оно может сохраняться на жестком диске и в реестрах.

Sandboxie.com позволяет приложению это делать, но я не знаю, что это делает не нужны административные привилегии для запуска изолированной системы как таковой.

Я в чем-то не прав? Если да, пожалуйста, оставьте комментарий под этим и предложите закрыть.

Author: Tamara Wijsman, 2011-02-13

4 answers

Spoon.net — создайте приложение на другом компьютере с помощью spoon, а затем оно запустит его на чем угодно, если вы сможете успешно создать его в spoon. никаких прав администратора не требуется.

Author: hotmatrixx, 2011-12-21 00:06:25

Вы можете использовать VMware для создания и загрузки операционной системы, которая предоставляет вам административные разрешения. Это решило бы все ваши требования, поскольку оно было бы изолировано и полностью отделено от вашей основной операционной системы, и вы могли бы запускать программы, сохранять их на виртуальном диске и т. Д., И все это без необходимости изменять разрешения на основной операционной системе.

Author: jmort253, 2011-02-13 17:21:13

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

VMware, Virtual PC, Softgrid будут работать, и я уверен, что есть и другие.

Author: Jeremy, 2011-02-13 19:05:27

spoon.net стала turbo.net, но это также стало очень коммерческим и очень дорогостоящим (за исключением лицензий на образование). Он пока не поддерживает облачную упаковку приложений.

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

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

Некоторые другие Создатели портативных приложений которые могут заменить spoon.net :

  • VMware тонкое приложение
    Базовая версия «VMware ThinApp Starter Edition» предлагается для бесплатно при любой покупке VMware Workstation.
  • Камейо
    Cameyo-это продукт виртуализации приложений. Он направлен на виртуализацию приложений Windows, чтобы они могли работать на других компьютерах или в браузерах HTML5.

Источник: eaglenn.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru