Sus preguntas específicas
Entiendo que obviamente puedo obtener un virus descargando y ejecutando un .exe en Windows, pero ¿cómo puedo obtener un virus simplemente accediendo a un sitio web?
Su navegador está ejecutando código todo el tiempo (está hecho de código). Cuando descarga páginas web, ese código se descarga y muestra datos arbitrarios (píxeles, caracteres, etc.).
El código también son datos (a nivel de procesador).
Dado que el código son datos, si su navegador intenta ejecutar los datos (sin importar la extensión o el formato del archivo), en realidad podría ejecutarse (si está diseñado correctamente).
Normalmente su navegador no será tan tonto como para intentar ejecutar datos aleatorios que descargó. Sin embargo, esto puede suceder.
Una forma de hacer esto es formar los datos de tal manera que cuando se lean, se "filtren" y sobrescriban los datos que conforman el programa ejecutable del navegador. Esto requiere que el navegador tenga un error (más comúnmente en este caso, lo que permite un desbordamiento del búfer ).
Su navegador también ejecuta programas en la parte superior de las páginas web. Javascript, como mencionó, es uno de esos tipos de código. Pero hay docenas. ActiveX, Flash, complementos, scripts de grease monkey, etc. son todos códigos que está ejecutando mientras visita páginas web. Este código puede contener errores que causan fallas de seguridad.
¿Estos virus atacan a los usuarios de Windows, Mac y Linux o son inmunes los usuarios de Mac / Linux?
Ninguna plataforma que usamos es completamente inmune a los errores, porque todos usan procesadores que tratan los datos como código. Así es simplemente cómo funciona nuestra arquitectura informática existente.
La razón de este mito es que Mac y Linux tienen tasas de adopción mucho más bajas en comparación con las máquinas con Windows (en el nivel de escritorio). Por lo tanto, el software de escritorio en estas máquinas no es un objetivo tan común para los creadores de virus.
Los virus no ocurren por magia, o por evolución de la posición de suceso (como lo hacen los virus biológicos). Es un software escrito por individuos o equipos de desarrolladores. Y quieren apuntar a la mayor participación de mercado, de la misma manera que lo hacen los vendedores de software habituales.
En cuanto a si un virus puede apuntar a múltiples plataformas; Todos los navegadores están ejecutando diferentes códigos, por lo que tendrán diferentes errores (incluso el mismo navegador en diferentes plataformas). Pero hay algunas bibliotecas de códigos que se comparten entre plataformas. Si dicha biblioteca contiene el error, es posible que el exploit pueda existir en múltiples plataformas.
Pero, dependiendo del tipo de ataque realizado, un virus escrito para una Mac que no sea Intel podría no funcionar en una Mac con Intel, y viceversa, porque tienen procesadores diferentes. Para diferentes procesadores, los datos que representan el código tienen un formato diferente.
Sin embargo, cuando habla de una máquina virtual o un lenguaje de secuencias de comandos, los ataques pueden ser independientes de la plataforma. Eso nos lleva a la siguiente pregunta ...
¿Los virus están programados en JavaScript?
Algunos virus son. La información que indiqué anteriormente (sobre exploits de desbordamiento de búfer) generalmente se usaría como un ataque fuera de Javascript, pero podría aplicarse igualmente a un virus diseñado para atacar un exploit en un intérprete de Javascript.
Javascript también tendrá su propio conjunto de exploits, a un nivel operativo que está por encima de los desbordamientos del búfer. Hay muchas maneras de atacar cualquier pieza de software. Cuanto más grande es el software (líneas de código), más variedades de entrada del usuario (en este caso, tipos de código) es probable que reciba y más errores puede contener.
Además, cuanto más expuesto es un software en ejecución (por ejemplo, un software que ejecuta un servidor), más vulnerable es al ataque.
En general, esto se llama superficie de ataque
Explotaciones en general
Microsoft tiene una mnemónica para los tipos de exploits comunes, y todos tienen sus propias propiedades interesantes y diferentes niveles de software que pueden atacar: STRIDE , que significa:
Spoofing (of user identity)
Tampering
Repudiation
Information disclosure (privacy breach or Data leak)
Denial of Service (D.o.S.)
Elevation of privilege
Es más probable que algunos de estos se usen en un ataque basado en Javascript que otros, algunos en servidores, algunos en archivos de datos (como imágenes).
Pero la seguridad es un campo grande y en evolución. Realmente hay demasiada información para responder completamente a todas sus preguntas.