工业组态监控软件执行过程动态保护方法与流程

文档序号:11515250阅读:632来源:国知局
工业组态监控软件执行过程动态保护方法与流程

本发明涉属于工业控制领域和信息技术领域,特别涉及一种进程内存动态度量和内存增强保护方法。



背景技术:

随着工业化与信息化进程的不断交叉融合,越来越多的信息技术应用到了工业领域。目前,工业控制系统已广泛应用于电力、水力、石化、医药、食品制造、交通运输、航空航天等工业领域,其中,超过80%的涉及国计民生的关键基础设施依靠工业控制系统来实现自动化作业。工业控制系统已经成为国家关键基础设施的重要组成部分,工业控制系统的安全关系到国家的战略安全。

与此同时,由于工业控制系统广泛采用通用软硬件和网络设施,以及与企业管理信息系统的集成,导致工业控制系统越来越开放,并且与企业内网,甚至是与互联网产生了数据交换。也就是说以前工业控制系统在物理环境上的相对封闭性以及工业控制系统软、硬件的专用性将会被打破,通过互联网或企业内网将有可能获取相关工业控制系统较为详细的信息,再加上运营工业控制系统的企业安全意识普遍较差,这样就给敌对政府、恐怖组织、商业间谍、内部不法人员、外部非法入侵者等创造了可乘之机。

传统的信息安全技术比如病毒查杀、防火墙、入侵检测面对如今越来越隐蔽的病毒技术已经越来越难;即使是比较先进的静态白名单技术在面对诸如反射内存注入(rmi)的入侵方式也是无能为力;本发明是一种系统化的方法来防范包括反射内存注入在内的病毒攻击展现的防范方法。比较典型的例子有破坏伊朗核设施的网震病毒、入侵孟加拉国央行的木马病毒。



技术实现要素:

为了解决诸如rmi(reflectivememoryinjection,反射内存注入)这类绕过计算机文件系统以及以文件系统为基础的安全软件监控系统的木马病毒,采用在关键点对进程固有内存进行扫描验证以及对非法执行内存申请进行控制的方法。

rmi通过修改进程空间代码达到侵害目的,这种入侵方式运行的病毒代码不通过loadlibrary加载到内存,也没有实际的病毒文件载体存在,因此无论是病毒查杀还是白名单在加载时度量都无法将病毒阻止掉。

程序固有内存空间就是根据程序的可执行文件中模块正常加载到内存中占用的空间,区别于远程注入内存新申请的线程内存等空间。其计算方法根据进程内模块信息(模块在内存的起始地址、大小)来进行计算。如图1所示。

程序固有内存空间在程序加载之后是不允许改变的,衡量是否改变可以通过密码学原理采用hash值来度量,也就是在关键点计算每个模块的hash值,并与原始hash进行比较,两个hash值相等才视为程序没有被非法篡改。监视篡改行为是艰难的,通过篡改的结果来出发程序动态度量;比如配置文件被修改时触发程序度量(程序内存模块hash计算),一旦程序被修改就阻止程序继续运行或者发出报警信息。

在工业控制系统中远程代码注入也是不允许的,通过监控执行内存分配来进行控制。

本发明采用的技术方案为工业组态监控软件执行过程动态保护方法,第一、对于程序固有空间采用动态完整性度量方法进行度量,以保证程序完整性并在不被破坏的条件下运行,一旦发现程序完整性被破坏就发出报警,必要时结束程序进程;第二、对于非固有内存空间在内存分配环节进行阻止,防止远程代码注入;通过这两个环节,进程运行空间环境都有了监测和保护机制,保证进程在正确的状态下运行。示意图如图2所示:

步骤如下:

第一步、消除所有已知的基于内存的安全漏洞,确保被攻击面尽可能小;

第二步、确保操作系统的本地保护功能事实上是启用,使成功的基于内存的开发不可能;本地保护功能为dep和aslr。

dep是dataexecutionprevention的缩写,是一种基于软硬件技术的内存防护方法,能够在内存上执行额外检查以帮助防止在系统上运行恶意代码。dep有os软件技术也有evp硬件支持,新的amd和intelcpu支持evp技术。

alsr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,以及通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。alsr能够有效降低缓冲区溢出攻击的成功率,linux、freebsd、windows等主流操作系统都已采用了该技术。

第三步、使用进程内存动态检测技术和增强的内存保护技术来识别和阻止企图进行内存注入的侵害:在进程执行的关键节点进行进程内存的动态监测,及时预警、阻止危害行为的发生,如图3所示。

3.1在进程执行的关键节点进行进程内存空间检测,检测进程的内存hash值有无被修改;

3.1.1关键节点是指进程进行的可捕捉而又很重要的操作,这些重要的操作为修改注册表、非法查看配置文件、日志、关键业务文件等;

文件的查看拦截使用已有的节点安全软件dte功能即达到控制目的;在禁止的同时要触发进程内存检测。注册表修改拦截使用windowapi拦截技术,这个在节点安全软件上也有详细使用,需要拦截的api是regsetvalueex;将需要拦截的注册项存储起来;待这些api函数被使用时触发检测消息传送给检测服务函数。

dte是指增强的domain-type访问控制安全模型;dte根据主体所在域权限实现对型所属客体进行访问,如图4dte控制模型,首先文件打开进入openhook(process+user:file),openhook(process+user:file)对应权限属性domain-type:rwe,domain/域主题(进程+用户)集合以及type/型客体(文件)集合。

