User guide

AdGUARD

Active Directory configuration and security auditing
Documented version 1.0 · Windows desktop application · Fully offline · Read-only

About this guide

This document describes how to use AdGUARD end to end, from installation through to producing an audit report you can hand over to a client. It covers installation, license activation, how the application name and reports work, connecting to the audited directory, control selection, baselines and compliance frameworks, running audits, reading attack paths, interpreting results and exporting reports.

Who this guide is for

Documented version

ItemValue
ApplicationAdGUARD 0.1.0
PlatformWindows x64 — WPF, .NET 10
Control catalog176 controls across 8 built-in packs, all automated
Directory accessLDAP or LDAPS, read-only
Baseline templates10, computed dynamically from the catalog
Maturity modelANSSI scale 1 to 5, with a computed level attained
Product-specific outputsAttack path graph, trust graph, situation report, dsacls remediation script
Interface languagesFrench and English, switchable on the fly

1. Introduction

1.1 What AdGUARD is

AdGUARD is a Windows desktop application that audits the security configuration of an Active Directory domain. It queries the directory read-only over LDAP, compares the actual configuration against a catalog of 176 control points drawn from recognised public frameworks, and produces a compliance score, a control-by-control breakdown, an attack path map and exportable reports.

The principle is simple: where a manual audit means walking through dozens of management console screens, reading security descriptors by hand and noting gaps in a spreadsheet, AdGUARD covers the same ground in a handful of seconds, reproducibly, and keeps the history so progress can be measured.

The dashboard: overall compliance, detailed breakdown and trend over time.

1.2 Design principles

PrincipleWhat it means in practice
Read-onlyNo write is requested or performed on the audited directory. The application fixes nothing: it observes and recommends.
Local executionThe application runs on the auditor's machine. Results, credentials and history stay there. No intermediate service, no telemetry.
Multi-clientOne record per audited domain, with its own connector, its own history database and its own report logo. Two clients' data never mix.
White labelThe application name is the license holder's name, carried by the license (chapter 4). It is no longer configured locally.
OfflineThe license is verified locally through a cryptographic signature. No activation server to reach.
TraceabilityEvery control carries a stable identifier, a level, its framework mappings and a documentation link. These appear identically in the interface and in every export.

1.3 What AdGUARD does not do

1.4 Functional architecture

The application is built on five parts:

The About screen: version, technical stack and covered frameworks.

1.5 Terminology

TermDefinition
Domain (record)The audited directory. In the application, each client has a domain record holding its connector, its history and its report logo.
ConnectorThe technical link to the directory. It only becomes active after a successful connection test.
ControlA single check, for example 'Disallow unconstrained delegation on accounts'. Carries a stable identifier, a description, a remediation and its framework mappings.
Control packA group of controls shipped as a unit. The 8 built-in packs are embedded in the application; additional packs can be imported as JSON.
Level (L1 / L2)The control's criticality. L1 = fundamental, expected everywhere. L2 = hardening, to be weighed against context.
CategoryThe control's functional domain: Tier Zero, ACL delegation, Kerberos, AD CS, Trusts… The catalog has 32 of them.
ANSSI tierThe control's rank on the 1 to 5 maturity scale: 1 = Tier 0 and privilege foundations, 5 = governance. See chapter 9.
Attack pathA right held by a non-privileged principal over a critical object, allowing them to take control of it. See chapter 14.
BaselineThe audit scope retained: a subset of the catalog, with optional level adjustments. Global scope or client-specific.
Audit (run)A dated run, kept in the history with its score, its scope and the full detail of its results.
VerdictA control's outcome: compliant, non-compliant, warning, or not assessed.

2. Installation and first run

2.1 Requirements

ItemRequirement
SystemWindows 10 (1809 or later) or Windows 11, x64.
.NET runtime.NET 10 Desktop runtime, unless the application was delivered as a self-contained build.
RightsLocal administrator rights for installation only. The audit itself requires none.
NetworkAccess to the domain controller on port 389 (LDAP) or 636 (LDAPS).
AccountA directory read account — a plain domain user is enough for most controls.
Display1280 × 800 minimum; 1600 × 900 recommended for the dashboard and the graphs.
LicenseA valid license key (chapter 3).

2.2 Installation

The application ships as a standard Windows installer. It installs into C:\Program Files\AdGUARD for all users of the machine, creates a Start menu shortcut, and creates its data area on first run.

