Hace unos días detectamos
en la red de sensores de Hispasec varios correos fraudulentos que afectaban a
una entidad bancaria colombiana llamada Davivienda. Empezamos a estudiar
cómo poder hacer una clasificación de los mismos y además de utilizar las ya conocidas
expresiones regulares, surgió la idea de hacerlo con Yara. Aunque Yara
inicialmente estaba enfocado a utilizarse contra archivos binarios, en nuestro
laboratorio intentamos hacer una prueba de concepto (PoC) para observar su
rendimiento sobre archivos de texto.
Todos los emails y reglas Yara usados en esta entrada han
sido alojados en el repositorio YaraRules
en GitHub para que el lector pueda, en cualquier momento, comprobar y/o
utilizarlos para sus propios fines bajo licencia GNU-GPLv2.
Uno de los emails recibidos y el cuál vamos a utilizar
para hacer la PoC
(alojado aquí) se trata, como ya hemos dicho, del banco colombiano “Davivienda”. En primer lugar nos
interesa conocer si este email contienen el nombre del banco, para ello creamos
una regla que simplemente busca la cadena del banco:
rule davivienda { strings: $nombre = "davivienda" nocase condition: all of them }
Esta nos dirá si en el email se encuentra el nombre del
banco. Si bien esta condición puede no ser única, para otros bancos
necesitaremos más de una palabra o condiciones más complejas.
Y con una simple llamada a Yara podemos ver si el email pertenece
a dicha entidad:
$ yara bank_rule.yar davivienda.eml
davivienda davivienda.eml
davivienda davivienda.eml
En el contenido del correo (guardado en el archivo
davivienda.eml) se encuentra la palabra davivienda, definida en la
primera regla.
A continuación vamos a intentar extraer algunas
características interesantes de los correos electrónicos. En primer lugar vamos
a ver si contiene archivos adjuntos. Dentro del formato de correo electrónico
(eml) los archivos adjuntos se encuentran tras el cuerpo del mensaje y justo
después de la cabecera "X-Attachment-Id", la cuál nos indica
el identificador del archivo adjunto. La siguiente regla nos dice si un email
contiene archivos adjuntos buscando dicha cabecera:
rule with_attachment { strings: $attachment_id = "X-Attachment-Id" condition: $attachment_id }
Y procedemos a ejecutarla con Yara sobre nuestro archivo
de email.
$ yara attachment.yar
davivienda.eml
Lo cual no nos da ningún resultado y es correcto, pues
este email no tiene archivos adjuntos. Para comprobar si funciona vamos a
volver a pasarlo sobre otro correo que sabemos que contiene un archivo adjunto:
$ yara attachment.yar
con_adjunto.eml
attachment con_adjunto.eml
Para casos en los que el email no tenga archivo adjunto
también se puede buscar la condición contraria y juntar ambas en un ruleset,
que quedaría tal que así (se puede descargar completo aquí):
rule with_attachment { strings: $attachment_id = "X-Attachment-Id" condition: $attachment_id } rule without_attachment { strings: $attachment_id = "X-Attachment-Id" condition: not $attachment_id }
Al ejecutarla sobre el scam del banco nos daría este
resultado:
$ yara attachment.yar davivienda.eml
without_attachment davivienda.eml
Con esta simple regla sobre un email de scam podemos ver
si tiene archivos adjuntos (y que posiblemente pueda ser algún tipo de
malware).
Otra de las cosas que se pueden buscar sobre un email es
que aparezcan URLs. Para ello Yara nos provee de expresiones regulares y la
regla para detectar URLs quedaría así:
rule with_urls { strings: $url_regex = /https?:\/\/([\w\.-]+)([\/\w \.-]*)/ condition: all of them }
Y para buscar si NO tiene URLs de una manera muy similar,
simplemente negando la condición (ver completa aquí):
rule without_urls { strings: $url_regex = /https?:\/\/([\w\.-]+)([\/\w \.-]*)/ condition: not $url_regex }
Incluímos ambas reglas dentro de un mismo ruleset para
que sea más cómodo y lo ejecutamos con Yara sobre nuestro correo:
$ yara urls.yar davivienda.eml
with_urls davivienda.eml
Lo que nos confirma que contiene URLs.
Las imágenes también son un recurso muy interesante a
buscar en un correo electrónico y podemos hacerlo con esta regla algo más
completa:
rule with_images { strings: $a = ".jpg" nocase $b = ".png" nocase $c = ".bmp" nocase condition: any of them }
En este caso lo que se buscan son las extensiones de
archivos de imagen. El modificador nocase es para que busque en case-insensitive,
es decir, sin tener en cuenta mayúsculas o minúsculas.
También añadimos la regla contraria, para detectar si no
carga imágenes (ver completa aquí):
rule without_images { strings: $a = ".jpg" nocase $b = ".png" nocase $c = ".bmp" nocase condition: not $a and not $b and not $c }
Y procedemos a pasarla sobre nuestro archivo:
$ yara image.yar davivienda.eml
with_images davivienda.eml
with_images davivienda.eml
Por lo que también carga imágenes externas.
Finalmente y para poder hacer todo este proceso más
automatizado, se puede crear un ruleset (que nosotros hemos nombrado como email_ruleset.yar)
que englobe todas las reglas que hemos definido anteriormente (ver completo aquí):
include "bank_rule.yar" include "attachment.yar" include "urls.yar" include "image.yar"
Con esto terminado, lo volvemos a ejecutar sobre nuestro
archivo de email y nos dará toda la información que estamos buscando:
$ yara email_ruleset.yar davivienda.eml
davivienda davivienda.eml
without_attachments davivienda.eml
with_urls davivienda.eml
with_images davivienda.eml
Recordar al lector que esto es sólo un ejemplo del
potencial y flexibilidad de las reglas Yara sobre todo tipo de archivos. Todas
las reglas y archivo de email pueden ser consultados en este repositorio de
GitHub: https://github.com/Yara-Rules/rules/tree/master/email
Más
información:
Página oficial de Yara
Blog de YaraRules
Repositorio GitHub de YaraRules
Antonio Sánchez
I appreciating this great blog. Thank you for posting something good like this
ResponderEliminarIt was definitely informative article you've done. This site is very useful.
ResponderEliminarWonderful website. Plenty of useful information here.
ResponderEliminarI want to encourage you to definitely continue your great writing, have a nice day!
ResponderEliminar
ResponderEliminarWhat an awesome post, I just read it from start to end your blog post. Really an informative blog.
ResponderEliminarAmazing website hope to see more post of your post.
ResponderEliminarThank you so much for your great information, It is too useful for me. Thanks again!
An interesting content to rea. Thanks to the author for sharing this wonderful post. Keep sharing more interesting blogs like this. Divorce Lawyers Arlington VA
ResponderEliminar
ResponderEliminarSeveral fraudulent emails on the Hispasec sensor network You have registered us for this post. Thank you very much for registering this program for us. I got information blog. Abogados de bancarrota baratos en Virginia beach