Criptovirología

Es el año 1989. Una empresa farmacéutica recibe un paquete por correo con un disquete que dice contener información importante sobre el SIDA. Un empleado se decide a introducirlo en un equipo, pero enseguida percibe que algo no va bien: no puede acceder a ningún dato en el disco duro. Se trata de algo bastante más grave de lo que pueden imaginar. El programa que llegó en aquel disquete ha cifrado el nombre de los archivos del ordenador y ahora muestra un texto reclamando el cobro de una importante suma de dinero a cambio de enviar la clave para recuperar los datos. Y no es la única empresa afectada.

Ya hoy, sabemos que todas estas compañías farmacéuticas sufrieron el que fue el primer ataque por criptovirología de la historia, mediante el troyano AIDS [inglés]. Y al contrario de lo que suele suceder con este tipo de ideas, esta modalidad permanecería en el olvido hasta unos siete años más tarde, cuando Moti Yung y Alan Young desarrollaron en el laboratorio una prueba de concepto que utilizaba criptografía asimétrica para cifrar todos los datos de la víctima.

Las ideas aportadas por estas investigaciones sirvieron de base al desarrollo del llamado Ransomware: virus que cifran el contenido del disco para luego reclamar un rescate a cambio de la clave, y cuya explosión comenzó en 2005 con Pgcode.

Un año más tarde, en 2006, aparecería el troyano CryZip, o Zippo, que comprimía algunos tipos de documentos en archivos Zip cifrados siguiendo un esquema simétrico. Sin embargo esta técnica no es demasiado sofisticada y los expertos no tuvieron problemas para romper la clave (de hecho, hay bastantes aplicaciones por Internet que permiten obtener la contraseña de archivos comprimidos).

A fecha de hoy todavía no han aparecido criptovirus suficientemente elaborados como para suponer un problema serio, y de hecho la mayoría pueden considerarse simples pruebas de concepto o experimentos. Sin embargo, es muy probable que todas estas técnicas se vayan perfeccionando con los años, por lo que es de suponer que la fiesta acaba de empezar… De todos modos, la forma más sencilla de estar protegido frente a este tipo de ataques es la de siempre: utilizar un sistema operativo seguro (ejem), y realizar copias de seguridad periódicas. Eso nunca falla.

Para saber más…

El artículo original, de Alan Young y Moti Yung, es Cryptovirology: extortion-based security threats andcountermeasures. Por si a alguien le interesa su trabajo, tienen un libro titulado Malicious Cryptography: Exposing Cryptovirology, que apuesto a que anda por la mula :-P. Estos dos autores también se ocupan de mantener la web Cryptovirology, donde hay ejemplos con código fuente y muchos artículos dirigidos al mundo académico. También hay un artículo muy interesante titulado Malicious cryptography, con su primera y segunda parte.

Si encontráis más información o alguna referencia interesante no dudéis en pasar por los comentarios… :-)

Eligiendo antivirus (II)

Ayer terminamos comentando (siempre según mi opinión) el retraso del software libre y gratuito en cuando a software antivirus se refiere. Es verdad que, como se han apresurado a comentar, existen soluciones para uso personal (AVG, Antivir o Avast) que forman parte de ese grupo de programas, que sin ser libres, por lo menos son gratuitos.