An update installs over the previous one: the installed version is detected and replaced. Data — client records, history, connectors, license — is never touched by a reinstall, because it lives outside the program folder.

2.3 Where the data lives

All data lives under a single root, shared by every Windows account on the machine. This is deliberate: on a shared audit workstation, two consultants must find the same clients and the same history.

C:\ProgramData\AdGUARD\
├── license.key            clé de licence installée (commune au poste)
├── control-packs\         packs de contrôles importés (JSON)
└── clients\
    ├── <client-1>\
    │   ├── settings.json  connecteur, export, branding, performances
    │   └── audit.db       base SQLite : historique et résultats détaillés
    └── <client-2>\

The active client is remembered per Windows user: two sessions open on the same machine can work on two different clients while sharing the same set of records.

2.4 First run

Getting started takes six steps:

On first run, the dashboard is waiting for the first audit.

Allow around fifteen minutes for steps 1 to 4. Connecting a directory is far quicker than connecting a cloud tenant: there is no application to register and no administrator consent to obtain.

2.5 The interface

The application has three areas: a collapsible side menu on the left, the active view in the middle, and at the top right the theme (light / dark) and language (FR / EN) selectors. The name shown at the top of the menu is the license holder's name, carried by the license (§ 4).

SectionContent
DomainsPortfolio of audited directories, then the active domain's record.
DashboardSummary of the active domain's posture.
Security auditRunning an audit and the history of past audits.
Security controlsThe catalog, grouped by category, with scope selection.
BaselinesBaseline editor, framework templates, then the list of saved baselines.
SettingsConnectors, Export, Performance, New control, License.
AboutVersion, technical stack, covered frameworks, framework mapping method.

3. License and activation

3.1 How it works

The license is verified entirely offline, using an asymmetric ECDSA signature on the P-256 curve (SHA-256 digest). The vendor signs the license content with a private key that never leaves their machine; the application embeds the matching public key, which can only verify a signature, never produce one. Decompiling the application therefore does not allow anyone to forge a license, and there is no activation server to reach.

The license file is a block of text wrapped in a readable armor, in the manner of a PEM key:

-----BEGIN GUARD LICENCE-----
...signed content, base64url-encoded...
-----END GUARD LICENCE-----

The signed content carries the following fields:

FieldPurpose
HolderName of the license holder. Shown at activation and becomes the application name (chapter 4).
ExpiryExpiry date (UTC). Beyond it, the license moves to the Expired state.
Max domainsMaximum number of domain records allowed. A very high value (for example 9999) is effectively unlimited.
IssuedIssue date (UTC).
IdentifierUnique license identifier, useful for support to trace a key.
ProductTarget product. The license is accepted only if the product is AdGUARD: a license issued for EntraGUARD is refused.

3.2 Where licenses come from: the GuardLicence application

Licenses are no longer produced by a generator built into the application, as was the case in earlier versions. They are issued by a dedicated application, GuardLicence, held by the vendor and, where applicable, by authorized partners.

GuardLicence holds the signing authority and works as a three-level chain:

This model lets the vendor delegate issuance to a partner without handing over the root: the partner can only issue within the limits written into their certificate. The AdGUARD application itself knows only the root public key and merely verifies the license it receives.

In practice, on the client side. You receive a license.key file (or a text string wrapped in the armor above), delivered over a secure channel. That file, or that text, is what you activate in AdGUARD. You do not need GuardLicence to use the application: GuardLicence is the issuer's tool, not the end user's.

3.3 Activating a license

Open Settings › License. Two options, depending on how the license was delivered:

On activation, the application checks in turn the signature, the product (it is indeed an AdGUARD license), the expiry and the domain cap. It then shows the license state, the holder's name, the expiry date and the number of domains allowed.

3.4 The four states

StateMeaningConsequence
No licenseNo license registered on the machine.Creating domains and running audits unavailable.
InvalidWrong signature, wrong product, or non-conforming format.Rejected; the application stays limited, as with no license.
ExpiredValid signature, but the expiry date has passed.Browsing the history is possible, but running audits is unavailable.
ValidSigned license, correct product, not expired.Fully operational, within the domain quota.

The state is determined when the license is loaded, then re-evaluated against the date: a valid license switches automatically to Expired on its expiry day.

3.5 The domain quota

