Utilizando Malware Patrol MD5 list com o Suricata IDS 
Autor: Rodrigo Sp0oKeR Montoro | Publicado: 2016-03-08T08:54:00-03:00





O Suricata dentro vários vetores de detecção, possui uma função bem interessante, onde ele calcula o md5 de arquivos sendo enviados/recebidos e o compara com uma lista de md5 maliciosas. Aqui demonstrarei como utilizar a lista do Projeto Malware Patrol.

O Projeto Malware Patrol, apesar do nome em inglês foi criado e é desenvolvido na sua maioria pelo brasileiro André Correa. O projeto possui uma versão gratuita e uma versão paga, que é um investimento bem pequeno e necessário para ter acesso a lista MD5. Para saber mais sobre o projeto acesse http://malwarepatrol.net .

No site do Suricata, na parte de documentação, temos uma boa parte falando sobre detecção de arquivos on the fly, mas no nosso caso usaremos a parte MD5

Retirado do site https://redmine.openinfosecfoundation.org/projects/suricata/wiki/File-keywords
&nbsp; 
filemd5 

Match file MD5 against list of MD5 checksums. 

Syntax:
filemd5:[!]filename;


The filename is expanded to include the rule dir. In the default case it will become /etc/suricata/rules/filename. Use the exclamation mark to get a negated match. This allows for white listing. 

Examples:
filemd5:md5-blacklist;
filemd5:!md5-whitelist;


File format 

The file format is simple. It's a text file with a single md5 per line, at the start of the line, in hex notation. If there is extra info on the line it is ignored. 

Output from md5sum is fine:
2f8d0355f0032c3e6311c6408d7c2dc2 util-path.c
b9cf5cf347a70e02fde975fc4e117760 util-pidfile.c
02aaa6c3f4dbae65f5889eeb8f2bbb8d util-pool.c
dd5fc1ee7f2f96b5f12d1a854007a818 util-print.c


Just MD5's are good as well:
2f8d0355f0032c3e6311c6408d7c2dc2
b9cf5cf347a70e02fde975fc4e117760
02aaa6c3f4dbae65f5889eeb8f2bbb8d
dd5fc1ee7f2f96b5f12d1a854007a818




Entendido o funcionamento, precisará ter sua conta no Malware Patrol para baixar a lista de MD5 (hoje por volta de 70 mil hashes)

Basicamente, terá vinculado com sua conta, uma URL para&nbsp; "Suricata IDS / IPS - malicious MD5s"


#Diretório das regras

[root@centos-7-x64 ~]# cd /opt/suricata/etc/suricata/rules/

# Baixando arquivo de md5

[root@centos-7-x64 rules]# wget "https://lists.malwarepatrol.net/cgi/getfile?receipt=" -O suricatamd5.txt--2016-03-07 12:52:22--&nbsp; https://lists.malwarepatrol.net/cgi/getfile?Resolving lists.malwarepatrol.net (lists.malwarepatrol.net)... 104.20.78.76, 104.20.77.76, 2400:cb00:2048:1::6814:4e4c, ...Connecting to lists.malwarepatrol.net (lists.malwarepatrol.net)|104.20.78.76|:443... connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/plain]Saving to: ‘suricatamd5.txt’

Header md5 downloaded

#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Malware Patrol - Block List - https://www.malwarepatrol.net
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List for Suricata IDS / IPS
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Generated at: 20160308105602 UTC
#
#&nbsp;&nbsp;&nbsp;&nbsp; Please do not update this list more often than every hour.
#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Copyright (c)&nbsp; 2016 - Andre Correa - Malware Patrol - Malware Block List
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; This information is provided as-is and under the Terms and Conditions
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; available in the following address:
#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; https://www.malwarepatrol.net/terms.shtml
#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Using this information indicates your agreement to be bound by these
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; terms. If you do not accept them, please delete this file immediately.
#
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; You can report false positives or broken rules/signatures to:
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fp (a t) malwarepatrol.net

Com isso, precisamos criar uma regra e apontar para esse arquivo.

Criei um arquivo específico para ele, mas você pode adicionar no local.rules também.

# cat malwarepatrol.rules

alert http any any -&gt; any any (msg:"FILE MD5 Check against Malware Patrol blacklist"; filemd5: suricatamd5.txt; sid:10203040; rev:1;)

Após essa regra, precisaremos finalizar a configuração do arquivo config

# vim /opt/suricata/etc/suricata/suricata.yaml

Adicionaremos na parte de rules-files a entrada com o nome da nossa regra.

# Set the default rule path here to search for the files.
# if not set, it will look at the current working dir
default-rule-path: /opt/suricata/etc/suricata/rules
rule-files:
&nbsp;- malwarepatrol.rules
&nbsp;- botcc.rules
&nbsp;- ciarmy.rules

Feito isso, basta reiniciar o processo e fazer download de algum arquivo malicioso listado lá.

Quando iniciando o processo terá nos logs:

7/3/2016 -- 06:50:10 -  - Loading rule file: /opt/suricata/etc/suricata/rules/malwarepatrol.rules7/3/2016 -- 06:50:10 -  - MD5 hash size 3198000 bytes

Exemplo de saída:

eve.json

{"timestamp":"2016-03-06T11:33:00.638110-0500","flow_id":30172784,"in_iface":"eth0","event_type":"alert","src_ip":"69.163.211.36","src_port":80,"dest_ip":"159.203.10.127","dest_port":40818,"proto":"TCP","tx_id":0,"alert":{"action":"allowed","gid":1,"signature_id":10203040,"rev":1,"signature":"FILE MD5 Check against Malware Patrol blacklist","category":"","severity":3}}

fast.log

03/06/2016-11:33:00.638110&nbsp; [**] [1:10203040:1] FILE MD5 Check against Malware Patrol blacklist [**] [Classification: (null)] [Priority: 3] {TCP} 69.163.211.36:80 -&gt; 159.203.10.127:40818

Outro ponto interessante da função MD5 é que você pode criar md5 dos arquivos sensiveis e monitorar se o mesmo não está sendo enviado para fora, lembrando que checagem md5 vai além do protocolo http.


* Vale lembrar o uso memória é bem pequeno e suporte a milhões de entrada segundo benchmarks sem afetar a performace "Each MD5 uses 16 bytes of memory. 20 Million MD5's use about 310 MiB of memory."

** Não esqueça ver o valor app-layer.protocols.http.libhtp.default-config.response-body-limit, o default é de apenas 100kb. Para Malware Patrol o ideal seria 4mb, porém sempre bom analisar performance.

Happy Detection!

Rodrigo "Sp0oKeR" Montoro