Virtualización: una breve introducción.

Hace ya algún tiempo que nos encontramos en un tremendo boom de la virtualización de sistemas informáticos. Gran cantidad de empresas están migrando sus sistemas a entornos virtualizados seducidos por las grandes ventajas que aportan estos sistemas encuanto a comodidad y eficiencia.

La virtualización consiste en una capa software que corre en un sistema operativo anfitrión, y que proporciona una capa de abstracción con el hardware y con el sistema operativo que hay por debajo de dicho software. Dicha abstracción es realizada de tal manera que resulte transparente al software que se ejecuta por encima de ella, es decir, cuando instalemos un sistema operativo sobre dicha capa de abstracción, esté verá el mismo tipo de procesador, espacio de direcciones y demás características hardware que vería en una máquina física, permitiendo la ejecución sin necesidad de modificaciones del software.

Dado que multiples instancias pueden ser lanzadas, la capa de abstracción es la encargada de asignar los recursos a cada una de ellas (tiempo de CPU, memoria RAM, espacio en disco, etc), permitiendo un control centralizado de las mismas desde la máquina anfitrión. Otra de las principales ventajas que aporta esta nueva vertiente es la independencias del hardware y del sistema operativo anfitrión ya que, en caso de un fallo hardware del equipo, es posible trasladar la máquina virtual a una nueva máquina física, aunque el hardware y el sistema operativo instalado en dicha máquina sean completamente diferentes a los de la máquina original, simplemente con que dicha arquitectura sea soportada por el fabricante del sofware de virtualización.

Como podéis imaginar, la aplicación de las arquitecturas virtualizadas en los planes de contingencia de los sistemas de información es inmediata, ya que en caso de desastre, simplemente con tener hardware disponible (sin necesidad de que sea igual al original) y una copia de las máquinas virtuales es posible restaurar el funcionamiento en muy poco tiempo. Sin embargo, como suele pasar en la mayoría de los casos, ninguna solución es la panacea, sino que aporta unas ventajas y unas desventajas que hay que valorar.

Concretamente, el uso de entornos virtualizados tiene algunas implicaciones de seguridad que hay que tener muy en cuenta a la hora de diseñar este tipo de entornos, con el fin de poder controlar sus riesgos de seguridad intrínsecos y reducir dicho riesgo a un nivel residual asumible por la organización.

Pero eso será otro artículo.

Bichos et al. (y IV): Recomendaciones

Como ya comentamos en nuestro anterior artículo, vamos a finalizar esta serie de artículos aportando una serie de recomendaciones que pueden ayudarnos a reducir el riesgo de infección por un troyano/virus no documentado y, por lo tanto, no detectable por los sistemas antivirus (en su momento, ya introdujimos otras recomendaciones de carácter más general).

1) No ejecutar nada que “nos pasen”. La manera más fácil de conseguir infectar un equipo es pasarle un “.exe” a un usuario y pedir que lo ejecute. Se puede hacer con más o menos florituras pero el efecto final es el mismo. Pongámoselo difícil a los intrusos, concienciemos a los usuarios (y a muchos técnicos) para que no ejecuten absolutamente nada que no se les proporcione por medios confiables. Si “obligamos” al desarrollador de este tipo de troyanos a integrarlo con la explotación de algún tipo de vulnerabilidad para su propagación, aumentamos enormemente la posibilidad de que nuestros sistemas de detección reconozcan la explotación de dicha vulnerabilidad. Pero para ello es necesario que no puedan conseguir que lo ejecute nadie.

2) Mantener actualizado el sistema, el antivirus y las aplicaciones de acceso a Internet. Si mantenemos actualizados nuestros sistemas es más difícil que se disponga de alguna “puerta de entrada” a él. Es cierto que existen los 0-day exploits (ya hablamos brevemente de ellos), pero ya estamos poniendo un impedimento más; estamos obligando a que exploten una vulnerabilidad no documentada y a que lo hagan sin alertar a nuestros sistemas de detección de intrusos o antivirus.