The license sets a maximum number of domain records. When that cap is reached, adding a new domain is refused, with a message stating the current limit and the number of records already created. To audit more domains, activate a license with a higher cap. Deleting an existing record frees a slot in the quota.

3.6 Renewal and deployment

Renewing simply means activating a new license with a later expiry: it replaces the previous one, with no other steps. To deploy the same license on several machines, distribute the same license.key file and activate it on each; the license is not tied to a particular machine. On a shared machine, the installed license applies to all Windows accounts.

4. Application name and reports

4.1 The name comes from the license

The Settings › Branding menu from previous versions, which let you set an application name, tagline and logo along with an issuer identity, has been removed. The name the application displays — on the splash screen, in the title bar and at the top of the sidebar — is now the license holder's name, as written in the license.

This name is no longer editable by hand: it applies as soon as a license is activated. Until a license is loaded, the application is called "AdGUARD".

Why this changed. Having the name carried by the license guarantees that the displayed identity matches the holder exactly, with no local setting to maintain and no risk of drift between a configured name and the actually licensed name. For a reseller, this means each client automatically sees their own name, set when their license is issued.

4.2 Identity in reports

Exported reports (HTML, PDF) carry the license holder's name — that is, the application name — together with the generation date, in the header and footer. The detailed issuer customization that existed before (company, website, contact address, header logo, all set in Settings › Branding) is no longer offered: the issuer's identity in reports is limited to the name carried by the license.

4.3 The audited domain's logo

The audited domain's logo, by contrast, is still fully supported — this is a notion distinct from the issuer's identity. From a domain record (§ 5.2) you can attach a logo: it appears on the cover page of that domain's executive report. This is the audited client's logo, on their own report.

Aim for a crisp image, around 180 px tall, on a transparent or white background, in PNG or JPG. This logo is specific to each record: two domains can each have their own.

4.4 Theme and language

The application offers a light and a dark theme, as well as a switch between French and English. These settings are available in the preferences and apply immediately across the whole interface, with no restart. They are independent of the license and specific to each machine.

5. Managing audited domains

5.1 The portfolio

The Domains screen lists every directory you follow, with four headline figures: number of domains, number of audits run, number never audited, and the date of the most recent audit across all clients. A search box filters the list, and Add a domain creates a new record.

The portfolio: headline figures, search and the list of domains.

5.2 The domain record

The record holds the client's details — name, domain, contact, industry, country, engagement reference, notes — the Activity block summarising its posture, and the logo used on report covers.

A domain record: client details, audit activity and the logo for reports.

5.3 The active domain and data separation

At any time, exactly one domain is active. It governs everything else in the application: the connector shown, the baselines available, the history browsed, the dashboard and the reports produced. Switching happens on the fly, with no restart.

Each domain has its own folder on disk, with its own settings and its own history database. A client's directory credentials are therefore never reachable from another client's context.

Always check the active domain before running an audit or an export. It is the number one mistake in multi-client use.

6. The Active Directory connector

6.1 How it works

The connector is the technical entry point of the audit. It opens read-only access to the directory over LDAP. Until it is configured and tested, the controls stay locked and do not enter the score.

The Connectors screen: domain, domain controller, search base and read account.

6.2 The fields

FieldWhat it expects
DomainThe DNS name of the audited domain, for example corp.example.com.
Domain controllerThe server queried. Left empty, automatic domain locator applies.
Search baseThe starting point for queries, in DN form — DC=corp,DC=example,DC=com. Derived from the domain if left empty.
Integrated authenticationTicked, the bind uses the current Windows account. Unticked, the credentials entered are used.
Account and passwordA directory read account, as DOMAIN\user or a UPN. Ignored when integrated authentication is on.
LDAPSTicked, the bind uses port 636 with TLS. Prefer it whenever the domain controller presents a usable certificate.

6.3 The rights required

A plain domain user is enough for the vast majority of controls: reading objects, their attributes and their security descriptors is open by default in Active Directory. This is what makes AdGUARD usable from the very first meeting, with no administrative process.

A few controls target objects with restricted read access, notably the certificate services container and some configuration partitions. Without rights on those objects, these controls report not assessed, with the reason — never 'compliant'.

A control that was not assessed is not a compliant control. It is excluded from the score, from both numerator and denominator, and the report states how many controls are in that case. A percentage is always read against that number.

