By NHI Mgmt Group Editorial TeamBased on Island: “How The Island Enterprise Browser Verifies Trusted DLLs” (April 17, 2026)

TL;DR: Windows process signature policy is enforced at image load time through Code Integrity, with trusted-root validation and signing-level checks determining whether a DLL can enter a process context, according to Island. The practical lesson is that module trust is an identity control problem, not just a code-signing problem, because a process’s execution boundary is only as strong as the identities it trusts.


At a glance

What this is: This is a Windows code integrity analysis showing that trusted DLL enforcement depends on signing-level evaluation, pinned trust roots, and kernel-side image load checks.

Why it matters: It matters because browser and process security depends on which modules are allowed into the execution boundary, which is a governance problem for privileged software trust, not only a build-time signing problem.


Context

Windows DLL trust is a process integrity problem, not a cosmetic signing check. Once a module is loaded, it runs inside the process boundary and can inherit access to credentials, tokens, and other sensitive data.

The article examines how Windows enforces trusted module loading through Code Integrity and why simple certificate validation is not enough. For IAM and NHI programmes, the important question is which identities and trust anchors are allowed to enter the execution context in the first place.

That makes the topic relevant to browser hardening, workload trust, and broader zero-trust identity governance. The article is about a control boundary that decides whether code is allowed to become part of an identity-bearing process at runtime.


Key questions

Q: How should security teams control DLL trust in sensitive Windows processes?

A: Security teams should treat DLL loading as an execution-admission decision. For sensitive processes, define explicit allowlists for approved signer identities, validate that the trust chain reaches an approved root, and confirm enforcement happens before the image is mapped into memory. That approach is stronger than relying on local certificate validity alone.

Q: Why is a signed DLL not always a trusted DLL?

A: A signature only proves that someone with the matching private key signed the file. It does not prove the local certificate store is trustworthy, nor that the module matches the exact identity your process policy requires. Governance has to include trust anchors, revocation context, and the process’s actual signing-level requirement.

Q: What breaks when an application trusts the local certificate store for module loading?

A: The application inherits the weaknesses of any privileged local change to that store. In a sensitive process, that can turn a valid-looking signature into a false assurance signal, because the trust decision depends on mutable machine state rather than an explicit policy boundary.

Q: How do browser security teams decide whether to allow third-party DLLs?

A: They should decide based on the module’s role in the process boundary, the sensitivity of the data the process handles, and whether the third-party signer can be pinned and monitored over time. If those conditions cannot be met, the third-party module should not be part of the trusted execution set.


Technical breakdown

How Windows enforces DLL trust at image load time

Windows does not treat DLL trust as a post-load inspection problem. The loader resolves the module in user mode, then the kernel creates the executable image section and invokes Code Integrity before the DLL is mapped into the process. That means trust is enforced synchronously at load time, not after execution has started. The article shows that the MicrosoftSignedOnly mitigation translates into a required signing level and that a failing image load returns ERROR_INVALID_IMAGE_HASH. The important detail is that the kernel, not the application, is the final decision point for whether the module enters the process.

Practical implication: Treat DLL allowlisting as a kernel-enforced control boundary, not an application-level policy wrapper.

Why certificate validity alone is not a safe trust model

A signed DLL is not automatically a trusted DLL. The article notes that local certificate stores can be manipulated, including by adding a self-signed certificate or CA, which means subject and issuer names are not reliable identity signals on their own. A stronger model pins trust anchors or certificate material such as thumbprints, public keys, or SPKI values, then verifies that the signature chain matches that pinned identity. This shifts trust from whatever the local machine accepts to a known signing identity. For security-sensitive processes, that difference is fundamental.

Practical implication: Use pinned trust material for module validation instead of relying on whatever the endpoint certificate store currently trusts.

How Microsoft root trust and signing levels are actually used

The article’s reverse engineering shows that Code Integrity does more than check a certificate chain. It evaluates the signing level, confirms the chain terminates at an approved Microsoft root key, and compares that result against a bitmask of allowed levels. In practice, the enforcement logic is a combination of cryptographic verification, trust-anchor validation, and policy-specific signing-level comparison. That is why a module can be signed yet still be blocked if its trust path does not meet the required level. The mechanism is stricter than simple code signing and more precise than name-based trust.

Practical implication: Model module trust as a layered verification flow, not a binary signed-versus-unsigned decision.


NHI Mgmt Group analysis

DLL trust is a process identity problem before it is a software supply chain problem: once a module is loaded, it becomes part of the process’s execution context and inherits whatever access that process already has. That means the trust decision is really about which identities are allowed to join the process boundary at runtime. For identity teams, this is the same governance question seen in NHI and workload access: who is allowed to become execution-capable inside a trusted boundary.

Certificate-store trust is too weak a premise for runtime module governance: the article shows why a locally trusted certificate is not equivalent to a trustworthy module identity. If an endpoint can accept a new root or rely on name-based checks alone, the trust model becomes movable by the machine owner rather than anchored by policy. That is a classic trust-anchor problem, and it matters wherever privileged runtime code must be controlled.

Signing-level enforcement is a better control concept than signature presence: the meaningful control is not whether a binary has a signature, but whether its verified identity reaches the required trust level for the process. This is exactly the kind of distinction IAM practitioners recognise in strong authentication versus mere credential presence. The practitioner conclusion is that code integrity policies should be evaluated as access policy for execution, not as a build-time compliance checkbox.

