论文部分内容阅读
摘要分析了Windows操作系统多线程计算环境下存在的安全威胁和安全需求,研究了针对远程线程注入的线程“白名单”防护技术和保证应用软件可靠运行的线程安全监控技术。能够防止木马程序利用远程线程注入技术对应用软件进行破坏和窃密,建立“主动防御”的管控系统,具备计算资源自保护、自恢复的能力,使系统可靠有效运行。实验表明,这种技术实现的线程安全防护与管控效果明显。
关键词线程安全;线程管控;线程注入;计算资源管控
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2014)11-0049-02
受国家信息产业基础薄弱的制约,大部分服务器和终端操作系统均使用国外商用产品,各类“漏洞”和“后门”带来了隐患,安全防护不得不依靠外围打补丁的方式,无法从根本上消除操作系统的不安全因素,国家颁布的计算机信息系统安全保护条例已把计算机操作系统的安全列为核心要求。目前终端和服务器使用采用的操作系统都支持多任务操作,多线程技术已经在软件系统开发中得到了相当广泛的应用,尤其是随着多处理器计算机的大规模部署,并发多进程之间的并行通信和同步,都需要多线程来解决。
在这种情况下,线程作为操作系统独立调度和分配的最小单位,有必要对其存在的安全隐患进行深入分析,明确安全防护需求,并研究相关安全防护技术手段,为计算环境安全可靠提供支撑,保障应用软件的安全稳定运行和业务处理的正常开展。
1安全需求分析
计算环境线程级的安全防护需求体现在两个方面,一是安全防护,二是安全管控。包括以下几点内容。
1)对应用软件系统进行加固,形成线程“白名单”,防止木马程序利用远程线程注入技术对应用软件进行破坏和窃密。
木马是危害计算机安全并导致严重破坏的恶意程序,其重要特点就是隐身,采用伪装方法欺骗用户。隐藏技术一直是木马设计者研究的重要技术,目前最新的隐身技术就是利用远程线程注入技术,通过特殊的内核编程手段,将自身注入到目标进程的内存地址空间。这样,一方面实现了自身代码的隐藏,另一方面拥有了目标进程的权限,可以任意实施对进程的破坏,如盗取密码、删除并破坏文件、获取机密信息等。木马使用的这种远程线程注入[4]技术不会生成一个新的进程,也不形成服务,用查看进程的方式无法找出木马的踪迹,现有的安全防护软件也很难对其进行查杀。鉴于以上安全威胁,应该建立针对远程线程注入技术的防护手段,对应用软件系统进行加固,形成线程“白名单”,只允许指定进程执行合法的线程,阻断非法线程访问,防止对应用软件的破坏和窃密。
2)对操作系统中各线程的运行状况进行实时监控,防止因木马等恶意软件产生大规模多线程访问耗尽计算资源,而导致应用系统和操作系统崩溃,并对异常进程采取相应的管控措施,使系统可靠有效运行。
目前软件系统开发已经广泛使用了多线程技术[1],能够实现在单个进程的执行中使用多个线程,同一个进程可以在不同的处理器上同时执行,服务器进程可以使用多个线程处理多个用户同时发出的请求。在这种情况下,软件系统的复杂性也增加了用户程序的不可靠性。应该建立“主动防御”的管控系统,具备计算资源自保护、自恢复的能力。重点解决当计算资源濒临耗尽时,启动自保护机制,限制应用对资源的占用;当应用程序运行异常时,启动自恢复机制,重新分配计算资源,确保应用运行可靠。
目前有一些工具也提供了安全监控的功能,如微软操作系统自带的性能监视器和任务管理器,但这些工具仅提供操作系统的相关性能信息,是系统级的监视工具,只能监控某个具体的应用程序进程级使用的系统资源情况,如CPU时间、内存使用和包含的线程数等。但对于监控某一个具体应用软件系统的运行状态来说,这点信息是远远不够的,很多数据并不能支撑对应用软件的性能分析。应该深入到应用软件系统中,实现软件线程级的细粒度监控,提供满足需要的监控数据。同时还要考虑监控手段既不影响软件系统的性能和效率,又能获取所需的信息。
2线程“白名单”防护技术方案
防护木马程序利用远程线程注入的思想是建立应用软件系统线程“白名单”,明确软件系统正常运行时的可信线程列表,通过实时检测,确保软件运行时只允许软件进程执行“白名单”内的线程,并拦截非法远程线程的注入执行。其技术方案示意图如图1所示。
图1软件线程“白名单”防护示意图
在各类应用软件进程正常运行的情况下,也就是没有被非法远程线程注入的情况下,枚举出当前进程运行时所加载的所有可信线程列表,称为线程“白名单”。线程“白名单”的建立是一个长期学习训练的过程,大部分软件所产生的线程是相对稳定的,但是随着运行环境的变化,进程中所加载的线程也会发生一定的变化,如软件运行了以前没有使用过的新功能,这些新功能所起的线程也属于可信线程的范畴,也应该添加到线程“白名单”中去。应用软件最终线程“白名单”的确立需要一定时间的学习和实验。
在指定应用软件运行时,通过对软件进程加载线程“白名单”实施加固,实时监测该进程当前所执行的所有线程,当发现“白名单”之外的非法线程企图启动时,使用线程阻断技术对其进行拦截,同时记录日志并立即向安全管理员告警。相当于为每个指定的应用软件安装了一个粒度到最小单位的线程级“防火墙”。
线程“白名单”安全防护方案中的主要技术难点是远程线程注入拦截技术[4]。通过研究分析,远程线程注入使用的最关键技术是利用Windows操作系统提供的一套公开API函数(包括CreateRemoteThread()[1]、WriteProcessMemory()等)[1]在目标进程中通过插入特定的代码来实现注入的功能。安全防护可行的方法是使用API拦截技术,自定义一系列伪函数用于替换Windows提供的API函数,一旦监视到指定API被调用,就强制转入到所注入的DLL中执行自定义伪函数,从而使得木马和攻击程序无法注入,无法隐藏。远程线程注入拦截系统框架如图2所示。
图2远程线程注入拦截系统框架示意图
3线程安全管控技术方案
应用软件线程安全管控主要实现三个功能。一是能够采集线程监控数据,如线程的创建事件、线程的状态、线程的存储区信息和线程的资源占用情况等;二是能够对监控数据进行分析和统计,对采集到的原始数据进行加工和分析,如排序、求最大值、最小值、平均值以及生成各种图表和报告等,发现不可靠因素所在;三是能够对进程占用的资源进行管控,在个别线程的CPU、内存利用率超过一定限值时立即向安全管理员告警,并在必要时根据系统资源占用率和软件的运行需要动态调整指定进程的资源占用率上限,保障重要应用软件的资源分配和可靠运行[3]。线程安全管控技术方案示意图如图3所示。
线程安全管控方案中的主要技术难点是计算资源控制技术,包括控制应用软件对计算机的CPU占用和对内存的占用。
内存占用控制层面的研究分析表明,在Windows操作平台上,一个进程占用的内存,可以根据类型区分为分页内存和非分页内存。在进程的内核态,两类内存同时存在;而在用户态,则只有分页内存,这意味着用户态的内存是可以交换出去的。这个机制为我们实现进程的内存控制提供了可行性。在i386体系中,内存可以分为物理内存和虚拟内存,正在运行的代码和使用的数据必须位于物理内存中,但是当它们“长期”不被运行或使用时,将会被操作系统自动交换到虚拟内存中(通常是硬盘),并在需要时将其重新交换进物理内存中,这个过程称为“压缩内存”。基于上述原理,应用软件内存占用控制可行的技术方案是强制将进程占用的一部分内存交换到虚拟内存(即硬盘)中,达到压缩内存的目的。然而,由于要保持进程的运行状态,进程内存中的部分数据仍需要使用,因此被交换的内存必然受到一定限制,只能交换出有限数量,根据当前测试数据约为当前应用软件进程占用总内存的50%。另外,被交换出去的内存在一段时间内将逐渐恢复到实际占用的数据,所以需要定时反复地压缩内存。需要注意的是:交换的内存越多,进程产生的缺页中断(即页面错误)次数也会越多,所以内存控制应该限定为合理的水平。
图3线程安全管控技术方案示意图
CPU占用控制层面的研究分析表明,在Windows的运行调度中,线程是基本单位,进程的CPU占用实际上是所有线程的CPU占用之和。Windows对进程的CPU占用量采取了百分比的表示方式,以下公式表示了在一个时间段内进程的CPU占用情况:
(内核态时间 + 用户态时间) / 时间段 / CPU数量
因此,要控制进程的CPU占用,必须要减少内核态和(或)用户态的执行时间,而要减少这些时间,标准的方法是调整线程优先级。优先级是线程调度的重要参数,优先级越低,线程越不容易被调度系统选中,占用的执行时间自然就会减少。但是线程优先级调整的控制效果是有限的,在很多情况下,即使最低的线程优先级仍然占用大量的CPU时间,不能满足实际的需要。应用软件CPU占用控制可行的技术方案是采用强制闪断线程技术,使指定进程的所有线程定时产生一次闪断,即在一个极短的瞬间暂停,然后迅速继续执行。该技术可以有效降低CPU占用,并能根据实际情况控制进程的CPU占用率减少到可容许的范围。根据试验数据(取样时间60分钟,CPU占用率控制目标为25%),指定进程CPU占用率控制误差范围在10%,如下表所示。
进程名 用途 原始CPU平均占用率(取样时间60分钟) 设置为低优先级后CPU平均占用率(取样时间60分钟) 强制线程闪断后CPU平均占用率(取样时间60分钟) CPU控制误差
AVScan.exe 病毒
扫描 53% 51% 27% 8%
Winrar.exe 文件
压缩 38% 38% 26% 4%
FileManager.exe 文件
加密 47% 45% 27% 8%
Wireshark.exe 网络
抓包 28% 27% 25% 0%
需要考虑的是,由于要不断地控制目标进程的CPU占用,那么控制者本身也将占用一定的CPU,如何均衡二者的关系,会是该技术的一个难点,需要在实现中观察并获取大量测试数据作为参考。
4结束语
本文提出了基于线程“白名单”防护技术和线程安全管控技术的线程级安全防护系统,能够对应用软件系统进行加固,防止木马程序利用远程线程注入技术对应用软件进行破坏和窃密;对终端和服务器应用软件系统中各线程的运行状况进行监视,建立“主动防御”的管控系统,具备计算资源自保护、自恢复的能力,使系统可靠有效运行,在实际应用中有着较为理想的效果。此外,在对计算资源的控制时,如何保证被控制软件系统的正常工作和稳定运行,是下一步重点研究的内容。
参考文献
[1]王险峰,刘宝宏.Windows环境下的多线程编译原理与应用[M].清华大学出版社,2002.
[2]张慧成,谢余强,王华.一种并行调试与监测分析软件的体系结构设计[J].计算机工程,2003,29(8):5-7.
[3]寇雅楠,李增智,王建国.计算机软件测试研究[J].计算机工程与应用,2002,38(10):103-105.
[4]雷校勇,黄小平.Windows RootKit技术原理及防御策略[D].开发研究与设计技术,2007(12):428-429.
[5]GREG H,JAMES B.RootKit:Subverting the Windows kernel[D].Boston:Addison Wesley,2005.
关键词线程安全;线程管控;线程注入;计算资源管控
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2014)11-0049-02
受国家信息产业基础薄弱的制约,大部分服务器和终端操作系统均使用国外商用产品,各类“漏洞”和“后门”带来了隐患,安全防护不得不依靠外围打补丁的方式,无法从根本上消除操作系统的不安全因素,国家颁布的计算机信息系统安全保护条例已把计算机操作系统的安全列为核心要求。目前终端和服务器使用采用的操作系统都支持多任务操作,多线程技术已经在软件系统开发中得到了相当广泛的应用,尤其是随着多处理器计算机的大规模部署,并发多进程之间的并行通信和同步,都需要多线程来解决。
在这种情况下,线程作为操作系统独立调度和分配的最小单位,有必要对其存在的安全隐患进行深入分析,明确安全防护需求,并研究相关安全防护技术手段,为计算环境安全可靠提供支撑,保障应用软件的安全稳定运行和业务处理的正常开展。
1安全需求分析
计算环境线程级的安全防护需求体现在两个方面,一是安全防护,二是安全管控。包括以下几点内容。
1)对应用软件系统进行加固,形成线程“白名单”,防止木马程序利用远程线程注入技术对应用软件进行破坏和窃密。
木马是危害计算机安全并导致严重破坏的恶意程序,其重要特点就是隐身,采用伪装方法欺骗用户。隐藏技术一直是木马设计者研究的重要技术,目前最新的隐身技术就是利用远程线程注入技术,通过特殊的内核编程手段,将自身注入到目标进程的内存地址空间。这样,一方面实现了自身代码的隐藏,另一方面拥有了目标进程的权限,可以任意实施对进程的破坏,如盗取密码、删除并破坏文件、获取机密信息等。木马使用的这种远程线程注入[4]技术不会生成一个新的进程,也不形成服务,用查看进程的方式无法找出木马的踪迹,现有的安全防护软件也很难对其进行查杀。鉴于以上安全威胁,应该建立针对远程线程注入技术的防护手段,对应用软件系统进行加固,形成线程“白名单”,只允许指定进程执行合法的线程,阻断非法线程访问,防止对应用软件的破坏和窃密。
2)对操作系统中各线程的运行状况进行实时监控,防止因木马等恶意软件产生大规模多线程访问耗尽计算资源,而导致应用系统和操作系统崩溃,并对异常进程采取相应的管控措施,使系统可靠有效运行。
目前软件系统开发已经广泛使用了多线程技术[1],能够实现在单个进程的执行中使用多个线程,同一个进程可以在不同的处理器上同时执行,服务器进程可以使用多个线程处理多个用户同时发出的请求。在这种情况下,软件系统的复杂性也增加了用户程序的不可靠性。应该建立“主动防御”的管控系统,具备计算资源自保护、自恢复的能力。重点解决当计算资源濒临耗尽时,启动自保护机制,限制应用对资源的占用;当应用程序运行异常时,启动自恢复机制,重新分配计算资源,确保应用运行可靠。
目前有一些工具也提供了安全监控的功能,如微软操作系统自带的性能监视器和任务管理器,但这些工具仅提供操作系统的相关性能信息,是系统级的监视工具,只能监控某个具体的应用程序进程级使用的系统资源情况,如CPU时间、内存使用和包含的线程数等。但对于监控某一个具体应用软件系统的运行状态来说,这点信息是远远不够的,很多数据并不能支撑对应用软件的性能分析。应该深入到应用软件系统中,实现软件线程级的细粒度监控,提供满足需要的监控数据。同时还要考虑监控手段既不影响软件系统的性能和效率,又能获取所需的信息。
2线程“白名单”防护技术方案
防护木马程序利用远程线程注入的思想是建立应用软件系统线程“白名单”,明确软件系统正常运行时的可信线程列表,通过实时检测,确保软件运行时只允许软件进程执行“白名单”内的线程,并拦截非法远程线程的注入执行。其技术方案示意图如图1所示。
图1软件线程“白名单”防护示意图
在各类应用软件进程正常运行的情况下,也就是没有被非法远程线程注入的情况下,枚举出当前进程运行时所加载的所有可信线程列表,称为线程“白名单”。线程“白名单”的建立是一个长期学习训练的过程,大部分软件所产生的线程是相对稳定的,但是随着运行环境的变化,进程中所加载的线程也会发生一定的变化,如软件运行了以前没有使用过的新功能,这些新功能所起的线程也属于可信线程的范畴,也应该添加到线程“白名单”中去。应用软件最终线程“白名单”的确立需要一定时间的学习和实验。
在指定应用软件运行时,通过对软件进程加载线程“白名单”实施加固,实时监测该进程当前所执行的所有线程,当发现“白名单”之外的非法线程企图启动时,使用线程阻断技术对其进行拦截,同时记录日志并立即向安全管理员告警。相当于为每个指定的应用软件安装了一个粒度到最小单位的线程级“防火墙”。
线程“白名单”安全防护方案中的主要技术难点是远程线程注入拦截技术[4]。通过研究分析,远程线程注入使用的最关键技术是利用Windows操作系统提供的一套公开API函数(包括CreateRemoteThread()[1]、WriteProcessMemory()等)[1]在目标进程中通过插入特定的代码来实现注入的功能。安全防护可行的方法是使用API拦截技术,自定义一系列伪函数用于替换Windows提供的API函数,一旦监视到指定API被调用,就强制转入到所注入的DLL中执行自定义伪函数,从而使得木马和攻击程序无法注入,无法隐藏。远程线程注入拦截系统框架如图2所示。
图2远程线程注入拦截系统框架示意图
3线程安全管控技术方案
应用软件线程安全管控主要实现三个功能。一是能够采集线程监控数据,如线程的创建事件、线程的状态、线程的存储区信息和线程的资源占用情况等;二是能够对监控数据进行分析和统计,对采集到的原始数据进行加工和分析,如排序、求最大值、最小值、平均值以及生成各种图表和报告等,发现不可靠因素所在;三是能够对进程占用的资源进行管控,在个别线程的CPU、内存利用率超过一定限值时立即向安全管理员告警,并在必要时根据系统资源占用率和软件的运行需要动态调整指定进程的资源占用率上限,保障重要应用软件的资源分配和可靠运行[3]。线程安全管控技术方案示意图如图3所示。
线程安全管控方案中的主要技术难点是计算资源控制技术,包括控制应用软件对计算机的CPU占用和对内存的占用。
内存占用控制层面的研究分析表明,在Windows操作平台上,一个进程占用的内存,可以根据类型区分为分页内存和非分页内存。在进程的内核态,两类内存同时存在;而在用户态,则只有分页内存,这意味着用户态的内存是可以交换出去的。这个机制为我们实现进程的内存控制提供了可行性。在i386体系中,内存可以分为物理内存和虚拟内存,正在运行的代码和使用的数据必须位于物理内存中,但是当它们“长期”不被运行或使用时,将会被操作系统自动交换到虚拟内存中(通常是硬盘),并在需要时将其重新交换进物理内存中,这个过程称为“压缩内存”。基于上述原理,应用软件内存占用控制可行的技术方案是强制将进程占用的一部分内存交换到虚拟内存(即硬盘)中,达到压缩内存的目的。然而,由于要保持进程的运行状态,进程内存中的部分数据仍需要使用,因此被交换的内存必然受到一定限制,只能交换出有限数量,根据当前测试数据约为当前应用软件进程占用总内存的50%。另外,被交换出去的内存在一段时间内将逐渐恢复到实际占用的数据,所以需要定时反复地压缩内存。需要注意的是:交换的内存越多,进程产生的缺页中断(即页面错误)次数也会越多,所以内存控制应该限定为合理的水平。
图3线程安全管控技术方案示意图
CPU占用控制层面的研究分析表明,在Windows的运行调度中,线程是基本单位,进程的CPU占用实际上是所有线程的CPU占用之和。Windows对进程的CPU占用量采取了百分比的表示方式,以下公式表示了在一个时间段内进程的CPU占用情况:
(内核态时间 + 用户态时间) / 时间段 / CPU数量
因此,要控制进程的CPU占用,必须要减少内核态和(或)用户态的执行时间,而要减少这些时间,标准的方法是调整线程优先级。优先级是线程调度的重要参数,优先级越低,线程越不容易被调度系统选中,占用的执行时间自然就会减少。但是线程优先级调整的控制效果是有限的,在很多情况下,即使最低的线程优先级仍然占用大量的CPU时间,不能满足实际的需要。应用软件CPU占用控制可行的技术方案是采用强制闪断线程技术,使指定进程的所有线程定时产生一次闪断,即在一个极短的瞬间暂停,然后迅速继续执行。该技术可以有效降低CPU占用,并能根据实际情况控制进程的CPU占用率减少到可容许的范围。根据试验数据(取样时间60分钟,CPU占用率控制目标为25%),指定进程CPU占用率控制误差范围在10%,如下表所示。
进程名 用途 原始CPU平均占用率(取样时间60分钟) 设置为低优先级后CPU平均占用率(取样时间60分钟) 强制线程闪断后CPU平均占用率(取样时间60分钟) CPU控制误差
AVScan.exe 病毒
扫描 53% 51% 27% 8%
Winrar.exe 文件
压缩 38% 38% 26% 4%
FileManager.exe 文件
加密 47% 45% 27% 8%
Wireshark.exe 网络
抓包 28% 27% 25% 0%
需要考虑的是,由于要不断地控制目标进程的CPU占用,那么控制者本身也将占用一定的CPU,如何均衡二者的关系,会是该技术的一个难点,需要在实现中观察并获取大量测试数据作为参考。
4结束语
本文提出了基于线程“白名单”防护技术和线程安全管控技术的线程级安全防护系统,能够对应用软件系统进行加固,防止木马程序利用远程线程注入技术对应用软件进行破坏和窃密;对终端和服务器应用软件系统中各线程的运行状况进行监视,建立“主动防御”的管控系统,具备计算资源自保护、自恢复的能力,使系统可靠有效运行,在实际应用中有着较为理想的效果。此外,在对计算资源的控制时,如何保证被控制软件系统的正常工作和稳定运行,是下一步重点研究的内容。
参考文献
[1]王险峰,刘宝宏.Windows环境下的多线程编译原理与应用[M].清华大学出版社,2002.
[2]张慧成,谢余强,王华.一种并行调试与监测分析软件的体系结构设计[J].计算机工程,2003,29(8):5-7.
[3]寇雅楠,李增智,王建国.计算机软件测试研究[J].计算机工程与应用,2002,38(10):103-105.
[4]雷校勇,黄小平.Windows RootKit技术原理及防御策略[D].开发研究与设计技术,2007(12):428-429.
[5]GREG H,JAMES B.RootKit:Subverting the Windows kernel[D].Boston:Addison Wesley,2005.