Control Definition
The organization must restrict and tightly control any utility program capable of overriding system or application controls — identifying which utilities exist, limiting their use to the smallest practical set of trusted, authorized individuals, authorizing and logging each use, and removing or disabling utilities wherever there is no business need for them.
Control Objective
To prevent powerful utility programs from being used — by administrators, developers, or attackers — to bypass the security controls that systems and applications are supposed to enforce.
What This Really Means
Every operating system and platform ships with tools that ignore the rules. A disk editor rewrites data without touching file permissions. A debugger attached to a production process reads memory the application would never expose. A raw database console updates records directly, skipping every validation rule, approval workflow, and audit trail your application enforces. Password recovery tools, partition managers, system-level scripting consoles — these are the locksmith's tools of IT: legitimate in skilled hands, devastating in the wrong ones. A.8.18 exists because all your carefully built application controls are only as strong as your control over the tools that can step around them.
The control asks for four things in practice. First, know what you have: inventory the utilities present across your estate and record which systems carry them. Second, restrict them: limit each utility to named individuals with a documented business justification, not "everyone in IT." Third, control each use: elevation should be time-bound — checked out through a PAM workflow or just-in-time mechanism, ideally tied to a ticket — and every session logged. Fourth, remove what you don't need: if a production server has no reason to carry a debugger or disk editor, strip it from the build.
Do not read this control as being about dusty 1990s disk utilities. Its modern equivalents are the paths engineers use to bypass the application layer every day: kubectl exec into a production pod, a psql or mongosh session straight against the production database, a cloud provider's serial console or cloud shell, PowerShell running unrestricted on a domain controller. Any tool that lets a human act below or around the application's own controls is in scope.
What auditors treat as the heart of A.8.18: can you produce the list of privileged utilities and direct-access paths in your environment, show exactly who is authorized to use each one and why, and then produce the log of recent uses? An organization that controls admin accounts well but has never named its utilities — or cannot show a single recorded direct-database session — has not implemented this control.
Why It Matters
Utility programs are the shortcut past every other control you have built. An application can enforce maker-checker approval on payments, field-level validation, and a complete audit trail — and none of it matters if a dozen people can open a raw database console and edit the table directly. The same logic applies to attackers: once inside, they reach for exactly these tools, because utilities that override controls do the heavy lifting of privilege escalation, persistence, and data theft.
When privileged utilities are uncontrolled, organizations face:
- •Control bypass by design – Application-level integrity checks, approval workflows, and audit trails become decorative when data can be modified directly through a database client or disk-level tool
- •Forensic blind spots – Changes made through utilities typically leave no application log, so investigations cannot reconstruct what was altered, by whom, or when
- •A ready-made attacker toolkit – Debuggers, password recovery tools, and scripting consoles left on production systems hand an intruder the instruments for credential theft and lateral movement
- •Insider fraud exposure – Direct, unlogged data manipulation is the classic mechanism of insider fraud, particularly in financial and payroll systems
- •Audit nonconformities – Discovering that every engineer holds a standing production database connection string, with no register and no session logs, is a finding auditors raise quickly and rate seriously
Regional Compliance Context
For organizations in scope of India's CERT-In directions, the 180-day log retention requirement effectively extends to privileged utility use on India-connected systems: if direct database sessions and elevated console activity are not logged at all, you cannot reconstruct an incident — and the 6-hour reporting clock starts from when you notice it, not from when you finally piece events together. Make utility and privileged-session logs part of your retained log set.
BFSI organizations should also note that RBI master directions and SEBI's CSCRF expect demonstrable oversight of privileged activity on critical systems. Unlogged direct access to core banking, trading, or customer databases is the kind of gap regulators and certification auditors converge on from different directions.
Implementation Guidance
Inventory the Privileged Utilities in Your Estate
Scan servers, endpoints, and images for tools capable of overriding controls: disk and partition editors, debuggers, password recovery tools, raw database clients, system-level scripting consoles, and hypervisor management tools. Include the modern paths — kubectl exec, cloud shells, serial consoles, and standing production database credentials. Record the result in a privileged utility register listing each utility, the systems carrying it, and its business purpose.
Remove or Disable Utilities Without a Business Need
For each entry in the register, ask whether the system genuinely needs it. Strip debuggers, compilers, and admin utilities from production builds where they serve no purpose, and bake the removals into your golden images and hardening baselines (A.8.9) so they do not creep back. Document the justification for every utility you keep.
Restrict Remaining Utilities to Named Individuals
Authorize each retained utility for specific named people with a recorded justification — typically a handful of administrators or DBAs, not a whole team. Require separate administrative accounts for utility use rather than daily-driver accounts, and reflect the authorizations in your access control matrix so they are revalidated alongside privileged access reviews (A.8.2).
Make Elevation Time-Bound, Not Standing
Route utility use through a PAM or just-in-time elevation workflow: access is checked out against a ticket, granted for a defined window (hours, not months), and expires automatically. Define a break-glass procedure for emergencies with mandatory after-the-fact review. Standing local admin rights and permanent database credentials are what this step exists to eliminate.
Log and Monitor Every Use
Ensure each utility execution and privileged session produces a record — command logging at minimum, full session recording for high-risk paths like production database consoles. Ship these logs to your SIEM and alert on utility execution outside approved change windows or by unauthorized accounts (A.8.16). A log nobody can tamper with is the evidence that makes this control auditable.
Channel Ad-Hoc Production Access Through Controlled Paths
Close the side doors: SSH to production, kubectl exec, and direct database connections should pass through a bastion host or PAM proxy that authenticates the individual, requires a ticket reference, and records the session. Remove production connection strings from laptops, wikis, and CI variables that engineers can read. The goal is not to forbid these tools but to make the logged path the only path.
Review Quarterly and Reconcile the Register
Recertify the named-user list each quarter as part of your access review cycle: do these people still need these utilities? Reconcile the register against what is actually installed (a software inventory or baseline-drift report does this cheaply) and sample the usage logs for sessions without a matching ticket. Feed exceptions into your incident or nonconformity process.
Audit Evidence
During your ISO 27001 certification audit, auditors will expect to see the following evidence to demonstrate compliance with A.8.18:
Documentation
- Privileged utility register listing each utility, the systems where it exists, authorized users, and business justification
- Access control or privileged access procedure that explicitly covers utility programs and direct production access paths
- PAM or elevation records showing time-bound checkout with ticket references for sampled utility sessions
- Utility session logs or recordings (database console sessions, kubectl exec, bastion sessions) retained per policy
- Quarterly review records showing recertification of authorized users and reconciliation of the register against installed software
Interviews
- System administrators and DevOps engineers on how they obtain elevated access to run utilities and what gets logged when they do
- Database administrators on who can open a direct session against production data, how it is approved, and where the session record lives
- CISO or IT manager on how the utility inventory is maintained and how authorization decisions are made and revoked
Observations
- An engineer without authorization attempts to run a restricted utility or open a production database console — the auditor watches it be blocked or generate an alert
- Live walkthrough of the PAM or just-in-time workflow: checkout, approval, time-bound session, and the resulting recording
- A sampled production server or container image inspected for utilities not listed in the register or baseline
Practitioner Insights

