姜 冲,董碧丹,李 宁,王潇茵
(中国航天系统科学与工程研究院,北京100048)
在操作系统的工作环境中,一方面由于计算机病毒及木马会通过提高权限来对系统实施攻击;另一方面用户违规运行的绿色软件而引发的软件恶意行为也会对主机性能甚至安全造成严重威胁[1,2]。
针对以上问题,本文提出一种Windows内核管理技术,该技术通过监控应用程序对操作系统内核API的调用,以管理应用程序名单的形式加强对用户程序级别的访问控制以及对非法用户程序的监控。该技术可以有效控制因管理员违规卸载软件 (特别是安全监控软件)以及普通用户违规使用绿色软件而造成的安全风险,作为一种安全性控制手段,在安全性要求较高的应用场景具有广阔的应用前景。
软件恶意行为是指具有 “正常使用目的”的软件在运行过程中,其漏洞或生产商恶意植入的后门被利用后产生的一种不可信的软件行为。应用软件作为信息系统的载体,其本身的漏洞、后门被利用后,将直接威胁到整个信息系统的安全性和可靠性。据统计,基于软件系统安全漏洞和预埋后门所形成的攻击占目前网络攻击的70%。
软件恶意行为主要是通过调用Windows系统API来实现,例如截屏、修改注册表、文件自我复制等功能,从而达到关闭安全软件服务、打开禁用的网络端口等目的,对系统安全产生潜在威胁。
定义1 恶意代码 (定义请参见参考文献 [3])具有极高的隐蔽性,能够通过嵌入代码的方式,在正常代码的执行过程中自动运行,使被嵌入代码的软件除正常使用目的之外,自身的缺陷、漏洞、后门被触发并利用,产生某种不可靠、不可信、不可控的软件行为,从而达到感染计算机,窃取、破坏目标数据的目的。传统意义上的恶意代码包括计算机病毒 (定义请参见参考文献 [3])、蠕虫、木马、Rootkit等。
定义2 受信申请:受信申请就是一段可执行代码,这段代码在可信的系统状态下被系统内核发放了一个可信密钥。
定义3 认证令牌:认证令牌本质就是一个包含了app和pid的元组,其中app是指用户申请的名称,pid是指该用户申请创建的进程ID。
认证令牌有以下特性:
依照令牌生成协议,伴随着用户进程的创建而生成;
每个进程的令牌都是唯一可识的,直到应用程序进程实例结束时失效;
只能由认证器 (见定义4)来生成;
只能被安全访问监控器读取并操作。
定义4 认证器:认证器是一个内核服务,该服务负责实现令牌发放协议,并负责创建并管理注册进程所用到的认证令牌。
现有的恶意行为检测技术按照分析过程的不同可以分为静态分析和动态分析。
静态分析技术是文件扫描即特征码检测。由于静态分析不用执行,运行速度较快,而且不会危害系统,因此成为恶意代码检测的主要手段。但静态分析技术严重依赖代码的反汇编结果,无法处理间接调用和间接跳转,容易受到一些混淆技术、代码加密的影响,而且由于特征码检测技术的局限性,静态分析技术对恶意代码的变形以及未知恶意代码的检测效果大打折扣,在恶意代码层出不穷的今天,这种静态检测方法的实用价值已经变得越来越低。
由于静态分析的缺陷,基于HOOK 技术的动态分析技术开始用于分析程序的执行过程[4]。动态分析技术主要通过对目标程序的特征码、API关系图以及指令序列等因素的分析,来发现恶意代码的异常的API调用,并终止该应用程序的执行。动态分析技术通过分析程序的执行流程,能更全面地监控程序行为,实现实时发现和实时拦截。但是动态执行的时间比较长,占用资源较多,如何高效实现在线监控是一个重要的问题。
无论静态检测技术还是动态检测技术,都是滞后、被动的防范恶意软件,无法做到高效的对众多最新的恶意代码实行实时监控的功能。本文所提出的管控系统能够在上述两种方法的基础之上取长补短,通过加固系统的自身安全性来防止恶意代码的破坏。
个人计算机的安全主要依赖于运行进程的稳定性以及操作系统内核对于程序的控制和管理。而由于操作系统内核对于允许执行的程序做了尽可能少的限制,这就使得恶意程序能够滥用系统资源。因此,一旦在计算机上出现恶意行为,它便可以成功的利用内核服务来达到它的目的。为了有效的防止恶意行为的感染,内核必须对用户程序进行分辨,将恶意行为和非恶意行为区分开来,并防止内核服务的误用[5]。
在主流的操作系统内核中,进程是基于可执行文件的名字、安装路径和PID 来判断的,然而,没有一种鉴别方法能够有效的将一个运行时进程与相对应的可执行代码相关联,而正是这些代码最终执行了那些篡改行为。
本文提出了一种新的管控模型,在这个模型中每一个用户程序必须在被注册并认定为可信进程之后才可以运行,认证和注册工作由一个认证进程负责,并与系统内核进行认证通信。本认证模型主要有以下两个功能:
(1)用户程序识别:用户程序需要提供一个用于识别的唯一识别码 (token),内核通过这个识别码和安全认证协议来识别和认证合法用户程序。非法用户程序由于没有唯一识别码,所以不能通过识别认证,并且这些用户程序的敏感操作会被监控和限制。
(2)用户程序监控:通过监控系统调用,加强对用户程序级别的访问控制,以及对非合法用户程序的监控。根据程序数值变量的取值范围,以及需要检查的运行时错误属性生成断言,以宏assert()的形式插入程序中。
根据系统模型,本文采用模块化的开发方法,将整个系统划分为多个不同层次的子模块,设计和构建基于内核管理技术的应用软件管控系统原型,如图1所示。
2.1.1 系统组成
本系统模型架构包括了3 个主要部分:受信注册器,认证控制器和安全监控器,这3个部分均不会对内核做任何修改。
受信注册器:受信注册器是负责给用户申请发放注册密钥,并在内核注册。用户申请通过密钥发放器来获取一个受信密钥,密钥发放器同时也会在存储器中存储一个相同的密钥以用来在运行时进行验证。
认证控制器:认证控制器负责应用程序刚刚启动时,对其进行合法性进行认证,并为合法应用程序产生一个token (令牌)。当用户应用程序要调用某一内核系统调用时,需提供token。安全访问监控器 (SAM)会通过验证token来判断用户应用程序是否有权限调用该系统调用的权限,防止经过伪装的恶意行为对系统进行破坏。token会在该应用程序的实例结束时失效。
图1 系统原型总体架构
令牌就是被认证器认证后的状态,是内核用来认证进程的。令牌是由认证器负责管理并可以被安全监控器来修改的。
监视系统 (SAM):SAM 是负责运行时的认证工作并拥有执行用户申请的权利。令牌被认证器持有之后,SAM就通过与认证器通过共享一个数据结构来实现监视功能。
2.1.2 系统的实现
传统的操作系统内核并没有预防恶意行为的设计,也没有在运行时区分恶意进程的功能。现有的用来对抗恶意进程的技术是行为分析。这个方法主要的弊端是最新的和变种的攻击行为可以绕过监控探测头,而本系统能够不依赖于软件行为来分辨恶意行为。
本系统能够对运行时的软件行为进行认证。认证过的应用程序的优先级较高,而未认证的则被阻止并被认为是潜在的恶意行为。这个认证机制能够将潜在的恶意行为与合法行为隔离开来。系统允许任何应用程序向内核服务注册,通过监控危险等级较高的内核调用来使隐藏的恶意进程在进入内核时就被发现。
系统会给每个合法应用程序都分配一个只有该程序和内核可用的密钥。当应用程序创建一个进程的时候,这个进程的密钥就会被用来向内核注册,当注册成功之后,内核服务就可以根据经过加密的哈希字符串来确认注册信息。经确认的进程就会由系统调用检测系统来分配相应权限。
这个模型是建立在内核代码和内存都是安全的假设之上。用户层的进程被注册后会被记入允许运行的白名单中,非白名单程序则被视为安全性不可知的程序,会引发不可信的软件行为,其中就可能存在潜在的恶意行为。通过本系统能够限制未注册的进程从而保证内核的安全。
系统运行流程如图2所示。
图2 系统运行流程
2.1.3 安全令牌生成协议
当应用程序进行系统调用时,本系统就能够用令牌来对其进行认证。这个令牌的使用使得程序的注册和认证被分离开来。所以,认证控制器只是在申请创建新的进程时起作用,监视器是在进程操纵系统资源时工作,并可以随时调用认证令牌。
令牌发放步骤如下:
(1)进程p向认证器发起一个申请来申请令牌。该进程必须详细说明申请的名称并提供给认证器。
(2)接受申请:
1)如果进程持有认证密钥那么认证器A 就会将它视作受信进程,反之就是恶意进程;
2)认证器会检测进程是否已经持有令牌,如果有,就是恶意进程;
3)认证器限制了认证申请数量,这样能够防止进程恶意的或者因漏洞而发起大量的申请破坏系统。另外认证器会检查申请数是否小于系统上限,如果检查失败,则是恶意的;
4)A 生成一个随机字符序列n并把它发送给p,而且A 还会为这个序列设置一个超时时限t。由于申请没有网络延迟因此t的值可以很小。t的作用在于如果用户进程被意外终止而无法进行认证时,系统就可以在超时后强制终止认证过程。
(3)P利用一个哈希公式h=hs(n,p.pid,k)产生了认证代码信息 (message authentication code,MAC),其中p.pid是指p的进程ID,k是它的密钥。
(4)认证超时后,A 立刻终止认证。如果p还在继续执行,那么他就会被终止。
(5)A 通过重计算MAC h’=hs(n,p.pid,k)。如果h=h’,那么就会发放一个令牌tk= (pid,p.app)(p.app就是进程名)。tk在p结束前有效。如果二者不相等则认为该进程是恶意的。
(6)tk存放在一个共享的数据结构中,称作令牌列表,这个数据结构只能在受信的内核中被认证模型所读取。
由于协议使用非对称加密算法来对密钥加密,不易受到中间人攻击或者复现攻击。而且系统对于用户认证申请的数量做了限制,不易受到拒绝服务攻击。
2.1.4 令牌存储
令牌列表是一个由注册器管理的数据结构。注册器只允许内核的认证功能对该列表进行读操作。操作系统中运行着大量的不同类型的软件 (尤其是多进程软件),因此令牌列表的大小可能增长的非常快。如果把令牌列表做成一个线性表结构那么运行效率会非常低下,这是因为令牌列表会在系统调用时被用来频繁的查找令牌。因此,应该使用二叉搜索树作为存储结构,将查找的时间复杂度降低到O(logn)。虽然二叉搜索树的插入时间大于线性表 (O(logn)相对于O(1)),但是,由于插入操作的频繁性要远低于查找操作,因此二叉搜索树是一种比较适合该需求的结构[6]。
二叉搜索树的数据结构如图3所示。
2.1.5 密钥管理
在进行认证之前,必须要为合法的应用程序生成并注册密钥。
图3 二叉搜索树节点结构
密钥必须在程序安装时在内核注册,并且写入到程序代码之中。为了防止密钥被可执行代码的静态分析功能所盗取,本系统限制了进程的读取功能。而且,安装后的密钥只与唯一的安装实例所结合,并且在该实例重新安装后失效。
密钥注册步骤如下:
(1)应用程序在首次运行的时候向注册器申请一个密钥;
(2)注册器会判断该进程是否被用户指定合法或者被认证器认证过,并判断该进程是否曾经注册过;
(3)如果认证通过,那么注册器就会生成一个密钥k并发送给该申请;否则,该进程被关闭并被认定为恶意;
(4)申请接受k并把它存放在自己的代码中。
在本系统下,任何应用程序都处于监控之下。当本系统模型安装之后,通过对安全令牌的认证结果的判定来放行或者限制应用程序的执行,对于因管理漏洞造成的安全隐患 (如普通用户违规运行绿色软件如chrome浏览器等可能携带的恶意程序)以及系统管理员账户下违规安装和卸载软件等潜在风险能够做到有效的监控。
由于本系统的认证功能是通过白名单形式进行过滤,因此存在误报率过高的问题。在对系统安全性要求相对较低的主机中,误报率会极大的影响系统工作效率和操作的便利性[8]。因此,在这种环境下需要在安全性和效率之间找到折衷点,分级名单管理策略是一个比较理想的实现方案。
2.2.1 分级名单管理目的
超过70%的病毒和木马是可执行文件,二者通过提高权限对系统实施攻击[7],因此通过对Windows内核API的划分归类来实现对应用程序的过滤监控,实现将属于不同类别操作的程序划归不同安全等级,在不同安全要求的环境下,限制相应等级的API的调用,可以在加强系统安全的同时提高系统运行效率,减少因管理漏洞而造成的安全隐患,降低IT 运维人员工作强度,有效提升目标系统的受控性和安全性。
2.2.2 分级名单管理原则
本系统按照安全等级将Windows内核API名单分为“高危”、“中危”和 “低危”三级。分级原则由操作系统所调用API不同功能所决定。
由于大多数恶意程序需要对相关文件进行修改,因此在保证正常应用程序运行的前提下,可以将需要调用系统写文件功能API的未知程序认定为高危级别;
木马、蠕虫等病毒需要经由计算机网络进行传播[9],因此需要进行网络操作的应用程序应当认定为高危级别;
恶意程序有可能对计算机本地文件进行访问[10],以获得相关信息,因此对文件的读操作应当认定为中危级别;
其它类型的操作可以认定为低危级别。
系统原型开发的操作系统平台为Windows XP Professinal SP3,开发语言为C++,开发环境为VS2010。
为了对比在使用和未使用本系统情况下内核运行效率,本文选用了常用的如read接口,以及不常用的如getpid接口等不同使用频率的共5个内核API进行统计,根据Profiler工具测试后得出统计结果如图4所示。
图4 系统效率对比 (纵轴时间单位为ms)
如图4所示,在使用本系统后,操作系统运行时间平均上升幅度低于5%,没有对运行效率造成明显影响,因此本系统在保证对软件的安全监控的同时,可以将系统的性能损失控制在可接受的范围之内。
软件的认证信息以令牌列表的形式存放在内存中,由于操作系统中的可执行软件数量非常多,在监控的过程中,需要对令牌列表进行非常频繁的检索和插入操作。因此,采用二叉搜索树的形式作为令牌列表的存储结构是一种比较理想的处理方式,可以将查找的时间复杂度降低到O(logn);虽然二叉搜索树的插入操作效率低于线性表,但是,由于插入操作的频繁性远低于查找操作,因此二叉搜索树可以满足系统对执行效率的要求。
如图5所示,当令牌数低于2000个的时候,检索所需时间低于50ms。一般情况下,操作系统同一时刻内所维护的进程数低于3000个,因此该令牌检索机制能够满足系统需求。而且在令牌数增加到20000 之后,检索时间仍然低于350ms,由此可见利用二叉搜索树实现的令牌检索机制能够保证将效率的损失控制在较低的水平。
本系统先后部署在某军工集团互联网环境与某军工集团工控系统。
图5 令牌列表检索时间 (纵轴时间单位为s)
在互联网环境中,本系统设置了包括了安全软件、财税软件、办公软件等大约40种受信软件的白名单,在不影响操作系统运行效率的同时能够有效拦截非受信程序的运行,显著的降低了运维人员的工作强度。
在工控系统中,本系统在保证系统安全的同时,能够为工控系统生成的数据文件提供有效保护,除工控系统外任何程序都无法读取、改写相关文件,加强了工控数据的保密性。
本文介绍了一种基于内核管理技术的应用软件管控系统,并采取模式化的设计方法开发系统原型,实现了对软件行为的管控。测试结果表明,该系统对32 位Windows XP Professional SP3操作系统具有良好的适应能力,可监控多线程的应用,能高效的工作,具有较强的鲁棒性,能够一定程度上解决病毒、木马等恶意代码对计算机系统造成的安全问题。由于本系统目前监控的对象是32位操作系统下的无保护的应用程序,如何对加壳后的软件行为进行有效的管控以及64位操作系统下的软件管控是下一步研究的重点。
[1]ZUO Liming,TANG Pengzhi,LIU Ergen,et al.Malicious code detection method based on behavior characteristic [J].Computer Engineering,2012,38 (2):129-131 (in Chinese).[左黎明,汤鹏志,刘二根,等.基于行为特征的恶意代码检测方法.计算机工程,2012,38 (2):129-131.]
[2]LIU Wei,SUN Qibo.Android platform malware behavior model research [J].Software,2012,33 (11):2113-2120(in Chinese).[刘伟,孙其博.Android平台恶意软件行为模式研究 [J].软件,2012,33 (11):2113-2120.]
[3]YANG Xiaohui,ZHOU Xuehai,TIAN Junfeng,et al.Novel dynamic trusted evaluation model of software behavior [J].Journal of Chinese Computer Systems,2010,31 (11):150-156 (in Chinese).[杨晓晖,周学海,田俊峰,等.一个新的软件行为动态可信评测模型 [J].小型微型计算机系统,2010,31 (11):150-156.]
[4]Dusi M,Crotti M,Gringoli F.Tunnel hunter,detecting application-layer tunnels with statistical fingerprinting [J].Computer Networks,2009,53 (1):81-97.
[5]Baiardi F,Maggiari D,Sgandurra D,et al.Transparent process monitoring in a virtual environment [J].Electronic Notes on Theoretical Computer Science,2009,236:85-100.
[6]Tian X,Cheng X,Duan M,et al.Network instrusion detection based on system calls and dataming [J].Frontiers of Computer Science in China,2010,4 (4):522-528.
[7]GUAN Yuntao,DUAN Haixin.Design and implementation of an automated malware dynamic analysis system [J].Journal of Chinese Computer Systems,2009,30 (7):1326-1330 (in Chinese).[管云涛,段海新.自动的恶意代码动态分析系统的设计与实现 [J].小型微型计算机系统,2009,30 (7):1326-1330.]
[8]Silvio Cesare,Yang Xiang.A Fast flowgraph based classification system for packed and polymorphic malware on the endhost[C]//Proceedings of the 24th IEEE International Conference on Advanced Information Networking and Applications,2010:721-728.
[9]Xuan Chaoting,John Copeland,Raheem Beyah.Toward revealing kernel malware behavior in virtual excution environments[C]//Springer,Heidelberg.RAID,2009:304-325.
[10]Hou YT,Chang Y.Malicious web content detection by machine learning [J].Expert Systems with Applications,2010,37 (1):55-60.