Ваши конкретные вопросы
Я понимаю, что, очевидно, я могу заразиться вирусом, загрузив и выполнив .exe в Windows, но как я могу заразиться вирусом, просто зайдя на веб-сайт?
Ваш браузер постоянно выполняет код (он состоит из кода). Когда он загружает веб-страницы, этот код загружает и отображает произвольные данные (пиксели, символы и т.д.).
Код также данные (на уровне процессора).
Поскольку код - это данные, если ваш браузер пытается выполнить данные (независимо от того, какое расширение файла или формат), он может действительно работать (если он создан правильно).
Обычно ваш браузер не будет настолько глуп, чтобы пытаться запускать случайные данные, которые он скачал. Однако это может случиться.
Один из способов сделать это - сформировать данные таким образом, чтобы при чтении они "просачивались" и перезаписывали данные, составляющие исполняемую программу браузера. Для этого в браузере должна быть ошибка (чаще всего в этом случае допускается переполнение буфера).
Ваш браузер также запускает программы поверх веб-страниц. Javascript, как вы упомянули, является одним из таких типов кода. Но есть десятки. ActiveX, Flash, надстройки, сценарии обезжиривания и т.д. - это весь код, который вы запускаете при посещении веб-страниц. Этот код может содержать ошибки, которые вызывают нарушения безопасности.
Эти вирусы атакуют пользователей Windows, Mac и Linux или пользователи Mac/Linux защищены?
Ни одна из используемых нами платформ не застрахована от ошибок, поскольку все они используют процессоры, которые обрабатывают данные как код. Это просто, как работает наша существующая компьютерная архитектура.
Причина этого мифа заключается в том, что Mac и Linux имеют гораздо более низкий уровень внедрения по сравнению с компьютерами Windows (на уровне настольных компьютеров). Таким образом, программное обеспечение для настольных компьютеров на этих компьютерах не так часто становится целью для создателей вирусов.
Вирусы не происходят из-за магии или эволюции случайных ситуаций (как это делают биологические вирусы). Это программное обеспечение, написанное отдельными лицами или командами разработчиков. И они хотят ориентироваться на самую большую долю рынка, так же, как это делают обычные поставщики программного обеспечения.
Что касается того, может ли один вирус предназначаться для нескольких платформ; Все браузеры работают с разным кодом, поэтому будут иметь разные ошибки (даже один и тот же браузер на разных платформах). Но есть несколько библиотек кода, которые используются на разных платформах. Если такая библиотека содержит ошибку, возможно, что эксплойт может существовать на нескольких платформах.
Но, в зависимости от типа совершенной атаки, вирус, написанный для Mac не-Intel, может не работать на Intel Mac, и наоборот, потому что они имеют разные процессоры. Для разных процессоров данные, представляющие код, имеют другой формат.
Однако когда вы говорите о виртуальной машине или языке сценариев, атаки могут быть независимыми от платформы. Это приводит нас к следующему вопросу ...
Запрограммированы ли вирусы в JavaScript?
Некоторые вирусы есть. Информация, которую я изложил выше (об эксплойтах переполнения буфера), обычно использовалась бы как атака вне Javascript, но с тем же успехом могла бы применяться к вирусу, созданному для атаки на эксплойт в интерпретаторе Javascript.
Javascript также будет иметь свой собственный набор эксплойтов на рабочем уровне, превышающем переполнение буфера. Существует целый ряд способов атаковать любое программное обеспечение. Чем больше программное обеспечение (строки кода), тем больше вариантов пользовательского ввода (в данном случае типов кода) оно может получить, и тем больше ошибок оно может содержать.
Кроме того, чем более уязвимым является работающее программное обеспечение (например, программное обеспечение, работающее на сервере), тем уязвимее оно для атаки.
В общем, это называется поверхность атаки
Подвиги в общем
У Microsoft есть мнемоника для распространенных типов эксплойтов, и все они имеют свои интересные свойства и разные уровни программного обеспечения, на которое они могут атаковать - STRIDE, что означает:
Spoofing (of user identity)
Tampering
Repudiation
Information disclosure (privacy breach or Data leak)
Denial of Service (D.o.S.)
Elevation of privilege
Некоторые из них чаще используются в атаке на основе Javascript, чем другие, некоторые на серверах, некоторые на файлах данных (например, изображения).
Но безопасность - это большая и развивающаяся область. На самом деле слишком много информации, чтобы полностью ответить на все ваши вопросы.