Pinned root identities create a maintainable trust boundary for Windows module loading: the article’s approach of binding trust to known Microsoft root identities and issuing CA material shows how runtime trust can remain stable even when local stores are mutable. That matters because execution-boundary governance needs a reproducible trust anchor, not a policy that changes with every endpoint. The broader lesson is to govern module trust like any other privileged identity path: anchored, explicit, and reviewable.

Runtime code integrity belongs in the same control conversation as least privilege and zero trust: the ability to load a DLL is effectively the ability to extend a process’s privileges and attack surface. When the module boundary is unmanaged, zero trust stops at the application edge and never reaches the code that actually executes. Practitioners should treat trusted DLL enforcement as part of privileged execution governance, not as a niche Windows hardening exercise.

What this signals

Runtime module trust should be governed like privileged access: the article shows that the real control question is whether a DLL is allowed to join a sensitive process boundary, not whether it is merely signed. That shifts enforcement upstream, to issuance of trust, which is the same governance pattern identity teams apply when they reduce standing privilege.

Pinned trust anchors matter more than endpoint-local acceptance: module validation that depends on the local certificate store inherits the state of the device, not the policy intent of the organisation. For programmes that protect browsers and other credential-bearing processes, the trust root has to be owned and reviewable, or the execution boundary is only partially controlled.

Windows code integrity is a useful model for execution-boundary governance: the article’s mechanism shows how a control can evaluate trust before code enters a sensitive runtime. That is a useful pattern for browser hardening, workload identity, and any programme that needs to decide which software identities are allowed to execute with privileged context.


For practitioners

  • Map DLL trust to execution privilege Inventory which Windows processes handle credentials, tokens, or other sensitive data and classify their allowed modules as a runtime trust boundary, not just a build artifact list.
  • Pin trust anchors instead of local store state Validate signed modules against pinned root identities, certificate thumbprints, or public keys so the trust decision is not inherited from a mutable endpoint certificate store.
  • Separate Microsoft, first-party, and third-party module rules Keep distinct allowlists for vendor-signed, organisation-signed, and narrow third-party DLLs so a single trust rule does not silently expand process execution scope.
  • Test enforcement at load time, not after launch Verify that blocked modules fail during image section creation and do not rely on post-load detection to catch untrusted code that has already entered the process.
  • Review process mitigations for sensitive browsers Audit browser and endpoint processes that carry identity data to confirm their signature policies match the actual module trust model they need to enforce.

Key takeaways

  • Trusted DLL enforcement is fundamentally about who is allowed into a process boundary, not just whether code is signed.
  • The article shows that Windows evaluates module trust at load time through Code Integrity and signing-level checks, which tightens the runtime boundary.
  • For practitioners, the practical control is pinned trust anchors and explicit module allowlists, because local certificate-store trust is not a stable governance model.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

OWASP Non-Human Identity Top 10 and MITRE ATT&CK address the attack and risk surface, while NIST SP 800-53 Rev 5 and NIST CSF 2.0 set the governance and control requirements practitioners need to meet.

FrameworkControl / ReferenceRelevance
OWASP Non-Human Identity Top 10NHI-04 — Insecure AuthenticationTrusting a DLL identity without pinned roots creates weak runtime authentication of code.
NHI-05 — Overprivileged NHILoaded modules inherit process privileges, expanding the execution boundary beyond intended scope.
Recommendation — Pin trusted module identities and verify signatures against them before allowing load into sensitive processes. Limit trusted DLL sets to the minimum modules required by each sensitive process.
NIST SP 800-53 Rev 5IA-5 — Authenticator ManagementCertificate and key material underpin the module trust decision discussed in the article.
Recommendation — Manage signing credentials and trust material so module identity remains verifiable over time.
NIST CSF 2.0PR.AA-05 — Access Permissions, Entitlements and AuthorizationsThe article is about authorizing code to enter a protected process boundary.
Recommendation — Apply explicit authorization rules to module loading paths for high-value processes.
MITRE ATT&CKTA0006;TA0008 — Credential Access; Lateral MovementA malicious DLL inside a sensitive process can enable credential access and later movement.
Recommendation — Map trusted DLL failures to credential-access and lateral-movement paths in detection and response.

Key terms

  • Code Integrity: Code Integrity is the Windows enforcement layer that validates whether executable code can be loaded or run under a given policy. In practice, it turns signature and trust decisions into runtime gates, so untrusted binaries are blocked before they can join a process context.
  • Signing Level: A signing level is the trust classification Windows assigns to an image after validation. It expresses whether a module meets a required policy threshold, which is more precise than simply asking whether the file has a valid signature.
  • Trust anchor: A trust anchor is the root authority that signs federation metadata and establishes the policies other participants inherit. In practice, it controls who can join, what cryptographic rules apply, and how trust is delegated across an ecosystem. The security posture of the whole federation depends heavily on this layer.
  • Process Mitigation Policy: A process mitigation policy is a Windows control that constrains how a process can run, including which images it may load. For trusted DLL enforcement, it becomes a runtime access rule for code identity, not just a defensive setting.

Deepen your knowledge

NHI governance, agentic AI identity, and machine identity lifecycle are core topics in our NHI Foundation Level course, the industry's only accredited NHI security programme. If you are responsible for identity security strategy or NHI governance in your organisation, it is worth exploring.
NHIMG Editorial Note
Published by the NHIMG editorial team on August 2, 2026.
Updated on October 12, 2026.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org