Comment puis-je attraper un virus simplement en visitant un site Web? [dupliquer]

47

Duplication possible:
un ordinateur peut-il être infecté par un logiciel malveillant via un navigateur Web?

Il est de notoriété publique que vous pouvez contracter un virus simplement en visitant un site Web. Mais comment est-ce possible?

Ces virus attaquent-ils les utilisateurs de Windows, Mac et Linux ou les utilisateurs de Mac / Linux sont-ils immunisés?

Je comprends que je peux évidemment attraper un virus en téléchargeant et en exécutant un fichier .exe dans Windows, mais comment puis-je attraper un virus simplement en accédant à un site Web?

Les virus sont-ils programmés en JavaScript? (Cela aurait du sens puisqu'il s'agit d'un langage de programmation qui s'exécute localement.) Si oui, quelles fonctions JavaScript sont celles couramment utilisées?

Communauté
la source
2
Il s'agit le plus souvent d'une combinaison de diverses techniques et de fuites de sécurité des navigateurs.
Paŭlo Ebermann le
Bonne question, et à mon humble avis, comme il s’agit de Web, cela dépend de HTTP et n’est plus affecté par le système d’exploitation, mais le navigateur importe plus que le système d’exploitation.
Kenan D
Sujet très large, les vulnérabilités du navigateur peuvent changer au fur et à mesure de leur découverte et varier d’un navigateur à l’autre.
Moab
1
Sur une note associée: superuser.com/questions/245096/…
BloodPhilia
@LordCover: bien que les tactiques d'effarouchement initiales puissent être http, la charge utile doit être un exécutable destiné à des systèmes spécifiques afin de dépasser le simple désagrément et de devenir un véritable virus. Étant donné que Linux et Mac ne peuvent pas exécuter d'exe (sans aide, de toute façon) et que Win ne peut pas exécuter d'exécutable écrit pour les autres systèmes d'exploitation, il s'agit toujours d'un système dépendant du système d'exploitation. Les récents concours de hack ont ​​montré que Win7 était comparable (et à certains égards, meilleur que) Mac et Linux en ce qui concerne la sécurité. Actuellement, c’est toujours le fait que la plupart des gens utilisent Windows qui en fait une cible populaire.
music2myear

Réponses:

24

Il est de notoriété publique que vous pouvez contracter un virus simplement en visitant un site Web. Quelqu'un peut-il expliquer comment cela est possible?

Exemples en parens. Il y a un bug dans le navigateur (IE), l'interpréteur javascript ou dans un plugin (comme flash ou java). Ce bogue conduit à l'exécution de code - cette partie peut être très compliquée, mais elle implique souvent un bogue use-after-free et une manipulation de tas .

Ensuite, j'ai un shellcode en cours d'exécution. Le shellcode doit échapper aux protections dont dispose le navigateur - pour un bogue V8 / Chrome, vous devez échapper au bac à sable de Chrome et vaincre DEP et ASLR. Pour IE, vous devez battre DEP et ASLR, puis sortir du mode de faible intégrité. Pour Java, vous devez ... ne rien faire - vous êtes tous d'or. (C'est pourquoi il y a eu une vague de bugs Java.)

Alors maintenant que j'ai du code arbitraire sur votre machine, car vous (vous ne travaillez pas en tant qu'administrateur, n'est-ce pas?), Je peux télécharger un fichier sur Internet et l'exécuter en supprimant des logiciels malveillants sur votre machine.

Les virus sont-ils programmés en JavaScript? (Cela aurait du sens puisqu'il s'agit d'un langage de programmation qui s'exécute localement.) Si oui, quelles fonctions JavaScript sont celles couramment utilisées?

Plus précisément - non. Javascript est un vecteur d'attaque que les gens vont utiliser pour trouver un bug dans un navigateur. Ils pourraient également utiliser Flash, Java ou Silverlight comme vecteur d’attaque. Dans le cas de javascript, ils écrivent du javascript pour déclencher le bogue du navigateur, puis le virus est finalement extrait d'Internet.