3) Realizar auditorías de seguridad periódicas. Tampoco servirá de nada tener todo perfectamente actualizado y a usuarios y técnicos perfectamente concienciados si resulta que tenemos el disco duro completamente compartido y que cualquiera puede irse tranquilamente al directorio correspondiente y dejar el troyano para que se arranque en el siguiente inicio de sesión. Existen herramientas como el Microsoft Baseline Analyzer, capaces de realizar auditorías de seguridad de todos los sistemas conectados a un Dominio Microsoft. En el caso de sistemas No-Microsoft existen otro tipo de herramientas.

4) Correos en texto plano. Intentar evitar los correos en formato HTML, ya que en la inmensa mayoría de los casos no es necesario e introduce grandes riesgos de infección. Evitar también mandar y recibir anexos, porque aunque la fuente sea fiable, no sabemos quien puede haber sido el generador original del anexo.

5) Utilizar la firma digital. La suplantación de la personalidad en el envio de correos electrónicos es una práctica completamente trivial, por lo que resulta muy fácil emplear técnicas de Ingeniería Social para engañar a un usuario y hacerle creer que el correo se lo manda el departamento de informática (por ejemplo) solicitándole que instale la aplicación anexa (el departamento de informática es una fuente confiable, ¿o no?).

6) Configurar el navegador. Es preferible que el navegador, por defecto, limite todas las características peligrosas que pueda tener una web (javascript y similares) y que, por contra, si encuentra que por culpa de ello se visualiza incorrectamente alguna web, se configure dicha web en un nivel más confiable que permita visualizarla de forma correcta. Esto disminuirá la probablidad de vernos infectados al llegar casualmente (o siendo engañados) a alguna web que utilice alguna de estas características peligrosas para infectarnos.

Probablemente podrían aplicarse muchas más normas, pero simplemente siguiendo las aquí mostradas incrementamos en gran medida la dificultad de que este tipo de riesgos pueda verse materializado en nuestros sistemas.

Recordemos que la seguridad no es producto, sino un proceso. Lo que es seguro hoy no tiene porque serlo mañana. No podemos incrementar sustancialmente nuestro nivel de seguridad mediante el uso de una única herramienta, por muy sofisticada que ésta parezca. La seguridad sólo consigue incrementarse mediante una simbiosis equilibrada de las herramientas, infraestructuras, procedimientos y, sobre todo, del factor humano, probablemente el más importante de todos.

Bichos et al. (III): PoC de Malware Indetectable

Hace ya algunos meses del primer y segundo artículo de “Bichos et al” en los que comentábamos la posibilidad de desarrollar sin demasiadas complicaciones software malicioso indetectable por los sistemas antivirus. Durante este tiempo, he intentado dedicar tiempo a realizar una pequeña prueba de concepto y a realizar diversas pruebas con diferentes sistemas antivirus para demostrar que es posible burlarlos siguiendo las pautas que se mencionaron en el apartado anterior.

Sin embargo, no llegué a terminar dicha prueba de concepto, puesto que en el proceso de documentación descubrí el troyano RaDa, desarrollado por Raúl Siles, David Pérez y Jorge Ortiz, que demuestra exactamente lo mismo que se pretendía en este artículo, y siguiendo una filosofía muy cercana a la aquí planteada.

Dicho troyano camufla su tráfico encapsulando a través del protocolo HTTP o HTTPS, haciéndolo por tanto indistinguible para cualquiera (incluyendo un sistema de detección de intrusiones) de un acceso web legítimo. Dicho trabajo fue publicado como reto como parte del Honeynet Project y, tal y como mencionaron sus autores en el documento de solución de dicho reto [PDF], hasta el momento de ser publicado en la web ningún sistema antivirus había sido capaz de detectarlo, con lo que vemos un claro ejemplo de la limitación de la detección basada en firmas: software malicioso nuevo, del que no existen firmas.

Imaginemos que en lugar de publicar el código para ser analizado, los autores lo hubieran utilizado para infectar determinados equipos que resultaran de su interés. El resultado hubiera sido que los sistemas infectados, a pesar de tener un sistema antivirus perfectamente configurado y actualizado, no hubieran sido capaces de detectar la infección, quedando todos los datos a disposición del atacante.

