Как я могу заразиться вирусом, просто посетив веб-сайт? [Дубликат]


47

Возможное дублирование:
может ли компьютер быть заражен вредоносным ПО через веб-браузер?

Общеизвестно, что вы можете заразиться вирусом, просто посетив веб-сайт. Но как это возможно?

Эти вирусы атакуют пользователей Windows, Mac и Linux, или пользователи Mac / Linux защищены?

Я понимаю, что, очевидно, я могу заразиться вирусом, загрузив и выполнив .exe в Windows, но как я могу заразиться вирусом, просто зайдя на веб-сайт?

Запрограммированы ли вирусы на JavaScript? (Это имеет смысл, так как это язык программирования, который работает локально.) Если это так, какие функции JavaScript чаще всего используются?


2
Чаще всего это сочетание различных технологий и утечек в безопасности браузеров.
Пауло Эберманн

Хороший вопрос, и ИМХО, поскольку это веб, он зависит от HTTP и больше не зависит от ОС, браузер имеет большее значение, чем ОС.
Кенан Д

Очень широкая тема, уязвимости браузера могут меняться по мере их обнаружения и варьироваться от браузера к браузеру.
Моав

1
По соответствующей заметке: superuser.com/questions/245096/…
BloodPhilia,

@LordCover: хотя первоначальная тактика паники может быть http, полезная нагрузка должна быть исполняемым файлом, предназначенным для конкретных систем, чтобы выйти за рамки простого раздражения и стать настоящим вирусом. Поскольку Linux и Mac не могут запускать exe (в любом случае, без помощи), а Win не может запускать исполняемые файлы, написанные для других ОС, она все еще зависит от ОС. Недавние хакерские фестивали показали, что Win7 сопоставим (и в некоторых отношениях лучше) Mac и Linux с точки зрения безопасности. В настоящее время большинство людей используют Windows, что делает ее популярной целью.
music2myear

Ответы:


24

Общеизвестно, что вы можете заразиться вирусом, просто посетив веб-сайт. Кто-нибудь может объяснить, как это возможно?

Примеры в паренсе. Существует ошибка в браузере (IE), интерпретаторе javascript или в плагине (например, flash или java). Эта ошибка приводит к выполнению кода - эта часть может быть действительно сложной, но она часто включает в себя ошибку «использование после освобождения» и манипулирование кучей .

Тогда у меня работает какой-то шеллкод. Код шелл-кода должен избегать любой защиты, которую имеет браузер - для ошибки V8 / Chrome вы должны выйти из песочницы chrome и победить DEP и ASLR. Для IE вам придется побить DEP и ASLR, а затем выйти из режима низкой целостности. Для Java вы должны ... ничего не делать - вы все золотые. (Вот почему было множество ошибок Java.)

Итак, теперь, когда у меня на вашем компьютере работает произвольный код, вы (я не администратор, не так ли?) Я могу скачать файл из Интернета и запустить его, удалив на вашем компьютере вредоносное ПО.

Запрограммированы ли вирусы на JavaScript? (Это имеет смысл, так как это язык программирования, который работает локально.) Если это так, какие функции JavaScript чаще всего используются?

Конкретно - нет. Javascript - это вектор атаки, который люди используют для поиска ошибки в браузере. Они также могут использовать Flash, Java или Silverlight в качестве вектора атаки. В случае с javascript они пишут javascript, чтобы вызвать ошибку браузера, а затем вирус в конечном итоге удаляется из Интернета.


4
Это неточно. Вирусы часто делают это, но не обязаны (скачать дополнительный код). Они могут иметь полезную нагрузку, встроенную в эксплойт на основе JavaScript. Эта полезная нагрузка будет ассемблерным кодом, но будет представлена ​​в виде JavaScript. Все зависит от ошибки и конкретной реализации эксплойта.
Мерлин Морган-Грэм

2
Вы только что написали, что у Java нет песочницы? Потому что это действительно в каждом браузере, о котором я знаю.
КарлФ

4
@CarlF: Нет, это не о песочнице Java (которая все еще существует). Речь идет об ошибках в Java - если они позволяют вырваться из песочницы, дополнительная защита (например, DEP) не позволяет остановить злоумышленника.
Слёске

3
Java - главная дыра в эксплойтах, она меня укусила дважды. Я отключаю его неукоснительно сейчас: superuser.com/questions/201613/…
Джефф Этвуд

