Imagina por un momento que tu antivirus es el guardia de un banco: él
decide qué programas pueden pasar y cuáles deben quedarse fuera.
Si el
guardia es eficaz y el edificio está bien diseñado, no habrá forma
alguna de que algo se cuele sin permiso.
Ahora bien, si en el sistema operativo hubiera una puerta trasera,
esta podría ser aprovechada para penetrar en el interior y llevar a
cabo todo tipo de fechorías. Los malos podrían entrar, robar datos y
salir sin levantar las sospechas del guardia-antivirus.
A este tipo de problema se le denomina vulnerabilidad o agujero de seguridad.
En este artículo te explicaré qué son los agujeros de seguridad, cuáles
sus riesgos más comunes y cómo prevenir su explotación dañina a costa
de tu bolsillo y tu privacidad.
¿Qué es un agujero de seguridad o vulnerabilidad?
Entre las miles de líneas de código que forman un programa, siempre hay algún fragmento que está mal diseñado o que es tan complejo que prever su comportamiento en todos los escenarios resulta una tarea casi imposible.
Cuando no afecta al funcionamiento de la aplicación, ese fragmento de código puede quedarse sin detectar durante mucho tiempo,
lo que obviamente retrasa su corrección. Incluso cuando el defecto se
conoce, puede que no sea arreglado por falta de recursos.
En el momento en que alguien malintencionado descubra el fallo, es
posible que intente aprovecharlo con fines destructivos, convirtiéndolo
en un auténtico agujero de seguridad, uno que pueda ser aprovechado
mediante un ataque informático (exploit).
¿Qué puede hacerme a mí un agujero de seguridad?
A ti, directamente, nada. Los agujeros no son más que la vía de entrada para problemas y dolores de cabeza informáticos. Lo que daña a tus datos es lo que puede entrar a través de los agujeros o lo que puede aprovechar esas vulnerabilidades con fines destructivos.
Ese aprovechamiento se denomina “ataque”, y puede ser activo o pasivo. Cuando es activo, el ataque daña el sistema hasta que deja de funcionar. Los ataques activos “fuerzan” las entradas del sistema, y se usan, por ejemplo, para tumbar sitios web o desactivar software de importancia vital.
Los ataques pasivos actúan como un ninja: se
introducen en el sistema sin causar daño aparente. Mucho más peligrosos a
largo plazo, tienen por objetivo la obtención de privilegios en los
sistemas atacados (lo que equivale a tener "superpoderes"), la
instalación de programas dañinos (malware) y la sustracción de datos confidenciales.
Y los famosos "ataques de día cero”... ¿qué son?
Si un atacante aprovecha un agujero de seguridad recién descubierto, entonces hablamos de un ataque de día cero.
Su potencial dañino es mucho mayor, puesto que inicialmente no hay
defensa alguna contra el mismo; es el autor del programa quien debe
actuar lo antes posible para evitar el desastre.
Muchas veces, por desgracia, pueden pasar meses o años antes de que el fallo se corrija.
El temido Virus de la Policía aprovecha una vulnerabilidad de la máquina virtual de Java para entrar en los PC
En los casos más graves, que es cuando aparecen en aplicaciones muy
populares, los ataques de día cero se convierten en puertas abiertas
para virus y ataques de todo tipo, lo que provoca auténticas emergencias a nivel mundial, como la vivida con el Virus de la Policía.
¿Por qué los programas tienen agujeros de seguridad?
Ningún programador cuerdo diseña sus aplicaciones para que tengan
agujeros de seguridad. Al contrario, la mayoría se esfuerza para que sus
programas sean lo más seguros posible. Es una cuestión no solo de
seguridad, sino también de estabilidad: el código seguro asegura un buen rendimiento en cualquier situación.
Cheat Engine explota agujeros de seguridad de riesgo muy bajo o nulo: a los autores de juegos no les importan
Lo que sí puede ocurrir es que los programas sean liberados con fallos de seguridad (bugs) no detectados o considerados como poco importantes. O que la aplicación incluya funciones no documentadas, como utilidades de control remoto o actualización de archivos.
Finalmente, muchos agujeros no son detectados sencillamente porque nadie ha intentado encontrarlos ni ha efectuado pruebas de calidad. Pero incluso cuando se pone a prueba un programa, es posible que algunos agujeros de seguridad graves queden sin descubrir.
Esto pasa sobre todo con aplicaciones muy grandes; en el mundo del software, complejidad e inseguridad suelen ir de la mano. La existencia de agujeros de seguridad, en resumen, es inevitable.
¿Cómo consigue alguien encontrar y explotar vulnerabilidades?
Cuando un atacante comprueba un sistema en busca de vulnerabilidades
es mucho más agresivo que el usuario promedio. Por ejemplo, puede
intentar abrir una brecha introduciendo ejecutables en
un formulario con el que solo deberían cargarse imágenes, o saturar de
peticiones un programa hasta que este se reinicie o abandone toda
resistencia.
Todas las vías de entrada de un programa pueden forzarse o engañarse.
Y es que los programas, en el fondo, no son más que filtros por los que
pasan los datos que nosotros, los usuarios, les proporcionamos: cuando
lo que damos es excesivo, el filtro se atasca y rompe, dejando que pase
de todo. Encontrar fallos requiere ingenio, perseverancia y, obviamente,
herramientas.
Captura del excelente manual "Introducción a la explotación de software en sistemas Linux" (PDF)
Una vez halladas las vulnerabilidades, el atacante puede crear un exploit o aplicar una técnica ya conocida.
Mientras que lo primero exige un profundo conocimiento del programa y
grandes habilidades técnicas, lo segundo es una mera cuestión de seguir los pasos de una receta; los atacantes que usan herramientas ya existentes reciben en el mundillo hacker el despectivo apodo de script-kiddies.
¿Cómo se solucionan los agujeros de seguridad?
Se tapan o parchean. Los parches informáticos,
llamados así en recuerdo a los parches que se aplicaban a las tarjetas
perforadas y a las cintas magnéticas de los primeros ordenadores,
modifican trozos de código problemáticos de una aplicación. A veces
incluyen también mejoras.
Un ejemplo conocido de parche son los que Microsoft aplica a sus productos cada cierto tiempo, bien a través de Windows Update, bien bajo la forma de un Service Pack, que no es sino un paquete con muchos parches reunidos en un solo instalador. Otros parches vienen directamente en forma de actualización de una aplicación concreta.
Sin embargo, los parches no siempre arreglan los problemas de seguridad detectados. Ha ocurrido, por ejemplo, con Java, una plataforma que sigue padeciendo vulnerabilidades versión tras versión.
El parcheo de las aplicaciones, además, no es visto con buenos ojos por usuarios y administradores cautelosos, quienes anteponen la estabilidad ante todo lo demás.
¿Cómo puedo saber si tengo agujeros de seguridad? ¿Cómo los evito?
Lo primero es mantener navegadores y plugins siempre actualizados.
Los parches periódicos de Microsoft, Adobe y Oracle son esenciales para
mantener a raya el ataque de malware oportunista. Los antivirus rara vez son eficaces contra los ataques de día cero, pero, si tu software está actualizado, el malware chocará contra una pared.
Luego, te recomiendo usar un detector de vulnerabilidades. El mejor es Secunia PSI,
que analiza el equipo en busca de los programas instalados y comprueba
si la versión que tienes sufre alguna vulnerabilidad crítica. En caso
positivo, Secunia PSI te insta a actualizar el programa a una versión
más reciente y segura.
Secunia PSI es fácil de usar y utiliza los datos de seguridad más recientes. Y tiene un modo automático
Finalmente, debes mantenerte informado. La suscripción a boletines de seguridad y blogs de seguridad permite
estar al tanto de los ataques recién descubiertos por la comunidad, lo
que permite actuar antes de que sea demasiado tarde.
Otra opción igual muy válida es seguir en Twitter a cuentas que hablen de seguridad y malware, como @InfoSpyware, @ObservaInteco y @OSISeguridad.
Fuente: Onsoftware
el día 17 enero, 2013
No hay comentarios:
Publicar un comentario