Existen empresas más o menos sólidas tras estas aplicaciones, de ahí que la comunidad de desarrollo libre esté obligada que hacer un enorme esfuerzo si quiere ponerse a la altura de las compañías en la protección contra los virus. Proyectos como OpenAntivirus o ClamWin son buenas ideas, aunque por desgracia no parecen interesar excesivamente a la comunidad :( De hecho, revisando algunos enlaces llegué hasta esta sección de la Wikipedia en lengua inglesa, donde queda claro que el panorama es un tanto desolador, sobre todo si lo comparamos con esta otra… es algo deprimente.

Personalmente, y en este tema, siempre me he ido al software comercial. Quizá el motivo más importante es que los tiempos de respuesta ante nuevas amenazas de empresas como Kaspersky Lab o Symantec son muy cortos si los comparamos con otras, por lo que uno pasa poco tiempo desprotegido cuando surge un nuevo bichito… He decidido, no obstante, y a raíz de los comentarios a la entrada anterior, ponerme al día en antivirus gratuitos, así que ya les comentaré los resultados dentro de unos días (o esa es al menos mi intención, que ya me conozco…)

Antes de pasar a comentar las diferentes soluciones antivirus, me parece interesante dar antes unos parámetros que nos permitan conocer qué debe tener, al menos idealmente, un buen antivirus… así, en función de estas características, podremos valorar mejor la calidad de las distintas aplicaciones.

¿Qué debemos buscar en un antivirus?

Este escribidor opina que seis cosillas nada más:

  1. Lo primero es el rendimiento. El remedio debería ser mejor que la enfermedad, lo cual parece no estar muy claro… No tiene sentido instalar un antivirus si por su culpa no vamos a poder usar nuestro ordenador. Tiene que ser ligero, que el equipo lo ejecute sin ver demasiado afectado su rendimiento normal.
  2. En segundo lugar tiene que tener un buen compromiso entre sencillez y funcionalidad: sin opciones extrañas poco explicadas cuya incorrecta configuración deteriore inútilmente el rendimiento o deje expuesto al equipo, aunque es preciso que la configuración sea completa para que los usuarios avanzados optimicen el funcionamiento del programa.
  3. En tercer lugar, tiene que tener un monitor permanente que estudie el comportamiento del sistema en todo momento: es la única manera de aplicar una protección contundente. Por decirlo de alguna manera, tiene que estar siempre vigilante por si un programa compromete la seguridad (orweliano total, como ven). En relación con esto, es esencial que tenga mecanismos de autoprotección, para evitar ser infectado por los virus, lo cual sería altamente catastrófico y divertido a un mismo tiempo.
  4. En cuarto lugar, y dados los tiempos que corren, donde la mayoría de las infecciones llegan a través de Internet, es conveniente que el antivirus analice el correo entrante y las acciones del navegador, impidiendo la ejecución de scripts si fuera preciso. También debería proteger contra amenazas que, sin ser estrictamente virus, sí sean software dañino, como los troyanos y otros bichitos igual de simpáticos. En relación con esto último, sería óptimo que detectara spyware o aplicaciones dudosas que entorpecerán el funcionamiento del equipo y que atentan contra nuestra privacidad.
  5. Un antivirus debe estar mantenido por un equipo que libere actualizaciones periódicas y especiales para las amenazas más graves. Debe permitir renovar sus definiciones automáticamente y estar en permanente desarrollo.
  6. Y por último, lo más importante: detectar todos virus existentes, incluir técnicas heurísticas para detectar la mayoría de los que aun no se han descubierto e incluir capacidades para restaurar, aislar o eliminar los componentes infectados. Parece obvio pero no debe de serlo…

Tal vez no están todas las que son, pero creo que son todas las que están. ¿Me he dejado algo? Basándonos en estos requisitos, daremos un vistazo rápido a algunos programas concretos. Y eso será en la siguiente entrega :-)

Eligiendo antivirus (I)

La verdad es que si los virus representan un verdadero problema, el elegir antivirus no es para menos, sobre todo cuando se quiere algo bueno y barato (y bonito, por qué no). Voy a adelantar que la solución más barata a medio o largo plazo es pasarse a Linux o a Mac ;-), que raramente se ven afectados por estas simpáticas criaturas. Pero si no nos queda más remedio que usar Windows o no nos atrevemos a romper las duras cadenas de la rutina, tal vez la única solución consista en instalar un antivirus.

El mundo antivirus es uno de los pocos campos donde probablemente el software gratuito no acudirá en nuestra ayuda, ya que, hoy por hoy, la situación es bastante precaria. Hay varias causas que explican esta situación. Aunque todas parten del hecho de la tecnología antivirus precisa de un mantenimiento intensivo que sólo puede afrontar un equipo con dedicación exclusiva y altamente profesionalizado.

Muchos se preguntarán por qué sigue siendo imprescindible pagar por un buen antivirus, sobre todo con el reciente desarrollo de los sistemas libres y gratuitos. Bueno, vamos a razonar juntos… :-) Veamos: los virus afectan principalmente a Windows, y para estar protegidos necesitamos un antivirus, si es posible gratuito y de calidad. La mayoría del software gratuito de calidad es software libre. La mayoría del software libre para Windows tiene su origen en Linux. Linux no es afectado de manera significativa por los virus. Luego Linux no necesita de antivirus.

