欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

调查Web应用攻击事件:如何通过服务器日志文件追踪攻击者

来源:本站整理 作者:佚名 时间:2017-07-07 TAG: 我要投稿

如果你想寻找那些让你系统遭受攻击的漏洞或起因的话,我建议你可以从日志记录开始着手调查。
存储在服务器端的日志文件是一种非常有价值的信息,几乎所有的服务器、在线服务和应用程序都会提供各种各样的日志信息。但你真的知道日志文件到底为何物吗?日志文件可以记录一个服务或应用程序在运行过程中所发生的事件和活动。那为什么日志文件会如此重要呢?因为日志文件可以让我们对服务器的所有行为一目了然,日志会告诉我们一台服务器在什么时候被什么人用什么样的方式访问过,而这些信息不仅可以帮助我们监控服务器或应用程序的性能和异常信息,而且还可以帮助我们调试应用程序。更重要的是,日志可以帮助取证调查人员分析可能那些导致恶意活动的事件链。
接下来,我以一台Web服务器作为例子来进行讲解。一般来说,Apache HTTP服务器会提供两种主要的日志文件,即access.log和error.log。access.log会记录所有针对文件的请求,如果访问者请求了www.example.com/main.php,那么下面这项日志条目便会添加到日志文件中:

"text-indent: 2em;">88.54.124.17 - - [16/Apr/2016:07:44:08 +0100] "GET /main.php HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
/p>
上面这条日志信息描述的是:一名访问者请求获取main.php文件,他的IP地址为88.54.124.178,请求时间为2016年4月16日07时44分,请求状态为“成功”。
你可能会认为这些信息并没有什么意义,那如果服务器记录下的是:访问者(IP:88.54.124.178)在2016年4月16日07时44分请求访问了dump_database.php文件,并且请求成功,那么这下可就麻烦了!
如果没有日志文件的话,你可能永远都不会知道谁访问过你的服务器,或谁导出过你的数据库记录。而且更加可怕的是,你永远都不会知道谁在你的服务器中运行过恶意脚本…
既然大家都已经知道了日志文件的重要性,那么接下来让我们一起看一看在日常工作中日志文件如何帮助我们确认网站是如何被攻击的。
分析调查
我们先假设下面这种场景:我们所管理的一个网站遭到了攻击,该网站非常的简单,这是一个过期的WordPress站点,运行在最新版的Ubuntu服务器上。

发现网站被攻击之后,取证团队迅速将服务器下线,以便进行下一步的分析调查。
隔离服务器是为了保持系统当前的状态以及相关的日志记录,并防止远程攻击者和其他的网络设备继续访问该服务器。调查分析的目的是识别出该Web服务器上所发生的恶意活动,为了保证调查数据的完整性,我们首先要对目标服务器进行备份,然后对克隆出来的服务器镜像进行分析。不过考虑到我们并不打算追究攻击者的法律责任,所以我们可以直接在原始数据上进行分析研究。
调查过程中需要的证据
在开始调查之前,首先得确定我们需要那些证据。一般来说,攻击证据包含攻击者对隐藏文件或关键文件得访问记录、对管理员权限区域内的非授权访问、远程代码执行、SQL注入、文件包含、跨站脚本(XSS)以及其他的一些异常活动,而这些证据从一定程度上可以代表攻击者所进行的漏洞扫描以及侦察活动。
假设在我们的场景中,Web服务器的access.log是可获取的:

"text-indent: 2em;">root@secureserver:/var/log/apache2# less access.log
access.log的体积一般都非常庞大,通常包含成千上万条请求记录:

"text-indent: 2em;">84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/index.php HTTP/1.1" 200 3804 "-" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/assets/js/skel.min.js HTTP/1.1" 200 3532 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic01.jpg HTTP/1.1" 200 9501 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
84.55.41.57 - - [16/Apr/2016:20:21:56 +0100] "GET /john/images/pic03.jpg HTTP/1.1" 200 5593 "http://www.example.com/john/index.php" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"
/p>
你想要一行一行地检查这些数据几乎是不现实的,所以我们要筛选出有用的数据,比如说类似图片或CSS样式表这样的资源数据,有的调查人员还会筛选出JavaScript文件等等。
在我们的场景中,由于网站运行的是WordPress,所以我们需要筛选出access.log文件中与WordPress有关的字符:

"text-indent: 2em;">root@secureserver:~#cat /var/log/apache2/access.log | grep -E "wp-admin|wp-login|POST /"
上面这行命令会将access.log文件中包含wp-admin、wp-login以及POST等关键字的记录筛选出来。其中,wp-admin是WordPress的默认管理员文件夹,wp-login是WordPress的登陆文件,POST方法表明发送至服务器端的HTTP请求使用的是POST方法,一般来说都是登录表单提交。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载