11

Я только что оцифровал пару пластинок и мне понадобилось немного обложки. Мой сканер недостаточно большой для сканирования альбома, поэтому я искал и загружал изображения из сети.

Когда я это сделал, Avast сообщил, что один из них содержал троян Win32:Hupigon-ONX, и немедленно поместил его в карантин. Не желая рисковать, я скачал другую копию, которая была чистой.

Было ли это просто ложным срабатыванием от Avast или действительно мог быть троян в jpg?

Если бы было, как это будет выполнено?

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

4 ответа4

11

Эксплойты в файлах изображений используют недостатки переполнения буфера в коде обработки изображений ОС. Несколько лет назад в слое GDI Windows было несколько существенных таких недостатков - патчи были выпущены давно, но эксплойт-образы все еще существуют либо только потому, что они остались, либо в надежде, что они попали в машину, которая еще не была исправлена. ,

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

Современные процессоры имеют защиту, которая останавливает большинство этих эксплойтов, если код поддерживает это. Это работает программой / библиотекой, явно помечающей, какие из ее страниц являются данными, а какие - кодом - тогда ЦП вызовет исключение, если что-либо в данных, таких как данные (например, данные изображения), попытается выполнить как код. IIRC Vista и более поздние версии и последние версии .Net перенастроили все свои библиотеки для поддержки этой защиты, и она поддерживается и другими ОС, но это не останавливает все такие эксплойты и работает, только если явно включено (в противном случае много старого кода сломалось бы).

9

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

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

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

Например:

http://www.microsoft.com/technet/security/bulletin/MS04-028.mspx

http://secunia.com/advisories/35216/

И для объяснения, как это позволяет выполнение кода:

https://stackoverflow.com/questions/460519/how-are-buffer-overflows-used-to-exploit-computers

3

Был эксплойт, который делал переполнение буфера в битой библиотеке JPEG, которая могла выполнить произвольный код в 2006 году. Microsoft выпустила патч, чтобы исправить это быстрее, чем я когда-либо видел. Ваша машина почти наверняка не уязвима, и Hupigon только сейчас генерирует слишком много ложных срабатываний.

http://www.microsoft.com/security/portal/Threat/Encyclopedia/Entry.aspx?name=Win32/Hupigon

2

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

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

Самым простым решением для этого будет загрузка файла типа «image.jpg.exe» или чего-то подобного вместо реального изображения.

Более продвинутые способы заражения вашего ПК уже были описаны здесь (например, Переполнение буфера,...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .