El curioso caso del SGSI dentro del SGSI

Estimados lectores, esta mañana me encontraba en la máquina de café de la oficina hablando con varios compañeros sobre la filmografía del bueno de Christopher Nolan (por si no lo conocen, es el director de películas como Memento o la más reciente Interstellar). Pues bien, dentro de su filmografía podemos encontrar una que juega con el concepto de la recursividad. Se llama Origen y en mi humilde opinión es una gran película, con un reparto de lujo (Leonardo Dicaprio, Marion Cotillard, Ellen Page, etc.)

Y ustedes se preguntarán ¿y todo esto a qué viene? Algo tan sencillo como que la recursividad me ha sugerido la idea de escribir un post sobre un reciente proyecto en el que he participado y que finalmente ha terminado con la obtención de un certificado ISO 27001.

Este proyecto tenía numerosas particularidades que lo hacían especialmente complejo. Por ponerles en contexto, el proyecto consistía en la implantación de un SGSI para ciertos procesos de una plataforma online de una importante multinacional.

La primera particularidad era su reducido alcance. La segunda era que la sede española ya disponía de un SGSI certificado. La tercera era que se trataba de un proyecto que pertenecía a la matriz internacional, con un equipo de personal dedicado, y no a la sede española. La cuarta era que los servicios que prestaban departamentos transversales de la sede española (TI, RRHH, etc.) para nosotros eran parcialmente opacos. La quinta era que los sistemas de información estaban ubicados en un proveedor certificado por la ISO 27001. La sexta era que el SGSI debía ser en inglés (pero bueno esto no es especialmente relevante)…

Así pues, voy a tratar de exponerles ciertas situaciones que se me plantearon como cuestiones durante el proyecto. Espero que mi experiencia les pueda ser útil.

¿Se puede certificar por la ISO 27001 un proyecto y no una empresa? Sí, la norma no necesariamente requiere certificar una empresa es más, por norma general se certifican procesos de negocio de la misma. Pero también se puede certificar, por ejemplo, proyectos realizados en una UTE (Unión Temporal de Empresas). No obstante, siempre deberá haber un CIF detrás.

Si quiero certificar un proyecto dentro de mi empresa, la cual ya está certificada, ¿es necesario definir otro SGSI? No, tan solo bastará con ampliar el alcance del mismo. Siempre y cuando lo hagamos con la misma entidad de certificación. Si quieren hacerlo con otra entidad entonces deberán definir un SGSI nuevo o ampliar el alcance y someter el SGSI a otra auditoría. En este caso, por requerimiento de la matriz, la entidad certificadora debía ser otra distinta y partir de un SGSI nuevo.

¿Existe algún problema en seleccionar un alcance muy limitado? No, siempre y cuando tenga sentido. No obstante, un alcance limitado no nos eximirá de implantar gran parte de controles, como podemos pensar en un primer momento. Por ejemplo los controles relacionados con Recursos Humanos o con la seguridad física, casi al 100% nos serán de aplicación.

¿Puedo utilizar el comodín del SGSI existente para alegar que un control está implantado en el nuevo SGSI? Sí, pero ojo que el auditor puede auditar ese control, es decir por estar certificado no hará un dogma de fe y lo dará por válido. Puede darse el caso de que un proceso que sea idéntico para los dos SGSIs, por ejemplo el CV Screening, un auditor lo de por válido y otro no. Por eso, podemos referenciar en nuestra declaración de aplicabilidad cómo está implantado el control en el otro SGSI, pero siempre debemos revisar que en efecto se está cumpliendo.

¿Cómo tratamos a los servicios transversales (TI, RRHH, etc.) que nos prestan desde una sede concreta, pero sobre los que no tenemos control directo? Mi recomendación, y dada la casuística en este caso, es la definición y suscripción de OLAs (Operation Level Agreements) que reflejen: Los servicios prestados, los niveles de servicio asociados y aspectos de seguridad requeridos por el proyecto. Sin embargo, aquí deberemos tener cuidado en las formas de proceder y en las “exigencias que impondremos”, puesto que podemos encontrarnos con reticencias por parte de nuestros proveedores internos.

Si mis sistemas de información están en un proveedor de housing/hosting certificado por la ISO 27001, ¿el auditor verificará las medidas de seguridad de mi proveedor in situ? Pues depende, pero en más de una ocasión puedo confirmarles que durante la auditoría el auditor ha solicitado visitar las instalaciones del proveedor y revisar las medidas de seguridad existentes. A pesar de que el proveedor esté certificado por la ISO 27001, la ISO 20000, o este acreditado como Tier III.

Finalmente, otra de las lecciones aprendidas de este proyecto, es que no siempre un alcance acotado o la existencia de un SGSI previo puede disminuir la complejidad del proyecto de implantación de ISO 27001. Así que como siempre les decía a mis alumnos de taekwondo nunca subestimes a tu rival.

En cualquier caso, le doy mi más sincera enhorabuena a este proyecto por la obtención de la certificación ISO 27001.

P.D. Y por si se lo estaban preguntando, Dicaprio tampoco consiguió el Oscar con esta película.

