¿Cómo puedo contraer un virus simplemente visitando un sitio web? [duplicar]


47

Posible duplicado:
¿Puede una computadora ser infectada por malware a través del navegador web?

Es de conocimiento común que puede contraer un virus simplemente visitando un sitio web. ¿ Pero cómo es esto posible?

¿Estos virus atacan a los usuarios de Windows, Mac y Linux, o son inmunes los usuarios de Mac / Linux?

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?

¿Los virus están programados en JavaScript? (Tendría sentido ya que es un lenguaje de programación que se ejecuta localmente). Si es así, ¿qué funciones de JavaScript son las que se usan comúnmente?


2
A menudo es una combinación de varias técnicas y fugas de seguridad de los navegadores.
Paŭlo Ebermann

Buena pregunta, y en mi humilde opinión, ya que es web, depende de HTTP y ya no se ve afectado por el sistema operativo, el navegador importa más que el sistema operativo.
Kenan D

Tema muy amplio, las vulnerabilidades del navegador pueden cambiar a medida que se descubren y varían de un navegador a otro.
Moab

1
En una nota relacionada: superuser.com/questions/245096/...
BloodPhilia

@LordCover: aunque las tácticas iniciales de miedo pueden ser http, la carga útil debe ser un ejecutable dirigido a sistemas específicos para ir más allá de una simple molestia y convertirse en un verdadero virus. Debido a que Linux y Mac no pueden ejecutar exe (sin ayuda, de todos modos) y Win no puede ejecutar ejecutables escritos para los otros sistemas operativos, sigue siendo un sistema dependiente del sistema operativo. Los recientes hack-fests han demostrado que Win7 es comparable (y de alguna manera, mejor que) Mac y Linux con respecto a la seguridad. Actualmente, sigue siendo el hecho de que la mayoría de las personas ejecutan Windows lo que lo convierte en un objetivo popular.
music2myear

Respuestas:


24

Es de conocimiento común que puede contraer un virus simplemente visitando un sitio web. ¿Alguien puede explicar cómo es esto posible?

Ejemplos en parens. Hay un error en el navegador (IE), el intérprete de JavaScript o en un complemento (como flash o java). Este error conduce a la ejecución del código; esa parte puede ser realmente complicada, pero a menudo implica una manipulación de errores y montón de uso libre .

Luego tengo un shellcode funcionando. El shellcode debe escapar de cualquier protección que tenga el navegador: para un error de V8 / Chrome tendrías que escapar del sandbox de Chrome y derrotar a DEP y ASLR. Para IE, tendrías que vencer a DEP y ASLR y luego salir del modo de baja integridad. Para Java tendrías que ... no hacer nada: eres todo dorado. (Es por eso que ha habido una serie de errores de Java).

Entonces, ahora que tengo código arbitrario ejecutándose en su máquina, como usted (no se está ejecutando como administrador, ¿no?), Puedo descargar un archivo de Internet y ejecutarlo, dejando caer algún malware en su máquina.

¿Los virus están programados en JavaScript? (Tendría sentido ya que es un lenguaje de programación que se ejecuta localmente). Si es así, ¿qué funciones de JavaScript son las que se usan comúnmente?

Específicamente - no. Javascript es un vector de ataque que la gente usará para encontrar un error en un navegador. También podrían usar Flash, Java o Silverlight como un vector de ataque. En el caso de javascript, escriben javascript para activar el error del navegador, y luego el virus finalmente se elimina de Internet.


44
Esto es inexacto. Los virus a menudo hacen eso, pero no es obligatorio (descargar código adicional). Pueden tener una carga útil integrada en el exploit basado en javascript. Esa carga útil sería un código de ensamblaje, pero se presentaría como javascript. Todo depende del error y de la implementación específica del exploit.
Merlyn Morgan-Graham

2
¿Acabas de escribir que Java no tiene sandbox? Porque realmente lo hace en todos los navegadores que conozco.
CarlF

44
@CarlF: No, no se trata del entorno limitado de Java (que todavía existe). Se trata de errores en Java: si estos le permiten salir del entorno limitado, hay poca seguridad adicional (como DEP) para detener a un atacante.
sleske

3
Java es un gran agujero de explotación, me ha mordido dos veces. Lo desactivo religiosamente ahora: superuser.com/questions/201613/…
Jeff Atwood

