User guide

EntraGUARD

Configuration and security auditing for Microsoft Entra ID tenants and the associated Microsoft 365 services
Documented version 1.0 · Windows desktop application · Fully offline · Read-only

About this guide

This document describes how to use EntraGUARD 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 tenant, control selection, baselines and compliance frameworks, running audits, reading the results and exporting reports.

Who this guide is for

Documented version

ItemValue
ApplicationEntraGUARD 0.1.0
PlatformWindows x64 — WPF, .NET 10
Control catalog323 controls across 13 built-in packs
Connectors8 (Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange Online, Purview, Intune)
Baseline templates17, computed dynamically from the catalog
Interface languagesEnglish and French, switchable on the fly
A note on the screenshots. A few illustrations in this guide (Connectors, New control, Baseline templates, About) come from a version predating the split of EntraGUARD, AdGUARD and AzureGUARD into three separate products. They may still show the Active Directory and Azure connectors, along with different control counts. The text itself always describes version 0.1.0 as shipped: 8 connectors, 323 controls, 17 templates. Active Directory auditing is handled by AdGUARD and Azure auditing by AzureGUARD.

1. Introduction

1.1 What EntraGUARD is

EntraGUARD is a Windows desktop application that audits the security configuration of a Microsoft Entra ID tenant and its associated Microsoft 365 services. It queries the Microsoft APIs read-only, compares the live configuration against a catalog of 323 control points drawn from recognized public frameworks, and produces a compliance score, a control-by-control breakdown and exportable reports.

The idea is simple. A manual audit means walking through dozens of screens across the Entra portal, the Microsoft 365 admin center, Defender, Purview and Exchange Online, noting the gaps in a spreadsheet. EntraGUARD covers the same ground in about fifteen seconds, repeatably, and keeps the history so you can measure progress.

1.2 Design principles

PrincipleWhat it means in practice
Read-onlyNo write permission is requested or used on the audited tenant. The application does not fix anything: it observes and recommends.
Runs locallyThe application runs on the auditor's workstation. Results, connection credentials and history stay on that machine. No SaaS middleman, no telemetry, no data sent back to the vendor.
Multi-tenantOne record per audited company, each with its own connectors, its own history database and its own report logo. Two clients' data never mix.
Name from the licenseThe 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 by cryptographic signature. No activation server to reach, and no outbound connection other than to the Microsoft APIs queried during the audit.
TraceableEvery control carries a stable identifier, a level, its framework mappings and a link to the Microsoft documentation. Those elements appear identically in the interface and in every export format.

1.3 What EntraGUARD does not do

1.4 Functional architecture

The application is built on five components:

  1. The connectors establish read access to the Microsoft APIs (Microsoft Graph for Entra ID, SharePoint, OneDrive, Teams, Defender, Intune and Purview; Exchange Online Management for mail).
  2. The control catalog describes what to check: 323 control points grouped into 13 packs, each tied to a referential, a category, a criticality level and a set of framework mappings.
  3. Baselines define the scope retained for a given engagement: which controls are in scope, which are excluded, and at what criticality level.
  4. The audit engine runs the selected controls in parallel, assigns a verdict to each and computes a weighted score.
  5. Reports present the outcome from four editorial angles (executive, technical, action plan, regulatory compliance) and in five file formats.

1.5 Terminology

TermDefinition
Tenant / CompanyThe audited Microsoft tenant. In the application, each tenant has a "company record" holding its connectors, its history and its report logo.
ConnectorThe technical link to a data source (Entra ID, SharePoint, Exchange…). An unconfigured connector locks every control in its referential.
ReferentialThe audited source: Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange Online, Purview, Intune. Not to be confused with a compliance framework.
ControlA single check, for example "Require MFA for all administrator roles". Carries a stable identifier (ENTRA-001…), a description, remediation guidance and framework mappings.
Control packA group of controls shipped as a unit. The 13 built-in packs are embedded in the application; additional packs can be imported as JSON.
Level (L1 / L2)The control's criticality, following the CIS benchmark logic. L1 = fundamental, applicable with no significant functional impact. L2 = hardening, to be weighed against context.
FrameworkAn external compliance framework (CIS, NIST 800-53, ISO/IEC 27001, ANSSI, NIS2, DORA, MCSB, CISA SCuBA) that controls are mapped to.
BaselineThe audit scope retained: a subset of the catalog, with optional level adjustments. Either global (all clients) or specific to one client.
Baseline templateA baseline precomputed from a compliance criterion ("all controls mapped to ANSSI", "CIS level 1 only"…). A starting point, editable afterwards.
Audit (run)A dated execution. Kept in the company's history with its score, its scope and the full detail of its results.
VerdictA control's outcome: compliant, non-compliant, warning, or not assessed.
Compliance scoreThe weighted percentage of points earned over points available. See § 10.4.

2. Installation and first run

2.1 Requirements

