Una mente inmortal

Esta temporada, desde el magnífico programa Redes (La 2, los martes a la 1:30) nos proponían, por medio de su sección titulada «La cuestión», que imagináramos cómo serán los ritos funerarios en el futuro, en el contexto de una cultura regida por la ciencia.

neural0.jpg

Hace unos días leía en el foro de Smart Planet la respuesta ganadora, enviada por Luis Congil, y que viene a proponer algo, que aún siendo ciencia-ficción me parece perfectamente posible, y de hecho, creo que lo será salvo que nos matemos unos a otros (eso me parece más probable, por desgracia…)

Luis Congil imaginó un futuro donde toda la información del cerebro podía ser informáticamente registrada y compartida en la red «Interbrain», permitiendo a las personas perpetuar su conciencia tras la muerte. El texto ganador puede leerse aquí. Les recomiendo que no se lo pierdan por nada del mundo.

La idea de Interbrain me parece absolutamente fascinante… ¿se imaginan las implicaciones que tendría? Sin duda me parece mucho más interesante investigar este aspecto que el de el retraso del envejecimiento físico… personalmente, creo que no me importaría tanto morir si pudiera seguir viviendo a un nivel intelectual. Por otro lado, pienso que librarse del cuerpo podía ser una enorme liberación y, al mismo tiempo, una terrible condena.

En cualquier caso, me temo que nos lo vamos a perder. Siempre llego tarde a todo :-P

La fraudulenta lucha contra el fraude

Ayer al mediodía pude ver en Antena 3 Noticias cómo el Ministerio de Industria ha lanzado una de esas campañas con página web para ayudar al ciudadano a defenderse de los nuevos fraudes basados en las nuevas tecnologías. En el informativo mostraban algunos detalles de la web, y algo me llamó poderosamente la atención de modo que decidí darme un paseo…

Visitando la web uno tiene la sensación de que intentan meterle el miedo en el cuerpo… sobre todo con frases como «¿Sabías que los cibercriminales pueden robarte el dinero sin que te des cuenta?» y mi favorita: «España ocupa el tercer lugar en el ranking de los países de todo el mundo en el que más se comete fraude on-line». Y lo proclaman con ese orgullo, como si no fuera con ellos la cosa… :-P

Pero no quería hablarles de eso… la web en sí cuenta con el patrocinio de Panda Software, y hay una sección absolutamente fantástica, llamada protégete gratis que viene a decir que para evitar el fraude hay que instalarse el Panda. Claro. En ningún motivo se mencionan normas básicas de protección como utilizar un navegador seguro, un cliente de correo fuerte y desconfiar de cierto tipo de mensajes. Para qué. Con el Panda todo se arregla solo. Y para animarte, te lo regalan. Supongo que lo siguiente será que repartan aspirinas para prevenir el embarazo no deseado.

Hasta te ofrecen una versión para Linux. La verdad es que el detalle me ha gustado, pero sigo sin verle el sentido: ¿el fraude se evita con software antivirus? No es que desconfíe de Panda -que también- sino que no veo cómo un programa me protegerá de, por ejemplo, el phishing, si nadie me ha explicado qué es ni qué precauciones debo tomar.

El gobierno no debería dar cobertura a una campaña con un planteamiento tan simplista… creo que es necesario informar, alertar y prevenir, y huir de la filosofía comercial de «instala nuestro programa que puede con todo». Porque no suele ser así. Y cito:

La mejor forma de protegerte contra el robo de identidad y el fraude on-line es contar con una buena protección antivirus instalada en tu PC capaz de detectar todos los códigos maliciosos que pueden robar tus datos o intentar engañarte.

¡Todos! ¡Lo detecta todo! Decir esto tan alegremente me parece muy gracioso, aunque sobre todo lo considero una temeridad… no sé qué problema hay con el fraude entonces, si existe un software que lo detecta absolutamente todo… esto ya sería bastante criticable si fuera mera publicidad de Panda Software, pero que además se haga al amparo del gobierno, en una página que hemos pagado todos, ya es de traca.

