【问题标题】:Limit access to a pipe to a process (Windows)限制对进程的管道访问 (Windows)
【发布时间】:2016-09-22 19:59:46
【问题描述】:

是否可以通过进程限制对命名管道的访问(图像名称或进程 ID 都可以)?

这里的上下文是一个过滤器微型驱动程序,它必须与执行大部分业务逻辑的用户空间服务进行通信。由于这种通信是安全敏感的,我想保护它免受外部干扰,而默认情况下,由驱动程序创建的命名管道似乎可以与 any 用户空间进程进行通信知道管道的名称(通过静态或动态分析很容易发现)。

这是我已经知道的:管道是 Windows 中的安全对象,因此,它们具有安全描述符。此安全描述符可以包含一个 DACL,它应该限制对对象的访问。我已经广泛搜索了条件 ACE 的文档和示例,我希望它们可以做我想做的事情,但是我没有找到任何相关的东西。

编辑:我接受了 MSalters 的回答。人们普遍接受SYSTEM == ring0,虽然驱动程序的代码签名可能看起来很重要,但SYSTEM 可以轻松禁用代码签名,因此无需将权限从SYSTEM 提升到ring0 - 他们已经一样了。另一方面,即使是默认的安全描述符(在 minifilter 驱动程序上下文中 - 参见 FltBuildDefaultSecurityDescriptor)也包含一个限制,因此只有 SYSTEM 和管理员可以访问该对象,因此不需要进一步的操作(或可能,似乎)。

【问题讨论】:

    标签: c windows kernel driver


    【解决方案1】:

    无论如何,图像名称都不安全,任何人都可以创建“Notepad.EXE”。并且进程 ID 只是一个数字,可以重复使用,因此也没有保护作用。此外,您可以通过多种方式将 DLL 偷运到另一个进程中,因此即使您知道某个特定进程正在运行您的 EXE,您仍然不知道它是否正在运行只是您的可执行文件。

    Windows 安全模型使用安全主体(用户和系统帐户)的概念。这些由 ACL 直接支持,并且受到保护以防止欺骗。如果您的过滤器驱动程序拒绝与任何人对话,但它愿意与用户 X 的进程 A 对话,那么它应该愿意与用户 X 的任何进程对话。

    【讨论】:

    • 我知道这是 Windows 安全模型,然而完整的图像名称(连同路径)对我来说是可靠的,因为涉及到一个过滤器驱动程序,它可以监控服务二进制文件不是修饰符。此外,由于双方通信的高度安全意义,如果我不保护此管道,它将间接允许从 SYSTEM 升级到 ring0,这在我的情况下是不可接受的。当然,我欢迎对我的“安全模型”和假设提出任何批评。
    • 另外我应该补充一点,计划中还有其他安全措施,例如要求人类用户查看哪些 Windows 用户可以调试进程等等,这旨在进一步限制其他攻击媒介,类似到你指出的那个。
    • 我不明白过滤器驱动程序(在单个设备级别)如何确定某个完整路径(通常是系统范围的)是可靠的。即使文件本身没有在磁盘上更改,您也必须确保完整路径不完全引用另一个设备。虽然您可能认为 C:\ 是您的硬盘,但它具有重解析点等,但并不是那么简单。
    • 至于“从SYSTEM升级到ring 0”,我要引导Raymond Chen:一旦你获得了SYSTEM的控制权,你就获得了对系统的控制权。作为 SYSTEM,您已经可以加载另一个驱动程序,这意味着无论您在驱动程序中做什么,SYSTEM 都可以访问 ring 0。
    • 你是对的。我刚刚意识到,当您是 SYSTEM 时,您可以启用未签名的驱动程序,然后从那里运行您想要作为 ring0 的任何代码。我接受答案。
    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2017-09-21
    • 2017-08-29
    相关资源
    最近更新 更多