2
@Merlyn Да, можно поместить всю полезную нагрузку в javascript и не загружать дополнительный код (например, все модули metasploit, такие как «Добавить дополнительного пользователя в систему» ​​или reverse_tcp). Но сложные вредоносные программы , как правило, используют шелл-код в javascript в качестве средства для обработки более сложного и более сложного кода. Все зависит от ошибки и эксплойта - вся логика и шелл-код могут быть в изображении, которое нарушает работу анализатора изображений - я просто говорю самый распространенный маршрут.
Том Риттер

14

К сожалению и порочно, существует множество способов, которыми это может произойти.

Вы абсолютно правы, удивляясь, что «читающее устройство», такое как браузер, может активно манипулировать вашей собственной системой (и причинять вред). Чтение книги не истощает ваш банковский счет, а открытие газеты не повредит вашим детям, так почему же открытие веб-сайта может сделать все это и даже больше?

Эта проблема возникает всякий раз, когда существует вероятность того, что ваша система может каким-либо образом выполнить чужие данные из Интернета, которые, как мы всегда должны предполагать, создаются с предельной злонамеренной целью.

Если вы просто сидите в командной строке и wget http://evil.com/hitme.phpнабираете, HTTP-клиент wget просто записывает двоичный дамп запроса на ваш диск, и ничего плохого не произошло (кроме, возможно, заполнения вашего диска). Но если вы введете адрес в свой браузер, ваш браузер сможет делать все, что захочет - отформатировать жесткий диск, отправить данные своей кредитной карты и т. Д. Вы должны довериться своему браузеру, чтобы он этого не делал. Большинство браузеров действительно стараются не делать этих плохих вещей, но мы, пользователи овец , требовали, чтобы браузеры могли делать все больше «хитрых трюков» и демонстрировать автоматическое поведение, основываясь на инструкциях из Интернета., Наши требования привели к созданию технологий исполнения кода на стороне клиента, таких как JavaScript и Flash, которые загружают произвольный, чужой, ненадежный, вредоносный код и исполняют его, все для нашего удовольствия.

Причина, по которой люди, которые придумали эти технологии, не были сразу же линчеваны, заключается в том, что: а) это заставило кроликов танцевать на наших экранах, и б) они утверждали, что они ввели достаточно проверок безопасности в конструкцию, чтобы предотвратить манипулирование произвольным вредоносным кодом локальная система (например, запрещение чтения / записи локальных дисков, чтение / запись в буфер обмена, поля формы чтения / записи в других вкладках).

К сожалению, подход к дизайну «сначала разрешить все, а затем повсеместно покрыть несколько плохих мест, о которых мы можем подумать», в корне ошибочен, и теперь мы сталкиваемся с бесконечным потоком новых способов, с помощью которых наши функции удобства на стороне клиента могут использоваться для компрометации наших систем.

Единственный умеренно безопасный выход - отключить JavaScript и плагины в вашем браузере. Безопасно, как в 1995 году.


6
Wget не является «безопасным», также как и драйверы, которые запускают ваш компьютер, и ни одна из систем уровня ядра. Существуют меры по снижению риска, но в конечном итоге каждый фрагмент кода потенциально подвергается атаке.
Мерлин Морган-Грэм

@Meryll: я пропустил целый класс проблем, а именно те, которые приходят из неисправного кода. Да, определенно существует угроза со стороны неработающих библиотек изображений, парсеров MP3-заголовков и тому подобного. Я не хотел идти слишком далеко. Я обнаружил, что проблемы, возникающие в связи с разработкой современных интернет-технологий, гораздо более актуальны для вопроса ОП.
Kerrek SB

1
@Kerrek: Их вопрос был «могу ли я заразиться вирусом от посещения веб-страницы», и вы сказали, что они не могут получить вирус от wget. Вы также говорите о доверии. Но вопрос не в том, «как я могу защитить себя», а в том, как «подвиг». Поверхность атаки, кажется, ваша главная точка зрения, и она великолепна, но затуманена этими неточностями и касательными.
Мерлин Морган-Грэм

3
Да, я немного упростил ... Я не хотел загромождать аргумент подробным "в принципе, в wget может быть ошибка, которая заставляет его вести себя неожиданно" в стороне. Ты прав конечно. Я подумал, что OP, кажется, новичок в этой области и хотел сосредоточиться на более фундаментальных и концептуальных проблемах нашего ИТ-сообщества, а не на проблемах, вызванных техническими ошибками.
Kerrek SB