ItemRequirement
Operating systemWindows 10 (1809 or later) or Windows 11, x64.
.NET runtimeThe .NET 10 Desktop Runtime, unless the application was delivered to you as a self-contained build, in which case nothing needs installing.
RightsLocal administrator rights on the workstation to install. They are also needed to create a certificate in the machine store during automatic provisioning (§ 6.4).
NetworkOutbound HTTPS to graph.microsoft.com, login.microsoftonline.com and outlook.office365.com (Exchange Online Management).
Microsoft accountDepending on the scenario chosen in chapter 6: either an administrator account of the audited tenant at connection time, or only the credentials of an application supplied by the client.
Display1280 × 800 minimum; 1600 × 900 recommended for the dashboard.
LicenseA valid license key (§ 3).

2.2 Installation

The application ships as a standard Windows installer (EntraGUARD-Setup-0.1.0.exe, built with Inno Setup):

  1. Run the installer with a local administrator account.
  2. It installs to C:\Program Files\EntraGUARD for all users of the workstation.
  3. A Start menu shortcut is created; a desktop shortcut is offered as an option.
  4. On first launch, the application creates its shared data area (§ 2.3).

Later updates install over the top: the application ID is stable, so 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 sits under a single root, shared across every Windows account on the machine. That is a deliberate choice: on a shared audit workstation, two consultants must find the same clients and the same history.

C:\ProgramData\EntraGUARD\
├── license.key                  installed license key (shared by the whole machine)
├── control-packs\               imported control packs (JSON)
├── connector-packs\             imported connector packs (JSON)
└── clients\
    ├── <client-1>\
    │   ├── settings.json        connectors, export, branding, performance
    │   └── audit.db             SQLite database: history and detailed results
    └── <client-2>\
        └── ...

HKCU\Software\EntraGUARD\ActiveClient   selected client (per Windows session)
The active client is stored per Windows user in the registry: two sessions open on the same machine can work on two different clients at once, while sharing the same set of company records.

If the application previously ran in a version that stored data in the user profile (%AppData%\EntraGUARD), the contents are copied — not moved — to the new root on first launch. The old folder stays in place as a backup.

2.4 First run

Getting started takes six steps:

  1. Activate the license — Settings › License, paste the key you were given (§ 3.3).
  2. Create the first tenant — Tenants › Add a tenant, filling in at least the name and the tenant domain (§ 5.2). The application name itself comes from your license (§ 4).
  3. Create the first company — Companies › Add a company, filling in at least the name and the tenant domain (§ 5.2).
  4. Connect the tenant — Settings › Connectors, configure Entra ID using one of the two scenarios in chapter 6, then enable the Microsoft 365 connectors you need.
  5. Choose the scope — Baselines › Templates to start from a compliance framework, or Security controls to pick manually (§ 7.4 and § 9).
  6. Run the first audit — Security audit › Execution, then export the report (§ 10 and § 13).
Allow about fifteen minutes for steps 1 to 4 with automatic provisioning, and anywhere from a few hours to a few days if the client has to create the application in their tenant themselves — the delay there is administrative, not technical.

2.5 The interface

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

The sidebar is organized as follows:

SectionContents
CompaniesThe portfolio of audited tenants, then the record of the active company.
DashboardPosture summary for the active company.
Security auditRunning an audit, and the history of past audits.
Security controlsOne entry per referential whose connector is configured: Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange, Purview, Intune.
BaselinesThe baseline editor, the framework templates, then the list of saved baselines.
SettingsConnectors, Export, Performance, New control, License.
AboutVersion, technology stack, frameworks covered, framework mapping method.
Entries under "Security controls" only appear for referentials whose connector is configured. A sidebar that looks incomplete almost always means a connector is not enabled, not that something is wrong with the application.

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 tenantsMaximum number of tenant 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 EntraGUARD: a license issued for AdGUARD or AzureGUARD 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 EntraGUARD 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 EntraGUARD. 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 license is authentic and untampered), the product (it is indeed an EntraGUARD license), the expiry and the tenant cap. It then shows the license state, the holder's name, the expiry date and the number of tenants allowed.

3.4 The four states

StateMeaningConsequence
No licenseNo license registered on the machine.Creating tenants 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 tenant 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 tenant quota

The license sets a maximum number of tenant records. When that cap is reached, adding a new tenant is refused, with a message stating the current limit and the number of records already created. To audit more tenants, 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 "EntraGUARD".

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.

In concrete terms, a report footer shows the holder's name and the date, once, with no duplicate.

4.3 The audited tenant's logo

The audited tenant's logo, by contrast, is still fully supported — this is a notion distinct from the issuer's identity. From a tenant record (§ 5.2) you can attach a logo: it appears on the cover page of that tenant'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 tenants 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 companies

5.1 The portfolio

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

For each company the list shows its domain, contact, industry and country, plus two sortable posture columns: the date of the last audit (or "Never" in italics) and the score obtained, colored by band, with the point difference against the previous audit. A CSV export of the whole portfolio is available from the list header.

5.2 The company record

Company record block — the client's details:

FieldUse
Company nameRequired. Carried on the report cover.
Microsoft domain / tenantThe tenant's primary domain. Serves as a landmark and makes identification easier across a large portfolio.
Primary contact, email, phoneThe client-side point of contact for the engagement.
IndustryUseful context for recommendations (a SCuBA control does not carry the same weight for a critical infrastructure operator as for a small business).
CountryUseful for the applicable regulatory framework (NIS2, DORA, national frameworks).
Engagement referencePurchase order, case or contract number.
NotesFree text: client constraints, agreed scope, negotiated exclusions.
Record created onFilled in automatically.