Tom Ritter
la source
4
C'est inexact. Les virus le font souvent, mais ne sont pas obligés de (télécharger du code supplémentaire). Ils peuvent avoir une charge intégrée dans l'exploit basé sur javascript. Cette charge serait un code d'assemblage, mais serait présenté en javascript. Tout dépend du bogue et de l'implémentation de l'exploit spécifique.
Merlyn Morgan-Graham le
2
Vous venez d'écrire que Java n'a pas de bac à sable? Parce que c'est le cas dans tous les navigateurs dont je suis conscient.
CarlF
4
@CarlF: Non, il ne s'agit pas du sandbox Java (qui existe toujours). Il s’agit de bogues en Java - s’ils vous permettent de sortir du sandbox, il n’ya que peu de sécurité supplémentaire (telle que la PED) pour arrêter un attaquant.
Sleske
3
Java est un exploit majeur, il m'a mordu deux fois. Je le désactive religieusement maintenant: superuser.com/questions/201613/…
Jeff Atwood Le
2
@ Merlyn Oui, il est possible de mettre toute la charge utile en javascript et de ne pas télécharger de code supplémentaire (par exemple tous les modules de métasploit tels que "Ajouter un utilisateur supplémentaire au système" ou reverse_tcp). Mais les logiciels malveillants sophistiqués utilisent généralement le shellcode en javascript comme un stager pour extraire du code plus complexe et plus sophistiqué. Tout dépend du bogue et de l'exploit - toute la logique et le shellcode peuvent se trouver dans une image qui désactive un analyseur d'image - je dis simplement l'itinéraire le plus courant.
Tom Ritter le
14

Malheureusement et perversement, cela pourrait se produire de différentes manières.

Vous avez absolument raison de vous étonner qu'un "lecteur", comme un navigateur, puisse manipuler activement votre propre système (et faire du mal). Lire un livre n'épuise votre compte bancaire et ouvrir un journal ne fait pas de mal à vos enfants, alors pourquoi l'ouverture d'un site Web peut-elle faire tout cela et plus encore?

Le problème se produit chaque fois qu'il est possible que des données étrangères provenant d'Internet, dont nous devons toujours supposer qu'elles ont été conçues avec la plus grande intention malveillante, parviennent en quelque sorte à être exécutées par votre système.

Si vous restez sur la ligne de commande et que vous tapez wget http://evil.com/hitme.php, le client HTTP wget écrira simplement un dump binaire de la demande sur votre disque et rien de mal ne s’est produit (à part peut-être que votre disque se remplit). Mais si vous tapez l'adresse dans votre navigateur, celui-ci est libre de faire ce qu'il veut : formater votre disque dur, envoyer les détails de votre carte de crédit, etc. C'est à vous de faire confiance à votre navigateur pour ne pas le faire. La plupart des navigateurs tentent en effet de ne pas faire ces mauvaises choses, mais nous, les utilisateurs de moutons , avons exigé que les navigateurs soient capables de faire de plus en plus "d'astuces intelligentes" et d'afficher un comportement automatique basé sur les instructions fournies par Internet.. Nos demandes ont conduit à la création de technologies d’exécution de code côté client telles que JavaScript et Flash, qui téléchargent du code arbitraire, étranger, non fiable, malveillant et l’exécutent, le tout pour notre plus grand plaisir.

