Lorsque vous avez pris la main sur une machine, il peut être intéressant d’y ajouter une persistance pour pouvoir revenir dessus plus tard. En effet, si vous avez exploité une vulnérabilité propre à la machine, les équipes de sécurité peuvent potentiellement avoir détecté votre intrusion et mis à jour la machine dans la foulée. Il serait alors pertinent de garantir votre accès pour éviter de devoir tout refaire !
Créez un compte à privilèges
Une technique simple et efficace consiste à ajouter un nouvel utilisateur local à la machine compromise. Après avoir créé cet utilisateur, vous l'ajouterez au groupe d’administration. De cette manière, vous pourrez vous connecter à cette machine via ce compte, en utilisant les outils légitimes, comme RDP ou WinRM.
net user evil p4ssw0rd /add
net localgroup Administrateurs evil /add
Cette technique permet de garder la main sur une machine compromise. Cependant, si vous avez compromis le domaine, vous pouvez aller plus loin, et ajouter un utilisateur à un groupe privilégié. Vous avez découvert ces groupes dans ce cours lors de la cartographie du domaine. Rappelez-vous, vous avez cherché les membres des groupes Admins du domaine ou Administrateurs de l’entreprise, par exemple. Ajouter un compte à l’un de ces groupes vous permettra donc de maintenir vos privilèges dans le domaine.
net user evil p4ssw0rd /add /domain
net group “Admins du domaine” evil /add
Adoptez les techniques de persistance classiques
Il existe quelques techniques classiques de persistance qui permettent de reprendre la main sur une machine sans dépendre d’une vulnérabilité ou d’un compte compromis.
Vous pouvez par exemple paramétrer la machine pour qu’elle exécute du code régulièrement, comme par exemple créer un compte administrateur local.
Tâches planifiées
Pour exécuter du code régulièrement, vous pouvez créer une tâche planifiée.
La ligne de commande suivante permet de créer une tâche planifiée appelée EvilTask qui va exécuter une commande Powershell permettant d’ajouter un administrateur local, et ce à chaque fois que l’administrateur se connecte sur le système.
schtasks /create /tn EvilTask /tr "c:\windows\syswow64\WindowsPowerShell\v1.0\powershell.exe -WindowStyle hidden -NoLogo -NonInteractive -ep bypass -nop -c 'net user evil p4ssw0rd /add; net localgroup Administrateurs evil /add'" /sc onlogon /ru System
Clés RUN
Une autre manière d’exécuter régulièrement du code consiste à utiliser certaines clés de registre permettant d’exécuter un programme dès qu’un utilisateur se connecte. Ces clés sont couramment appelées les clés RUN. Elles se trouvent à ces différents emplacements dans le registre :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
Le contenu des clés Run sera exécuté à chaque fois qu’un utilisateur se connectera, tandis que celui des clés RunOnce sera exécuté une seule fois, puis le contenu de la clé sera automatiquement supprimé.
Vous pouvez créer ces clés via la ligne de commande avec l’utilitaire reg propre à Windows.
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v OpenClassroomsEvil /t REG_SZ /d "C:\Windows\Temp\OC.exe"
Modification de services
Les services sont également une fonctionnalité que vous pouvez utiliser pour de la persistance. Ce sont des programmes qui peuvent être exécutés automatiquement au démarrage de la machine, et qui tournent en tâche de fond. Vous pouvez alors créer un service, ou mieux, en modifier un existant, pour que votre code malveillant soit exécuté automatiquement au démarrage de la machine.
sc config AxInstSV binPath= "C:\Windows\Temp\OC.exe" start= auto
Modifiez les droits des objets sensibles
Vous avez pu observer que la gestion des droits chez Windows devenait assez vite complexe. Il y a des centaines d’objets, des milliers de droits, et peu de personnes sont capables d’avoir un œil sur tout, tout le temps.
Modifier des droits est donc une technique qui peut être assez discrète pour des fins de persistance. Il y a tellement de droits et d’objets qu’il serait impossible de décrire toutes les techniques ici, mais en voici une idée.
Le groupe Admins du domaine est un groupe à privilèges. Vous avez vu que vous pouviez ajouter un compte dans ce groupe pour de la persistance. Mais que se passe-t-il si un jour ce groupe est nettoyé par les administrateurs, pour ne garder que les comptes qu’ils connaissent ?
Eh bien, une autre possibilité consiste à modifier la liste des droits appliquée au groupe en question. Au lieu d’ajouter votre utilisateur au groupe, vous pouvez plutôt donner le droit à votre utilisateur d’ajouter des membres arbitraires au groupe. Comme ça, plus tard, vous pourrez soit vous ajouter vous-même, soit ajouter un autre compte que vous avez en votre possession.
Pour cela, vous devez vous rendre dans l’onglet Sécurité (ou Security) du groupe, et vous ajoutez le droit Écriture (ou Write) à l’utilisateur de votre choix.
Forgez des tickets Kerberos
Enfin, deux techniques de persistance ont beaucoup fait parler d’elles. Ce sont les techniques du Silver Ticket et du Golden Ticket.
Le protocole Kerberos vous est familier, du moins dans ses grandes lignes, n’est-ce pas ? En effet, vous avez découvert quelques attaques liées à ce protocole dans cette partie.
Euh, pour être honnête, j’ai compris quand j’ai lu, mais je n’ai pas tout retenu.
C’est vrai que c’est un protocole qui n’est pas si simple. Alors pour rappel, il utilise des tickets (TGT et tickets de service) pour authentifier des utilisateurs voulant accéder à des services. Dans ces tickets, il y a toutes les informations de l’utilisateur. On y trouve son nom, par exemple, mais aussi l’appartenance à ses groupes. Il est donc important qu’un utilisateur ne puisse pas modifier arbitrairement ses tickets, sinon il pourrait prétendre faire partie du groupe “Admins du domaine” ou être le compte “Administrateur”. Les tickets sont donc protégés. Mais que se passe-t-il si les mots de passe qui protègent ces tickets sont volés ? C’est ce que nous allons voir.
Silver Ticket
La technique du Silver Ticket se focalise sur les tickets de service. Lorsque vous vous connectez, vous faites une première demande de TGT, c’est votre carte d’identité. Puis à chaque fois que vous voulez accéder à un service, vous allez présenter votre TGT au contrôleur de domaine, et celui-ci copiera vos informations dans un ticket de service. Pour éviter que vous puissiez le modifier, ce ticket est protégé avec le mot de passe du compte de service.
Mais alors, si vous avez compromis le domaine et que vous souhaitez maintenir un accès, vous pouvez tout à fait voler les mots de passe des comptes de service, notamment les mots de passe des comptes machine. Vous pouvez les voler en utilisant secretsdump.py sur un contrôleur de domaine. Vous avez vu en début de partie que cet outil allait effectuer une attaque DCSync pour voler tous les hashs des mots de passe de tous les comptes du domaine. Une fois ces mots de passe volés, vous pouvez ensuite forger des tickets de service de toutes pièces.
Ces tickets forgés sont des Silver Tickets. Vous indiquez dans ce ticket que vous appartenez à tous les groupes privilégiés, et vous le protégez ensuite avec le mot de passe du compte de service que vous avez dérobé. En présentant ces tickets aux services, ce sera open bar !
Pour créer un Silver Ticket, vous pouvez utiliser ticketer.py de Impacket. Mais il vous faudra l’identifiant du domaine. C’est une information nécessaire à l’outil pour forger le ticket. Vous pouvez le récupérer avec lookupsid.py.
$ lookupsid.py medic.ex/pixis:P4ssw0rd@dc01.medic.ex
[...]
[*] Domain SID is: S-1-5-21-3526105896-714836913-1342931244
[...]
$ ticketer.py -nthash <hash du compte de service> -domain-sid S-1-5-21-3526105896-714836913-1342931244 -domain medic.ex -spn CIFS/SRV01.medic.ex administrator
Golden Ticket
Les Silver Tickets sont pratiques, mais c’est fastidieux de devoir créer un ticket par service. En plus, les mots de passe des comptes de service risquent fortement de changer régulièrement, ce qui vous ferait perdre vos accès.
Pourquoi ne pas aller en amont, et forger un TGT ? C’est le principe du Golden Ticket. Au lieu de voler les secrets des comptes de service, vous allez tout simplement voler le secret absolu, celui qui permet de protéger les TGT. Ce secret, c’est le mot de passe du compte krbtgt. Ce compte est présent dans tous les environnements Active Directory, et est uniquement là pour que le contrôleur de domaine puisse signer et chiffrer les TGT avec son mot de passe. C’est tout. Et son mot de passe n’est pas changé automatiquement. Toutes les conditions rêvées pour maintenir un accès.
D’expérience, il arrive très souvent que la date de dernier changement de mot de passe du compte krbtgt corresponde à la date d’installation de l’Active Directory dans l’entreprise. Ça veut dire que si ce compte a été compromis une fois depuis, alors les Golden Tickets sont toujours valables aujourd’hui.
Les mêmes outils permettent de créer un Golden Ticket, sauf que cette fois-ci, c’est le secret du compte krbtgt qui doit être fourni, et il n’est pas nécessaire de fournir un nom de service.
$ lookupsid.py medic.ex/pixis:P4ssw0rd@dc01.medic.ex
[...]
[*] Domain SID is: S-1-5-21-3526105896-714836913-1342931244
[...]
$ ticketer.py -nthash <hash du compte krbtgt> -domain-sid S-1-5-21-3526105896-714836913-1342931244 -domain medic.ex administrator
Avant que nous terminions ce chapitre, Lionel aimerait nous exposer sa philosophie du Pentest :
En résumé
Il existe des techniques de persistance simples permettant de maintenir un accès, comme l’ajout d’utilisateur à un groupe privilégié.
L’accès peut également être maintenu via l’exécution de code automatique en utilisant les tâches planifiées, les services ou les clés de registre.
Modifier les droits d’accès ou de modification d’objets peut permettre une persistance plus discrète.
Les Silver et Golden Tickets peuvent être utilisés pour accéder au système d’information après avoir dérobé les mots de passe des comptes du domaine.
C’est la fin de cette partie, vous avez les outils et les connaissances en main pour découvrir et compromettre un environnement Active Directory. Ces connaissances sont essentielles pour la partie suivante, dans laquelle vous allez apprendre à protéger et surveiller votre environnement Windows.