Defensas frente a ataques ARP

Recientemente he estado revisando documentación de controles de red a nivel 2 y justo vino a mi memoria el post de Borja Merino de hace algún tiempo.

En el post, Borja hablaba de cómo hacer frente a ataques DHCP mediante la funcionalidad DHCP Snooping de Cisco, hablando de puertos confiables y no confiables, y de la tabla de asociación IP-MAC usada. También hace referencia a DAI (Dynamic ARP Inspection) como funcionalidad de seguridad para poder evitar posibles ataques MitM como ARP poisoning; es justo esta funcionalidad en la que nos centraremos en la entrada de hoy.

DAI es una medida de seguridad disponible en switches Cisco que nos permite validar los paquetes ARP de la red; al igual que en el post de Borja, DAI utiliza la tabla de asociaciones IP-MAC generada por DHCP Snooping, aunque esto es opcional. Para este post, daremos de alta las entradas de forma manual, algo poco eficaz en entornos grandes.

DAI intercepta las peticiones y respuestas de los puertos no confiables (untrusted) y las valida contra la tabla antes de actualizar su cache y permitir el tráfico. Puesto que el comportamiento por defecto es definir todos los puertos como untrusted, deberemos especificar los puertos confiables (trusted) mediante el comando ip arp inspection trust para evitar el bloqueo de puertos, por ejemplo de puertos de conexión con servidores o enlaces troncales entre switches.

Nuestra arquitectura de red es similar a la vista en el post de Borja, disponemos de un switch, en este caso un Cisco 3750, dos equipos de usuarios y un servidor DHCP aunque éste último, no vamos a usarlo ya que se configurarán manuales.

Lo primero que hacemos es comprobar que existe conectividad entre ambos equipos (¡cuántas veces hemos asumido que todo funciona antes de modificar algo y luego, cuando no va y tenemos que ir deshaciendo lo realizado, vemos que antes tampoco funcionaba como tocaba!). Una vez aseguramos la conectividad, procedemos a activar DAI.

Por defecto, DAI inspecciona todos los paquetes ARP enviados desde los puertos no confiables para asegurar la presencia de una correspondencia IP-MAC en la tabla de asociaciones. Aunque pueden activarse validaciones de seguridad adicionales mediante el comando ip arp inspection validate, nosotros usaremos las funcionalidades por defecto.

Switch(config)# ip arp inspection vlan 1

La activación, como hemos comentado anteriormente, define todos los puertos como no confiables:

Switch# show ip arp inspection interfaces 

 Interface        Trust State     Rate (pps)    Burst Interval
 ---------------  -----------     ----------    --------------
…
 Gi1/0/20         Untrusted               15                 1
…
 Gi1/0/24         Untrusted               15                 1

Por lo que se comprobaría la presencia en la tabla de asociaciones de una entrada, algo que hemos dicho que realizaríamos de forma manual, y al no encontrar ninguna, bloqueará el tráfico. Esto podemos verlo claramente en el log que muestra la consola, y donde se especifica MAC origen, IPs origen, destino e interfaz.

01:16:20: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Gi1/0/20, vlan 1.([0024.beec.2526/172.18.0.222/0000.0000.0000/172.18.0.111/01:16:20 UTC Mon Mar 1 1993])

Aunque ya hemos visto que funciona, podremos validar que la funcionalidad se encuentra activada y se está bloqueando el tráfico:

Switch# show ip arp inspection vlan 1

Source Mac Validation      : Disabled
Destination Mac Validation : Disabled
IP Address Validation      : Disabled

 Vlan     Configuration    Operation   ACL Match          Static ACL
 ----     -------------    ---------   ---------          ----------
    1     Enabled          Active                         

 Vlan     ACL Logging      DHCP Logging      Probe Logging
 ----     -----------      ------------      -------------
    1     Deny             Deny              Off          

Switch#  show ip arp inspection statistics

 Vlan      Forwarded        Dropped     DHCP Drops      ACL Drops
 ----      ---------        -------     ----------      ---------
    1            0            971            971              0

El siguiente paso será añadir manualmente, las asociaciones IP-MAC de cada uno de los equipos en la tabla, especificando la interfaz donde están conectados:

Switch(config)# ip source binding 0024.beec.2526 vlan 1 172.18.0.222 interface gigabitEthernet 1/0/20                                                                                               
Switch(config)# ip source binding 0050.5b00.0dff vlan 1 172.18.0.111 interface gigabitEthernet 1/0/24

Y ver que se han almacenado correctamente:

Switch# show  ip source binding
MacAddress          IpAddress        Lease(sec)  Type           VLAN  Interface
------------------  ---------------  ----------  -------------  ----  --------------------
00:50:5B:00:0D:FF   172.18.0.111     infinite    static          1     GigabitEthernet1/0/24
00:24:BE:EC:25:26   172.18.0.222     infinite    static          1     GigabitEthernet1/0/20

Esta asociación también podría hacerse definiendo una ACL.

Llegados a este punto, volveríamos a tener conectividad, por lo que si volvemos a comprobar las estadísticas, vemos que ya aparece tráfico reenviado:

