核心理念是:在 WAF 将文件转发到后端之前,在 WAF 层面使用 WAF + YARA(YARA 从右到左读写作 ARAY)检测恶意文件,例如通过 Web 功能上传的文件(参见:https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload)。
当网页允许上传文件时,大多数 WAF 在将文件发送到后端之前不会检查文件内容。集成 WAF + YARA 可以在 WAF 转发文件到后端之前实现恶意软件检测。
是的,一种解决方案是使用 ModSecurity + ClamAV。多数页面将 ClamAV 视为进程而非守护进程调用,在此情况下,分析单个文件可能需要超过 50 秒。参见此资源:https://kifarunix.com/intercept-malicious-file-upload-with-modsecurity-and-clamav/
:-( 在 Black Hat Asia 2019 有少许线索,请继续阅读并查看下方我们快速搭建的实验室环境。
简单来说,它是一个快速部署方案:(1) 通过 ModSecurity (WAF) 使用自定义规则,加载预编译且立即可用的 YARA 规则;(2) 该自定义规则将检测可能包含恶意代码的文件;(3) 通常是通过 Web 功能(文件上传),若文件可疑,则被拒绝,并返回 ModSecurity 的 403 禁止访问状态码。
✔️ YaraCompile.py 编译所有 YARA 规则。(Python3 代码)
✔️ test.conf 是一个包含 ModSecurity 规则的虚拟主机配置。(ModSecurity 代码)
✔️ ModSecurity 规则调用 modsec_yara.py 来检查尝试上传的文件。(Python3 代码)
✔️ YARA 返回两个结果:1(200 OK)或 0(403 禁止)
/YaraRules/Compiled/YaraRules/rules/YaraRules/YaraScripts/etc/apache2/sites-enabled/temporal 蓝队人员:规则强制执行、最佳告警、对通过 Web 功能上传的文件进行恶意软件检测。红队/渗透测试人员:灰盒范围,上传恶意文件尝试绕过、规则强制执行。安全管理人员:持续告警、威胁追踪。安全运营中心(SOC):更好的恶意文件监控。计算机应急响应团队(CERT):恶意软件分析,确定新的 IOC。该概念验证基于 Debian 11.3.0 (稳定版) x64 系统、OWASP CRS v3.3.2 和 YARA 4.0.5。自动安装脚本位于 wafaray_install.sh,可选的手动安装指南位于 manual_instructions.txt。此外,还创建了一个 PHP 页面作为“模拟”,用于观察 WAF + YARA 对恶意文件的交互和检测。
✔️ 步骤 1:下载 Debian 11.3.0:https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-11.3.0-amd64-DVD-1.iso
✔️ 步骤 2:使用 VMware 或 VirtualBox 部署
✔️ 步骤 3:安装完成后,请按照以下说明操作:
alex@waf-labs:~$ su root
root@waf-labs:/home/alex#
# 记得将 YOUR_USER 替换为你的用户名(例如 waf)
root@waf-labs:/home/alex# sed -i 's/^\(# User privi.*\)/\1\nalex ALL=(ALL) NOPASSWD:ALL/g' /etc/sudoers
root@waf-labs:/home/alex# exit
alex@waf-labs:~$ sudo sed -i 's/^\(deb cdrom.*\)/#\1/g' /etc/apt/sources.list
alex@waf-labs:~$ sudo sed -i 's/^# \(deb\-src http.*\)/ \1/g' /etc/apt/sources.list
alex@waf-labs:~$ sudo sed -i 's/^# \(deb http.*\)/ \1/g' /etc/apt/sources.list
alex@waf-labs:~$ echo -ne "\n\ndeb http://deb.debian.org/debian/ bullseye main\ndeb-src http://deb.debian.org/debian/ bullseye main\n" | sudo tee -a /etc/apt/sources.list
alex@waf-labs:~$ sudo apt-get update
alex@waf-labs:~$ sudo apt-get install sudo -y
alex@waf-labs:~$ sudo apt-get install git vim dos2unix net-tools -y
alex@waf-labs:~$ git clone https://github.com/alt3kx/wafaray
alex@waf-labs:~$ cd wafaray
alex@waf-labs:~$ dos2unix wafaray_install.sh
alex@waf-labs:~$ chmod +x wafaray_install.sh
alex@waf-labs:~$ sudo ./wafaray_install.sh >> log_install.log
# 测试你的实验室环境
alex@waf-labs:~$ firefox localhost:8080/upload.php
下载并编译 YARA 规则后。
这类似于部署 ModSecurity,你需要自定义要应用的规则类型。 以下日志是 Web 应用防火墙 + YARA 检测到恶意文件的示例,本例中检测到了 eicar。
Message: Access denied with code 403 (phase 2). File "/temporal/20220812-184146-YvbXKilOKdNkDfySME10ywAAAAA-file-Wx1hQA" rejected by
the approver script "/YaraRules/YaraScripts/modsec_yara.py": 0 SUSPECTED [YaraSignature: eicar]
[file "/etc/apache2/sites-enabled/test.conf"] [line "56"] [id "500002"]
[msg "Suspected File Upload:eicar.com.txt -> /temporal/20220812-184146-YvbXKilOKdNkDfySME10ywAAAAA-file-Wx1hQA - URI: /upload.php"]
$ sudo service apache2 stop
$ sudo service apache2 start
$ cd /var/log
$ sudo tail -f apache2/test_access.log apache2/test_audit.log apache2/test_error.log
⚠️ 请注意测试安全。以下演示在隔离的虚拟机上运行。 ⚠️
上传一个恶意文件,如果文件匹配至少一条 YARA 规则,ModSecurity 规则与 YARA 将拒绝将文件上传到后端。(恶意软件示例:https://secure.eicar.org/eicar.com.txt)请勿执行该文件。
本演示中,我们禁用了规则 933110 - PHP Inject Attack 以验证 YARA 规则。
上传一个恶意文件,如果文件匹配至少一条 YARA 规则,ModSecurity 规则与 YARA 将拒绝将文件上传到后端。(WebShell PHP 示例:https://github.com/drag0s/php-webshell)请勿执行该文件。
上传一个恶意文件,如果文件匹配至少一条 YARA 规则,ModSecurity 规则与 YARA 将拒绝将文件上传到后端。(Malware Bazaar (RecordBreaker) 示例:https://bazaar.abuse.ch/sample/94ffc1624939c5eaa4ed32d19f82c369333b45afbbd9d053fa82fe8f05d91ac2/)请勿执行该文件。
如果你想下载更多 YARA 规则,可以参考以下仓库: