Image Image Image Image Image Image Image Image Image Image

 iOSMac | 09/12/2016

Scroll to top

Top

No Comments

¿Por qué no hay virus en Mac y Linux?

¿Por qué no hay virus en Mac y Linux?
Antonio Expósito

La pregunta ¿por qué no hay virus en Mac? es una de las que yo me hice hace tiempo, ahora después de leer mucho encontré la respuesta. El kernel mediante el uso de la memoria virtual hace creer a cada proceso que tiene toda la memoria para él solo, así que un proceso solo puede ver la memoria virtual que le han configurado, por el anillo en el que opera. No es que la memoria de los otros procesos esté protegida; es que para un proceso la memoria de los otros está fuera del espacio de direcciones. Si un proceso diese una batida a todas las direcciones de memoria, no sería capaz ni de referenciar una dirección de memoria de ajena a la suya.

El motivo de los pocos virus en Mac, por no decir ninguno está claro, Apple trabaja para esto

¿Por qué esto no se puede “Saltar”? 
Para modificar lo comentado –por ejemplo, generar puntos de entrada en anillo 0, modificar los vectores de interrupciones, modificar la memoria virtual, modificar la LGDT…– solo es posible desde el anillo 0.
 Es decir, para que un proceso pudiese tocar la memoria de otros procesos o del kernel, debería ser el propio kernel,  el hecho de que haya un único punto de entrada y que los parámetros se pasen por registros complica esto –de hecho, se pasa por registro hasta lo que se debe hacer, que se implementa luego como un case en la rutina de atención a la interrupción 80h–.
 Otro escenario es el caso de sistemas operativos con cientos de llamadas no documentadas al anillo 0, donde esto sí es posible –siempre puede quedar una llamada olvidada mal implementada sobre la que se pueda desarrollar una trampa–, pero en caso de un sistema operativo con un mecanismo de paso tan simple, no lo es.

TE RECOMENDAMOS:   ¿Hay alguien usando la cámara y el micrófono de mi Mac? [Incluye Encuesta]

Por ello, la arquitectura de memoria virtual impide este mecanismo de transmisión; ningún proceso –ni siquiera los que tienen privilegios de root– tienen forma de acceder a la memoria de otros. Podríamos argumentar que un proceso puede ver el kernel; lo tiene mapeado a partir de su dirección de memoria lógica 0xC0000000. Pero, por el anillo del procesador en el que se ejecuta, no puede modificarlo; generaría un error, ya que son zonas de memoria que pertenecen a otro anillo.

La “solución” sería un programa que modificara el código del kernel cuando es un fichero. Pero el hecho de que estos se recompilen, lo hace imposible. No se puede parchear el binario, simplemente con que al recompilarlo le hubiesen puesto o quitado algo al ejecutable del kernel, o le hubiesen cambiado el tamaño de alguna de las etiquetas que identifican la versión de compilación –algo que se hace incluso involuntariamente– el parche binario no se podría aplicar. La alternativa sería descargar el código fuente de Internet, parchearlo, configurarlo para el hardware apropiado, compilarlo, instalarlo y reiniciar la máquina. Todo esto lo debería hacer un programa, de forma automática. Todo un reto para el campo de la Inteligencia Artificial.
 Como vemos, ni siquiera un virus como root puede saltar esta barrera.

Conclusion:

A la pregunta ¿Existen vulnerabilidades en sistemas Linux? la respuesta es ciertamente sí. 
Nadie en su sano juicio lo duda; Linux no es OpenBSD. Otra cosa es la ventana de vulnerabilidad que tiene un sistema Linux que sea actualizado adecuadamente. Si nos preguntamos ¿existen herramientas para aprovechar estos agujeros de seguridad, y explotarlos? Pues también sí, pero eso no son virus, son exploits.

TE RECOMENDAMOS:   Los 115 mejores juegos para Mac OS X [Parte III] iOSMac

El virus debe saltar varias dificultades más que siempre se han puesto como un defecto/problema de Linux por los defensores de Windows, y que complican la existencia de virus reales –kernels que se recompilan, muchas versiones de muchas aplicaciones, muchas distribuciones, cosas que no pasan automáticamente de forma transparente al usuario, etc.–. Los teóricos “virus” actuales hay que instalarlos a mano desde la cuenta de root. Pero eso no puede ser considerado un virus.
 La verdad está en el código fuente.

Es difícil a un “autoproclamado” virus seguir nombrándolo de esa forma después de leer su código. Y si no sabéis leer código, una única medida de seguridad sencilla que os recomiendo: usad la cuenta de root solo para administrar la máquina, y mantener al día las actualizaciones de seguridad. 
Solamente con eso es imposible que os entren virus y muy poco probable que lo hagan gusanos o que alguien ataque vuestra máquina con éxito. En definitiva todo un reto para los programadores y a la pregunta ¿Por qué no hay virus en Mac y Linux?, podemos responder fácilmente: Hay que ser un experto al 100% en Unix para poder hacer un virus en Mac o Linux, dedicar muchísimas horas para desarrollarlo y en menos de 24 horas estaría resuelto el problema por parte de Apple.

Con todos estos datos, los hackers no ven sentido en desarrollar un virus para OS X, sería perder tiempo y dinero. Perderían el tiempo empleado en desarrollar el virus para Mac ya que Apple lo eliminaría de sus sistemas en pocas horas. Perderían dinero ya que si emplean ese tiempo en desarrollar un virus para Windows le sería más rentable económicamente.

TE RECOMENDAMOS:   Según IBM, un Mac es más económico que un PC

 .