如安在Windows AppCotainer中建立历程 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

如安在Windows AppCotainer中建立历程

申博_新闻事件 申博 226次浏览 已收录 0个评论

概述

AppContainer是一般用于UWP历程(也称为Metro、Store、Modern)的沙箱。AppContainer中的历程以低完全性级别(Intergrity Level)运转,这实际上意味着它险些没法接见一切内容,因为对象(比方:文件)的默许完全性级别为中。这意味着,在AppContainer内运转的代码因为缺少接见权限,而没法对体系发生任何严重的损伤。别的,从对象管理器的角度来看,AppContainer建立的定名对象基于称为AppContainer SID的标识符,存储在其本身的对象管理器目录下。这意味着,一个AppContainer不克不及滋扰另一个对象。

比方,若是不在AppContainer中的历程,建立了名为“abc”的互斥锁,那末其全名实际上为“\Sessions\1\BaseNamedObjects\abc”(假定历程在会话1中运转)。另一方面,若是AppContainer A建立名为“abc”的互斥锁,则其全名类似于“\Sessions\1\AppContainerNamedObjects\S-1-15-2-466767348-3739614953-2700836392-1801644223-4227750657-1087833535-2488631167\abc”,也意味着它可以或许会滋扰另一个AppContainer,或者是在AppContainer外部运转的任何历程。

只管AppContainers是特地为市肆的运用建立的,但它也可以或许用于实行“一般”运用顺序,并供应雷同级别的安全性和断绝性。接下来,让我们看看如何来完成这一点。

准备工作

起首,我们须要建立AppContainer,并猎取AppContainer SID。这个SID基于容器称号的哈希值。在UWP的天下中,该称号由运用顺序包和13位署名者哈希值构成。关于一般运用顺序来讲,我们可以或许挑选任何字符串。若是挑选了雷同的字符串,就将会发生雷同的SID,这也就意味着我们实际上可以或许运用它将几个历程“绑缚”到同一个AppContainer中。

第一步是建立一个AppContainer配置文件(疏忽个中的毛病):

PSID appContainerSid;
::CreateAppContainerProfile(containerName, containerName, containerName, nullptr, 0, &appContainerSid);

个中,containerName参数是一个主要的参数。若是该函数涌现失利,可以或许意味着容器配置文件已存在。在这类情况下,我们须要从现有的配置文件中提取SID:

::DeriveAppContainerSidFromAppContainerName(containerName, &appContainerSid);

下一步是为历程建立做准备。相对最小值是运用SECURITY_CAPABILITIES构造初始化历程属性列表,从而指导我们愿望在AppContainer中建立的流程。作为个中的一部分,我们可以或许指定此AppContainer中应当具有的功用,比方收集接见、对文档库的接见和Windows Runtime界说的任何其他功用:

STARTUPINFOEX si = { sizeof(si) };
PROCESS_INFORMATION pi;
SIZE_T size;
SECURITY_CAPABILITIES sc = { 0 };
sc.AppContainerSid = appContainerSid;
 
::InitializeProcThreadAttributeList(nullptr, 1, 0, &size);
auto buffer = std::make_unique<BYTE[]>(size);
si.lpAttributeList = reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(buffer.get());
::InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, &size));
::UpdateProcThreadAttribute(si.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES, &sc, sizeof(sc), nullptr, nullptr));

在这里,我们不指定其功用。如今,我们已准备好建立历程:

::CreateProcess(nullptr, exePath, nullptr, nullptr, FALSE,
       EXTENDED_STARTUPINFO_PRESENT, nullptr, nullptr,
        (LPSTARTUPINFO)&si, &pi);

第一次实验:Notepad

一般,我们可以或许应用记事正本举行实验。经由测试,记事本的运转历程好像没有问题。然则,若是我们实验运用记事本的文件->翻开菜单,来翻开其他文件(险些是任何文件),我们会发明记事本没法接见经常使用的地位(比方:我的文档或我的图片)。这是因为该历程正在以低完全性级别来运转,而文件默许为中完全性级别。

如安在Windows AppCotainer中建立历程

如安在Windows AppCotainer中建立历程

————————————-

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-

历程管理器(Process Explorer)中的“AppContainer”,运用的是低完全性级别。

若是我们愿望记事本可以或许接见用户的文件(比方:文档和图片),那末就必须在这些对象中设置明白的权限,许可接见AppContainer SID。要运用的函数包孕SetNamedSecurityInfo,关于完全代码请参阅GitHub上的项目。

我建立了一个简朴的运用顺序来测试上述内容。我们可以或许指定容器称号、可实行途径,然后单击“运转”以在AppContainer中运转。我们可以或许增加取得完全权限的文件夹或文件:

如安在Windows AppCotainer中建立历程

第二次实验:Windows Media Player

接下来,让我们实验一个越发风趣的运用顺序,Windows Media Player。只管我们晓得,如今已很少有用户运用老版本的Windows Media Player,但这确实是一个风趣的例子。Windows Media Player具有一些特定的功用,用户只能在特定的时间内运转它的单个实例。之所以具有如许的限定,其道理是在于WMP建立了一个具有异常奇特的称号的互斥锁“Microsoft_WMP_70_CheckForOtherInstanceMutex”,若是它已存在,那末将会向它的火伴(也就是之前存在的WMP实例)发送一条音讯,然后停止。我们可以或许运用历程管理器实行的另一个简朴技能是封闭该句柄,然后启动另一个WMP。

我们来实验一些分歧的内容:试着在AppContainer中运转WMP,然后在另一个AppContainer中运转别的一个。我们想晓得,如许会获得两个实例吗?

如安在Windows AppCotainer中建立历程

以这类体式格局运转WMP,将会弹出其资助顺序setup_wm.exe,它会讯问WMP的初始设置。我们单击“疾速设置”封闭对话框,然后,它会再次涌现!依此反复。我们没法挣脱这一轮回,除非封闭对话框后WMP没有启动。

经由剖析,我们以为其缘由在于权限的设置。在该对话框涌现时,我们运转历程管理器,并过滤“权限谢绝”(ACCESS DENIED),其效果以下所示:

如安在Windows AppCotainer中建立历程

明显,须要接见某些键才可以或许生存设置。该对象许可增加这些键,并为它们设置完全权限:

如安在Windows AppCotainer中建立历程

如今,我们就可以或许在两个分歧的容器中运转WMP(变动容器称号并从新运转),而且两个顺序都能一般运转。这是因为,每一个互斥锁如今都有一个以相干AppContainer的AppContainer SID为前缀的独一称号:


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明如安在Windows AppCotainer中建立历程
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址