xuemiansha 发表于 2017-5-28 20:11:09

浅谈免杀技术

系统底层(Ring0 层)

现在病毒与反病毒都越来越深入系统底层。

软件是计算机中相对高层的,而硬件是底层的,越靠近底层拥有的权力就越大。

从计算机原理来说,计算机中有一个用于控制 CPU 完成各项功能的命令系统,它叫做 “指令系统”,指令系统将指令分为特权指令与普通指令。

只允许操作系统及其相关模块使用一些危险的指令(即绝大部分 特权指令)
普通的应用程序只能使用那些不会造成灾难的指令(即普通指令)

Intel 的 CPU 将特权级别分为 4 层,它们分别是 Ring0、Ring1、 Ring2 与 Ring3。

Windows 只使用其中的两个级别:
Ring0(底层,内核层,只供操作系统使用,但使用一定的方法编程可“操控”Ring0 层的指令)
Ring3 层(用户层,谁都能用)

既能实现安全的访问控制,又能降低系统的设计成本与复杂程度。

杀毒技术

第一代扫描技术 高度概括为“在文件中检索病毒特征序列”

第二代扫描技术的代表为“近似精确识别法”与“精确识别法”,还有“智能 扫描法”与“骨架扫描法”

智能扫描法(大量变异病毒出现之后提出的)
忽略检测文件中像 NOP 这种无意义的指令。
而对于文本格式的脚本病毒或宏病毒,则可以替换掉多余的格式字符(空格、换行符或制表符等)
由于这一切替换动作往往是在扫描缓冲区中执行的,从而大大 提高了扫描器的检测能力。

缓冲区
应用程序运行前都需要加载到内存中,而缓冲区就是系统向运行的程序分配的一块动态的内存空间。它存在的主要目的就是为了节省内存的开销,加快程序的运行速度。

内存扫描
病毒被加载到内存,就要开始执行一些可疑操作了!(杀软 内存扫描组件 根据内存中的特征进行查杀)
所以即使文件免杀成功,但不做内存免杀,在运行中仍然被杀。

行为监控
原理:需要虚拟机等技术,分析病毒木马的可疑操作,当新生成的木马按照某种顺序执行某一系列的可疑操作,也会被杀。

执行以下操作的程序,基本判定为典型的木马:
1)释放一些文件到系统关键目录中
2)修改系统设置使这些新释放的文件可以自启动
3)删除自身
云查杀
云查杀极具挑战性:以服务器为脑,以所有用户的机器为触角,“可信继承,群策群力”。
(1)可信继承
整个云的信任机制的结构:包含用户参与的信任评价体系、反病毒专业人员参与的样本分析信任体系、服务端自动判断信任体系、基于数字签名的认证信任体系等。
其中,顶端的信任体系是由数字签名、样本分析构成的,这些顶端的信任体系在用 户的机器上表现出来的形式就是“根可信进程”。所谓的“根可信进程”就是指可信进程链条的顶端,凡是由可信进程开启的新进程都被认为是可信的。
例:假如进程 A 是具有数字签名的根可信进程,那么它在被用户直接执行时就不会触发反病毒软件的任何操作 ,而且由 A 进程创建的新进程也会成为可信进程。
例:如果进程 B 是一个非可信进程,那么它在被用户执行时就会受到严密的监控,它在执行期间有什么敏感操作,其样本马上就会被提交给服务器处理。
(2)群策群力
云计算具有分布性,而病毒木马的感染也具有分布性。
病毒木马感染的速度越快、感染的面积越广,则被云查杀捕获到的可能性就越大。
只要其中某一台计算机上发现新病毒,那么它马上就会被提交到服务端,所有在云中的计算机就都有了查杀能力。
双引擎查杀 / 多引擎查杀 扫描的准确度比单一反病毒引擎高。
反病毒技术前沿

目前反病毒技术应用得比较广泛的是“主动防御”与“云查杀”这两项,而这两项技 术中最为强大的环节就在于“虚拟机扫描技术”。

代码仿真(Code Emulation)技术 (“文件流查杀”思想的鼻祖)
一种极强大的病毒检测技术,很好地实现了一个程序运行所需要的基本虚拟环境,原理是通过一个虚拟机环境来仿真 CPU 和内存管理系统从而可在虚拟机进行代码执行过程。
当杀软决定将某个程序放到虚拟机中运行:将可执行文件的内容读取到内存缓冲区,由仿真器中一个庞大的 switch() 语句对各个指令操作码逐一分析, 最后执行。
代码仿真技术比较消耗系统资源:同样的一个应用程序,如果在虚拟机中运行,其执行速度可能会降低到原来的几百分之一!但纵然降低到原来的几百分之一,也没什么感觉,所以这种奢侈的查杀技术才得以推广。