Como parte del reto del Honeynet Proyect se instaba a los participantes a desarrollar una firma para la detección de este troyano por medio del tráfico que genera. Evidentemente, por tratarse este desarrollo de una prueba de concepto, los desarrolladores tampoco pusieron especial enfasis en ocultar la comunicación más allá que utilizando el protocolo HTTP (y sin ponerle ese énfasis que sin duda un atacante malicioso habría puesto, consiguieron su objetivo, demostrando la ineficacia de los sistemas antivirus), y los comandos intercambiados se transmitían en texto plano. En caso de que un administrador detectara alguna anomalía y visitara la web, vería claramente que no se trata de una web corriente. Pero, si en lugar de emplear este sistema —más que suficiente para lograr el objetivo que se perseguía— la comunicación hubiera sido cifrada, ocultada dentro de algún nombre de imagen o de algún parámetro “ALT” dentro del tag HTML “img”, o se hubiera empleado algún método alternativo para esconder el propósito malicioso de la web, el resultado hubiera sido completamente diferente. Finalmente, los autores también hacen referencia a la posibilidad de utilizar otro tipo de protocolos para la ocultación de este tipo de tráfico como puedan ser el tráfico ICMP, el correo, DNS, etc.; les recomiendo fervientemente la lectura del citado artículo.

Para acabar, ¿quiere decir esto que no podemos hacer nada para evitar ser infectados? Pues ni sí, ni no. S? podemos, pero NO confiando únicamente en los antivirus. Éstos no son sino otra herramienta más que nos ayuda a mejorar nuestro nivel de seguridad, que puede resultar eficaz para la detección y eliminación de virus de difusión amplia —que representan a fin de cuentas la inmensa mayoría de los que nos vamos a encontrar—, pero en la que no podemos delegar toda nuestra seguridad.

El lunes, en la próxima y última entrega de esta serie veremos varios consejos que pueden ayudarnos a reducir los riesgos de esta naturaleza. Como siempre, pasen un buen fin de semana.

El cazador cazado

Cada vez más, tanto los particulares como las empresas realizan uso de las tecnologías inalámbricas en su infraestructura técnica. La posibilidad de tener conectividad entre dispositivos sin necesidad de cables permite un alto nivel de movilidad que resulta muy útil en determinadas circustancias.

No obstante, las tecnologías inalámbricas presentan algunos riesgos inherentes a su medio físico de transmisión, es decir, el aire, lo cual incorpora un factor de riesgo tanto en cuanto a eficiencia como a seguridad.

Evidentemente no podemos certificar “el aire” de nuestra oficina como lo hariamos con un cable de red para verificar la calidad de la conexión, pero este es un tema de eficiencia que quizá sea más conveniente tratar en otro artículo. Por el momento en este artículo nos vamos a referir al otro aspecto destacable de este tipo de redes, que es la seguridad.

Históricamente la tecnología Wifi (802.11) ha adolecido de diversos problemas de seguridad que han permitido a los intrusos entrar en nuestras redes inalámbricas, bien sea en nuestra red doméstica para obtener un acceso gratuito a Internet, bien sea a la red de nuestra empresa para obtener información sensible, y evadiendo de esta manera las restricciones de nuestro cortafuegos.

Una de las vulnerabilidades existentes en la tecnología Wifi es la posibilidad de suplantar puntos de acceso. Según el protocolo, varios puntos de accesos que presenten en mismo SSID corresponden a una misma red, por lo que cada dispositivo inalámbrico escoge de entre todos los puntos de acceso sobre los que tiene visibilidad el recibe con mayor potencia, lo cual a priori le permitirá disfrutar de una mejor calidad de señal.

Pero, ¿qué pasa si un intruso configura un punto de acceso falso con nuestro mismo SSID? Esto puede verse en el diagrama siguiente:

