强制子进程
ForceChildren 是 沙盘配置 中的一个沙箱设置(在 v1.14.5 / 5.69.5 版本中引入),可强制特定父进程启动的子进程在指定沙箱内运行。当你希望由已知父进程启动的所有进程都自动在沙箱中运行时,这项功能十分有用。
语法
通用格式如下:
其中 <program> 可以是:
- 带有通配符的映像路径,例如
C:\Users\*\App\*.exe—— 通配符模式会对规范化路径进行不区分大小写的匹配 - 映像名称(不带反斜杠),例如
dopus.exe—— 按照驱动程序的映像名匹配规则进行名称匹配
注意事项:
行为及匹配规则
-
ForceChildren项在新进程创建时进行评估。如果父进程匹配到了任何已启用沙箱的ForceChildren规则,则其子进程将强制进入该沙箱3 -
匹配尝试(大致优先级顺序):
-
包含通配符的规则使用模式引擎进行匹配;不含通配符的规则使用兼容 NLS 的字符串比较及映像匹配助手函数,以实现正确的语言感知检查24
-
沙箱是否启用、是否允许强制规则等设置将影响
ForceChildren匹配的有效性。如果某个沙箱配置了类似DisableForceRules等选项,则该沙箱的强制规则不会生效6 -
某些系统进程及沙盘内部流程被排除在强制之外。沙盘的主目录(home 目录)也不会被强制处理7
示例
-
强制特定父进程名称的子进程在沙箱中运行:
-
使用通配符模式匹配父进程映像路径:
命令行开关
参见 StartCommandLine 以获取详细信息
相关开关:
/force_children—— 启用或控制命令行下的子进程强制行为/fcp——/force_children的简写版本(如有支持)
与提示和其他强制设置的交互
-
当驱动程序决定新启动进程应使用哪个沙箱(如果有)时,
ForceChildren项会与ForceFolder和ForceProcess条目一同评估 -
如果在匹配规则时启用了告警(例如存在策略限制强制规则的情况),驱动程序可能会弹出提示,而不是强制进程进入沙箱。驱动程序会跟踪“告警”状态,此状态可阻止强制,并可选择记录日志或通知用户8
-
ForceChildren用于补充ForceProcess(直接按名称强制进程,不考虑父进程)和ForceFolder(按文件夹路径强制进程)。若希望强制由特定父进程创建的进程,应选用ForceChildren
实现说明(驱动行为)
-
驱动程序在进程创建时为每个已启用沙箱构建一份内存中的强制规则列表。每个
ForceChildren条目会被转换为内部FORCE_ENTRY元素,若包含通配符则存储为编译后的 PATTERN,对应规范化路径2 -
映像名称匹配由辅助函数
Process_MatchImage实现,支持语言敏感及映像名称专用的匹配逻辑4
参见
- ForceProcess —— 按名称或路径强制进程
- ForceFolder —— 按文件夹路径或模式强制进程
- DisableForceRules —— 禁用某个沙箱的所有强制规则
图形界面(沙盘管理器 / SandMan)
位置:
- 打开沙盘管理器(SandMan)
- 打开沙箱的选项:右键单击某个沙箱并选择“沙箱选项”
- 在选项窗口中找到“程序控制 / 强制程序” 区域,可以看到所有已添加的强制项
如何添加“强制子进程”条目:
- 在“程序控制 / 强制程序”区域,你会看到已强制的条目列表,以及 “强制程序”、“强制子进程” 和 “强制文件夹” 按钮
- 单击 “强制子进程”,可通过选择可执行文件添加一个条目(或者点击“浏览”按钮通过对话框选择文件)
- 添加的项目会以类型标签“Children”展现在列表中。已勾选的条目会保存到
ForceChildren;未勾选的保存到ForceChildrenDisabled - 若需移除条目,选中后点击“移除”即可
说明与参考
- 界面中的树形组件是
ui.treeForced,位于OptionsWindow.ui。选项窗口通过OptionsForce.cpp(LoadForced/SaveForced/AddForcedEntry)加载和保存这些列表 - “为此沙箱禁用强制进程和强制文件夹”复选框,即
ui.chkDisableForced,映射到DisableForceRules设置
注释
-
驱动程序会在存储条目前移除重复的反斜杠并解析重解析点。参见
Process_AddForceFolders对expnd进行标准化并调用File_TranslateReparsePoints↩↩ -
通配符项通过
Pattern_Create创建 PATTERN 对象,使用Pattern_Match对规范化为小写的路径进行匹配 ↩↩↩ -
Process_FcpInsert、Process_FcpCheck及相关过程实现了基于父进程的强制映射,便于在创建新子进程时将其加入以 PID 为键的映射,并在后续创建时检查 ↩ -
驱动通过
Process_TranslateDosToNt(封装自File_TranslateDosToNt)将 DOS 风格路径转换为 NT 风格,若语法错误则回退使用原始路径 ↩↩ -
只有为当前 SID/会话已启用、且未启用
DisableForceRules的沙箱才会加载强制数据列表 ↩ -
沙盘 home 目录下的路径不会被强制处理,代码会显式检测并跳过位于
Driver_HomePathNt下的匹配项 ↩ -
匹配到需告警的规则时,驱动可能会设置告警状态(
IsAlert),并延迟强制操作。告警可能产生日志记录,并可根据设置阻止进程在沙箱内启动 ↩