漏洞检测方法和装置与流程

文档序号:12376617阅读:486来源:国知局
漏洞检测方法和装置与流程

本发明涉及计算机安全技术领域,特别是涉及一种漏洞检测方法和装置。



背景技术:

伴随着移动互联网的飞速发展,移动应用也迅猛发展,出现了数量繁多、功能各异的移动应用。然而,移动应用的发展使得移动应用面临各种安全风险,目前的安全风险主要是在服务器端的漏洞,包括各种API(应用程序编程接口)接口引发的WEB(网站)漏洞和服务器漏洞。恶意用户利用这些漏洞可以获取用户隐私、钓鱼欺诈,还可以入侵服务器以窃取核心源代码或用户数据库等,危害极大。

目前可以通过数据包抓取工具来抓取网络中传输的数据包,进而对抓取的数据包进行漏洞检测,其中fiddler2工具就是一种常用的数据包抓取工具。然而,数据包抓取工具能够抓取的数据包是局限的,比如一些需要用户登录后才能产生的数据包通过数据包抓取工具是抓取不到的。这样根据抓取的数据包进行漏洞检测所检测出的漏洞也是局限的,能够检测出的漏洞较少,需要改进。



技术实现要素:

基于此,有必要针对目前的漏洞检测方法所能够检测出的漏洞少的技术问题,提供一种漏洞检测方法和装置。

一种漏洞检测方法,所述方法包括:

接收终端通过正向代理方式发送的用户访问网络请求;

记录所述用户访问网络请求;

根据记录的用户访问网络请求生成漏洞检测网络请求;

将所述漏洞检测网络请求发送给所述用户访问网络请求所对应的待检测服务器;

接收所述待检测服务器根据所述漏洞检测网络请求所反馈的漏洞检测响应 信息;

检测所述漏洞检测响应信息是否具有所述预设漏洞特征库中的预设漏洞特征,获得漏洞检测结果。

一种漏洞检测装置,所述装置包括:

请求接收模块,用于接收终端通过正向代理方式发送的用户访问网络请求;

记录模块,用于记录所述用户访问网络请求;

漏洞检测网络请求生成模块,用于根据记录的用户访问网络请求生成漏洞检测网络请求;

请求发送模块,用于将所述漏洞检测网络请求发送给所述用户访问网络请求所对应的待检测服务器;

漏洞检测响应信息接收模块,用于接收所述待检测服务器根据所述漏洞检测网络请求所反馈的漏洞检测响应信息;

漏洞检测模块,用于检测所述漏洞检测响应信息是否具有所述预设漏洞特征库中的预设漏洞特征,获得漏洞检测结果。

上述漏洞检测方法和装置,使用终端的用户可以通过终端进行各种操作从而产生各种用户访问网络请求。接收终端通过正向代理方式发送的用户访问网络请求并记录,这样就可以获取到用户在各种场景下产生的用户访问网络请求。用于检测漏洞的漏洞检测网络请求是根据用户访问网络请求生成的,这样可以借助用户在各种场景下产生的用户访问网络请求来进行漏洞检测,避免了因需要用户登录而导致的无法进行漏洞检测的情形,漏洞检测的覆盖率高。

附图说明

图1为一个实施例中漏洞检测系统的应用环境图;

图2为一个实施例中服务器的组成结构示意图;

图3为另一个实施例中服务器的组成结构示意图;

图4为一个实施例中漏洞检测方法的流程示意图;

图5为一个实施例中终端的超文本传输协议代理配置页面的示意图;

图6为一个实施例中漏洞检测报告的示意图;

图7为一个实施例中漏洞检测装置的结构框图;

图8为另一个实施例中漏洞检测装置的结构框图;

图9为再一个实施例中漏洞检测装置的结构框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,在一个实施例中,提供了一种漏洞检测系统100,包括终端102和服务器104,终端102可通过服务器104访问待检测服务器110。在一个实施例中,终端102包括台式计算机和移动终端,移动终端包括手机、平板电脑、智能手表以及电子阅读器等。

在一个实施例中,服务器104的结构如图2所示,包括通过系统总线连接的处理器、内存储器、非易失性存储介质和网络接口。该处理器具有计算的功能和控制整个服务器104运行的功能,该处理器被配置为执行一种漏洞检测方法。非易失性存储介质包括磁存储介质、光存储介质和闪存式的存储介质。该非易失性存储介质存储有操作系统、数据库和一种漏洞检测装置,该漏洞检测装置用于实现一种漏洞检测方法。网络接口用于在处理器指令下与终端102和待检测服务器110通信。

如图3所示,在一个实施例中,服务器104包括代理服务器104a、数据库服务器104b和漏洞检测服务器104c;漏洞检测服务器104c可连接到待检测服务器110。

如图4所示,在一个实施例中,提供了一种漏洞检测方法,本实施例以该方法应用于上述图3中的服务器104来举例说明,可以理解该方法也可以在上述图2中的服务器104上实现。该方法具体包括如下步骤:

步骤402,接收终端通过正向代理方式发送的用户访问网络请求。

具体地,服务器104的代理服务器104a接收终端102通过正向代理方式发送的用户访问网络请求。其中用户访问网络请求是指用户触发的用来访问目标服务器的网络请求。网络请求包括HTTP(HyperText Transfer Protocol,超文本传输协议)请求、HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer,基于安全套接字层的超文本传输协议)请求和FTP(File Transfer Protocol,文件传输协议)请求。在检测漏洞时用户访问的目标服务器作为待检测服务器。