5.3 Activity

The Activity block of the record summarizes the client's posture: number of audits run, date and score of the last audit with its delta, overall score, number of configured connectors, the compliant / warning / non-compliant split of the last audit, and the list of referentials actually audited. This is the view to open before a client meeting: ten seconds and you know where things stand.

5.4 The active company and data separation

At any moment exactly one company is active. It appears at the top of the sidebar and drives everything else: the connectors shown, the baselines available, the history consulted, the dashboard and the reports produced all belong to that company. Switching happens on the fly from the list, with no restart.

Each company has its own folder on disk, with its own settings (settings.json) and its own history database (audit.db). One client's tenant credentials are therefore never reachable from another client's context.

Always check which company is active before running an audit or an export. It is the number one source of mistakes in multi-client use.

6. Connectors: connecting the audited tenant

6.1 Overview

Connectors are the technical entry point of the audit. Each one opens read access to a data source; an unconfigured connector locks every control in its referential, which are then excluded from scope and do not count toward the score.

ConnectorWhat it auditsTechnical access
Microsoft Entra IDAuthentication, MFA, Conditional Access, privileged roles, PIM, applications and consent, guests and external access, federation and hybrid identity, workload identities.Microsoft Graph, dedicated application (certificate or secret).
SharePointExternal sharing, link types, sync, site governance.Microsoft Graph, through the Entra application.
OneDriveRetention, sync, sharing.Microsoft Graph, through the Entra application.
TeamsTeam lifecycle, guests, meetings, channels, third-party apps.Microsoft Graph, through the Entra application.
Microsoft DefenderDefender XDR posture, Secure Score, alerts, incidents, attack simulations, Defender for Office 365 protection.Graph Security API, through the Entra application.
Exchange OnlineExternal forwarding, legacy authentication, mail protection, mail flow, the CISA SCuBA Exchange baseline.Exchange Online Management in app-only mode, certificate authentication is mandatory.
Microsoft PurviewInformation protection, DLP, labels, retention, insider risk, audit.Reuses the Exchange connector's certificate.
IntuneDevice compliance, configuration policies, endpoint management governance.Microsoft Graph, through the Entra application.

A connector's possible states are Configured or Not configured for Entra ID, and Enabled or Disabled for the connectors that depend on it.

6.2 The two deployment models

Everything rests on a registered application in the client's tenant, holding read-only application permissions. There are two routes to that application, and choosing between them is above all a question of the client's internal policy, not of technical capability.

Scenario AScenario B
NameThe audited company supplies the applicationAutomatic provisioning, with an administrator present
Mode in the application"Use an existing application""Create the application"
Who creates the app registrationThe client's administrator, in their Entra portalEntraGUARD, automatically
What the auditor receivesA tenant ID, an application ID and a secret (or a certificate thumbprint)Nothing: the administrator signs in once inside the application
Administrator accountNever used by the auditorRequired once, at connection time

6.3 Scenario A — the audited company supplies the application

This is the scenario to favor with clients whose security policy forbids a supplier from handling an administrator account, or who insist on keeping control over the permissions granted.

On the client side, the tenant administrator:

  1. Creates an application in Entra ID › App registrations (any name, for example "Security audit — <your company>").
  2. Adds the application permissions for Microsoft Graph listed in § 6.9, all read-only.
  3. Grants admin consent for those permissions.
  4. Generates a client secret, or uploads a certificate whose thumbprint will be shared.
  5. Sends the tenant ID, the application ID and the secret (or thumbprint) over a secure channel.

On the auditor side, in Settings › Connectors › Microsoft Entra ID:

  1. Choose the Use an existing application mode.
  2. Enter the tenant ID and the application ID.
  3. Provide either the client secret, or the thumbprint of a certificate already present in the workstation's Windows store.
  4. Click Test and connect.

The test validates two things in turn: that a token can be obtained (the credentials are right), then that a real call to Microsoft Graph succeeds (the permissions were actually granted). Successful authentication followed by an access denial means the application was created correctly but its permissions are incomplete or admin consent was never given — the error message then reports the HTTP status returned.

AdvantagesPoints to watch
No administrator account is entrusted to the supplier.The timeline depends on the client team's availability; this is the critical path of the engagement.
The client keeps full control: they can see the application, its permissions and its access logs.A missing permission shows up as controls in error, which then have to be diagnosed and fixed.
Revocation is immediate and unilateral: deleting the application cuts all access.You must give the client an exact, unambiguous list of permissions (§ 6.9).
Compatible with the strictest policies and with an audit run under client supervision.Client secrets have a limited lifetime: plan for renewal on long engagements.

6.4 Scenario B — automatic provisioning, with an administrator present

Here the application does all the work. The tenant administrator signs in once, interactively, and the application chains creation and configuration together.

