EntraGUARD
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
- Auditors and consultants running Microsoft 365 / Entra ID configuration audits for their clients.
- In-house security teams (CISO, IAM, SecOps) tracking the posture of their own tenant over time.
- MSPs and resellers operating the application under their own brand across a portfolio of clients.
- Administrators of the audited tenant, for the connection and permissions part only (chapter 6).
Documented version
| Item | Value |
|---|---|
| Application | EntraGUARD 0.1.0 |
| Platform | Windows x64 — WPF, .NET 10 |
| Control catalog | 323 controls across 13 built-in packs |
| Connectors | 8 (Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange Online, Purview, Intune) |
| Baseline templates | 17, computed dynamically from the catalog |
| Interface languages | English and French, switchable on the fly |
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
| Principle | What it means in practice |
|---|---|
| Read-only | No write permission is requested or used on the audited tenant. The application does not fix anything: it observes and recommends. |
| Runs locally | The 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-tenant | One 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 license | The application name is the license holder's name, carried by the license (chapter 4). It is no longer configured locally. |
| Offline | The 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. |
| Traceable | Every 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
- It does not remediate. No automatic fixes, no changes to the tenant. The PowerShell commands provided are informational, to be run knowingly by an administrator.
- It does not monitor continuously. An audit is a manual, point-in-time run — a snapshot of the configuration, not a SIEM or a detection tool.
- It does not audit Active Directory or Azure. Those scopes are covered by AdGUARD and AzureGUARD, built on the same foundation.
- It does not analyze content. The application reads configuration settings and directory object metadata, never the contents of mailboxes, files or conversations.
- It does not replace a human audit. It industrializes the mechanical, repeatable part so you can spend your time on analysis, context and recommendations.
1.4 Functional architecture
The application is built on five components:
- 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).
- 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.
- Baselines define the scope retained for a given engagement: which controls are in scope, which are excluded, and at what criticality level.
- The audit engine runs the selected controls in parallel, assigns a verdict to each and computes a weighted score.
- Reports present the outcome from four editorial angles (executive, technical, action plan, regulatory compliance) and in five file formats.
1.5 Terminology
| Term | Definition |
|---|---|
| Tenant / Company | The audited Microsoft tenant. In the application, each tenant has a "company record" holding its connectors, its history and its report logo. |
| Connector | The technical link to a data source (Entra ID, SharePoint, Exchange…). An unconfigured connector locks every control in its referential. |
| Referential | The audited source: Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange Online, Purview, Intune. Not to be confused with a compliance framework. |
| Control | A single check, for example "Require MFA for all administrator roles". Carries a stable identifier (ENTRA-001…), a description, remediation guidance and framework mappings. |
| Control pack | A 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. |
| Framework | An external compliance framework (CIS, NIST 800-53, ISO/IEC 27001, ANSSI, NIS2, DORA, MCSB, CISA SCuBA) that controls are mapped to. |
| Baseline | The audit scope retained: a subset of the catalog, with optional level adjustments. Either global (all clients) or specific to one client. |
| Baseline template | A 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. |
| Verdict | A control's outcome: compliant, non-compliant, warning, or not assessed. |
| Compliance score | The weighted percentage of points earned over points available. See § 10.4. |
2. Installation and first run
2.1 Requirements
| Item | Requirement |
|---|---|
| Operating system | Windows 10 (1809 or later) or Windows 11, x64. |
| .NET runtime | The .NET 10 Desktop Runtime, unless the application was delivered to you as a self-contained build, in which case nothing needs installing. |
| Rights | Local administrator rights on the workstation to install. They are also needed to create a certificate in the machine store during automatic provisioning (§ 6.4). |
| Network | Outbound HTTPS to graph.microsoft.com, login.microsoftonline.com and outlook.office365.com (Exchange Online Management). |
| Microsoft account | Depending 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. |
| Display | 1280 × 800 minimum; 1600 × 900 recommended for the dashboard. |
| License | A 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):
- Run the installer with a local administrator account.
- It installs to
C:\Program Files\EntraGUARDfor all users of the workstation. - A Start menu shortcut is created; a desktop shortcut is offered as an option.
- 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)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:
- Activate the license — Settings › License, paste the key you were given (§ 3.3).
- 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).
- Create the first company — Companies › Add a company, filling in at least the name and the tenant domain (§ 5.2).
- 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.
- Choose the scope — Baselines › Templates to start from a compliance framework, or Security controls to pick manually (§ 7.4 and § 9).
- Run the first audit — Security audit › Execution, then export the report (§ 10 and § 13).
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:
| Section | Contents |
|---|---|
| Companies | The portfolio of audited tenants, then the record of the active company. |
| Dashboard | Posture summary for the active company. |
| Security audit | Running an audit, and the history of past audits. |
| Security controls | One entry per referential whose connector is configured: Entra ID, SharePoint, OneDrive, Teams, Defender, Exchange, Purview, Intune. |
| Baselines | The baseline editor, the framework templates, then the list of saved baselines. |
| Settings | Connectors, Export, Performance, New control, License. |
| About | Version, technology stack, frameworks covered, 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:
| Field | Purpose |
|---|---|
| Holder | Name of the license holder. Shown at activation and becomes the application name (chapter 4). |
| Expiry | Expiry date (UTC). Beyond it, the license moves to the Expired state. |
| Max tenants | Maximum number of tenant records allowed. A very high value (for example 9999) is effectively unlimited. |
| Issued | Issue date (UTC). |
| Identifier | Unique license identifier, useful for support to trace a key. |
| Product | Target 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:
- a root (the vendor's private key) signs certificates;
- each certificate authorizes the issuance of bounded licenses: allowed products (EntraGUARD, AdGUARD, AzureGUARD), tenant cap, expiry date;
- from a certificate, individual licenses are issued for each client.
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.
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:
- Paste the key: paste the full license text, armor included, into the field, then confirm.
- Load a file: select the supplied
license.keyfile; its content is read and installed.
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
| State | Meaning | Consequence |
|---|---|---|
| No license | No license registered on the machine. | Creating tenants and running audits unavailable. |
| Invalid | Wrong signature, wrong product, or non-conforming format. | Rejected; the application stays limited, as with no license. |
| Expired | Valid signature, but the expiry date has passed. | Browsing the history is possible, but running audits is unavailable. |
| Valid | Signed 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".
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:
| Field | Use |
|---|---|
| Company name | Required. Carried on the report cover. |
| Microsoft domain / tenant | The tenant's primary domain. Serves as a landmark and makes identification easier across a large portfolio. |
| Primary contact, email, phone | The client-side point of contact for the engagement. |
| Industry | Useful context for recommendations (a SCuBA control does not carry the same weight for a critical infrastructure operator as for a small business). |
| Country | Useful for the applicable regulatory framework (NIS2, DORA, national frameworks). |
| Engagement reference | Purchase order, case or contract number. |
| Notes | Free text: client constraints, agreed scope, negotiated exclusions. |
| Record created on | Filled 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.
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.
| Connector | What it audits | Technical access |
|---|---|---|
| Microsoft Entra ID | Authentication, 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). |
| SharePoint | External sharing, link types, sync, site governance. | Microsoft Graph, through the Entra application. |
| OneDrive | Retention, sync, sharing. | Microsoft Graph, through the Entra application. |
| Teams | Team lifecycle, guests, meetings, channels, third-party apps. | Microsoft Graph, through the Entra application. |
| Microsoft Defender | Defender XDR posture, Secure Score, alerts, incidents, attack simulations, Defender for Office 365 protection. | Graph Security API, through the Entra application. |
| Exchange Online | External forwarding, legacy authentication, mail protection, mail flow, the CISA SCuBA Exchange baseline. | Exchange Online Management in app-only mode, certificate authentication is mandatory. |
| Microsoft Purview | Information protection, DLP, labels, retention, insider risk, audit. | Reuses the Exchange connector's certificate. |
| Intune | Device 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 A | Scenario B | |
|---|---|---|
| Name | The audited company supplies the application | Automatic provisioning, with an administrator present |
| Mode in the application | "Use an existing application" | "Create the application" |
| Who creates the app registration | The client's administrator, in their Entra portal | EntraGUARD, automatically |
| What the auditor receives | A tenant ID, an application ID and a secret (or a certificate thumbprint) | Nothing: the administrator signs in once inside the application |
| Administrator account | Never used by the auditor | Required 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:
- Creates an application in Entra ID › App registrations (any name, for example "Security audit — <your company>").
- Adds the application permissions for Microsoft Graph listed in § 6.9, all read-only.
- Grants admin consent for those permissions.
- Generates a client secret, or uploads a certificate whose thumbprint will be shared.
- 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:
- Choose the Use an existing application mode.
- Enter the tenant ID and the application ID.
- Provide either the client secret, or the thumbprint of a certificate already present in the workstation's Windows store.
- 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.
| Advantages | Points 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:
- Choose the Create the application mode.
- Enter the name for the app registration ("EntraGUARD" by default).
- 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).
- Click Create the application: a Microsoft sign-in window opens and the administrator authenticates.
- 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.
| Advantages | Points 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
| Situation | Recommended scenario |
|---|---|
| Large enterprise, formal security policy, external supplier | A — the client supplies the application |
| Internal audit on your own tenant | B — automatic provisioning |
| Small business with no dedicated IT team, administrator available in the meeting | B — automatic provisioning |
| One-off engagement with mandatory privileged account review | A — the client supplies the application |
| MSP portfolio with delegated access already in place | A, with a dedicated application per client |
| Demonstration or proof of concept | B — 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.
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:
- A certificate attached to the Entra application.
- The
Exchange.ManageAsAppapplication permission, held by the "Office 365 Exchange Online" resource rather than by Microsoft Graph. - 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:
| Action | Effect | Rights needed |
|---|---|---|
| Test connection | Checks effective access to the source. Writes nothing. | None |
| Remove configuration | Erases 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 tenant | Actually deletes the app registration in the client's tenant. Irreversible. | Tenant administrator |
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.
| Permission | What it allows reading | Used by |
|---|---|---|
Directory.Read.All | Directory data | Entra ID, Teams |
User.Read.All | User profiles | Entra ID |
Group.Read.All | Groups | Entra ID |
Policy.Read.All | Tenant policies (Conditional Access, authentication methods, cross-tenant access…) | Entra ID |
RoleManagement.Read.Directory | Directory role assignments | Entra ID, PIM |
Application.Read.All | Applications and service principals | Entra ID |
Organization.Read.All | Organization information | Entra ID |
AuditLog.Read.All | Audit and sign-in logs | Entra ID |
AccessReview.Read.All | Access reviews | Governance |
LifecycleWorkflows.Read.All | Lifecycle workflows | Governance |
EntitlementManagement.Read.All | Entitlement management | Governance |
SharePointTenantSettings.Read.All | SharePoint and OneDrive tenant settings | SharePoint, OneDrive |
TeamworkAppSettings.Read.All | Teams app settings | Teams |
SecurityEvents.Read.All | Security events | Defender |
SecurityAlert.Read.All | Security alerts | Defender |
SecurityIncident.Read.All | Security incidents | Defender |
AttackSimulation.Read.All | Attack simulation campaigns | Defender |
DeviceManagementConfiguration.Read.All | Intune configuration policies | Intune |
DeviceManagementManagedDevices.Read.All | Intune managed devices | Intune |
Exchange.ManageAsApp (Office 365 Exchange Online) | App-only access to Exchange Online | Exchange, 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:
- A configuration file copied to another machine is unreadable.
- Every Windows account on the workstation can decrypt the secrets: that is deliberate, since they share the same audit machine and the same connectors.
- Confidentiality against another user of the same workstation is therefore not a goal of the model. An audit workstation should be treated as a sensitive asset and protected accordingly: disk encryption, restricted access, locked session.
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.
| Pack | Referential | Controls |
|---|---|---|
| Official — Entra | Entra ID | 85 |
| Entra federation & hybrid identity | Entra ID | 13 |
| Entra PIM & privileged accounts | Entra ID | 14 |
| Entra workload identities & applications | Entra ID | 10 |
| Entra modern authentication & external access | Entra ID | 14 |
| Official — Exchange Online | Exchange | 31 |
| CISA SCuBA — Exchange Online | Exchange | 38 |
| Official — Teams | Teams | 28 |
| CIS Microsoft Intune | Intune | 23 |
| Official — Defender | Defender | 22 |
| Official — SharePoint | SharePoint | 19 |
| Official — Microsoft Purview | Purview | 17 |
| Official — OneDrive | OneDrive | 9 |
| Total | 323 |
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:
| Field | Example / detail |
|---|---|
| Identifier | ENTRA-001 — stable over time, prefixed by pack. This is the key to quote in an action plan or a remediation tracker. |
| Referential | Entra ID, Exchange, Teams… |
| Category | "Multi-factor authentication", "Roles and privileged administration", "External sharing"… The catalog has 83 categories. |
| Title | Phrased as an expected action: "Enable number matching in Microsoft Authenticator". |
| Description | What the control checks and why it matters. |
| Level | L1 or L2. |
| Remediation | The fix, expressed in terms of the Microsoft portals. |
| PowerShell command | Provided for 287 of the 323 controls, for information. |
| Reference | A link to the matching Microsoft Learn documentation (322 controls out of 323). |
| Framework mappings | For 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
| Level | Meaning | Weight in the score |
|---|---|---|
| L1 | Fundamental. A recommendation that applies with no significant functional impact, expected in any tenant. 167 controls. | ×3 |
| L2 | Hardening. 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.
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
| Framework | Controls mapped | Nature of the mapping |
|---|---|---|
| ISO/IEC 27001:2022 | 323 / 323 | Annex A clauses. A.5 (organizational) and A.8 (technological). |
| NIST SP 800-53 | 323 / 323 | Control families: AC, IA, AU, CM, SC, SI, IR, CP, PM, RA, AT, MP. |
| NIS2 | 323 / 323 | Risk-management measures under article 21. |
| DORA | 323 / 323 | Articles covering ICT risk management. |
| Microsoft Cloud Security Benchmark | 323 / 323 | MCSB domains, notably IM (Identity Management) and PA (Privileged Access). |
| CIS Benchmarks | 268 / 323 | CIS Microsoft Entra ID, CIS Microsoft 365 Foundations, CIS Microsoft Intune. |
| CISA SCuBA | 99 / 323 | The Secure Cloud Business Applications program, including 38 controls for the Exchange Online baseline (MS.EXO.1 to 17). |
| ANSSI | 89 / 323 | Recommendations and control points from the French agency. |
| Microsoft Secure Score | 11 / 323 | Improvement actions measured by Microsoft. |
| MITRE ATT&CK | 2 / 323 | Associated attack techniques. |
8.3 Use in engagements
- Preparing for ISO 27001 certification — the ISO A.5 and A.8 templates isolate the organizational and technological measures that apply to the Microsoft 365 scope.
- NIS2 or DORA compliance work — the whole catalog is mapped; the value here is the compliance-by-framework report, which speaks the regulator's language.
- A French-context audit — the ANSSI template narrows scope to the 89 controls aligned with the agency's recommendations.
- Progressive hardening — the CIS level 1 template is a first pass that applies without heavy negotiation; level 2 follows later.
- US federal agencies and their suppliers — the CISA SCuBA and NIST 800-171/CMMC templates address those specific requirements.
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:
- A name, shown on every audit run with it and in the history.
- A scope: global (available to every company) or specific to one client.
- A free-text description, where the reasons for exclusions are recorded.
- The list of controls included, excluded and re-levelled.
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.
| Template | Criterion | Controls |
|---|---|---|
| CIS Microsoft 365 Benchmark | All controls mapped to CIS | 268 |
| CIS — level 1 | CIS controls at level L1 only | 153 |
| ANSSI | Controls mapped to ANSSI | 89 |
| NIS2 | Controls mapped to NIS2 | 323 |
| DORA | Controls mapped to DORA | 323 |
| ISO 27001 — technological controls | Annex A.8 | 216 |
| ISO 27001 — organizational controls | Annex A.5 | 102 |
| NIST — access control | AC family | 117 |
| NIST — identification and authentication | IA family | 44 |
| NIST 800-171 / CMMC level 2 | AC, IA, AU, CM, SC, SI families | 296 |
| SOC 2 — CC6 / CC7 | AC, IA, AU, SI families | 207 |
| HIPAA — Security Rule §164.312 | AC, AU, IA, SC, SI families | 261 |
| MCSB — Identity Management | MCSB IM domain | 162 |
| MCSB — Privileged Access | MCSB PA domain | 42 |
| CISA SCuBA — full program | Controls mapped to CISA SCuBA | 99 |
| CISA SCuBA — Exchange Online | The MS.EXO.1 to 17 baseline | 38 |
| Level 1 only | Across all frameworks, L1 controls | 167 |
9.3 Creating a baseline from a template
- Open Baselines › Templates.
- Find the template matching the engagement and check the runnable count.
- Click Create a baseline: the editor opens with the selection pre-applied.
- Name the baseline, choose its scope, adjust if needed, then Save.
9.4 The baseline editor
| Element | Purpose |
|---|---|
| Baseline name | Required to save. The application warns if you try to save without one. |
| Scope — Global / Client | Global: the baseline is offered for every company. Client: it only appears for the active company. An info icon restates the distinction. |
| Description | Free text. This is where exclusion rationales belong. |
| Counters | Active, Excluded, Re-levelled — updated live. |
| Referential filter | Limited to referentials whose connector is enabled. |
| Search | Filters controls by title. |
| Modified only | Shows only excluded or re-levelled controls — handy for reviewing your changes before saving. |
| Include all / Exclude all | Acts on the current selection after filtering. |
| Level column | Re-levels a control (Standard, L1, L2) for this baseline only, without changing the catalog. |
| Save | Saves the baseline. Until saved, it remains a draft. |
| Apply to audit | Immediately switches the audit's control selection to this baseline. |
| Delete | Removes the baseline. |
9.5 Global or client scope
| Scope | When to use it |
|---|---|
| Global | Your 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. |
| Client | A scope negotiated with one client: exclusions tied to their licensing, their organization, or points explicitly out of contractual scope. |
9.6 Good practice
- Start from a template rather than the full selection: a template carries a compliance rationale the client understands.
- Exclude controls that are technically out of scope — typically those requiring an Entra ID P2 or E5 license the client does not have. A non-applicable control assessed as non-compliant drags the score down without carrying information.
- Document every exclusion in the description: at debrief time, that is what separates a deliberate scope from an oversight.
- Keep a frozen global reference baseline, so progress over time is measured on a constant basis.
- Do not change a baseline mid-engagement: an audit run on a different scope is no longer comparable to the previous one.
10. Running an audit
10.1 Preparation
Three checks before starting:
- The active company is the one you expect (top of the sidebar).
- The connectors you need are configured and tested.
- 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:
- A dial shows overall completion as a percentage and an "n / N" count.
- One card per referential shows each source's progress.
- The "Controls being analyzed" stream scrolls through the controls as they complete, with their referential, level and verdict, and — for warnings and non-compliances — the detailed finding, for example "7 service principal(s) hold a directory role: these identities bypass MFA and PIM, and their justification must be documented".
10.3 Verdicts
| Verdict | Meaning | Effect on the score |
|---|---|---|
| Compliant | The observed configuration satisfies the control. | Earns the control's full weight. |
| Non-compliant | The configuration does not satisfy the control. | Earns zero points. |
| Warning | Undetermined or partially satisfied: the control needs human judgment, or the available data does not allow an automatic decision. | Earns half the weight. |
| Error / Not assessed | The 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. |
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 × 100A 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:
- A search box over control titles.
- A filter by referential.
- A filter by level (L1 / L2).
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:
- Result — the actual finding, with the values observed in the tenant.
- Description — what the control checks.
- Remediation — the fix path in the Microsoft portals.
- Frameworks — the control's compliance mappings.
- Learn more — the link to the Microsoft documentation.
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:
- The auditor note — a free-text field attached to each audit, editable from its detail. An italic preview appears on the row in the history. This is where to record context: "initial audit before remediation", "after Conditional Access rollout", "reduced scope, Exchange unavailable".
- Reference audits — an audit can be pinned: it then carries a REFERENCE badge and a star on its row. A pinned audit is excluded from retention purging and from the volume safeguard: it will never disappear automatically. Always pin the initial audit of an engagement, since it is the comparison point for every one that follows.
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 score before, the score after and the difference.
- The number of controls that became compliant (Compliant +) and left non-compliance (Non-compliant −).
- Regressed controls — those that were compliant and no longer are. Handle these first: a regression almost always signals an unmanaged configuration change.
- Improved controls — those fixed since the reference audit. This is the substance of the debrief: proof of the work done.
- Evolution per referential, source by source.
The comparison is exportable, which makes it the natural support for a steering committee or an end-of-remediation review.
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
- A low overall score is not a failure in itself: a first audit on a tenant that has never been hardened commonly lands between 40 % and 60 %. What matters is the trajectory.
- Look at L1 non-compliances before the percentage: ten failed L1 controls carry more real risk than thirty L2s.
- A referential at 100 % on very few controls usually signals a partly working connector rather than configuration excellence.
- A sudden drop in the score calls for a comparison (§ 11.5) before any conclusion: it comes from a change of scope more often than from a real regression.
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
| Type | Contents | Audience |
|---|---|---|
| Executive report | Cover 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 report | Every control assessed, each with its verdict, the finding, the description, the remediation and the framework mappings. | IT team, tenant administrators |
| Prioritized remediation plan | Non-compliances only, ordered by criticality, with the corrective action expected. A working document, not a findings document. | Remediation project lead, operations provider |
| Compliance by framework | Results 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
| Format | Characteristics | Typical use |
|---|---|---|
| Paginated document (summary and control table), generated natively. | Formal deliverable, archiving, contractual attachment. | |
| HTML | Standalone 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. |
| CSV | Semicolon-separated values, UTF-8 with BOM. | Import into a third-party tool, reprocessing, ticketing. |
| JSON | Complete 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.
13.4 Header and cover
Three elements drive report layout:
- Exported reports carry the license holder's name (the application name) and the date in the header and footer (§ 4.2). That is your issuer identity.
- The contact (email or phone) accompanies that identity.
- The audited company's logo, set on its record, fills the cover page of the executive report.
13.5 Exporting
- Open the audit from the history.
- Check the report type selected in Settings › Export.
- Click the button for the format you want, at the top of the results list.
- Choose where to save.
13.6 Which report for which use
| Situation | Type | Format |
|---|---|---|
| Debrief to an executive committee | Executive | |
| Handover to the technical team for fixes | Prioritized remediation plan | Excel or PDF |
| Technical appendix to an audit report | Detailed technical | |
| Answering a compliance questionnaire | Compliance by framework | PDF or Excel |
| Feeding a tracking tool or a SIEM | Detailed technical | JSON or CSV |
| Archived evidence of a dated audit | Detailed technical | JSON + PDF |
13.7 The other exports
- History — CSV export of a company's complete audit sequence: scores, differences, baselines, referentials, notes.
- Portfolio — CSV export of the company list with their posture (last audit, score, difference).
- Comparison — export of the delta between two audits.
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\ActiveClientAppendix B — Troubleshooting
| Symptom | Likely cause | Action |
|---|---|---|
| The application starts on an activation screen | License missing or invalid | Paste a valid key in Settings › License, or drop license.key into C:\ProgramData\EntraGUARD\. |
| "License expired", no audits possible | Expiry date passed | Generate a new key and activate it. History stays readable in the meantime. |
| Cannot create a company | Tenant quota reached | Delete 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 granted | Compare the application's permissions against the table in § 6.9 and have consent granted. |
| The "Security controls" section is empty | No connector configured | Configure the Entra ID connector (§ 6.3 or § 6.4). |
| A connector stays disabled and locked | The connection test failed | Re-run the test and read the error message; the connector is never enabled silently. |
| The Exchange connector will not connect | Missing certificate, Exchange.ManageAsApp not granted, or Global Reader role missing | Check the three prerequisites in § 6.7. A client secret is never enough for Exchange. |
| Purview unreachable | The Exchange connector is not working | Purview reuses the Exchange certificate: fix Exchange first. |
| Certificate creation fails | Application not run as administrator | The certificate goes into the machine store: restart the application as administrator, or choose client secret mode. |
| Many controls in error | Missing permission, feature absent from the tenant, or insufficient Microsoft licensing | Those 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 change | Different scope between the two audits | Compare the two audits (§ 11.5) and check how many controls were assessed on each side. |
| The audit slows down noticeably mid-run | API throttling on the Microsoft side | Normal on large tenants. Do not raise parallelism; lower it if it happens systematically. |
| Newly imported controls do not appear | No restart performed | Restart the application: imported packs are loaded at launch. |
| Sidebar looks incomplete after switching client | The active company does not have the same connectors | Expected behavior: each company has its own configuration. |
Appendix C — A typical engagement
| Phase | Actions |
|---|---|
| Scoping | Create 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). |
| Connection | Configure the Entra ID connector, then enable and test the Microsoft 365 connectors concerned. Document any unreachable sources. |
| Scope | Create a baseline from the relevant framework template. Exclude non-applicable controls and justify each exclusion in the description. |
| Initial audit | Run the audit, pin it as the reference audit and attach a context note. Export the detailed report as JSON as timestamped evidence. |
| Debrief | Produce the executive report as PDF for management and the prioritized remediation plan for the technical team. |
| Remediation | The client fixes. Track progress against the control identifiers from the remediation plan. |
| Follow-up audit | Re-run the same baseline. Compare against the reference audit and produce the delta: improved controls, regressed controls, evolution per referential. |
| Ongoing tracking | Re-audit periodically. The dashboard's trend curve is the natural support for a steering committee. |
Appendix D — Security and confidentiality
- No writes to the audited tenant: every permission requested is read-only.
- No data leaves the workstation: no middleman service, no telemetry, nothing sent back to the vendor. The only outbound connections are to the Microsoft APIs being queried.
- Offline license verification: no activation server is contacted.
- Secrets encrypted with DPAPI at machine scope: a configuration file copied elsewhere is unreadable (§ 6.10).
- No content is read: the application reads configuration settings and directory object metadata, never the contents of messages, files or conversations.
- The audit workstation is a sensitive asset: it concentrates read access to several clients' tenants. Disk encryption, a locked session and restricted physical access are prerequisites, not options.
- Reports contain detailed configuration data about a client tenant. Send them over a secure channel and retain them according to the retention policy agreed in the contract.
Appendix E — Glossary
| Term | Definition |
|---|---|
| App registration | An application registration in Entra ID. Holds the permissions granted to the audit tool. |
| CIS Benchmark | Secure configuration frameworks published by the Center for Internet Security, per platform. |
| CISA SCuBA | Secure Cloud Business Applications: secure configuration baselines published by the US cybersecurity agency for Microsoft 365. |
| Admin consent | Approval by a tenant administrator of the application permissions requested by an application. |
| DORA | Digital Operational Resilience Act — the EU regulation on digital operational resilience in the financial sector. |
| DPAPI | The Windows Data Protection API, used here to encrypt secrets stored on the workstation. |
| Global Reader | An Entra directory role granting read access to the whole configuration. Required for Exchange Online in app-only mode. |
| MCSB | Microsoft Cloud Security Benchmark — Microsoft's cloud security framework, organized by domain (IM, PA, DP…). |
| Microsoft Graph | The unified API for Microsoft 365 and Entra ID data. |
| NIS2 | The EU directive on the security of network and information systems, applicable since January 2025. |
| NIST SP 800-53 | The NIST catalog of security controls, organized into families (AC, IA, AU, SC, SI…). |
| PIM | Privileged Identity Management — just-in-time, time-bound activation of privileged roles. |
| Service principal | An application's representation in a tenant, holding its effective permissions. |
| Throttling | Rate limiting applied by the Microsoft APIs beyond a certain request volume. |