MISP (Malware Information Sharing Platform & Threat Sharing)

La continua evolución de las amenazas y su volatilidad está exigiendo a los profesionales del sector de la seguridad diseñar, desarrollar y explotar soluciones que permitan intercambiar información de una manera rápida, cómoda y sobre todo de una manera distribuida entre los diferentes actores dedicados a velar por la seguridad.

Una de estas soluciones es MISP. De un tiempo a esta parte la herramienta está alcanzando más popularidad y se está convirtiendo poco a poco en una de las herramientas más importantes para el intercambio de indicadores de compromiso. Un indicador de su popularidad es que cada vez son más los productos que están empezando a hablar con MISP; puede verse un ejemplo reciente de cómo desde cuckoo-modified (un fork de Cuckoo Sandbox) se ha añadido un módulo de reporting para interactuar con MISP.

Una de las partes más importantes de la herramienta desde mi punto de vista es su API, pymisp. Es por ello que en esta entrada vamos a ver los pequeños ejemplos que nos aportan desde el proyecto y así ver el potencial de automatización que nos ofrece la herramienta.

Partiendo de que ya tenemos instalado pymisp nos situamos en el directorio “examples” de pymisp y veremos allí una serie de ejemplos muy útiles. Vamos a repasar alguno de los más interesantes:

  1. Script get.py. A este script se le pasa como parámetro un id de evento a consultar y se le puede pasar también un fichero para volcar la salida. Un ejemplo de una ejecución sería:
    $ python get.py -e 4182 -o 4182.json
    

    Otro ejemplo de ejecución para verlo por pantalla un formato legible sería:

    $ python get.py -e 4182 | python -m json.tool
    

    Estas dos ejecuciones nos devolverán en formato JSON el evento 4182.

  2. Script tags.py. Este script nos devuelve los tags que hay en la instancia de MISP que estamos consultando en formato json.
    $ python targs.py
    

    Para que se puedan obtener tienen que estar marcada como “exportable”.

  3. Script suricata.py. Nos devolverá las reglas para Suricata del evento que consultemos o si le ponemos la opción -all nos devolverá todas las reglas Suricata de toda la instancia de MISP.
    $ python suricata.py -e 4182
    
    
    #This part might still contain bugs, use and your own risk and report any issues.
    #
    # MISP export of IDS rules - optimized for suricata
    #
    # These NIDS rules contain some variables that need to exist in your configuration.
    # Make sure you have set:
    #
    # $HOME_NET	- Your internal network range
    # $EXTERNAL_NET - The network considered as outside
    # $SMTP_SERVERS - All your internal SMTP servers
    # $HTTP_PORTS   - The ports used to contain HTTP traffic (not required with suricata export)
    #
    alert dns any any -> any 53 (msg: "MISP e4182 Hostname: post.saw.com"; dns_query; content:"post.saw.com"; nocase; pcre: "/(^|[^A-Za-z0-9-\.])ktljl\.g3alead\.top$/i";  classtype:trojan-activity; sid:4563550; rev:1; priority:3; reference:url,https://misp.saw.com/events/view/4182;)
  4. Script last.py. Este script nos devuelve lo último que se ha introducido en la instancia de MISP. Para ello recibe como parámetro el valor de tiempo que queramos que retroceda en la recolección de eventos.
    $ python last.py -l30m
    
  5. Script copy_list. Este script puede que sea de los más interesantes ya que nos permite copiar eventos de una instancia de MISP a otra.
  6. Script get_network_activity. Otro de los scripts más útiles desde mi punto vista ya que nos extrae de los eventos la información de red. En el fichero “eventos” le tenemos que indicar los eventos que estamos interesados en extraer este tipo de información (por ejemplo):
    $ python get_network_activity.py --no-comment --hostname --domain -f eventos
    
    	X.X.X.Y
    	dominio.com
    
  7. Script searchall.py. Este script nos devuelve todos los eventos que cumplen con un patrón de búsqueda. Por ejemplo:
    $ python searchall.py -q -s APT
    

    Con la opción -q nos devolverá solo los enlaces. Si queremos los eventos solo tenemos que quitarle la opción -q.

Después existen una serie de scripts que por el momento no he utilizado como ioc2misp.py, create_events.py, upload.py, feed-generator, etc. aunque su nombre deja claro cuál va a ser su funcionalidad.

Los scripts que hemos visto en esta entrada son todos de consulta y nos permiten de una manera muy sencilla obtener información valiosa. Podéis encontrar información en la página de MISP, en la del API y sobre todo leyendo el código de los scripts.

Mi enhorabuena a la gente que hay detrás de MISP porque están consiguiendo que el intercambio de información sea una realidad.