Switch#  show ip arp inspection statistics 

 Vlan      Forwarded        Dropped     DHCP Drops      ACL Drops                                                                                                                                           
 ----      ---------        -------     ----------      ---------                                                                                                                                           
    1            120            316            316              0      

Hasta aquí, solo hemos visto el comportamiento normal del sistema, pero ahora, vamos a enviar tráfico con una dirección MAC (o IP) distinta de las introducidas en la tabla anterior; esto puede hacerse de forma manual cambiando la configuración del adaptador de red, o con herramientas de manipulación de tráfico como scapy.

Al cambiar la dirección MAC perdemos la conexión con el equipo remoto, y volvemos a ver avisos en el log donde se indica la nueva dirección MAC, la cual no aparece en la tabla de asociaciones:

1:32:15: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Gi1/0/24, vlan 1.([0050.5b00.0df1/172.18.0.111/0000.0000.0000/172.18.0.222/01:32:15 UTC Mon Mar 1 1993])

Y vemos cómo el número de paquetes dropeados aumenta:

Switch#  show ip arp inspection statistics 

 Vlan      Forwarded        Dropped     DHCP Drops      ACL Drops
 ----      ---------        -------     ----------      ---------
    1            135            380            380              0

Esta configuración mostrará un aviso en el log, pero es más interesante configurar el equipo para que, en caso de detectar que el número de paquetes ARP que no tienen presencia en la tabla, supere un umbral definido, por ejemplo un paquete por segundo, bloquee el puerto (err-disabled) durante un periodo de tiempo (y lo notifique por SNMP).

Switch(config)# errdisable recovery cause arp-inspection   
Switch(config)#  interface gigabitEthernet 1/0/24
Switch(config-if)# ip arp inspection limit 1 

Puesto que el equipo sigue intentando conectarse, el puerto se bloquea automáticamente:

01:42:47: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Gi1/0/24, vlan 1.([0050.5b00.0df1/172.18.0.111/0000.0000.0000/172.18.0.222/01:42:46 UTC Mon Mar 1 1993])
01:42:47: %SW_DAI-4-PACKET_RATE_EXCEEDED: 2 packets received in 998 milliseconds on Gi1/0/24.
01:42:47: %PM-4-ERR_DISABLE: arp-inspection error detected on Gi1/0/24, putting Gi1/0/24 in err-disable stateexit
01:42:48: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/24, changed state to down

Y así lo veremos el estado de la interfaz sospechosa:

Switch# show  interfaces gigabitEthernet 1/0/24 status 

Port      Name               Status       Vlan       Duplex  Speed Type
Gi1/0/24                     err-disabled 1            auto   auto 10/100/1000BaseTX

También podríamos verlo si tenemos activado el log de violaciones detectadas por DAI mediante el comando show ip arp inspection log.

Dado que no hemos modificado el tiempo, el puerto estará 5 minutos bloqueado, pudiendo ver cuanto tiempo queda hasta la próxima comprobación:

Switch# show  errdisable  recovery                     
ErrDisable Reason    Timer Status
-----------------    --------------
arp-inspection       EnabledTimer interval: 300 seconds

Interfaces that will be enabled at the next timeout:

Interface    Errdisable reason    Time left(sec)    Errdisabled vlans
---------    -----------------    --------------    -----------------
Gi1/0/24     arp-inspection            118  

Si mientras el puerto esta bloqueado, volvemos a dejar la dirección MAC correcta, una vez venza el timeout, el puerto volverá a levantar correctamente y recuperaremos la conectividad:

01:48:51: %PM-4-ERR_RECOVER: Attempting to recover from arp-inspection err-disable state on Gi1/0/24control Disabled
01:48:54: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/24, changed state to up
01:48:55: %LINEPROTO-5-UPDOWN: Line protocol on Interface GigabitEthernet1/0/24, changed state to up

Como comentaba Borja en su entrada, existen distintas funcionalidades de seguridad a este nivel que debemos tener en cuenta a la hora de comprar nuevos equipos. No obstante, es habitual que este tipo de medidas vengan desactivadas por defecto y queden sin configurar salvo para casos puntuales.

Como reflexión final para los lectores, ¿disponen de medidas de seguridad a nivel 2 en sus organizaciones?

Zen y el arte de pescar APTs (II)

En el capítulo anterior habíamos dejado la investigación en un punto candente: teníamos pendiente un análisis forense del equipo del director de marketing, ya que todo apuntaba a que podía ser la fuente de la filtración de la información.

Hablando con María, la CIO de la Empresa, tomamos la decisión de ser extremadamente cautos a la hora de hacer una imagen forense del portátil del director de marketing, ya que la paranoia campa a sus anchas por la Empresa y no es posible fiarse de nadie.

Esperamos a que salga a una reunión en otra empresa para entrar en su oficina y abalanzarnos con nuestro bloqueador de escritura de discos para obtener una copia bit a bit (las únicas válidas ya que capturan el estado del disco tal y como está, copiando tanto ficheros borrados como espacio libre del disco duro).

[Read more…]

