高效分析日志文件(上)

日期: 2009-07-26 作者:Brad Causey翻译:Sean 来源:TechTarget中国 英文

日志的分析工作需要有完善的搜索技能作基础,那样你才能找出问题所在。   现在似乎所有的新设备、工具、甚至桌面软件都可以生成日志或基于文本(text-based)的数据了。与此同时,迅猛产生的日志数据也给日志分析带来了不少挑战。   首当其冲的就是日志的集中采集和存储。

幸好现在我们有几种办法可用。日志通常都被集中转储到位于网络中心的syslog,日志管理或SIM系统里。因此,现在面临的最大问题就是如何才能有效地筛选这些日志数据并从中找出所需的相关安全信息。   虽然有好几种开源或商业软件可以进行一度程序的日志分析,但是有一个工具是它们都用到的–正则表达式(regex)。

从根……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

日志的分析工作需要有完善的搜索技能作基础,那样你才能找出问题所在。

  现在似乎所有的新设备、工具、甚至桌面软件都可以生成日志或基于文本(text-based)的数据了。与此同时,迅猛产生的日志数据也给日志分析带来了不少挑战。

  首当其冲的就是日志的集中采集和存储。幸好现在我们有几种办法可用。日志通常都被集中转储到位于网络中心的syslog,日志管理或SIM系统里。因此,现在面临的最大问题就是如何才能有效地筛选这些日志数据并从中找出所需的相关安全信息。
 
  虽然有好几种开源或商业软件可以进行一度程序的日志分析,但是有一个工具是它们都用到的--正则表达式(regex)。从根本上来说正则表达式就是一串字符串,它使得几乎任何一种语言或搜索工具都可以对大量的文本数据执行快速、高级的搜索操作。正则表达式现在有好几个变种,使用得最广泛的一种是Perl风格的正则表达式。.NET Framework,Python,Java,Javascript ,所采用的格式都属于Perl风格,当然Perl里用的也是。结合任何一种搜索工具或脚本语言使用这种正则表达式,你都可以从大量的数据里快速、高效地解析出有用信息。
 
  Apache,或者说httpd的日志是我们检查得最频繁的,我们时不时就得看看日志里有没有出现什么问题。这些Web日志里往往隐藏着许多重要信息。比如说攻击尝试、攻击成功的迹象,甚至还能发现攻击的征兆。
 
  我们将重点介绍通过egrep工具使用正则表达式。egrep提供了一种很简单的搜索文件的语法并且几乎在当前流行的所有操作系统上都可以用。( Windows用户可以 从各种 来源下载到它的免费版本)
 
  另外,记住所有能在egrep下使用的正则表达式在其它程序或脚本语言里也一样能兼容。
 
  在本文中,我们将用Apache日志进行示范。但是这种通过正则表达式、egrep处理httpd日志的方法可以在数百种其它的平台、工具以及日志类型上借用。理解什么是危险以及如何找出危险对于发现你们的安全隐患是非常重要的。
 
  第一步:了解日志格式

  要编写针对这些日志格式的正则表达式,我们首先就得理解它的结构。Aapche会保留服务器访问记录之类的信息,通常是在/etc/httpd/logs目录下,日志文件一般以access_log这样的方式命名。
 
  你可以配置Apache让它把日志记录发送到一个syslog或SIM系统上去,如果是这样的话,你的日志格式可能与默认格式略有不同。Apache会按如下格式保存用回车符分隔开的日志条目。

10.10.10.10 - frank [10/Oct/2007:
13:55:36 -0700] “GET /apache_pb.gif
HTTP/1.0” 200 2326

  让我们一点一点地分开看。第一个值,10.10.10.10就是客户端的IP地址,如果HostnameLookups启用了的话,接下来紧跟的就是客户端的主机名。往下来是日期和时间戳,10/Oct/2007:11:55:36 -0700。这对于某些与时间相关的操作是至关重要的。
 
  接下来,我们看到的是HTTP头信息。这个信息是非常重要,因为它让我们了解到用户发出的是哪种类型的请求。在本例中 “GET/apache_pb.gif HTTP/1.0 ”表示的是一个GET方式的请求,请求的目标是位于httpd服务器根目录下名为apache_pb.gif的这个图片文件。
 
  最后,服务器返回响应代码, 200 ,表示该请求已经成功处理了。余下的那一点信息则是服务器响应内容的长度。
 
  第二步:开始下手

  理解了日志格式的各个部分之后,我们就可以开始着手检查日志里的可疑请求记录了。例如,那些请求WebMin这个Web管理工具的记录,还有请求admin这样的管理界面的记录都是非常可疑的。
 
  大多数情况下这些特征字串都是日志记录里的一部分。知道这一点后,我们就可以把这些字串当作正则表达式用egrep处理。

>egrep –n webmin access_log

  这很容易看懂:先是egrep命令,然后跟上它的配置参数,然后是搜索条件,最后是要进行搜索的那个文件的文件名。
 
  加上-n参数后,就能显示出匹配的行的行号,以方便后面我们引用它。上面这条命令执行后应该要显示出所有在请求的URL里包含有webmin的日志条目, 比如像下面这个样子:

57:10.10.10.10 - bob
[10/Oct/2007:20:24:18 -0700] “GET /
webmin HTTP/1.0” 404 726

  结果显示在日志文件的第57行,有一条发生在10月10日下午8:44的请求记录,所请求的是Webmin目录。我们还看到服务器返回了一个404错误,表示无法定位到该目录。这样做是很有必要的,因为那有应该有访问权限的用户肯定已经明确知道文件的具体路径(而不用请求整个目录)。如果不处理好的话,Bob这样找着找着就能发现我们服务器的漏洞。

翻译

Sean
Sean

相关推荐