Un hacker es, para la mayoría, alguien capaz de quebrantar la seguridad informática. Sin embargo, el término hacker tiene otras connotaciones. Para algunos es un programador muy talentoso. Para otros, un hacker es alguien que busca explicaciones profundas del funcionamiento de las cosas; no sólo le interesa cómo funcionan, sino por qué. Pero quizá la definición más acertada sea, por mucho, la de un experto en ciberseguridad. En este artículo trataré de explicar, muy brevemente, en qué consiste su labor.
Todos hemos visto en las películas cómo un hacker escribe rápidamente en el teclado y treinta segundos después tiene acceso a cuentas de banco, cámaras de seguridad y documentos secretos. No es difícil darse cuenta de que en la realidad las cosas no son así de sencillas, pero también sabemos que estos ataques a la seguridad existen. En el mundo real, ¿cómo es realmente un ataque cibernético?
Antes de describir cómo se ataca un programa, debemos tener claro el objetivo, el blanco. Tenemos que entender qué es lo que se está tratando de atacar. En términos simples, un programa consiste de series de largas instrucciones que la computadora ejecuta en rápida sucesión. Estas instrucciones mueven, transforman o transmiten información que se encuentra en la computadora. Las instrucciones tienen una lógica complicada que ha sido impuesta por los programadores en el código fuente y el comportamiento del programa está determinado por la información que recibe durante la ejecución. Esa información puede venir del usuario, de otros programas, del disco duro o de otras fuentes.
El objetivo de un hacker es encontrar errores en la lógica del programa que le permita controlar las instrucciones que se ejecutan o en ocasiones sólo el orden en el que se ejecutan. Dependiendo de cuánto control se tenga sobre la ejecución, el hacker puede negar el servicio a otros usuarios, tener acceso a información confidencial o a veces hasta instalar otros programas (usualmente malware).
Aunque en la mayoría de las veces el hacker no tiene acceso al código fuente, es decir, a las instrucciones que escribieron los programadores y, por tanto, no sabe a priori qué reglas lógicas forman al software, sí puede ser capaz de inferir la lógica del programa. Para lograrlo, el hacker debe ejecutar el programa muchas veces con diferentes entradas y prestar atención al tiempo de ejecución y a la información que regresa (o no regresa) el programa. Es como si estuviera interactuando con un interlocutor invisible y debiera deducir todo sobre él analizando sus respuestas.
Poco a poco, el hacker se puede dar una idea general de cómo el programa procesa la información que se le ha dado. Con esto y un poco de suerte, se pueden identificar entradas específicas con las que es posible lograr que el programa llegue a estados para los no fue diseñado. Este proceso toma más que los treinta segundos de las películas: puede llevar días, y en el caso de software muy complejo, hasta años.
Tomemos como ejemplo una página web. La primera vez que un usuario visita la página, ésta pide un usuario y una contraseña, pero tiene la opción de recordar al usuario para que no tenga que escribir su nombre y contraseña cada vez que visita el sitio.
El programador, al considerar este escenario, decide que el sitio va a funcionar de la siguiente manera: cuando un usuario visita la página y su explorador no envía información adicional, el sitio pide un nombre y contraseña. Si el usuario ingresa su nombre y la contraseña correspondiente, el sitio le da acceso, y al mismo tiempo, le proporciona a su explorador una cookie (un pequeño archivo que el explorador enviará al sitio en todas las futuras visitas). La cookie contiene el nombre del usuario y también un indicador de que el usuario ya está identificado o verificado.
Ya que está terminado el sitio, el programador abre la página por primera vez y verifica que se le pida su contraseña. Después de ingresarla cierra la página y la vuelve a abrir. Esta vez puede entrar sin tener que escribir su contraseña por segunda vez. ¡El sitio funciona bien!
Un hacker notaría esta funcionalidad y se preguntaría lo siguiente: ¿Qué pasa si yo introduzco mi usuario y contraseña, pero después cambio el nombre de usuario en la cookie? En este caso, el sitio le otorgaría acceso directamente a la cuenta que él escriba en la cookie, ¡todo esto sin tener que saber la contraseña! Porque con el nombre del usuario en la cookie queda asociada de manera automática su autenticidad, sin importar ya si se modifica ese nombre.
Escribir software seguro es extremadamente difícil porque los programadores no sólo tienen que preocuparse por verificar que el programa funcione como fue diseñado en los casos usuales, sino también hay que asegurarse de que con cualquier otra entrada el programa responda de manera negativa.
{jcomments on}