Y así nos va… supongo que ahora todo el mundo se instalará el @#$& Panda y, como lo detecta todo, en más o menos un mes España dejará de ocupar ese tercer puesto en fraude on-line. Y espero que sea así, porque en caso contrario, sí que habremos sido todos víctimas de un auténtico fraude… pero a ese tipo estamos ya acostumbrados…

Les juro que con estas cosas le hierve a uno la sangre.

La web 2.0

¿Se acuerda de cómo era la web hace dos o tres años? Probablemente no se parecía mucho a como es ahora, y de hecho la misma existencia de este blog es una prueba de ello… las cosas han cambiado mucho en poco tiempo.

treeshadow.jpgHace solo unos años las bitácoras no existían: sólo cuatro informáticos colgados teníamos páginas personales, la mayoría programadas en HTML puro y duro (sobre todo duro). Incluso recuerdo que llegué a utilizar el MS FrontPage Express… qué tiempos aciagos :-P. De hecho, durante mucho tiempo, la web consistió sólo en páginas absolutamente estáticas: simples documentos enlazados unos con otros. A eso es a lo que ahora denominamos como Web 1.0.

Con el tiempo, aparecieron los grandes portales: estas páginas necesitaban algo más: foros, chats, algo de interactividad. Estas nuevas necesidades nos trajeron el JavaScript y el Java, con lo que Internet se convirtió en una herramienta mucho más potente e interesante. Una buena parte de estas empresas se hundieron (el famoso fracaso de las “punto com?), pero nos dejaron importantes avances. A estos avances los hemos denominado después como Web 1.5 (qué imaginación).

Sin embargo hubo un momento en que la web marcó un gigantesco punto de inflexión, que sólo hemos sido capaces de apreciar cuando han transcurrido ya unos años… hemos sido partícipes de un renacimiento web, con nuevas ideas y nuevas tecnologías, en su mayoría orientadas a una visión social y participativa de Internet, basada cada vez más en contenidos y no en tecnologías.

Todo esto es muy abstracto, y seguro que más de uno está deseando leer ejemplos. Bien, pues está leyendo uno: no he necesitado aplicar una enorme cantidad de conocimientos para crear este blog y mantenerlo. De hecho, muchas personas tienen uno y no tienen ni idea de informática. Por otro lado tenemos la Wikipedia, como buque insignia del fenómeno wiki, que es otro buen ejemplo de esta nueva filosofía.

Algunas ideas…

Desde mi punto de vista, una de las novedades más interesantes que nos ha traído la web 2.0 es la sindicación. Esto podemos verlo como una simple comodidad, pero representa mucho más: la independencia entre el contenido y el contexto: usted mismo puede estar leyendo esto en una página web como Bloglines, en su navegador web, en su cliente de correo o en un agregador cualquiera para RSS o Atom.

Otro punto novedoso son los llamados servicios web. Para entendernos, consisten en que un equipo ofrece un servicio a la comunidad, de manera que los ordenadores que quieran hacer uso de él no tienen más que conectarse al primero. Por ejemplo, imagine un servidor, conectado a Internet, que mantiene una lista con la programación de la televisión. Podríamos diseñar un programa que obtuviera esta información y la mostrara en nuestra pantalla. Precisamente tengo un widget en el Mac que se conecta a un servidor de este tipo y me descarga la programación actualizada. Si no entiende muy bien cómo puede ser esto posible, puede revisar el artículo sobre los protocolos.

Resumiendo, y por dejar sentada alguna idea, la web 2.0 es algo que no sabemos muy bien cómo definir con precisión pero que sabemos que está ahí. La idea central de todo esto es la modularidad: la separación entre servicios, entre contenido y contexto… construyámoslo todo en piezas pequeñas bien conectadas para poder intercambiarlas y compartirlas con facilidad. La vida es un Lego.

Que no panda el cúnico (nunca mejor dicho…)

Todo empezó una noche de primavera. Estaba yo solo en casa, con un portátil encima de la mesa con el Norton Antivirus caducado y por tanto en peligro que reclamaba mis cuidados. Me decidí a salir por un momento de mi universo Mac y ponerme a pensar cómo iba a manejar aquella situación: el ordenador necesitaba urgentemente un antivirus actualizado.