-1 этот ответ не понимает проблему: «Наши требования привели к созданию технологий исполнения кода на стороне клиента, таких как JavaScript и Flash, которые загружают произвольный, чужой, ненадежный, вредоносный код и исполняют его, все для нашего удовольствия». - цель не состоит в том, чтобы загрузить произвольный код; и даже без них мы все равно будем получать вирусы из Интернета. Вы можете заразиться вирусом, открыв .jpg в виде краски или просмотрев фильм в VLC. Это не распространено, но это случилось раньше.
BlueRaja - Дэнни Пфлюгофт

11

В этих ответах, которые я действительно хочу обойти, я действительно хотел обойти эту проблему: причина, по которой вы можете получить вирус с веб-страницы, заключается в том, что в каком-то программном обеспечении, которое вы запускаете, есть ошибка - уязвимость безопасности .

На каждом этапе процесса создания программного обеспечения создатели Flash; вашего браузера; вашей операционной системы пытался убедиться, что случайный, вредоносный код из Интернета не может просто найти способ выполнить себя. К сожалению, сделать это сложно . Действительно сложно .

Так что, как и все люди, разработчики этого программного обеспечения обязаны ошибаться: анализатор HTML случайно перезаписывает один байт в стеке, когда вы заканчиваете HTML </p. Они случайно использовали signed intвместоunsigned int . JIT-компилятор javascript случайно пытается преобразовать индекс массива в нулевой указатель. Все эти уязвимости, а также миллионы других постоянно встречаются в программном обеспечении либо из-за недостатка знаний в области безопасности, либо из-за недосмотра, либо из-за простой ошибки. Программное обеспечение просто путь слишком сложен , чтобы поймать их всех.

Из-за этого операционные системы имеют встроенные механизмы для предотвращения повреждения системы, даже когда обнаружена уязвимость. Ваша ОС, вероятно, имеет DEP и ASLR . Программы могут иметь различные средства защиты, добавленные компилятором. Браузеры работают с меньшими привилегиями. Программы запускаются с помощью автоматического анализа и тестирования, которые могут выявить многие из этих уязвимостей.

Я хочу сказать , что никто не позволяет этому случиться, но невозможно разработать полностью безопасное программное обеспечение, как невозможно создать полностью безопасный сейф. Кто-то, у кого достаточно времени, знаний, денег и стимулов, всегда найдет способ взломать его. И проблема с этим сейфом заключается в том, что как только некоторые хакеры взломают его копию, они могут легко открывать другие копии по всему миру, не выходя из своей комнаты.


Но во многих случаях ошибка существует, потому что пользователи «требовали» ее. То есть спецификация для HTML3.14159 является дефектной в том смысле, что она допускает некоторые виды поведения, которые по своей природе рискованны. А дизайнеры сайтов используют особые функции, которые провоцируют такое поведение, требуя, чтобы дизайнеры браузеров реализовывали «фичуры» (или рискуют остаться в «войне браузеров»). Разработчик браузера, вероятно, пытается как-то смягчить рискованное поведение, и разработчики антивирусов накапливают дополнительные проверки, но что-то всегда проходит.
Даниэль Р Хикс

@DanH: У вас есть конкретные примеры дыр в безопасности, которые намеренно оставлены во всех браузерах, потому что пользователи этого требовали?
BlueRaja - Дэнни Пфлугхофт

Я не говорю, что дыры оставлены там намеренно. Скорее, плохие спецификации приводят к «рискованным» реализациям, и в слишком многих случаях реализация (очевидно) не доказуемо правильна с точки зрения безопасности. (И это не доказуемо правильно, потому что спецификация не включает его.)
Даниэль Р Хикс

Ах, да, информатика ... Наука в мире, где машины половину времени едут по неправильным дорогам с односторонним движением и телепортируются в противоположную сторону в другую половину.
Прорыв

8

Ваши конкретные вопросы

Я понимаю, что, очевидно, я могу заразиться вирусом, загрузив и выполнив .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, чем другие, некоторые на серверах, некоторые на файлах данных (например, изображения).

Но безопасность - это большая и развивающаяся область. Слишком много информации, чтобы полностью ответить на все ваши вопросы.


Когда вы имеете дело с интерпретированными (по сравнению со скомпилированными) языками, эксплойты обычно не зависят от архитектуры. Приложение (или вирус), скомпилированное для другой архитектуры процессора, просто не будет работать (если процессор не содержит слой совместимости).
Прорыв

@Breakthrough: они спрашивают "они запрограммированы в JavaScript?" не делает то, что я сказал, менее правдивым, особенно в том, что касается «как я могу заразиться вирусом, просто зайдя на сайт». Они задавали несколько вопросов, и то, что я описал, применимо к части вопроса, если не ко всему.
Мерлин Морган-Грэм

