在本教程中,您将学习如何使用 ModSecurity 和 ClamAV 拦截恶意文件上传。
ModSecurity,目前称为 libModSecurity 或 ModSecurity 版本 3 是
由 Trustwave 的 SpiderLabs 开发的开源、跨平台 Web 应用程序防火墙 (WAF) 模块。 它被称为 WAF 的“瑞士军刀”,它使 Web 应用程序防御者能够了解 HTTP(S) 流量,并提供电源规则语言和 API 来实施高级保护。
它具有强大的基于事件的编程语言,可提供针对 Web 应用程序的一系列攻击的保护,并允许 HTTP 流量监控、日志记录和实时分析。
ModSecurity 能做什么?
- 拦截、存储和可选地验证上传的文件
- 实时应用安全监控和访问控制
- 完整的 HTTP 流量记录
- 持续被动安全评估
- Web应用加固
- 由于它能够解析 XML 并应用 XPath 表达式以及代理请求的能力,因此它可以用作 XML Web 服务路由器。
- HTTP 协议保护
- 实时黑名单查询
- HTTP 拒绝服务保护
- 通用 Web 攻击防护
- 错误检测和隐藏
另一方面,ClamAV 是一种开源防病毒引擎,用于检测木马、病毒、恶意软件和其他恶意威胁。
使用 ModSecurity 和 ClamAV 拦截恶意文件上传
ModSecurity 有能力了解 multipart/form-data
用于文件上传的编码。 这使 ModSecurity 能够从请求中提取上传的文件并存储在指定的文件系统位置。
除了能够提取上传的文件之外,ModSecurity 还可以通过与 ClamAV 等其他工具的集成来验证上传的文件。
ClamAV 提供可用于扫描文件以检测木马、病毒、恶意软件和其他恶意威胁的脚本。
为了能够使用ModSecurity和ClamAV拦截恶意文件上传,您需要安装这些工具。 按照以下链接安装 ModSecurity 和 ClamAV;
安装和配置 ModSecurity
安装和配置 ModSecurity Apache 在 Ubuntu 上
配置 LibModsecurity Apache 在 CentOS 上
安装和配置 ClamAV
在 Ubuntu 上安装和使用 ClamAV
您可以找到如何在其他 Linux 发行版上安装和设置 ClamAV。
笔记:我们在 Ubuntu 20.04 系统上运行我们的测试。
创建 ModSecurity-ClamAV 文件验证脚本
要使用 ModSecurity 启用文件上传验证,您需要创建一个使用 ClamAV 命令行防病毒扫描程序的 perl 脚本, clamscan
, 提取正在上传的文件的完整路径并扫描任何恶意威胁。
在本教程中,我们将把我们的扫描仪脚本放在 /etc/apache2/modsecurity.d/
目录。 但是,这不是标准位置,您可以将其放置在系统上的任何位置。
粘贴以下内容以创建 ClamAV 扫描程序脚本, /etc/apache2/modsecurity.d/modsec_clamav.pl
. 您也可以为脚本选择任何名称。
cat > /etc/apache2/modsecurity.d/modsec_clamav.pl << 'EOL' #!/usr/bin/perl $CLAMSCAN = "/usr/bin/clamscan"; if (@ARGV != 1) { print "Usage: modsec_clamav.pl <filename>n"; exit; } my ($FILE) = @ARGV; $cmd = "$CLAMSCAN --stdout --disable-summary $FILE"; $input = `$cmd`; $input =~ m/^(.+)/; $error_message = $1; $output = "0 Unable to parse clamscan output"; if ($error_message =~ m/: Empty file.$/) { $output = "1 empty file"; } elsif ($error_message =~ m/: (.+) ERROR$/) { $output = "0 clamscan: $1"; } elsif ($error_message =~ m/: (.+) FOUND$/) { $output = "0 clamscan: $1"; } elsif ($error_message =~ m/: OK$/) { $output = "1 clamscan: OK"; } print "$outputn"; EOL
使脚本可执行;
chmod +x /etc/apache2/modsecurity.d/modsec_clamav.pl
创建 ModSecurity 规则来拦截文件上传
接下来,您需要创建一个自定义的 ModSecurity 规则来拦截文件上传。
在我们的设置中,我们在我们的文件中指定了 ModSecurity 规则文件的位置 Apache 站点配置文件为, /etc/apache2/modsecurity.d/modsec_rules.conf
.
见下文;
less /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:80> ServerAdmin [email protected] ServerName wp.kifarunix-demo.com DocumentRoot /var/www/html/wp.kifarunix-demo.com modsecurity on modsecurity_rules_file /etc/apache2/modsecurity.d/modsec_rules.conf <Directory /var/www/html/wp.kifarunix-demo.com> AllowOverride All </Directory> ErrorLog /var/log/apache2/wp.error.log CustomLog /var/log/apache2/wp.access.log combined </VirtualHost>
以下是 ModSecurity 规则文件的内容;
less /etc/apache2/modsecurity.d/modsec_rules.conf
Include "/etc/apache2/modsecurity.d/modsecurity.conf" Include "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf" Include "/etc/apache2/modsecurity.d/owasp-crs/rules/*.conf"
因此,为 ModSecurity 创建自定义文件扫描程序/验证规则。 ModSecurity 规则是使用 SecRule
指示。
规则的语法是;
SecRule VARIABLES "OPERATOR" "TRANSFORMATIONS,ACTIONS"
在此设置中,我们将自定义规则文件命名为 /etc/apache2/modsecurity.d/modsec_clamav.conf
.
下面是规则配置;
cat /etc/apache2/modsecurity.d/modsec_clamav.conf
SecRule FILES_TMPNAMES "@inspectFile /etc/apache2/modsecurity.d/modsec_clamav.pl" "id:'400001', phase:2, t:none, deny, log, msg:'Infected File upload detected', tag:'MALICIOUS_SOFTWARE/VIRUS'"
接下来,在规则文件中包含规则。
echo 'Include "/etc/apache2/modsecurity.d/modsec_clamav.conf"' >> /etc/apache2/modsecurity.d/modsec_rules.conf
你的规则文件现在看起来像;
less /etc/apache2/modsecurity.d/modsec_rules.conf
Include "/etc/apache2/modsecurity.d/modsecurity.conf" Include "/etc/apache2/modsecurity.d/owasp-crs/crs-setup.conf" Include "/etc/apache2/modsecurity.d/owasp-crs/rules/*.conf" Include "/etc/apache2/modsecurity.d/modsec_clamav.conf"
查看 Apache 配置语法;
apachectl configtest
如果你得到 Syntax OK
,然后继续重新启动/重新加载 Apache;
systemctl restart apache2
使用 ModSecurity 和 ClamAV 测试对恶意文件上传的拦截
如果您有测试环境,您可以从 Eicar 下载测试恶意文件并尝试上传到您的站点。
上传时,请务必拖尾 Apache 错误日志和 ModSecurity 审计日志文件。
例如,在下面的屏幕截图中,我尝试在我的 WordPress 上上传 eicar_com.zip,这是结果;
以及 ModSecurity 审计日志;
tail -f /var/log/modsec_audit.log
---i6mkrLhp---H-- ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `InspectFile' with parameter `/etc/apache2/modsecurity.d/modsec_clamav.pl' against variable `FILES_TMPNAMES:' (Value: `' ) [file "/etc/apache2/modsecurity.d/modsec_clamav.conf"] [line "1"] [id "400001"] [rev ""] [msg "Infected File upload detected"] [data ""] [severity "0"] [ver ""] [maturity "0"] [accuracy "0"] [tag "MALICIOUS_SOFTWARE/VIRUS"] [hostname "wp.kifarunix-demo.com"] [uri "/wp-admin/update.php"] [unique_id "161558337389.815242"] [ref "v1369,0"] ---i6mkrLhp---I-- ---i6mkrLhp---J-- ---i6mkrLhp---Z--
这就是如何使用 ModSecurity 和 ClamAV 拦截恶意文件上传。 随时分享任何反馈!
有用的链接
ModSecurity v2 参考手册
其他相关教程
使用 libModSecurity 将 WordPress 登录页面的访问权限限制为特定 IP
为 ModSecurity 日志创建 Kibana 可视化仪表板
在 ELK Stack 上处理和可视化 ModSecurity 日志
配置 LibModsecurity Apache 在 CentOS 8 上