Vendredi soir, mgrzeg (http://zine.net.pl/blogs/mgrzeg/) m’a posé une petite colle sur les mots de passe associés à des tâches planifiées :
22:27 – Michal: Have you ever tried to recover passwords for scheduler tasks?
Et bien non ! Je pensais naïvement que beaucoup d’outils permettaient déjà de récupérer les mots de passe de tâches planifiées… mais, à part une version historique pour NT5 d’Ivan (http://www.ivanlef0u.tuxfamily.org/?p=173), rien de bien précis dans le paysage des outils pour les versions actuelles de Windows…
Recherches
Créons une petite « Tâche de test
» associée au compte de « Gentille Tâche
»
> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Tâche de test" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\Tâche de test Id REG_SZ {B0261D58-1302-40C8-A547-3AFD8F76BB4C} Index REG_DWORD 0x3 > reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{B0261D58-1302-40C8-A547-3AFD8F76BB4C}" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{B0261D58-1302-40C8-A547-3AFD8F76BB4C} Path REG_SZ \Tâche de test Hash REG_BINARY 913E7022936A887F6CA5DD1C5BCAF21BCB7B8A120FA1551CCB19DBC7EC10D93D Triggers REG_BINARY 150000000000000000F3A401A4F76772FFFFFFFFFFFFFFFF00F3A401A4F7677200000000000000002821440048484848EA0DE31E484848480048484848484848004848484848484801000000484848481C000000484848480105000000000005150000003C07DD79702A63251C051BB6E903000048484848360000004848484876006D002D00770037002D0075006C0074005C00470065006E00740069006C006C00650020005400E2006300680065000000000000004848380000004848484800000000FFFFFFFF80F40300FFFFFFFF0700000000000000000000000000000000000000000000000000000018A20F010000000000000000
Vous l’aurez sans aucun doute reconnue :
vm-w7-ult | 76 00 6D 00 2D 00 77 00 37 00 2D 00 75 00 6C 00 74 00 \ | 5C 00 Gentille Tâche | 47 00 65 00 6E 00 74 00 69 00 6C 00 6C 00 65 00 20 00 54 00 E2 00 63 00 68 00 65 00 <NULL> | 00 00 <NULL><NULL> | 00 00 00 00
Cela tombe bien, il y a une référence à son SID (S-1-5-21-2044528444-627255920-3055224092-1001
) pas très loin :
> reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CredWom\S-1-5-21-2044528444-627255920-3055224092-1001" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\CredWom\S-1-5-21-2044528444-627255920-3055224092-1001 Count REG_DWORD 0x1 Index REG_SZ {55DEDD5A-70DE-49AC-98C2-9D86B9A437FA}
Point de mot de passe… mais un GUID très utile…, le planificateur de tâche va appeler :
CredMarshalCredential
avec :
CredType
:UsernameTargetCredential
Credential
:TaskScheduler:Task:{55DEDD5A-70DE-49AC-98C2-9D86B9A437FA}
… et se servir du résultat pour appeler LogonUser
puis CreateProcessAsUser
.
Explications
UsernameTargetCredential
Specifies that the credential is a reference to a CRED_FLAGS_USERNAME_TARGET credential described by a USERNAME_TARGET_CREDENTIAL_INFO structure.
Il s’avère donc que les comptes associés aux tâches planifiées sont enregistrés dans le « Gestionnaire d’identification » de SYSTEM
.
Cohérent, puisque le planificateur de tâches fonctionne en tant que service local, même si la session de l’utilisateur ayant créé la tâche, ou ciblée par la tâche, est fermée.
Test
Qu’à cela ne tienne, mimikatz
permet de dumper les différents éléments du gestionnaire d’identification de NT6 via : divers::secrets full
En ayant obtenu un mimikatz « SYSTEM
» :
mimikatz # divers::secrets full Nombre de secrets : 1 TargetName : Domain:batch=TaskScheduler:Task:{55DEDD5A-70DE-49AC-98C2-9D86B9A437FA} / <NULL> Type : DOMAIN_PASSWORD (2) Comment : <NULL> UserName : vm-w7-ult\Gentille Tâche Credential : <NULL>
Damn, pas de mot de passe ici :(
If the Type member is CRED_TYPE_DOMAIN_PASSWORD, this member contains the plaintext Unicode password for UserName. The CredentialBlob and CredentialBlobSize members do not include a trailing zero character. Also, for CRED_TYPE_DOMAIN_PASSWORD, this member can only be read by the authentication packages.
La solution sera donc plus générale que pour les mots de passe de tâches planifiées…, en effet la catégorie CRED_TYPE_DOMAIN_PASSWORD
englobe aussi les credentials pré-enregistrés de lecteurs , de partages ou RDP…
A voir dans un prochain post ;)
Bonus
Dans le contexte de l’utilisateur ayant créé la tâche planifiée (et donc inacessible à SYSTEM
si session fermée…) :
mimikatz # divers::secrets full Nombre de secrets : 1 TargetName : LegacyGeneric:target=VM-W7-ULT\Gentille Tâche / <NULL> Type : GENERIC (1) Comment : <NULL> UserName : VM-W7-ULT\Gentille Tâche Credential : wazawaza12341234//
Mais là, je ne vois pas la raison de sa présence… c’est le moteur du planificateur de tâche qui a besoin des credentials, pas l’utilisateur d’origine… (?)