其中,正向代理方式,是指终端102在访问目标服务器时,通过代理服务器104a的中转将用户访问网络请求发送给目标服务器,并接收目标服务器根据用户访问网络请求反馈的响应信息,再将该响应信息反馈给终端102。

在一个实施例中,该漏洞检测方法还包括:终端102获取在超文本传输协议代理配置页面中输入的代理服务器地址和代理端口,并根据代理服务器地址和代理端口创建正向代理方式的网络连接。

具体地,终端102展示如图5所示的超文本传输协议代理配置页面,用户在该超文本传输协议代理配置页面中输入的代理服务器地址为代理服务器104a的地址,输入的代理端口为代理服务器104a所监听的端口。这样终端102就可以根据代理服务器地址和代理端口创建与代理服务器104a的网络连接,该网络连接为正向代理方式的网络连接。

步骤404,记录用户访问网络请求。

具体地,用户访问网络请求携带有待检测服务器的网络地址,服务器104的代理服务器104a一方面将用户访问网络请求转发给待检测服务器,另一方面将该用户访问网络请求记录下来。具体代理服务器104a将用户访问网络请求记录在服务器104的数据库服务器104b中。在一个实施例中,服务器104可以日志形式记录用户访问网络请求。

步骤406,根据记录的用户访问网络请求生成漏洞检测网络请求。

具体地,服务器104的漏洞检测服务器104c从数据库服务器104b中读取记录的用户访问网络请求,从而根据该记录的用户访问网络请求生成漏洞检测网络请求。具体服务器104的漏洞检测服务器104c可将用于检测漏洞的参数拼接到用户访问网络请求后面构成漏洞检测网络请求,也可以通过修改用户访问 网络请求中的参数为用于检测漏洞的参数,从而获得漏洞检测网络请求。漏洞检测网络请求是指用于检测漏洞的网络请求。

这里用于检测漏洞的参数可以是穷举所有的可选参数,或者只选取可能引发漏洞的参数。用于检测漏洞的参数是与预设漏洞特征库中的预设漏洞特征对应的。漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统,比如任意文件下载漏洞、XSS(跨站脚本攻击)漏洞、反射式XSS漏洞以及跳转漏洞等。

步骤408,将漏洞检测网络请求发送给用户访问网络请求所对应的待检测服务器。

具体地,用户访问网络请求所对应的待检测服务器,是指用户原本意图访问的目标服务器,在检测漏洞时作为待检测服务器。服务器104的漏洞检测服务器104c将漏洞检测网络请求发送给待检测服务器。

步骤410,接收待检测服务器根据漏洞检测网络请求所反馈的漏洞检测响应信息。

具体地,服务器104的漏洞检测服务器104c接收待检测服务器根据漏洞检测网络请求所反馈的漏洞检测响应信息。漏洞检测响应信息是指漏洞检测网络请求所对应的响应信息。

步骤412,检测漏洞检测响应信息是否具有预设漏洞特征库中的预设漏洞特征,获得漏洞检测结果。

服务器104的漏洞检测服务器104c检测漏洞检测响应信息是否具有预设漏洞特征库中的预设漏洞特征,若具有预设漏洞特征则判定存在漏洞,若不具有预设漏洞特征则判定不存在漏洞。具体地,预设漏洞特征可以为正则表达式的形式,这样可以在漏洞检测响应信息中查找与该正则表达式形式的预设漏洞特征匹配的字符或者字符串,若查找到则说明存在漏洞,若查找不到说明不存在漏洞。

举例说明,若记录的用户访问网络请求为“http://www.abc123456.com/download.PHP?filename=”,在其后拼接用于检测漏洞的参数,获得漏洞检测网络请求为“http://www.abc123456.com/download.PHP?filename=../../../../../../../../../.. /etc/passwd”。将漏洞检测网络请求发送给用户访问网络请求所对应的待检测服务器,并接收到待检测服务器根据漏洞检测网络请求所反馈的漏洞检测响应信息的具体内容(body部分)如下:

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/false

man:x:6:12:man:/var/cache/man:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh

proxy:x:13:13:proxy:/bin:/bin/false

www-data:x:33:33:www-data:/var/www:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

list:x:38:38:Mailing List Manager:/var/list:/bin/sh

irc:x:39:39:ircd:/var/run/ircd:/bin/sh

gnats:x:41:41:Gnats Bug-Reporting System(admin):/var/lib/gnats:/bin/sh

nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

libuuid:x:100:101::/var/lib/libuuid:/bin/sh

Debian-exim:x:101:103::/var/spool/exim4:/bin/false

statd:x:102:65534::/var/lib/nfs:/bin/false

sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin

ntp:x:104:106::/home/ntp:/bin/false

mysql:x:105:108:MySQL Server,,,:/var/lib/mysql:/bin/false

san:x:1000:1000:,,,:/home/san:/bin/bash

puppet:x:106:109:Puppet configuration management daemon,,,:/var/lib/puppet:/bin/false

sim:x:1001:1002::/home/sim:/bin/sh

somesecguy:x:1002:0::/home/somesecguy:/bin/bash

john:x:1003:1003::/home/john:/bin/sh