Enviando caracteres no representables en Android

Hace unos días Google anunció que no va a desarrollar más parches de seguridad para versiones inferiores a la 4.4 (Kitkat), en respuesta al último reporte de un grupo de investigadores independientes, quienes encontraron una vulnerabilidad en el módulo “WebView” que afectaba a versiones de Android inferiores a 4.4.

Al leer esta noticia me entró “el afán del investigador” y casualmente encontré algo muy curioso en los emoticonos de nuestra querida aplicación para Android, Whatsapp. Para explicar ese ”algo” tan curioso recurriré a diversas capturas de pantalla donde podréis observar de lo que os hablo. Al parecer existen ciertos caracteres que Android no interpreta y que por lo tanto no los puede renderizar en la pantalla.

Todo empezó cuando me dispuse a enviar unas cuantas banderas (emoticonos) al Whatsapp de un amigo:


Ilustración 1 – Primer envío de banderas

Como podemos observar, no hay un comportamiento extraño de la aplicación Whassap para Android, simplemente lo que vemos: varios emoticonos de banderas. No obstante trasteando un poco y al realizar un “backspace” en la primera bandera, obtuve lo siguiente:


Ilustración 2 – Nuevos caracteres

¿Interesante, verdad? Como podemos ver al realizar dicho “backspace” los restantes emoticonos de banderas cambiaron, representándose ahora como caracteres unicode. Este hecho me llevo a seguir realizando pruebas en busca de algo más… Así que continué con la búsqueda del carácter no representable, como podemos ver a continuación:


Ilustración 3 – Añadimos nuevas banderas

Tal y como vimos en la imagen anterior añadí emoticonos de banderas justo antes del último emoticono representado como una bandera. Posteriormente realicé un “backspace” en el segundo emoticono de bandera añadido en el paso anterior y obtuve lo siguiente:


Ilustración 4 – Segundo “backspace”

Posteriormente a esto, probé a escribir cualquier texto delante de la única bandera que quedaba con vida (XD), y para mi sorpresa, los caracteres empezaron a desaparecer como por arte de magia. En realidad, lo que sucedía es que la aplicación Whatsapp era y es incapaz de representarlos, así que copie esa parte y me dispuse a enviarla. Estos fueron los resultados:


Ilustración 5 – Mensajes vacíos

Digamos que ahora podía enviar mensajes a cualquier contacto sin que Whatsapp pudiese representar dichos caracteres en mi pantalla, algo que podría ser muy útil en determinadas situaciones. Sorprendido por ese hecho decidí ver qué caracteres se almacenaban en mi historial de conversaciones:


Ilustración 6 – Historial

Como podemos observar, mandamos en primer lugar un “hola”, en segundo lugar “que tal” y por último “yo estoy genial”. Además añade el signo de interrogación como la representación del carácter “desconocido”.
El mensaje se guarda correctamente en el historial de la aplicación de Whatsapp, además el contacto recibe el mensaje correctamente, no obstante no se renderiza en nuestro terminal, es decir el mensaje no aparece en la pantalla de nuestro terminal.

Para averiguar qué carácter es el que Android es incapaz de representar, tiramos de un programa muy conocido: “hexadump”, para analizar el contenido en hexadecimal del historial de la conversación de Whatsapp.


Ilustración 7 – Hexadump

Ahora procederemos a analizar cada par de caracteres hexadecimales para encontrar cuál es ese carácter “desconocido”:


20 3f 68 6f 6c 61 0a -> ?hola
20 3f 71 75 65 20 74 61 6c 3f 0a -> ?que tal?
20 3f 6f 20 65 73 74 6f 79 20 67 65 6e 69 61 6c 20 3a 29 0a -> ?yo estoy genial :)
0a = Salto de línea.

Como vemos, no pude obtener qué carácter era el “desconocido”, ya que directamente la aplicación Whatsapp no pudo ni puede interpretar dicho carácter, y por lo tanto no lo guardó en el historial de conversaciones de la aplicación. Probé a hacerlo de otra forma, aprovechando que los caracteres Unicode tienen un tamaño de 1 a 4 bytes; existía la posibilidad de que el teclado de virtual de Android tuviese algún tipo de “bug” que permitiese el borrado parcial y no total de ciertos caracteres.


Ilustración 8 – Fichas de domino

Efectivamente así fue :). Al parecer, existen ciertos emoticonos en la aplicación de Whatsapp para Android, que cuando realizas un “backspace” para intentar borrarlos, no lo haces por completo. Si a esto le sumamos que añadimos un nuevo carácter o emoticono, obtenemos cosas tan curiosas como las que vimos en la imagen anterior: caracteres Unicode que representan una ficha de dominó en este caso.

Ya solo me quedaba ver el código hexadecimal de dichos caracteres:


Ilustración 9 – http://unicode.org/charts/PDF/U1F030.pdf

Con lo que concluí que 1F0 es el código hexadecimal (incompleto, pares de 2 números) que la aplicación para Android no puede representar :), y que automáticamente genera cuando sobre determinados emoticonos se le aplica un “backspace”:


Ilustración 10 – Decodificador de hexadecimal

Después de este análisis, me di cuenta de que esto sucedía en todas las aplicaciones para Android por lo que deduje (o intuyo) que se trata de un bug/problema/feature no documentada en el teclado virtual de Android, que permite no borrar por completo ciertos emoticonos cuando se dispone a eliminarlos (backspace), formando una secuencia que codificada en hexadecimal es 1F0, imposible de representar (renderizar) en la pantalla del usuario que lo envía.

Zen y el arte de pescar APTs (I)

Comienza un día nuevo en la oficina. Todos los sistemas están funcionando correctamente, el generador de cafeína está a toda máquina y los comerciales están fuera haciendo visitas. Es un momento perfecto para revisar algunos artículos de investigación, o hasta para invertir un poco de tiempo en un par de scripts en Python a los que les llevo dando vueltas un rato… hasta que suena el teléfono.

El jefe ha recibido una llamada de la CIO de una empresa del IBEX 35 (a partir de ahora, la empresa será Empresa, y la directiva María). Según sus palabras, se ha producido una fuga de datos. Una fuga muy grave. Al parecer, parte de lo que se ha filtrado es el plan estratégico de la empresa para los próximos cinco años. Información a la que tiene acceso un grupo muy reducido de personas, entre las que se encuentra el consejo de dirección de la empresa.

Como todavía no sabemos a lo que nos enfrentamos, cogemos tanto la mochila de respuesta ante incidentes como la de informática forense y nos dirigimos a la sede de la empresa en Madrid para una primera toma de contacto.

La Empresa se toma la seguridad muy en serio: registran ambas mochilas, toman fotografías de todos los dispositivos y nos dan una tarjeta de identidad que por la pinta seguro que es capaz de hacer más de lo que parece. Cámaras de seguridad en todos los pasillos, y un ambiente totalmente profesional hasta que subimos a la planta noble, donde nos reunimos con María. Está visiblemente nerviosa, y viendo su traje parece que lleva más de un día en pie.

Dentro de las fases de la respuesta ante incidentes estaríamos todavía de la detección (sabemos que hay algo, pero todavía no conocemos el alcance de lo que está sucediendo). María nos cuenta que alguien está obteniendo información confidencial de la empresa, tan reservada que solo puede venir de los más altos cargos de la empresa: el director general, el director de operaciones, el director financiero, el director de ventas… o ella misma.

Tras firmar varios acuerdos de confidencialidad especialmente virulentos, empezamos nuestro trabajo con la aproximación más simple: un inside job, el clásico empleado descontento que ha robado la información. Pero al parecer todos los directivos son fanáticamente leales a la empresa e incluso su personal administrativo es de la mayor confianza, por lo que a priori podemos descartar esta teoría (en realidad no la descartamos, solo la guardamos para más tarde).

El espionaje clásico también queda excluido: la información robada no es algo que se pueda obtener poniendo un micrófono o “pinchando” un teléfono. Ha sido extraída de un ordenador.

La Empresa también se toma muy en serio la seguridad informática: seguridad en profundidad en toda la arquitectura, varios niveles de cortafuegos, antivirus actualizados, sistemas parcheados hasta la obsesión, acceso remoto por VPN, detectores de intrusos, contraseñas robustas cambiadas cada mes, etc. Uno de esos sitios en los que nunca se esperaría que sucediera nada, pero en el que aquí estamos trabajando.

Lo primero que hacemos es recoger información, toda la que seamos capaces de recopilar para proceder a su análisis y entender qué ha podido suceder. La Empresa tiene todo bien organizado, por lo que podemos hacernos con un paquete de datos completo: logs del proxy, de la pasarela de correo, de los antivirus, eventos de servidores y de las estaciones de trabajo y hasta de la VPN. El problema es que todos esos logs, si tomamos el acumulado de los últimos tres meses (el mínimo con el que empezamos), suman 200Gb de información. Comprimida.

Cogemos tres meses porque estamos empezando a sospechar que una APT (Advanced Persistent Threat) puede estar detrás de esto. Vamos, que alguien puede haber entrado hasta la cocina en la Empresa y se esté comiendo hasta los yogures caducados. El disponer de un histórico de datos nos permite detectar patrones y descartar falsos positivos, haciendo más eficaz nuestro trabajo.

Lo primero que hacemos es realizar un filtro inicial de la información, quedándonos con los equipos tanto de los directivos como de su personal de administración (diez en total), lo que reduce los registros a un poco menos de 20Gb de datos descomprimidos. A través de una serie de scripts normalizamos e importamos la información a una base de datos que nos permita realizar búsquedas y aplicar otros scripts que tenemos desarrollados.

Las primeras comprobaciones son casi rutinarias, pero hay que realizarlas: visitas a dominios infectados, eventos de la consola de antivirus, múltiples envíos de correos a direcciones no conocidas… serían signos que nos permitirían detectar rápidamente el equipo comprometido, pudiendo aislar la infección lo antes posible.