2
@ Merlyn Sí, es posible poner toda la carga útil en javascript y no descargar código adicional (por ejemplo, todos los módulos de metasploit como 'Agregar un usuario adicional al sistema' o reverse_tcp). Pero el malware sofisticado usualmente usará el shellcode en javascript como un stager para desplegar un código más complicado y sofisticado. Todo depende del error y la vulnerabilidad: toda la lógica y el código de shell pueden estar en una imagen que revienta un analizador de imágenes. Solo digo la ruta más común.
Tom Ritter

14

Desafortunadamente y perversamente, esto puede suceder de varias maneras.

Tiene toda la razón en sorprenderse de que un "dispositivo de lectura" como un navegador pueda manipular activamente su propio sistema (y dañarlo). Leer un libro no agota su cuenta bancaria y abrir un periódico no perjudica a sus hijos, entonces, ¿por qué abrir un sitio web puede hacer todo eso y más?

El problema se produce siempre que existe la posibilidad de que los datos extranjeros de Internet, que siempre debemos suponer que están diseñados con la mayor intención maliciosa, de alguna manera logran ser ejecutados por su sistema.

Si solo se sienta en la línea de comando y escribe wget http://evil.com/hitme.php, el cliente HTTP wget simplemente escribirá un volcado binario de la solicitud en su disco y no habrá sucedido nada malo (aparte de que tal vez su disco se esté llenando). Pero si escribe la dirección en su navegador, su navegador es libre de hacer lo que quiera : formatear su disco duro, enviar los detalles de su tarjeta de crédito, etc. Depende de usted confiar en su navegador para no hacer eso. De hecho, la mayoría de los navegadores intentan no hacer esas cosas malas, pero nosotros, los usuarios de ovejas , hemos exigido que los navegadores puedan hacer cada vez más "trucos inteligentes" y exhibir un comportamiento automático basado en las instrucciones de Internet.. Nuestras demandas han llevado a la creación de tecnologías de ejecución de código del lado del cliente como JavaScript y Flash, que descargan código malicioso, extraño, no confiable y arbitrario y lo ejecutan, todo para nuestro placer.

La razón por la que las personas que idearon esas tecnologías no fueron linchadas de inmediato es porque a) hizo que los conejos bailaran en nuestras pantallas, yb) afirmaron que pusieron suficientes controles de seguridad en el diseño para evitar la manipulación del código malicioso arbitrario el sistema local (por ejemplo, no permite leer / escribir los discos locales, leer / escribir el portapapeles, leer / escribir campos de formulario en otras pestañas).

Desafortunadamente, el enfoque de diseño para "primero permitir todo y luego cubrir de manera irregular algunos puntos negativos en los que podemos pensar" es fundamentalmente defectuoso, y ahora nos enfrentamos a un flujo interminable de nuevas formas en las que nuestras funciones de conveniencia del lado del cliente pueden ser utilizado para comprometer nuestros sistemas.

La única salida moderadamente segura es deshabilitar JavaScript y complementos en su navegador. A salvo como estábamos en 1995.


66
Wget no es "seguro", ni los controladores que ejecutan su máquina, ni ninguno de los sistemas a nivel del núcleo. Hay mitigaciones, pero en última instancia, cada pieza de código está potencialmente sujeta a ataques.
Merlyn Morgan-Graham

@Meryll: Estaba omitiendo toda una clase de problemas, a saber, los que provienen de un código defectuoso. Sí, definitivamente existe una amenaza por las bibliotecas de imágenes rotas y los analizadores de encabezados MP3 y esas cosas. No quería ir muy lejos. Los problemas derivados del diseño de las tecnologías modernas de Internet me parecieron mucho más pertinentes a la pregunta del OP.
Kerrek SB

1
@Kerrek: Su pregunta era "¿puedo contraer un virus al visitar una página web?", Y usted dijo que no podían obtener un virus de wget. También hablas de confianza. Pero la pregunta no es "cómo me protejo", sino más bien "cómo funcionaría un exploit". La superficie de ataque parece ser su punto principal, que es excelente, pero está nublado por estas imprecisiones y tangentes.
Merlyn Morgan-Graham

3
Sí, estaba simplificando un poco ... No quería saturar el argumento con un detallado "en principio, podría haber una falla en wget que haga que se comporte inesperadamente" a un lado. Tienes razón, por supuesto. Pensé que el OP parece ser nuevo en el campo y quería centrarme en los problemas más fundamentales y conceptuales de nuestra sociedad de TI en lugar de los problemas debidos a fallas técnicas.
Kerrek SB