Steps in Settings › Connectors › Microsoft Entra ID:

  1. Choose the Create the application mode.
  2. Enter the name for the app registration ("EntraGUARD" by default).
  3. Choose the authentication method: certificate (self-signed, placed in the machine store — the application must then be run as administrator) or client secret (generated by Entra, valid for two years, shown only once).
  4. Click Create the application: a Microsoft sign-in window opens and the administrator authenticates.
  5. The application creates the app registration, attaches the certificate or secret, grants the application permissions and admin consent, then chains the Exchange configuration automatically (§ 6.7).

The operation takes up to a minute, allowing for replication on the Azure side. The delegated permissions requested from the administrator during that phase, and only during that phase, are Application.ReadWrite.All, AppRoleAssignment.ReadWrite.All and Directory.Read.All. They exist to create the application and grant it its rights; the audit itself then uses only the read-only application permissions.

AdvantagesPoints to watch
Up and running in minutes, with no back-and-forth with the client's team.Requires a global administrator of the tenant to actually be present at connection time.
No permission mistakes are possible: the list is applied by the application itself.Some internal policies forbid a third-party tool from creating an application in the tenant.
The Exchange configuration, which is the fiddliest to do by hand, is chained automatically.Certificate mode requires running the application as a local administrator.
Fully reversible: the application can be deleted from the tenant from within the interface.The client secret expires after two years; certificates must be renewed according to their validity.

6.5 Choosing between the two scenarios

SituationRecommended scenario
Large enterprise, formal security policy, external supplierA — the client supplies the application
Internal audit on your own tenantB — automatic provisioning
Small business with no dedicated IT team, administrator available in the meetingB — automatic provisioning
One-off engagement with mandatory privileged account reviewA — the client supplies the application
MSP portfolio with delegated access already in placeA, with a dedicated application per client
Demonstration or proof of conceptB — immediate start, then delete the application afterwards

6.6 The Microsoft 365 connectors

Once the Entra ID connector is configured, the SharePoint, OneDrive, Teams, Defender and Intune connectors are enabled with a single toggle: they reuse the same application and the same Graph permissions. Each has a Test connection button.

The rule is strict and deliberately without exception: a failed test leaves the connector disabled and locked. The application never silently enables a connector whose access has not been proven — an audit resting on an unreachable source would produce a falsely reassuring score.

6.7 Exchange Online and Purview

Exchange Online is a special case: its app-only API requires certificate authentication, a client secret is not enough. Three things must be in place in the tenant:

  1. A certificate attached to the Entra application.
  2. The Exchange.ManageAsApp application permission, held by the "Office 365 Exchange Online" resource rather than by Microsoft Graph.
  3. The Global Reader directory role assigned to the application's service principal.

In scenario B these three steps are chained automatically after the application is created, and the application switches from a secret to a certificate if needed. In scenario A they must be requested explicitly from the client, failing which the Exchange connector stays unreachable even though Entra ID works perfectly.

The Purview connector reuses the certificate set up for Exchange: if Exchange works, Purview enables itself with no further configuration.

6.8 Test, remove, delete

Three distinct actions, not to be confused:

ActionEffectRights needed
Test connectionChecks effective access to the source. Writes nothing.None
Remove configurationErases the connector's local configuration (tenant, application, certificate or secret). The application stays in place in the client's tenant and nothing is changed on the Microsoft side.No rights on the tenant
Delete application from tenantActually deletes the app registration in the client's tenant. Irreversible.Tenant administrator
Removing the Entra configuration automatically disables every Microsoft 365 connector that depends on it: SharePoint, OneDrive, Teams, Defender, Purview, Exchange and Intune.

6.9 Required permissions

This is the table to hand to the client in scenario A. All of these are read-only application permissions. No write permission is requested, or used.

PermissionWhat it allows readingUsed by
Directory.Read.AllDirectory dataEntra ID, Teams
User.Read.AllUser profilesEntra ID
Group.Read.AllGroupsEntra ID
Policy.Read.AllTenant policies (Conditional Access, authentication methods, cross-tenant access…)Entra ID
RoleManagement.Read.DirectoryDirectory role assignmentsEntra ID, PIM
Application.Read.AllApplications and service principalsEntra ID
Organization.Read.AllOrganization informationEntra ID
AuditLog.Read.AllAudit and sign-in logsEntra ID
AccessReview.Read.AllAccess reviewsGovernance
LifecycleWorkflows.Read.AllLifecycle workflowsGovernance
EntitlementManagement.Read.AllEntitlement managementGovernance
SharePointTenantSettings.Read.AllSharePoint and OneDrive tenant settingsSharePoint, OneDrive
TeamworkAppSettings.Read.AllTeams app settingsTeams
SecurityEvents.Read.AllSecurity eventsDefender
SecurityAlert.Read.AllSecurity alertsDefender
SecurityIncident.Read.AllSecurity incidentsDefender
AttackSimulation.Read.AllAttack simulation campaignsDefender
DeviceManagementConfiguration.Read.AllIntune configuration policiesIntune
DeviceManagementManagedDevices.Read.AllIntune managed devicesIntune
Exchange.ManageAsApp (Office 365 Exchange Online)App-only access to Exchange OnlineExchange, Purview

On top of that, for Exchange and Purview only, the Global Reader directory role must be assigned to the application's service principal. It is a read role: it allows no changes.

