当前位置: 首页 > news >正文

奇虎郑文彬:还原系统保护技术原理和攻防

奇虎郑文彬:还原系统保护技术原理和攻防

3月19日,由中国最大的互联网综合服务提供商腾讯发起和组织的互联网安全峰会进入第二天。包括微软、盛大、新浪等互联网界各大巨头的技术专家,学者和专业人士参与了此次的交流。此次峰会是今年以来首场由中国互联网各顶尖企业共同参与的大型网络安全专业盛会。

来自奇虎的反木马专家郑文彬,在现场发表演讲。以下为文字实录:

郑文彬:大家好!我今天给大家介绍这几个方面:背景、还原系统技术原理概览、流行还原系统穿透技术介绍、通用还原系统保护技术、演示&GuardField、还原系统保护之未来趋势。最近一段时间,有机器狗这类病毒工具对还原系统攻击,使用还原系统环境的用户一般都不会安装其他的防护软件,一旦还原软件被穿透的话,会带来比较大的安全威胁。

还原系统技术原理:基本原理是磁盘设备过滤驱动。比较常用方法是自己会建一个磁盘卷设备,在harddiskX进行文件过滤。过滤驱动如何做到还原?首先还原系统会在磁盘上分配一块预留的区域,应用程序以为他已经写到真实磁盘,实际上被分配到一块内容区域里,真实磁盘根本就没有被写入。

下面介绍一下还原软件怎么更新过滤。首先是一个普通的Windows程序,会调用 Win32API,从用户模式到内存模式,这些函数调用Windows内核,把文件请求发到文件系统上,根据磁盘卷分区格式不同来创建。文件系统设备会将上层发来的文件读写请求转化磁盘读写请求,在harddisk volume之前会有还原系统过滤驱动。再往下会根据硬盘接口不同而有不同。如果IDE结构硬盘,会发布到电源系统。api最终会调用函数读写端口。如果是USB设备,会发送到usb stor。

刚才说了还原系统的一些基本原理,知道原理之后对如何穿透还原也就很简单了。既然还原系统都在磁盘上过滤驱动,只要我们解除过滤驱动与真实磁盘之间的关系,绕过过滤关系的话,就等于直接穿透了还原。第一种方法:DR0设备过滤设备链摘链。这种方法其实就是摘除一个harddiskDR0上的过滤设备。指明设备上会有哪些过滤设备,第一代机器狗病毒将这个域给清零,导致还原系统设备被清除,所有请求就不通过还原系统直接到达过滤磁盘设备。对于没有防备的还原系统就被成功攻破了。国内大部分还原系统都没有办法对抗这种技术。但是这种技术也是有一些缺陷的,只能摘除在DR0上的物理设备。文件请求先到达磁盘卷,磁盘卷上的过滤设备摘除的话对系统有影响。所以第一代机器狗病毒使用了自己解析文件系统方式进行感染,这是它的缺陷。

第二种方法:会自己创建虚拟磁盘设备,作为磁盘卷挂载到文件系统上,对虚拟磁盘读写影射到真实磁盘,将请求下发到下层设备。相对第一代机器狗来说,这种方法不需要对磁盘系统摘除,可以通过文件对虚拟磁盘操作,操作结果是和对真实磁盘操作是一样的,可以成功穿透还原。在这里还用一种方式就是他没有直接发送磁盘读写请求,发送SCSI-REQUEST-BLOCK下发到下层磁盘设备。

还有一种方法,这是方法不使用驱动程序,直接在用户模式穿透还原系统。磁盘系统提供一套 passthrough指令,不向磁盘发送直接请求,就可以获取磁盘信息甚至直接读写磁盘扇区。IDE/SCSI/ATA Pass Through指令穿透还原,RING3下使用Devicelocontrel函数发送请求。大多数还原系统对此过滤不严或根本未过滤,导致在RING3 下即可达成攻击。

其他一些方法,比如说直接操作端口驱动,比如USB,更底层的磁盘操作:端口驱动、直接IO 等等,缺点是难度大,通用较麻烦。另外的方法是可以摘除其他一些过滤设备,Attach到还原系统上,先于磁盘系统获得磁盘的请求,可以做一个绕过动作。可以在磁盘卷设备保存指针上所手脚。方法很多,不再一一解释了。主要是两类,第一类是新的磁盘技术或者磁盘卷绕过或者穿透的一些技巧。

