web攻击日志分析之新手指南

2015-03-31 23,367

0x00 前言

这是经常发生的情况:web应用出于不同的原因面对着可疑的活动,比如脚本小子使用自动化漏洞扫描器扫描web站点或者一个家伙试图模糊测试(fuzz)一个参数用以SQL注入等等。

在许多类似这样的情况中,要分析web服务器上的日志以理解正在发生什么。如果是严重的情况,可能要求取证调查。

除此之外,还有其他场景。

作为一名管理员,理解如何从安全的角度来分析日志真的很重要。

刚刚开始接触黑客攻击/渗透测试的童鞋们也会从本文学到为什么他们不应该未经授权就测试/扫描别人的网站。

这篇文章涵盖了日志分析的基础知识,为上述情景提供解决方案。

L7Analysis-1024x0-c-default

0x01 准备

出于演示目的,我进行以下设置。

Apache 服务器

预安装在Kali Linux

可以用以下命令开启:

service apache2 start

 

123014_1404_LogAnalysis1

MySQL

预安装在Kali Linux

可以用以下命令开启:

service mysql start

 

123014_1404_LogAnalysis2

使用PHP-MySQL构建的脆弱的web应用

我已經使用PHP开发了一个脆弱的web应用并且把它放在上面提到的 Apache-MySQL里面。上述设置完成后,我用了一些Kali Linux中的自动工具(ZAP、w3af)扫描这个脆弱的应用的URL。现在让我们来看看分析日志中的不同情况。

0x02 Apache服务中的日志记录

出于不同的原因维持web服务器日志一直是推荐的。

Debian系统上Apache服务器日志的默认位置为:var/log/apache2/access.log

日志记录只是服务器上存储日志的过程。我还需要分析日志以得出正确结果。

在接下来的一节里,我们将看到我们如何分析Apache服务器的访问日志以找出web站点上是否有任何攻击尝试。

分析日志

手动检查

在日志大小较小的情况下,或者如果我们正在查找一个指定关键词,我们可以花一些时间来手工使用像grep表达式这样的东西观察日志。

在下图中,我们在URL中试图搜寻所有关键词为“union”的请求。

 

123014_1404_LogAnalysis3

从上图中,我们可以看到URL中的“union select 1,2,3,4,5”请求。很明显,ip地址为 192.168.56.105的某人尝试了SQL注入。 类似地,当我们有自己的关键词时可以搜索特殊的关键词。

 

123014_1404_LogAnalysis4

在下图中,我们正在搜索试图读取“/etc/passwd”的请求,很明显是本地文件包含尝试。

如上面的截图所示,我们有许多本地文件包含的尝试,且这些请求发送自ip地址 127.0.0.1。这些请求由自动化工具生成。

在许多情况下,能轻易看出日志是否是自动化扫描器发出。自动化扫描器是嘈杂的且当测试一个应用时,它们使用指定向量的载荷。

举例来说, IBM appscan在许多攻击载荷中使用“appscan”这个词。所以,在日志中查看这样的请求,我们可以判断正在发生什么事情。

Microsoft Excel也是一个打开日志文件和分析日志的不错的工具。我们可以通过指定“空格”为分隔符以用excel打开日志文件。当我们手头没有日志分析工具时,这会用得上。

除了这些关键词,在分析期间有HTTP状态代码的基础知识是非常重要的。以下是关于HTTP状态代码的高级信息的表格。

1xx Information
2xx Successful
3xx Redirection
4xx Client Error
5xx Server Error

 

 

0x03 Web shells

webshell是网站/服务器的另一个问题。webshell给予服务器的完全控制。在一些例子中,我们可以使用webshell来访问所有放在相同服务器上的其他站点。

以下截图显示了Microsoft Excel 中开启相同的access.log文件。我已经应用了一个过滤器在客户端访问过的文件内的指定列上。

123014_1404_LogAnalysis5

 

如果我们清楚地观察,有一个叫“b374k.php”的文件被访问了。“b374k”是一个流行的webshell,因此这个文件是完全可疑的。查看相应代码“200”,本行表明有人上传了一个webshell并访问了它。

并不总是这样的场景:上传到服务器的webshell还是原本的名字。在许多情况下,攻击者重命名它们以避免怀疑。我们必须变得聪明点,看看被访问的文件是否是常规文件或者是否他们看起来不寻常。我们可以更进一步,如果任何东西看起来可疑的话,还可以查看文件类型和时间戳。

One single quote for the win

 

这是一个众所周知的事实:SQL注入是web应用中最常见的漏洞之一。大多数入门web应用安全的人始于学习SQL注入。识别一个传统的SQL注入很容易,添加一个单引号给URL参数并破坏查询。

任何我们传递给服务器的东西都会被记录,并且追溯是可能的。

以下截图显示了访问日志记录了单引号被传递给参数“user”以检测SQL注入。

%27是单引号的URL编码。

123014_1404_LogAnalysis6

 

出于管理目的,我们还可以运行查询监视来查看数据库中的哪个请求被执行了。

123014_1404_LogAnalysis7

 

如果我们观察以上图片,它显示了查询正在被之前图片里的请求执行,我们传递一个单引号给参数“user”

 