Efectivamente, si el intruso consigue que su señal llegue al destinatario del ataque con más potencia que alguno de los puntos de acceso reales, el equipo cambiará de punto de acceso (o se conectará al falso directamente sin pasar por el verdadero) y pasará a utilizar el falso, permitiendo de esta manera al intruso realizar todo tipo de ataques de Sniffing, Man-In-The-Middle y una gran variedad de otros ataques.

Una de las cosas que puede hacer es un ataque de DNS Spoofing (o suplantación de DNS), como se muestra en el diagrama adjunto.
[Read more…]

Saludos, Profesor Falken

«Saludos Profesor Falken, ¿le apetece una partidita de ajedrez?»

Muchos de los lectores de este blog recordarán esta mítica frase de la película Juegos de Guerra, película de culto para todos los apasionados de las nuevas tecnologías. Fue en esta película, siendo apenas un niño, en la que oí por primera vez el término PUERTA TRASERA, cuando los dos programadores amigos del protagonista le desvelan que suelen ocultar en el código puertas traseras para poder acceder a los sistemas posteriormente a su entrega.

Evidentemente, la posibilidad de que software que controla infraestructuras tan críticas como el lanzamiento de misiles pueda contener puertas traseras es aterradora, y más aún si el acceso está protegido por una contraseña como “Joshua” (¿y por qué no “patata”? Falken, te lo has currado…). Lamentablemente el riesgo existe, ya que los programadores siguen teniendo la costumbre de dejarse algún tipo de acceso oculto que queda fuera del control de los administradores de sistema que les permita entrar en caso de necesidad.

juegosdeguerra.jpgAunque esté lejos de controlar un lanzamiento de misiles (espero), esta reflexión viene al hilo de una serie de acusaciones realizadas desde ciertos entornos que indican que Microsoft podría tener algún tipo de puerta trasera oculta en el código del Windows Update.

¿Y si fuera cierto? Evidentemente sería un problema muy serio de seguridad, porque querría decir que cualquier empleado de Microsoft (o servicio de inteligencia, o hacker particular que haya descubierto la puerta oculta como sucede en Juegos de Guerra) podría acceder en cualquier momento a los equipos de un gran número de personas y robar información, contraseñas, accesos a otros sistemas no-Microsoft y en definitiva vulnerar completamente la seguridad de un particular, organización o incluso de un país.

¿Es posible detectar estos usos? Lamentablemente es una tarea bastante complicada, sobretodo tratándose de Software propietario, ya que no permite que podemos auditar el código para saber que hace exactamente. A nivel de red también es complicado detectar este tráfico, ya que puede estar oculto en tráfico habitual en el funcionamiento del sistema operativo, resultando difícilmente reconocible (Un “ALT” de un tag “IMG” que cambie al visitar la web de Windows Update para realizar las actualizaciones puede contener instrucciones codificadas, o pueden existir instrucciones codificadas en el propio paquete de actualización). De hecho incluso auditando el código puede ser difícil de detectar, puesto que la puerta trasera puede estar basada en vulnerabilidades dejadas en el código a propósito para poder ser explotadas a posteriori y entrar así en los sistemas.

Otra opción es recurrir a los controles de índole legal, pero eso no va a proteger realmente nuestra información, y menos aún si la fuga de información ha sido producida debido a un “lamentable error” en forma de vulnerabilidad en el desarrollo del software.

Visto lo visto, parece que los usuarios de software propietario tendrán que adoptar una política de “confianza” con su proveedor de software, al igual que lo hacemos muchos de nosotros diariamente con nuestro mecánico, fontanero, etc, y al igual que con ellos, confiar en su profesionalidad y en su buena fe.

¿Más alternativas?
Yo, LINUX. ¿Y ustedes?

[Actualización a posteriori: Kritópolis reporta esta noticia que procede de Cryptome, que es cuanto menos sospechosa. Pero, ¿dónde acaban las sospechas y comienzan la paranoia y las teorías conspiratorias?]

Bichos et al. (II): ¿Malware indetectable?

(Después de algún tiempo de ausencia, y aprovechando que está de vacaciones, José Selvi nos trae la segunda parte de “Bichos et al” que tuvo su primera parte en una fecha tan lejana como el 13 de junio.)