通用还原系统的保护技术,GuardField。还原系统脆弱的原因是什么呢?刚才也说过了他是通过磁盘设备上的过滤驱动,也就是说他跟磁盘设备没有紧密联系,只要被攻击者使用、摘除或者绕过方法就可以把磁盘请求发送到真实磁盘上。穿透基本原理:必须使读写请求不经过还原系统物理驱动,而是到了下层的物理磁盘设备。这里就有一个穿透思路,一个磁盘请求是从上层逐层发布到下层,我们只要监控发送路径,进行对比操作,就可以作为一个还原穿透的角色。

这是我们上周发布的360GuardField文件,给大家演示一下效果。这是一台XP虚拟机,安装了冰点的还原系统,这个还原系统正常会被第一代机器狗穿透。这是我们第一代机器(图)。这个系统已经安装了还原保护。可以看到还原攻击已经被拦截了,这个时候看到攻击者已经没有了。然后使用微软工具查看一下,可以看到攻击者攻击是失败的。这是第二代机器狗样本,它可以直接对文件操作,不需要感染。他可以在启动目录上拷贝一个文件,因为他是穿透还原去拷贝文件,所以重启后就无法被还原了。这里会有第三种攻击方法,passthrouh,它可以破坏磁盘数据。我们用Winhex看一下。攻击演示就做到这里。可以看到我们在对待第一、二、三代攻击都成功做到保护。

现在说一下GuardField原理,首先在启动时手机、挂钩还原系统的磁盘过滤驱动,监视磁盘IRP发送。之后我们挂钩底层磁盘设备,监视磁盘IRP达到,如果数据结构里没有磁盘IRP,我们就认为磁盘IRP没有经过还原系统到达下层。我们首先对系统做一个检查、修复,检查之前保存的磁盘过滤设备链有没有被摘除,如果摘除了,我们恢复。然后会将这个信息发送到Ring3服务进程。我刚才说的第一种攻击手段,它以后读写都不会再成功了。后面请求的时候都会被还原系统拦截到。第二代虚拟磁盘方式,每次读写都穿透还原,所以每次穿透还原都会拦截掉。

我们挂钩还原系统在磁盘卷上的过滤驱动,进行收集IRP操作,下面还原系统在磁盘上的过滤驱动,然后在磁盘设备下层也会挂钩,GuardField分析IRP。

IRP监视回收,他不一定会发送到下层。可能在磁盘卷或者过滤设备上被取消或者直接完成掉,没有往下传送。数据始终保持在数据结构里没有被清除。Lofreelrp是用于IRP取消或者完成来释放的。他jmp ds_Plofreelrp。每次当IRP回收的时候,我们从数据结构里可以得到一个监视。

对抗passthrough,因为我们挂钩下层磁盘设备,TM都会使用passthrough这些指令,他是通过这些指令获取磁盘信息。分析passthrough请求包意图。拦截恶意攻击者的passthrough指令。

同时还结合传统反病毒技术,为什么还会使用传统反病毒技术呢?主要原因是Ringo攻击者同我们处在同一水平,除非阻止其进入RING0,不可能完全对其进行防御。GuardField使用方法,通过Mmloadsystemlmage函数。如果是一个已知的驱动的话,我们会阻止,最大可能乐观防止攻击者攻击。

还原系统未来趋势。我们现在有GuardField的保护,恶意攻击者肯定会开发出一些新的更新,对抗GuardField。他们可能会使用哪些手段,猜测主要有两方面:第一,更底层或者更新的磁盘读写技术,绕过磁盘IRP分析,直接写入磁盘。第二,针对GuardField本身的工具,对GuardField进行破坏、脱钩。我们发布之后,大概不到两天时间就有新的驱动出来,对我们 GuardField脱钩。

如何防御:更底层的磁盘读写监视。他们开发起来难度比较大,短期内没有办法形成比较大的规模。GuardField这套系统如果有一定时间可以进行修改的话,还是可以用现有系统兼容,对磁盘底盘操作进行监视。我们知道atapi.sys IRP还是存在的,对这一层做hook。