@Breakthrough: я добавил больше информации о Javascript, в частности, и угрозах в целом.
Мерлин Морган-Грэм

@Merlyn Morgan-Graham, я имел в виду именно то, что вы сказали: «... вирус, написанный для Mac не-Intel, может не работать на Intel Mac, и наоборот, потому что у них разные процессоры». и не весь ваш ответ.
Прорыв

1
@Merlyn Morgan-Graham «Причина этого мифа в том, что Mac и Linux имеют гораздо более низкие показатели внедрения по сравнению с Windows-машиной»
Lincity

7

Термин называется «Drive By Download»

Вот хороший пример того, как это происходит, когда вы ничего не делаете, кроме как посещаете веб-сайт.

Шнайдер сказал, что команда исследователей компании обнаружила на странице фрагмент JavaScript, который вставлял фрейм, указывающий на вредоносный сайт. Более тщательная проверка показала, что он использовал ранее неизвестный (0 дней) эксплойт IE, способный вывести из строя полностью исправленную версию этого браузера и выполнить вредоносный код. Однако 0-дневный срок был недолгим, так как вскоре Microsoft выпустила подробности об этой уязвимости.

Дальнейший анализ шелл-кода выявил незашифрованный URL-адрес, указывающий на известный вредоносный сервер, который был сохранен в репозитории M86 как эксплуатирующий известную уязвимость iepeers.dll, MS10-018.


+1 за то, что был единственным ответом на данный момент, чтобы использовать правильный термин.
Прорыв

3

Хитрость в том, что создатели вирусов / эксперты по безопасности находят лазейки в браузерах. Проще говоря, они находят дыру в безопасности браузера и могут использовать эту дыру, чтобы что-то сделать с вашей системой. Есть случаи, когда у Adobe Flash были дыры, и с конкретным кодом это можно было бы использовать. Есть также строки JavaScript, которые могут вызвать эти дыры в безопасности.

Тем не менее, если вы обновляете свой браузер, очень маловероятно, что вы заразитесь, просто посетив веб-сайт (загрузка файлов и их выполнение - другая история!)


В каждой части программного обеспечения есть ошибки безопасности. Не все из них найдены. Например, в Microsoft Paint долгое время была неприятная ошибка, которую можно было легко воспроизвести (в течение нескольких минут), просто выбрасывая случайно сгенерированные данные в виде «изображений» в диалоге «file-> open».
Мерлин Морган-Грэм,

Ну, я уверен, что где-то написано какое-то программное обеспечение без ошибок безопасности. (Я думаю, что я, возможно, написал один или два сам.) Но у вас есть хорошая точка зрения. Около 35 лет назад кто-то продемонстрировал десятки ошибок в Unix, просто вводя случайные символы в анализатор команд оболочки. Разбился аппарат за считанные минуты.
Даниэль Р Хикс

2

Вирусы, подобные тем, которые заражают вас при посещении веб-сайта, используют уязвимость в системе посещений. Например, браузер или плагин могут иметь недостаток в программировании, так что изображение может быть разрешено (случайно, с точки зрения разработчика браузера) выполнить произвольную команду на посещающем компьютере.

Таким образом, предположительно каждая операционная система является потенциальной жертвой, но разработчики вирусов обычно создают свои атаки исходя из эффекта масштаба - чем больше пользователей, тем лучше. Вот почему Windows и Internet Explorer чаще становятся мишенями.

Любая часть браузера или плагина может быть поражена вирусом. Вышеупомянутый образ «это вызвало вирус» был реальным примером. Вспышка является общей целью. Движок JavaScript в браузерах тоже. Есть много разных вещей, которые могут пойти не так.

Лучше всего запустить качественный антивирусный сканер. Я использовал NOD32 от Eset . Кроме того, не нажимайте на что-то, если это слишком хорошо, чтобы быть правдой. Используйте NoScript в Firefox и AdBlock .


1

Эти вирусы атакуют пользователей Windows, Mac и Linux, или пользователи Mac / Linux защищены?

Если веб-сайту удается нарушить безопасность вашего браузера, он может испортить все, что принадлежит вам на компьютере. Однако, если он может повысить свои привилегии и получить административный доступ, тогда он может испортить что-нибудь в системе.

Давно считалось, что получить административные привилегии на компьютере с Unix (например, Linux, Mac или BSD) труднее, чем на Windows. Тем не менее, недавняя (с Windows Vista) модернизация функций безопасности от Microsoft, возможно, сделала Windows намного более безопасной, чем раньше - или, по крайней мере, это то, во что они бы поверили.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.