6.4 Testing and removing

The Test connection button checks actual access: an LDAP bind, then a real read of a directory object. A failed test leaves the connector disabled and locked. The application never enables a connector whose access has not been proven — an audit resting on an unreachable source would produce a falsely reassuring score.

Removing the configuration erases the connector's local settings. Nothing changes in the directory: AdGUARD never wrote to it.

6.5 Security of stored credentials

The read account's password is encrypted with DPAPI at machine scope. A configuration file copied to another machine is unreadable. On the other hand, every Windows account on the machine can decrypt it: this is deliberate, since they share the same audit workstation.

Prefer integrated authentication where possible: no password is stored, and directory-side traceability carries the auditor's name.

7. Controls and categories

7.1 The catalog

Version 0.1.0 embeds 176 controls across 8 built-in packs, compiled into the application itself: no JSON file ships alongside the executable, and the catalog is available from the very first run.

PackControls
Official — AD58
Active Directory attack paths (Tier 0 · Tradecraft · ACL)36
AD privileged accounts30
AD CS / ESC18
Official — AD hardening & legacy protocols16
Official — Trusts & LAPS9
Official — ADIDNS (directory-integrated DNS)6
Official — GPO hygiene3
Total176

7.2 Anatomy of a control

FieldDetail
IdentifierStable over time and prefixed by pack. This is the key to quote in an action plan or a remediation tracker.
CategoryOne of the 32 functional domains: Tier Zero, ACL delegation, Kerberos, AD CS · ESC, Trusts…
TitlePhrased as an expected action.
DescriptionWhat the control checks and why it matters.
LevelL1 or L2.
RemediationThe path to fix it, expressed as administration steps.
PowerShell commandProvided for all 176 controls, for guidance.
ReferenceA link to the matching documentation, on all 176 controls.
Framework mappingsFor example: NIST AC-6 · ISO 27001 A.8.2 · ANSSI R44 · DORA Art. 9 · NIS2 21.2(i) · MITRE T1557.

7.3 Levels L1 and L2

LevelMeaning and weight
L1Fundamental, applicable with no notable functional impact, expected in every directory. 96 controls. Weight ×3 in the score.
L2Hardening, to be weighed against context and usage. 80 controls. Weight ×1.

This weighting matters: failing an L1 control weighs three times more than an L2. It prevents a directory that neglected delegation but enabled many cosmetic hardening settings from showing a flattering score.

7.4 Selecting controls

The Security controls screen presents the catalog grouped by category, with a toggle per control, All / None actions per category, and a running counter 'X / Y controls selected'.

The catalog: controls grouped by category, with their level and an explanation of the check.

Manual selection suits a one-off adjustment. For a structured, reusable and above all defensible scope, use baselines (chapter 10).

7.5 Adding your own controls

Settings › New control extends the catalog without reinstalling, by importing JSON packs from a URL or a file. Imported packs are merged into the built-in catalog; a restart is needed to load them. Built-in packs cannot be deleted.

The New control screen: pack import and the list of installed packs.

Adding a single control, with its framework mappings.

This is the mechanism to carry an organisation's own requirements: an in-house policy, a recurring contractual clause, or a control demanded by an external auditor.

8. Compliance frameworks

8.1 The framework mapping principle

Every control is cross-referenced with the frameworks it satisfies. This mapping is not decorative: it is what allows an 'ANSSI' or 'CIS level 1' baseline to be produced without retyping anything, and a compliance-by-framework report to be issued.

8.2 Coverage

FrameworkControls mapped
ANSSI176 / 176 — recommendations and control points from the French agency, the backbone of this catalog.
ISO/IEC 27001:2022176 / 176 — Annex A clauses, A.5 organizational and A.8 technological.
NIST SP 800-53176 / 176 — control families, chiefly AC, IA, SC, SI, AU, CM.
NIS2176 / 176 — risk-management measures under article 21.
DORA176 / 176 — articles covering ICT risk management.
Microsoft Cloud Security Benchmark143 / 176 — MCSB domains, notably PA (privileged access) and IM (identity management).
MITRE ATT&CK81 / 176 — 18 distinct techniques, including Kerberoasting, AS-REP roasting, delegation and DCSync.
CIS Benchmarks56 / 176 — CIS Microsoft Windows Server and Active Directory hardening.