文件流查杀
虽不需要模拟一个虚拟环境来运行病毒,但是它需要让病毒被人为地主动运行,当病毒运行时它会分析病毒释放到内存中的代码,直到病毒本来的代码被完全还原后才进行查杀,因此这种扫描算法虽不需要耗费大量的系统资源,但是却十分被动!

基于神经网络的启发式分析
未来计算机、病毒、反病毒软件都智能化。已经有人尝试了用神经网络来检测计算机病毒。“基于神经网络的启发式分析”技术将来可能会与启发式分析及云查杀合为一体,从而产生出高识别率、小特征库且低误报的扫描器。
研究者已经成功地用经过训练的神经网络检测出了复杂的 EPO 病毒(Entry-Point Obscuring,入口点模糊技术,这种技术的唯一目的就是免杀,利用这种技术编写的病毒具有极强的反探测、反查杀及反删除能力)。

神经网络的缺点:需要数量巨大的样本病毒供其分析学习,现阶段,能力的提高不是很明显。
优点:病毒越多,它的查杀效果就越令人满意。
由此可见,神经网络的启发式分析是否能得到用户的认可并长期存在于市场中,还得看它最终“学习效率”的高低。

PE 文件 可执行文件结构

,例如大家常用的 Windows
2000、Windows XP 等都是 Win32 环境

PE(Portable Executable,可移植的执行体)是 Windows 操作系统下的 32 位运行环境(简称Win32) 自身所带的可执行文件格式。

“可移植的执行体”意味着此文件格式是跨 Win32 平台的:即使 Windows 运行在非 Intel 的 CPU 上,任何 Win32 平台的 PE 装载器都能识别和使用该文件格式,所以所有 Win32 下的可执行文件也都必须使 用 PE 文件格式。

PE 文件在Windows 系统下直接以二进制形式被系统加载执行,如 .exe、 .dll、.sys、.ocx 等都遵守 PE 文件结构的约定。

PE 文件是在 32 位操作系统中诞生的,且与 64 位系统中的可执行文件格式基本相同。

对于黑客/反病毒工作者来说,透彻了解 “PE文件格式”是非常重要的基本功。

PE 文件的结构:由5 部分构成

PE 文件的结构:DOS 文件头、DOS 加载模块、PE 文件头、区段表、区段。

PE作为 Windows 下的一个文件格式,加上两个与 DOS 相关的结构完全是为了兼容性问题。
如果程序在纯 Windows 环境下运行,则 DOS(即 MS-DOS,此为简称)文件头与 DOS 加载模块是根本用不上的。PE 加载器会根据 DOS 文件头中的最后一个标志跳过 DOS 加载模块, 直接转到 PE 文件头上。

PE 文件的基本结构(以十六进制方式显示)


PE 文件的基本结构(以十六进制方式显示)
1.DOS 文件头
整个程序以 DOS 文件头的 MZ 标志位开始

2.DOS 加载模块
DOS 加载模块的标志性字符串 This program cannot be run in DOS mode。
前两个几乎就是恒定不变的,差不多每个 Windows 程序的前面都是这样一些信息。

3.PE 文件头
以字母 PE 为开头的文件块 即 PE 文件头。
PE 文件头体积size的描述标记:由图中画了横线的问号(与左面的十六进制信息 E0 对应),十六进制的 E0 等于十进制的 224,由此也不难看出 PE 文件头的大小为 224 个字节(PE 文件头的标准size为 224 字节。该描述并不严谨,先忽略这个问题,后续会详细探讨)

4.区段表
区段表(节表):由 .text、.data .rsrc 组成
区段表相当于一本书的目录,想看哪一章哪一节按着目录标注的页数去找。
区段表还附加了一些很有用的属性:例如读写权限 区段大小等。
区段表使 PE 加载器能准确快速地加载相应的区段。

通过区段名称可以大体猜出来这个区段里包含了些什么信息,在整个程序中能起到什么作用等。因为 PE 文件里的区段名称都是有相应的约定的,如果被人为地修改了就没有任何意义了。

5.区段

免杀原理

功能正常+破坏特征(文件特征码,行为特征码)

特征码,总体来说就是一种只在病毒或木马文件内才有的独一无二的特征( 是一段字符,或是在特定位置调用的一个函数)

校验和,也是根据病毒文件中不同的区块计算得来。

4 aaaa
5 xxxx
6 bbbb
校验和为123

改为
4 aaaa
5
6 bbbb
校验和345

雨悸 发表于 2017-5-28 20:52:10

感觉免杀好难啊

小风 发表于 2017-5-29 20:04:16

大神辛苦了
页: [1]
查看完整版本: 浅谈免杀技术