Audit GPResult — Ordinateur
Paquet WAPT d'audit des GPO et des groupes de sécurité de l'ordinateur. Le résultat structuré est enregistré dans audit-gpresult.computer-gpo.
Fonctionnement
-
install()ne réalise aucune action. -
audit()supprime un éventuel rapport temporaire précédent, puis lance GPResult avec un délai maximal de 120 secondes :gpresult.exe /SCOPE COMPUTER /X "<rapport.xml>" /F -
Le script analyse la section
ComputerResults, collecte l'identité du poste, classe les GPO et les groupes de sécurité. -
Il transmet un dictionnaire à
WAPT.write_audit_data_if_changed, aveckeep_days=365etmax_count=1. -
La suppression du rapport est tentée dans
finally, après succès comme après erreur.
Le chemin de GPResult est construit avec makepath(system32(), "gpresult.exe"). L'audit consulte les données RSoP disponibles, sans lancer de gpupdate ni modifier les stratégies. Aucune session utilisateur active n'est nécessaire. Les GPO et groupes du contexte utilisateur sont collectés par le paquet utilisateur séparé.
Prérequis
- Poste Windows disposant de GPResult et de données RSoP machine accessibles.
- Agent WAPT fournissant
setuphelpersetWAPT.write_audit_data_if_changed. - Droits suffisants pour consulter le RSoP machine et écrire dans le répertoire temporaire du contexte d'exécution.
Données produites
Catégorie : audit-gpresult ; clé : computer-gpo.
Exemple illustratif d'un résultat de succès :
{
"status": "OK",
"computer": {
"name": "POSTE01",
"account": "EXEMPLE\\POSTE01$",
"account_domain": "EXEMPLE",
"domain": "exemple.lan",
"site": "Default-First-Site-Name"
},
"summary": {
"applied_gpo_count": 2,
"denied_gpo_count": 1,
"total_gpo_count": 3,
"domain_group_count": 1,
"local_group_count": 1,
"system_group_count": 1,
"other_group_count": 0
},
"applied_gpos": ["Local Group Policy", "Default Domain Policy"],
"denied_gpos": ["GPO non appliquee"],
"domain_groups": ["EXEMPLE\\Domain Computers"],
"security_groups": {
"domain": ["EXEMPLE\\Domain Computers"],
"local": ["BUILTIN\\Users"],
"system": ["NT AUTHORITY\\Authenticated Users"],
"other": []
}
}
| Champ | Signification |
|---|---|
status |
État de la collecte ; ce n'est pas un verdict de conformité. |
computer.name |
Nom du poste issu de COMPUTERNAME. |
computer.account |
Premier texte Name trouvé dans ComputerResults, utilisé comme compte RSoP machine. |
computer.account_domain |
Préfixe du compte avant \, généralement au format NetBIOS ; vide si aucun préfixe n'est présent. |
computer.domain |
Premier texte DomainName, sinon premier texte Domain, dans le sous-arbre machine. |
computer.site |
Premier texte Site trouvé dans le sous-arbre machine. |
summary.applied_gpo_count / summary.denied_gpo_count |
Nombre de GPO retenues dans chaque liste. |
summary.total_gpo_count |
Somme des deux compteurs de GPO. |
summary.domain_group_count / summary.local_group_count / summary.system_group_count / summary.other_group_count |
Nombre de groupes retenus dans chaque catégorie. |
applied_gpos / denied_gpos |
Noms des GPO, dans l'ordre de collecte. |
domain_groups |
Même liste que security_groups.domain, pour faciliter le reporting. |
security_groups |
Groupes de sécurité répartis entre domain, local, system et other. |
La recherche de texte est récursive et ignore les namespaces XML. Les informations non trouvées restent des chaînes vides. Le champ computer.domain peut contenir un nom DNS lorsqu'il est fourni par l'export ; le repli sur Domain ne garantit pas ce format.
Classement des GPO
Une GPO est appliquée si Enabled, IsValid et FilterAllowed sont vrais et si AccessDenied est faux. Toutes les autres entrées retenues vont dans denied_gpos : cette liste couvre les GPO non appliquées, y compris les GPO filtrées, désactivées ou invalides.
Les valeurs true, 1, yes et oui, sans distinction de casse, sont vraies. Toute autre valeur ou un champ absent est faux. Un indicateur positif absent empêche donc le classement comme GPO appliquée ; un AccessDenied absent est considéré comme faux.
La recherche des balises GPO est récursive. Les entrées sans nom sont ignorées et les doublons sont éliminés selon (nom, VersionDirectory, VersionSysvol). Un nom peut apparaître plusieurs fois si les versions diffèrent. Les listes de GPO ne sont pas triées. Les compteurs décrivent les entrées retenues, sans constituer un inventaire de toutes les GPO du domaine.
Classement des groupes de sécurité
Les groupes sont extraits des balises SecurityGroup du RSoP, sans requête LDAP supplémentaire. Le classement utilise les préfixes des noms, dans cet ordre :
| Catégorie | Règle |
|---|---|
system |
Préfixe NT AUTHORITY\. |
local |
Préfixe BUILTIN\ ou nom du poste suivi de \. |
domain |
Préfixe du compte RSoP suivi de \, si ce préfixe est non vide et différent du nom du poste. |
other |
Toutes les autres identités. |
Les comparaisons et la déduplication des noms ignorent la casse. Les entrées sans nom sont ignorées ; chaque liste est triée alphabétiquement sans distinction de casse.
Ce classement repose sur les noms présents dans l'export, sans validation du domaine par SID ou LDAP. Les noms localisés ou les groupes d'un autre domaine peuvent rester dans other. Les listes reflètent les données RSoP collectées ; elles ne constituent pas un inventaire exhaustif des groupes AD ou locaux.
Statuts
| Statut enregistré | Retour WAPT | Situation |
|---|---|---|
OK |
OK |
Export, analyse et enregistrement terminés, même avec des GPO non appliquées ou des listes vides. |
ERROR |
ERROR |
Exception capturée : commande en échec, rapport absent, XML invalide, section ComputerResults absente, etc. |
En cas d'erreur, la même clé reçoit uniquement status: ERROR et message. Les listes et compteurs du précédent succès ne sont pas recopiés. Consulter status avant d'exploiter le résultat. Aucun statut WARNING n'est utilisé.
Déploiement et dépannage
- Mettre à jour
setup.pydans les sources du paquet existant. - Adapter si nécessaire la description de
WAPT/controlpour mentionner les groupes de sécurité, en conservant l'identité et les autres métadonnées du paquet ; incrémenter sa version selon les conventions du dépôt. - Reconstruire, signer, téléverser et déployer le paquet, puis lancer l'audit depuis WAPT.
- Consulter
audit-gpresult.computer-gpoet le journal, qui indique les compteurs de GPO et de groupes de domaine ou l'erreur rencontrée.
La fréquence des audits dépend de la configuration WAPT ; le script ne crée pas de planification. En cas d'échec, vérifier les droits de l'agent, les données RSoP, l'accès à GPResult et au répertoire temporaire.
Le rapport utilise le nom fixe wapt-gpresult-computer.xml dans tempfile.gettempdir(). Éviter les audits simultanés partageant ce répertoire. Un échec de nettoyage est ignoré et peut laisser le fichier sur disque.
Contenu du dépôt
setup.py: collecte et analyse des GPO et groupes de sécurité machine.README.md: fonctionnement, schéma de données et exploitation.WAPT/description.txt: description fournie pour le contrôle existant ; elle décrit les GPO et ne mentionne pas encore les groupes de sécurité. Ce fichier ne remplace pas unWAPT/controlcomplet.