La comunidad de desarrollo de software libre utiliza mayoritariamente Linux, por lo tanto la comunidad de desarrollo no precisa de un antivirus para Windows… luego la comunidad de desarrollo no producirá un antivirus para Windows, y si lo hace, habrá tan pocos usuarios interesados en colaborar que el producto resultante no tendrá suficiente calidad.

Más aún: hay características especiales que hacen pensar que no habrá nunca grandes antivirus libres: es necesario un duro esfuerzo investigador sostenido a lo largo del tiempo: las empresas grandes como Symantec mantienen enormes equipos altamente especializados dedicados a encontrar respuesta a las nuevas amenazas: la mayoría de las organizaciones que apoyan el software libre no pueden permitirse contratar personal tan específico y exigirles una dedicación tan importante.

Quizá alguien discrepe en esto: son opiniones puras y duras… pero creo estar ajustándome a la realidad: tendremos que pagar por nuestro antivirus. There aren’t more eggs. (¿Lo he escrito bien? el inglés jamás fue mi fuerte :-P). Así que en la próxima entrega veremos, a partir de este punto, qué soluciones existen y cuál es la mejor para cada necesidad.

De momento, diviértanse con este boletín de Panda Software que me acaba de llegar al correo (se lo juro):

Estimado cliente:

Llega la máxima protección frente a virus, spyware y hackers: PANDA ANTIVIRUS + FIREWALL 2007, el nuevo Titanium.

¿POR QUÉ NECESITAS TENERLO?
* Integra la última tecnología para hacer frente al fraude online, deteniendo y bloqueando keyloggers, puertas traseras…

Y el mejor motivo de todos (dados los antecedentes…):

* Diseñado para consumir el mínimo de recursos de tu ordenador, adaptándose a las características de tu PC.

Quisiera escribir con más regularidad, pero estoy de baja bloguera por enfermedad… no, no es una infección vírica :-P sino un resfriado algo complicado. Lo justo para que a un servidor no le apetezca pasar más horas de las imprescindibles frente al ordenador… Tengo que cuidarme.

El virus Chernobyl (CIH)

storycomputervirus.jpgHace unos días veíamos algunas cosas sobre los virus y cómo funcionan, y dejábamos pendiente una explicación detallada del virus CIH, popularmente conocido como Chernobyl. Pues bien, les presento un análisis pormenorizado de esta simpática criatura: cómo funciona, cómo infecta a otros programas y cómo logra dejarnos el ordenador como salido de un accidente nuclear.

Y aclarado esto, empecemos diciendo que una parte importante de los programas es el control de errores: cuando un programa “la pifia?, el sistema retoma el control e intenta salvar los muebles. En el caso de los virus, si hay un error durante la ejecución no nos interesa para nada que el sistema se entere, por lo que vamos a modificar el manejador de las excepciones para que el SO no se entere de nada. Para los amantes del rigor, el virus modifica el SEH (Structure Exception Handle). Así, si hay un error, en principio el virus retendrá el control de la situación.

Lo siguiente es ver cómo modificar los permisos con los que el programa se ejecuta. En Windows la seguridad está configurada en forma de anillos, que delimitan determinadas zonas. El primer anillo corresponde a los procesos del SO, y las aplicaciones que se ejecutan en este anillo tienen acceso a todo el sistema. El siguiente anillo tiene menos permisos, y así sucesivamente.

Las aplicaciones de usuario se ejecutan en principio en el tercer anillo, el llamado (seguro que no lo imaginan) “Ring 3?. La idea es que nuestro virus se convierta discretamente en una aplicación “Ring 0? para poder acceder a todo el sistema.

Para hacer esto es necesario vulnerar el mecanismo de protección, pero estos mecanismos en Windows 9x no estaban demasiado pulidos, de modo que el virus se servía de determinadas vulnerabilidades para hacer este cambio de anillo. Para quienes veneran el rigor técnico sobre el bien y el mal, habrá que decir que semejante cosa se consigue modificando la IDT (Interrupt Descriptor Table, Tabla de descriptores de interrupciones) y generando después una excepción, lo que le permitirá ejecutar su código con los permisos más elevados del sistema.

