terça-feira, 8 de março de 2016

Utilizando Malware Patrol MD5 list com o Suricata IDS

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
 
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  "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--  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 OK
Length: unspecified [text/plain]
Saving to: ‘suricatamd5.txt’


Header md5 downloaded

#
#        Malware Patrol - Block List - https://www.malwarepatrol.net
#        List for Suricata IDS / IPS
#        Generated at: 20160308105602 UTC
#
#     Please do not update this list more often than every hour.
#
#       Copyright (c)  2016 - Andre Correa - Malware Patrol - Malware Block List
#       This information is provided as-is and under the Terms and Conditions
#       available in the following address:
#
#       https://www.malwarepatrol.net/terms.shtml
#
#       Using this information indicates your agreement to be bound by these
#       terms. If you do not accept them, please delete this file immediately.
#
#       You can report false positives or broken rules/signatures to:
#       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 -> 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:
 - malwarepatrol.rules
 - botcc.rules
 - 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.rules
7/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  [**] [1:10203040:1] FILE MD5 Check against Malware Patrol blacklist [**] [Classification: (null)] [Priority: 3] {TCP} 69.163.211.36:80 -> 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

Nenhum comentário: