论文部分内容阅读
摘要:日志文件分析是系统安全检测的重要内容,同时日志文件也是计算机取证的重要依据。文章设计了第三方的Windows日志取证系统,并讨论了今后的研究方向。
关键词:日志文件;网络取证;审计跟踪;IRP
0 引言
当前网络应用非常广泛,网络涉及了各种各样的信息,由此产生各种攻击事件非常多,有些已经构成网络犯罪。我们除了对攻击进行防范外,还要记录下犯罪现场的信息,得到黑客入侵证据,以便分析入侵者的企图和事后追究责任。这需要记录网络状态、系统状态等一系列的数据和信息。整个记录系统中有一个重要的环节是系统日志的获取,但系统中的任何日志文件都可能被入侵者改动过,因此必须要获得原始的系统日志,尤其对于存储了敏感信息的服务器,或者是安全需求大的部门,不仅在系统受到威胁时需要备份出原始的系统日志,平时也需要备份出原始的系统日志。本文就是设计一个基于Windows的用于计算机取证的日志系统。该系统有相对独立的取证计算机,不影响原系统,在实时取证中,不会破坏原始的系统状态,不会惊扰攻击者,可以跟踪攻击过程,以便分析入侵者的企图和攻击技术。有了全面完整的日志,也便于事后的分析和追究责任。
1 取证日志
1.1 Windows日志
Windows日志的默认存放路径是%SystemRoot%\system32\config\,其中应用日志为AppEvent.Evt,系统日志为SysEvent.Evt,安全日志为SecEvent.Evt。其文件格式为Windows日志文件专用的格式。日志文件中包含了一定的信息,但还有一些信息是在另外的dll文件中。在日志记录结构中,有定长的部分和不定长的部分。定长部分是固定的描述信息,在定长结构的最后就是事件来源信息。不定长部分则是相关的描述信息。在描述信息中有一些插入字符串,如n%的形式,这些插入字符存在相关的dll文件中。
1.2 日志文件的防护
计算机取证的数据保护的重点是日志保护,它是取证与反取证斗争的焦点。日志文件包含大量敏感的记录,每条记录由时间戳和操作描述组成。普通日志系统非常脆弱,入侵者能轻易读取、修改或删除日志而不留痕迹。安全保存日志的方法有:①将日志“定期”备份到异地的日志主机,缺点是日志易被篡改;②直接打印日志或写入WORM(Write Once Read Multiple)介质,缺点是费用昂贵,不适应大容量日志;③将日志数据“实时”发送到远程的日志主机。攻击者对攻击目标的操作系统的漏洞非常熟悉,但用另一个系统存储日志,作为第三方日志,可以被隔离保护,免受入侵者攻击。第三方存储作为计算机取证的核心技术之一,目前在国内还属于新技术。本文设计的系统功能就是将日志数据“实时”发送到远程的日志主机,作为取证的日志系统。
2 系统设计
2.1 系统拓扑介绍
把要记录日志的那台机器称为被取证机。我们不能把日志信息记录在被取证机上,因为从原理上来说有被黑客删除的可能。所以要把日志信息传到另一台黑客所不能发现的,但与被取证机连在同一个网络上的机器上,这台机器称为取证机。不同的被取证机上运行的操作系统有多种类型(Windows。Liunx,Unix),本文设被取证机上运行Windows2000(2003)操作系统。日志获取模块在Windows2000(2003)下截获操作系统产生的日志,并通过SSL加密方式传到取证机上。取证机上运行的操作系统是Linux,上面运行接收模块,接收模块把接收到的日志解密,用给定的格式存储,实现了整个系统的日志记录。
2.2 系统结构图
取证系统的结构。
2.3 Windows系统模块功能
在Windows系统上,运行三个模块:日志信息获取模块、日志信息缓存模块、加密认证传输模块。各模块主要功能如下:
2.3.1日志信息获取模块
日志信息获取模块是上述三个模块中最重要的部分,它又分为:主引导子模块、过滤器驱动程序子模块、日志获取线程子模块。其中主引导子模块的作用就是启动日志获取线程。
过滤器驱动子模块:是一个独立的模块,主要进行日志截取处理,利用Windows系统驱动程序的方式来实现。
Windows系统由好几个部分组成,而且是分层次的,上层的程序运行依靠下层的服务。一般来说,上层的程序运行方式叫用户模式(user Mode),一般的API就是运行在这种模式。在用户模式下,程序只能得到有限的权限使用计算机的资源,很多硬件资源是限制的,不允许访问。这样可防止用户模式程序不经意地,或故意地会造成计算机崩溃的操作,从而保护了计算机。用户模式下的程序运行在3个级别的权限下。处于用户模式下层的是核心模式(Kernel Mode),核心模式下的程序可用任何计算机资源,没有限制,也就是运行在0级权限下。在这种模式下,误操作很容易会引起系统死机。日志获取模块为了更可靠地截取到日志记录,使用了过滤器驱动的方法,驱动运行在核心模式,从而可以在系统底层得到更多的权限,把日志充分地记录下来。
用户模式对计算机的操作其实是通过向底层即核心模式发送请求实现的。每一个请求被封装成一个包,叫IRP(IJOrequest packet),包里面有操作的相关信息。所以用驱动进行日志截取的原理就是,当对日志文件写入日志信息时,就会有一个IRP发到底层,只要截获了这个IRP,那就能从IRP里面得到写入的信息,也就是说得到日志实时记录信息。而截获IRP的过程是由过滤器驱动实现的。
过滤器驱动会在启动的时候或适当的时候把自己挂接到硬盘驱动上去,只要挂接成功,对硬盘操作的IRP不再发向硬盘驱动,而是传到了过滤器驱动上,过滤器驱动作相应的处理后再传到硬盘驱动,这就是截获的过程。
该驱动程序在系统启动时会由日志获取线程子模块中的服务调用,一直驻留在内存中,直到关机或用户让服务停止驱动才停止工作。同一时间系统只运行一个实例,它负责截取指定文件的写入操作,把写入的内容记录下来,并在其它模块的要求下传送截获的内容。
在这个模块中数据流的变化:日志信息获取模块截获数据并进行格式化,得到格式化的字节流,字节流将组装成日志信息对象及日志信息对象指针。
日志获取线程子模块:在本系统中日志的获取和传输是通过服务来实现的。将相关功能写成服务,这样更可靠、稳定。为了实现可靠、稳定的目的,共设计了三个眼务。第—个是主要的服务:启动日志获取线程,调用过滤器驱动程序。为防止服务意外终止,又设计了第二个服务,用于保护的服务。这两个服务互相监视,若发现一方停止,另一方会马上启动被停止的一方,这样就能保证服务不会停止。为了方便用户,还设计—个用于停止这两个服务的程序,以便在确实需要停止的时候,可以停止前两个服务。
2.3.2日志信息缓存模块
日志信息缓存模块的功能是对日志获取模块获得的数据作缓存处理。其中控制功能部分依靠中心控制器来完成,中心控制器检测到当前优先级队列中有缓存的数据,立即查看它所缓存的传输控制对象的指针是否已经初始化,若没有,则先获取传输控制对象,否则进行下一步:利用缓存的指向传输控制对象的指针,进行数据的传输Send。Send函数执行过程中,传输控制对象将对它进行数据的加密、认证等操作,这些操作对于其他对象或者模块而言是透明的。
2.3.3 加密认证传输
加密认证传输部分主要是获得日志信息缓存模块中的日志信息对象指针,对该指针所指向的数据进行加密、认证并传输。传输以网络bit流方式进行。
2.4 Linux系统模块功能
Linux一方完成日志信息接收和解密:监听网络数据流,一旦有数据流到达,则进行接收,接收后立即进行数据解密。使用对象缓存的日志信息存储对象的指针,调用相关操作进行日志的存储操作,解析数据接收控制对象的数据,进行正确的日志保存。通过数据接收控制对象得到格式化的字节流,对格式化的字节流,按照Windows的日志格式和规范进行存储,保证数据在Windows平台上的正确格式,产生日志文件。
3 结束语
本系统为了安全、可靠,通过IRP(UO request packet)来获得日志信息,所以对WWW、FTP所产生的Log文件不能截获,因为对这些Log文件的操作不经过Fast I/0及一般的IRP。在下一步的工作中,要实现相关服务所产生的Log文件的获取;另外,将在现有的模型基础上,实现基于Linux操作系统的日志取证,并通过实践进一步完善模型的设计。
关键词:日志文件;网络取证;审计跟踪;IRP
0 引言
当前网络应用非常广泛,网络涉及了各种各样的信息,由此产生各种攻击事件非常多,有些已经构成网络犯罪。我们除了对攻击进行防范外,还要记录下犯罪现场的信息,得到黑客入侵证据,以便分析入侵者的企图和事后追究责任。这需要记录网络状态、系统状态等一系列的数据和信息。整个记录系统中有一个重要的环节是系统日志的获取,但系统中的任何日志文件都可能被入侵者改动过,因此必须要获得原始的系统日志,尤其对于存储了敏感信息的服务器,或者是安全需求大的部门,不仅在系统受到威胁时需要备份出原始的系统日志,平时也需要备份出原始的系统日志。本文就是设计一个基于Windows的用于计算机取证的日志系统。该系统有相对独立的取证计算机,不影响原系统,在实时取证中,不会破坏原始的系统状态,不会惊扰攻击者,可以跟踪攻击过程,以便分析入侵者的企图和攻击技术。有了全面完整的日志,也便于事后的分析和追究责任。
1 取证日志
1.1 Windows日志
Windows日志的默认存放路径是%SystemRoot%\system32\config\,其中应用日志为AppEvent.Evt,系统日志为SysEvent.Evt,安全日志为SecEvent.Evt。其文件格式为Windows日志文件专用的格式。日志文件中包含了一定的信息,但还有一些信息是在另外的dll文件中。在日志记录结构中,有定长的部分和不定长的部分。定长部分是固定的描述信息,在定长结构的最后就是事件来源信息。不定长部分则是相关的描述信息。在描述信息中有一些插入字符串,如n%的形式,这些插入字符存在相关的dll文件中。
1.2 日志文件的防护
计算机取证的数据保护的重点是日志保护,它是取证与反取证斗争的焦点。日志文件包含大量敏感的记录,每条记录由时间戳和操作描述组成。普通日志系统非常脆弱,入侵者能轻易读取、修改或删除日志而不留痕迹。安全保存日志的方法有:①将日志“定期”备份到异地的日志主机,缺点是日志易被篡改;②直接打印日志或写入WORM(Write Once Read Multiple)介质,缺点是费用昂贵,不适应大容量日志;③将日志数据“实时”发送到远程的日志主机。攻击者对攻击目标的操作系统的漏洞非常熟悉,但用另一个系统存储日志,作为第三方日志,可以被隔离保护,免受入侵者攻击。第三方存储作为计算机取证的核心技术之一,目前在国内还属于新技术。本文设计的系统功能就是将日志数据“实时”发送到远程的日志主机,作为取证的日志系统。
2 系统设计
2.1 系统拓扑介绍
把要记录日志的那台机器称为被取证机。我们不能把日志信息记录在被取证机上,因为从原理上来说有被黑客删除的可能。所以要把日志信息传到另一台黑客所不能发现的,但与被取证机连在同一个网络上的机器上,这台机器称为取证机。不同的被取证机上运行的操作系统有多种类型(Windows。Liunx,Unix),本文设被取证机上运行Windows2000(2003)操作系统。日志获取模块在Windows2000(2003)下截获操作系统产生的日志,并通过SSL加密方式传到取证机上。取证机上运行的操作系统是Linux,上面运行接收模块,接收模块把接收到的日志解密,用给定的格式存储,实现了整个系统的日志记录。
2.2 系统结构图
取证系统的结构。
2.3 Windows系统模块功能
在Windows系统上,运行三个模块:日志信息获取模块、日志信息缓存模块、加密认证传输模块。各模块主要功能如下:
2.3.1日志信息获取模块
日志信息获取模块是上述三个模块中最重要的部分,它又分为:主引导子模块、过滤器驱动程序子模块、日志获取线程子模块。其中主引导子模块的作用就是启动日志获取线程。
过滤器驱动子模块:是一个独立的模块,主要进行日志截取处理,利用Windows系统驱动程序的方式来实现。
Windows系统由好几个部分组成,而且是分层次的,上层的程序运行依靠下层的服务。一般来说,上层的程序运行方式叫用户模式(user Mode),一般的API就是运行在这种模式。在用户模式下,程序只能得到有限的权限使用计算机的资源,很多硬件资源是限制的,不允许访问。这样可防止用户模式程序不经意地,或故意地会造成计算机崩溃的操作,从而保护了计算机。用户模式下的程序运行在3个级别的权限下。处于用户模式下层的是核心模式(Kernel Mode),核心模式下的程序可用任何计算机资源,没有限制,也就是运行在0级权限下。在这种模式下,误操作很容易会引起系统死机。日志获取模块为了更可靠地截取到日志记录,使用了过滤器驱动的方法,驱动运行在核心模式,从而可以在系统底层得到更多的权限,把日志充分地记录下来。
用户模式对计算机的操作其实是通过向底层即核心模式发送请求实现的。每一个请求被封装成一个包,叫IRP(IJOrequest packet),包里面有操作的相关信息。所以用驱动进行日志截取的原理就是,当对日志文件写入日志信息时,就会有一个IRP发到底层,只要截获了这个IRP,那就能从IRP里面得到写入的信息,也就是说得到日志实时记录信息。而截获IRP的过程是由过滤器驱动实现的。
过滤器驱动会在启动的时候或适当的时候把自己挂接到硬盘驱动上去,只要挂接成功,对硬盘操作的IRP不再发向硬盘驱动,而是传到了过滤器驱动上,过滤器驱动作相应的处理后再传到硬盘驱动,这就是截获的过程。
该驱动程序在系统启动时会由日志获取线程子模块中的服务调用,一直驻留在内存中,直到关机或用户让服务停止驱动才停止工作。同一时间系统只运行一个实例,它负责截取指定文件的写入操作,把写入的内容记录下来,并在其它模块的要求下传送截获的内容。
在这个模块中数据流的变化:日志信息获取模块截获数据并进行格式化,得到格式化的字节流,字节流将组装成日志信息对象及日志信息对象指针。
日志获取线程子模块:在本系统中日志的获取和传输是通过服务来实现的。将相关功能写成服务,这样更可靠、稳定。为了实现可靠、稳定的目的,共设计了三个眼务。第—个是主要的服务:启动日志获取线程,调用过滤器驱动程序。为防止服务意外终止,又设计了第二个服务,用于保护的服务。这两个服务互相监视,若发现一方停止,另一方会马上启动被停止的一方,这样就能保证服务不会停止。为了方便用户,还设计—个用于停止这两个服务的程序,以便在确实需要停止的时候,可以停止前两个服务。
2.3.2日志信息缓存模块
日志信息缓存模块的功能是对日志获取模块获得的数据作缓存处理。其中控制功能部分依靠中心控制器来完成,中心控制器检测到当前优先级队列中有缓存的数据,立即查看它所缓存的传输控制对象的指针是否已经初始化,若没有,则先获取传输控制对象,否则进行下一步:利用缓存的指向传输控制对象的指针,进行数据的传输Send。Send函数执行过程中,传输控制对象将对它进行数据的加密、认证等操作,这些操作对于其他对象或者模块而言是透明的。
2.3.3 加密认证传输
加密认证传输部分主要是获得日志信息缓存模块中的日志信息对象指针,对该指针所指向的数据进行加密、认证并传输。传输以网络bit流方式进行。
2.4 Linux系统模块功能
Linux一方完成日志信息接收和解密:监听网络数据流,一旦有数据流到达,则进行接收,接收后立即进行数据解密。使用对象缓存的日志信息存储对象的指针,调用相关操作进行日志的存储操作,解析数据接收控制对象的数据,进行正确的日志保存。通过数据接收控制对象得到格式化的字节流,对格式化的字节流,按照Windows的日志格式和规范进行存储,保证数据在Windows平台上的正确格式,产生日志文件。
3 结束语
本系统为了安全、可靠,通过IRP(UO request packet)来获得日志信息,所以对WWW、FTP所产生的Log文件不能截获,因为对这些Log文件的操作不经过Fast I/0及一般的IRP。在下一步的工作中,要实现相关服务所产生的Log文件的获取;另外,将在现有的模型基础上,实现基于Linux操作系统的日志取证,并通过实践进一步完善模型的设计。