使用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