若预设漏洞特征库中的一个预设漏洞特征用于检测任意文件下载漏洞,则预设漏洞特征可用正则表达式表示为:((root|bin|daemon|sys|sync|games|man|mail|news|www-data|uucp|backup|list|proxy|gnats|nobody|syslog|mysql|bind|ftp|sshd|postfix):[\d\w-\s,]+:\d+:\d+:[\w-_\s,]*:[\w-_\s,/]*:[\w-_,/]*[\r\n])。该正则表达式中,“|”表示逻辑或运算,“\d”表示匹配数字,“\w”表示匹配字母或数字或下划线或汉字,“\s”表示匹配任意的空白符,“-”表示连接符,“+”表示将其之前的字符重复一次或多次进行匹配,“/”表示字符“/”,“*”表示匹配其前面的子表达式零次或多次,\r表示匹配一个回车符,\n表示匹配一个换行符。若在响应信息的具体内容中找到与上述正则表达式匹配的字符串,则可以判定存在任意文件下载漏洞,若找不到匹配的字符串,则可以判定不存在任意文件下载漏洞。检测不同的漏洞可以采用不同的正则表达式,这里不一一赘述。

上述漏洞检测方法,使用终端的用户可以通过终端进行各种操作从而产生各种用户访问网络请求。接收终端通过正向代理方式发送的用户访问网络请求并记录,这样就可以获取到用户在各种场景下产生的用户访问网络请求。用于检测漏洞的漏洞检测网络请求是根据用户访问网络请求生成的,这样可以借助用户在各种场景下产生的用户访问网络请求来进行漏洞检测,避免了因需要用户登录而导致的无法进行漏洞检测的情形,漏洞检测的覆盖率高。

在一个实施例中,在步骤406之前还包括:对记录的用户访问网络请求进行去重处理;和/或,从记录的用户访问网络请求中过滤掉用于请求静态内容的用户访问网络请求。

具体地,去重处理是指去除重复的用户访问网络请求。静态内容是指可以直接获取的内容,不需要执行ASP(Active Server Page,动态服务器页面)、PHP(Hypertext Preprocessor,超文本预处理器)或者JSP(Java Server Pages,java 服务器页面)等服务器程序来生成。在一个实施例中,静态内容包括:图片、文本文档、HTML(超文本标记语言)静态页面以及媒体文件。

本实施例中,对记录的用户访问网络请求进行去重处理,可以提高检测漏洞的效率。而且由于静态内容一般不会引发漏洞,过滤掉这部分用户访问网络请求也可以提高检测漏洞的效率。

在一个实施例中,用于请求静态内容的用户访问网络请求,包括:所携带的动态内容参数个数为0的用户访问网络请求,具体地,用于请求静态内容的用户访问网络请求的网址一般不含有“?”、“=”、“&”等动态内容参数。当用户访问网络请求不携带有这些动态内容参数时,可认为是用于请求静态内容的用户访问网络请求。

在一个实施例中,用于请求静态内容的用户访问网络请求,包括:所请求的文件的扩展名包括静态文件扩展名的用户访问网络请求。本实施例中,通过匹配扩展名可以快速区分出用于请求静态内容的用户访问网络请求,可以进一步提高检测漏洞的效率。

具体地,静态文件扩展名包括图片的扩展名、文本文档的扩展名、HTML静态页面的扩展名以及媒体文件的扩展名。其中,图片的扩展名包括jpeg、png、gif以及ico等;文本文档的扩展名包括doc、pdf、txt以及xls等;HTML静态页面的扩展名包括css、js或者html等;媒体文件的扩展名包括mpeg、mp3、avi、flv、swf以及wma等。

在一个实施例中,可以从记录的用户访问网络请求中查找与静态文件扩展名所对应的正则表达式匹配的字符串,若查找到相应的字符串则过滤掉该用户访问网络请求。其中图片的扩展名所对应的正则表达式可为:"\.(?:(?:jpe?|pn)g|gif|ico)$";文本文档的扩展名所对应的正则表达式可为:"\.(?:doc|pdf|txt|xls)$";HTML静态页面的扩展名所对应的正则表达式可为:"\.(?:(?:cs|j)s|html?)$";媒体文件的扩展名所对应的正则表达式可为:"\.(?:mp(?:e?g|3)|avi|flv|swf|wma)$"。这里“\.”表示匹配字符“.”,“(?:pattern)”表示匹配模式pattern但不获取具体的匹配结果,“$”表示匹配输入字符串的结束位置。

在一个实施例中,服务器104向终端102提供正向代理服务,需要事先进行配置,这里以Apache(一种服务器软件),版本为2.4.2为例说明配置方式,具体如下:

1),开启Apache的代理模块

修改Apache的主程序配置文件httpd.conf,修改如下。

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so。

上述对主程序配置文件httpd.conf的修改中,LoadModule表示加载模块的命令,LoadModule proxy_module modules/mod_proxy.so,表示加载文件位置为modules/mod_proxy.so的模块标识为proxy_module的模块,模块标识可以唯一标识出一个模块。Apache中的一个模块是指可以独立存在并在需要时通过加载方式结合到目标系统中的一种数据对象。.so是共享函数库的扩展名。