6.10 Security of stored credentials

Secrets kept on the workstation (the Entra client secret, connector secrets) are encrypted with DPAPI at machine scope. In practice:

Prefer certificate authentication over a client secret when the client allows it: the private key stays in the Windows store and is never copied into a configuration file.

7. Controls and referentials

7.1 The catalog

Version 0.1.0 ships 323 controls across 13 built-in packs, compiled into the application itself: no JSON file is distributed alongside the executable, and the catalog is available from the very first launch.

PackReferentialControls
Official — EntraEntra ID85
Entra federation & hybrid identityEntra ID13
Entra PIM & privileged accountsEntra ID14
Entra workload identities & applicationsEntra ID10
Entra modern authentication & external accessEntra ID14
Official — Exchange OnlineExchange31
CISA SCuBA — Exchange OnlineExchange38
Official — TeamsTeams28
CIS Microsoft IntuneIntune23
Official — DefenderDefender22
Official — SharePointSharePoint19
Official — Microsoft PurviewPurview17
Official — OneDriveOneDrive9
Total323

By referential: Entra ID 136, Exchange 69, Teams 28, Intune 23, Defender 22, SharePoint 19, Purview 17, OneDrive 9.

7.2 Anatomy of a control

Every control carries the following, all of which appear in the interface and in exports:

FieldExample / detail
IdentifierENTRA-001 — stable over time, prefixed by pack. This is the key to quote in an action plan or a remediation tracker.
ReferentialEntra ID, Exchange, Teams…
Category"Multi-factor authentication", "Roles and privileged administration", "External sharing"… The catalog has 83 categories.
TitlePhrased as an expected action: "Enable number matching in Microsoft Authenticator".
DescriptionWhat the control checks and why it matters.
LevelL1 or L2.
RemediationThe fix, expressed in terms of the Microsoft portals.
PowerShell commandProvided for 287 of the 323 controls, for information.
ReferenceA link to the matching Microsoft Learn documentation (322 controls out of 323).
Framework mappingsFor example: CIS Entra ID · NIST IA-2 · ISO 27001 A.8.5 · ANSSI MFA · DORA Art. 9 · NIS2 21.2(j) · MCSB IM-6.

7.3 Levels L1 and L2

LevelMeaningWeight in the score
L1Fundamental. A recommendation that applies with no significant functional impact, expected in any tenant. 167 controls.×3
L2Hardening. A measure to weigh against context, usage and available licensing. 156 controls.×1

This weighting is structural: missing an L1 control costs three times as much as an L2. It prevents a tenant that has neglected MFA but enabled a pile of cosmetic hardening measures from posting a flattering score.

7.4 Selecting controls

The Security controls section of the sidebar has one entry per referential whose connector is configured. Each screen groups controls by category, with a toggle per control and All / None actions at category level, plus Select all / Deselect all at the top. A "X / Y controls selected" counter always shows the scope retained.

Manual selection is fine for a one-off adjustment. For a structured, reusable scope — and above all one you can justify to a client — use baselines (§ 9).

7.5 Adding your own controls

The Settings › New control screen extends the catalog without reinstalling the application, by importing control packs in JSON. Two routes: by URL (an internal share or a public address) or by file import.

Imported packs are merged into the built-in catalog. A restart is needed to load them into the audit referentials — the application offers to do it. Built-in packs are part of the application and cannot be deleted; only imported packs can be removed.

This is the mechanism to use for organization-specific requirements: an in-house policy, a recurring contractual clause, or a control demanded by an external auditor.

8. Compliance frameworks

8.1 The mapping principle

Every control in the catalog is cross-referenced to the frameworks it answers to. That cross-referencing 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 generated. The mappings appear in each control's detail and in every export format.

8.2 Coverage

FrameworkControls mappedNature of the mapping
ISO/IEC 27001:2022323 / 323Annex A clauses. A.5 (organizational) and A.8 (technological).
NIST SP 800-53323 / 323Control families: AC, IA, AU, CM, SC, SI, IR, CP, PM, RA, AT, MP.
NIS2323 / 323Risk-management measures under article 21.
DORA323 / 323Articles covering ICT risk management.
Microsoft Cloud Security Benchmark323 / 323MCSB domains, notably IM (Identity Management) and PA (Privileged Access).
CIS Benchmarks268 / 323CIS Microsoft Entra ID, CIS Microsoft 365 Foundations, CIS Microsoft Intune.
CISA SCuBA99 / 323The Secure Cloud Business Applications program, including 38 controls for the Exchange Online baseline (MS.EXO.1 to 17).
ANSSI89 / 323Recommendations and control points from the French agency.
Microsoft Secure Score11 / 323Improvement actions measured by Microsoft.
MITRE ATT&CK2 / 323Associated attack techniques.
ISO 27001, NIST, NIS2, DORA and MCSB cover the entire catalog. A baseline built on any of those taken as a whole would therefore filter nothing — which is why the corresponding templates work at the level of control families (ISO A.5 vs A.8, NIST AC vs IA…), which do carve up the scope meaningfully.

8.3 Use in engagements

9. Baselines

9.1 What a baseline is