20040907panda.jpg

Tras buscar entre tarrinas, fundas y más fundas de cedeses, constaté lo inevitable: no tenía ni una sola copia actualizada de ningún antivirus. Vaya situación. En ese momento me acordé de un Panda Antivirus original que tenía guardado en algún lugar… para tranquilizarles, diré que me lo habían regalado en un curso sobre seguridad informática (gran paradoja…). Lo observé con desconfianza: había tenido problemas con el viejo Panda Platinum hacía unos años… Comencé a leer la información de la caja: «máxima protección», «impide el acceso de hackers», «lo instalas y te olvidas» (esto último resultó ser cierto, bellacos).

Con tanta frase, tanta característica interesante y tantos logotipos de «mejor producto del año», pensé que tal vez no sería tan malo como las anteriores versiones… vamos, que lo mismo se habían reformado. Los requisitos mínimos me animaron: Pentium 150 Mhz. Pensé que el Centrino podría de sobra con él, así que decidí instalarlo…

Que el autoarranque se bloqueara no fue un buen augurio, pero decidí continuar… finalmente, y tras una espera eterna, logré instalarlo, validando más tarde mi flamante licencia mediante un proceso bastante poco intuitivo… Pero ya tenía mi ordenador protegido. O eso pensaba.

El primer reinicio fue inusualmente lento. Pero era el primero, así que no le di importancia. Cinco minutos clavados tardó en iniciarse el Windows XP, cuando antes arrancaba en un par de minutos. No pasa nada. Cuando por fin pude abrir el panel de control del antivirus me encontré con una interfaz de las que odio: un montón de dibujos y de parafernalia tan bonita como lenta. Acceder a cada menú era una nueva aventura. Intenté tranquilizarme y tomar aire. Configuré las opciones como más me gustó, y empecé a descargar las actualizaciones.

En todo ese tiempo no logré utilizar el ordenador (256 de RAM, 1 GHz) para nada que no fuera el #@$ Panda. Al fin, la actualización terminó de bajarse. En ese momento, el antivirus me informa de que ha ocurrido un error y que debo reiniciar mi máquina. Ese detalle me indignó hasta los topes… ¿cómo puede un antivirus exigirme el reinicio del equipo por un error interno? ¿y si no puedo reiniciarlo? ¿así me protege el nuevo Panta Antivirus + Antispyware Titanium 2006?

Me resistí, pero al final tuve que claudicar. Reseteé el ordenador con cara de pocos amigos. Esta vez tardé 7 minutos en poder usar el ratón. Me estaba poniendo de color verde. La barra de tareas de Windows aparecía a la mitad, nunca había visto nada parecido. Sin duda el programa más lento y pesado que he visto en la vida. Un virus habría perjudicado menos el rendimiento de la máquina.

Así que, ciscándome en los muertos del tal panda, me dispuse a desinstalarlo. Error. Lo intenté de nuevo. Nada… En esa situación, la información del disco comenzaba a estar en cierto peligro… Por fortuna, pronto sería fulminado por las tropas imperiales :-P. Reinicié en modo «a prueba de fallos» como administrador. Tampoco podía. Borré los archivos por las bravas, limpié el registro. Reinicié el portátil, que tardo poco más de un minuto en arrancar, libre de sus cadenas de bambú.

Y así terminó mi breve e intenso coqueteo primaveral con Panda. Estoy pensando, según voy escribiendo esto, en instalarlo en mi Pentium I a ver si de verdad funciona, tal y como promete la publicidad… es intrigante… igual es tan lento que acaba tirando más rápido… creo que voy a probarlo :-P

He aprendido muchas cosas de esta aventura. La más importante es que Panda Software no ha sido todavía capaz de desarrollar algo decente, y posiblemente nunca lo hará. También me he planteado delicadas preguntas sobre los criterios que siguen las empresas para dar sus certificaciones. Por desgracia, todas mis conclusiones están llenas de palabras malsonantes e improperios diversos, así que me voy a morder la lengua antes de decir que me encantaría ver la cabeza de ese maldito panda separada del resto de su cuerpo.

