jueves, enero 16, 2020

Los años locos de la seguridad informática: De la camiseta prohibida al virus de una sola línea de código

Las líneas de código (es decir, los programas de computadores o el software) perfilan el mundo actual, de esto no hay duda. Desde un microondas, relojes, teléfonos, pasando por diferentes vehículos que usamos a diario como aviones, coches, etcétera, hasta complejas instalaciones como por ejemplo las centrales nucleares, hospitales (y su instrumentación) o fábricas, dependen de un programa de un ordenador. Y toda esta, digamos, dependencia y expansión, empezó justo después de la invención del primer microprocesador, el Intel 4004 en 1971, y desde entonces el software ha ido ocupando un sitio destacado y fundamental dentro de la tecnología y a su vez, de la sociedad.

Figura 1: Los años locos de la seguridad informática: 
De la camiseta prohibida al virus de una sola línea de código

Esto no quiere decir que antes no hubiera programas (de hecho, en este artículo aparecen algunos anteriores a esa fecha) ya que el primer, digamos “código”, se creó en 1715 … ahí lo dejamos ;) . En nuestro libro “Microhistorias: anécdotas y curiosidades de la historia de la Informática (y los hackers)” aparecen más historias como estas, tanto de ciberseguridad como de la informática y hackers en general.

Figura 2: Libro de "Microhistorias: anécdotas y curiosidades
de la historia de la informática (y los hackers)"

En este artículo hemos seleccionado algunos fragmentos de código que, de alguna u otra manera, han tenido impacto en el mundo de la seguridad informática y casi podríamos decir que en la sociedad. Desde instrucciones erróneas en vehículos espaciales que había que hacer un “bypass” (como el caso del Apolo 14) pasando por el curioso caso de la camiseta prohibida y el código de cifrado RSA, harán acto de presencia en este texto. Vamos a verlos un poco más en profundidad.

Sobrecarga (overflow) y engaño (deception) en el software del Apolo 11 y 14

En ambos viajes espaciales, un programa de ordenador estuvo a punto de echar al traste toda la misión. No fueron un problema técnico del vehículo, sino una mala interpretación de una señal en un caso y un error de programación o de interpretación de señales en el otro.

En el caso de la misión Apolo 11, a pocos minutos de aterrizar en la Luna, Buzz Aldrin dejó activo un radar del vehículo LEM que desbordó de información (overflow) el ordenador, activando las alarmas 1201 y 1202 que casi terminan con la misión. Menos mal que Margaret Hamilton y su equipo tenían previsto este contratiempo (esas alarmas indicaban justamente este problema de sobrecarga) y lo tenían bajo control.

Por otro lado, en el viaje del Apolo 14, también hubo un problema, esta vez relacionado con una señal de abortar que no debía de estar activa. En este caso fue Don Eyles, uno de los miembros del equipo de Margaret quien lo solucionó realizando un “bypass” o engañando al sistema. Tienes toda la historia al detalle en este enlace que publicamos.

Figura 3: Sección del código del fichero EXECUTIVE.AGC donde aparece la activación de la alarma 1202

En la imagen de la Figura 3 se puede apreciar la porción de código que activaba la alarma 1202 del Apolo 11 (el código fuente al completo está en GitHub). Una explicación a fondo de esta alarma y su funcionamiento la puedes encontrar en este enlace.

El gusano de Morris, el primer ataque a la red Internet

El 2 de noviembre de 1988, un joven estadounidense de 23 años, llamados Robert Tappan Morris, creó el primer malware de tipo gusano (programado en Lenguaje C) que provocó, según él, por accidente, el mayor ataque a la red Internet de la época. El 10% de los ordenadores conectados, unos 6.000 la mayoría servidores, provocando el mayor ataque tipo DoS de la historia (hasta ese momento).

El programa explotaba un agujero de seguridad en el modo debug del clásico programa de Unix llamado sendmail (el cual se ejecuta en el sistema operativo a la espera de recibir conexiones para recibir emails) y “bug” en el daemon del comando/protocolo finger, fingerd (encargado de gestionar dichas peticiones). Antes de infectar otro ordenador, el gusano comprobaba si estaba presente. En caso afirmativo, el gusano lo volvía a infectar una de cada siete veces (esto lo hacía por si acaso había otro gusano Morris modificado en ejecución y así sustituirlo).

Figura 4: Parte del código fuente del gusano encargado de probar
diferentes contraseñas por defecto para acceder a los servidores

Esto provocó que muchos usuarios se infectaran demasiadas veces por el malware, llegando a colapsar la máquina, dejando de funcionar. Hoy día Robert Morris es profesor de Informática en el MIT. En este enlace puedes ver el código fuente completo y en este otro un análisis en profundidad del mismo.

El virus de una sola línea (bomba fork)