mod_proxy.so是代理基础服务模块,mod_proxy_connect是用于支持connect命令的代理子模块,connect命令的作用就是把服务器104作为中转,让服务器104代替用户去访问其它网页,之后把数据原原本本的返回给用户,proxy_ftp.so是用于支持FTP的代理子模块,mod_proxy_http.so是用于支持HTTP的代理子模块。

这样配置完成后,服务器104提供的代理服务支持connect命令,并支持FTP和HTTP,兼容性强。

2),调用虚拟机配置文件httpd-vhosts.conf:

Include conf/extra/httpd-vhosts.conf。

3),加载SSL(Secure Sockets Layer,安全套接层)模块:

LoadModule ssl_module modules/mod_ssl.so。

其中,加载mod_ssl.so获得SSL模块,这样服务器104可以支持基于HTTPS的用户访问网络请求。

4),加载安全防护模块mod_security,并调用安全防护配置文件 mod_security.conf。

LoadModule security2_modules modules/mod_security2.so

Include conf/mod_security.conf。

其中,加载mod_security2.so获得安全防护模块,本实施例的漏洞检测方法主要利用安全防护模块的日志记录功能,后续将对该安全防护模块进行配置。

5),配置虚拟机配置文件httpd-vhosts.conf,具体配置以及注释如下:

<VirtualHost*:8882>#配置监听端口为8882。

DocumentRoot"/usr/local/apache/htdocs"#配置文件根目录。

CustomLog logs/test8882-access_log common#配置日志文件的文件名和格式。

<IfModule mod_proxy.c>

ProxyRequests On#配置为开启正向代理方式。

<Proxy*>

Order deny,allow

Allow from all#配置用户访问控制信息,这里配置为允许所有用户访问,也可以根据需要配置为限定允许部分用户访问,比如Allow from 110.110.110.110,表示配置为只允许IP地址为110.110.110.110的用户访问。

</Proxy>

6),配置安全防护配置文件mod_security.conf,具体配置如下:

SecRuleEngine DetectionOnly

SecRequestBodyAccess On

SecResponseBodyAccess On

SecAuditEngine RelevantOnly

SecAuditLogRelevantStatus“^(?:5|2|3|4(?!04))”

SecAuditLogParts ABC

SecAuditLog/usr/local/apache/logs/audit.log

SecAuditLogType Serial

其中,安全规则处理配置命令SecRuleEngine用于配置对于安全规则的处理, 若配置为On(开启),表示处理安全规则;若配置为Off(关闭),表示不处理安全规则;若配置为DetectionOnly(仅检查),表示处理安全规则,但不开启防护。这里由于仅利用安全防护模块的日志功能,配置为DetectionOnly。

请求体检查配置命令SecRequestBodyAccess用于配置是否检查用户访问网络请求的请求体。网络请求包括请求头和请求体,请求体是指请求的具体内容。这里配置为On,表示需要检查用户访问网络请求的请求体。

响应内容检查配置命令SecResponseBodyAccess用于配置是否检查用户访问网络请求所对应的响应信息的响应内容。响应信息包括响应头和相应内容。这里配置为On,表示需要检查用户访问网络请求所对应的响应信息的响应内容。

日志引擎配置命令SecAuditEngine用于配置日志引擎的开启与否。若配置为On,表示记录所有事务的日志;配置为Off,表示不记录所有事务的日志;配置为RelevantOnly,表示只记录事务中因警告(warning)或者错误(error)触发的日志,或者记录一些特定的状态码对应的日志。这里配置为RelevantOnly,用于记录与漏洞检测相关的日志。

日志相关响应状态码配置命令SecAuditLogRelevantStatus用于配置哪些响应状态码与记录的日志的目的密切相关,配置为一个正则表达式:“^(?:5|2|3|4(?!04))”,表示匹配每一个以5开头的响应状态码(表示服务器错误)、以2开头的响应状态码(200,表示请求成功)、以3开头的响应状态码(表示目录限制)或者除了404的响应状态码(表示用户错误)的用户访问网络请求都会被记录。这“^”表示匹配输入字符串的开始位置。“(?!pattern)”表示正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

日志内容配置命令SecAuditLogParts用于配置每个事务中记录到日志中的部分。每部分以一个独立的字母表示,当某个字母出现在列表中,也就是指每个事务中的该部分会被记录。这里配置为ABC,A表示记录日志的标题,包括用户访问网络请求的基础信息,该基础信息包括:请求时间、请求源地址、请求端口、目的地址以及目的端口。B表示记录用户访问网络请求的标题,包括用 户访问网络请求的请求头中除去基础信息之后的全部或者部分信息。C表示记录用户访问网络请求的请求体,比如post(HTTP中用于传输数据的命令)或者get(HTTP中用于获取数据的命令)的具体内容。

举例说明,以日志形式记录的用户访问网络请求可记录如下:

--3b2488z6-A--(日志的标题)

[20/Mar/2015:11:45:49 +0700]Gi3FfBJR87wBBA63D5HAAAEF 110.110.11 0.110 8882 101.227.143.34 80

--3b2488z6-B--(用户访问网络请求的标题)

POST/mp/appmsgreport?action=page_time&uin=MTA3***&key=************&pass_ticket=*********HTTP/1.1

Host:mp.*****.**.com

Accept-Language:zh-cn