3.1.2进程内存空间检测:每个进程的内存hash在数据库中进行记录,检测时要对比数据库中的hash值是否有变动;每个进程都包含一系列的模块,包括程序本身和一系列dll;其枚举过程如下:

*使用函数openprocess打开进程;

*使用module32first/module32next遍历进程,每个调用获取到moduleentry32数据结构,其成员modbaseaddr/modbasesize标识模块在内存中的位置和大小,用于计算其hash值;szmodule/szexepath用于标识模块的名称和路径。对比库中已有hash值,如果不匹配则代表进程内存已经被改变,根据已有策略阻止进程运行或者发出预警;

3.2拦截windowsapi函数virtualallocex

病毒进行远程代码注入时要调用virtualallocex函数来为自己注入代码分配空间,这些被分配的代码是为新的线程和参数来分配的;如果能够识别/拦截病毒分配内存的行为,那么代码自然无法注入到新的线程里;如果病毒选择注入到进程固有空间,那么步骤3.1的进程空间动态度量技术发出预警甚至关闭受害程序。

当virtualallocex函数第五个参数是page_execute_readwrite时进行拦截,首先检测此进程是否在步骤3.1中允许动态修改代码的权限表中;如果不在直接拒绝;如果在则检测第二个函数参数地址是不是在进程固有空间中,如果第二个函数参数地址在进程固有空间在则允许,如果第二个函数参数地址不在进程固有空间则禁止;地址是否在固有空间参考步骤3.2.2来进行计算。

4、拒绝任何通过验证的白名单程序来安装程序的企图。

即使通过白名单验证的程序也不能安装新软件,安装了新软件也无法运行。

附图说明

图1为进程固有空间示意图。

图2为本方法的实施流程图。

图3为进程内存动态检测应用示意图。

图4为dte控制模型图。

图5为windowsapivirtualallocex拦截示意图。

图6为远程代码注入拦截流程图。

具体实施方式

1消除所有已知的安全漏洞:比如使用gs编译选项编译软件,尽可能消除缓冲区溢出漏洞;比如实现seh校验机制;及时打os补丁,升级软件到安全版本等等;

2确保操作系统的本地保护功能已经启用

2.1启用dep

在计算机属性--->系统--->性能能属性--->数据执行保护,打开dep设置;使操作系统、服务以及应用启用dep功能。

2.2使用启用alsr的操作系统

现在主流操作系统基本上都实现了alsr:openbsd、linux2.6.12及以后、windowserver2008、windows7、vista、windowsserver2008r2、macosx、ios4.3。

3实现进程内存空间动态度量和执行内存分配检测

3.1系统关键节点进行保护

3.1.1注册表修改通知

对系统注册表修改函数regsetvalueex进行拦截,对于关键的修改要通知系统服务程序进行对应程序的进程内存动态度量;拦截方法见virtualallocex拦截方法如图5所示。

3.1.2配置文件修改保护

使用dte访问控制模型对系统配置文件进行保护;如果配置文件受到攻击向系统发送消息进行进程动态度量;

3.1.3修改业务文件保护

使用dte访问控制模型对系统业务文件进行保护;对于业务文件受到攻击时要向系统发送消息进行进程动态度量;

3.1.4修改敏感文件保护

使用dte模型对系统敏感文件进行保护;对于敏感文件受到的攻击要向系统发送消息进行进程的动态度量;

3.2进程动态度量

3.2.1进程hash值计算

*使用函数openprocess打开进程;

*使用module32first/module32next遍历进程,每个调用获取到moduleentry32数据结构,其成员modbaseaddr/modbasesize标识模块在内存中的位置和大小,用于计算其hash值;szmodule/szexepath用于标识模块的名称和路径。对比库中已有hash值,如果不匹配则代表进程内存已经被改变,根据已有策略阻止进程运行或者发出预警;每个模块计算一个hash值并进行对比,任何一个模块除了问题都要进行预警或者结束进程;进程hash可以在进程启动时建立hash表来完成初始值的构建,或者使用pe文件进行进程hash值初始化,也可以使用扫描方式将所有hash计算好后存取来使用。本方法必须要和传统白名单方式结合使用。

3.2.2动态度量

系统收到步骤3.1传送来的消息后即可启动进程动态检查。通过计算进程每个模块的hash值并和存储在数据库初始化到内存中的hash值进行对比,任何一个模块出了问题都代表进程已经被篡改了。

3.2.3拦截virtualallocex

对于系统调用virtualallocex进行拦截,如果它在分配一个可执行可写的内存空间,将拒绝分配内存;内存属性使用其函数第五个参数是不是page_execute_readwrite来判断。如果待分配的内存位于程序的固有内存空间,也就是其在使用函数module32first/module32next找到的内存区域之内将允许内存分配。远程代码注入需要为注入的代码提供运行空间,包括线程空间和参数的空间;示意图见图6所示。通过拦截virtualallocex函数将使注入代码无法获得运行空间从而阻止其运行。选择拦截virtualallocex是因为结合进程固有内存完整性检擦可以覆盖进程环境空间,覆盖代码注入的存在基础。

4.拒绝任何通过白名单验证程序进行安装程序企图

即使通过白名单验证的程序也不能随便安装新的软件,安装后也无法运行。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1