Pero la publicidad no engañaba: «lo instalas y te olvidas». De volver a usar tu ordenador, se entiende.

El software libre cava su propia tumba

Posiblemente seguramente el titular sea un poco sensacionalista, pero pone de manifiesto lo que desde mi punto de vista es una realidad: la filosofía del software libre da cobertura al software propietario. Mejor dicho: el software libre y gratuito ayuda involuntariamente a mantener el modelo de negocio del software propietario de pago. Y me explico:

De un tiempo a esta parte han surgido muchos proyectos de software libre que buscan replicar software comercial, creando versiones libres (y gratuitas en la mayor parte de los casos) de programas bastante utilizados. Ejemplos los hay a patadas, aunque posiblemente el más conocido es el OpenOffice (sustituto libre de Microsoft Office).

180px-heckert_gnu_whitesvg.pngEn principio, todo este software libre se desarrolló gracias a la popularización progresiva de Linux, cuya difusión creó la necesidad de contar con sustitutos de los programas más populares que funcionaran en este sistema… hasta aquel momento, casi la totalidad de las aplicaciones que se desarrollaban estaban diseñadas en exclusiva para Windows, y a la comunidad linuxera no le quedó otra que ponerse manos a la obra y construir desde cero todas las aplicaciones que necesitaban.

De un tiempo a esta parte, todo este software libre, originalmente diseñado para entornos Linux, ha sido portado a sistemas Windows, y últimamente a entornos MacOS. Esto, que representa muchas ventajas, es algo que me preocupa. Esta tendencia del software libre a funcionar en entornos no libres puede llegar a ser perjudicial para su existencia.

¿Cuántos de ustedes están utilizando en este momento Windows? Seguro que muchos. No voy a entrar a valorar si ha adquirido o no su correspondiente licencia. Por desgracia, en los sitemas basados en Windows, no sólo es necesario contar con un sistema operativo, sino que además es imprescindible contar con cierta cantidad de software de aplicación. Y sabemos que con Windows no viene preinstalado casi nada. Así pues, todas las aplicaciones adicionales deben (en principio) comprarse e instalarse por separado.

¿Se ha detenido a pensar en el coste económico que puede suponer esto? Suponiendo que tiene una copia de Windows perfectamente legal, equiparlo con todo el software necesario puede resultarle bastante caro. Salvo, eso sí, que utilice software libre para Windows, que suele ser gratuito… En principio no hay nada malo en ello, es estupendo que muchas personas se ahorren un dinero…

El problema, bajo mi punto de vista, es que la existencia de programas gratuitos multiplataforma frena la expansión de Linux en cierto sentido: muchos usuarios domésticos no podremos permitirnos jamás pagar las licencias de todo el software comercial que utilizamos sobre Windows, de modo que utilizamos sus equivalentes libres y gratuitos. Y como podemos disponer de este software en nuestro Windows (o en nuestro Mac OS) no vemos razones para pasarnos a Linux…

De modo que el mismo software libre nos proporciona las aplicaciones para que no tengamos que decir adiós a nuestro sistema operativo no-libre…

Si el modelo del software propietario y comercial se impusiera, tendríamos que pagar por todas las aplicaciones que utilizamos y nos ataríamos a los fabricantes… si todos los usuarios domésticos que utilizan Windows tuvieran que comprar mañana todo el software que utilizan y no existiera software libre y gratuito para Windows, posiblemente habría una enorme fuga de usuarios hacia entornos tipo Linux: el tiempo de aprender a utilizarlo se compensaría de sobra por el ahorro económico…

Por eso pienso que el software propietario sobrevive en buena parte gracias al libre… supongo que al final, los buenos son tan buenos que terminan pareciendo algo tontos…

El problema de la parada

Terminaba el post de ayer sobre los bucles infinitos comentando más o menos que una máquina no podría leer un bucle infinito sin quedarse irremediablemente inmersa en él. En los comentarios, Trebol-A nos recordaba un chiste muy bueno sobre el tema con estas palabras:

Pocas veces me he reído tanto como con el chiste aquel del programador muerto en la ducha con un bote de champú en las manos que decía:
– Lavar
– Enjuagar
– Repetir