No hay suerte esta vez, aunque en realidad no esperábamos sacar nada en claro. Este incidente huele a algo avanzado desde el primer momento. Tenemos que pasar a la segunda fase: la detección de anomalías. Todos los sistemas (incluidos sus usuarios) siguen unos patrones de comportamiento, un conjunto de acciones y conexiones que pueden ser analizados para conformar un baseline o valor de referencia.

Ese baseline puede ser obtenido de los logs recuperados para hacer emerger todo lo raro, todo lo que no encaja: las anomalías. Es un trabajo complicado, porque la creación del baseline nunca es exacta, y abundan los falsos positivos (y además, nunca sabes si los “malos” han sido tan buenos como para esconder sus acciones tan bien como para que se hagan parte del baseline).

Al final es un trabajo minucioso, costoso y metódico que tiene que hacerse con sumo cuidado y atención al detalle para no dejarse nada. Es como buscar una aguja en un pajar, pero cuando el pajar es del tamaño de un campo de fútbol y no sabes siquiera que lo que quieres encontrar es una aguja.

Menos mal que, si llevas tiempo en el negocio, puedes tomar algunos atajos. Sabiendo cómo se comportan muchas amenazas es posible realizar una serie de modelos de ataque, conociendo qué tipo de anomalías generan en un sistema. De esta forma podemos buscar por esas miguitas de pan, esos indicios que nos permitan averiguar qué es lo que está sucediendo.

La cantidad de datos no es pequeña, así que tenemos algo de tiempo mientras nuestros programas trabajan. Un poco más de cafeína, una docena de correos y dos llamadas telefónicas más tarde, tenemos un listado de unas 30 anomalías.

Casi todas son falsos positivos, pero una de ellas salta a la vista: una petición POST a un nombre de dominio muy similar a un conocido periódico de tirada nacional (a partir de ahora www.period1co.es), tan similar que tan solo han cambiado una letra por otra casi idéntica. La petición en sí es bastante anodina, pareciendo la URL a primera vista el posteo de un comentario en una noticia.

2014-11-05 14:44:58 UTC - 192.168.39.134:49260 – XXX.XXX.XXX.XXX:80 - www.period1co.es - POST /nacional/noticias/comentarios.php

Anomalía por partida doble. En primer lugar, ¿por qué tenemos un POST sin haber tenido antes ninguna comunicación con esa página web? Dentro de una comunicación HTTP el método POST es empleado para enviar datos a una página web, pero lo lógico es que antes hayamos descargado esa web, lo que suele conllevar un cierto trasiego de peticiones GET, que aquí a priori no existen.

En segundo lugar: ¿www.period1co.es? Lo buscamos en diversas páginas de reputación online y ninguna lo marca como malicioso, pero está claro que huele a chamusquina. Nos morimos de ganas por abrirlo en un navegador, pero no sabemos si los atacantes están vigilando los logs y los ponemos sobre aviso.

Mirando el lado positivo, tenemos ya dos hilos de los que tirar: el dominio supuestamente malicioso, y la IP origen de la petición, que resulta ser la del director de marketing de la Empresa.

Ahora podemos empezar a trabajar alrededor de estos indicios, lo que en la jerga conocemos como pivotar. Lo primero es ver más ocurrencias de ese dominio malicioso en todos los logs que tenemos recogidos, sean o no anómalos. Y el segundo paso sería analizar en detalle todo el tráfico de la IP 192.168.39.134, que parece ser a todas luces el equipo infectado.

La emoción de la caza es casi como una droga, así que mi jefe y yo miramos hipnotizados la pantalla mientras las herramientas hacen su trabajo. Diez angustiosamente largos minutos más tarde, tenemos resultados jugosos. Muy jugosos.

El equipo 192.168.39.134 ha realizado en los últimos dos meses 18 conexiones POST como la anterior a la URL www.period1co.es. Todas ellas en horario laboral, con unos tamaños bastante discretos (que hacen pensar a priori que la exfiltración de datos no se ha producido por esa vía) y a subpáginas del dominio con una estructura común (que podrían ser respondidas por un único script en el servidor y que ayudarían a que las URL variaran, haciendo más complicada su detección).

Y de forma adicional, tenemos 5 conexiones más al dominio desde dicha IP:

