
Melhore sua detecção de malware com WAF + YARA (WAFARAY)
Em essência, a ideia principal foi usar WAF + YARA (YARA da direita para a esquerda = ARAY) para detectar arquivos maliciosos no nível do WAF antes que o WAF possa encaminhá-los para o backend, por exemplo, arquivos enviados através de funções web, veja: https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
Quando uma página web permite upload de arquivos, a maioria dos WAFs não inspeciona os arquivos antes de enviá-los ao backend. Implementar WAF + YARA poderia fornecer detecção de malware antes que o WAF encaminhe os arquivos ao backend.
Sim, uma solução é usar ModSecurity + Clamav, a maioria das páginas chama o ClamAV como um processo e não como um daemon, neste caso, analisar um arquivo pode levar mais de 50 segundos por arquivo. Veja este recurso: https://kifarunix.com/intercept-malicious-file-upload-with-modsecurity-and-clamav/
:- ( Algumas pistas aqui Black Hat Asia 2019 por favor continue lendo e veja abaixo nossa rápida implantação de LAB.
Basicamente, é uma implantação rápida (1) com regras YARA pré-compiladas e prontas para uso via ModSecurity (WAF) usando uma regra personalizada; (2) esta regra personalizada realizará uma inspeção e detecção dos arquivos que possam conter código malicioso, (3) tipicamente funções web (upload de arquivos) se o arquivo for suspeito, irá rejeitá-los recebendo um código 403 Forbidden do ModSecurity.
✔️ O YaraCompile.py compila todas as regras yara. (Código Python3)
✔️ O test.conf é um host virtual que contém as regras do mod security. (Código ModSecurity)
✔️ As regras do ModSecurity chamam o modsec_yara.py para inspecionar o arquivo que está sendo enviado. (Código Python3)
✔️ Yara retorna duas opções 1 (200 OK) ou 0 (403 Forbidden)
/YaraRules/Compiled/YaraRules/rules/YaraRules/YaraScripts/etc/apache2/sites-enabled/temporal Blueteamers: Aplicação de regras, melhores alertas, detecção de malware em arquivos enviados através de funções web.Redteamers/pentesters: Escopo GreyBox, upload e bypass com um arquivo malicioso, aplicação de regras.Security Officers: Manter alertas, caça a ameaças.SOC: Melhor monitoramento sobre arquivos maliciosos.CERT: Análise de Malware, Determinar novos IOC.A Prova de Conceito é baseada no sistema operacional Debian 11.3.0 (stable) x64, OWASP CRC v3.3.2 e Yara 4.0.5, você encontrará o script de instalação automática aqui wafaray_install.sh e um guia de instalação manual opcional pode ser encontrado aqui: manual_instructions.txt além disso, uma página PHP foi criada como "mock" para observar a interação e detecção de arquivos maliciosos usando WAF + YARA.
✔️ Passo 1: Baixe o Debian 11.3.0: https://cdimage.debian.org/debian-cd/current/amd64/iso-dvd/debian-11.3.0-amd64-DVD-1.iso
✔️ Passo 2: Implante usando VMware ou VirtualBox
✔️ Passo 3: Uma vez instalado, por favor siga as instruções abaixo:
alex@waf-labs:~$ su root
root@waf-labs:/home/alex#
# Remember to change YOUR_USER by your username (e.g 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
# Teste seu ambiente de LAB
alex@waf-labs:~$ firefox localhost:8080/upload.php
Uma vez que as Regras Yara foram baixadas e compiladas.
É semelhante a quando você implanta o ModSecurity, você precisa personalizar que tipo de regra precisa aplicar. O seguinte log é um exemplo de quando o Web Application Firewall + Yara detectou um arquivo malicioso, neste caso, o eicar foi detectado.
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
⚠️ Tenha cuidado com seu teste. As demonstrações seguintes foram testadas em máquinas virtuais isoladas. ⚠️
Um arquivo malicioso é enviado, e as regras do ModSecurity mais Yara negaram o upload do arquivo para o backend se o arquivo corresponder a pelo menos uma Regra Yara. (Exemplo de Malware: https://secure.eicar.org/eicar.com.txt) NÃO EXECUTE O ARQUIVO.
Para esta demonstração, desabilitamos a regra 933110 - PHP Inject Attack para validar as Regras Yara.
Um arquivo malicioso é enviado, e as regras do ModSecurity mais Yara negaram o upload do arquivo para o backend se o arquivo corresponder a pelo menos uma Regra Yara. (Exemplo de WebShell PHP: https://github.com/drag0s/php-webshell) NÃO EXECUTE O ARQUIVO.
Um arquivo malicioso é enviado, e as regras do ModSecurity mais Yara negaram o upload do arquivo para o backend se o arquivo corresponder a pelo menos uma Regra Yara. (Exemplo de Malware Bazaar (RecordBreaker): https://bazaar.abuse.ch/sample/94ffc1624939c5eaa4ed32d19f82c369333b45afbbd9d053fa82fe8f05d91ac2/) NÃO EXECUTE O ARQUIVO.
Caso queira baixar mais regras yara, você pode ver os seguintes repositórios:
Alex Hernandez conhecido como (@_alt3kx_)
Jesus Huerta conhecido como @mindhack03d
Israel Zeron Medina conhecido como @spk085