¿Por qué a los ordenadores se les atragantan tanto los bucles infinitos? ¿No pueden detectarse o evitarse de alguna manera? La respuesta es sencilla: no. Una explicación formal y más precisa tendremos que buscarla en el llamado «problema de la parada«.

Este problema y sus conclusiones tienen implicaciones muy importantes en la gestión de los bucles infinitos que no todo el mundo conoce. Hay que explicar antes de nada que los programadores disponemos de herramientas, conocidas como «depuradores» que nos ayudan a eliminar los errores de nuestras aplicaciones. Podíamos pensar en un depurador que nos alertara de la presencia de bucles infinitos, pero por desgracia, tal herramienta no existirá nunca.

Una de las utilidades del problema de la parada consiste en demostrar que un ordenador no es capaz de reconocer si un programa entra en un bucle infinito. ¿Por qué? Vamos a verlo: imaginemos un ordenador que mostrará un «sí» en pantalla si el programa dado tiene un bucle infinito y un «no» si no lo tiene.

El ordenador comenzaría a ejecutar el programa. Si no tiene un bucle infinito, cuando el programa termine, mostrará un «no». Supongamos ahora que el programa tarde, por ejemplo, 10 años en realizar sus tareas, sin entrar en un bucle infinito. Al final de los 10 años, el ordenador nos mostrará un bonito «no» en pantalla.

Ahora supongamos que introducimos otro programa, éste con un bucle infinito. El ordenador ejecutará el bucle un número indefinido de veces. Y ahí se quedará para siempre. Jamás podrá salir del bucle, por lo que jamás nos mostrará ese «sí» que nos indicaría precisamente la presencia de un ciclo.

Ahora podemos pensar «bueno, si el ordenador tarda mucho tiempo en mostrarnos el «sí», significará que el programa entró en un bucle infinito». Pero ¿cuánto tiempo es «mucho»? ¿Un año? ¿dos? Puede ser que nuestro programa sea complicado y tarde mucho tiempo en ejecutarse… ¿dónde está el límite? Ese el problema precisamente: no podemos predecir si obtendremos respuesta o no, no sabemos si el ordenador parará o no para poder mostrarnos el resultado por pantalla. Dicho de otro modo, si no aparece salida en pantalla, no podremos saber si el programa sigue calculando normalmente o es que ha entrado en un bucle infinito…

Sólo los humanos podemos ver un bucle infinito y no quedarnos el resto de la vida pensando en él. Una muestra más de que los ordenadores son bastante torpes… mucho más que el más estúpido de los humanos. Y eso es ser muy estúpido :-P

Bucles infinitos

No me he cansado de repetir (todavía) que los programas informáticos no son otra cosa que conjuntos de instrucciones que el ordenador «comprende» y ejecuta secuencialmente. Por ejemplo, imaginemos un programa formado por tres instrucciones que se leerán en orden (primero la 1, luego la 2 y por último la 3):

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Fin

Es fácil ver entonces que, a lo largo de la ejecución de un programa, el ordenador irá leyendo y procesando estas órdenes de una en una. Claro que no todo es linealidad pura y dura: muchas veces, al diseñar un programa, nos interesaría repetir algunas instrucciones un determinado número de veces, o ejecutarlas sólo si se dan ciertas condiciones.

Todo esto son mecanismos que nos permiten alterar de alguna manera el flujo del programa. Imaginemos que quisieramos pedir e imprimir el nombre de 3 usuarios con el programa anterior. Una forma sería:

  1. Pide al usuario que escriba su nombre
  2. Escribe en la impresora el nombre del usuario
  3. Pide al usuario que escriba su nombre
  4. Escribe en la impresora el nombre del usuario
  5. Pide al usuario que escriba su nombre
  6. Escribe en la impresora el nombre del usuario
  7. Fin

Pero esto no parece muy productivo… tal vez podríamos hacer algo así:

  1. Repite las siguientes instrucciones 3 veces:
    1. Pide al usuario que escriba su nombre
    2. Escribe en la impresora el nombre del usuario
  2. Fin