A baseline is the agreed audit scope: the list of controls retained, those set aside, and any level adjustments. It is the object that makes an audit repeatable and defensible — without one, the question "why was this control not assessed?" has no documented answer.

A baseline is defined by:

9.2 The templates provided

Seventeen templates are offered. Each selects the controls matching a compliance criterion and excludes the rest. The counts shown are computed from the real catalog, never hard-coded: they follow automatically as controls are added.

TemplateCriterionControls
CIS Microsoft 365 BenchmarkAll controls mapped to CIS268
CIS — level 1CIS controls at level L1 only153
ANSSIControls mapped to ANSSI89
NIS2Controls mapped to NIS2323
DORAControls mapped to DORA323
ISO 27001 — technological controlsAnnex A.8216
ISO 27001 — organizational controlsAnnex A.5102
NIST — access controlAC family117
NIST — identification and authenticationIA family44
NIST 800-171 / CMMC level 2AC, IA, AU, CM, SC, SI families296
SOC 2 — CC6 / CC7AC, IA, AU, SI families207
HIPAA — Security Rule §164.312AC, AU, IA, SC, SI families261
MCSB — Identity ManagementMCSB IM domain162
MCSB — Privileged AccessMCSB PA domain42
CISA SCuBA — full programControls mapped to CISA SCuBA99
CISA SCuBA — Exchange OnlineThe MS.EXO.1 to 17 baseline38
Level 1 onlyAcross all frameworks, L1 controls167
Each card shows two figures: how many controls the template keeps, and how many of those are actually runnable with the connectors currently configured. The gap between the two is explained by missing connectors. Announcing a 268-control template when only 130 will run would be misleading, hence the double figure.

9.3 Creating a baseline from a template

  1. Open Baselines › Templates.
  2. Find the template matching the engagement and check the runnable count.
  3. Click Create a baseline: the editor opens with the selection pre-applied.
  4. Name the baseline, choose its scope, adjust if needed, then Save.

9.4 The baseline editor

ElementPurpose
Baseline nameRequired to save. The application warns if you try to save without one.
Scope — Global / ClientGlobal: the baseline is offered for every company. Client: it only appears for the active company. An info icon restates the distinction.
DescriptionFree text. This is where exclusion rationales belong.
CountersActive, Excluded, Re-levelled — updated live.
Referential filterLimited to referentials whose connector is enabled.
SearchFilters controls by title.
Modified onlyShows only excluded or re-levelled controls — handy for reviewing your changes before saving.
Include all / Exclude allActs on the current selection after filtering.
Level columnRe-levels a control (Standard, L1, L2) for this baseline only, without changing the catalog.
SaveSaves the baseline. Until saved, it remains a draft.
Apply to auditImmediately switches the audit's control selection to this baseline.
DeleteRemoves the baseline.

9.5 Global or client scope

ScopeWhen to use it
GlobalYour in-house methodology, applied to every client: the core set of controls you always assess, whatever the context. It is what makes your audits comparable to one another.
ClientA scope negotiated with one client: exclusions tied to their licensing, their organization, or points explicitly out of contractual scope.

9.6 Good practice

10. Running an audit

10.1 Preparation

Three checks before starting:

  1. The active company is the one you expect (top of the sidebar).
  2. The connectors you need are configured and tested.
  3. The scope is settled: a baseline applied, or a manual selection confirmed.

10.2 Starting and following the run

The Security audit › Execution screen shows the retained scope at the top as "X / 323 controls enabled", then the Start security audit button.

During the run:

10.3 Verdicts

VerdictMeaningEffect on the score
CompliantThe observed configuration satisfies the control.Earns the control's full weight.
Non-compliantThe configuration does not satisfy the control.Earns zero points.
WarningUndetermined or partially satisfied: the control needs human judgment, or the available data does not allow an automatic decision.Earns half the weight.
Error / Not assessedThe control could not be evaluated: source unreachable, API unavailable, missing permission, or feature absent from the tenant.Excluded from the calculation — neither numerator nor denominator.
How errors are handled is an important methodological choice: a broken connector must neither drag compliance down nor inflate it artificially. An audit with many errors therefore shows a score computed over a reduced scope — always check how many controls were actually assessed before reading a percentage.

10.4 How the score is calculated

The compliance score is weighted by criticality, not computed as a plain ratio:

control weight :  L1 → 3     L2 → 1

points earned  :  compliant       → 100 % of the weight
                  warning         →  50 % of the weight
                  non-compliant   →   0

score = points earned / points available × 100

A plain "compliant controls / assessed controls" ratio would treat missing MFA on admin accounts the same as a minor OneDrive sharing tweak. The weighting corrects that: the score reflects risk, not headcount.

The same weighting is applied to the dashboard's per-referential breakdown, which is why a referential showing "15 / 58 compliant" can score 38 % rather than 26 %: controls do not all carry the same weight, and warnings count for half.

10.5 End of audit

When the run finishes, a banner summarizes the score, the verdict split and the duration. As an order of magnitude, 194 controls across six referentials complete in about 16 seconds with the default parallelism setting. The audit is saved to the company's history automatically; a link takes you straight to its detail.

11. Results, history and comparison

11.1 The results screen

