操作行为的拦截方法及装置、存储介质、电子装置
技术领域
本发明涉及信息网络安全领域,具体而言,涉及一种操作行为的拦截方法及装置、存储介质、电子装置。
背景技术
相关技术中的安全防护方式,都是通过黑白名单或行为特征来拦截恶意操作。安全公司收集整理程序白名单,将确认为正常的程序特征建成白名单库,白名单中的程序被认为是可信的程序。同时收集各正规公司的有效数字签名,建立数字签名库,对具备正规公司签名的程序按可信程序处理。比如:操作系统本身的服务及程序因为具备微软公司的签名而天然被安全公司信任。
在白名单中的、或具有正规公司签名的可信程序,其“所有的行为”都将拥有不被安全软件拦截监控的权力,拥有最高权限。
相关技术在检测恶意操作时,检测的主体之一是静态文件。比如:当在一台装有安全系统的电脑中执行一个程序时,安全系统会检测被执行的程序文件,是否是合法的。如果是,则放行;否,则拦截。检测的主体之二是风险行为,包括:执行程序、创建打开及读写文件、加载驱动或动态库、上传下载等等。如果程序的行为并不具备危险性,则会被放过;如果程序的行为属于风险行为,则检测行为发生的主体,是否是合法的。实质上,第二种检测主体一旦匹配,又会回到上面所说的“静态文件”第一检测主体的检测流程。
检测的方法之一是:黑特征匹配。即,事前将恶意程序的特征提取,并存放在库中,再拿被检测程序的特征与库中的恶意特征作匹配,匹配成功则被认为是恶意程序,将被查杀;反之,则放行。检测的方法之二是:白特征匹配。即,事前将被保护机器中允许被执行的程序提取特征入库,再拿被检测的程序特征与库中的程序特征作匹配,匹配成功的被认为是正常程序,放行;匹配不成功的,将被拦截。
相关技术中的安全检测主体及检测方法存在以下缺陷:黑特征匹配需要事前曾经有收集到这种恶意程序的特征,才有可能入库,并提供检测依据。因此,对未知的、尚未收集到的恶意程序;或者本身就是可信的程序,只是被恶意利用时,都没有效果。此种检测是基于静态文件的,当一个可信程序被恶意控制后,变化的只是内存中的动态数据,对被控制的可信程序的静态文件,不会产生任何的改变与影响,也就不会被当前的安全技术手段所检测到。所以,无论是黑匹配还是白匹配,一旦可信的程序被控制作恶,都是当前安全技术无法解决的问题。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
本发明实施例提供了一种操作行为的拦截方法及装置、存储介质、电子装置。
根据本发明的一个实施例,提供了一种操作行为的拦截方法,包括:根据职责范围为行为主体分配操作权限,其中,所述行为主体包括以下至少之一:程序、设备、用户;根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为;在监测到所述行为主体在被恶意控制状态下在所述操作权限内发起所述操作行为时,拦截所述操作行为。
可选的,根据职责范围为行为主体分配操作权限包括:设置行为主体的第一操作权限,其中,所述第一操作权限是保证目标设备正常工作的基本权限;根据所述行为主体的职责范围为所述行为主体分配第二操作权限。
可选的,在所述行为主体为程序时,设置行为主体的第一操作权限包括:设置所述行为主体的以下第一操作权限:不允许自动运行,只能由用户手动运行;只允许操作自身创建的或与自身一起由同一安装包直接或间接创建的文件;对系统文件仅有只读的权限;不允许读写非系统的文件;不允许访问内外网络及网内节点;不允许对其它进程进行操作;不允许绕过系统直接读写磁盘;不允许下载或执行其他程序;不允许加载驱动。
可选的,根据所述行为主体的职责范围为所述行为主体分配第二操作权限包括:在所述行为主体为程序时,确定所述程序所属的程序类型,为所述程序分配与所述程序类型对应的第二操作权限;在所述行为主体为设备时,确定所述设备所属的使用部门,为所述设备分配与所述使用部门对应的第二操作权限;在所述行为主体为用户时,确定用户的用户级别或身份类型,为所述用户分配与所述用户级别或身份类型对应的第二操作权限。
可选的,根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为,包括:确定所述行为主体在所述操作权限内发起操作行为;获取所述操作行为生成的内存序列;判断所述内存序列与预设标准流程是否匹配;在所述内存序列与预设标准序列不匹配时,确定所述行为主体被恶意控制,在所述内存序列与预设标准序列匹配时,确定所述行为主体未被控制。
可选的,判断所述内存序列与预设标准流程是否匹配包括:在所述内存序列中解析所述操作行为的当前执行者,判断所述当前执行与所述预设标准流程中的预设执行者是否相同;或,在所述内存序列中解析所述操作行为的任务流程,判断所述任务流程与所述预设标准流程的流程顺序是否相同。
可选的,根据内存序列监测所述行为主体是否被恶意控制包括:在系统执行以下监控任务时:创建进程、加载可执行映像、申请可执行内存、更改内存权限为可执行、监听端口、下载文件、新建文件、读写或更改受保护文件的数据或信息,采用HOOK的方式根据内存序列监测所述行为主体是否被恶意控制。
可选的,在根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为之前,所述方法还包括:判断所述操作行为是否逾越所述操作权限;在所述操作行为逾越所述操作权限时,拦截所述操作行为;在所述操作行为未逾越所述操作权限时,确定根据内存序列监测所述行为主体是否被恶意控制,并发起操作行为。
根据本发明的另一个实施例,提供了一种操作行为的拦截装置,包括:分配模块,用于根据职责范围为行为主体分配操作权限,其中,所述行为主体包括以下至少之一:程序、设备、用户;监测模块,用于根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为;拦截模块,用于在监测到所述行为主体在被恶意控制状态下在所述操作权限内发起所述操作行为时,拦截所述操作行为。
可选的,所述分配模块包括:设置单元,用于设置行为主体的第一操作权限,其中,所述第一操作权限是保证目标设备正常工作的基本权限;分配单元,用于根据所述行为主体的职责范围为所述行为主体分配第二操作权限。
可选的,所述监测模块包括:第一确定单元,用于确定所述行为主体在所述操作权限内发起操作行为;获取单元,用于获取所述操作行为生成的内存序列;判断单元,用于判断所述内存序列与预设标准流程是否匹配;第二确定单元,用于在所述内存序列与预设标准序列不匹配时,确定所述行为主体被恶意控制,在所述内存序列与预设标准序列匹配时,确定所述行为主体未被控制。
可选的,所述判断单元还包括:第一判断子单元,用于在所述内存序列中解析所述操作行为的当前执行者,判断所述当前执行与所述预设标准流程中的预设执行者是否相同;或,第二判断子单元,用于在所述内存序列中解析所述操作行为的任务流程,判断所述任务流程与所述预设标准流程的流程顺序是否相同。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,首先通过职责范围为行为主体分配操作权限,可以通过操作权限来拦截逾越权限的操作行为,利用设备或程序的后门与漏洞作恶、内部人员作恶,都将因为对其权限的控制而得到有效遏制,并且根据内存序列监测行为主体是否被恶意控制,防止利用行为主体的操作权限来作恶,可以拦截利用行为主体的恶意攻击,防止或减少系统被恶意控制的风险和造成的损失,解决了相关技术中设备安全性弱的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种操作行为的拦截终端的硬件结构框图;
图2是根据本发明实施例的一种操作行为的拦截方法的流程图;
图3是本发明实施例分配行为主体的权限的示意图;
图4是本发明实施例的构架图;
图5是本发明实施例通过操作权限进行管控的示意图;
图6是本发明实施例中正常的主机管理操作流程图;
图7是本发明实施例中漏洞攻击时的流程图;
图8是本发明实施例采用HOOK的方式监测行为主体是否被恶意控制的流程图;
图9是根据本发明实施例的操作行为的拦截装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在终端上为例,图1是本发明实施例的一种操作行为的拦截终端的硬件结构框图。如图1所示,终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述终端的结构造成限定。例如,终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的一种操作行为的拦截方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种操作行为的拦截方法,图2是根据本发明实施例的一种操作行为的拦截方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,根据职责范围为行为主体分配操作权限,其中,行为主体包括以下至少之一:程序、设备、用户;
本实施例的设备可以是电脑,笔记本,打印机,摄像头,U盘等可以接入网络或者是可以执行任务的电子设备,程序是可在设备上运行的软件或进程,用户即操作设备的用户,由于程序、设备、用户等都可以主动发起操作行为以执行任务,因此均可称之为行为主体。
步骤S204,根据内存序列监测行为主体是否被恶意控制,并在操作权限内发起操作行为;
行为主体在发起操作行为时,可以是主动发起的,也可以是被动发起,在被动发起时,可能是被其他设备或程序调用,也有可能是被恶意绑架或控制。
步骤S206,在监测到行为主体在被恶意控制状态下在操作权限内发起操作行为时,拦截操作行为。
通过上述步骤,首先通过职责范围为行为主体分配操作权限,可以通过操作权限来拦截逾越权限的操作行为,利用设备或程序的后门与漏洞作恶、内部人员作恶,都将因为对其权限的控制而得到有效遏制,并且根据内存序列监测行为主体是否被恶意控制,防止利用行为主体的操作权限来作恶,可以拦截利用行为主体的恶意攻击,防止或减少系统被恶意控制的风险和造成的损失,解决了相关技术中设备安全性弱的技术问题。
在本实施例中,根据职责范围为行为主体分配操作权限包括:
S11,设置行为主体的第一操作权限,其中,第一操作权限是保证目标设备正常工作的基本权限;
S12,根据行为主体的职责范围为行为主体分配第二操作权限。
在行为主体为程序时,设置行为主体的第一操作权限包括:设置行为主体的以下第一操作权限:不允许自动运行,只能由用户手动运行;只允许操作自身创建的或与自身一起由同一安装包直接或间接创建的文件;对系统文件仅有只读的权限;不允许读写非系统的文件;不允许访问内外网络及网内节点;不允许对其它进程进行操作;不允许绕过系统直接读写磁盘;不允许下载或执行其他程序;不允许加载驱动。
根据行为主体的职责范围为行为主体分配第二操作权限包括:在行为主体为程序时,确定程序所属的程序类型,为程序分配与程序类型对应的第二操作权限;在行为主体为设备时,确定设备所属的使用部门,为设备分配与使用部门对应的第二操作权限;在行为主体为用户时,确定用户的用户级别或身份类型,为用户分配与用户级别或身份类型对应的第二操作权限。本实施例中的用户可以根据用户级别或身份类型区分,如使用所在的职能部分进行区分身份类型,或者是根据使用人群的员工级别进行区别。如在确定公司的办公设备时,每个职能部门在单位中行使不同角色(如财务部分使用设备分配财务相关的操作权限,业务部门使用设备分配业务相关的操作权限,IT部门使用设备分配IT相关的操作权限等),在部门下面还包括下属机构时,如部门还包括小组或者团队时,可以进一步根据所在的下属机构进行区别。级别可以分为管理层,基层,管理层的访问权限可以设置的更大(如,部门经理的设备还包括访问部门下属员工的私人文件夹或桌面)。
本实施例通过对“用户、设备、程序”进行细致的“行为分权”管理,没有任何程序、设备或用户可以拥有全部权限,只能拥有其职责范围所对应的有限权限。也就是说,在实施例中,并不存在完全意义上的可信程序、设备或人员,每个程序、设备与人员都将进行权限检测,包括操作系统本身的程序与服务。下面分别对程序,设备,用户的权限分配进行说明:
对程序分配行为权限:
对运行在计算机上的程序进行分权(分配权限),比如:winword.exe,是微软Office套件中的word文档操作程序,此程序的功能是在用户的主动使用下,对特定的word文档进行编辑。
根据winword.exe的职责范围,首先,它是被动程序,即:用户主动打开,它才可以被动执行,并不可以自动在后台运行(被感染后的行为)、也不可以自动读写用户打开文档之外的文档(勒索者病毒的行为)。
其次,它是文档编辑类程序,并不可以去写可执行程序(感染可执行程序)、也不可以下载并执行另一个程序(漏洞攻击)。
现实中,Office程序的漏洞利用攻击非常多见,比如:乌克兰电网被攻击事件,就是黑客利用了Office程序中的漏洞,邮件附件中的Office文档在被打开后生成了一个病毒程序并执行起来,而这明显是远远超越了其原本应该拥有的权限,在行为分权模式下,这类问题将不会发生。
对设备分配行为权限:
一个网络系统中,会有多种设备存在,如,有服务器、有终端、有打印机、摄像头、传感器等等。
本实施例将对不同的设备分配其不同的行为权限,而同类设备因为不同的人在用、或在行使不同的职能,也会被赋予不同的行为权限。
震网病毒攻击伊朗核设施时,从终端机进入后,利用“RPC远程执行漏洞(MS08-067)”,实现了网内传播。当前现状就是如此,在大多数情况下,一旦一个点被突破,全网就此沦陷。
本实施例通过设备分权,则可以很好的解决此问题,即使突破了一点,也将被控制在单点之内,无法形成传播效果。
一般的终端PC设备,通常都不应该给予访问其它终端的权限;而有打印需求的终端,则只应该具备单向访问打印机的权限;网络管理员的终端,才有访问主机的权限,对其它终端设备,则具备有限的访问权限,权限可以根据需要再度的细分。比如:为保护隐私,设定为其不可以访问其它终端的数据类文档等。
而像打印机、摄像头等终端,则只具备被动连接权限,不具备主动访问其它任何网络资源的权限,利用硬件漏洞,让大量摄像头发起DDos攻击的美国西海岸大面积断网事件,在本发明下是不可能发生的。
对用户分配行为权限:
不同的用户应该具备不同的权限,而本实施例所说的用户权限是“行为权限”,与计算机系统中的用户权限并不相同。
首先,不应该有可以做所有操作的超级权限、超级用户的存在,即使是系统管理员,同样要受到权限限制。
系统管理员可以有远程连接主机并更改系统配置的权限,但其所有的操作仅限于对系统本身的操作,并都将被日志记录系统记录下来。
系统管理员并不具备清除安全日志的权限、不具备直接操作数据库、读写敏感数据的权限,当然,也一定不具备关停安全软件的权限(确有必要关停安全软件时需要申请)。
所有对数据的操作必须通过人机接口,由具备相应数据权限的部门中的人员操作,而他们对数据的操作权限分配,则由相应专业软件来实现。比如:财务人员可通过财务管理软件操作财务数据、销售人员可通过客户关系管理软件来操作客户数据。
在分权的管控下,即使中了木马或主机已经被控制,关键数据仍然不会损毁、泄露,甚至对内外勾结的作案,也可以有效防治。
现有技术中的网络攻击,都会伴随着超越正常权限的行为发生,而在本实施例的权限管理之下,所有的越权行为,都将被记录下来,并实时发送给安全运营人员,而越权行为的发生,则给了安全运营人员发现攻击的最佳机会。
现有的安全技术,检测的主体是程序本身,而对可信程序不做拦截的处理机制,导致了对利用可信程序作恶的攻击无能为力。而本实施例采取了更深层次的、更精细化的对内存中的动态数据“指令执行序列”进行检测,可以清晰的识别出可信程序是否处于不可信的状态中,从而从根本上解决了可信程序被控制作恶或可信程序本身出于某种利益驱使或政治目的而作恶的问题。
当前安全体系下的权限管理方式,直接导致了内部人员、内部设备、可信程序都拥有了超出自身职责范围的过高的权限,一旦这些本来可信的组件出现意外,如:被人控制、被人收买、账户丢失、口令被猜到、存在漏洞或后门、系统本身作恶、第三方可信程序作恶等等,就将导致崩溃式的后果发生,风险变得无限大且不可控。
本实施例中,则对当前所有可信的组件,进行精细的权限划分与管理,让任何设备、人员、程序都不再具备超出其职责范围的权限,不再有任何会导致失控的拥有过高权限的人、设备或程序存在。
这样,即使任一组件出现问题,也不会造成过大的危害,而风险也将被控制在最小程度。
图3是本发明实施例分配行为主体的权限的示意图,对各个行为主体(程序、用户、设备)分配对应的权限。
针对不同的网络,可以在不同的阶段对行为主体进行权限分配和设置。在企业级网络中,可在部署阶段,对行为主体进行收集、整理、设权、分权。同时,安全公司可以在公共白名单库的构建运营时,对公共程序做设权与分权操作。而在面向公众的个人安全业务中,可以在构建运营中心白名单库时,对白名单中的程序进行设权与分权。对于个人安全用户与设备,则可以做单一的严格权限设定,杜绝成为肉鸡或攻击发起者的可能。
本实施例的操作权限包括多种。其中,系统类权限,包括:程序自动运行、更改系统配置、访问其它进程、直接操作磁盘等等。文件类权限,包括:读系统文件、写系统文件、读非系统文件、写非系统文件、在系统目录创建文件、在自己目录创建文件、在临时目录创建文件、在其它应用目录创建文件等等。网络类权限,包括:访问内网同级终端、访问内网设备、访问内网主机的Web服务、远程连接主机、访问内网主机的其它端口、访问外网Web服务、访问外网的邮件服务、访问外网的文件服务、访问外网的其它端口等等。
权限分配时,针对不同的行为主体,分配操作权限也不同。用户与设备,在一个网络中数量是有限的,同时,环境的不同用户与设备的权限分配也不同,可以在部署阶段做针对性处理,也相对比较好处理。但运行其上的程序却是非常多且处于动态增加中,如何对程序进行设权与分权,则是最具挑战性的工作。针对程序,首先,有一个基本权限分配,这是全部的程序都具备的基本权限,绝大多数程序被限制在这个基本权限下时都可以正常工作,而这一组基本权限分配就可以解决大部分程序分权问题。其次,再根据不同的程序种类,赋予其更多的对应权限。最后,权限分配是赋予“某一类”程序某一组权限,并不是针对单个程序作操作,单个特殊程序的设权,可以在部署阶段,作为处理误报的手段,而不是常规手段。其中,基本权限包括:不可以自动运行,只能由用户手动执行;只可以全权操作自己创建的或与自己一起由同一安装包直接或间接创建的文件;对系统自身的文件仅有只读的权限;不可以读写非系统的文件;不允许访问内外网络及网内节点;不允许对其它进程进行操作;不允许绕过系统直接读写磁盘;不可以下载或执行另一个程序;不可以加载驱动;及其它更多的权限设定。分类权限,按程序、设备、人员的职责的不同,赋予以其特定的分类权限,比如:下载类程序要有连网权限、社交类程序要有监听端口的权限等。
图4是本发明实施例的构架图,网络构架包括:客户端、运营中心、服务端、F&C运维(运维中心),其中,
客户端:装在企业网用户的各个终端设备上;
运营中心:一个企业搭建一个运营中心,负责处理终端报上来的越权信息;
服务端:搭建在IDC机房或运营中心;
F&C运维:通常是由安全公司承担,实体在安全公司,通过互联网对各运营中心提供技术与情报的支持;
数据层,则保存各个行为主体的权限信息。
图5是本发明实施例通过操作权限进行管控的示意图,应用在上述网络构架。
在权限控制之后,系统的安全性将会大幅提高,但其中却仍然存在一个可被绕过的漏洞,即:如果攻击者控制了有权限的程序,去完成攻击行为。比如:winword.exe作为word文档的编辑器,显然是要拥有读写word文档的权限的,如果攻击者控制了winword.exe去窃取密级的word文档。本实施例的另一方面,通过内存指令执行序列检测是否被恶意控制。在某些场景下,可以通过区分某一操作行为是用户主动发起的,还是由程序自动进行的,进而确定是否被恶意控制。
在本实施例中,根据内存序列监测行为主体是否被恶意控制,并在操作权限内发起操作行为,包括:
S21,确定行为主体在操作权限内发起操作行为;
S22,获取操作行为生成的内存序列;
S23,判断内存序列与预设标准流程是否匹配;
S24,在内存序列与预设标准序列不匹配时,确定行为主体被恶意控制,在内存序列与预设标准序列匹配时,确定行为主体未被恶意控制。
可选的,判断内存序列与预设标准流程是否匹配包括:在内存序列中解析操作行为的当前执行者,判断当前执行与预设标准流程中的预设执行者是否相同;或,在内存序列中解析操作行为的任务流程,判断任务流程与预设标准流程的流程顺序是否相同。还包括调用接口,调用方向,调用对象等,判断与预设标准流程的是否相同。
由于系统中正常的操作行为对应的任务活动都有着清楚的流程规范,有着明确的任务发起方、参与方,有着清楚合理的调用流程。而这些,都是恶意攻击活动不具备的,或者与标准的预设标准流程不匹配。因此,本实施例通过“非白即黑”的判定,当发现某一操作行为的发起方、参与方、调用流程、指令执行序列中的任意一项或多项与正常的预设标准流程不同,不具备正当性时,则判定这是恶意的非正常任务启动,被恶意控制,系统处于被攻击状态。
在一个网络系统中,包括Windows\Linux等,都会有很多程序,但程序与程序之间,有着明确的分工,哪个负责什么任务都是固定的,同版本系统程序执行任务时的调用流程,也是固定不变的,而即使是不同版本的系统,其调用流程也是大同小异。而漏洞攻击则不然,攻击代码的首次执行一定是在存在漏洞的程序中执行的,而其调用流程,也一定是与系统调用流程不同的。本实施例使用这个原理,也有了发现漏洞攻击并实施防护的可能,重要的是这种方法对“未知漏洞”的利用攻击同样有效,而在此之前对未知漏洞的攻击利用并没有有效的发现方法及防护手段。
下面通过案例来说明正常任务启动与被攻击后启动的任务之间的区别。
案例一:
现实工作中,提供各种服务的主机,通常都部署在某地的中心IDC机房,而对主机的管理,一般都是技术人员通过远程操作来实现。
下面以在“正常主机管理”与“非法漏洞攻击”中都是最常见的任务“远程启动Shell程序cmd.exe”为例,来解释本发明的技术原理。
图6是本发明实施例中正常的主机管理操作流程图,在正常的主机管理操作时,通过系统提供的远程管理工具启动Shell时的流程。
下面是利用调试器获取的实际操作环境中任务执行时的调用栈,即在实际执行任务时,指令在内存中执行的序列:
当前进程:tlntsvr.exe
调用栈:
nt!NtCreateUserProcess
nt!KiSystemServiceCopyEnd
ntdll!ZwCreateUserProcess
kernel32!CreateProcessInternalW
kernel32!CreateProcessW
tlntsvr!CTelnetService::CreateSessionProcess
tlntsvr!CTelnetService::CreateClient
tlntsvr!CTelnetService::ListenerThread
tlntsvr!TelnetServiceThread
tlntsvr!CServiceModule::Run
tlntsvr!CServiceModule::_ServiceMain
sechost!ScSvcctrlThreadA
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart
启动的进程:
"C:\Windows\System32\tlntsess.exe"
当前进程:tlntsess.exe
调用栈:
kernel32!CreateProcessAsUserW
ADVAPI32!CreateProcessAsUserWStub
tlntsess!CShell::StartProcess
tlntsess!CShell::StartUserSession
tlntsess!CIoHandler::ProcessDataFromSocket
tlntsess!CIoHandler::OnDataFromSocket
tlntsess!CSession::WaitForIo
tlntsess!main
tlntsess!LsaFreeMemory
kernel32!BaseThreadInitThunk
ntdll!RtlUserThreadStart
启动的进程:
"C:\Windows\system32\cmd.exe"。
以上是在正常执行主机管理任务时的任务执行流程,及内存中的指令执行序列。
图7是本发明实施例中漏洞攻击时的流程图。图7是通过ms17-010漏洞(这个漏洞也是勒索者病毒Wannacry实际使用的漏洞,攻击方式、方法、流程、内存指令序列等来自于实际捕获的病毒样本),远程攻击主机并实现启动Shell的流程图:
下面是利用调试器获取的实际攻击环境中任务执行时的调用栈:
当前进程:spoolsv.exe
调用栈:
nt!NtCreateUserProcess
nt!KiSystemServiceCopyEnd
ntdll!ZwCreateUserProcess
kernel32!CreateProcessInternalW
kernel32!CreateProcessInternalA
kernel32!CreateProcessA
0x40028e
0x278fc50
启动的进程:
"C:\Windows\System32\cmd.exe"。
从“正常任务执行”与“攻击任务执行”的流程与调用栈对比可以发现,两者有着明显的不同,分别是:
任务的执行者不同:
同样是最终把cmd.exe启动了起来。但正常任务执行是由“系统专用的远程管理服务程序:tlntsvr.exe、tlntsess.exe”共同完成了任务的执行,其任务执行者是合理的、正当的。而漏洞攻击时任务执行者则是“打印机管理服务程序:spoolsv.exe”完成了任务的执行,这个任务执行者是不合法的、非正当的,之所以说是不合法的,是因为系统中每个服务或程序都有自己的工作分工。
spoolsv.exe是Print Spooler的进程,管理所有本地和网络打印队列及控制所有打印工作,spoolsv.exe没有任何启动Shell的理由,甚至spoolsv.exe就不应该具备启动任何程序的能力,在其导入表中,也根本就没有启动一个程序的相关API,一旦它启动了一个程序,那一定是非法的。
举例说明:
以公司的“仓库保安”应该如何保护仓库为例来说明执行者的正当性问题。
公司的“库管员”掌管着库房的钥匙,每次出库,也都应该是库管员打开库门,并把货物出库。
某天,小偷偷走了库管员的钥匙,然后准备打开库门搬空货物。
但“仓库保安”毫不犹豫的拦下了小偷。
为什么有钥匙仍然要被拦下?只是因为任务的执行者不对。
打开库门的任务就应该是库管员来做,其它人即使有钥匙,也要被拦下并严格检查。
同样的道理,远程启动Shell,只应该由对应的服务程序tlntsvr.exe、tlntsess.exe来完成,任何其它服务来启动都是危险行为将被拦下。
任务的执行流程不同:
从调用栈可以发现,正常的任务执行流程很完整、很清晰,每次调用都来自服务本身或系统API调用,从调用栈的各层指令执行序列中,可以清晰的看到每个服或程序中的各个关键环节、关键任务的启动与进行的脉络。
以下是对调用栈中每层调用的说明,从中可以看出当任务正常执行时,其指令执行序列是脉络清晰的。
为了方便观看,我来按指令的执行顺序来介绍,而不是按内存中调用栈的原有顺序(反序)介绍,且忽略了过度环节,只介绍其中的关键节点:
tlntsvr!CServiceModule::_ServiceMain→tlntsvr.exe服务本身启动
tlntsvr!CTelnetService::ListenerThread→创建监听线程等待连接
tlntsvr!CTelnetService::CreateSessionProcess→连接成功后创建tlntsess.exe进程
tlntsess!main→tlntsess.exe进程启动
tlntsess!CSession::WaitForIo→等待接收用户的任务指令
tlntsess!CShell::StartProcess→接到启动Shell指令后启动Shell
而漏洞攻击的调用栈,与正常调用相比,则有着极大的反差。只看到了来自异常内存地址(0x278fc50、0x40028e)对cmd.exe的启动(kernel32!CreateProcessA+0x66),除此外,没有任何调用流程,有着极其明显的溢出攻击特征。
举例说明:
一个与某国总统长相完全一样的人,来到另一国,自称是总统并要求获得特权待遇,行得通吗?行不通,因为一国总统访问另一国,有着严格的规范性的流程,绝不会因为你长的与总统一样甚至你就是总统本人,就可以得到总统的待遇。外交部门磋商、确认时间、确认议题、确认行程与随行人员、确认降落机场、确认接待人员等等,每个环节与流程都环环想扣,不可能跳过前面的所有环节,总统突然就出现在大门口要求进入。
系统任务也同样如此,任何任务都有特定的发起者、执行者及相对固定的、规范的调用流程及指令执行顺序,不可能前面的都不经过,突然就来到了最后一环。
案例二:
攻击者利用winword.exe的漏洞控制word程序来窍取密级的word文档。
从行为主体来看,是winword.exe程序要读取word文档,winword.exe有合法的微软公司的数字签名,且未被篡改;而winword.exe作为word文档的编辑器,又天然具备读写word文档的权限。
这种情况下,当前的安全技术是无法进行有效防护的,而本发明的第一技术点,也无法进行有效防护。
但当脱离静态文件级别的检测,进入到动态内存级别的检测时,就会发现,看起来完全相似的行为,在内存指令执行序列上,却完全不同。
下面这个是当用户正常操作打开一个word文档时,内存中的指令执行序列:
KERNELBASE!CreateFileW+0x1d1
kernel32!CreateFileW+0x4a
mso!Ordinal1362+0x615
mso!Ordinal1394+0x43f
wwlib!DllGetLCID+0x94ec4
wwlib!DllGetLCID+0xa1de6
wwlib!DllGetLCID+0x94522
wwlib!Osf::OSFCreateOfficeExtensionsDialogUser+0xfb02f
wwlib!DllGetLCID+0x326892
wwlib!DllGetLCID+0x17706f
wwlib!DllGetClassObject+0x2e77
wwlib!FMain+0x253
kernel32!BaseThreadInitThunk+0x12
ntdll!RtlInitializeExceptionChain+0x63
ntdll!RtlInitializeExceptionChain+0x36
而下面这个则是恶意程序控制winword.exe再打开一个word文档时,内存中的指令执行序列
Stack:
KERNELBASE!CreateFileW+0x35e
kernel32!CreateFileW+0x4a
ntdll!RtlQueryEnvironmentVariable+0x245
ntdll!LdrResSearchResource+0xa0d
ntdll!wcspbrk+0x415
ntdll!RtlUlonglongByteSwap+0x68f
KERNELBASE!LoadLibraryExW+0x233
KERNELBASE!LoadLibraryExA+0x26
kernel32!LoadLibraryA+0x31
kernel32!BaseThreadInitThunk+0x12
ntdll!RtlInitializeExceptionChain+0x63
ntdll!RtlInitializeExceptionChain+0x36
以清楚的看到,在内存中,两者有着明显的区别。经过了大量的验证,虽然控制一个程序的方法有很多种,但每一种都会形成自己独特的内存指令执行序列,没有任何一种是与正常的调用完全一样的。
只要提前采集到一些关键的正常操作时的内存指令执行序列的信息,再在有同一行为发生时进行匹配比较,就可以轻易发现目标主体是否被控制。
同时,也可以借此技术区分此行为是不是用户主动操作产生,因为用户主动操作也有着独一无二的内存指令执行序列。
在整体上,本实施例通过创建各系统正常服务的“权限与任务”行为规则特征白库,可以明确:“x系统+x版本+x服务”正常可以执行的任务、不可以执行的任务,同时采集并记录可执行任务的正常调用栈的关键节点,以做正当性匹配检查。
在部署时,对所运行于系统中的第三方程序,同样创建“服务权限与任务”行为规则特征白库,明确:“x程序+x版本”正常可以执行的任务、不可以执行的任务,同时采集并记录可执行任务的正常调用栈的关键节点,以做正当性匹配检查。
可选的,根据内存序列监测行为主体是否被恶意控制包括:在系统执行以下监控任务时:创建进程、加载可执行映像、申请可执行内存、更改内存权限为可执行、监听端口、下载文件、新建文件、读写或更改受保护文件的数据或信息,采用HOOK的方式根据内存序列监测行为主体是否被恶意控制。HOOK也叫挂钩,是计算机安全领域常用的一种安全监控技术方法,可以对一些关键的系统API(Application Programming Interface,应用程序编程接口)进行挂钩,当系统执行某一任务时,就会进入到HOOK处理流程中,可以在HOOK处理代码中对任务的正当性进行检测。比如:HOOK了系统API NtCreateFile,那么系统中所有的文件打开、创建操作,都将被截获,可以在HOOK代码中对文件打开创建操作的合法性进行验证,可以允许操作继续执行下去,也可以中断操作的执行。
本实施例通过内核驱动及R3层DLL,采用HOOK的方式,对系统敏感任务进行挂钩监控,比如:创建进程、加载可执行映像(R0&R3)、申请可执行内存、更改内存权限为可执行、监听端口、下载文件、新建文件、读写或更改受保护文件的数据或信息等等(可根据需要增加或减少监控点)。
在本实施例中,在根据内存序列监测行为主体是否被恶意控制,并在操作权限内发起操作行为之前,方法还包括:判断操作行为是否逾越操作权限;在操作行为逾越操作权限时,拦截操作行为;在操作行为未逾越操作权限时,确定根据内存序列监测行为主体是否被恶意控制,并发起操作行为。
当监控到任务执行时,对当前任务做白特征库匹配,首先判断此任务是否属于“当前正在执行任务的程序或服务”无权限执行的任务,即判断是否逾越操作权限,如果是则停止执行,并记录在案。如果此任务在“执行程序或服务”的可执行任务清单中,未逾越操作权限,则继续调用内存序列,判断任务调用栈,其关键节点是否与特征库中的正常调用栈相同,是否正当、合理、清晰,当发现调用流程异常时,则停止任务执行,并记录在案。图8是本发明实施例采用HOOK的方式监测行为主体是否被恶意控制的流程图。
由于任何攻击都是有目的的,而黑客要想实现自己的目的,就一定要有自己的后门程序进入,并获得执行权,或利用系统原有程序来实现自己的目的,所有需求都在攻击代码中实现,是完全不现实的。因此,在攻击过程中,一些行为(任务)就必然会发生一个或多个,如:文件下载(传输)、文件创建、加载执行、端口监听、反向连接等。区别之处在于,黑客会用各种冷门的方法来实现这些任务,但任务的实现方法,一定是可穷举的,并且数量很有限。
任务实现方法的多少,决定了HOOK的监控点的多少,目前已知的方法,绝不会超过20种,而新利用方法的出现频率是远远低于新漏洞发现的频率的,近几年并没有任何新的漏洞攻击方法出现,但去年一年就新增了几万的漏洞。所以,本实施例的方案,与漏洞的数量无关、与漏洞的位置无关、与漏洞是否已知无关,只与攻击技术相关。
可选地,上述步骤的执行主体可以为客户端或服务器等,客户端可以是移动终端,PC等,服务器可以是防火墙服务器,安全服务器等,但不限于此。在应用在服务器端时。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
实施例2
在本实施例中还提供了一种操作行为的拦截装置,可以是终端或服务器,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图9是根据本发明实施例的操作行为的拦截装置的结构框图,可以应用在客户端或服务器中,如图9所示,该装置包括:分配模块90,监测模块92,拦截模块94,其中,
分配模块90,用于根据职责范围为行为主体分配操作权限,其中,行为主体包括以下至少之一:程序、设备、用户;
监测模块92,用于根据内存序列监测行为主体是否被恶意控制,并在操作权限内发起操作行为;
拦截模块94,用于在监测到行为主体在被恶意控制状态下在操作权限内发起操作行为时,拦截操作行为。
可选的,分配模块包括:设置单元,用于设置行为主体的第一操作权限,其中,第一操作权限是保证目标设备正常工作的基本权限;分配单元,用于根据行为主体的职责范围为行为主体分配第二操作权限。
可选的,监测模块包括:第一确定单元,用于确定行为主体在操作权限内发起操作行为;获取单元,用于获取操作行为生成的内存序列;判断单元,用于判断内存序列与预设标准流程是否匹配;第二确定单元,用于在内存序列与预设标准序列不匹配时,确定行为主体被恶意控制,在内存序列与预设标准序列匹配时,确定行为主体未被控制。
可选的,判断单元还包括:第一判断子单元,用于在内存序列中解析操作行为的当前执行者,判断当前执行与预设标准流程中的预设执行者是否相同;或,第二判断子单元,用于在内存序列中解析操作行为的任务流程,判断任务流程与预设标准流程的流程顺序是否相同。
需要说明的是,终端和服务器仅是方案在执行主体上的差异,上述识别终端中的各个示例和可选方案同样适应在服务器中,并产生相同的技术效果。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,根据职责范围为行为主体分配操作权限,其中,所述行为主体包括以下至少之一:程序、设备、用户;
S2,根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为;
S3,在监测到所述行为主体在被恶意控制状态下在所述操作权限内发起所述操作行为时,拦截所述操作行为。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,根据职责范围为行为主体分配操作权限,其中,所述行为主体包括以下至少之一:程序、设备、用户;
S2,根据内存序列监测所述行为主体是否被恶意控制,并在所述操作权限内发起操作行为;
S3,在监测到所述行为主体在被恶意控制状态下在所述操作权限内发起所述操作行为时,拦截所述操作行为。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。