Esta estructura se conoce como «bucle«, pues supone introducir un ciclo en el orden de ejecución del programa. Un bucle está formado por una condición y un conjunto de instrucciones que se ejecutan mientras se verifica esa condición. En nuestro caso, la condición sería que «el número de iteraciones del bucle sea menor o igual a 3», pero podemos poner la condición que queramos.

Y también puede ser que la condición que seleccionemos se verifique siempre… con lo cual el ordenador quedará permanentemente ejecutando las instrucciones que compongan el bucle. Por ejemplo, el bucle…

  1. Repite la siguiente instrucción siempre que 1 sea igual a 1
    1. No hagas nada

… dejará al ordenador en un ciclo continuo de no hacer nada. Tampoco será un problema serio, pues el bucle sólo afectará al programa que lo contenga, y en principio el Sistema Operativo no se desestabilizará. Este tipo de bucles son conocidos en informática como bucles infinitos, y pueden causar fallos bastante graves…

Tal vez piense que evitarlos debe de ser trivial, pero rara vez se sabe de antemano cuántas veces se ejecutará un bucle, y puede ser que suceda algo que no hayamos previsto en el diseño que desencadene una secuencia sin fin… tiene su cosa, no crea…

Bien, ahora imagine un programa con esta pinta:

  1. Ejecuta la instrucción número 1

¿Qué hará el ordenador? Leerá la instrucción 1. ¿Qué dice? Que ejecute la instrucción 1. Vale, voy a leerla. ¿Qué dice? Que ejecute la instrucción 1… y así hasta el infinito (o hasta que el Sistema Operativo arrebate el procesador al programa)

Por cierto, que tiene usted mucha suerte: si fuera un ordenador jamás habría llegado a leer esto, sino que se habría quedado eternamente leyendo el bucle anterior… ¿Por qué? Bien, se trata de algo que veremos en la próxima entrada :-P

Far from SF

Ya disculparán esta temporada tan alejado de ustedes, pero me encuentro inmerso en los exámenes de septiembre. Sí, ya sé que suena ridículo, se trata de la famosa adaptación al calendario europeo… estoy con el tiempo justo, así que les dejaré a ustedes la valoración sobre la conveniencia o no de tal calendario…

Volveré el sábado 15, tengo que hacer un último esfuerzo durante esta semana, como comprenderán. Les adelanto que habrá novedades muy interesantes durante este verano, espero que estén aquí para vivir juntos todos estos cambios que se avecinan.

?nimo y suerte a quienes estén inmersos en exámenes, oposiciones o sencillamente en el mar :-)

A grandes males, grandes remedios

Hace poco más de un mes escribí un artículo sobre el incumplimiento de los estándares en cierta plataforma de la web de la Universidad de Salamanca. El artículo fue muy meneado (¡gracias de nuevo, luces!), y a SF llegaron unos amables forasteros que nos proporcionaron su solución al problema. Sólo faltaba adaptarla a la web de la USAL, lo cual ha sido posible gracias al trabajo de la gente de BolaDeBillar69.

El problema consiste sencillamente en que un menú de la web no funciona con ningún navegador que no sea el Internet Explorer, lo que imposibilita en la práctica el acceso a las diferentes secciones. ¿Cómo solucionarlo? Pues yo se lo explico.

GreaseMonkey es una extensión para el Firefox que permite aplicar cambios sobre las webs de manera dinámica. Esto nos permite especificar modificaciones que deseamos que se realicen sobre determinadas webs, cuya presentación o comportamiento se adaptará a nuestros deseos.

La extensión puede descargarse desde aquí, parece una herramienta bastante interesante, por lo que no estará de más tenerla a mano. Una vez instalemos GreaseMonkey deberemos añadirle el script que hará que la web de RedCampus se modifique de acuerdo a nuestras espectativas. Este script ha sido realizado por BolaDeBillar69 y lo podéis descargar directamente desde aquí, bajo licencia GPL.

Ahora sólo queda que la universidad reconozca que la situación es vergonzosa y la rectifique, lo cual no creo que suceda… al menos hemos sabido buscarnos la vida :-) ¡Gracias a todos los que colaboraron!

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!)