Artículos

¿Qué son las vulnerabilidades en el software y por qué hay tantas?

por Thomas Holt traducido por David Ormeño

El reciente ataque WannaCry ransomware se extendió como un incendio, aprovechando las fallas en el sistema operativo Windows para tomar el control de cientos de miles de computadoras en todo el mundo. Pero, ¿qué significa eso exactamente?

Puede ser útil pensar en hackers como ladrones y software malicioso como sus herramientas de robo. Habiendo investigado el uso del cibercrimen y la tecnología entre las poblaciones criminales durante más de una década, sé que ambos tipos de malhechores quieren encontrar caminos hacia lugares seguros: computadoras y redes, y hogares y negocios. Tienen una variedad de opciones para entrar.

Algunos ladrones pueden elegir simplemente romper una ventana o puerta con una palanca, mientras que otros pueden ser más sigilosos y tratar de abrir un candado o colarse en una puerta que se dejó abierta. Los hackers operan de manera similar, aunque tienen más puntos potenciales de entrada que un ladrón, que típicamente depende de ventanas o puertas.

Las debilidades que los hackers explotan no son vidrios rotos o bisagras oxidadas. Más bien, son fallas en los programas de software que se ejecutan en una computadora. Los programas están escritos por humanos y son inherentemente imperfectos. Nadie escribe software completamente libre de errores que creen oportunidades para atacantes potenciales.

¿Cuáles son estos defectos, realmente?

En términos simples, una vulnerabilidad puede ser un error en la forma en que se produce la administración de usuarios en el sistema, un error en el código o un error en la forma en que responde a ciertas solicitudes. Una vulnerabilidad común permite un ataque llamado inyección SQL. Funciona en sitios web que consultan bases de datos, como para buscar palabras clave. Un atacante crea una consulta que contiene código en un lenguaje de programación de base de datos llamado SQL

Si un sitio no está protegido adecuadamente, su función de búsqueda ejecutará los comandos SQL, lo que puede permitir que el atacante acceda a la base de datos y potencialmente controle el sitio web.

Del mismo modo, muchas personas usan programas que son compatibles con el lenguaje de programación Java, como Adobe Flash Player y varias aplicaciones de Android. Existen numerosas vulnerabilidades en la plataforma Java, todas las cuales pueden explotarse de diferentes maneras, pero más comúnmente mediante la obtención de individuos para descargar “complementos” o “códecs” al software. Estos complementos en realidad contienen código malicioso que aprovechará la vulnerabilidad y pondrá en peligro la máquina.

Los defectos están en todas partes

Existen vulnerabilidades en todo tipo de software. Varias versiones del sistema operativo Microsoft Windows estaban abiertas al ataque WannaCry. Por ejemplo, el popular navegador de código abierto Firefox ha tenido más de 100 vulnerabilidades identificadas en su código cada año desde 2009. Desde principios de 2017, se han identificado quince vulnerabilidades diferentes en las variantes del navegador Microsoft Internet Explorer.

El desarrollo de software no es un proceso perfecto. Los programadores suelen trabajar en los plazos establecidos por los equipos de gestión que intentan establecer objetivos razonables, aunque puede ser un desafío cumplir con esos plazos. Como resultado, los desarrolladores hacen todo lo posible para diseñar productos seguros a medida que avanzan, pero es posible que no puedan identificar todos los defectos antes de una fecha de lanzamiento anticipada. Las demoras pueden ser costosas; muchas compañías lanzarán una versión inicial de un producto y luego, cuando encuentren problemas (u obtengan informes de usuarios o investigadores), corríjanlos lanzando actualizaciones de seguridad, a veces llamadas parches porque cubren los agujeros.

Pero las compañías de software no pueden respaldar sus productos para siempre: para mantenerse en el negocio, deben seguir mejorando los programas y vendiendo copias de las versiones actualizadas. Entonces, después de un período de tiempo, dejan de emitir parches para programas más antiguos.

Sin embargo, no todos los clientes compran el último software, por lo que muchos usuarios aún ejecutan programas antiguos que podrían tener fallas sin parches. Eso le da a los atacantes la oportunidad de encontrar debilidades en el viejo software, incluso si las versiones más nuevas no tienen los mismos defectos.

Explotando las debilidades

Una vez que un atacante identifica una vulnerabilidad, puede escribir un nuevo programa de computadora que usa esa oportunidad para ingresar a una máquina y hacerse cargo de ella. En este sentido, un exploit es similar a la forma en que los ladrones utilizan herramientas como ganzúas u otros medios de entrada en una ubicación física.

Encuentran un punto débil en las defensas del sistema, tal vez una conexión de red que no ha sido asegurada adecuadamente. Si los atacantes logran establecer contacto con una computadora objetivo, pueden aprender sobre qué tipo de sistema es. Eso les permite identificar enfoques particulares (acceder a archivos específicos o ejecutar ciertos programas) que pueden darles un mayor control sobre la máquina y sus datos. En los últimos años, los atacantes comenzaron a atacar a los navegadores web, que pueden conectarse a Internet y, a menudo, ejecutar pequeños programas; ellos tienen muchas vulnerabilidades que pueden ser explotadas. Esas aperturas iniciales pueden dar al atacante el control de una computadora objetivo, que a su vez puede usarse como un punto de intrusión en una red sensible más grande.

A veces las vulnerabilidades son descubiertas por los propios desarrolladores de software, o usuarios o investigadores que alertan a la compañía de que se necesita una solución. Pero otras veces, los hackers o las agencias de espionaje del gobierno descubren cómo entrar en los sistemas y no informar a la compañía. Estas debilidades se denominan “días cero” porque el desarrollador no tuvo tiempo para corregirlos. Como resultado, el software o hardware se ha visto comprometido hasta que se pueda crear y distribuir un parche o solución a los usuarios.

La mejor manera en que los usuarios pueden protegerse es instalando regularmente actualizaciones de software tan pronto como haya actualizaciones disponibles.