使用ModSecurity和ClamAV拦截恶意文件上传

在本教程中,您将学习如何使用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

在Ubuntu上使用Apache安装和配置ModSecurity

在CentOS上使用Apache配置LibModsecurity

安装和配置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规则以拦截文件上传。

在我们的设置中,我们在Apache站点配置文件中将ModSecurity规则文件的位置指定为, /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审核日志文件。

例如,在下面的屏幕截图中,我尝试上传了 eicar_com.zip 在我的WordPress上,这就是结果;

以及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参考手册

Sidebar