Una vez “trapicheado? el sistema, el virus se coloca en la memoria como un programa cualquiera y, como ya sugerimos en la entrega anterior, espera a que se ejecute alguna aplicación. Previamente habrá devuelto el control al programa “portador? para que haga lo que tenga que hacer.

Bien, ya tenemos nuestro virus en memoria esperando para atacar. Cuándo se cargue en memoria una posible víctima intentará la infección: Lo primero será comprobar si es un ejecutable de Windows y que no haya sido infectado anteriormente ¿cómo sabe esto último? Cuando infecta un fichero escribe un valor distinto del original (cero) en el primer byte antes de la cabecera del ejecutable.

Lo siguiente es “inyectar? el código maligno en el ejecutable, sin aumentar el tamaño del mismo. Pero esto no parece sencillo… ¿cómo lo logra? Digamos que en las cabeceras de los ejecutables de Windows se almacenan diversos datos relativos a las funciones que importan o exportan, información que el programa necesita y demás. Todos estos datos se organizan en “objetos?, que tienen que estar organizados de una forma muy concreta dentro del fichero del programa. A su vez, hay que guardar dónde se encuentran estos objetos, qué tamaño ocupan… todo esto se hace con tablas, por lo que el principio del ejecutable consiste en un montón de descriptores y tablas.

Entre todas estas secciones queda un espacio que no se usa, que es el que aprovecha el virus para escribir su código sin incrementar el tamaño del programa portador. Previamente habrá comprobado que tiene el espacio suficiente para infectar el fichero, y en caso contrario no lo hará. Por desgracia, CIH es una pequeña maravilla en cuando a tamaño, ya que sólo ocupa aproximadamente un 1KB, con lo cual casi siempre encontrará huecos en los que instalarse.

Una vez insertado su código, modifica la cabecera para que la dirección de entrada al ejecutable quede apuntando a su propio código.

El payload (carga dañina)

El payload varía entre versiones, pero generalmente lo que hace es obtener el mes y el día y comprobar si es el día 26 de abril. En caso afirmativo, comienza a sobreescribir el chip de la BIOS (si es de tipo flash).

Seguro que algún lector se pregunta algo así como “¿pero la BIOS no es una memoria de sólo lectura? ¿cómo consigue escribir entonces??. La respuesta es que la BIOS es de sólo lectura en principio, pero que generalmente se puede modificar aplicando cierto voltaje*. Normalmente las placas bases impiden que se suministre este voltaje al chip, pero cuando el virus CIH se extendió, tal protección solía venir inhabilitada para facilitar las actualizaciones de la BIOS, con lo que la información quedaba expuesta.

_327903_cih_300.jpg

Cuando termine con esto, localizará los discos duros del sistema y escribirá datos aleatorios sobre los primeros 2048 sectores, dejándolos inutilizables.

El CIH se encuentra prácticamente extinguido a fecha de hoy, gracias a que los sistemas Windows 9x van cayendo en desuso en favor de los basados en Windows NT (saber más). Se trata de un virus muy bien programado, toda una muestra de la belleza que puede encontrarse en la destrucción… Su creador, el taiwanés Chen Ing Hau, (nótese que sus iniciales son las letras C.I.H.) fue detenido en el año 2000.

* Si alguien tiene curiosidad sobre cómo puede ser esto, debe saber que amenazo con dedicarle una entrada al tema en breve.

Actualización: Menear el artículo (¡gracias, Taikochu!)

¿Qué es un virus?

virusinfluenza.jpgSeguro que se ha enfrentado ya a una de estas simpáticas y fascinantes criaturas que son los virus informáticos. O si no usted, probablemente algún conocido suyo los haya sufrido. O tal vez esté infectado y ni siquiera lo sospeche… (sienta cómo la paranoia se apodera de su mente)

El origen de los virus hay que buscarlo a mediados de los 80, cuando unos técnicos de los laboratorios Bell inventaron un juego denominado “Code Wars?, consistente en crear programas que combatían entre ellos por conseguir el control de la memoria del equipo. Hay mucho que decir sobre los virus, y mucho que discutir sobre el tema, pero de esta entrada me interesa que comprendan cómo funcionan y cómo son diseñados. Y es que conociendo bien a nuestro enemigo tendremos más probabilidades de saber defendernos.

