> For the complete documentation index, see [llms.txt](https://msdocs.aohwv.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://msdocs.aohwv.com/secure-and-measure/top-10-hardening-steps.md).

# Top 10 Hardening Steps

Sending logs to your SOC helps you **catch** attacks. These ten changes help **prevent** them. They're the highest-impact security improvements for most Microsoft tenants, in rough order of priority.

### 1. Build a Conditional Access baseline

Conditional Access is the policy engine that decides who can sign in, from where, on what device and with what proof. It's the single most important set of controls in your tenant.

At a minimum, have these policies in place:

| Policy                                                      | What it does                                          | Requires             |
| ----------------------------------------------------------- | ----------------------------------------------------- | -------------------- |
| **Require MFA for all users**                               | Stops most stolen-password attacks                    | Entra ID P1          |
| **Require phishing-resistant MFA for admins**               | Passkeys, FIDO2 keys or Windows Hello for admin roles | Entra ID P1          |
| **Block legacy authentication**                             | Closes old sign-in methods that can't do MFA          | Entra ID P1          |
| **Require MFA for Azure management**                        | Protects the Azure portal, CLI and PowerShell         | Entra ID P1          |
| **High user risk → secure password change**                 | Responds automatically to likely compromised accounts | Entra ID P2          |
| **Medium or high sign-in risk → MFA**                       | Challenges suspicious sign-ins                        | Entra ID P2          |
| **Require compliant or managed devices** for sensitive apps | Blocks access from unmanaged personal devices         | Entra ID P1 + Intune |
| **Block device code flow** where not needed                 | Stops a phishing technique that abuses device sign-in | Entra ID P1          |

* **Where:** Entra admin center → **Conditional Access** → **Policies**
* **Exclude** your emergency access accounts (step 3) from every policy.

<figure><img src="https://1382101996-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FL4D4OecOctRFu1RNXXjo%2Fuploads%2FR6Mts7tIIDbmLTabozSs%2FConditional%20Access%20Overview.jpg?alt=media&amp;token=b6f84f6b-1c36-444e-98ea-53e83654ec61" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Test before enforcing.** Conditional Access policies can lock users out if set up incorrectly. Start each policy in **Report-only** mode, review the results for a week, then turn it on.
{% endhint %}

### 2. Limit and protect admin accounts

Every admin account is a high-value target.

* Keep **Global Administrators to fewer than five**.
* Give admins **separate, cloud-only admin accounts** that aren't used for email or browsing.
* Use **Privileged Identity Management (PIM)** so admin rights are only active when needed and expire automatically.
* Use the **least privileged role** for each task, for example User Administrator instead of Global Administrator.
* **Requires:** Entra ID P2 for PIM

### 3. Set up two emergency access accounts

If a Conditional Access mistake or outage locks everyone out, you need a way back in.

* Create **two cloud-only "break-glass" accounts** with Global Administrator rights and strong, phishing-resistant credentials.
* Exclude them from Conditional Access, store their credentials securely, and **alert your SOC whenever they sign in**.

### 4. Clean up applications

Old and over permisioned apps are a favorite way for attackers to keep access, because apps don't use MFA and are rarely reviewed.

Review **App registrations** and **Enterprise applications** for:

* **Unused apps** with no sign-ins in the last 90 days. Disable them first, then delete them
* **Apps with no owner**. Assign an owner or remove the app
* **Expired or long-lived secrets and certificates**. Remove expired ones, and replace secrets that last more than a year
* **High-risk permissions** such as Mail.ReadWrite, Files.ReadWrite.All or Directory.ReadWrite.All, especially as **application permissions** that work without a user
* **Apps from unverified publishers** that users consented to
* **Where:** Entra admin center → **App registrations** and **Enterprise applications**. Also check **Recommendations** for "Remove unused applications" and "Renew expiring credentials"
* **With Defender for Cloud Apps:** Defender portal → **Cloud apps** → **OAuth apps** shows app permissions and risky usage
* **Check for secrets or certificates you didn't add**, especially on apps with high privileges. In the October 2026 ConnectWise incident, attackers planted new secrets on trusted apps to keep access.

### 5. Stop users from approving risky apps

In consent phishing, users are tricked into granting a malicious app access to their mail and files.

* Set **user consent** to allow only apps from **verified publishers** with low-risk permissions, or turn it off entirely.
* Turn on the **admin consent workflow** so users can request apps for review.
* **Where:** Entra admin center → **Enterprise applications** → **Consent and permissions**

### 6. Move to stronger sign-in methods

Text message and phone call codes are the easiest MFA methods to steal or bypass.

* Turn on **passkeys** and the **Microsoft Authenticator** app with number matching.
* Plan to **turn off SMS and voice** once users have moved to stronger methods.
* **Where:** Entra admin center → **Authentication methods** → **Policies**

### 7. Clean up stale accounts and guests

Accounts nobody uses are accounts nobody notices being misused.

* Find users and guests with **no sign-in in 90 days** and disable them.
* Remove **guest users** who no longer need access.
* Use **access reviews** to have managers confirm who still needs access, on a schedule.
* **Requires:** Entra ID P2 or Entra ID Governance for access reviews

### 8. Block automatic email forwarding to outside addresses

Attackers who get into a mailbox often set up forwarding to quietly copy every email.

* In the **outbound spam policy**, set **automatic forwarding** to **Off**.
* Allow exceptions only for specific, approved mailboxes.
* **Where:** Defender portal → **Email & collaboration** → **Policies & rules** → **Threat policies** → **Anti-spam**

### 9. Turn on preset email protection

Microsoft's preset security policies apply recommended settings for phishing, malware, Safe Links and Safe Attachments in one step.

* Turn on the **Standard** preset for all users, and **Strict** for executives and admins.
* **Where:** Defender portal → **Email & collaboration** → **Policies & rules** → **Threat policies** → **Preset security policies**
* **Requires:** Defender for Office 365 for Safe Links and Safe Attachments

### 10. Track your scores

Microsoft's Secure Score, Identity Secure Score and Compliance Manager show which settings still need work.

* Review them **monthly** and work through the top recommendations.
* Remember they're **baselines**, not proof you're secure. See **Measure Your Security**.

### How did you score?

| Completed | Where you stand                                 |
| --------- | ----------------------------------------------- |
| **9–10**  | Strong foundation. Focus on keeping it that way |
| **6–8**   | Good start, with some important gaps            |
| **0–5**   | Significant risk. Prioritize steps 1–4          |

{% hint style="info" %}
**Want help getting to 10/10?** AOHWV can review your tenant, build your Conditional Access baseline and clean up applications. RedLegg Penetration Testing can then test whether it all holds up against a real attacker. See [**Get Expert Help**](/get-expert-help/overview.md).
{% endhint %}

## Related

* [Microsoft Dashboards](/secure-and-measure/microsoft-dashboards.md) — Microsoft's scores and what they leave out
* [Defender XDR](/quick-start/step-3-defender-xdr.md) — Make sure to add in this step!
* [Get Expert Help](/get-expert-help/overview.md) — AOHWV and RedLegg services


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://msdocs.aohwv.com/secure-and-measure/top-10-hardening-steps.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