La raison pour laquelle les concepteurs de ces technologies n’ont pas été immédiatement lynchés, c’est parce que a) les lapins ont dansé sur nos écrans et b) ils ont affirmé avoir mis suffisamment de contrôles de sécurité dans la conception pour empêcher le code malveillant arbitraire de manipuler le système local (par exemple, ne pas autoriser la lecture / écriture des disques locaux, lire / écrire le presse-papiers, lire / écrire des champs de formulaire dans d'autres onglets).

Malheureusement, l’approche de conception consistant à «tout autoriser, puis à masquer de façon nuancée quelques problèmes que nous pouvons imaginer» est fondamentalement imparfaite, et nous sommes maintenant confrontés à un flot ininterrompu de nouvelles façons dont nos fonctionnalités de confort côté client peuvent être utilisé pour compromettre nos systèmes.

La seule solution modérément sûre consiste à désactiver JavaScript et les plugins dans votre navigateur. Coffre-fort comme nous étions en 1995.

Kerrek SB
la source
6
Wget n'est pas "sûr", pas plus que les pilotes qui exécutent votre machine, ni aucun système au niveau du noyau. Il existe des mesures d’atténuation, mais chaque élément de code est finalement susceptible d’être attaqué.
Merlyn Morgan-Graham le
@Meryll: J'omettais toute une classe de problèmes, à savoir ceux provenant d'un code défectueux. Oui, les bibliothèques d'images cassées, les analyseurs syntaxiques d'en-têtes MP3, etc., constituent une menace. Je ne voulais pas aller trop loin. J'ai trouvé les problèmes posés par la conception des technologies Internet modernes beaucoup plus pertinents pour la question du PO.
Kerrek SB
1
@Kerrek: Leur question était "puis-je contracter un virus en visitant une page Web", et vous avez poursuivi en affirmant qu'ils ne pouvaient pas contracter le virus de wget. Vous parlez aussi de confiance. Mais la question ne concerne pas "comment me protéger", mais plutôt "comment exploiterait-il un travail". La surface d’attaque semble être votre point principal, ce qui est excellent, mais obscurci par ces inexactitudes et ces tangentes.
Merlyn Morgan-Graham le
3
Ouais, je simplifiais un peu ... Je ne voulais pas encombrer l'argument d'un "en principe, il pourrait y avoir une faute dans wget qui provoque un comportement inattendu". Tu as raison bien sûr. Je pensais que le PO semblait être nouveau sur le terrain et je voulais me concentrer sur les problèmes plus fondamentaux et conceptuels de notre société informatique plutôt que sur des problèmes dus à des défauts techniques.
Kerrek SB
-1 cette réponse ne comprend pas le problème: "Nos demandes ont conduit à la création de technologies d'exécution du code côté client telles que JavaScript et Flash, qui téléchargent du code arbitraire, étranger, non fiable, malveillant et l'exécutent, le tout pour notre plus grand plaisir." - le but n'est pas de télécharger du code arbitraire; et même sans cela, nous aurions toujours des virus provenant d’Internet. Vous pouvez contracter un virus en ouvrant un fichier .jpg dans la peinture ou en regardant un film dans VLC. Ce n'est pas commun, mais c'est déjà arrivé.
BlueRaja - Danny Pflughoeft Le
11

Le point qui a vraiment été éludé dans ces réponses, que je veux vraiment vaincre chez moi, est le suivant: la raison pour laquelle un virus peut provenir d’une page Web est qu’un logiciel que vous utilisez présente un bogue - une faille de sécurité .

À chaque étape du processus de création du logiciel, les créateurs de Flash; de votre navigateur de votre système d’exploitation ont tenté de s’assurer que des codes malveillants aléatoires d’Internet ne permettent pas de trouver un moyen de s’exécuter. Malheureusement, c'est difficile . Vraiment dur .

Ainsi, comme tous les humains, les développeurs de ce logiciel sont tenus de commettre des erreurs: l'analyseur HTML écrase accidentellement un octet dans la pile lorsque vous terminez le code HTML </p. Ils ont accidentellement utilisé un signed intau lieu d'ununsigned int . Le compilateur JIT javascript tente accidentellement de déréférencer un tableau-index en un pointeur nul. Toutes ces vulnérabilités, ainsi que des millions d'autres, apparaissent constamment dans les logiciels, soit par manque de connaissances en matière de sécurité, soit par inadvertance, soit même par une simple erreur. Le logiciel est tout simplement façon trop complexe pour les attraper tous.

De ce fait, les systèmes d’exploitation disposent de mécanismes intégrés pour éviter d’endommager le système, même en cas de découverte d’une vulnérabilité. Votre système d'exploitation a probablement DEP et ASLR . Les programmes peuvent avoir diverses protections ajoutées par le compilateur. Les navigateurs fonctionnent à des niveaux inférieurs. Les programmes sont exécutés via des analyses et des tests automatiques capables de détecter un grand nombre de ces vulnérabilités.

Ce que je veux dire, c'est que personne ne le laisse faire - mais il est impossible de concevoir un logiciel entièrement sécurisé, tout comme il est impossible de concevoir un coffre-fort totalement sécurisé. Quelqu'un qui dispose de suffisamment de temps, de connaissances, d'argent et d'incitatifs trouvera toujours le moyen de le résoudre. Et le problème avec ce coffre-fort est qu’une fois que des hackers ont ouvert leur copie, ils peuvent facilement en ouvrir d’autres partout dans le monde sans quitter leur chambre.

BlueRaja - Danny Pflughoeft
la source
Mais dans de nombreux cas, le bogue existe parce que les utilisateurs l'ont "demandé". Par exemple, la spécification pour HTML3.14159 est défectueuse en ce qu'elle autorise certains comportements intrinsèquement risqués. Et les concepteurs de sites utilisent les fonctionnalités spécifiques qui provoquent ces comportements, obligeant les concepteurs de navigateurs à mettre en œuvre les "feechurs" (sinon ils risquent de rester dans la "guerre des navigateurs"). Le concepteur de navigateur tente probablement d’atténuer les comportements à risque, et les développeurs d’antivirus accumulent des vérifications supplémentaires, mais quelque chose passe toujours.
Daniel R Hicks
@DanH: Avez-vous des exemples spécifiques de failles de sécurité intentionnellement laissées dans tous les navigateurs, parce que les utilisateurs le demandent?
BlueRaja - Danny Pflughoeft Le
Je ne dis pas que les trous y sont laissés intentionnellement. Au lieu de cela, de mauvaises spécifications conduisent à des implémentations "risquées", et dans trop de cas l'implémentation n'est (évidemment) pas prouvée correcte, du point de vue de la sécurité. (Et ce n'est pas prouvé, car les spécifications ne le permettent pas.)
Daniel R Hicks Le
Ah oui, l'informatique ... La science dans le monde où des voitures roulent dans le mauvais sens dans une rue à sens unique la moitié du temps et se téléportent à l'autre bout de l'autre côté.
Percée
8

Vos questions spécifiques

Je comprends que je peux évidemment attraper un virus en téléchargeant et en exécutant un fichier .exe dans Windows, mais comment puis-je attraper un virus simplement en accédant à un site Web?

Votre navigateur exécute du code tout le temps (il est composé de code). Lorsqu'il télécharge des pages Web, ce code télécharge et affiche des données arbitraires (pixels, caractères, etc.).

Le code est également des données (au niveau du processeur).

Comme le code est constitué de données, si votre navigateur tente d’exécuter les données (quelle que soit l’extension ou le format du fichier), il se peut qu’il s’exécute réellement (s’il est conçu correctement).

Normalement, votre navigateur ne sera pas assez stupide pour essayer d'exécuter des données aléatoires qu'il a téléchargées. Cependant, cela peut arriver.

Une façon de procéder consiste à former les données de manière à ce que, une fois lues, elles «fuient» et écrasent les données constituant le programme exécutable du navigateur. Ceci nécessite que le navigateur ait un bogue (le plus souvent dans ce cas, autorisant un dépassement de tampon ).

Votre navigateur exécute également des programmes sur des pages Web. Comme vous l'avez dit, Javascript est un de ces types de code. Mais il y en a des dizaines. ActiveX, Flash, les add-ons, les scripts Grease Monkey, etc. sont tous du code que vous exécutez lorsque vous visitez des pages Web. Ce code peut contenir des bogues causant des problèmes de sécurité.

Ces virus attaquent-ils les utilisateurs de Windows, Mac et Linux ou les utilisateurs de Mac / Linux sont-ils immunisés?

Aucune plate-forme que nous utilisons n'est totalement à l'abri des bugs, car ils utilisent tous des processeurs qui traitent les données comme du code. C’est simplement ainsi que fonctionne notre architecture informatique existante.

La raison de ce mythe est que les taux d’adoption des systèmes Mac et Linux sont bien inférieurs à ceux des ordinateurs Windows (au niveau du bureau). Les logiciels de bureau sur ces machines ne constituent donc pas une cible aussi courante pour les fabricants de virus.

Les virus ne surviennent pas par magie, ni par évolution aléatoire (comme les virus biologiques). C'est un logiciel écrit par des individus, ou des équipes de développeurs. Et ils veulent cibler la plus grande part du marché, de la même manière que les éditeurs de logiciels classiques.

Quant à savoir si un virus peut cibler plusieurs plates-formes; Tous les navigateurs utilisent un code différent, ils auront donc différents bogues (même le même navigateur sur différentes plates-formes). Cependant, certaines bibliothèques de code sont partagées sur plusieurs plates-formes. Si une telle bibliothèque contient le bogue, il est possible que l'exploit existe sur plusieurs plates-formes.

Toutefois, en fonction du type d’attaque, un virus écrit pour un Mac non-Intel peut ne pas fonctionner sur un Mac Intel, et inversement, car ils ont des processeurs différents. Pour différents processeurs, les données qui représentent le code ont un format différent.

Lorsque vous parlez d'une machine virtuelle ou d'un langage de script, les attaques peuvent être indépendantes de la plate-forme. Cela nous amène à la prochaine question ...

Les virus sont-ils programmés en JavaScript?

Certains virus sont. Les informations que j'ai mentionnées ci-dessus (sur les exploits de dépassement de tampon) seraient généralement utilisées comme une attaque en dehors de Javascript, mais pourraient également s'appliquer à un virus conçu pour attaquer un exploit dans un interpréteur Javascript.

Javascript aura également son propre ensemble d’exploits, à un niveau d’exploitation supérieur aux dépassements de mémoire tampon. Il existe une multitude de façons d’attaquer n’importe quel logiciel. Plus le logiciel est volumineux (lignes de code), plus il est susceptible de recevoir une variété d'entrées utilisateur (dans ce cas, des types de code), et plus il peut contenir de bugs.

En outre, plus un logiciel en cours d’exécution (par exemple un logiciel exécutant un serveur) est exposé, plus il est vulnérable aux attaques.

En général, cela s'appelle surface d'attaque

Exploits en général

Microsoft a un mnémonique pour les types d’exploit communs, et ils ont tous leurs propres propriétés intéressantes et différents niveaux de logiciels qu’ils peuvent attaquer - STRIDE , qui signifie:

Spoofing (of user identity)
Tampering
Repudiation
Information disclosure (privacy breach or Data leak)
Denial of Service (D.o.S.)
Elevation of privilege

Certains d'entre eux sont plus susceptibles d'être utilisés dans une attaque basée sur Javascript que d'autres, certains sur des serveurs, d'autres sur des fichiers de données (tels que des images).

Mais la sécurité est un domaine vaste et en évolution. Il y a vraiment trop d'informations pour répondre complètement à toutes vos questions.

Merlyn Morgan-Graham
la source
Lorsque vous utilisez des langages interprétés (plutôt que compilés), les exploits sont généralement indépendants de l'architecture. Une application (ou un virus) compilée pour une architecture de processeur différente ne s'exécutera tout simplement pas (sauf si le processeur contient une couche de compatibilité).
Percée
@ Breakthrough: Les demandant "sont-ils programmés en javascript?" ne rend pas ce que j'ai dit moins vrai, surtout lorsqu'il est appliqué à "comment puis-je attraper un virus simplement en accédant à un site Web". Ils ont posé plusieurs questions, et ce que j'ai décrit s'appliquait à une partie de la question, voire à la totalité.
Merlyn Morgan Graham
@Breakthrough: J'ai ajouté plus d'informations sur Javascript en particulier et sur les menaces en général.
Merlyn Morgan Graham
@ Merlyn Morgan-Graham, je faisais spécifiquement référence à lorsque vous avez dit "... un virus écrit pour un Mac autre qu'Intel peut ne pas fonctionner sur un Mac Intel, et vice-versa, car ils ont des processeurs différents." et pas toute votre réponse.
Percée
1
@ Merlyn Morgan-Graham "La raison de ce mythe est que Mac et Linux ont des taux d'adoption bien inférieurs à ceux d'une machine Windows"
Lincity le
7

Le terme s'appelle "Drive By Download"

Voici un bel exemple de la façon dont cela se passe sans que vous ne fassiez que visiter un site Web.

Schneider a déclaré que l'équipe de chercheurs de la société avait découvert sur la page un morceau de code JavaScript qui injectait un iframe pointant vers un site malveillant. Une inspection plus minutieuse a révélé qu'elle utilisait un exploit d'Internet Explorer inconnu auparavant (0 jour), capable de provoquer le crash d'une version entièrement corrigée de ce navigateur et l'exécution de code malveillant. Le 0 jour a cependant été de courte durée, car Microsoft a bientôt publié des détails sur la vulnérabilité.

Une analyse plus poussée du shellcode a révélé une URL en texte clair pointant vers un serveur malveillant connu, qui a été stockée dans le référentiel de M86 pour avoir exploité la vulnérabilité bien connue de iepeers.dll, MS10-018.

Moab
la source
+1 pour être la seule réponse jusqu'ici pour utiliser le terme approprié.
Percée
3

L'astuce est que les fabricants de virus et les experts en sécurité trouvent des failles dans les navigateurs. En termes simples, ils trouvent un trou dans la sécurité du navigateur et ils peuvent utiliser ce trou pour faire quelque chose pour votre système. Il y a des cas où Adobe Flash avait des trous et avec un code spécifique, il pourrait être exploité. Il existe également des chaînes javascript qui peuvent déclencher ces failles de sécurité.

Néanmoins, si vous maintenez votre navigateur à jour, il est très peu probable que vous soyez infecté simplement en visitant un site Web (télécharger des fichiers et les exécuter est une autre histoire!)

Roger Far
la source
Il existe des problèmes de sécurité dans chaque logiciel existant. Tous ne sont pas retrouvés. Microsoft Paint a longtemps eu un méchant bogue facile à reproduire (en quelques minutes) en jetant simplement des données générées aléatoirement sous la forme "d'images" dans la boîte de dialogue "fichier-> ouvrir".
Merlyn Morgan Graham
Eh bien, je suis sûr qu’un certain logiciel a été écrit quelque part sans problèmes de sécurité. (Je pense que j'en ai peut-être écrit un ou deux.) Mais vous avez un bon point. Il y a environ 35 ans, quelqu'un a démontré des dizaines de bugs sous Unix en introduisant simplement des caractères aléatoires dans l'analyseur de commandes shell. Crashed la machine en quelques minutes.
Daniel R Hicks
2

Des virus comme ceux qui vous infectent en visitant un site Web exploitent une faille du système de visite. Par exemple, un navigateur ou un plug-in peut avoir une faille dans sa programmation, de sorte qu'une image peut être autorisée (accidentellement, du point de vue du développeur du navigateur) à exécuter une commande arbitraire sur l'ordinateur visiteur.

En tant que tel, chaque système d'exploitation est censé être une victime potentielle, mais les auteurs de virus définissent généralement leurs attaques en fonction d'économies d'échelle: plus il y a d'utilisateurs, mieux c'est. C'est pourquoi Windows et Internet Explorer sont plus souvent ciblés.

Toute partie d'un navigateur ou d'un plug-in peut être ciblée par un virus. L'image susmentionnée qui a provoqué un virus était un exemple réel. Flash est une cible commune. Le moteur JavaScript dans les navigateurs est aussi. Il y a beaucoup de choses différentes qui peuvent aller mal.

Votre meilleur pari est d’exécuter un scanner de virus de qualité. J'ai utilisé NOD32 par Eset . Aussi, ne cliquez pas sur quelque chose si c'est trop beau pour être vrai. Utilisez NoScript dans Firefox et AdBlock .

Bill Sempf
la source
1

Ces virus attaquent-ils les utilisateurs de Windows, Mac et Linux ou les utilisateurs de Mac / Linux sont-ils immunisés?

Si un site Web parvient à enfreindre la sécurité de votre navigateur, il risque de perdre tout ce qui vous appartient sur votre ordinateur. Cependant, s’il peut augmenter ses privilèges et obtenir un accès administratif, il pourrait alors s’en remettre à tout ce qui se trouve sur le système.

On a longtemps soutenu qu'il était plus difficile d'obtenir des privilèges d'administration sur une machine Unix (par exemple, Linux, Mac ou BSD) que sur Windows. Cependant, la récente refonte (à partir de Windows Vista) des fonctionnalités de sécurité de Microsoft a peut-être rendu Windows beaucoup plus sécurisé qu'auparavant - ou du moins, c'est ce qu'ils vous ont fait croire.

jpaugh
la source