Je lisais sur FireEye et suis tombé sur cet article NYTimes détaillant une discussion Skype où une image a été envoyée chargée de logiciels malveillants:
Citation:
Pour accéder aux informations sur les appareils ..., des pirates se sont fait passer pour des femmes sur Skype, ont identifié les types d'appareils que les cibles utilisaient et ont envoyé des photos chargées de logiciels malveillants.
La deuxième photo était un logiciel malveillant particulièrement puissant qui copiait des fichiers depuis l'ordinateur cible
Je sais que les données exif et les en-têtes IPTC existent dans les images et je suis presque sûr que vous pourriez fourrer des informations supplémentaires dans un fichier image en utilisant les informations d'en-tête de type Mim FileMagic, mais comment est-il possible d'incorporer du code exécutable dans un image?
Le format du fichier image était pif donc à moins que l'ordinateur n'ait une application qui ouvre le fichier et montre une image tout en exécutant secrètement du code, je ne vois pas comment c'est possible.
La réponse est simple. C'était pas une photo. Et .pif
est pas un format d'image. Comptez sur NYTimes pour fournir des informations techniques correctes.
Comme le journal sur l'article de NYTimes le dit, et comme le rapport réel de FireEye le confirme, le fichier utilisé était un fichier .pif . C'est l'une des extensions de fichiers exécutables les moins connues de Windows.
.pif est un héritage de MS-DOS, comme .com. Il est destiné à être un "fichier d'informations sur le programme" (d'où le nom), stockant un raccourci vers un programme (DOS) ainsi que diverses informations sur le système sur la façon de le traiter. Même aujourd'hui, Windows donne aux fichiers .pif une icône de type raccourci.
Ce qui est drôle, c'est qu'aujourd'hui, Windows ne se soucie pas vraiment si le .pif est vraiment juste un fichier d'informations sur le programme. Essayez-le: renommez n'importe quel fichier .exe en .pif et exécutez-le. Il peut y avoir une différence comme l'icône qui ne s'affiche pas, mais c'est tout. C'est ce que vous permet d'obtenir un traitement uniforme des fichiers de différents formats. Merci, Microsoft !
Pourquoi cela arrive-t-il? Réponse courte: Parce que Windows. Réponse plus longue: Windows exécute un .pif jusqu'à ShellExecute
, qui devrait techniquement trouver un programme approprié pour ouvrir un fichier, puis l'utiliser pour l'ouvrir. Avec les fichiers .pif, il vérifie d'abord s'il s'agit vraiment d'un fichier qui pointe vers un exécutable MS-DOS. S'il n'est pas conforme au format de fichier .pif, ShellExecute vérifie s'il contient du code exécutable. Si c'est le cas, il s'exécute comme s'il s'agissait d'un .exe. Pourquoi? Parce que Windows !
Qu'ont fait les hackers géniaux super-effrayants? Ces gars n'ont pas pris la peine de faire quelque chose de compliqué: ils ont fait une archive SFXRAR auto-extractible et exécutable à partir d'un programme d'installation de virus et d'un programme (probablement juste un .bat) ouvrant une image d'une fille qu'ils ont trouvée sur Internet, renommé ce engin diabolique dans un fichier .pif et l'envoya au malheureux combattant de la liberté.
Pourquoi ont-ils utilisé .pif? Pour deux raisons, évidemment:
Peu de gens savent qu'il peut fonctionner comme un fichier exécutable ( merci, Microsoft !)
Cela ressemble évidemment à .gif ou .tiff ou .pdf ou quelque chose de très image-y. Même vous ne doutiez pas de son nom qu'il s'agissait d'un format d'image, n'est-ce pas, OP? ;)
Concernant votre question réelle ("comment est-il possible d'incorporer du code exécutable dans une image"). Oui, il est possible d'exécuter du code via une image spécialement conçue à condition qu'elle soit ouverte dans un programme vulnérable. Cela peut être fait en exploitant une attaque comme un buffer overflow. Mais ces pirates spécifiques n'étaient probablement pas assez intelligents pour cela.
Modifier
Note intéressante: ces gars-là ont utilisé DarkComet, qui a la capacité de générer des exécutables compressés avec différentes extensions, .pif étant dans leur liste. Je ne suis pas sûr d'afficher une image, mais cela pourrait être une fonctionnalité ajoutée dans une version plus récente.
Une autre modification
Je vois que vous demandez comment vous protéger contre cette " vulnérabilité" spécifique. La réponse est simple.
Tout d'abord, assurez-vous que Windows vous montre les extensions de fichier. Windows les masque principalement par défaut ( merci, Microsoft !)
Apprenez ensuite par cœur: .exe .com .cmd .bat .pif .vb .vba .vbs .msi .reg .ws .wsc .wsf .cpl .lnk
. Ce sont les types de fichiers les plus connus qui peuvent facilement exécuter du code potentiellement malveillant ou autrement endommager votre ordinateur s'il est ouvert, que des applications vulnérables soient installées ou non. Si quelqu'un vous envoie un tel fichier en disant que c'est l'image d'une jolie fille, vous pouvez être sûr qu'il s'agit d'un autre pirate discret comme ces gars syriens.
Une autre option consiste simplement à être proactif et à vérifier et revérifier tout fichier téléchargé avec un format de fichier inconnu. Cela pourrait être un malware, vous savez.
Quant aux vraies images avec des exploits ... vous pourriez probablement essayer de garder votre logiciel à jour.
Rien n'est parfait, et un type courant de bogue est un débordement de tampon, où en bref les données sont copiées là où elles ne devraient pas être, et dans certains cas, cela peut conduire à l'exécution de code arbitraire.
Par exemple ici est un bogue dans les anciennes versions de Microsoft dans lequel si vous visualisiez une certaine image avec IE alors du code arbitraire pourrait être exécuté.
Notez que cela est très spécifique à l'implémentation, donc ouvrir la même image dans firefox ou chrome entraînerait simplement une image cassée, mais pas d'exécution de code.
La réponse de Mints97 est excellente, mais je pense qu'il peut y avoir plus que cela. Un problème particulièrement merveilleux (lire: terrible) avec Windows est qu'il prend en charge le jeu de caractères Unicode complet dans les noms de fichiers, y compris (et c'est le pire), U-202E.
Bien que je sois sûr qu'il a de bonnes utilisations inoffensives, mais il peut permettre aux gens de modifier le nom de fichier de manière malveillante d'une manière difficile à remarquer pour l'utilisateur moyen. Ceci est parfaitement documenté dans cet article howtogeek.com .
Le pirate peut essentiellement mettre U-202E dans un nom de fichier et modifier filename by gnp.tab
à filename by bat.png
. Le caractère inverse l'ordre de tout le nom après lui-même. Il suffit à l'attaquant de choisir le type de fichier correct à exécuter et Windows l'associera au nom de l'exécutable.
C'est plus difficile à protéger que vous ne le pensez. La meilleure défense serait d'analyser les noms des fichiers pour cela. La commande CMD dir
semble signaler un ?
pour ce caractère Unicode. Python, et je suis sûr que d'autres langages, peuvent obtenir le nom Unicode, donc un script ou un programme quelconque pourrait éviter ce problème.
De loin, la solution la plus simple consiste à regarder également les quatre lettres avant une extension de fichier et à vous assurer que l'inverse n'est pas un nom exécutable. (Je pense qu'il y a quelques noms d'exécutables à quatre lettres, mais je ne suis pas sûr).
Se méfier!
EDIT: J'ai fait un python télécharger ici qui lit les noms de fichiers dans un répertoire pour U-202E. Il vous indique si a) le nom réel et b) l'extension. Il devrait prendre en charge le travail avec plusieurs fichiers et plusieurs U-202E en un seul nom.
Vous avez écrit: "Le format du fichier image était pif", mais l'article déclare "Les chercheurs de FireEye ont trouvé une collection de chats et de documents tout en recherchant des logiciels malveillants cachés dans les documents PDF PDF." Le programme fichier d'information format a été utilisé sur les systèmes Microsoft Windows, bien que les fichiers dans ce format soient plus rares maintenant qu'ils ne l'étaient auparavant. Il y avait des vulnérabilités associées aux fichiers PIF, par exemple, voir Microsoft Windows exécute automatiquement le code spécifié dans les fichiers de raccourcis , mais l'article du New York Times mentionne PDF documents.
Les images peuvent être stockées dans des documents PDF PDF et une personne ouvrant un document PDF peut se rendre vulnérable aux exploits en utilisant les fichiers PDF PDF). Dans ce cas, le problème est peu probable créé par l'image, mais plutôt par le conteneur, c'est-à-dire le fichier PDF, dans lequel il a été transmis. Pour certains PDF = vulnérabilités, voir menaces actuelles pdf et La hausse de l'exploitation des anciennes PDF vulnérabilités . Par exemple, cette dernière référence mentionne une vulnérabilité associée avec JavaScript dans un fichier PDF notant "Le JavaScript intégré peut contenir des instructions malveillantes, telles que des commandes pour télécharger et installer d'autres logiciels malveillants."
Il y a quelques années, il y a eu un exploit largement publicisé, qui utilisait un bogue dans une bibliothèque jpeg particulière et largement distribuée. L'effet net de cet exploit a été de permettre l'exécution de code arbitraire sur la machine des victimes, alors que tout ce qu'ils faisaient était d'essayer de visualiser une image.
En outre, par exemple, il y avait un exploit pour les fichiers de texte riche (format rtf) qui ne nécessitaient pas de bogue, uniquement en utilisant une fonctionnalité peu connue du format rtf pour exécuter du code sur la machine des utilisateurs.
Un autre exemple est l'incorporation de macros dans des documents Word. Les macros sont une fonctionnalité incroyablement puissante et utile, mais lorsque vous pouvez donner à quelqu'un un document qui contient des macros de votre choix, cela peut également être un outil de piratage puissant.
En général, il est vraiment tentant d'intégrer des fonctionnalités dans des formats de fichiers complexes qui leur donnent des capacités équivalentes à celles de Turing. Ce n'est pas non plus une bonne idée.
Eh bien, vous commencez par analyser le format de fichier. Et puis devinez un peu comment les différents logiciels vont réagir.
Par exemple [~ # ~] jpeg [~ # ~] - http://en.wikipedia.org/wiki/JPEG - utilise des marqueurs spéciaux pour délimiter le début et la fin de l'image. Maintenant, on parie que le logiciel qui traite le JPEG ne cherchera que le début et la fin des marqueurs d'image et tracera tout le reste. Si aucun marqueur n'est trouvé, le jpeg n'est pas valide, non? Maintenant que faire si nous, après la fin du marqueur d'image, nous ajoutons une marque de fin de fichier, et après cela, nous ajoutons notre charge utile exécutable. Eh bien, je parie que la plupart des traceurs jpeg ignoreront simplement la charge utile et fonctionneront comme prévu. Le succès à ce stade, nous avons attaché une charge utile à l'image. Maintenant, pour le faire exécuter, eh bien, c'est un peu plus difficile. Nous pourrions demander à notre "logiciel" de rechercher des éléments après la fin du balisage d'image et, le cas échéant, les ingérer, ou nous pourrions essayer d'injecter l'en-tête ELF/EXE/COM avec un décalage pour le code avant le début du balisage d'image et espérons que le traçage le logiciel l'ignorera, mais pas l'OS.
Le problème est qu'au départ, le système et les réseaux ont été construits avec l'idée fausse préformée que les gens sont honnêtes et se comportent comme des machines et ne briseront pas les modèles et n'utiliseront pas le logiciel en dehors des cas prévus. Et à cause de cela, beaucoup d'hypothèses ont été faites. Oui, l'utilisateur tapera au plus 200 caractères, ouais l'utilisateur tapera toujours un format lisible et ainsi de suite. Lorsque vous pensez à des cas d'utilisation, en tant que programmeur, vous prenez l'habitude de penser que les cas sont absolus et ne protègent pas des exceptions. Devinez ce qui arrive quand quelqu'un qui sort des sentiers battus arrive ..