邓 英,王晓亮
(1.中国交通通信信息中心中交信有限责任公司,北京 100011;2.中国民航信息网络股份有限公司,北京 100009)
随着互联网技术的不断发展,互联网已经成为人们生活中必不可少的一部分,对经济和社会的发展起到了巨大的推动和促进作用。然而随着网络规模的不断扩大和网络应用的多样化,对网络安全提出了重要的挑战,近年来有关网络安全的漏洞数量一直处于增长的趋势,黑客往往利用这些漏洞作为攻击的爆破点对网站发起攻击,攻击成功后可能会恶意篡改网站信息,给互联网厂商的安全运营造成了巨大的安全威胁。在网络出现异常或遭受恶意入侵时,能够及时发出报警,并采取相应措施保证网络主要业务的正常运行,已成为重要的研究课题[1-4]。
目前,对入侵检测的方法主要分为事前检测、事中检测和事后检测。事前检测的原理为通过配置规则动态监控Web 应用的Request 和Response 流,发现特殊关键字和模式就认为出现入侵。这种分析方法对业内已经公开的漏洞防护较为有效,可以针对漏洞特点进行有效配置,起到有效防护的作用;但这种检测方法对于O-day 漏洞等检测效果较差。事中检测是在Web 应用运行过程中,收集大量的用户行为信息并进行实时分析的入侵检测。这种分析方法,一方面增加了应用逻辑的处理复杂度,影响应用正常业务逻辑的处理效率;另一方面,由于攻击者不停切换身份,变换session 绕开监控,也会让检测效果大打折扣。事后检测是通过分析入侵过程对系统产生的痕迹准实时的发现入侵,并及时采取措施,避免或者降低对系统产生的影响。这种分析方法属于离线分析的方法,不会对正在运行的Web 应用产生效率问题,也不需要Web 应用做大量的个性化开发。
本文根据Web 应用的特点提出一种检测方法,采用并行程序实时收集Web 系统的变化痕迹,并通过智能分析系统分析这些痕迹,最终判定是否为入侵。
标准网站架构为B/S(Browser/Server)架构,网站服务器又分为提供静态内容的Web 服务器和提供动态内容的App 服务器。静态内容指的是图片、Script 脚本、CSS 以及HTML 等程序文件;动态内容为JSP、ASP、Java Class 等程序文件。无论静态内容,还是动态内容,都是以独立文件的方式存在。黑客入侵系统后,无论篡改静态内容,还是篡改动态内容,都会对这些文件的存在状态(最后修改时间、文件大小、文件名称等)产生变化,这也是本文所论述的检测方法的理论依据。
基于这个检测依据,设计的检测模型如图1所示。
图1 检测模型和算法图
(1)对检测系统进行初始化,首先在检测系统里维护一个线程池{线程1,线程2,线程3,…,线程N{}},初始化静态文件和动态文件的检测规则{Rule1,Rule2,Rule3…RuleK},其中线程池里线程的数量N 与服务器数量M 相关。
(2)检测系统根据服务器的数量N 和服务器类型生成本次扫描任务的集合{Task1,Task2,Task3…Taskv}。
(3)检测系统采用并行计算的方式,将扫描任务{Task1,Task2,Task3…Taskv}由线程池{线程1,线程2,线程3,…,线程N{}}开始并行执行。
(4)获得扫描任务的线程开始执行任务,对服务器进行扫描,扫描Web 服务器和应用服务器上最新的被修改过的文件列表,并根据检测规则对扫描到的文件列表进行检测。如果检测到文件发生非正常变化,则认定该服务器遭到入侵修改。
(5)检测系统收集所有检测任务的执行结果,生成检测报告。
由于静态内容不存在编译问题,所以网站静态内容一旦发布,相关文件在网站运行过程中也不会发生改变。黑客入侵后,如要篡改这部分内容,必然要对静态内容的文件进行增加、删除和修改操作。因此检测静态内容文件的修改可以作为检测入侵的重要手段。而无论增加或者修改网站静态内容,都会修改相关内容文件的最后修改时间。如下是标准的Linux 系统文件,对文件内容的增加和修改,操作系统都会对Modify 时间进行更新,本文就利用Linux 操作系统的这一特点,利用Linux 系统中的find 命令检测变化文件列表,如下检测test 目录下最近30分钟内修改过的文件和文件夹列表。如果直接对文件进行增加和修改,那么该命令可以快速检测到新增或者被修改的文件。
静态内容检测流程如下:
(1)通过find 指令检测最近一段时间内被修改的文件列表。
(2)如果文件列表为空,说明没有发生入侵。如果列表中含有文件或者文件夹,说明静态文件或者文件夹被修改;如果不是维护人员正常的正常操作,极有可能发生入侵。
动态内容一般都会部署在应用服务器上,以J2EE 的JBOSS应用服务器为例(WebSphere 和tomcat 等也有类机制),应用服务器上有deploy,work 和tmp 三个目录,deploy 目录主要用于存放war 包文件;tmp 目录主要用于存放Web 应用中的class 文件和相关配置文件;work 目录用来存放运行过程中产生的jsp 文件和jsp 相关的编译文件。J2EE 应用服务器在运行过程中用到的jsp 文件,都会先被编译成java 文件,然后再编译成可执行的class 文件。JSP 编译过程中产生的java 文件和class 文件会被放到work 目录下。work 和tmp 中出现的文件是deploy 中war 包中文件的子集,这也是对动态内容进行智能检测的理论依据。
图2 检测算法流程图
图3 动态检测模型与算法图
网页的动态内容是在黑客入侵过程中风险最高的部分,黑客找到Web 应用的安全漏洞后,一般会选择上传动态脚本到动态内容目录,如tmp 目录,然后通过外网就可以远程就可以控制应用服务器了。
由于动态内容和静态内容工作机制的不同,在运行过程中,JBOSS 应用服务器也会动态修改tmp 和work 目录内的文件,因此无法简单通过文件的最后修改时间来判断是否发生黑客入侵。
动态内容检测流程如下:
(1)检测最近一段时间内被修改的文件列表。
(2)如果文件列表为空,说明没有发生入侵。
如果列表中含有程序配置文件,由于配置文件在运行过程中不应该发生变化,故极有可能发生入侵。如果列表中含有临时目录中的文件,则根据应用服务器的特点,根据检测规则进一步进行判别,判断新增文件是否合法。如果新增文件或者被修改的文件不合法,则认定发生入侵。
静态文件变动检测:对116台服务器在内网环境下进行静态扫描,扫描在最近30分钟被修改过的文件和文件夹,扫描结果如图4所示。实验结果发现扫描时间为1080毫秒,未发生文件修改和入侵。
图4 扫描结果
手工登录到某台服务器,对服务器上的静态文件进行修改,检测程序快速的扫描到该文件和该文件的变化,并开始报警,检测时间为1秒左右,扫描结果如图5所示。
图5 静态文件变动扫描结果
动态文件变动扫描时,手工登录到某台应用服务器,对服务器上的动态文件内容进行修改,检测程序非常快速的扫描到该文件的大小发生了变化,并开始报警,检测时间也在1秒左右。具体信息如图6所示:
图6 动态文件变动扫描结果
从实验结果来看,基于文件系统监控的检测方法的检测结果具有如下特点:扫描效率高。100台服务器在1秒左右能够完成扫描,扫描效率很高。扫描结果准确。发生文件被变动时,可以在第一时间发现并预警。部署简单。基于文件系统的漏洞检测,不需要Web 应用进行个性化代码开发,部署简单,扫描规则调整也比较方便,能够很快地在企业内部进行推广,跟企业内部的监控和运维体系进行整合。