应用程序的漏洞检测方法和装置
技术领域
本发明涉及计算机互联网领域,具体而言,涉及一种应用程序的漏洞检测方法和装置。
背景技术
现有技术中用于实现Web网站动态内容的技术可以包括:通用网关接口(CommonGateway Interface,简称CGI)技术、超文本预处理器(Hypertext Preprocessor的缩写,简称PHP)等。
CGI可以根据用户输入的请求动态地传送HTML数据,使用CGI技术可实现电子商务网站、搜索引擎处理和在线登记等功能。现有的自定义的CGI脚本是由Perl,Java,C和C++等语言编写的,网站Web页面的设计者都需要控制网站web服务器,包括所需要的后台程序(如数据库)。
PHP是一种比CGI更快速的执行动态网页的通用的开源脚本语言,由于PHP是将程序嵌入到HTML文档中去执行,因此执行效率比完全生成htmL标记的CGI要高许多,而且所有的CGI的功能PHP都能实现。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。
PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,命令注入攻击Command Injection,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。下面我们结合PHP语言的特性,对PHP命令注入攻击进行简要的分析和描述。
PHP命令注入的漏洞攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。
针对现有的命令注入攻击,可以提供命令注入检测方案进行检测,主要包括黑盒检测和白盒检测。
黑盒检测:主要通过构造命令注入特征来全量扫描CGI,从匹配返回的结果的特征来判断是否存在漏洞,目前黑盒检测的效果主要依赖于扫描器的扫描深度、参数遍历深度和扫描速度。
白盒检测:主要通过分析代码的逻辑来发现代码是否存在漏洞,目前白合检测的效果主要依赖于代码审计软件的匹配模式和检测深度。
由于黑盒扫描器无法遍历所有的输入点,而白盒检测的审计系统也无法遍历所有的代码逻辑,因此,现有的用于监测命令注入攻击的方法存在漏报率高、误报率高的问题。而且开发一款黑盒扫描器或白盒审计系统周期长,难度大,开发后的运营成本也较高。
针对上述现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种应用程序的漏洞检测方法和装置,以至少解决现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的技术问题。
根据本发明实施例的一个方面,提供了一种应用程序的漏洞检测方法,该方法包括:记录应用程序运行过程中的执行命令;监控执行命令是否包含监控特征,其中,在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性;如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
根据本发明实施例的另一方面,还提供了一种应用程序的漏洞检测装置,该装置包括:记录模块,用于记录应用程序运行过程中的执行命令;监控模块,用于监控执行命令是否包含监控特征;回溯模块,用于在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性;确定模块,用于如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
在本发明实施例中,采用记录应用程序运行过程中的执行命令;监控执行命令是否包含监控特征,其中,在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性;如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞的方式,通过检测当前运行的应用程序的执行命令是否包括监控特征来确定该执行命令是否具有注入命令漏洞的潜在风险,由于在确定该执行命令具有注入命令漏洞的潜在风险之后,进一步通过回溯该执行命令的父进程是否具有命令注入漏洞的属性,从而确认当前执行命令存在命令注入的漏洞,因此,本申请提供了一种对具有命令注入漏洞风险的执行命令进行进一步的命令注入验证的功能,即对该执行命令已经具有的属性特征进行验证,从而确定该执行命令的最终性质。由于上述过程可以应用于应用程序运行过程中的每个执行命令,因此,整个操作遍历到了应用程序中的所有执行命令,而且每个执行命令所要验证的属性特征都是静态的,从而达到了大幅降低了监测命令注入攻击的漏报和误报的情况的目的,进而解决了现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的技术问题。本方案还可以改善现有的漏洞检测系统开发周期长,难度大,开发后的运营成本也较高的问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种运行应用程序的漏洞检测方法的计算机终端的硬件结构框图;
图2是根据本发明实施例一的应用程序的漏洞检测方法的流程图;
图3是根据本发明实施例一的基于PHP执行web应用程序的漏洞检测方法的详细流程图;
图4是根据本法实施例二的应用程序的漏洞检测装置的结构示意图;
图5是根据本法实施例二的一种可选的应用程序的漏洞检测装置的结构示意图;
图6是根据本法实施例二的一种可选的应用程序的漏洞检测装置的结构示意图;
图7是根据本法实施例二的一种可选的应用程序的漏洞检测装置的结构示意图;
图8是根据本法实施例二的一种可选的应用程序的漏洞检测装置的结构示意图;
图9是根据本法实施例二的一种可选的应用程序的漏洞检测装置的结构示意图;以及
图10是根据本发明实施例的一种计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明实施例,还提供了一种应用程序的漏洞检测方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种运行应用程序的漏洞检测方法的计算机终端的硬件结构框图。如图1所示,计算机终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的应用程序的漏洞检测方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的升级应用软件的处理方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图2所示的应用程序的漏洞检测方法。图2是根据本发明实施例一的应用程序的漏洞检测方法的流程图。
如图2所示,该应用程序的漏洞检测方法可以如下实施步骤:
步骤S20,记录应用程序运行过程中的执行命令。
本申请上述步骤S20中的应用程序可以是通过网站web访问的web应用程序,例如聊天室、留言板、论坛等用户只需要通过浏览器可以输入并操作数据的应用程序,不需要开发独立的软件或插件。
以PHP执行web应用程序为例,在PHP中,可以包含用于执行外部程序或函数的命令执行函数,命令执行函数的主要作用是可以通过命令执行函数与Web应用程序进行交互,即可以通过Web应用程序执行外部程序或系统命令。
例如,PHP可以通过System函数来执行一个外部的web应用程序并将相应的执行结果输出,函数原型如下:string system(string command,int&return_var),其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。
优选地,在执行上述步骤S20记录应用程序运行过程中的执行命令之前,还可以执行安装用于记录应用程序运行过程中的执行命令的命令记录系统。
由此,本申请上述步骤S20可以通过在作为主机的计算机终端10上安装命令记录系统,来记录php执行web应用程序的过程中的执行命令,上述命令记录系统可以通过修改linux中对动态库加载优先顺序来截获用户执行的命令,例如:开源项目snoopy logger中实现的抓取执行命令的方法。
此处需要说明的是,上述命令记录系统可以记录主机计算机终端的所有执行命令,也可以只记录php执行web应用程序过程中的执行命令。具体选取那种方式可以根据运营环境的需求决定,只记录php执行的执行命令,可以减少采集和分析的数据量,减轻系统运行负载。例如,在记录系统记录php执行的所有执行命令时,记录的内容和格式如下表1:
表1:
字段名 |
内容 |
字段说明 |
pid |
28568 |
进程pid |
ppid |
19079 |
父进程pid |
args |
cat/etc/passwd |
命令 |
fatherProcess |
php-fpm |
父进程 |
步骤S22,监控执行命令是否包含监控特征。
本申请上述步骤S22中的监控特征是指用于表征当前的执行命令是否具有命令注入风险的参数特征,可以包括如下类型:查看主机密码文件、查看主机配置文件、测试网络通畅等,例如用户查看主机密码文件(登录访问)时的参数特征:cat/etc/passwd。
此处需要说明的是,监控特征可以事先进行制定并保存。例如可以以数据表的形式进行记录,所有监控特征的集合可以构成一个黑名单命令集合进行保存。
步骤S24,在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性。
本申请上述步骤S24中的命令注入漏洞的属性可以是当前执行命令的父进程本身所包含的一些内容和格式上的特征,其中,特征的类型可以包括:字符值、参数值等,例如,格式特征可以是命令分隔符,命令分隔符包括:;|&)等,内容特征可以是父进程所包含的监控特征的数据,监控特征可以是:cat/etc/passwd。
步骤S26,如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
由于命令注入漏洞的属性也是预先设定的,因此,上述步骤S26确定当前执行命令是否存在命令注入的漏洞可以根据实际漏洞的变化而进行调整,灵活性较高且保证了准确性。
此处需要说明的是,在应用程序执行命令的过程中,需要接收外部变量作为命令或参数,在攻击者控制外部变量欺骗当前应用程序执行任意的系统命令时,这种漏洞称之为命令注入,如果应用程序是PHP,那么称之为PHP命令注入。目前命令注入漏洞多存在于WEB CGI程序,HTTP协议的各个参数均可能是恶意参数传入源。
本申请上述实施例一提供的方案,通过检测当前运行的应用程序的执行命令是否包括监控特征来确定该执行命令是否具有注入命令漏洞的潜在风险,由于在确定该执行命令具有注入命令漏洞的潜在风险之后,进一步通过回溯该执行命令的父进程是否具有命令注入漏洞的属性,从而确认当前执行命令存在命令注入的漏洞,因此,本申请提供了一种对具有命令注入漏洞风险的执行命令进行进一步的命令注入验证的功能,即对该执行命令已经具有的属性特征进行验证,从而确定该执行命令的最终性质。由于上述过程可以应用于应用程序运行过程中的每个执行命令,因此,整个操作遍历到了应用程序中的所有执行命令,而且每个执行命令所要验证的属性特征都是静态的,从而达到了大幅降低了监测命令注入攻击的漏报和误报的情况的目的,进而解决了现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的技术问题。本方案还可以改善现有的漏洞检测系统开发周期长,难度大,开发后的运营成本也较高的问题。
在本申请提供的一种可选实施例中,上述实施例中的步骤S24实现的回溯执行命令的父进程是否具有命令注入漏洞的属性,如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞的步骤可以包括如下实施方案:
步骤S241,扫描该包含有监控特征的执行命令的父进程。
该步骤S241中的执行命令包含有监控特征,则标识该执行命令具有注入命令漏洞的风险,从而进入进一步验证其是否存在命令注入的漏洞。
步骤S243,判断执行命令的父进程是否具有多命令集合且包含监控特征的属性。
上述步骤S243中,多命令集合表征该执行命令的父进程具有至少两条运行命令,由于多条运行命令之间需要通过分隔符的格式进行划分,因此,可以通过验证该执行命令的父进程是否命令分隔符(分号等)来确定是否具有多命令集合。
另外,上述父进程所包含的监控特征可以与执行命令(即父进程的子进程)所包含的监控特征相同,例如cat/etc/passwd。
步骤S245,如果父进程为多命令集合且包含监控特征,则确定执行命令存在命令注入的漏洞。
由此可知,上述步骤S245的一种示例中,如果监测到上述具有命令注入漏洞风险的执行命令的父进程中包含命令分隔符(分号等)和cat/etc/passwd,则该执行命令存在命令注入的漏洞。
此处需要说明的是,上述步骤S241至步骤S245实现方案适用于上述命令记录系统记录php执行命令的场景中。由于在命令记录系统记录php执行命令时,在命令记录系统中已经对命令做了过滤,只记录php执行的命令。因此,此处只需要判断当前执行命令的父进程的属性特征即可。
在本申请提供的另外一种可选实施例中,上述实施例中的步骤S24实现的回溯执行命令的父进程是否具有命令注入漏洞的属性,如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞的步骤可以包括如下实施方案:
步骤S242,扫描执行命令的父进程。该步骤S242中的执行命令包含有监控特征,用于表示该执行命令具有注入命令漏洞的风险,从而进入进一步验证其是否存在命令注入的漏洞。
步骤S244,判断执行命令的父进程是否具有多命令集合且包含监控特征的属性。
上述步骤S244中,多命令集合表征该执行命令的父进程具有至少两条运行命令,由于多条运行命令之间需要通过分隔符的格式进行划分,因此,可以通过验证该执行命令的父进程是否命令分隔符(分号等)来确定是否具有多命令集合。
另外,上述父进程所包含的监控特征可以与执行命令(即父进程的子进程)所包含的监控特征相同,例如cat/etc/passwd。
步骤S246,如果父进程为多命令集合且包含监控特征,则需要进一步判断执行命令的父进程的父进程是否为网站应用程序中运行的进程,如果是,则确定执行命令存在命令注入的漏洞。则确定执行命令存在命令注入的漏洞。
在本申请的另一种示例中,上述步骤S246实现的方案中,除了可以监测上述具有命令注入漏洞风险的执行命令的父进程中包含监控特征(例如命令分隔符(分号等)和cat/etc/passwd)以外,还需要监测该执行命令的父进程的父进程是否为WEB服务器软件或php进程管理器运行的进程,由于WEB服务器软件或php进程管理器都可以表征当前应用程序网站应用程序,因此,可以采用监测该执行命令的父进程的父进程是否具有WEB服务器软件或php进程管理器的特征,如果具有上述任意一种或多种特征则可以确定该执行命令存在命令注入的漏洞。
此处需要说明的是,上述步骤S241至步骤S245实现方案适用于上述命令记录系统记录所有执行命令的场景中。由于在命令记录系统记录所有执行命令时,命令不一定是PHP执行的,可能是其他应用程序执行,比如sshd程序,因此,不仅需要判断当前执行命令的父进程的属性特征,还需要进一步判断当前执行命令的父父进程的属性特征。
优选地,在本申请上述各个实施例中,执行步骤S243或步骤S244实现的判断执行命令的父进程是否具有多命令集合且包含监控特征的属性之前,还可以执行如下方法方案:
步骤S2411,在应用程序为网站应用软件程序的情况下,检测执行命令的父进程是否包含网站解析命令所固有的头字段,其中,如果父进程包含网站解析命令所固有的头字段,则执行判断执行命令的父进程是否具有多命令集合且包含监控特征的属性的步骤。
此处需要说明的是,本申请上述实施例中的网站解析命令所固有的头字段可以是字符sh-c,php提供的所有命令执行的接口都是以sh-c这种固定的形式去调用命令,判断命令开头是否为sh-c是php执行命令的一个必要条件,此处增加次判断可以确保分析的准确性。即可以采用监测该执行命令的父进程是否以sh-c开头,来确定是否进一步执行判断执行命令的父进程是否具有多命令集合且包含监控特征的属性的步骤。
在本申请上述各个可选的或优选的实施例中,针对监控执行命令是否包含监控特征的实现模式,提供了两种工作模式:
第一种工作模式:主动触发模式。
通过主动触发模式实现的监控执行命令是否包含监控特征的步骤S22,可以包括如下实施方案:
步骤S221a,触发漏洞扫描器扫描应用程序运行过程中记录的执行命令,获取扫描执行命令过程中得到的扫描特征。
步骤S223a,读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令。
步骤S225a,将漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
本申请上述步骤S221a至步骤S225a实现了一种主动触发漏洞扫描器对应用程序运行过程中的执行命令进行监控的方案。在应用程序为网站web应用程序的情况下,可以利用开源扫描器或者自研扫描器扫描网站,扫描结果可以只保留一个扫描特征,比如cat/etc/passwd,即扫描器只需要发出扫描命令,如果扫描到当前执行命令的扫描特征即可,无需接收扫描器的返回包而进行现有技术对扫描结果进行匹配判断确定是否存在漏洞的过程。在获取到执行命令所包含的扫描特征之后,将扫描特征与黑名单命令集合中的监控特征进行匹配,如果匹配成功则确定当前执行命令的扫描特征就是一个监控特征。从而进一步执行验证主机的执行命令对应的父子进程关系来确定是否存在漏洞,达到了提高检测速度的目的。
第二种工作模式:被动触发模式。
通过被动触发模式实现的监控执行命令是否包含监控特征的步骤S22,可以包括如下实施方案:
步骤S221b,采集网络漏洞扫描器扫描应用程序的扫描结果,扫描结果包括扫描应用程序运行执行命令过程中的扫描特征。
上述步骤S221b可选实现方式如下:采集命令记录系统记录所有命令集合,采集的命令集合包括外部黑客使用私有的网络漏洞扫描器扫描应用程序的扫描结果。
步骤S223b,读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令。
步骤S225b,将采集到的命令集合与黑名单命令集合中的监控特征进行匹配处理,其中,如果采集到的命令集合与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
本申请上述步骤S221b至步骤S225b实现了一种被动监控应用程序运行过程中的执行命令进行监控的方案。同样在应用程序为网站web应用程序的情况下,被动监控过程主要采集目前主流的扫描器扫描命令加入黑名单监控,即采集目前外部扫描器扫描本地计算机终端10上的主机应用程度的结果,如果外部的扫描器的扫描到漏洞,则可以第一时间监控发现并采集到扫描结果,进而将扫描结果中的扫描特征与黑名单命令集合中的监控特征进行匹配,如果匹配成功则确定当前执行命令的扫描特征就是一个监控特征。
下面就结合图3,以PHP执行web应用程序为例对上述图1和2所示的实施例进行详细描述:
步骤A,部署安装命令记录系统。该步骤将图1所示的计算机终端10作为主机,在主机上安装可以记录php执行命令的命令记录系统,命令记录系统用户记录PHP执行web应用程序过程中的所有执行命令或部分执行命令。
步骤B,扫描器扫描web应用程序对应的执行命令。一种可选的方案中,可以使用漏洞扫描器扫描网站上运行的web应用程序的执行命令,此时漏洞扫描器只需要发送扫描请求数据包,无需等待漏洞扫描器返回匹配结果,该扫描请求数据包用于扫描web应用程序获取扫描特征;另外一种可选方案中,可以监控外部漏洞扫描器扫描网站上运行的web应用程序的扫描结果,从而监控扫描结果中是否包含扫描特征。
步骤C,黑名单命令监控模块。此时通过将扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配,来确定当前web应用程序运行过程中的执行命令是否包含监控特征,从而实现了监控PHP执行web应用程序的过程中有无黑名单命令执行,如果有则进入步骤D,否则流程则结束。
步骤D,父进程数据分析模块。该步骤实现的模块通过回溯步骤C中与黑名单命令集合匹配的执行命令的父进程是否有命令分隔符和黑名单命令特征,并且回溯父父进程是否为WEB服务器软件或php进程管理器等进程,来确定当前PHP执行web应用程序时的执行命令为命令注入漏洞。其中,在上述执行命令的父进程包含有命令分隔符和黑名单命令特征,并且回溯父父进程为WEB服务器软件或php进程管理器等进程,则进入步骤E,否则流程结束。
步骤E,命令注入漏洞报警模块。该步骤实现模块可以对步骤D发现的命令注入漏洞发送给安全应急人员,并发出报警提示信息,提示需要修补漏洞。
下面以一个PHP命令注入程序举例对本申请上述图3所示的示例进行详细说明,假设一个漏洞php命令注入代码:system(“cd$_GET[‘para’]”);http访问传入get参数值para=/tmp;cat/etc/passwd
在系统还不知道上述命令为命令注入时,php执行WEB应用程序的过程中会执行如下3条执行命令,分别包括:
【1】系统执行sh命令,并传入字符串参数cd/tmp;cat/etc/passwd。实际环境命令格式为:sh-c cd/tmp;cat/etc/passwd。
注:php提供的命令执行函数(system,exec等)都是以sh-c的形式解析命令。
【2】系统执行目录跳转命令到/tmp目录。实际环境命令格式为:cd/tmp。
【3】系统执行查看主机密码的命令。实际环境命令格式为:cat/etc/passwd。
上述三条执行进程互为父子进程,因此,当扫描器扫描到cat/etc/passwd时,将cat/etc/passwd作为扫描特征与黑名单命令集合中的监控特征进行匹配,如果匹配成功,则回溯其父进程sh-c cd/tmp;cat/etc/passwd,此时父进程以sh–c开头,包含了分隔符“;”和监控特征cat/etc/passwd,由此可以确定当前执行的上述命令为命令注入的漏洞。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述方法实施例的装置实施例,本申请上述实施例所提供的装置可以在计算机终端上运行。
图4是根据本法实施例二的应用程序的漏洞检测装置的结构示意图。如图4所示,该应用程序的漏洞检测装置可以包括:记录模块40、监控模块42、回溯模块44和确定模块46。
记录模块40,用于记录应用程序运行过程中的执行命令。
监控模块42,用于监控执行命令是否包含监控特征。
回溯模块44,用于在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性。
确定模块46,用于如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
本申请上述实施例二提供的方案,通过检测当前运行的应用程序的执行命令是否包括监控特征来确定该执行命令是否具有注入命令漏洞的潜在风险,由于在确定该执行命令具有注入命令漏洞的潜在风险之后,进一步通过回溯该执行命令的父进程是否具有命令注入漏洞的属性,从而确认当前执行命令存在命令注入的漏洞,因此,本申请提供了一种对具有命令注入漏洞风险的执行命令进行进一步的命令注入验证的功能,即对该执行命令已经具有的属性特征进行验证,从而确定该执行命令的最终性质。由于上述过程可以应用于应用程序运行过程中的每个执行命令,因此,整个操作遍历到了应用程序中的所有执行命令,而且每个执行命令所要验证的属性特征都是静态的,从而达到了大幅降低了监测命令注入攻击的漏报和误报的情况的目的,进而解决了现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的技术问题。本方案还可以改善现有的漏洞检测系统开发周期长,难度大,开发后的运营成本也较高的问题。
此处需要说明的是,上述记录模块40、监控模块42、回溯模块44和确定模块46。对应于实施例一中的步骤S20至步骤S26,四个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
优选地,如图5所示,在本申请提供的一种可选实施例中,回溯模块44和确定模块46构成的处理模块包括:扫描模块441、第一判断模块443和子确定模块461。
其中,扫描模块441,用于扫描包含有监控特征的执行命令的父进程;第一判断模块443,用于判断执行命令的父进程是否具有多命令集合且包含监控特征的属性;子确定模块461,用于如果父进程为多命令集合且包含监控特征,则确定执行命令存在命令注入的漏洞。
此处需要说明的是,上述扫描模块441、第一判断模块443和子确定模块461对应于实施例一中的步骤S241至步骤S245,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
优选地,如图6所示,在本申请提供的另外一种可选实施例中,在通过子确定模块461实现如果父进程为多命令集合且包含监控特征的功能之后,装置还可以包括:子处理模块463。
子处理模块463,用于判断执行命令的父进程的父进程是否为网站应用程序中运行的进程,如果是,则确定执行命令存在命令注入的漏洞。
此处需要说明的是,上述子处理模块463对应于实施例一中的进一步执行的步骤S246,这个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
优选地,如图7所示,在本申请提供的优选实施例中,在通过第一判断模块443实现判断执行命令的父进程是否具有多命令集合且包含监控特征的属性的功能之前,装置还可以包括:检测模块442。
检测模块442,用于在应用程序为网站应用软件程序的情况下,检测执行命令的父进程是否包含网站解析命令所固有的头字段,其中,如果父进程包含网站解析命令所固有的头字段,则执行第一判断模块443的功能。
此处需要说明的是,上述子检测模块442对应于实施例一中的进一步执行的步骤S2411,这个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
基于上述各个装置实施例,如图8所示,本申请可以提供一种可选的实施例,上述监控模块42可以包括:触发模块421、第一读取模块423和第一匹配处理模块425。
其中,触发模块421,用于触发漏洞扫描器扫描应用程序运行过程中记录的执行命令,获取扫描执行命令过程中得到的扫描特征;第一读取模块423,用于读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;第一匹配处理模块425,用于将漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
此处需要说明的是,上述触发模块421、第一读取模块423和第一匹配处理模块425对应于实施例一中的步骤S221a至步骤S225a,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
基于上述各个装置实施例,如图9所示,本申请可以提供另外一种可选的实施例,上述监控模块42可以包括:采集模块422、第二读取模块424和第二匹配处理模块426。
其中,采集模块422,用于采集网络漏洞扫描器扫描应用程序的扫描结果,扫描结果包括扫描应用程序运行执行命令过程中的扫描特征;第二读取模块424,用于读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;第二匹配处理模块426,用于将采集到的扫描结果与黑名单命令集合中的监控特征进行匹配处理,其中,如果采集到的扫描结果与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
此处需要说明的是,上述采集模块422、第二读取模块424和第二匹配处理模块426对应于实施例一中的步骤S221b至步骤S225b,三个模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
优选地,在本申请可以提供的可选实施例中,在执行记录模块40实现的记录应用程序运行过程中的执行命令的功能之前,装置还可以包括:安装模块30,用于安装用于记录应用程序运行过程中的执行命令的命令记录系统。
由此可知,本申请提供的方案通过在主机终端部署安装命令记录系统,来记录执行应用程序过程中的所有执行命令或部分执行命令之后,利用扫描器扫描记录的执行命令来获取扫描特征,进而通过将扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配,来确定当前web应用程序运行过程中的执行命令是否包含监控特征,如果包含监控特征则回溯黑名单命令集合匹配的执行命令的父进程是否有命令分隔符和黑名单命令特征,并且回溯父父进程是否为webserver或php等进程,来确定当前应用程序时的执行命令为命令注入漏洞。
实施例3
本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:记录应用程序运行过程中的执行命令;监控计算机终端执行命令是否包含监控特征,其中,在计算机终端执行命令包含计算机终端监控特征的情况下,回溯计算机终端执行命令的父进程是否具有命令注入漏洞的属性;如果计算机终端执行命令的计算机终端父进程具有计算机终端命令注入漏洞的属性,则确定计算机终端执行命令存在命令注入的漏洞。
此处需要说明的是,上述计算机终端群中的任意一个计算机终端可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的执行命令。
可选地,图10是根据本发明实施例的一种计算机终端的结构框图。如图10所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器51、存储器53、以及传输装置55。
其中,存储器53可用于存储软件程序以及模块,如本发明实施例中的安全漏洞检测方法和装置对应的程序指令/模块,处理器51通过运行存储在存储器53内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器53可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器53可进一步包括相对于处理器51远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
上述的传输装置55用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置55包括一个网络适配器(NetworkInterface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置55为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
其中,具体地,存储器53用于存储预设动作条件和预设权限用户的信息、以及应用程序。
处理器51可以通过传输装置调用存储器53存储的信息及应用程序,以执行下述步骤:记录应用程序运行过程中的执行命令;监控执行命令是否包含监控特征,其中,在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性;如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
可选的,上述处理器51还可以执行如下步骤的程序代码:扫描包含有监控特征的执行命令的父进程;判断执行命令的父进程是否具有多命令集合且包含监控特征的属性;如果父进程为多命令集合且包含监控特征,则确定执行命令存在命令注入的漏洞。
可选的,上述处理器51还可以执行如下步骤的程序代码:判断执行命令的父进程的父进程是否为网站应用程序中运行的进程,如果是,则确定执行命令存在命令注入的漏洞。
可选的,上述处理器51还可以执行如下步骤的程序代码:在应用程序为网站应用软件程序的情况下,检测执行命令的父进程是否包含网站解析命令所固有的头字段,其中,如果父进程包含网站解析命令所固有的头字段,则执行判断执行命令的父进程是否具有多命令集合且包含监控特征的属性的步骤。
可选的,上述处理器51还可以执行如下步骤的程序代码:触发漏洞扫描器扫描应用程序运行过程中记录的执行命令,获取扫描执行命令过程中得到的扫描特征;读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;将漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
可选的,上述处理器51还可以执行如下步骤的程序代码:采集网络漏洞扫描器扫描应用程序的扫描结果,扫描结果包括扫描应用程序运行执行命令过程中的扫描特征;读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;将采集到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果采集到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
可选的,上述处理器51还可以执行如下步骤的程序代码:安装用于记录应用程序运行过程中的执行命令的命令记录系统。
采用本发明实施例,提供了一种在计算机互联网络中,监测应用程序的执行命令是否为命令注入漏洞的方案。通过检测当前运行的应用程序的执行命令是否包括监控特征来确定该执行命令是否具有注入命令漏洞的潜在风险,由于在确定该执行命令具有注入命令漏洞的潜在风险之后,进一步通过回溯该执行命令的父进程是否具有命令注入漏洞的属性,从而确认当前执行命令存在命令注入的漏洞,因此,本申请提供了一种对具有命令注入漏洞风险的执行命令进行进一步的命令注入验证的功能,即对该执行命令已经具有的属性特征进行验证,从而确定该执行命令的最终性质。由于上述过程可以应用于应用程序运行过程中的每个执行命令,因此,整个操作遍历到了应用程序中的所有执行命令,而且每个执行命令所要验证的属性特征都是静态的,从而达到了大幅降低了监测命令注入攻击的漏报和误报的情况的目的,进而解决了现有技术用于监测命令注入攻击的方法存在漏报率高、误报率高的技术问题。本方案还可以改善现有的漏洞检测系统开发周期长,难度大,开发后的运营成本也较高的问题。
本领域普通技术人员可以理解,图10所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例4
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的应用程序的漏洞检测方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:记录应用程序运行过程中的执行命令;监控执行命令是否包含监控特征,其中,在执行命令包含监控特征的情况下,回溯执行命令的父进程是否具有命令注入漏洞的属性;如果执行命令的父进程具有命令注入漏洞的属性,则确定执行命令存在命令注入的漏洞。
此处需要说明的是,上述计算机终端群中的任意一个可以与网站服务器和扫描器建立通信关系,扫描器可以扫描计算机终端上php执行的web应用程序的值命令。
可选地,存储介质还被设置为存储用于执行以下步骤的程序代码:扫描包含有监控特征的执行命令的父进程;判断执行命令的父进程是否具有多命令集合且包含监控特征的属性;如果父进程为多命令集合且包含监控特征,则确定执行命令存在命令注入的漏洞。
可选的,存储介质还被设置为存储用于执行以下步骤的程序代码:判断执行命令的父进程的父进程是否为网站应用程序中运行的进程,如果是,则确定执行命令存在命令注入的漏洞。
可选的,存储介质还被设置为存储用于执行以下步骤的程序代码:在应用程序为网站应用软件程序的情况下,检测执行命令的父进程是否包含网站解析命令所固有的头字段,其中,如果父进程包含网站解析命令所固有的头字段,则执行判断执行命令的父进程是否具有多命令集合且包含监控特征的属性的步骤。
可选的,存储介质还被设置为存储用于执行以下步骤的程序代码:触发漏洞扫描器扫描应用程序运行过程中记录的执行命令,获取扫描执行命令过程中得到的扫描特征;读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;将漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果漏洞扫描器扫描到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
可选的,存储介质还被设置为存储用于执行以下步骤的程序代码:采集网络漏洞扫描器扫描应用程序的扫描结果,扫描结果包括扫描应用程序运行执行命令过程中的扫描特征;读取黑名单命令集合,黑名单命令集合为预先保存的包含有监控特征的命令;将采集到的扫描特征与黑名单命令集合中的监控特征进行匹配处理,其中,如果采集到的扫描特征与黑名单命令集合中的监控特征匹配成功,则确定执行命令包含监控特征。
可选的,存储介质还被设置为存储用于执行以下步骤的程序代码:安装用于记录应用程序运行过程中的执行命令的命令记录系统。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
可选地,本实施例中的具体示例可以参考上述实施例1和实施例2中所描述的示例,本实施例在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。