Five headline figures give the immediate picture: controls assessed, compliance percentage, and counts of compliant, non-compliant and warning results. Each of the last three is clickable and filters the list below.

Three tools refine the display:

An "X / Y" counter always shows how many controls are displayed out of the total.

11.2 A control's detail

Clicking a row expands it to reveal:

11.3 The history

Each row shows the date and time, the number of controls assessed, the referentials covered as badges, the score, the compliant / non-compliant / warning split and the point difference against the previous audit (green for a rise, red for a fall, or "stable"). Full detail opens on click.

Filters at the top narrow the display to a period (30 days, 90 days, 12 months, all) and to a referential, with an "X shown of Y" counter. That filtering is purely visual: differences are still computed over the complete sequence of audits.

A CSV export of the history is available from the header: scores, differences, baseline applied, referentials covered, reference flag and auditor note.

11.4 Notes and reference audits

Two features make the history usable over time:

11.5 Comparing two audits

The Compare two audits button in the history opens a dedicated screen. You pick audit A (before) and audit B (after), and the application reports:

The comparison is exportable, which makes it the natural support for a steering committee or an end-of-remediation review.

Comparing two audits with different scopes produces misleading differences: an audit covering 19 controls does not usefully compare to one covering 194. For meaningful tracking, re-run the same baseline.

11.6 Retention

History is kept for 36 months, beyond which the oldest audits are purged automatically — except those pinned as reference audits. A Clear history button also allows a manual purge, which is irreversible.

12. The dashboard

The dashboard gives the overall picture of the active company's posture. It draws on the most recent audit for each referential: re-auditing a single referential only refreshes that part, the rest keeping its last known value.

12.1 Overall compliance

A summary chart — whose type you can choose — shows the overall compliance percentage, computed with the weighting described in § 10.4. Alongside it, one card per referential gives its own percentage with a progress bar and a status dot.

12.2 Compliance by referential

A dedicated block breaks down, referential by referential, the weighted split of controls between compliant, warning and non-compliant, as stacked bars. Referentials are sorted from least to most compliant: the first in the list is where to put the effort. Each row restates the raw count ("15 / 58 compliant") next to the weighted percentage.

12.3 Trend

A trend chart traces the compliance percentage over time, either overall or referential by referential. This is the curve to show in a steering committee: it makes the effect of remediation visible, and equally, silent drift.

12.4 How to read the dashboard

13. Reports and exports

13.1 The principle

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

13.2 The four report types

TypeContentsAudience
Executive reportCover page with the client's logo, compliance score, key indicators, summary by referential and headline findings. Deliberately concise and jargon-free.Executive management, security committee, CISO
Detailed technical reportEvery control assessed, each with its verdict, the finding, the description, the remediation and the framework mappings.IT team, tenant administrators
Prioritized remediation planNon-compliances only, ordered by criticality, with the corrective action expected. A working document, not a findings document.Remediation project lead, operations provider
Compliance by frameworkResults broken down by compliance framework (CIS, ANSSI, NIST, ISO 27001…), to answer a formalized compliance requirement.External auditor, regulator, compliance department

13.3 The five formats

FormatCharacteristicsTypical use
PDFPaginated document (summary and control table), generated natively.Formal deliverable, archiving, contractual attachment.
HTMLStandalone formatted report: indicators and a color-coded table. Reads in a browser, prints as is.Quick distribution, on-screen reading, intranet.
Excel (.xlsx)Native workbook, ready for sorting, filtering and formatting.Analysis, remediation tracking, in-house dashboards.
CSVSemicolon-separated values, UTF-8 with BOM.Import into a third-party tool, reprocessing, ticketing.
JSONComplete structure: summary and detail of every control, with issuer metadata.Automation, SIEM ingestion, timestamped evidence format.

Formats are enabled independently in Settings › Export. HTML and PDF are on by default. Only enabled formats appear as export buttons in an audit's detail.

JSON is the most interesting format as evidence: it holds every finding, the stable control identifiers and the issuer's identity. Kept alongside the delivered PDF, it lets you replay or verify an audit months later.

13.4 Header and cover

Three elements drive report layout:

13.5 Exporting

  1. Open the audit from the history.
  2. Check the report type selected in Settings › Export.
  3. Click the button for the format you want, at the top of the results list.
  4. Choose where to save.
An export always covers the whole audit, regardless of the filters applied on screen. Filtering on non-compliances and then exporting does not produce a partial report: use the "Prioritized remediation plan" type for that.

13.6 Which report for which use

SituationTypeFormat
Debrief to an executive committeeExecutivePDF
Handover to the technical team for fixesPrioritized remediation planExcel or PDF
Technical appendix to an audit reportDetailed technicalPDF
Answering a compliance questionnaireCompliance by frameworkPDF or Excel
Feeding a tracking tool or a SIEMDetailed technicalJSON or CSV
Archived evidence of a dated auditDetailed technicalJSON + PDF

13.7 The other exports

14. Performance

14.1 Parallelism

The Settings › Performance screen sets how many controls are analyzed at once, from 1 to 16, with a default of 8. Raising it speeds the audit up but puts more load on the Microsoft APIs, with a risk of throttling.

14.2 The benchmark

