You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

不依赖AppDomain的.NET进程多权限细粒度安全控制方案咨询

针对.NET进程的细粒度安全权限控制方案

核心思路

放弃AppDomain和AppContainer的粗粒度隔离,采用「API拦截 + 自定义权限校验逻辑 + 平台原生安全机制」的组合方案,实现File I/O、进程启动、网络访问、注册表操作的细粒度权限管控,且无需手动配置文件ACL。


1. File I/O 权限控制

实现方案:拦截文件操作API,结合Windows令牌权限校验

无需手动设置ACL,通过拦截.NET文件操作方法(如File.ReadAllTextDirectory.CreateDirectory),在调用前校验自定义规则或当前进程的系统令牌权限:

  • System.Reflection.DispatchProxy创建文件操作类的代理,在代理层嵌入权限校验逻辑;
  • 或依赖Castle.DynamicProxy这类拦截器,对所有封装的文件操作服务进行拦截;
  • 底层可通过P/Invoke调用Windows API AccessCheck,基于进程令牌检查目标文件的访问权限,替代手动ACL配置。

示例代码片段:

public class FileAccessProxy : DispatchProxy
{
    private readonly FileAccessRules _rules;

    protected override object Invoke(MethodInfo targetMethod, object[] args)
    {
        if (args.Length > 0 && args[0] is string path)
        {
            if (!_rules.IsAllowed(path, targetMethod.Name))
            {
                throw new UnauthorizedAccessException($"File access denied: {path}");
            }
        }
        return targetMethod.Invoke(typeof(File), args);
    }
}

2. 进程启动权限控制

实现方案:拦截Process.Start系列API,自定义启动规则

直接拦截Process.Start的所有重载方法,在启动前校验目标进程的合法性:

  • DispatchProxy创建Process类的代理,或封装专属的SafeProcessStarter服务,强制业务代码通过该服务发起进程启动;
  • 底层可通过P/Invoke调用CreateRestrictedToken生成降权令牌,再传入CreateProcess限制子进程的权限范围。

关键校验点:

  • 目标进程路径是否在白名单内;
  • 是否允许传递敏感启动参数;
  • 是否允许以提升权限启动进程。

3. Web访问权限控制

实现方案:自定义HttpClientHandler拦截HTTP请求

针对.NET的HTTP请求(HttpClientWebClient等),通过自定义DelegatingHandler插入权限校验逻辑:

  • 封装全局的SafeHttpClientFactory,所有HTTP请求必须通过该工厂创建的HttpClient发起;
  • 自定义PermissionCheckHandler继承DelegatingHandler,在SendAsync方法中校验请求URI是否符合白名单规则。

示例代码片段:

public class PermissionCheckHandler : DelegatingHandler
{
    private readonly WebAccessRules _rules;

    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (!_rules.IsAllowed(request.RequestUri))
        {
            throw new HttpRequestException($"Web access denied: {request.RequestUri}");
        }
        return await base.SendAsync(request, cancellationToken);
    }
}

4. 注册表访问权限控制

实现方案:拦截注册表操作API,结合系统权限校验

拦截Microsoft.Win32.Registry类的所有操作方法(如OpenSubKeySetValue),在调用前校验目标注册表路径的访问权限:

  • DispatchProxy创建注册表操作类的代理,或封装SafeRegistryAccessor服务统一处理注册表操作;
  • 底层可通过P/Invoke调用RegQueryInfoKey获取注册表项权限,或用AccessCheck校验当前进程令牌的访问权限。

5. 权限组合与全局管控

  • 维护统一的SecurityPolicy配置类,集中管理所有权限规则(文件路径黑白名单、进程白名单、Web域名白名单、注册表路径规则等),所有拦截器共享该配置;
  • 通过依赖注入将权限校验逻辑注入到所有管控服务中,避免业务代码绕过拦截;
  • 对于非托管代码调用(如直接P/Invoke系统API),可配合Windows Job Object限制进程整体权限,实现双重管控。

注意事项

  • 确保拦截器覆盖所有操作入口,包括直接调用.NET底层API和P/Invoke路径;
  • 性能敏感场景可缓存权限校验结果,减少重复计算开销;
  • 支持权限规则动态更新,无需重启进程生效。

内容的提问来源于stack exchange,提问作者Mohd Ahmed

火山引擎 最新活动