The pattern I see across audits is organizations that manage privileged accounts quite well but have never once named their privileged utilities. When I ask "show me everyone who can open a raw console against the production database, and the logs of the last ten sessions," the room goes quiet — the access exists, it is just invisible. A.8.18 usually fails on scoping, not tooling. Build the register first; a certification auditor's opening move on this control is to test whether you can even enumerate the tools that bypass your applications.

In startups the honest answer is that every engineer has kubectl access and a production database string sitting in a local config file — and the first draft policy I get to review bans utilities the team demonstrably uses every day, which an auditor will see through in minutes. The pragmatic fix is not prohibition, it is routing: put a bastion or PAM proxy in front of the database and the cluster, make elevation just-in-time, and delete the standing credentials. Write the policy to match that logged path, and your evidence generates itself.
Common Challenges & Solutions
Challenge
Nobody actually knows which utilities exist across hundreds of servers, containers, and laptops.
Solution
Do not attempt a manual census. Use the software inventory you already have — endpoint management, EDR, or CMDB discovery — and diff production systems against your golden images to surface what was added after build. Start with production and crown-jewel systems only; the register for those is what auditors sample first.
Challenge
Developers occasionally need real production access to debug live incidents, and a blanket ban just drives workarounds.
Solution
Replace the ban with a fast, legitimate path: just-in-time elevation that grants a recorded session within minutes, tied to the incident ticket, expiring automatically. Add a break-glass account for true emergencies with mandatory next-day review. When the sanctioned route is quicker than the workaround, the shadow paths die on their own.
Challenge
Direct database access bypasses the application audit trail, and nobody currently logs those sessions at all.
Solution
Put a proxy in the path: a bastion, a PAM session gateway, or a database activity monitoring tool that captures every statement regardless of the client used. Restrict direct connections to named DBAs from designated jump hosts, block the database port from general networks, and ship the session logs to the SIEM where they cannot be edited by the same people they record.
Challenge
Utility use is logged, but nobody reviews the logs — unauthorized use surfaces months later, if ever.
Solution
Move from passive logging to targeted alerting: notify on utility execution outside change windows, by accounts not in the authorized list, or on systems where the register says the utility should not exist. Supplement with a monthly sample review that reconciles sessions against tickets. Ten minutes of monthly reconciliation is worth more than a terabyte of unread logs.
Challenge
Teams read this control as being about legacy disk editors and miss the cloud-native equivalents entirely.
Solution
Apply one test: can this tool act below or around the application's own controls? By that test, kubectl exec, cloud serial consoles, cloud shell, and IaC state manipulation are all in scope. Restrict them with IAM and RBAC, enable the platform audit logs (Kubernetes API audit, cloud control-plane logging), and list these paths in the same register as the traditional utilities.