Para empezar, hay que acotar un poco la terminología, ya que el término “virus? se utiliza a menudo para referir realidades muy diferentes. No todos los programas dañinos son virus estrictamente, y no todos los virus son dañinos directamente.

Hay que entender un par de ideas antes de entrar en consideraciones más complejas: la primera es que un virus no es más que un programa. Un tanto especial, sí, pero un programa a fin de cuentas. La segunda idea es que los virus informáticos no se parecen tanto a los biológicos: un virus biológico utiliza el material celular para autorreplicarse, mientras que un virus informático modifica los programas que “infecta? incluyendo una copia de sí mismo.

De modo que llegamos a algo que puede parecerse a una definición: un virus es un programa informático que es capaz de modificar a otros programas inyectándolos cierto código que altere su comportamiento.

¿Cómo nos infectan los virus?

Vamos a referirnos en este punto a los virus residentes tradicionales. Los últimos virus aprovechan generalmente fallos en el MS Outlook o en el MS Internet Explorer para infectar los computadores y extenderse por Internet, pero los más bonitos e interesantes son los antiguos.

En principio sólo hay un programa con el código puro del virus: este programa padre irá infectando a los demás, que actuarán a su vez como nuevos padres e irán propagando la infección. Lo que ocurre cuando se ejecuta un programa infectado en el ordenador es más o menos así:

  1. Al ejecutarse, el virus se carga en memoria y se empiezan a leer las instrucciones malignas.
  2. Estas instrucciones modifican ciertos parámetros del sistema operativo para poder hacerse con el control cuando se ejecuten otros programas.
  3. Espera a que otros programas se ejecuten. Cuando los programas se ejecutan, su contenido es transferido a la memoria principal, donde se encuentra el virus, momento que puede utilizar para infectarlos.
  4. Cuando se ejecute un programa, el virus obtendrá el control por un instante. Entonces copiará la parte de código infeccioso en el programa víctima, de manera que siempre se ejecute antes que el programa original. Una vez modificado el nuevo portador, dejará que se ejecute normalmente, y en principio el usuario no percibirá ningún cambio.

A partir de esta idea, podemos refinar el virus cuanto queramos: podemos hacer que compruebe si el programa que va a infectar es un antivirus y que intente cerrarlo en caso afirmativo, o que se envíe a si mismo por email para replicarse más rápido.

Algunos virus, los denominados polimórficos, “mutan?, modificando su código para evitar ser detectados, otros se instalan en el arranque del equipo… Unos buscan en el disco a otros programas y los modifican, aunque no se ejecuten, otros infectan directamente a quienes comparten la memoria con ellos… Hay tanta diversidad como informáticos retorcidos.

Básicamente un virus tiene que tratar de infectar cierta cantidad de programas: si infecta muchos el ordenador se volverá más pesado y el usuario podría darse cuenta. Si infecta pocos, apenas se extenderá. También tiene que intentar pasar desapercibido: utilizar polimorfismo, variar poco el tamaño del programa que infecte, vigilar la presencia de antivirus o de otros virus…

Algunos virus incluyen lo que se llama “payload?, que es como la carga dañina de los misiles: supone la temida manifestación del virus, y es cuando podemos agarrarnos a la silla y temblar de miedo. En algunos casos, la temida carga se reduce a un mensaje gracioso o político. En otros, puede dar lugar al borrado de ficheros o el colapso de la red.

Un ejemplo tristemente famoso

El virus CIH, también conocido como Chernobyl (ya que se se activa el día 26 de Abril) es un ejemplo del daño terrible que pueden causar estas pequeñas bestias. Este virus sólo es capaz de actuar bajo Windows 9x, infecta cualquier archivo .EXE al que tenga acceso y tiene uno de los “payload? más destructivos: sobreescribe las instrucciones del chip de las BIOS de tipo flash dejando el arranque inutilizado y borra el contenidos de los discos duros.

Más adelante hablaremos largo y tendido sobre esta criatura del señor.