由于各种原因,Web 应用程序经常面临可疑活动,例如使用自动漏洞扫描程序扫描网站的孩子或试图模糊 SQL 注入参数的人等。在许多此类情况下,登录必须分析网络服务器以找出发生了什么。如果情况严重,可能需要法医调查。
除此之外,还有其他场景。
对于管理员来说,了解如何从安全角度分析日志非常重要。
刚开始进行黑客/渗透测试的人必须了解为什么他们不应该在未经事先许可的情况下测试/扫描网站。
本文涵盖了日志分析的基本概念,为上述场景提供解决方案。
出于演示目的,我有以下设置。
– 预装在 Kali Linux 中
这可以使用以下命令启动:
service apache2 start
– 预装在 Kali Linux 中
这可以使用以下命令启动:
service mysql start
我使用 PHP 开发了一个易受攻击的 Web 应用程序,并将其托管在上述 Apache-MySQL 中。
通过上述设置,我使用 Kali Linux 中可用的一些自动化工具(ZAP、w3af)扫描了这个易受攻击的应用程序的 URL。现在让我们看看分析日志的各种案例。
出于各种明显的原因,始终建议在 Web 服务器上维护日志。
Debian 系统上 Apache 服务器日志的默认位置是
/var/log/apache2/access.log
日志记录只是将日志存储在服务器中的过程。我们还需要分析日志以获得正确的结果。在下一节中,我们将了解如何分析 Apache 服务器的访问日志,以确定网站上是否有任何攻击企图。
如果日志的大小较小,或者我们正在寻找特定的关键字,那么我们可以花一些时间使用诸如 grep 表达式之类的东西手动观察日志。
在下图中,我们尝试搜索 URL 中包含关键字“union”的所有请求。
从上图中,我们可以看到 URL 中的查询“ union select 1,2,3,4,5 ”。很明显,IP 地址为 192.168.56.105 的人尝试了 SQL 注入。
同样,当我们有关键字时,我们可以搜索特定的请求。
在下图中,我们正在搜索尝试读取“/etc/passwd”的请求,这显然是本地文件包含尝试。
如上面的屏幕截图所示,我们有许多请求尝试 LFI,这些请求是从 IP 地址 127.0.0.1 发送的。这些请求是从自动化工具生成的。
在许多情况下,很容易识别日志是否是从自动扫描仪发送的。自动扫描仪很嘈杂,并且在测试应用程序时使用供应商特定的有效负载。
例如,IBM appscan 在许多有效负载中使用“appscan”一词。因此,查看日志中的此类请求,我们可以确定发生了什么。
Microsoft Excel 也是打开日志文件和分析日志的好工具。我们可以通过指定“空格”作为分隔符,使用 Excel 打开日志文件。当我们没有日志解析工具时,这很方便。
除了这些关键字之外,在分析过程中掌握 HTTP 状态代码的基本知识也非常重要。
下表显示了有关 HTTP 状态代码的高级信息。
1xx | 信息 |
2xx | 成功的 |
3xx | 重定向 |
4xx | 客户端错误 |
5xx | 服务器错误 |
Web shell 是网站/服务器的另一个问题。Web shell 提供对服务器的完全控制。在某些情况下,我们可以使用 Web Shell 访问托管在同一服务器上的所有其他站点。
以下屏幕截图显示了在 Microsoft Excel 中打开的同一个 access.log 文件。我在指定客户端访问的文件的列上应用了过滤器。
如果我们清楚地观察,有一个名为“b374k.php”的文件正在被访问。“b374k” 是一个流行的 web shell,因此这个文件纯粹是可疑的。查看响应代码“200”,这一行表明有人上传了一个 web shell 并正在从 web 服务器访问它。
在将其上传到服务器时,并不总是需要为正在上传的 web shell 赋予其原始名称的情况。在许多情况下,攻击者会重命名它们以避免怀疑。这是我们必须采取聪明行动的地方,看看被访问的文件是普通文件还是看起来不寻常。如果有任何可疑之处,我们可以进一步查看文件类型和时间戳。
众所周知,SQL 注入是 Web 应用程序中最常见的漏洞之一。大多数开始使用 Web 应用程序安全的人都是从 SQL 注入开始学习的。识别传统的 SQL 注入就像在 URL 参数中添加单引号并中断查询一样简单。
我们传递的任何东西都可以记录在服务器中,并且可以追溯。
以下屏幕截图显示了访问日志条目,其中传递了一个单引号以检查参数“user”中的 SQL 注入。
%27 是单引号的 URL 编码形式。
出于管理目的,我们还可以执行查询监视以查看在数据库上执行了哪些查询。
如果我们观察上图,它显示了从上图中发出的请求执行的查询,其中我们通过参数“user”传递了一个单引号。
我们将在本文后面讨论有关登录数据库的更多信息。
当日志量很大时,很难进行人工检查。在这种情况下,我们可以使用自动化工具以及一些手动检查。
尽管有许多有效的商业工具,但我要介绍一个名为 Scalp 的免费工具。
根据他们的官方链接,“Scalp 是 Apache Web 服务器的日志分析器,旨在查找安全问题。主要思想是查看巨大的日志文件并提取通过 HTTP/GET 发送的可能攻击。”
头皮可以从以下链接下载。
https://code.google.com/p/apache-scalp/
它是一个 Python 脚本,因此需要在我们的机器上安装 Python。
下图显示了该工具的使用帮助。
正如我们在图中看到的,我们需要使用标志“-l”提供要分析的日志文件。
除此之外,我们需要提供一个使用标志“-f”的过滤器文件,Scalp 使用该标志识别 access.log 文件中可能的攻击。
我们可以使用 PHPIDS 项目中的过滤器来检测任何恶意尝试。
该文件名为 default_filter.xml,可以从下面的链接下载。
PHPIDS/default_filter.xml at master · PHPIDS/PHPIDS · GitHub
下面的一段代码是取自上述链接的一部分。
[php]
[/php]
它使用 XML 标记中定义的规则集来检测正在尝试的各种攻击。上面的代码片段是检测文件包含尝试的示例。同样,它可以检测其他类型的攻击。
下载此文件后,将其放在放置 Scalp 的同一文件夹中。
运行以下命令以使用 Scalp 分析日志。
python scalp-0.4.py –l /var/log/apache2/access.log –f filter.xml –o output –html
注意:我已将系统中的此文件重命名为屏幕截图中的 access.log.1。你可以忽略它。
“输出”是将保存报告的目录。如果它不存在,它将由 Scalp 自动创建。
–html 用于生成 HTML 格式的报告。
如上图所示,Scalp 结果显示,它分析了 4024 上的 4001 行,发现了 296 种攻击模式。
我们甚至可以使用“–except”标志保存由于某种原因未分析的行。
运行上述命令后,会在输出目录中生成报告。我们可以在浏览器中打开它并查看结果。
以下屏幕截图显示了一小部分输出,其中显示了目录遍历攻击尝试。
本节涉及对数据库攻击的分析以及监控它们的可能方法。
第一步是查看设置的变量是什么。我们可以使用“显示变量”来做到这一点;如下所示。
下图显示了上述命令的输出。
正如我们在上图中看到的那样,日志记录已打开。默认情况下,此值为 OFF。
这里的另一个重要条目是“log_output”,这表示我们正在将它们写入“FILE”。或者,我们也可以使用表格。
我们甚至可以看到“log_slow_queries”是开启的。同样,默认值为“OFF”。
所有这些选项都有详细解释,可以直接从下面链接中提供的 MySQL 文档中阅读。
http://dev.mysql.com/doc/refman/5.0/en/server-logs.html
通用查询日志记录建立的客户端连接和从客户端接收的语句。如前所述,默认情况下不会启用这些,因为它们会降低性能。我们可以直接从 MySQL 终端启用它们,也可以编辑 MySQL 配置文件,如下所示。
我正在使用 VIM 编辑器打开位于“/etc/mysql/”目录下的“my.cnf”文件。
如果我们向下滚动,我们可以看到一个 Logging and Replication 部分,我们可以在其中启用日志记录。这些日志被写入一个名为 mysql.log 的文件中。
我们还可以看到这种日志类型是性能杀手的警告。
通常管理员使用此功能进行故障排除。
我们还可以看到“log_slow_queries”条目来记录需要很长时间的查询。
现在一切都准备好了。如果有人用恶意查询访问数据库,我们可以在这些日志中观察到,如下所示。
上图显示了一个查询访问名为“webservice”的数据库并尝试使用 SQL 注入绕过身份验证。
默认情况下,Apache 只记录 GET 请求。要记录 POST 数据,我们可以使用名为“mod_dumpio”的 Apache 模块。
要了解更多关于实现部分的信息,请参考下面的链接。或者,我们可以使用“mod security”来实现相同的结果。