La siguiente línea de código, en Bash, era capaz de bloquear o colgar un ordenador en versiones antiguas de Unix y muy posiblemente en algunos actuales con GNU/Linux, así que ten cuidado en ejecutarlo:
:(){ :|:& };:

bomb(){

bomb | bomb &
}
bomb
Figura 5: Bomba fork en Bash en una sóla línea Bash y abajo en formato más legible

Una bomba fork es un tipo de ataque cuyo objetivo es provocar una denegación de servicio, creando otros procesos (en concreto, a llamadas del sistema o system calls) de forma recursiva, colapsando la memoria del ordenador. Lo que hace especial este ataque, además de su extrema sencillez, es que demuestra la gran debilidad de los complejos informáticos actuales.

La bomba fork de una sola línea es una obra maestra de la programación ofuscada, aquí tienes una brevísima descripción de su funcionamiento:
1. “:()” significa que está definiendo una función llamada “:” 
2. “{:|: &}” significa ejecutar la función “:” y enviar su salida a la función ”:” de nuevo y ejecutarla en segundo plano. 
3. Dentro de la sección del punto 2 ocurre lo siguiente:
• “:” carga otra copia de la función “:” en memoria 
• “|” y hace un “pipe” de su salida hacia … 
• “:” otra copia de la función “:” la cual se tiene que cargar en memoria 
• Por lo tanto, “:|:” carga dos copias de ':' cada vez que se llama a “:” 
• “&” mata a las funciones, si la primera “:” es destruida, todas las funciones que ya se han iniciada no serán eliminadas. 
• “}” fin desde el “:” inicial
4. “;” separador de los comandos 
5. “:” ejecuta la función por primera vez
El código del cifrado RSA el Perl que se prohibió exportar … hasta en camisetas

El Gobierno de los Estados Unidos, durante un periodo de tiempo, aplicó un tratamiento casi de armamento militar a cualquier tecnología relacionada con el cifrado de información. Hasta ese momento, toda esta tecnología que rodeaba a cualquier dispositivo era costoso de implementar y programar. Hasta que apareció el algoritmo RSA de cifrado (el que es uno de los bloques fundamentales de la criptografía actual)

Figura 6: Libro de Cifrado de las comunicaciones digitales:
De la cifra clásica a RSA (2ª Edición) de 0xWord.

Este algoritmo se podía escribir en cuatro simples líneas de Perl y cualquier empresa, o particular podía, desde ese momento, y de manera sencilla utilizar sistemas de cifrado de alta seguridad en cualquiera de sus programas, lo que permitía añadir capas de seguridad a todas las partes de los sistemas de seguridad.

Figura 7: Código Perl del algoritmo de cifrado RSA en 4 líneas de código

En ese momento no se podía exportar fuera del país este tipo de código por Internet, pero claro, ahora era lo suficiente pequeño como para poder meterlo, por ejemplo, en una camiseta. Y eso fue exactamente lo que pasó, la gente comenzó a imprimirlo en camisetas (las originales se han convertido en objetos de coleccionistas, si lográis encontrarla) y esta forma poder exportarlo y venderlo por todo el globo. En la camiseta aparece el siguiente texto:
“WARNING: This shirt is classified as a munition and may not be exported from the United States, or shown to a foreign national”
El problema es que estas camisetas también se prohibieron, e incluso hoy día es posible que te paren en alguna aduana estadounidense si la llevas puesta (aunque estas restricciones están técnicamente retiradas). Eso sí, siempre te lo puedes tatuar donde quieras

Figura 8: Parte delantera de la camiseta donde se aprecia el código en Perl y también el mensaje de prohibición

Este no fue el único caso, también podemos encontrar otro como el de DeCSS (cifrado de los DVD), el cual también se imprimió en una camiseta y fue incluso a juicio.

Y muchos más...

Hay muchos más programas interesantes relacionados con la ciberseguridad (que os contaremos siempre que os haya gustado este artículo) de los cuales, además de lo curioso y su valor histórico, podemos aprender mucho de ellos. Desde errores de programación trágicos (como el caso de Therac-25, que provocó la primera muerte “por código”) hasta malware clásico como por ejemplo Conficker, el gusano que infectó millones de ordenadores, entre muchos otros. Pero amigos, esas son otras Microhistorias … ;)

Happy Hacking Hackers!!!

Autores:

Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.

Rafael Troncoso (@tuxotron) es Senior Software Engineer en SAP Concur, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps" además del blog CyberHades. Puedes contactar con Rafael Troncoso en MyPublicInbox.

No hay comentarios:

Entrada destacada

10 maneras de sacarle el jugo a tu cuenta de @MyPublicInbox si eres un Perfil Público

Cuando doy una charla a algún amigo, conocido, o a un grupo de personas que quieren conocer MyPublicInbox , siempre se acaban sorprendiendo ...

Entradas populares