ANSSI, ISO, NIST, NIS2 and DORA cover the entire catalog. A baseline built on any of them taken as a whole would filter nothing: that is why the matching templates work at control-family level, which genuinely divides the scope.

8.3 MITRE ATT&CK

Where the other frameworks answer 'which requirement does this control satisfy', ATT&CK answers 'what does an attacker lose when this is fixed'. That framing carries far better in a steering committee than a clause number.

9. The ANSSI maturity model

9.1 The principle

Every control is tied to a tier from 1 to 5. The level attained is the highest tier N such that no non-compliant control remains at levels 1 through N. You therefore cannot claim a higher tier while a gap at a lower tier persists — that is what sets this reading apart from a plain percentage.

9.2 The five tiers

TierScope and count
1Tier 0 and privilege foundations: attack paths, ACL delegation, AD CS · ESC, privileged accounts and groups. 89 controls.
2Kerberos, legacy protocols and secrets: encryption, service accounts, trusts, LAPS. 33 controls.
3Policies and configuration: passwords, lockout, domain configuration, directory DNS, domain controller hardening, group policies. 35 controls.
4Estate and directory hygiene, detection. 17 controls.
5Governance and advanced hardening. 2 controls.

The catalog's concentration on tier 1 — 89 controls out of 176 — is not an imbalance: it reflects the reality of directory security, where most of the risk sits in Tier 0 and delegations.

10. Baselines

10.1 What a baseline is

A baseline is the agreed audit scope: the list of controls retained, those excluded, and any level adjustments. It is what makes an audit reproducible and defensible — without a baseline, the question 'why was this control not assessed?' has no documented answer.

10.2 The templates provided

Ten templates are provided. Each selects the controls matching a framework criterion and excludes the rest. The counts shown are computed from the actual catalog, never hard-coded: they follow automatically when controls are added.

TemplateControls kept
ANSSI176
NIS2176
DORA176
ISO 27001 — technological controls (A.8)148
NIST — access control (AC)106
Level 1 only96
CIS Benchmarks56
CIS — level 130
ISO 27001 — organizational controls (A.5)28
NIST — identification and authentication (IA)28

The Templates screen: each card states how many controls it keeps and how many are actually runnable.

10.3 The baseline editor

The editor holds the baseline's name, its scope — global for every domain, or specific to the active client — a free-text description to record exclusion rationales, and the full list of controls with their inclusion and level. The Active, Excluded and Re-levelled counters update live.

The category filter and the label search let you work one domain at a time: show only ACL delegation, or only AD CS controls, without scrolling through 176 rows.

The editor: baseline identity, counters, filters, then the full list of controls.

10.4 Good practice

11. Running an audit

11.1 Preparation

11.2 Start and follow

The Security audit › Run screen shows the retained scope at the top as 'X / 176 controls enabled', then the start button. During the run, a dial shows overall progress and the stream of evaluated controls scrolls past, with the detailed finding for each warning or non-compliance: the objects actually concerned, named.

11.3 The verdicts

VerdictEffect on the score
CompliantEarns the control's full weight. Includes the 'not applicable' case: no object of the targeted kind exists in the directory.
Non-compliantEarns zero. The offending objects are listed in the finding.
WarningEarns half the weight. Undetermined situation, an architecture choice, or partial compliance calling for human judgment.
Not assessedExcluded from the calculation, from neither numerator nor denominator: missing read right, absent object, or missing prerequisite.

11.4 How the score is calculated

poids d'un contrôle :  L1 → 3      L2 → 1

points obtenus     :  conforme       → 100 % du poids
                      avertissement  →  50 % du poids
                      non conforme   →   0

score = points obtenus / points possibles × 100

A plain 'compliant controls / assessed controls' ratio would treat a dangerous delegation on the administrators container the same as a minor logging setting. The weighting corrects that: the score reflects risk, not headcount.

12. Results, history and comparison

12.1 The results screen

Six headline figures give the immediate reading: controls assessed, compliance percentage, compliant, non-compliant, warnings and not assessed. Three tools refine the display: a search on the label, a filter by control category, and a filter by level. A counter always shows how many controls are displayed out of the total.

Clicking a row expands it to reveal the actual finding with the objects observed, the description, the remediation, the framework mappings, the PowerShell verification command and the documentation link.

An audit's detail: headline figures, filters, export buttons and one control expanded.

12.2 The history