The Run test button measures how long a simulated audit takes at various parallelism levels and names the optimum on this machine. On the run shown above: 0.99 s sequentially, 0.34 s at 8 threads (2.9× faster), and a slight degradation at 16 — past a certain point, contention costs more than it gains. Apply keeps the measured value.

14.3 Throttling

The network connectors self-limit to stay under the Microsoft APIs' throttling thresholds. An audit that slows down noticeably mid-run on a very large tenant is that regulation at work: it is normal and protective, and should not be worked around by raising parallelism, which would have the opposite effect.

15. Appendices

Appendix A — File layout

C:\Program Files\EntraGUARD\        program (replaced on every update)
C:\ProgramData\EntraGUARD\          data (never touched by a reinstall)
├── license.key
├── control-packs\
├── connector-packs\
└── clients\<slug>\
    ├── settings.json
    └── audit.db

HKCU\Software\EntraGUARD\ActiveClient

Appendix B — Troubleshooting

SymptomLikely causeAction
The application starts on an activation screenLicense missing or invalidPaste a valid key in Settings › License, or drop license.key into C:\ProgramData\EntraGUARD\.
"License expired", no audits possibleExpiry date passedGenerate a new key and activate it. History stays readable in the meantime.
Cannot create a companyTenant quota reachedDelete a record you no longer use, or request a license with a higher quota.
Authentication succeeds but access is denied (HTTP 403)Incomplete permissions or admin consent not grantedCompare the application's permissions against the table in § 6.9 and have consent granted.
The "Security controls" section is emptyNo connector configuredConfigure the Entra ID connector (§ 6.3 or § 6.4).
A connector stays disabled and lockedThe connection test failedRe-run the test and read the error message; the connector is never enabled silently.
The Exchange connector will not connectMissing certificate, Exchange.ManageAsApp not granted, or Global Reader role missingCheck the three prerequisites in § 6.7. A client secret is never enough for Exchange.
Purview unreachableThe Exchange connector is not workingPurview reuses the Exchange certificate: fix Exchange first.
Certificate creation failsApplication not run as administratorThe certificate goes into the machine store: restart the application as administrator, or choose client secret mode.
Many controls in errorMissing permission, feature absent from the tenant, or insufficient Microsoft licensingThose controls are excluded from the score. Check permissions; if the feature does not exist at the client, exclude the controls concerned via a baseline.
Score drops sharply with no known changeDifferent scope between the two auditsCompare the two audits (§ 11.5) and check how many controls were assessed on each side.
The audit slows down noticeably mid-runAPI throttling on the Microsoft sideNormal on large tenants. Do not raise parallelism; lower it if it happens systematically.
Newly imported controls do not appearNo restart performedRestart the application: imported packs are loaded at launch.
Sidebar looks incomplete after switching clientThe active company does not have the same connectorsExpected behavior: each company has its own configuration.

Appendix C — A typical engagement

PhaseActions
ScopingCreate the company record. Fill in the engagement reference and any known constraints. Agree the scope with the client and choose the connection scenario (§ 6.5).
ConnectionConfigure the Entra ID connector, then enable and test the Microsoft 365 connectors concerned. Document any unreachable sources.
ScopeCreate a baseline from the relevant framework template. Exclude non-applicable controls and justify each exclusion in the description.
Initial auditRun the audit, pin it as the reference audit and attach a context note. Export the detailed report as JSON as timestamped evidence.
DebriefProduce the executive report as PDF for management and the prioritized remediation plan for the technical team.
RemediationThe client fixes. Track progress against the control identifiers from the remediation plan.
Follow-up auditRe-run the same baseline. Compare against the reference audit and produce the delta: improved controls, regressed controls, evolution per referential.
Ongoing trackingRe-audit periodically. The dashboard's trend curve is the natural support for a steering committee.

Appendix D — Security and confidentiality

Appendix E — Glossary

TermDefinition
App registrationAn application registration in Entra ID. Holds the permissions granted to the audit tool.
CIS BenchmarkSecure configuration frameworks published by the Center for Internet Security, per platform.
CISA SCuBASecure Cloud Business Applications: secure configuration baselines published by the US cybersecurity agency for Microsoft 365.
Admin consentApproval by a tenant administrator of the application permissions requested by an application.
DORADigital Operational Resilience Act — the EU regulation on digital operational resilience in the financial sector.
DPAPIThe Windows Data Protection API, used here to encrypt secrets stored on the workstation.
Global ReaderAn Entra directory role granting read access to the whole configuration. Required for Exchange Online in app-only mode.
MCSBMicrosoft Cloud Security Benchmark — Microsoft's cloud security framework, organized by domain (IM, PA, DP…).
Microsoft GraphThe unified API for Microsoft 365 and Entra ID data.
NIS2The EU directive on the security of network and information systems, applicable since January 2025.
NIST SP 800-53The NIST catalog of security controls, organized into families (AC, IA, AU, SC, SI…).
PIMPrivileged Identity Management — just-in-time, time-bound activation of privileged roles.
Service principalAn application's representation in a tenant, holding its effective permissions.
ThrottlingRate limiting applied by the Microsoft APIs beyond a certain request volume.