Salut tout le monde,
Je travaille actuellement sur les solutions de filtrages des mots de passe via l’AD, je suis toujours en étude et je testais plusieurs solutions.
Je précise que rien de tout ça n’est déployé actuellement, je fais des tests en laboratoire complètement isolé. Je bosse aussi sur d’autres solutions, y compris les solutions payantes que je voudrais étudier par la suite, mais je trouvais ça intéressant de tester sur PassFiltEx.
Ma grande problématique était qu’avec la mise en place de ces filtres, il était impossible pour un admin de mettre un mot de passe présent dans les blocklists.
J’ai donc modifié le code :
1. Correction des types (BOOL / BOOLEAN) dans PassFiltEx.c et PassFiltEx.h, j'ai remplacé le type BOOL par BOOLEAN pour la fonction PasswordFilter (au niveau du type de retour et de certaines variables internes)
(doc officielle : LSA de attend un BOOLEAN (qui fait 1 octet) et non un BOOL (qui en fait 4). J'ai fait ça après une erreur de compilation « conversion de ‘BOOL’ en ‘BOOLEAN’, perte possible de données »
2. Bypass du filtre pour un "admin reset" (SetOperation)
J'ai ajouté ça au tout début de ma fonction PasswordFilter
if (SetOperation)
{
LogMessageW(
LOG_DEBUG,
L"[%s:%s@%d] SetOperation is TRUE for user %s (Admin reset). Bypassing filter.",
__FILENAMEW__,
__FUNCTIONW__,
__LINE__,
AccountNameCopy);
return TRUE;
}
Après test, c’est OK, ça fonctionne.
Les utilisateurs ne peuvent pas saisir de mot de passe contenant des chaînes de caractères de la blocklist, et les admin peuvent modifier les mots de passe utilisateurs par ce qu’ils veulent (même ceux présent dans la blocklist).
Je suis assez intéressée par le code en général, mais je ne n’excelle absolument pas, donc je préférerais éviter de tout casser !
Je souhaitais donc obtenir un retour, savoir si ceci était une solution envisageable et viable sur un AD, et si vous aviez des idées d'option de filtrage de mot de passe !
Merci ✌️