Each row shows the date, the number of controls assessed, the score, the verdict breakdown and the change in points against the previous audit. A filter bar — search, period, applied baseline, and an 'X / Y' counter — makes it possible to find a specific audit in a growing history.

The history: one audit per row, with its filter bar and display counter.

This filtering is purely visual: the changes between audits are still computed over the complete sequence. Hiding a row does not rewrite the progression.

12.3 Comparing two audits

The comparison screen shows the score before and after, the change, the controls that became compliant and left non-compliance, the regressed controls — those that were compliant and no longer are, to handle first because a regression almost always signals an uncontrolled configuration change — and the improved controls, which are the substance of the debrief.

Comparing two audits with different scopes produces misleading changes. For a meaningful follow-up, re-run the same baseline.

13. The dashboard

13.1 Overall and per-category compliance

Since Active Directory is the only audited referential, a per-referential breakdown would have a single row. The dashboard therefore reasons by control category: the tiles show the eight weakest categories, and the stacked block lists them all, from least to most compliant. That list is what points to where the effort belongs.

Compliance by control category, weighted breakdown, weakest first.

13.2 Trend

The trend chart traces the compliance percentage over time. This is the curve to show in a steering committee: it makes the effect of remediation visible and, just as much, silent drift.

The compliance trend over time.

13.3 How to read the dashboard

14. Attack paths and trusts

14.1 What an attack path is

An attack path is a right held by a non-privileged principal over a critical object, allowing them to take control of it. It is not a software vulnerability: it is a legitimate delegation gone dangerous, often granted years earlier for a reason that no longer exists.

AdGUARD extracts these paths from the controls' findings and draws them as a graph: on the left the principal holding the right, on the right the targeted object, and between them an edge coloured by the severity of the right.

The attack path graph: who can compromise what in the directory.

14.2 Reading a path

RightWhat it allows
GenericAllFull control over the object: can change anything, including resetting the password and adding itself to the group.
WriteDACLCan rewrite the object's permissions, and therefore grant itself full control.
WriteOwnerCan take ownership of the object, which then allows granting itself full control.
DCSyncCan request directory replication, and therefore extract the password hashes of every account in the domain, krbtgt included.
ForceChangePasswordCan reset the account's password without knowing the current one.

The figure to watch is not the total number of paths, but the number of paths starting from a principal every domain user belongs to. Those are within reach of any account, including one compromised by phishing.

14.3 Trusts

A poorly filtered inbound trust extends every attack path beyond the audited domain. The trust graph shows the partners, the direction of the relationship and the weaknesses found: SID filtering off, TGT delegation, no selective authentication, RC4 encryption, stale trust password.

The trust graph: partners, direction and weaknesses found.

14.4 The remediation plan

The attack path report includes a dsacls remediation script. The removal commands are deliberately commented out: AdGUARD is a read-only tool and must never modify a directory by accident. The verification commands are active and have no side effect.

15. Reports and exports

15.1 How it works

Exporting combines two independent dimensions: a report type, which sets the editorial angle and the content, and one or more file formats, which set the medium. The chosen type applies to every format exported from an audit's detail.

Settings › Export: choosing the report type and enabling formats.

15.2 The six report types

TypeContent and recipient
Executive reportCover page with the client's logo, score, key figures and main findings. Deliberately concise and jargon-free. For executive management and the CISO.
Detailed technical reportEvery control assessed with, for each, the verdict, the finding, the description, the remediation and the framework mappings. For the team running the directory.
Prioritized remediation planNon-compliances only, ordered by criticality, with the expected corrective action. A working document, not a findings document.
Compliance by frameworkResults broken down by framework, to answer a formal compliance requirement. For an external auditor or a compliance function.
Situation reportThe exportable counterpart of the dashboard: score and change, trend curve, posture by category, ANSSI maturity, what moved since the previous point, the five priorities. For a steering committee.
Attack pathsWho can compromise what: the graph, the reading by target and by principal, the plain-language glossary of rights, the trusts and the remediation plan. For a technical debrief or a privilege review.

An exported report, with its branded header and headline figures.

15.3 The five formats

FormatTypical use
PDFFormal deliverable, archiving, contractual attachment.
HTMLStandalone formatted report, read in a browser and printed as is.
Excel (.xlsx)Analysis, remediation tracking, in-house dashboards.
CSVImport into a third-party tool, reprocessing, ticketing.
JSONAutomation, SIEM ingestion, timestamped evidence format.