En la anterior entrega de esta serie de artículos relacionados con el software malicioso hablabamos de las dificultades que tenían los sistemas antivirus para detectar software malicioso desconocido, es decir, aquel sobre el cual no han podido trabajar y por tanto extraer las firmas adecuadas para su detección. Para solventar estas deficiencias, comentábamos que los desarrolladores de sistemas antivirus dotaban a sus producto de capacidades heurísticas de detección, con el fin de identificar virus desconocidos a partir de partes de su código o de su comportamiento.

Etimológicamente, la palabra “Heurística” es derivada de la palabra Eureka (¡Lo encontré!), por lo que la palabra Heurística significa, ni más ni menos, encontrar una solución a algo. Con un significado tan amplio como este, como se pueden imaginar, es lógico pensar que cada fabricante de sistemas antivirus puede haber optado por soluciones muy diferentes a la hora de implementar sus sistema heurístico, de ahí los diferentes resultados que muestran cada uno de ellos a la hora de realizar pruebas sobre dicho sistema.

bichos2.jpgEn general, podemos aproximar la problemática de detección heurística de software malicioso a un sistema de reconocimiento automático de patrones, similar al empleado por los sistemas antispam. De esta manera, dado un elemento a analizar, se extraerían N características a considerar, con sus valores correspondientes, definiendo por tanto para este elemento un punto en un espacio N-dimensional de elementos analizados. Si la heurística seleccionada fuera lo suficientemente adecuada, observariamos agrupaciones de elementos en este espacio, tal y como se puede apreciar en la gráfica.

Por lo tanto, una heurística que nos ofreciera un resultado como el aquí mostrado, nos permitiría una detección heurística de software malicioso de una alta efectividad. La efectividad viene determinada, por tanto, por la adecuidad o no de las características seleccionadas y los pesos otorgadas a cada una de ellas, siendo fundamentalmente éste el punto diferencial en las diferentes opciones de implementación de los métodos heurísticos.

¿Es sencilla la selección de características? La respuesta es no, y de hecho en la mayoría de los casos, la gráfica muestra un solapamiento importante entre muestras de software malicioso y muestras de software legítimo, lo que dificulta su detección.

Como contramedida a esta deficiencia, algunos fabricantes ofrecen información al usuario para que sea él mismo quien valore la categorización que darle a un software que se encuentre en una zona de incertidumbre heurística, pero no suele resultar muy efectivo, dado que los usuarios tienden a aceptar sistemáticamente, sin apenas leer la información que se les proporciona, todos los mensajes que se les muestran por pantalla, y aunque decidieran leerlos, la gran mayoría de ellos no dispondrían de los conocimientos técnicos necesarios para valorar el tratamiento que se le debe dar al software.

Ahora, tras toda esta introducción teórica sobre reconocimiento de patrones, tomemos un ejemplo: ¿Qué efectividad tendría un sistema antispam para discriminar el correo electrónico no deseado de un directivo de una empresa de productos farmaceuticos que comercializa fármacos que potencian el apetito sexual (sin citar una marca concreta)? ¿Serían realmente lo suficientemente diferentes los correos legítimos de cierto tipo de correos no deseados como para que estos fueran distinguidos de forma automática?

Ahora traslademos esto a la detección de software malicioso: ¿Qué efectividad tendrá un sistema antivirus para detectar un software malicioso no documentado y que está especialmente diseñado para camuflarse como software legítimo? ¿Sería posible diseñar un software malicioso que resultase indetectable de forma automática?.

Para la última de las entregas de esta serie de artículos se planteará un escenario de ataque en el cual podría utilizarse una prueba de concepto de software maliciso especialmente diseñado para no ser detectado por los sistemas antivirus. Mediante el uso de esta prueba de concepto descubriremos que tal responden diversos productos antivirus a un ataque dirigido como el que aquí se plantea. Mientras tanto, que nadie desinstale todavía sus antivirus, esperen a ver la conclusión final…

Bichos et al. (I): Introducción