-1 esta respuesta no comprende el problema: "Nuestras demandas han llevado a la creación de tecnologías de ejecución de código del lado del cliente como JavaScript y Flash, que descargan código malicioso, extraño, no confiable y arbitrario y lo ejecutan, todo para nuestro placer". - la intención no es descargar código arbitrario; e incluso sin estos, todavía obtendríamos virus de Internet. Puede obtener un virus al abrir un .jpg en paint o al ver una película en VLC. No es común, pero ha sucedido antes.
BlueRaja - Danny Pflughoeft

11

El punto que realmente se ha eludido en estas respuestas, que realmente quiero vencer a casa, es esta: la razón por la que puede obtener un virus de una página web es que algún software que está ejecutando tiene un error, una vulnerabilidad de seguridad .

En cada paso del proceso de creación del software, los creadores de Flash; de su navegador; de su sistema operativo han tratado de asegurarse de que el código aleatorio y malicioso de Internet no pueda encontrar una manera de ejecutarse. Desafortunadamente, hacer esto es difícil . Muy duro .

Entonces, como todos los humanos, los desarrolladores de este software están obligados a cometer errores: el analizador HTML sobrescribe accidentalmente un byte en la pila cuando finaliza el html </p. Usaron accidentalmente un en signed intlugar de ununsigned int . El compilador JIT de JavaScript intenta accidentalmente desreferenciar un índice de matriz en un puntero nulo. Todas estas vulnerabilidades, además de millones más, ocurren todo el tiempo en el software, ya sea por falta de conocimiento de seguridad, por un descuido o incluso por un simple error. El software es simplemente manera demasiado compleja para atraparlos a todos.

Debido a esto, los sistemas operativos tienen mecanismos incorporados para evitar daños al sistema, incluso cuando se encuentra una vulnerabilidad. Su sistema operativo probablemente tenga DEP y ASLR . Los programas pueden tener varias protecciones agregadas por el compilador. Los navegadores funcionan con privilegios más bajos. Los programas se ejecutan mediante análisis y pruebas automáticas que pueden detectar muchas de estas vulnerabilidades.

Mi punto es que nadie permite que esto suceda, pero es imposible diseñar un software completamente seguro, al igual que es imposible diseñar una caja fuerte completamente segura. Alguien con suficiente tiempo, conocimiento, dinero e incentivos siempre encontrará una manera de abrirlo. Y el problema con esta caja fuerte es que, una vez que algunos piratas informáticos abren su copia, pueden abrir fácilmente otras copias en todo el mundo sin salir de su habitación.


Pero en muchos casos el error está ahí porque los usuarios lo "exigieron". Es decir, la especificación para HTML3.14159 es defectuosa ya que permite algunos comportamientos que son inherentemente riesgosos. Y los diseñadores de sitios usan las características específicas que provocan estos comportamientos, que requieren que los diseñadores de navegadores implementen los "feechurs" (o corren el riesgo de quedarse atrás en la "guerra de navegadores"). El diseñador del navegador probablemente intenta mitigar el comportamiento riesgoso de alguna manera, y los implementadores de antivirus acumulan controles adicionales, pero siempre pasa algo.
Daniel R Hicks

@DanH: ¿Tiene algunos ejemplos específicos de agujeros de seguridad que se dejan intencionalmente en todos los navegadores, porque los usuarios lo exigieron?
BlueRaja - Danny Pflughoeft

No estoy diciendo que los agujeros se hayan dejado allí intencionalmente. Por el contrario, las especificaciones deficientes conducen a implementaciones "arriesgadas", y en muchos casos la implementación (obviamente) no es demostrablemente correcta, desde el punto de vista de la seguridad. (Y no es demostrablemente correcto porque la especificación no lo habilita).
Daniel R Hicks

Ah sí, la informática ... La ciencia en el mundo donde hay automóviles que conducen en sentido contrario en una calle de sentido único la mitad del tiempo, y se teletransportan al extremo opuesto la otra mitad.
Avance

8

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.


Cuando se trata de lenguajes interpretados (en lugar de compilados), los exploits suelen ser independientes de la arquitectura. Una aplicación (o virus) compilada para una arquitectura de procesador diferente simplemente no se ejecutará (a menos que el procesador contenga una capa de compatibilidad).
Avance

@Breakthrough: Ellos preguntan "¿están programados en JavaScript?" no hace que lo que dije sea menos cierto, especialmente cuando se aplica a "cómo puedo obtener un virus simplemente accediendo a un sitio web". Hicieron varias preguntas, y lo que describí se aplicaba a parte de la pregunta, si no a toda.
Merlyn Morgan-Graham

@Breakthrough: agregué más información sobre Javascript específicamente y las amenazas en general.
Merlyn Morgan-Graham

