使用Web日志还原攻击路径

来自公众号:Bypass
文章来源:https://www.acunetix.com/blog/articles/using-logs-to-investigate-a-web-Application-attack/
日志文件是服务器提供的非常有价值的信息,几乎所有的服务器、服务和应用程序都提供某种类型的日志记录,用来记录服务或应用程序运行时发生的事件和操作 。
日志文件为我们提供了服务器行为的精确视图以及关键信息,例如何时、如何以及由谁访问了服务器 。这类信息可以帮助我们监视性能、排除故障和调试应用程序,并帮助调查取证人员展开可能导致恶意活动的攻击链 。
以web服务为例,访问日志access.log记录了所有对Web服务器的访问活动 。假设访问者访问 www.example.com/main.php,将在日志文件中添加以下记录:
88.54.124.17 - - [16/Apr/2019: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"
上述日志显示,IP地址为88.54.124.178的访问者于2019年4月16日07:44访问了main.php页面,并且访问成功 。
这个信息可能不太重要,但如果日志文件显示IP为88.54.124.178的访问者在2019年4月16日07:44访问dump_database.php页面,并且请求成功,该怎么办?如果没有该日志文件,我们可能永远不会知道有人发现并运行了网站上的受限脚本,从而转储数据库 。
在确定了日志文件是一项关键资产之后,让我们通过一个攻击案例来进行web日志安全分析,还原攻击路径 。
攻击案例
假设我们管理的wordPress/ target=_blank class=infotextkey>WordPress网站遭到篡改:
使用Web日志还原攻击路径

文章插图
发现网站被攻击之后,运维团队将服务器断网下线处理,保持系统及其日志的当前状态,以便能够进一步分析调查 。
通常我们需要创建一个服务器硬盘镜像备份,然后在镜像虚拟机做一些操作去溯源 。但是,由于仅用于进行演示,在这种情况下,调查取证小组可以处理原始数据 。
调查取证
为了开始调查,我们需要确定要寻找的证据 。通常,攻击证据包括攻击者直接访问隐藏或异常文件,对管理员权限区域内的非授权访问,远程执行代码,SQL注入,文件包含,跨站点脚本(XSS)以及其他可能表明异常的行为漏洞扫描或侦察活动 。
比如,我们的Web服务器 access.log 可以有效记录访问来源 。
root@secureserver :/var/log/Apache2# less access.log
access.log 可以按天生成保存,一般来说,如果网站在某一天遭受漏洞扫描,那么这一天它的日志文件会比平常大很多 。
84.55.41.57 - - [16/Apr/2019: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/2019: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/2019: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/2019: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"
每个日志文件包含几千条请求纪录,检查每一行明显是不切实际的,因此我们需要过滤掉一些可能无关的数据,包括图像和css、JS等资源文件 。
由于网站正在运行WordPress,在这种情况下,我们可以通过关键字过滤 access.log来获取满足WordPress特定特征的访问请求 。
【使用Web日志还原攻击路径】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表示使用POST方法将HTTP请求发送到服务器,一般来说主要是登录表单和数据提交 。
在筛选之后的结果中,我们会注意到这样一个访问请求:
84.55.41.57 - - [17/Apr/2019:06:52:07 +0100] "GET /wordpress/wp-admin/ HTTP/1.1"200 12349 "http://www.example.com/wordpress/wp-login.php""Mozilla/5.0 (Windows NT 6.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0"


推荐阅读