针对第二种方法脱钩,可以适量的自我保护、恢复。就我个人来看,针对性攻击不足为惧。如果攻击者对防御者产生一些针对性攻击,等于攻击者容易落入一个被动捱打的局面。如果已经到脱钩了,说明攻击者已经比较穷了。还原系统在软件方面的对抗应该是没有止境的。有什么问题大家可以问。

以下是现场问答部分:

问:我给郑文彬补充一些数据,根据权威部门统计,盗号70%是来自网吧。而网吧几乎100%安装了还原设备。刚才郑文彬也介绍了还原设备的攻防。其实还原系统是很重要的一块。

问:我想请问一下您刚才介绍的还原系统软件原理、实现方法,能不能介绍还原卡硬件的原理?

郑文彬:对于还原卡来说,一般有两种。现在市面上的还原卡都不是真正的硬件上的还原卡,他们使用技术就是PCI设备,可以在OS启动之前获得控制权,在OS无整个过程中监控磁盘读写,但是实质上是通过磁盘驱动监视。应该国外有一些硬盘磁盘设备监控磁盘IO端口,在IDE接口上做一些保护。但是这种硬件还原产品至今我没有看到。主要还是采用软件方面保护。

问:你的意思是你看到还原卡本质还是软件还原设备?

郑文彬:用PCI就可以比磁盘的OS启动的更早。

问:那就是说PCI还原卡是忽悠人的?

郑文彬:它的好处就是可以更早的监视。像一些纯软件的还原卡,如果在DOS下攻击的话,应该是没有办法的。

主持人:感谢文彬给我们带来的精彩演讲。下面还是茶歇时间。

原文地址:http://tech.qq.com/a/20080320/000261.htm

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • php websocket class,server.php
  • 腾讯李旬保:WASL-Web应用安全的思考
  • java哈希映射干什么的,java 弱哈希映射表WeakHashMap原理
  • Java多线程Jdbc,java - jdbctemplate.batchupdate是多线程还是并发? - 堆栈内存溢出
  • 微软禇诚云:软件安全漏洞与软件开发
  • php怎么将二维数组倒置,如何在PHP中旋转二维数组90度
  • php小项目实例试题,lamp小项目实施题目及参考答案
  • 中移动为何惧怕Nokia和iPhone
  • 男人30学php,科学网—男人30岁之前要学的16件事 - 刘石泉的博文
  • php动态远吗怎么修改,PHP动态修改GD库扩展问题
  • 猫扑视频未被处罚,此猫扑非彼猫扑
  • php解json字符串,如何解码PHP中的JSON字符串?
  • 吴石:几种软件缺陷的可能利用方法
  • oracle表如何用函数,利用函数返回oracle对象表的三种方法
  • 吴鲁加:企业如何进行数据安全防御
  • 分享的文章《人生如棋》
  • 【刷算法】从上往下打印二叉树
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Java 最常见的 200+ 面试题:面试必备
  • java2019面试题北京
  • Java多线程(4):使用线程池执行定时任务
  • 编写符合Python风格的对象
  • 电商搜索引擎的架构设计和性能优化
  • 简单基于spring的redis配置(单机和集群模式)
  • 开源SQL-on-Hadoop系统一览
  • 判断客户端类型,Android,iOS,PC
  • 前言-如何学习区块链
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 我有几个粽子,和一个故事
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #java学习笔记(面向对象)----(未完结)
  • #pragma data_seg 共享数据区(转)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (c语言)strcpy函数用法
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Scala的“=”符号简介
  • (转)Sql Server 保留几位小数的两种做法
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .NET 8 跨平台高性能边缘采集网关
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core + vue 搭建前后端分离的框架
  • .net分布式压力测试工具(Beetle.DT)
  • .net与java建立WebService再互相调用
  • .NET中使用Protobuffer 实现序列化和反序列化
  • ??myeclipse+tomcat
  • @property python知乎_Python3基础之:property
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • @在php中起什么作用?
  • [Android] Implementation vs API dependency
  • [Android]如何调试Native memory crash issue