Suas perguntas específicas
Entendo que obviamente obtenho um vírus baixando e executando um .exe no Windows, mas como posso obter um vírus apenas acessando um site?
Seu navegador está executando código o tempo todo (é feito de código). Ao baixar páginas da Web, esse código está baixando e exibindo dados arbitrários (pixels, caracteres, etc.).
Código também é dados (no nível do processador).
Como o código é um dado, se o navegador tentar executá-lo (independentemente da extensão ou formato do arquivo), ele poderá realmente ser executado (se criado corretamente).
Normalmente, seu navegador não será tão tolo a ponto de tentar executar dados aleatórios baixados. No entanto, isso pode acontecer.
Uma maneira de fazer isso é formar os dados de forma que, quando lidos, "vazem" e sobrescrevam os dados que compõem o programa executável do navegador. Isso requer que o navegador tenha um erro (mais comumente nesse caso, permitindo a saturação do buffer ).
Seu navegador também executa programas no topo das páginas da web. Javascript, como você mencionou, é um desses tipos de código. Mas existem dezenas. ActiveX, Flash, complementos, scripts de macaco de graxa, etc. são todos os códigos que você está executando enquanto visita páginas da web. Esse código pode conter bugs que causam culotes de segurança.
Esses vírus atacam usuários de Windows, Mac e Linux ou são imunes a usuários de Mac / Linux?
Nenhuma plataforma que usamos é completamente imune a bugs, porque todos eles usam processadores que tratam dados como código. É simplesmente assim que nossa arquitetura existente de computadores funciona.
A razão para esse mito é que o Mac e o Linux têm taxas de adoção muito mais baixas em comparação com as máquinas Windows (no nível da área de trabalho). Portanto, o software de desktop nessas máquinas não é um alvo tão comum para os fabricantes de vírus.
Os vírus não ocorrem por mágica ou por evolução da situação (como os vírus biológicos). É um software escrito por indivíduos ou equipes de desenvolvedores. E eles querem atingir a maior fatia do mercado, da mesma forma que os fornecedores regulares de software.
Quanto à possibilidade de um vírus atingir várias plataformas; Todos os navegadores estão executando código diferente, portanto, haverá bugs diferentes (mesmo o mesmo navegador em plataformas diferentes). Mas existem algumas bibliotecas de código que são compartilhadas entre plataformas. Se essa biblioteca contiver o erro, é possível que a exploração exista em várias plataformas.
Mas, dependendo do tipo de ataque realizado, um vírus criado para um Mac não-Intel pode não funcionar em um Mac Intel e vice-versa, porque eles têm processadores diferentes. Para processadores diferentes, os dados que representam o código têm um formato diferente.
Porém, quando você está falando de uma máquina virtual ou linguagem de script, os ataques podem ser independentes de plataforma. Isso nos leva à próxima pergunta ...
Os vírus estão programados em JavaScript?
Alguns vírus são. As informações que afirmei acima (sobre explorações de saturação de buffer) normalmente seriam usadas como um ataque fora do Javascript, mas poderiam igualmente se aplicar a um vírus criado para atacar uma exploração em um intérprete Javascript.
O Javascript também terá seu próprio conjunto de explorações, em um nível operacional acima da saturação de buffer. Existem várias maneiras de atacar qualquer parte do software. Quanto maior o software (linhas de código), mais variedades de entrada do usuário (nesse caso, tipos de código) provavelmente receberão e mais erros poderão conter.
Além disso, quanto mais exposto um software em execução (por exemplo, software executando um servidor), mais vulnerável é o ataque.
Em geral, isso é chamado de superfície de ataque
Façanhas em geral
A Microsoft possui um mnemônico para tipos comuns de exploração, e todos eles têm suas próprias propriedades interessantes e diferentes níveis de software que podem 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
Algumas delas têm mais probabilidade de serem usadas em um ataque baseado em Javascript do que outras, algumas em servidores e outras em arquivos de dados (como imagens).
Mas a segurança é um campo grande e em evolução. Há realmente muita informação para responder completamente a todas as suas perguntas.