¿Por qué los virus informáticos parecen una amenaza mucho menor que hace 10 años?

Históricamente, el software (sistemas operativos incluidos) no estaba realmente diseñado para proteger contra la intención maliciosa. Si existía alguna protección, estaban más allí solo para preservar la estabilidad del sistema que para realmente detener a los “malos”.

Por supuesto, después de ver que realmente necesitamos defendernos de los “tipos malos”, estudiamos las vulnerabilidades y encontramos defensas bastante sólidas contra ellos.

Esa es esencialmente la respuesta, y el resto de esto son solo ejemplos. Tenga en cuenta que esta información es justo lo que recuerdo de mi clase de pregrado (y mi memoria es borrosa), así que no dude en corregirme.

En el pasado, si quería comprometer un programa escrito en C, todo lo que realmente tenía que hacer para tomar el control completo de un programa era desbordar un búfer, sobrescribir un puntero de retorno y ejecutar un código de shell arbitrario (esto se simplifica demasiado) .

Ahora, hay varias razones por las que esto ya no funcionará. Por un lado, evitamos desbordamientos del búfer en la pila al poner un valor canario aleatorio. Si desborda la pila, este valor se sobrescribirá y el programa sabrá que algo está mal y dejará de ejecutarse.

Puede sortear el valor canario si puede sobrescribir un puntero, pero los compiladores son lo suficientemente inteligentes como para colocar todos los búferes al final, de modo que tendrá dificultades para sobrescribir otras variables. Esto ni siquiera es posible en la mayoría de los lenguajes de nivel superior como Java, ya que hacen cosas como verificar si está escribiendo más allá del final de una matriz.

Además, para ejecutar el código de shell, debe conocer la dirección del código en ejecución. Entonces, para detener a los piratas informáticos, los sistemas operativos ahora utilizan la asignación aleatoria del diseño del espacio de direcciones (ASLR). Básicamente, lo que hace es aleatorizar dónde comienzan las áreas de memoria, lo que hace que sea muy difícil saber dónde se ubicaría el código shell que inyectó.

Es probable que el sistema operativo también haga que la memoria de escritura sea de solo lectura, por lo que incluso si inyectó el código de shell, no sería ejecutable. Aún así, los piratas informáticos también pueden solucionar esto uniendo diferentes partes de un programa legítimo para que haga algo malo. Puede leer sobre una técnica, programación orientada al retorno, aquí: http://cseweb.ucsd.edu/~hovav/di…

Estoy seguro de que hay mucho más que no sé teniendo en cuenta mi experiencia limitada. Aún así, está bastante claro que crear virus es mucho más difícil de lo que solía ser.

Puede ver que ahora la mayoría de las vulnerabilidades están relacionadas con la web. Esto es probable porque los navegadores son relativamente nuevos y la Internet está evolucionando a un ritmo increíble. Si no recuerdo mal, las vulnerabilidades de cross site scripting (XSS) son ahora las vulnerabilidades más comúnmente reportadas. Desafortunadamente, muchas vulnerabilidades web son el resultado de que los desarrolladores web no logran desinfectar adecuadamente las entradas de los usuarios, pero parece poco razonable esperar que cada desarrollador web comprenda realmente la seguridad web y no cometa errores.

Otra razón por la que el navegador es un buen objetivo es que es un programa muy especial, por lo que algunas de las protecciones normales proporcionadas por el sistema operativo no se pueden usar. Por un lado, su navegador tiene que ejecutar el código de JavaScript que carga desde las páginas web, lo que significa que la memoria dinámica debe ser ejecutable para que los navegadores funcionen correctamente. Además, en cierto sentido, como hacker, usted ya tiene un control limitado del navegador si consigue que alguien acceda a su página web, porque puede hacer que el navegador ejecute su javascript.

Un ejemplo de lo que un atacante podría hacer es hacer que el JavaScript “rocíe” el montón con muchas copias del código de shell que desea ejecutar, y luego adivine dónde está el código. La razón por la que esto funciona en un navegador y no en un programa tradicional es que la memoria dinámica es ejecutable en el navegador, y también porque puede solicitar una gran cantidad de memoria incluso cuando el navegador no está comprometido. Tenga en cuenta que esta técnica es para evitar las defensas, por lo que aún necesitaría encontrar una vulnerabilidad en el navegador en primer lugar. Aún así, por lo que mi profesor me dijo, no está fuera del alcance de las posibilidades si realmente quieres, ¡aunque obviamente es mucho más inteligente que yo!

Windows es más seguro de lo que solía ser. El software antivirus es mejor de lo que solía ser. Incluso Mac OS X es más seguro hoy que en el pasado: Mountain Lion introdujo numerosas mejoras de seguridad que incluyen Gatekeeper, Sandboxing, Address Space Layout Randomization y más. Los navegadores modernos, incluidos Chrome, Firefox y Safari, han implementado funciones antiphishing y Google advierte a los usuarios cuando se considera que un sitio es peligroso. Esta es una descripción general de alto nivel de algunas grandes mejoras de seguridad que hicieron que los virus fueran menos problemáticos, pero por supuesto no es una lista exhaustiva.

Hace 10 años, los virus informáticos eran intrusos traviesos que borraban archivos o bloqueaban su computadora. Hoy en día, es más probable que sean gusanos o troyanos que intentan pasar desapercibidos y luego acechan. Se utilizan para robar información financiera o poder de cómputo como parte de las botnets para descifrar el cifrado, enviar spam o sitios web DDOS. A menos que ejecute una distribución de Linux poco común, o instale MacOS o Windows usted mismo y nunca se haya conectado a Internet, es muy probable que tenga virus en su computadora.

Al igual que los virus biológicos y otras infecciones, se han criado selectivamente para que sean relativamente inofensivos para el usuario final. Hoy nadie vacuna el resfriado, y la peste bubónica rara vez afecta a alguien más allá de los cazadores de marmotas del centro de Asia.