2014-11-01 12:34:18 UTC - 192.168.39.134:34320 – XXX.XXX.XXX.XXX:80 - www.period1co.es - GET /imagenes/nacional/logo.jpg
  • En días separados, y cada una de ellas con un tamaño de descarga ligeramente diferente.

    Una petición única para descargar una imagen, sin descargarse ningún código HTML. Estamos casi seguros de que esa imagen tiene truco (una técnica muy habitual del malware es descargarse con una extensión distinta al .exe para poder pasar los filtros de los cortafuegos). Y el hecho de que tenga tamaño diferente… ¿cada cuánto cambian las imágenes de los logos de una página web? Sospechoso. Demasiado sospechoso. Dado que no sabemos lo cuidadosos que son los atacantes, tampoco podemos tocar esa imagen. Por ahora.

    Revisando todos los logs no encontramos ningún otro equipo que comparta estos patrones de acceso. Por un lado es una buena noticia, ya que el ataque está muy localizado, pero por el otro es muy mala noticia: los atacantes saben muy bien lo que están haciendo, comprometiendo el mínimo número posible de equipos para lograr sus objetivos.

    Como primera medida creamos reglas en nuestro Snort para detectar tanto accesos al dominio www.period1co.es como a ficheros con el nombre logo.jpg (sabemos que esta última generará muchos falsos positivos, pero por ahora estamos en modo paranoide total).

    Por ahora, a fin de cuentas, no vamos nada mal. En pocas horas nuestra investigación inicial ha cosechado excelentes resultados: tenemos dos URL claramente sospechosas y un equipo que está pidiendo a gritos un análisis forense.

    Dado que los logs del proxy no capturan la URL completa ni las imágenes descargadas, la investigación queda orientada de forma clara: Hay que analizar el equipo del director de marketing.

    La continuación de la investigación, en unos días…

  • Un lugar seguro donde comunicarse

    Tristes acontecimientos como los sucedidos en París tienen un gran impacto en la sociedad. Como efectos positivos, este tipo de desgracias suscitan que paremos nuestra rutina diaria para reflexionar sobre las causas y las repercusiones de estos lamentables sucesos. Se establece una ola de solidaridad global, muy intensa en los comienzos y que tendrá eco durante un periodo más prolongado.

    De la misma forma que se realizan las reflexiones individualizadas y se convierten durante días o semanas en el foco de las charlas con amigos, compañeros de trabajo o familia, también los altos mandatarios analizan, reflexionan, consultan a sus asesores y sacan sus conclusiones. Entre las responsabilidades que están asociadas a sus roles están además las de decidir aquellas medidas que permitan evitar o disminuir los efectos que provocan dichos incidentes. Para eso han sido elegidos y esa una de las principales obligaciones de los gobernantes: proteger el país.

    [Read more…]

    SDR: La navaja suiza de las radiocomunicaciones

    Para hoy tenemos una entrada de un nuevo colaborador, Alex Casanova, administrador de Sistemas Windows, Linux y Sistemas virtualizados con VMware con más de 10 años de experiencia. Adicto a las nuevas tecnologías y las telecomunicaciones dedica gran parte de su tiempo a la investigacion de sistemas radio, OSINT y redes de comunicaciones. Actualmente está involucrado en el despliegue de una red digital de comunicaciones DMR para radioaficionados. Se le puede encontrar en su twitter @hflistener y en su blog Digimodes.

    Cada vez tenemos menos cables y más cosas que funcionan de forma inalámbrica. Las redes de comunicaciones inalámbricas están en auge; palabras como WiMAX, LTE, Wifi, TETRA, DMR son cada vez más comunes en nuestro vocabulario.

    En el mundo de la seguridad, tradicionalmente se le había prestado especial atención a las comunicaciones que operan en las bandas ISM (libres) como WiFi o Bluetooth. Pero como se apuntaba en un post anterior, las investigaciones en el mundo de la seguridad están más centradas en el mundo de Internet y sus amenazas, dejando en un pequeño rincón a las comunicaciones inalámbricas.

    [Read more…]

    Aislando las aplicaciones web

    En este post me gustaría explicar la solución que he encontrado a uno de los problemas que me plantea el hecho de utilizar de Apache como servidor web por defecto, ya es que Apache no permite la ejecución de distintos VirtualHost con diferentes usuarios, lo cual puede suponer un grave problema de seguridad. Imaginemos que tenemos la siguiente situación en el mismo servidor:

    • Los Wookies tienen desplegada una aplicación cuyo funcionamiento consiste en incluir el contenido de un fichero del sistema especificado en un campo GET y mostrarlo al usuario. Por la sencillez de la aplicación y la no-criticidad de la misma, no se realiza ningún tipo de comprobación.
    • En el mismo servidor, Darth Vader tiene desplegada una aplicación que consulta de una base de datos, planos de infraestructuras críticas, como por ejemplo, el de la Estrella de la Muerte. Para ocultar el fallo de diseño de la misma, la aplicación se audita varias veces por un organismo externo sin encontrar ni un fallo de seguridad.
    • La fuerza Rebelde aprovecha el LFI de la web de los Wookies, y lee ficheros de sistema, entre los que se encuentra la configuración de la página web de Darth Vader.
    • Utilizando las credenciales obtenidas del fichero de configuración, son capaces de conectarse a la base de datos y obtener los planos de la Estrella de la Muerte, provocando la explosión que pudimos ver en Star Wars I (N.d.A.: no, no me he equivocado) – Una nueva esperanza.

    [Read more…]

    Cómo conocí a CARMEN, PILAR, CLARA…

    Estimados lectores, no se lleven a engaño por el título del post; no tengo tanto éxito con las mujeres como éste puede sugerir (ya me gustaría a mí). Tampoco guarda relación alguna con Ted Mosby y Cía. Ni que decir tiene que tampoco es una sinopsis de los Ángeles de Charlie. Aprovechando el comienzo de año, las buenas intenciones y que hace casi un año que no me dejaba caer por estos lares, he decidido escribir un post que pretende arrojar un poco de luz respecto a todos estos nombres de mujeres que están resonando de un modo u otro en el ámbito de la ciberseguridad.

    Seguro que ustedes ya conocen a PILAR, un clásico del análisis de riesgos. Pues bien, este tipo de denominación se está siguiendo para otras iniciativas/proyectos/aplicaciones de ciberseguridad que se están promoviendo desde el Centro Criptológico Nacional (CCN). Que aunque no dejan de ser acrónimos, sí que es verdad que consiguen captar nuestra atención. A continuación les haré un breve resumen para explicarles de que tratan estas iniciativas, para que cuando oigan hablar de ellas sepan por dónde van los tiros.

    CARMEN (Centro de Análisis de Registros y Minería de Datos): La iniciativa CARMEN surge en 2012 con el objetivo de proporcionar una solución para la detección temprana de uno de los tipos de ataques más peligrosos y sofisticados en el ámbito de la ciberseguridad: las amenazas persistentes avanzadas, o APTs (Advanced Persistent Threat), que es como las llama todo el mundo. En estrecha colaboración con S2 Grupo, a finales de 2014 fue presentada la versión 3.0 de CARMEN, herramienta que se perfila como unas de las grandes apuestas del CCN. Carmen consiste en una herramienta para la detección de APTs mediante el análisis en tiempo real de logs y procesos de minería de Datos.

    PILAR (Procedimiento Informático lógico de Análisis de Riesgos): PILAR es probablemente la más conocida de las herramientas de seguridad y también la precursora de esta tendencia de usar tan femeninos nombres. Es una herramienta de análisis y gestión de riesgos que implementa la metodología MAGERIT, tiene un amplio calado en la administración pública Española y reconocido prestigio internacional. Por supuesto, proporciona un total cumplimiento a los requisitos establecidos por el ENS en cuanto a análisis y gestión de riesgos.

    LUCIA (Listado Unificado de Coordinación de Incidentes y Amenazas): Lucia es un proyecto que surge en 2014 y supone la apuesta del CCN para la implantación de un sistema de gestión de incidentes común para las administraciones públicas, que persigue dar cumplimiento a los requisitos del ENS en cuanto a gestión de incidentes y mejorar la coordinación entre los distintos organismos y el CCN-CERT. Lucia es una gran iniciativa para establecer un lenguaje y unos mecanismos de gestión de incidentes comunes, con todas las ventajas que esto supone.

    INES (Informe Nacional del Estado de Seguridad) [PDF]: El proyecto INES data de 2014 y da cumplimiento al artículo 35 del ENS, proporcionando una plataforma para recoger y gestionar la información sobre el estado de seguridad de las distintas Administraciones públicas. Así pues, INES en la práctica es una plataforma telemática puesta a disposición de los Responsables de Seguridad de las Administraciones Públicas, que proporciona un sistema sencillo para evaluar el nivel de adopción del ENS y el nivel existente de seguridad de la información. Esta plataforma permitirá un seguimiento generalizado del grado de implantación del ENS y tener una visión global siempre ayuda.

    CLARA: He de pedir disculpas porque no he podido averiguar que significa este acrónimo. CLARA es la más reciente de todas estas iniciativas y fue publicada el pasado diciembre. En su descripción dice ser una herramienta para el cumplimiento del ENS. Aunque me imaginaba una aplicación para cumplir con los requisitos documentales del ENS, ha resultado tener un propósito muy distinto: CLARA permite verificar la aplicación de las plantillas de seguridad de las guías 850A, 850B, 851A y 851B en nuestros sistemas de información. Estas guías se centran básicamente en dar cumplimiento desde un punto de vista técnico a los requisitos del ENS en entornos Windows 7 y Windows server 2008 R2.

    Espero que esta información les haya sido útil y haya dado a conocer estas iniciativas entre aquellos que no las conocían. Me gustaría cerrar este post destacando la gran labor del CCN en el ámbito de la ciberseguridad, así como la de otros organismos públicos que velan por la seguridad de la información, como son la Agencia Española de Protección de Datos o el Instituto Nacional de Ciberseguridad (INCIBE).

    Destripando documentos ofimáticos con OfficeMalScanner

    Una de las principales vías de infección de malware es a través de documentos ofimáticos. Son un vector de infección muy contundente, sobre todo en ataques dirigidos y campañas de phising.

    Estos documentos son manipulados con el fin de esconder en su interior macros, objetos OLE, ejecutables, etc., los cuales, una vez abierto el documento por el usuario, realizan una serie de acciones maliciosas con el objetivo de obtener información con la que poder lucrarse o simplemente provocar daños en el sistema. Generalmente, las acciones llevadas a cabo por este tipo de malware genérico son descargar otro malware desde internet (droppers), explotar vulnerabilidades del sistema, replicarse para asegurarse la persistencia en el equipo, exfiltrar información del usuario, etc.

    Una herramienta muy útil para analizar y detectar patrones anómalos en los documentos ofimáticos es la suite “OfficeMalScanner”, la cual podéis descargar desde la web de su autor, http://www.reconstructer.org/.

    [Read more…]