@Merlyn Morgan-Graham, me refería específicamente a cuando dijo "... un virus escrito para una Mac que no sea Intel podría no funcionar en una Mac Intel, y viceversa, porque tienen procesadores diferentes". y no toda tu respuesta.
Avance

1
@Merlyn Morgan-Graham "La razón de este mito es que Mac y Linux tienen tasas de adopción mucho más bajas en comparación con la máquina Windows"
Lincity

7

El término se llama "Drive By Download"

Aquí hay un buen ejemplo de cómo sucede sin que hagas nada más que visitar un sitio web.

Schneider dijo que el equipo de investigadores de la compañía descubrió un fragmento de JavaScript en la página que estaba inyectando un iframe que apuntaba a un sitio malicioso. Una inspección más cercana reveló que estaba usando un exploit previamente desconocido (0 días) de IE capaz de bloquear una versión completamente parcheada de ese navegador y ejecutar código malicioso. Sin embargo, el día 0 duró poco, ya que Microsoft pronto publicó detalles sobre la vulnerabilidad.

Un análisis más detallado del shellcode reveló una URL de texto claro que apunta a un servidor malicioso conocido, que se almacenó en el repositorio de M86 como explotó la conocida vulnerabilidad iepeers.dll, MS10-018.


+1 por ser la única respuesta hasta ahora para usar el término apropiado.
Avance

3

El truco es que los creadores de virus / expertos en seguridad encuentran lagunas en los navegadores. En palabras simples, encuentran un agujero en la seguridad del navegador y pueden usar este agujero para hacer algo a su sistema. Hay casos en que Adobe Flash tenía agujeros y con un código específico podría explotarse. También hay cadenas de JavaScript que pueden desencadenar estos agujeros de seguridad.

Sin embargo, si mantiene actualizado su navegador, es muy poco probable que se infecte con solo visitar un sitio web (¡descargar archivos y ejecutarlos es otra historia!)


Hay errores de seguridad en cada pieza de software que existe. No todos se encuentran. Microsoft Paint tuvo un error desagradable durante mucho tiempo, por ejemplo, que fue fácilmente reproducible (en cuestión de minutos) simplemente arrojando datos generados aleatoriamente como "imágenes" en el cuadro de diálogo "archivo-> abrir".
Merlyn Morgan-Graham

Bueno, estoy seguro de que se ha escrito un poco de software en algún lugar sin errores de seguridad. (Creo que quizás he escrito uno o dos yo mismo). Pero tienes un buen punto. Hace unos 35 años, alguien demostró docenas de errores en Unix simplemente introduciendo caracteres aleatorios en el analizador de comandos de shell. Se estrelló la máquina en minutos.
Daniel R Hicks

2

Los virus como los que lo infectan al visitar un sitio web explotan una falla en el sistema de visitas. Por ejemplo, un navegador o un complemento puede tener una falla en su programación, por lo que se puede permitir que una imagen (accidentalmente, desde la perspectiva del desarrollador del navegador) ejecute un comando arbitrario en la computadora visitante.

Como tal, supuestamente cada sistema operativo es una víctima potencial, pero los creadores de virus generalmente enmarcan sus ataques en función de las economías de escala: cuantos más usuarios, mejor. Es por eso que Windows e Internet Explorer son los objetivos más frecuentes.

Cualquier parte de un navegador o complemento puede ser objetivo de un virus. La imagen mencionada que causó un virus fue un ejemplo real. Flash es un objetivo común. El motor de JavaScript en los navegadores también lo es. Hay muchas cosas diferentes que pueden salir mal.

Su mejor opción es ejecutar un escáner de virus de calidad. Usé NOD32 de Eset . Además, no hagas clic en algo si es demasiado bueno para ser verdad. Use NoScript en Firefox y AdBlock .


1

¿Estos virus atacan a los usuarios de Windows, Mac y Linux, o son inmunes los usuarios de Mac / Linux?

Si un sitio web se las arregla para romper la seguridad de su navegador, podría lodo con cualquier cosa que le pertenece a usted en el equipo. Sin embargo, si puede escalar sus privilegios y obtener acceso administrativo, podría arruinar cualquier cosa en el sistema.

Se ha sostenido durante mucho tiempo que es más difícil obtener privilegios administrativos en una máquina Unix (por ejemplo, Linux, Mac o BSD) que en Windows. Sin embargo, la reciente actualización (a partir de Windows Vista) de las características de seguridad de Microsoft puede haber hecho que Windows sea mucho más seguro que antes, o al menos, eso es lo que ellos creen.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.