
Cet article fait partie de la série Fileless Malware. Toutes les autres parties de la série:
Dans cet article, j'allais plonger dans un scénario à plusieurs étapes encore plus compliqué d'une attaque sans fichier avec correction dans le système. Mais je suis tombé sur une attaque incroyablement simple sans code - aucune macro Word ou Excel n'est requise! Et cela prouve beaucoup plus efficacement mon hypothèse initiale qui sous-tend cette série d'articles: surmonter le périmètre externe de toute organisation est une tâche très simple.
La première attaque que je vais décrire exploite la vulnérabilité de Microsoft Word, qui est basée sur le
protocole DDE ( Dynamic Data Exchange Protocol ) hérité . Il a déjà été
corrigé . Le second exploite une vulnérabilité plus générale dans Microsoft COM et les capacités de transfert d'objets.
Retour vers le futur avec DDE
Quelqu'un d'autre se souvient-il de DDE? Probablement peu. Il s'agit de l'un des premiers
protocoles de communication interprocessus permettant aux applications et aux appareils de transférer des données .
Je le connais moi-même un peu, car j'avais l'habitude de vérifier et de tester des équipements télécoms. À ce moment-là, DDE a permis, par exemple, de transférer l'ID de l'appelant vers l'application CRM pour les opérateurs de centre d'appel, qui a finalement ouvert la carte du client. Pour ce faire, vous deviez connecter un câble RS-232 entre le téléphone et l'ordinateur. Voilà les jours!
Il s'est avéré que Microsoft Word
prend toujours en
charge DDE.
Ce qui rend cette attaque efficace sans code, c'est que vous pouvez accéder au protocole DDE
directement à partir des champs automatiques d'un document Word (j'enlève mon chapeau à SensePost pour
rechercher et publier à ce sujet).
Les codes de champ sont une autre ancienne fonctionnalité de MS Word qui vous permet d'ajouter du texte dynamique et un peu de programmation à un document. L'exemple le plus évident est le champ Numéro de page, qui peut être inséré dans le pied de page en utilisant la valeur {PAGE \ * MERGEFORMAT}. Cela vous permet de générer automatiquement des numéros de page.
Astuce: vous pouvez trouver l'élément de menu Champ dans la section Insérer.Je me souviens que lorsque j'ai découvert cette fonctionnalité pour la première fois dans Word, j'ai été étonné. Et tant que le correctif ne l'a pas désactivé, Word a pris en charge le paramètre de champ DDE. L'idée était que DDE permettrait à Word de communiquer directement avec l'application, pour la possibilité de transférer ensuite la sortie du programme vers un document. Il s'agissait à l'époque d'une technologie très récente - prise en charge de l'échange de données avec des applications externes. Plus tard, il a été développé dans la technologie COM, que nous considérerons également ci-dessous.
En conséquence, les pirates ont réalisé que cette application DDE pourrait être un shell de commande qui, bien sûr, lance PowerShell, et à partir de là, les pirates peuvent faire ce qu'ils veulent.
La capture d'écran ci-dessous montre comment j'ai utilisé cette technique secrète: un petit script PowerShell (ci-après dénommé PS) du champ DDE charge un autre script PS qui lance la deuxième phase de l'attaque.
Merci à Windows pour l'avertissement contextuel que le champ intégré DDEAUTO essaie secrètement de démarrer le shellLa méthode préférée pour exploiter la vulnérabilité consiste à utiliser l'option avec le champ DDEAUTO, qui exécute automatiquement un script
lors de l'ouverture d'un document Word.
Réfléchissons à ce que nous pouvons y faire.
En tant que pirate débutant, vous pouvez, par exemple, envoyer un e-mail de phishing, prétendant appartenir au Federal Tax Service, et intégrer le champ DDEAUTO avec un script PS pour la première étape (un dropper en fait). Et vous n'avez même pas besoin de faire de vrai codage de macros, etc., comme je l'ai fait dans l'
article précédent.La victime ouvre votre document, le script intégré est activé et le pirate est à l'intérieur de l'ordinateur. Dans mon cas, le script PS distant imprime uniquement le message, mais il peut également facilement lancer le client PS Empire, qui fournira un accès distant au shell.
Et avant que la victime n'ait le temps de dire quoi que ce soit, les pirates seront les adolescents les plus riches du village.
Le shell a été lancé sans le moindre encodage. Même un enfant peut le faire!DDE et champs
Plus tard, Microsoft a toujours désactivé DDE dans Word, mais avant cela, la société a déclaré que cette fonctionnalité avait simplement été utilisée à mauvais escient. Leur réticence à changer quelque chose est compréhensible. De ma propre expérience, j'ai moi-même observé un tel exemple que la mise à jour des champs lors de l'ouverture d'un document était activée, mais les macros Word étaient désactivées par le service informatique (mais avec une notification). À propos, vous pouvez trouver les paramètres correspondants dans la section Paramètres de Word.
Cependant, même si la mise à jour des champs est activée, Microsoft Word avertira en outre l'utilisateur lorsqu'un champ demande l'accès aux données supprimées, comme c'est le cas avec le DDE ci-dessus. Microsoft vous met vraiment en garde.
Mais très probablement, les utilisateurs ignoreront toujours cet avertissement et activeront la mise à jour du champ dans Word. C'est l'une des rares occasions de remercier Microsoft d'avoir désactivé la dangereuse fonctionnalité DDE.
Est-il difficile de trouver un système Windows non corrigé aujourd'hui?
Pour ce test, j'ai utilisé AWS Workspaces pour accéder au bureau virtuel. Ainsi, j'ai obtenu une machine virtuelle non corrigée avec MS Office, ce qui m'a permis d'insérer le champ DDEAUTO. Je ne doute pas que de la même manière, vous pouvez trouver d'autres sociétés qui n'ont pas encore installé les correctifs de sécurité nécessaires.
Mystère des objets
Même si vous avez installé ce correctif, il existe d'autres failles de sécurité dans MS Office qui permettent aux pirates de faire quelque chose de très similaire à ce que nous avons fait avec Word. Dans le scénario suivant, nous apprendrons à
utiliser Excel comme appât pour une attaque de phishing sans écrire de code.Pour comprendre ce scénario, rappelons le
modèle d'objet composant Microsoft, ou abrégé
COM (modèle d'objet composant) .
COM existe depuis les années 90 et est défini comme un "modèle de composant orienté objet neutre pour le langage de programmation" basé sur des appels de procédure RPC distants. Pour une compréhension générale de la terminologie COM, lisez
cet article sur StackOverflow.
En gros, vous pouvez imaginer une application COM comme un exécutable Excel ou Word, ou un autre fichier binaire qui peut être lancé.
Il s'avère qu'une application COM peut également exécuter un
script - JavaScript ou VBScript. Techniquement, cela s'appelle un
scriptlet . Vous avez peut-être rencontré l'extension sct pour les fichiers sous Windows - il s'agit de l'extension officielle pour les scriptlets. En fait, ils sont le code d'un script enveloppé dans un wrapper XML:
<?XML version="1.0"?> <scriptlet> <registration description="test" progid="test" version="1.00" classid="{BBBB4444-0000-0000-0000-0000FAADACDC}" remotable="true"> </registration> <script language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("cmd /k powershell -c Write-Host You have been scripted!"); ]]> </script> </scriptlet>
Les pirates et les pentesters ont découvert qu'il existe sur Windows des utilitaires et des applications distincts qui acceptent les objets COM et, par conséquent, les scriptlets également.
Je peux transmettre le scriptlet à un utilitaire Windows écrit en VBS, connu sous le nom de pubprn. Il est situé dans les entrailles de C: \ Windows \ system32 \ Printing_Admin_Scripts. Soit dit en passant, il existe d'autres utilitaires Windows qui prennent des objets comme paramètres. Pour commencer, considérez cet exemple.
Il est tout à fait naturel que le shell puisse être lancé même à partir d'un script d'impression. Allez Microsoft!Comme test, j'ai créé un simple scriptlet distant qui lance le shell et imprime le drôle de message "Vous venez d'être scripté!". Essentiellement, pubprn instancie l'objet scriptlet, permettant à VBScript d'exécuter le shell. Cette méthode offre des avantages évidents aux pirates qui souhaitent s'introduire et se cacher dans votre système.
Dans le prochain article, j'expliquerai comment les scriptlets COM peuvent être utilisés par des pirates utilisant des feuilles de calcul Excel.
Pour vos devoirs, regardez
cette vidéo Derbycon 2016 qui explique comment les pirates ont utilisé les scriptlets. Et lisez également
cet article sur les scriptlets et une sorte de surnom.