专栏首页方亮一种注册表沙箱的思路、实现

一种注册表沙箱的思路、实现

        从今年4月份开始,我接触到一个沙箱项目。该项目的需求要求我们的沙箱具有良好的安全性和兼容性。当时我们研究了SandBoxIE和360的沙箱,基本确定通过“重定向”思路来实现这款沙箱。而我主要负责研究注册表这块。(转载请指明出处

        在操作系统中,我们对一个对象(文件、注册表键等)的操作存在“创建”、“打开”、“关闭”、“修改”、“删除”和“查询”等。这些操作的源便是那个对象,“重定向”思路就是针对这个对象“作手脚”。说得通俗点,就是通过“狸猫换太子”的方式达到欺骗上层的目的。以后有什么操作,我们便是对这个“狸猫”去作,从而达到保护“太子”的目的。说的“程序化”点,就是比如Create(APath) 要试图创建APath路径的对象(文件,注册表键等),我们通过Hook到Create的底层函数,获取APath,通过一定的规则将APath转换为BPath,同时创建BPath上的对象,将创建结果返回。当然以上只是最最简单的情况,而实际的思路则比这个要复杂的多。

        要达到“狸猫换太子”的目的,我们必须要在外界第一次接触到“太子”之前就下手做点事。于是这就涉及到下手早晚的问题。总得来说存在两种方案:

        一种方法是把“太子”的胚胎取出换到猫的肚子里培育,将“狸猫”的胚胎换到皇后(当然可能是其他女性)的肚子里培育。这种方案的优点是:我们在之前任何一个没人注意的时刻完成以上操作,从此就不用管啥了。但是缺点是:太不稳定,如果出问题了,那就是“胎死腹中”,对好坏哪方都没个交代。

        一种是把刚出生的“太子”抱走,再抱来一只“狸猫”。这种方案优点是:安全稳定,两种不同物种培育自己的胚胎问题不大。问题是:在“太子”出生这个万众瞩目的时刻,我们如何安全的将“太子”抱走,在把“狸猫”抱过来。

        貌似小说中都是使用第二种方案,我想可能是因为科技还不够发达,不能让不同DNA的动物之间相互培育胚胎。同样,针对我们这个项目,我们同样秉承一个准则:“能在ring3做的,我们就在ring3层做”,因为ring0层我们还没足够的把握去保证稳定性,而且一旦出了问题就是大问题——蓝屏(胎死腹中)。于是我们要Hook的函数是Ring3层NtDll中NtCreateKey、NtOpenKey和NtDeleteKey等函数。

        以上的讨论我们可以通过“狸猫和太子”的关系来描述。因为“狸猫”和“太子”都是一个完整的个体,所以描述非常方便。然而实际操作中,完整的将“狸猫”塑造成一个人样的“太子”形象是非常不现实的,因为整容费用太大。同样针对我们的项目,我们不可能将所有操作的对象都创造一个一样的真实的“映射”对象。打个比方,一个操作要枚举Classes Root注册表键,难道我们要将成千上万子键的Classes Root拷贝到我们重定向的键下么?或许这是一种一劳永逸的方法,但是谁也不愿意去当第一次触发“拷贝”操作的倒霉小孩。于是定下以下规则:

  1. 原始对象不能修改(修改值,属性,删除)
  2. 创建,我会在重定向注册表(其实就是真实注册表一个子键)中创建它。
  3. 枚举、查询、打开、关闭,我会综合原始注册表和重定向表之后去操作。
  4. 修改,我会在对应的重定向注册表中修改它
  5. 删除,我优先在重定向表中删除,其次再“操作”原始注册表(不是真删除,而是找个位置做标记)

        基于以上的原则和规则,就可以开始我们的开发之旅了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • WMI技术介绍和应用——查询文件夹信息

            本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。

    方亮
  • libev源码解析——监视器(watcher)结构和组织形式

            在《libev源码解析——总览》中,我们介绍了libev的一些重要变量在不同编译参数下的定义位置。由于这些变量在多线程下没有同步问题,所以我们将...

    方亮
  • 使用libev监视文件夹下文件(夹)属性变动的方案和实现

            在《libev源码解析》系列中,我们分析了libev的基本原理。本文我们介绍一套使用libev封装的文件(夹)变动监视方案和实现。(转载请指明出...

    方亮
  • 非确定性的DeepSSM:从图像到概率形状模型(CS)

    近来,统计形状建模(SSM)利用了深度学习的优势来减轻对耗时且由专家驱动的解剖学分割、形状配准、总体水平形状优化的工作流的需求。DeepSSM是一种端到端的深度...

    Pamela_Lin
  • Redis集群操作手册

    [root@bhz004 ~]# /usr/local/redis/bin/redis-server /usr/local/redis-cluster/7001...

    HUC思梦
  • 点击显示错误

    用户4344670
  • 网址缩短,网址压缩源码

    主要功能有:完整的后台管理、功能齐全的用户面板、用户系统、社交分享、短网址统计、短网址自定义、多国语言支持、社交分享以及API系统等。

    叮当叮
  • 2-8 R语言基础 日期与时间

    > x2 <- Sys.Date() > class(x2) [1] "Date"

    hankleo
  • Bat file 安装和卸载同级目录下的.net 服务

    今天得到个需求 客户需要用batch file 安装和卸载服务,网上搜了一把例子,都只解决了单个问题,我来稍微总结一下 安装服务 @ECHO OFF REM T...

    麦克-堂
  • 美国移动手游市场调查

    腾讯科技讯 10月17日,游戏引擎开发商Unity Technologies旗下手游公司Everyplay近日发布了针对手游市场的消费用户最新调查数据。调查结...

    腾讯研究院

扫码关注云+社区

领取腾讯云代金券