JSON is the most useful evidence format: it holds every finding, the stable control identifiers and the issuer's identity. Kept alongside the delivered PDF, it allows an audit to be replayed or verified months later. For the attack path report it also embeds the graph in Graphviz and GraphML formats, which can be reopened in yEd or Gephi.

15.4 Which report for which purpose

SituationType and format
Executive committee debriefExecutive, as PDF
Quarterly reviewSituation, as PDF
Handover to the technical teamRemediation plan, as Excel or PDF
Privilege and delegation reviewAttack paths, as HTML then JSON
Answering a compliance questionnaireCompliance by framework, as PDF or Excel
Archived evidence of a dated auditDetailed technical, as JSON and PDF

16. Performance

Settings › Performance sets the number of controls analysed simultaneously, from 1 to 16, with a default of 8. Raising it speeds up the audit but puts more load on the domain controller being queried.

The built-in benchmark measures the duration of a simulated audit at different parallelism levels and points at the optimal setting for this machine. Beyond a certain point, contention costs more than it gains.

The parallelism setting and the built-in benchmark.

On a very large directory, an audit that slows down mid-run is a sign that the domain controller is throttling LDAP queries. This is normal and protective behaviour: working around it by raising parallelism would have the opposite effect.

17. Appendices

Appendix A — File layout

C:\Program Files\AdGUARD\        programme (remplacé à chaque mise à jour)
C:\ProgramData\AdGUARD\          données (jamais touchées par une réinstallation)
├── license.key
├── control-packs\
└── clients\<client>\
    ├── settings.json
    └── audit.db

Appendix B — Troubleshooting

SymptomLikely cause and action
The application starts on the activation screenLicense missing or invalid. Paste a valid key, or drop license.key into C:\ProgramData\AdGUARD\.
Cannot create a domainRecord quota reached. Delete an unused record or request a higher-quota license.
The connection test failsCheck the domain controller is reachable, the port (389 or 636), the account format and the search base. The error message names the step that failed.
The Security controls section is emptyThe connector is not configured. Fill it in and test it.
Many controls not assessedMissing read right on some containers, or a feature absent from the directory. These controls are excluded from the score; check the read account's rights.
Score dropped sharply with no known changeDifferent scope between the two audits. Compare the two audits and check the number of controls assessed on each side.
Newly imported controls do not appearRestart not done: imported packs are loaded at startup.

Appendix C — A typical engagement

PhaseActions
FramingCreate the domain record, fill in the engagement reference and known constraints. Agree the scope with the client.
ConnectionConfigure the connector and test it. Document any unreachable containers.
ScopeCreate a baseline from the relevant framework template. Justify every exclusion in the description.
Initial auditRun the audit and export the detailed report as JSON for timestamped evidence.
DebriefExecutive report as PDF for management, attack paths for the technical review, remediation plan for the team.
Follow-up auditRe-run the same baseline, compare with the initial audit and produce the situation report.
OngoingRe-audit periodically. The trend curve is the natural support for the steering committee.

Appendix D — Security and confidentiality

Appendix E — Glossary

TermDefinition
AD CSActive Directory Certificate Services, the directory-integrated certificate authority. Misconfigured templates (ESC1 to ESC8) allow privilege escalation.
ADIDNSDirectory-integrated DNS. Its zones grant broad creation rights by default, exploitable to intercept traffic.
ANSSIThe French national cybersecurity agency, whose Active Directory recommendations form the backbone of this catalog.
DCSyncA directory replication request, allowing the password hashes of every account to be extracted.
Unconstrained delegationAn account allowed to reuse the Kerberos ticket of any user authenticating to it. One of the most dangerous configurations in a directory.
DPAPIThe Windows Data Protection API, used here to encrypt secrets stored on the machine.
KerberoastingOffline extraction of a service account's password from a legitimately requested Kerberos ticket.
LAPSLocal Administrator Password Solution: unique local administrator passwords managed by the directory.
LDAPSLDAP over TLS, port 636. Protects the directory bind against eavesdropping and interception.
Tier 0The set of objects whose compromise entails that of the domain: domain controllers, administration accounts and groups, AD CS.
SID filteringThe filtering that prevents a trusted domain from injecting privileged security identifiers of the trusting domain.