martes, 1 de diciembre de 2015

¿Quién dijo que Yara es sólo para binarios?

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

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

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


16 comentarios:

  1. I appreciating this great blog. Thank you for posting something good like this

    ResponderEliminar
  2. It was definitely informative article you've done. This site is very useful.

    ResponderEliminar
  3. Wonderful website. Plenty of useful information here.

    ResponderEliminar
  4. I want to encourage you to definitely continue your great writing, have a nice day!

    ResponderEliminar

  5. What an awesome post, I just read it from start to end your blog post. Really an informative blog.

    ResponderEliminar

  6. Amazing website hope to see more post of your post.

    ResponderEliminar

  7. Thank you so much for your great information, It is too useful for me. Thanks again!

    ResponderEliminar
  8. 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

  9. Several 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

    ResponderEliminar
  10. "Not Much Blogging ~ Update on Mum... and me" provides a heartfelt glimpse into personal challenges and resilience, offering a poignant narrative that resonates with readers.||Domestic Violence Charges New Jersey||divorce in new york state cost Through the vulnerability of "Not Much Blogging," the author shares an intimate update on both personal and familial struggles, creating a connection that transcends the digital realm and fosters empathy among readers.





    ResponderEliminar
  11. This article discusses the use of Yara for detecting fraudulent electronic mails directed to Davivienda, a Colombian bank. Yara, designed for malware detection in binary files, has been used to classify text emails based on specific patterns. The rule "davivienda" is used to search for the "Davivienda" text chain within the email content, helping to identify related messages. Both emails and the Yara rules are available on GitHub, allowing others to use the material for their own purposes under the GNU-GPLv2 license. The use of Yara in this context demonstrates its versatility beyond its traditional application in binary file detection. Its ability to analyze and classify emails based on specific criteria can improve cybersecurity and protect organizations against phishing attacks and financial fraud. accidente de camión

    ResponderEliminar
  12. Now I am found which I actually want. Thank you.

    ResponderEliminar
  13. I appreciate you spending some time and energy to put this content together.

    ResponderEliminar
  14. I like you know what you’re talking about! Thanks

    ResponderEliminar
  15. Motorcycle accident attorneys specialize in providing legal representation for individuals involved in motorcycle crashes. These legal professionals understand the unique challenges and complexities surrounding motorcycle accidents, including severe injuries and biases against riders. They investigate incidents thoroughly, determine liability, and build robust cases to secure compensation for medical expenses, property damage, lost wages, and emotional distress. Motorcycle accident attorneys negotiate with insurance companies on behalf of their clients and, if necessary, litigate in court to ensure justice is served. Motorcycle accident attorneys

    ResponderEliminar