0x04 使用自动化工具分析

当存在大量日志时。手动检查就会变得困难。在这种情景下,除了一些手动检查之外我们可以使用自动化工具。

虽然有许多高效的商业工具,但是我要向你们介绍一款被称为“Scalp”的免费工具。

据他们的官方链接所说,Scalp是用于Apache服务器,旨在查找安全问题的日志分析器。主要理念是浏览大量日志文件并通过从HTTP/GET中提取可能的攻击。

Scalp可以从以下链接下载:

https://code.google.com/p/apache-scalp/

Scalp是python脚本,所以要求我们的机器中安装python。

以下图片显示该工具的帮助。

123014_1404_LogAnalysis8

 

如我们在上图所见,我们需要使用标志-l来提供要分析的日志文件。

同时,我们需要提供使用标志-f提供一个过滤文件让Scalp在access.log文件中识别可能的攻击。

我们可以使用PHPIDS项目中的过滤器来检测任何恶意尝试。

该文件名为“default_filter.xml ”,可以从以下链接中下载:

https://github.com/PHPIDS/PHPIDS/blob/master/lib/IDS/default_filter.xml

以下代码块是取自上面链接的一部分。

<filter>
      <id>12</id>
      <rule><![CDATA[(?:etc\/\W*passwd)]]></rule>
      <description>Detects etc/passwd inclusion attempts</description>
      <tags>
          <tag>dt</tag>
          <tag>id</tag>
          <tag>lfi</tag>
      </tags>
      <impact>5</impact>
</filter>

 

它是使用XML标签定义的规则集来检测不同的攻击测试。以上代码片段是检测文件包含攻击尝试的一个示例。类似地,它检测其他类型的攻击。

下载此文件之后,把它放入Scalp的同一文件夹下。

运行以下命令来使用Scalp分析日志。

python scalp-0.4.py –l /var/log/apache2/access.log –f filter.xml –o output –html

 

123014_1404_LogAnalysis9

“output”是报告保存的目录。如果不存在的话,由Scalp自动创建。-html是用来生成HTML格式的报告。 如我们在上图看到的那样,Scalp结果表明它分析了4001行,超过4024并发现了296个攻击模式。

运行上述命令后在输出目录内生成报告。我们可以在浏览器内打开它并查看结果。 下面截图显示的输出显示了目录遍历攻击尝试的一小部分。

123014_1404_LogAnalysis10

 

 

MySQL中的日志记录

本节论述了数据库中的攻击分析和监视它们的可能方法。

第一步是查看设置了什么变量。我们可以使用“show variables;”完成,如下所示。

123014_1404_LogAnalysis11

 

接下来显示了上述命令的输出。

123014_1404_LogAnalysis12

 

如我们在上图中看到的,日志记录已开启。该值默认为OFF。

这里另一个重要的记录是 “log_output”,这是说我们正在把结果写入到文件中。另外,我们也可以用表。

我们可以看见“log_slow_queries”为ON。默认值为OFF。

所有这些选项都有详细解释且可以在下面提供的MySQL文档链接里直接阅读:

http://dev.mysql.com/doc/refman/5.0/en/server-logs.html

 

MySQL的查询监视

通常请求日志记录建立的客户端连接和从客户端处收到的语句。如早前提到的,默认地,这些是未开启的,因为它们降低性能。我们可以从MySQL终端中正确地开启它们或者我们可以编辑MySQL配置文件,如下图所示。

我正在使用VIM编辑器打开位于/etc/mysql目录内的“my.cnf”文件。

123014_1404_LogAnalysis13

 

如果我们向下滚动,可以看见记录和我们开启的记录复制部分。这些日志正被写入一个称为“mysql.log”的文件内。

我们还能看见警告,这种日志类型是性能杀手。

通常管理员使用这个功能来排除故障。

123014_1404_LogAnalysis14

 

我们还能看到记录“log_slow_queries” 的日志查询花了很长时间。

123014_1404_LogAnalysis15

 

现在一切就绪。如果有人用恶意查询打数据库,我们可以在这些日志中观察到。如下所示:

123014_1404_LogAnalysis16

 

上图显示了查询命中了名为“webservice”的数据库并试图使用SQL注入绕过认证。

0x05 更多日志记录

默认地,Apache只记录GET请求,要记录POST数据的话,我们可以使用一个称为“mod_dumpio”的Apache模块。要了解更多关于实现部分的信息,请参考以下链接:

http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html

另外,我们可以使用“ mod security”达到相同结果。

Reference http://httpd.apache.org/docs/2.2/logs.html

【原文:Log Analysis for Web Attacks: A Beginner’s Guide 翻译:

本文作者:TeacherYang

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/5697.html

Tags:
评论  (2)
快来写下你的想法吧!
  • 西哥 2015-04-02 1:23:42

    其实可以试试360星图 蛮不错的

    • SP小编 个人认证 2015-04-02 9:48:24

      @西哥 xingtu的rules.ini加密不够开放 分析展示功能的确不错 不过有一些误报 内存占的也比较厉害 还是自己写脚本加规则写展示比较靠谱

TeacherYang

文章数:14 积分: 5

Best teacher of China

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号