Vous avez raison d'accéder au système de fichiers et à Internet, en particulier parce que le dossier de départ est mappé avec une autorisation d'écriture par défaut. Cela implique qu'il peut perturber vos documents également, par exemple en ajoutant des macros aux documents Open Office, en supprimant vos fichiers mp3 ou en envoyant des fichiers intéressants à quelqu'un sur Internet.
Et oui, il peut écrire sur votre profil Firefox et installer un module complémentaire .
La connexion à Internet signifie qu'il peut récupérer des commandes à partir d'un serveur C&C pour transformer votre ordinateur en drone.
Je suppose que certains logiciels malveillants ne parviendront pas à trouver ces emplacements en dehors des dossiers Windows standard. Mais d'autres vont simplement analyser tous les lecteurs pour les endroits intéressants.
Théoriquement, oui.
Tout d'abord, un peu de contexte sur Wine. Wine fournit un chargeur d'exécutables pour exécuter des exécutables Windows. Un gestionnaire binfmt décrit ici est également installé ou utilisé en option, c'est ainsi que le noyau linux déduit le chargeur à exécuter - par exemple, quelque part dans le noyau se trouve un gestionnaire binfmt pour les fichiers ELF pour Linux. Les appels de fonction de ces exécutables sont ensuite traduits par le runtime Wine en leurs appels système Linux équivalents. La FAQ Wine traite de la question de wine comme émulateur.
Donc, revenons à votre question :un logiciel malveillant Windows pourrait-il infecter une machine Linux ? J'ai dit oui en théorie - voici les différentes menaces auxquelles vous faites face :
- Bogues dans les gestionnaires de format. Si un exécutable spécialement conçu provoque le chargement incorrect du fichier PE par Wine, vous pourrez peut-être l'exploiter.
- Bogues dans la traduction des fonctions de Wine. C'est la même chose que de dire "bogues dans l'API Windows", si vous voulez - si certaines fonctions traduites dans Wine sont sensibles aux débordements de tampon, etc., alors elles peuvent être exploitées.
- Le fait que les appels de fonction soient traduits. Ce fait en soi signifie qu'une activité malveillante peut se produire.
- La configuration et les limites de l'installation de Wine. Quels systèmes de fichiers avez-vous mappés ? L'exécutable peut-il échapper à ce "chroot" ?
Il y a une condition clé ici - être conscient ou planifier d'infecter Wine. Si un logiciel malveillant est écrit dans l'espoir qu'il puisse être exécuté sur Wine, il peut alors commencer à utiliser des exploits spécifiques à Wine, en détectant éventuellement que Z:est mappé sur / et en effectuant les actions appropriées. Les points précédents de ma liste ci-dessus sont les moins probables, mais aussi les plus dommageables s'ils se produisent.
Cependant, la plupart des logiciels malveillants ne sont pas écrits pour Wine. Vous pouvez presque considérer Wine comme une cible de construction distincte, car la façon dont il implémente l'API Windows est différente de la façon dont Windows implémente l'API. La plupart des logiciels malveillants visent directement Windows, donc je m'attendrais à ce que les dommages ne se produisent que sur l'installation "Windows". En effet, certains logiciels malveillants peuvent ne pas s'exécuter, là où les développeurs de Wine ont supposé une utilisation stricte d'une fonction API et où Windows autorise quelque chose de différent.
Donc, pour faire court, Wine augmente considérablement votre surface d'attaque en vous permettant d'exécuter des programmes Windows arbitraires. Les mêmes règles générales s'appliquent à Wine qu'à n'importe quel logiciel :
- En avez-vous besoin ? Sinon, ne l'installez pas.
- Est-il à jour ? Sinon, mettez-le à jour.
- Faites attention à ce que vous courez avec. Cela ne remplace pas la prudence avec ce que vous téléchargez, accédez et exécutez.
Cela fait longtemps que je n'ai pas fait d'exceptions structurées en C (spécifiques à MS mais émulées sur Wine), mais la syntaxe est proche de celle-ci. Quelqu'un qui l'utilise pourrait s'amuser même si Z n'est pas mappé.
bool isLinux = 0;
__try {
asm {
mov AL, 172
int 80h
}
isLinux = 1;
} __except {}
if (isLinux)
asm {
/* Linux shellcode here */
}