摘 要 攻击场景是指入侵者为达到入侵目的所采取的一系列攻击步骤。目前的攻击场景重构方法只基于入侵检测系统的报警消息,漏报和误报严重影响了攻击场景的准确重构。提出了证据支持度的概念,将日志关联融合到攻击场景重构的过程中,提出了一种新的攻击场景重构模型,有效地提高了攻击场景重构的准确度。
0 引言
随着计算机技术,特别是网络技术的不断发展,人们的工作效率得到极大提高。同时,由于网络的开放性和系统的漏洞带来了安全方面的问题:病毒的传播能够造成系统的崩溃、信息的丢失甚至整个计算机网络的瘫痪;黑客对信息系统的攻击会造成机密信息、个人资料的泄漏和丢失,造成难以估计的损失。对于日益严重的安全问题,必须采取相应的措施,才能够保证计算机系统的安全,将可能的损失减到最小。
要能够及时准确地发现入侵企图,必须要知道入侵者的具体入侵步骤,单纯依靠入侵检测系统低级且数量众多的报警信息是不现实的。因此必须基于已有的入侵检测系统和众多的日志系统重构入侵者的入侵步骤,使管理员和响应系统能正确理解入侵目的,做出正确的反应。
本文采用了根据入侵检测报警的前提条件和可能后果进行攻击场景重构的方法[1]。然而,由于该方法在重构过程中只是基于入侵检测报警,入侵检测系统的误报和漏报会严重影响该方法的准确程度。根据特定入侵行为会在不同的日志中留有不同痕迹的事实,以及关联多种日志能提高入侵检测准确率的可能性,我们对该框架和方法进行了扩展,增加了日志事件、证据支持关系和证据支持度的概念,将特定入侵行为与特定的日志事件关联起来,采用证据支持度来评价重构后的攻击场景中攻击步骤的正确性,同时根据异常日志事件来推断可能漏报的入侵行为,合并被漏报分离的攻击场景。
1 总体结构
我们采用多台收集、集中分析的办法,将每台主机的入侵检测系统(网络入侵检测系统和主机入侵检测系统)的报警信息和系统日志(操作系统和应用程序日志)集中发送到取证机进行保存和分析。在取证机上进行单台主机的攻击场景重构和分布式攻击场景重构。为了保证通信的安全,各主机与取证机之间的通信必须基于安全通信协议。
不同的入侵检测系统的报警格式不同,要让它们协同工作,必须制定统一的报警信息格式。网络入侵检测系统和主机入侵检测系统都采用统一的入侵检测消息交换格式(IDMEF)。
2 基本原理
由于入侵检测系统的漏报和误报,单纯依靠入侵检测系统报警信息进行攻击场景重构的准确率不高。而入侵者会在不同的日志文件中留下异常痕迹,我们将报警信息与对应的不同日志关联起来。对于可能的误报,用日志异常证据来评价重构后的攻击场景,验证可能的误报。对于可能的漏报,根据异常日志所对应的可能报警在多个攻击场景之间进行匹配。
3 攻击的前提条件和后果
我们采用[1]中提到的关联报警信息重构攻击场景的方法,使用谓词来表示攻击的前提条件和后果。
例如:攻击者在利用FTP的漏洞进行攻击前,连接到FTP服务器,使用SYST命令获取操作系统信息。这个动作被入侵检测系统发现后报警。那么这个攻击的前提条件可以用谓词ExistService(DestIP,DestPort)来表示,表明在地址为DestIP的主机上的DestPort端口存在服务。后果可以用谓词GainOSInfo(DestIP)来表示,表明攻击者获得了该主机的操作系统信息。
当攻击的前提条件需要同时满足多个条件时,采用多个谓词的合取式来表示这些条件。例如:攻击者利用wu-ftpd的漏洞进行缓冲区溢出攻击,这个攻击的前提条件可以表示为ExistService(DestIP,DestPort)∧VulnerableFTP(DestIP)。表明该主机存在FTP服务,同时存在有FTP缓冲区溢出的漏洞。
4 超报警类型(Hyper-alert Type)
由于同一种报警可能发生多次,我们使用超报警类型表示特定报警和其前提条件以及可能后果的关系类型,而使用超报警类型实例来表示具体的报警信息。
定义1:超报警类型T是一个三元集(f,p,c)
f是一组属性的集合,每个属性有其域值;
p是一组谓词的合取式,其中的自由变元都属于f;
c是一组谓词的集合,其中的自由变元都属于f
超报警类型描述了攻击的类型。其中f是报警时的相关信息(时间、IP地址和端口号等),p是攻击要成功必须成立的条件,c是攻击发生后可能的后果。
定义2:超报警类型对应的超报警实例h是一组元组有限集合。它基于超报警类型的属性集合f,同时h中每一个元组t对应与特定的时间段[t.begin_time, t.end_time], t.begin_time和t.end_time为时间戳。所有的元组必须保证前提条件p的成立。
定义3:对超报警类型T = (f,p,c)来说,将所有在前提条件集合p中出现的谓词的集合表示为前提条件集P(T),同样的将后果集合c中出现的谓词的集合表示为后果集C(T)。对应于类型T的实例h,将P(T)和C(T)中的自由变量赋以h中元组对应的属性值,分别记为P(h)和C(h)。
定义4:准备关系。对超报警实例h1和h2来说,如果存在p∈P(h2),C⊆C(h1),集合C中的任一元素c满足c.end_time早于p.begin_time,并且集合C中的所有谓词的合取式能够满足p,那么我们认为h1为h2作了准备,即prepare for关系。h2是h1的后续攻击步骤。
5 对攻击场景构建框架的扩展
5.1 对超报警类型的扩展
由于入侵者的入侵行为会在不同日志中留下痕迹,因此关联众多日志数据能够提高入侵检测的准确度,降低误报和漏报率。基于此,我们对超报警类型[1]进行扩展,提出了日志事件和证据支持关系的概念,将超报警类型与特定的日志事件关联起来,从而对重构好的攻击场景进行评价和验证,消去误报的入侵步骤,同时猜测漏报以合并攻击场景。
定义5:日志事件类型Audit_Event_Type = (Audit_Name, Audit_Level),其中Audit_Name是日志源类型,Audit_Level是日志事件的级别。不同的日志条目映射到不同的日志事件类型。
其中Audit_Name∈{ AUTH , CRON , DAEMON , FTP , LPR , MAIL , NEWS , SYSLOG , UUCP , WEB , FIREWALL}
Audit_Level∈{ Emerg , Alert , Crit , Err , Warning , Notice , Info , Debug }
日志事件的类型和级别的分类参考了Syslog的设备分类和级别分类。Syslog中的日志条目可以直接映射到日志事件类型。Audit_Event_Type中级别和分类都包含了Syslog的级别和分类。其他的日志则要做转换,如Apache的日志access_log和error_log则归为WEB类。
定义6:日志事件Audit_Event = ( Audit_Name, Audit_Level, timestamp),timestamp是时间戳,Audit_Name和Audit_Level定义同上。
所有的日志文件在增加一条日志记录时都会附加一个时间戳,因此,任何日志文件中的记录都可以转化为日志事件。
定义7:证据类型E = {Audit_Event_Type1 , Audit_ Event_ Type2, …, Audit_Event_Typen},其中Audit_Event_Typei ( i=1 ... n )是日志事件类型。表示日志事件类型的集合。
定义8:证据支持关系R = (T, E),T为超报警类型,E为证据类型。E为T的证据,当类型为T的超报警实例h发生时,证据E中包含的日志事件类型会同时发生。
5.2 证据支持度
定义9:证据支持度S = f(t),定义为超报警实例h中的元组t的函数。证据支持度反映了在时间段[t.begin_ time,t.end_time]内,t的超报警类型所对应的证据类型中日志事件的存在情况。
我们在这里定义两种证据支持度,S1和S2。其中,S1用于攻击场景重建后误报攻击的消去,S2用于多个攻击场景之间猜测漏报的选取。
命题1:入侵事件的发生一定会导致伴随其发生的日志事件的发生。
对于已知的入侵事件,我们可以准确地指定伴随该事件肯定发生的日志事件。假设命题1成立,命题1的逆否命题为,如果伴随该入侵事件的日志事件没有发生,则该入侵事件并未发生。
如果命题1成立,根据入侵检测系统的报警信息所对应的证据类型,我们就能够判断攻击是否真的发生。
定义10:证据支持度S1 = f(t),如果在时间段[t.begin_time,t.end_time]内,t的超报警类型T所对应的证据类型E中的所有日志类型事件都存在,则S1=1,否则,S1=0。
对于入侵检测系统漏报的入侵可以分为两种情况:已知攻击的变种和未知的攻击。已知攻击的变种多少与原有攻击有共同点,伴随其发生的日志事件也有共同点。我们可以用证据类型所对应的日志事件发生的比例来评价变种攻击的可能性。
定义11:我们定义N1为发生在时间段[t.begin_time, t.end_time]内,且属于t的超报警类型T所对应的证据类型E的日志事件的类型总数,定义N2为t的超报