Fundamentals4 min read

You verify every user. Do you verify every executable?

Most zero trust programmes are mature on identity and network and barely started on applications. The same three principles, applied to code rather than to people.

Most organisations running a zero trust programme can describe their identity controls in detail. Conditional access, multi factor, privileged access reviews, session policy. Ask the same organisation how they verify code, and the answer is usually antivirus.

That is not a criticism of the programme. It is where the maturity actually is, and it is worth looking at plainly.

The pillar nobody has finished

Zero trust is usually assessed across six pillars: identity, endpoints, applications, data, network and infrastructure. In most assessments the shape is consistent.

Pillar Where most programmes are
Identity Commonly mature
Network Commonly mature
Endpoints Partly implemented
Data In progress
Infrastructure In progress
Applications Commonly the least advanced

The applications pillar tends to mean single sign on and conditional access in front of SaaS, which is identity work wearing a different hat. What it rarely means is deciding which code is allowed to execute on the endpoint.

So an organisation can hold a credible zero trust position on who its users are, and have no position at all on what its machines are permitted to run.

The same three principles, applied to code

The useful thing about this gap is that closing it does not need a new framework. The three principles already in use translate directly.

Verify explicitly. Every executable, library, script and driver is checked against a policy before it is allowed to start. Checked, not scanned, and the distinction is the whole point: verification asks whether this code is approved, while scanning asks whether it looks bad. One of those requires having seen something before.

Least privilege. An endpoint runs only the software the organisation has approved for that endpoint, rather than everything a local administrator was able to install and nobody got round to removing. Least privilege applied to identity limits what an account can do. Applied to execution it limits what a machine can run.

Assume breach. When credentials are compromised and an attacker reaches the device, the payload they brought with them still does not execute, because it was never on the list. This is the principle application control serves best, and the one identity controls cannot serve at all: once an attacker holds valid credentials, identity has already made its decision.

Verification is not scanning, and the difference decides outcomes

It is worth dwelling on the second word, because the two get treated as interchangeable.

Antivirus makes a prediction about a file, often one it has never seen. Modern engines are good at it and it still fails against novel malware, against signed tooling being abused, and against a legitimate binary doing something it was never intended to do. Microsoft is direct about the limit in its own documentation, which we quote in App Control vs antivirus vs XDR.

Application control does not predict. It compares the code against a decision somebody already made. Nothing has to be recognised, which is why it holds against things nobody has catalogued yet.

AI agents are now part of who executes code

There is a newer reason this pillar matters, and it changes the shape of the problem rather than adding to it.

An agent given a tool has everything that tool can do. On Windows that routinely includes launching processes, loading modules and running scripts. Grant an agent the ability to run a command and you have granted it the ability to run commands, which is a broader permission than it looks.

So the set of things that can start code on an endpoint is no longer just your users and the software you deployed. Identity controls answer who the agent is acting for. They do not answer what it is allowed to execute.

An allowlist answers that, and it answers it the same way regardless of who or what asked. That property is worth more now than it was two years ago.

Where to start

If your zero trust assessment says applications are planned rather than implemented, the first move is not a policy. It is finding out what your fleet actually runs, because you cannot decide what belongs until you know what is there, and an inventory assembled from what procurement bought is not the estate.

The platform sets out the sequence from there: plan the profiles, author a base policy and deploy it in audit, tune it into a circle of trust, then enforce ring by ring.

The point of doing it is not the maturity score. It is that the pillar you have not started is the one that decides whether an attacker who gets past the pillars you have finished can actually do anything.

Applying this principle to execution is the easy part to agree with and the hard part to run. PoliEze is the operating layer for it: what is running, who owns each trust decision, which exceptions are live and when they expire, and evidence that the control is working rather than merely deployed. The platform sets out the sequence.

Questions about this

What does zero trust mean on Windows specifically?
Windows zero trust is usually implemented as identity and network controls, and stops there. Applied to code it means the same three principles pointed at executables rather than people, so verify explicitly, assume breach, and grant the least privilege that works. On Windows the control that enforces that is App Control for Business, formerly WDAC, which decides in the kernel whether a file may run at all.
Is application control part of zero trust?
It is the applications pillar, and in most programmes it is the least advanced one. Identity and network are usually mature, endpoints and data are partly done, and applications are commonly the pillar where the maturity assessment says planned rather than implemented.
How does application control satisfy verify explicitly?
Every executable, library, script and driver is checked against a policy before it is allowed to start, rather than scanned for signs of being malicious. The distinction matters, because verification asks whether this code is approved while scanning asks whether it looks bad.
How does it satisfy assume breach?
An attacker who already holds valid credentials and has reached a device still cannot run the tooling they brought, because it was never on the allowed list. Assume breach means designing for the attacker already being inside, and execution control is what limits what they can do once they are.
What does this have to do with AI agents?
An agent given a tool has everything that tool can do, and on Windows that includes launching processes, loading modules and running scripts. The set of things that can start code on an endpoint is no longer just your users, and an allowlist decides what may execute regardless of who or what asked.

Related reading

Stuck on the thing this article describes?

If you are working through this on a real fleet and it is not going the way the documentation suggests, that is the conversation we are best at. Send us the block events.