Virus, Troyanos, Spyware, Gusanos,… o como se les conoce generalmente: Malware o “bichos”, usando un término más coloquial. Todos los usuarios de sistemas informáticos, por suerte o por desgracia, conocemos la existencia de estos tipos de software y prácticamente la totalidad de nosotros hemos sufrido alguna vez una infección, con la pantalla de nuestro viejo 486 llena de “barrotes” o nuestro escritorio lleno de enlaces a página web con contenido para adultos.

Tal y como sucede con los virus biológicos, los virus (o malware en general) han ido mutando, cambiando, adaptándose a los tiempos y a su entorno, buscando nuevas formas de propagarse desde los sectores de arranque de los antiguos diskettes a la explotación de vulnerabilidades de servicios de red de los sistemas operativos de usuario más modernos. Hoy en día todo se mueve mucho más rápido, sobretodo en el mundo de las nuevas tecnologías, y eso incluye evidentemente al malware. En los años 70, cuando la interconexión de sistemas informáticos era practicamente inexistente, la velocidad de propagación del malware era la que tardaba un diskette infectado en pasar de unas manos a otras. En la actualidad, la red de redes nos ofrece grandes posibilidades de acceso a la información en unos pocos segundos, pero también abre la puerta a la posibilidad de rápidas infecciones y propagaciones.

VirusDurante todo este tiempo los virus han cambiado, y han pasado de propagarse junto a otro software a hacerlo a través de la red, explotando vulnerabilidades. El paso del tiempo también nos ha dejado un gran aumento de la creación de malware, debido fundamentalmente a la aparición de los virus de macro y similares, que facilitan enormemente la creación de virus por parte de personas con unos conocimientos muy limitados (existen incluso asistentes que permiten crear tu propio virus en pocos minutos), al contrario de lo que sucedía en los inicios del viring, en la que los escritores de virus eran personas con conocimientos mucho más profundos.

Para contrarrestar los riesgos introducidos en el mundo de la informática por el malware, surgieron los Software Antivirus, que mantienen desde hace años una dura pugna con los programadores de virus, los cuales han respondido cambiando las técnicas y aumentando la complejidad del código con el fin de evitar la detección de los sistemas antivirus, hasta el punto que cerca del 90% del código fuente de un virus puede estar destinado a evitar su detección.

Aún así, los sistemas antivirus no son por si mismos un sistema infalible, ya que fundamentalmente utilizan un sistema de firmas que identifican a cada uno de los virus conocidos. Ello implica que independientemente de la complejidad que suponga obtener una firma válida que sirva para detectar un virus concreto, un antivirus que emplee este método de detección no podrá nunca detectar un virus del que no exista firma explícita, es decir, que no haya sido reportado. Para mitigar esta deficiencia, los sistemas antivirus implementan sistemas heurísticos que intentan reconocer, en la medida de lo posible, comportamientos propios de malware en el software, a pesar de que no se haya detectado mediante firmas.

Esta segunda aproximación basada en métodos heurísticos es la que en principio ofrecería una mejor detección, ya que nos permitiría detectar malware conocido y desconocido, únicamente teniendo en cuenta su comportamiento, siguiendo de esta manera una de las principales directrices de la seguridad de sistemas informáticos: “Rechazar si no está expresamente permitido” (o alertar si no es claramente un comportamiento habitual, en este caso). No obstante, la detección de malware mediante métodos heurísticos está poco desarrollada en la actualidad debido a su alta complejidad, y prueba de ello es que pocos software antivirus detectan los nuevos virus por si solos, sin necesidad de una actualización de sus firmas.

Por todo ello, como hemos mencionado anteriormente, un software antivirus puede no ser capaz, por si solo, de ofrecer una protección completa para nuestros sistemas. No olvidemos que éste, al igual que cualquier software, es una herramienta, cuyo rendimiento y eficiencia dependerá del buen uso que hagamos de ella. Aprende a manejar tus herramientas de detección, fórmate, aprende a usar de forma segura tu sistema, tu correo electrónico, y con simplemente unos pocos conocimientos y siguiendo unas sencillas reglas puedes convertirte en el mejor antivirus que puedas encontrar.

(Continuará…)