web-dev-qa-db-fra.com

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

doublon 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?

48
Janet Jacobs

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 série 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 aller télécharger un fichier sur Internet et l'exécuter, en laissant tomber un malware 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.

24
Tom Ritter

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 ouvrir un site Web peut-il 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 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 le remplissage de votre disque). Mais si vous tapez l'adresse dans votre navigateur, votre navigateur est libre de faire ce qu'il veut - formatez votre disque dur, envoyez les détails de votre carte de crédit , etc. C'est à vous de faire confiance à votre navigateur de ne pas le faire. La plupart des navigateurs tentent en effet de ne pas faire ces mauvaises choses, mais nous, les moutonles utilisateurs ont exigé que les navigateurs soient capables de faire de plus en plus "d'astuces intelligentes" et d'afficher un comportement automatique basé sur des instructions provenant d'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 des codes arbitraires, étrangers, non fiables et malveillants et les exécutent. , tout pour notre plaisir.

La raison pour laquelle les personnes qui ont développé ces technologies n’ont pas été immédiatement lynchées, 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 fonctions 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.

14
Kerrek SB

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 vous pouvez contracter un virus sur une page Web est que certains logiciels que vous exécutez présentent 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, cela est difficile . Vraiment difficile .

Donc, comme tous les humains, les développeurs de ce logiciel sont tenus de faire des erreurs: l'analyseur HTML écrase accidentellement un octet dans la pile lorsque vous terminez le code HTML avec </p. Ils ont accidentellement utilisé un signed int au lieu d'un unsigned 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 trop complexe pour tous les attraper.

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 à travers des analyses automatiques et des tests pouvant attraper beaucoup de ces vulnérabilités.

Ce que je veux dire, c'est que personne ne laisse laisser cela arriver - mais il est impossible de concevoir un logiciel complètement sécurisé, tout comme il est impossible de concevoir un coffre-fort complètement 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 qu'un pirate a ouvert sa copie, il peut facilement en ouvrir d'autres à travers le monde sans quitter sa chambre.

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 fait 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.

Mais, en fonction du type d’attaque, un virus écrit pour un Mac non-Intel pourrait 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 foule 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.

8

Le terme s'appelle "Drive By Download"

Voici un bel exemple de ce qui 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’il utilisait un exploit auparavant inconnu (0 jour) de IE, capable de bloquer une version entièrement corrigée de ce navigateur et d’exécuter du 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 était stockée dans le référentiel de M86 comme exploitant la vulnérabilité bien connue de iepeers.dll, MS10-018.

7
Moab

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!)

3
Farlock85

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 en visite.

En tant que tel, chaque système d'exploitation est supposé ê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 .

2
Bill Sempf

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 . Toutefois, s’il parvient à augmenter ses privilèges et à obtenir un accès administratif, il risque de perdre quoi que ce soit sur le système.

On a longtemps soutenu qu'il était plus difficile d'obtenir des privilèges d'administrateur sur un ordinateur 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.

1
jpaugh