User-Agent:Mozilla/5.0(iPhone;CPU iPhone OS 8_1_3 like Mac OS X)AppleWebKit/600.1.4(KHTML,like Gecko)Mobile/12B466 MicroMessenger/6.1.1 NetType/WIFI

X-Requested-With:XMLHttpRequest

Accept:*/*

Referer:https://mp.*****.**.com/s?__biz=MjM5NjExMjcwMA==&mid=206315928&idx=4&sn=*********&key=*********&ascene=1&uin=MTA3***&devicetype=iPhone+OS8.1.3&version=16010112&nettype=WIFI&fontScale=100&pass_ticket=************

Content-Type:application/x-www-form-urlencoded;charset=UTF-8

Connection:keep-alive

Cookie:3g_guest_id=-***;g_ut=3;lskey=00010000a27b45b83e1d***;luin=o0***;pgv_info=ssid=s913***;pgv_pvi=7672***;pgv_pvid=4907***;pt2gguin=o000***;ptcz=***;ptisp=ctc;RK=YJ***;sd_cookie_crttime=1426676796369;sd_userid=507014***;skey=@SN***;uin=o00***

Proxy-Connection:keep-alive

Content-Length:599

Origin:https://mp.*****.**.com

Accept-Encoding:gzip,deflate

--3b2488z6-C--(用户访问网络请求的请求体)

__biz=MjM5NjExMjcwMA%3D%3D&title=%E3%80%90%E5%B0%8FQ%E6%92%AD%E6%8A%A5%E3%80%912015QQ%E9%9F%B3%E4%B9%90%E5%B9%B4%E5%BA%A6%E7%9B%9B%E5%85%B8%E9%97%A8%E7%A5%A8%E9%99%90%E9%87%8F%E5%BC%80%E6%8A%A2%EF%BC%81&mid=206315928&idx=4&read_cnt=174&like_cnt=1&screen_height=504&screen_num=6&video_cnt=0&img_cnt=0&read_screen_num=6&is_finished_read=1&scene=&content_len=30881&start_time=1427080987224&end_time=1427081042724&img_640_cnt=3&img_0_cnt=0&img_300_cnt=0&wtime=0&ftime=0&ptime=0&wifi_all_imgs_cnt=3&wifi_read_imgs_cnt=2&download_cdn_webp_img_cnt=0&download_img_cnt=3&download_cdn_img_cnt=3&img_jpeg_cnt=2。

日志路径配置命令SecAuditLog用于配置日志的文件路径。日志记录方式配置命令SecAuditLogType用于配置记录日志的方式,这里配置为Serial,表示所有的日志条目都被存储在主日志记录文件中,调用很方便。

上述基于Apache的漏洞检测方法,可以通过调整预设漏洞特征库来灵活调整漏洞检测规则,而不需要编写专门的插件。可支持HTTPS,输出的漏洞检测报告可读性强、对运行平台没有限制,可以跨平台部署。可基于记录的用户访问网络请求进行多线程分布式检测,漏洞检测效率将显著提高。可直接部署在服务器104,支持多用户,扩展性强,易接入。

在一个实施例中,在步骤402之前,还包括:读取第一配置文件中的第一配置信息;则步骤402具体包括:根据第一配置信息接收终端通过正向代理方式发送的用户访问网络请求。其中,第一配置信息包括:监听端口、正向代理开关信息以及用户访问控制信息;监听端口为终端所设置的代理端口,正向代理开关信息为开启。

具体地,第一配置文件可包括上述虚拟机配置文件。服务器104配置监听 端口,移动终端配置代理端口为该监听端口,服务器104将监听通过该端口的用户访问网络请求。正向代理开关信息用于表示是否开启正向代理方式。用户访问控制信息用于对用户进行访问控制。

本实施例中,根据第一配置信息提供正向代理服务,从而接收终端通过正向代理方式发送的用户访问网络请求。

在一个实施例中,步骤404包括:读取第二配置文件中的第二配置信息,根据第二配置信息,以日志形式记录用户访问网络请求。第二配置信息包括:配置为在检测到用户访问网络请求命中安全规则时,以日志形式记录用户访问网络请求的配置信息;和/或,配置为在检测到用户访问网络请求所对应的响应状态码为漏洞相关响应状态码时,以日志形式记录用户访问网络请求的配置信息。

具体地,第二配置文件可包括上述安全防护配置文件。安全规则是指用来识别出有可能触发漏洞的用户访问网络请求的识别条件。安全规则可以用正则表达式表示,此时若从用户访问网络请求中查找到与安全规则的正则表达式匹配的字符串,则表示命中该安全规则。比如安全规则可以是用户访问网络请求具有触发漏洞的能力的参数或者函数。

漏洞相关响应状态码,是指用于触发该漏洞相关响应状态码的用户访问网络请求具有触发漏洞的能力,认为该状态响应码是与漏洞相关的。漏洞相关响应状态码比如上述以5开头的响应状态码、以2开头的响应状态码、以3开头的响应状态码或者除了404的响应状态码。

本实施例中,在检测到用户访问网络请求命中安全规则时,或者在检测到用户访问网络请求所对应的响应状态码为漏洞相关响应状态码时,以日志形式记录用户访问网络请求,这样可以选择性地记录有可能触发漏洞的用户访问网络请求进行记录,可以进一步提高漏洞检测的效率。

在一个实施例中,在步骤404之后,还包括:根据记录的用户访问网络请求形成待检测列表中的条目并显示,每个条目包括用户访问网络请求的URL(统一资源定位符)、请求的网络地址、请求体、提交检测状态以及条目插入时间。在执行步骤406时,更新待检测列表中相应的用户访问网络请求对应的条目的 提交检测状态。比如待检测列表可如表一所示:

表一:

在一个实施例中,该漏洞检测方法还包括:根据漏洞检测结果生成漏洞处理列表中的条目并显示,每个条目包括:请求的域名或者网络地址、检测漏洞的事件名称、条目处理状态、条目插入时间、检测的漏洞类型以及风险等级。在漏洞被修复后,更新相应条目中的条目处理状态,并添加处理完成时间和漏洞属性。

其中,检测漏洞的事件名称用来说明检测时间的简要信息,条目处理状态用来表示相应的条目是否被处理,检测的漏洞类型比如文件包含漏洞、管理后台漏洞、跳转漏洞、XXS漏洞、SQL注入漏洞或者测试页面未删除漏洞等,漏洞属性表示该漏洞是否有威胁。

危险等级可以分为三个等级,即高危险等级、中危险等级以及低危险等级。其中高危险等级对应直接获取服务器权限的漏洞、直接导致严重的信息泄漏漏洞、直接导致严重影响的逻辑漏洞、直接盗取用户身份信息的漏洞以及服务器越权访问漏洞。其中直接获取服务器权限的漏洞包括任意命令执行漏洞、上传webshell(一种命令执行环境)和任意代码执行漏洞。直接导致严重的信息泄漏漏洞包括重要数据库的SQL注入漏洞。直接导致严重影响的逻辑漏洞包括任意帐号密码更改漏洞。直接盗取用户身份信息的漏洞包括非重要数据库的SQL注入漏洞。服务器越权访问漏洞包括绕过认证访问服务器的漏洞。

中危险等级对应需交互才能获取用户身份信息的漏洞、任意文件操作漏洞和文件越权访问漏洞。需交互才能获取用户身份信息的漏洞包括存储型XSS漏洞,任意文件操作漏洞包括任意文件读、写、删除、下载等操作的漏洞,文件 越权访问漏洞包括绕过限制修改用户资料、执行用户操作。

低危险等级则对应普通逻辑漏洞和需交互才能获取用户身份信息并且有一定利用难度的漏洞。普通逻辑漏洞包括提交操作无限制的漏洞,需交互才能获取用户身份信息并且有一定利用难度的漏洞包括反射型XSS漏洞。

举例说明,漏洞检测列表可如表二所示:

表二:

在一个实施例中,该漏洞检测方法还包括:根据漏洞检测结果生成按照请求的访问的站点归类的漏洞检测报告。漏洞检测报告可以包括:站点标识、用户访问请求提交人信息、漏洞检测开始时间、漏洞检测结束时间、检测到的漏洞总数、站点风险等级、风险评分、漏洞关注人信息、漏洞处理进度以及漏洞详细信息。漏洞详细信息包括漏洞的风险等级、漏洞类型以及引发漏洞的URL。站点风险等级以及站点评分可以根据对应的漏洞的风险等级和/或漏洞数量来确定。举例来说,漏洞检测报告可如图6所示。

在具体的应用场景中,移动应用的测试用户可以在移动终端上配置代理服务器和代理端口,创建正向代理方式的网络连接,连接到服务器104。这样测试用户可以在移动终端上正常使用和测试移动应用,服务器104将测试用户触发的用户访问网络请求代理转发给待检测服务器110的同时,将完整的用户访问网络请求以日志形式记录下来,然后就可以根据记录的用户访问网络请求对待检测服务器110进行漏洞检测。然后可以形成漏洞检测报告,通知移动应用开发人员及时修复漏洞。

如图7所示,在一个实施例中,提供了一种漏洞检测装置700,具有实现上述各个实施例的漏洞检测方法的功能。该漏洞检测装置700包括:请求接收模块701、记录模块702、漏洞检测网络请求生成模块703、请求发送模块704、漏洞检测响应信息接收模块705和漏洞检测模块706。

请求接收模块701,用于接收终端通过正向代理方式发送的用户访问网络请求。

具体地,请求接收模块701可用于接收终端102通过正向代理方式发送的用户访问网络请求。其中用户访问网络请求是指用户触发的用来访问目标服务器的网络请求。网络请求包括HTTP请求、HTTPS请求和FTP请求。在检测漏洞时用户访问的目标服务器作为待检测服务器。

记录模块702,用于记录用户访问网络请求。

具体地,用户访问网络请求携带有待检测服务器的网络地址,漏洞检测装置700的代理模块(图中未示出)用于将用户访问网络请求转发给待检测服务器,记录模块702用于将该用户访问网络请求记录下来。在一个实施例中,记录模块702可用于以日志形式记录用户访问网络请求。

漏洞检测网络请求生成模块703,用于根据记录的用户访问网络请求生成漏洞检测网络请求。

具体地,漏洞检测网络请求生成模块703用于读取记录的用户访问网络请求,从而根据该记录的用户访问网络请求生成漏洞检测网络请求。具体漏洞检测网络请求生成模块703可用于将用于检测漏洞的参数拼接到用户访问网络请求后面构成漏洞检测网络请求,也可以用于通过修改用户访问网络请求中的参数为用于检测漏洞的参数,从而获得漏洞检测网络请求。漏洞检测网络请求是指用于检测漏洞的网络请求。这里用于检测漏洞的参数可以是穷举所有的可选参数,或者只选取可能引发漏洞的参数。用于检测漏洞的参数是与预设漏洞特征库中的预设漏洞特征对应的。

请求发送模块704,用于将漏洞检测网络请求发送给用户访问网络请求所对应的待检测服务器。具体地,用户访问网络请求所对应的待检测服务器,是指 用户原本意图访问的目标服务器,在检测漏洞时作为待检测服务器。

漏洞检测响应信息接收模块705,用于接收待检测服务器根据漏洞检测网络请求所反馈的漏洞检测响应信息。其中,漏洞检测响应信息是指漏洞检测网络请求所对应的响应信息。

漏洞检测模块706,用于检测漏洞检测响应信息是否具有预设漏洞特征库中的预设漏洞特征,获得漏洞检测结果。

漏洞检测模块706可用于检测漏洞检测响应信息是否具有预设漏洞特征库中的预设漏洞特征,若具有预设漏洞特征则判定存在漏洞,若不具有预设漏洞特征则判定不存在漏洞。具体地,预设漏洞特征可以为正则表达式的形式,这样可以在漏洞检测响应信息中查找与该正则表达式形式的预设漏洞特征匹配的字符或者字符串,若查找到则说明存在漏洞,若查找不到说明不存在漏洞。

在一个实施例中,终端102用于获取在超文本传输协议代理配置页面中输入的代理服务器地址和代理端口,并根据代理服务器地址和代理端口创建正向代理方式的网络连接。

具体地,终端102展示如图5所示的超文本传输协议代理配置页面,用户在该超文本传输协议代理配置页面中输入的代理服务器地址为代理服务器104a的地址,输入的代理端口为代理服务器104a所监听的端口。这样终端102就可以根据代理服务器地址和代理端口创建正向代理方式的网络连接。

如图8所示,在一个实施例中,漏洞检测装置700还包括:去重处理模块707和/或过滤模块708。

去重处理模块707用于对记录的用户访问网络请求进行去重处理。具体地,去重处理是指去除重复的用户访问网络请求。

过滤模块708用于从记录的用户访问网络请求中过滤掉用于请求静态内容的用户访问网络请求。静态内容是指可以直接获取的内容,不需要执行ASP、PHP或者JSP等服务器程序来生成。在一个实施例中,静态内容包括:图片、文本文档、HTML静态页面以及媒体文件。

本实施例中,对记录的用户访问网络请求进行去重处理,可以提高检测漏洞的效率。而且由于静态内容一般不会引发漏洞,过滤掉这部分用户访问网络 请求也可以提高检测漏洞的效率。

在一个实施例中,用于请求静态内容的用户访问网络请求,包括:所携带的动态内容参数个数为0的用户访问网络请求,具体地,用于请求静态内容的用户访问网络请求的网址一般不含有“?”、“=”、“&”等动态内容参数。当用户访问网络请求不携带有这些动态内容参数时,可认为是用于请求静态内容的用户访问网络请求。

在一个实施例中,用于请求静态内容的用户访问网络请求,包括:所请求的文件的扩展名包括静态文件扩展名的用户访问网络请求。本实施例中,通过匹配扩展名可以快速区分出用于请求静态内容的用户访问网络请求,可以进一步提高检测漏洞的效率。

具体地,静态文件扩展名包括图片的扩展名、文本文档的扩展名、HTML静态页面的扩展名以及媒体文件的扩展名。其中,图片的扩展名包括jpeg、png、gif以及ico等;文本文档的扩展名包括doc、pdf、txt以及xls等;HTML静态页面的扩展名包括css、js或者html等;媒体文件的扩展名包括mpeg、mp3、avi、flv、swf以及wma等。

在一个实施例中,可以从记录的用户访问网络请求中查找与静态文件扩展名所对应的正则表达式匹配的字符串,若查找到相应的字符串则过滤掉该用户访问网络请求。其中图片的扩展名所对应的正则表达式可为:"\.(?:(?:jpe?|pn)g|gif|ico)$";文本文档的扩展名所对应的正则表达式可为:"\.(?:doc|pdf|txt|xls)$";HTML静态页面的扩展名所对应的正则表达式可为:"\.(?:(?:cs|j)s|html?)$";媒体文件的扩展名所对应的正则表达式可为:"\.(?:mp(?:e?g|3)|avi|flv|swf|wma)$"。这里“\.”表示匹配字符“.”,“(?:pattern)”表示匹配模式pattern但不获取具体的匹配结果,“$”表示匹配输入字符串的结束位置。

在一个实施例中,漏洞检测装置700还包括代理模块,代理模块至少包括代理基础服务模块,还可以包括用于支持connect命令的代理子模块、用于支持FTP的代理子模块、用于支持HTTP的代理子模块以及SSL模块中的至少一种。本实施例中记录模块702可用具有日志记录功能的安全防护模块实现。

如图9所示,在一个实施例中,漏洞检测装置700还包括:第一配置信息读取模块709,用于读取第一配置文件中的第一配置信息;第一配置信息包括:监听端口、正向代理开关信息以及用户访问控制信息;监听端口为终端所设置的代理端口,正向代理开关信息为开启。请求接收模块701还用于根据第一配置信息接收终端通过正向代理方式发送的用户访问网络请求。

在一个实施例中,记录模块702还用于读取第二配置文件中的第二配置信息,根据第二配置信息,以日志形式记录用户访问网络请求;第二配置信息包括:配置为在检测到用户访问网络请求命中安全规则时,以日志形式记录用户访问网络请求的配置信息;和/或,配置为在检测到用户访问网络请求所对应的响应状态码为漏洞相关响应状态码时,以日志形式记录用户访问网络请求的配置信息。

具体地,第二配置文件可包括上述安全防护配置文件。安全规则是指用来识别出有可能触发漏洞的用户访问网络请求的识别条件。安全规则可以用正则表达式表示,此时若从用户访问网络请求中查找到与安全规则的正则表达式匹配的字符串,则表示命中该安全规则。比如安全规则可以是用户访问网络请求具有触发漏洞的能力的参数或者函数。

漏洞相关响应状态码,是指用于触发该漏洞相关响应状态码的用户访问网络请求具有触发漏洞的能力,认为该状态响应码是与漏洞相关的。漏洞相关响应状态码比如上述以5开头的响应状态码、以2开头的响应状态码、以3开头的响应状态码或者除了404的响应状态码。

本实施例中,在检测到用户访问网络请求命中安全规则时,或者在检测到用户访问网络请求所对应的响应状态码为漏洞相关响应状态码时,以日志形式记录用户访问网络请求,这样可以选择性地记录有可能触发漏洞的用户访问网络请求进行记录,可以进一步提高漏洞检测的效率。

上述漏洞检测装置700,使用终端的用户可以通过终端进行各种操作从而产生各种用户访问网络请求。接收终端通过正向代理方式发送的用户访问网络请求并记录,这样就可以获取到用户在各种场景下产生的用户访问网络请求。用于检测漏洞的漏洞检测网络请求是根据用户访问网络请求生成的,这样可以借 助用户在各种场景下产生的用户访问网络请求来进行漏洞检测,避免了因需要用户登录而导致的无法进行漏洞检测的情形,漏洞检测的覆盖率高。

在一个实施例中,漏洞检测装置700还包括用于根据记录的用户访问网络请求形成待检测列表中的条目并显示、且在根据记录的用户访问网络请求生成漏洞检测网络请求时更新待检测列表中相应的用户访问网络请求对应的条目的提交检测状态的模块。待检测列表中的每个条目包括用户访问网络请求的URL、请求的网络地址、请求体、提交检测状态以及条目插入时间。

在一个实施例中,漏洞检测装置700还包括用于根据漏洞检测结果生成漏洞处理列表中的条目并显示、在漏洞被修复后,更新相应条目中的条目处理状态,并添加处理完成时间和漏洞属性的模块。漏洞处理列表中的每个条目包括:请求的域名或者网络地址、检测漏洞的事件名称、条目处理状态、条目插入时间、检测的漏洞类型以及风险等级。

其中,检测漏洞的事件名称用来说明检测时间的简要信息,条目处理状态用来表示相应的条目是否被处理,检测的漏洞类型比如文件包含漏洞、管理后台漏洞、跳转漏洞、XXS漏洞、SQL注入漏洞或者测试页面未删除漏洞等,漏洞属性表示该漏洞是否有威胁。

危险等级可以分为三个等级,即高危险等级、中危险等级以及低危险等级。其中高危险等级对应直接获取服务器权限的漏洞、直接导致严重的信息泄漏漏洞、直接导致严重影响的逻辑漏洞、直接盗取用户身份信息的漏洞以及服务器越权访问漏洞。其中直接获取服务器权限的漏洞包括任意命令执行漏洞、上传webshell和任意代码执行漏洞。直接导致严重的信息泄漏漏洞包括重要数据库的SQL注入漏洞。直接导致严重影响的逻辑漏洞包括任意帐号密码更改漏洞。直接盗取用户身份信息的漏洞包括非重要数据库的SQL注入漏洞。服务器越权访问漏洞包括绕过认证访问服务器的漏洞。

中危险等级对应需交互才能获取用户身份信息的漏洞、任意文件操作漏洞和文件越权访问漏洞。需交互才能获取用户身份信息的漏洞包括存储型XSS漏洞,任意文件操作漏洞包括任意文件读、写、删除、下载等操作的漏洞,文件越权访问漏洞包括绕过限制修改用户资料、执行用户操作。

低危险等级则对应普通逻辑漏洞和需交互才能获取用户身份信息并且有一定利用难度的漏洞。普通逻辑漏洞包括提交操作无限制的漏洞,需交互才能获取用户身份信息并且有一定利用难度的漏洞包括反射型XSS漏洞。

在一个实施例中,漏洞检测装置700还包括用于根据漏洞检测结果生成按照请求的访问的站点归类的漏洞检测报告的模块。漏洞检测报告可以包括:站点标识、用户访问请求提交人信息、漏洞检测开始时间、漏洞检测结束时间、检测到的漏洞总数、站点风险等级、风险评分、漏洞关注人信息、漏洞处理进度以及漏洞详细信息。漏洞详细信息包括漏洞的风险等级、漏洞类型以及引发漏洞的URL。站点风险等级以及站点评分可以根据对应的漏洞的风险等级和/或漏洞数量来确定。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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