Isolated (air-gapped) environment standards
Criteria verified as of August 2026. Re-verify on the web before committing to anything (§8).
Hard premise: an air gap is not a security control, it is a network restriction that shifts
the risk. What it removes — direct remote access — it swaps for two others that almost nobody
budgets for: a human, physical entry channel (which is the documented vector) and the
structural inability to patch in time. A badly operated isolated environment is less secure than
a connected and well-patched one. The decision is not "isolate or not", it is whether you can
pay the operational cost of being isolated.
1. Scope and triggers
Applies to the design and operation of an environment with no Internet path: which isolation
model is chosen and what it guarantees, how software gets in and how it is verified inside,
physical transfer and its governance, patching and vulnerability triage without feeds, time,
internal PKI, licences that phone home, backup and recovery inside the enclave, observability that
cannot leave, and the criterion for when isolation is the right answer.
Triggers: "air gap", "air-gapped", "isolated environment", "no Internet access", "separate
network", "offline", "sneakernet", "data diode", "unidirectional gateway", pulp export/pulp import, toc.json, reposync, createrepo_c, apt-mirror, debmirror, devpi, verdaccio,
skopeo copy --dir, docker save/load, oras pull, local registry:2, cosign save,
cosign verify --trusted-root/--insecure-ignore-tlog/--local-image, rpm --import,
gpgcheck=1, Signed-By, trivy --offline-scan/--skip-version-check, grype db import,
chronyc sources with no upstream, GNSS/GPS stratum 1, clockskew, CRL nextUpdate, licence
server, "activation", "cannot phone home".
Not applicable: see ot-ics-security-standards (the sibling boundary and the most likely
one: industrial isolation — the Purdue model, the level 3.5 DMZ, IEC 62443-3-2 zones and
conduits, a diode between plant and corporate, EWS, PLC project files, 20-year-old assets that are
not patched for physical safety reasons — is theirs. Here, isolation as a general operating
mode, applicable also to an R&D enclave, a backup vault, an offline root CA, a malware lab or a
non-industrial regulated environment. Arbitration rule: if on the other side of the diode there
is a physical process that can kill somebody, ot-ics rules; if on the other side there is data
and servers, this skill rules. And the order of priorities changes with it: there safety above
everything; here confidentiality is usually what motivated the isolation),
ctf-lab-standards (a disposable security lab and sample detonation: isolation there protects
the world from the lab; here it protects the enclave from the world — they are two different
threat directions and two different designs), firewall-policy-standards (the rule as an artifact
and its life cycle; here it is decided whether a path exists, there the rule is written.
Corollary of §2.1: an environment with firewall rules is not isolated, it is segmented),
networking-standards and routing-switching-standards (VLANs, VRFs, addressing and switching of
the enclave), vulnerability-management-standards (triage, CVSS/EPSS/KEV, VEX and remediation
SLAs are theirs; here why the calendar changes and how the data arrives with no connection),
backup-recovery-standards (the mechanics of the copy and the tested restore; here the constraint
that the repository and its keys cannot be outside the enclave),
bcdr-standards (RTO/RPO and exercises: a DR plan that assumes downloading something from the
Internet is not a plan in this environment), secrets-management-standards (secrets manager,
rotation; here that it cannot depend on a cloud KMS), cryptography-pki-standards (algorithms,
custody and the offline root CA as a practice — the offline root is an air gap and that skill
owns it; here the PKI of the enclave and the availability of its CRLs),
identity-access-management-standards (IdP, MFA and federation: federating with a cloud IdP is
exactly the data path that isolation denies),
opensource-licensing-standards (licence obligations of the mirrored software; here only the
verified licence status of the tools in §2.3),
cicd-standards (the pipeline and its gates; here the pipeline split in two by the cut),
iac-standards (Terraform/Ansible and their providers and collections, which also have to be
mirrored), kubernetes-standards (registry, admission and verified signatures in the cluster),
ceph-standards (sister: cephadm explicitly documents deployment in an isolated environment
against a local container registry; the registry belongs here, the cluster is theirs),
observability-standards (telemetry stack; here that it cannot export),
grc-compliance-standards (regulatory framework, evidence and the eventual accreditation of the
enclave), incident-response-forensics-standards (response and forensics inside the enclave,
including the extraction of evidence through the same physical channel as everything else),
detection-engineering-standards (rules and their update with no feed).
2. Default decisions
Verify on the web before fixing anything in a real project (§8). Licences and usage limits of the
mirroring tools change, and they are the kind of datum most often written from memory.
2.1 What a real air gap is
Operational, not commercial definition: an environment is isolated if no data path exists
between it and an untrusted network. A data path is anything that moves bytes, whether or not it
has an IP address.
| What gets called an air gap |
What it is |
What to assume |
| A separate VLAN with a firewall and egress rules |
Segmented network |
There is a path. If there is a rule, there is a flow, and a badly placed rule opens it |
| Separate network + jump host / bastion |
Segmented network with a bottleneck |
There is a path, and the bottleneck is the target |
| Separate network + data diode (egress) |
Unidirectional isolation |
Nothing enters over the network by physical design; there is still a human entry path |
| Separate network, no link, transfer by media |
Air gap with sneakernet |
The USB is the path, and it is the documented vector |
| No link and no transfer of any kind |
Total isolation |
Very little of this exists: the software has to get in at some point |
The three paths nobody draws on the diagram: removable media, the vendor's or
integrator's laptop that gets plugged in to do a job, and the firmware update (BMC, BIOS,
storage array, switch) that arrives in an image downloaded by somebody. If your threat model does
not cover them, you have not modelled the air gap: you have drawn a VLAN.
2.2 Models and when to use them
| Model |
Fits when |
Real cost |
| Totally isolated |
The enclave needs no fresh data and its content never leaves (backup vault, offline root CA, legal archive) |
Low. It is the only case where the air gap comes cheap |
| Unidirectional with a data diode |
You need to get out telemetry, logs or results without admitting anything back |
High: specific hardware, protocols that tolerate having no ACK, and zero return channel — not even to confirm arrival |
| Controlled sneakernet |
You need to bring in software and data regularly |
The most expensive in people and the most dangerous. It is a process, not a cable |
The diode does not solve entry. A diode guarantees that nothing enters over that link; the
software still has to get in somewhere else, and that somewhere else is where the risk lives.
Designing the diode and leaving USB ungoverned is optimising the armoured door of a house with the
window open.
2.3 Internal mirroring: choice and verified licence
| Tool |
Licence (verified raw) |
Criterion |
Pulp 3 (pulpcore) |
GPLv2 — LICENSE file of pulp/pulpcore@main |
Default for RPM/DEB/PyPI/containers when the case is exactly "isolated downstream instance": it is the only one with an export/import flow designed for it (§3.1) |
| Foreman / Katello |
Foreman GPL-3.0, Katello GPL-2.0 — LICENSE/LICENSE.txt files of theforeman/foreman@develop and Katello/katello@master |
If you already manage the RHEL/Debian fleet with Foreman; Katello is Pulp with content management on top |
| Harbor |
Apache-2.0 — LICENSE file of goharbor/harbor@main |
Default for a container registry: a CNCF project, with a proxy cache, replication between instances, immutable tags and cosign signature verification in the project policy |
| Sonatype Nexus Repository Community Edition |
EPL-1.0 — LICENSE.txt file of sonatype/nexus-public@master |
Licence trap: the code is EPL, but the free edition has usage limits — the current documentation cites 40,000 components and 100,000 requests/day, with ingest paused when exceeded (after a grace period). A full mirror of a distribution exceeds 40,000 components easily: if your case is an operating system mirror, this tool forces you to buy. Verify the current numbers before choosing it (§8) |
| JFrog Artifactory |
Proprietary |
There is no public source repository to read (jfrog/artifactory-oss returns 404). Valid if it is already paid for; do not count on a free tier without verifying it. Declared gap: the current status of its free editions has not been verified |
reposync + createrepo_c, apt-mirror/debmirror, devpi, verdaccio, registry:2 |
Each with its own |
Valid and often sufficient. Less governance and less traceability, but no usage limits and no surprise licence. For a small enclave, a reposync in cron and an rsync to media beat a platform nobody maintains |
Rule before choosing: enumerate all the ecosystems the enclave consumes — RPM/DEB, PyPI,
npm, crates, Maven, Go modules, OCI images, Ansible collections, Terraform providers, Helm charts,
IDE extensions, scanner databases — and check which ones the tool supports. Whatever is missing,
somebody will bring in on a USB, and that is exactly the failure you wanted to avoid.
3. Structure and conventions
3.1 How software gets in
Canonical flow, in three legs, with the verification repeated on the internal side:
- Outside (connected zone): it is synchronised against the upstream origin with signature
verification enabled (
gpgcheck=1/repo_gpgcheck=1 in dnf, Signed-By in apt's
.sources, hashes pinned in the language lockfiles, cosign verify for images). A transfer
artifact is produced with its hash manifest.
- Crossing: physical media or diode. The manifest travels alongside the content and, if
the threat model demands it, signed with a key of the internal enclave, not with the outside
one.
- Inside: it is verified again, with the public key that already lives inside the enclave
and that arrived through a different channel (an installation ceremony, not the same USB).
Non-negotiable rule: a signature verified only on the connected side protects nothing. The
attacker you are worried about is in transit, not at the origin. If the internal importer accepts
what arrives because "it was already verified outside", the air gap has only added latency.
Pulp export/import is the mechanism that implements this out of the box: the upstream
instance generates a .tar of the selected repository versions plus a -toc.json file with the
global and per-file SHA-256 hash, which the downstream instance — described in the
documentation as network-isolated — uses to verify and import. It supports incremental
export (full=False, with start_versions= to fix the starting point) and chunking by
chunk_size so it fits on the media. That is the pattern to replicate even if you do not use Pulp:
content + signed manifest + verification at the destination + incrementality.
Container images: skopeo copy --dest-dir or oras produce a transportable OCI directory;
docker save/load works but loses signatures and metadata. Inside, they are pushed to Harbor or
to a local registry:2. If the consumer is cephadm, Rook or Kubernetes, the internal registry
must exist before the bootstrap: cephadm's documentation describes exactly this scenario and
requires all the images (Ceph, Prometheus, node-exporter, Grafana) to be inside already.
Signing on the isolated side with cosign: cosign verify can work without going out to the
Internet with --key and a --trusted-root (Sigstore trusted root JSON file) copied inside,
and with --local-image over images saved with cosign save. --insecure-ignore-tlog exists and
is sometimes unavoidable, but it is a degradation: it gives up the inclusion proof in the
transparency log. If you use it, make it a written decision, not a flag copied from a blog.
3.2 The physical transfer
USB is the documented vector. This is not theory:
- Stuxnet got into an isolated enrichment facility through removable media. It is the canonical
case and the reason "isolated" stopped meaning "secure".
- Agent.BTZ / Operation Buckshot Yankee (2008): an infected USB stick plugged into a US CENTCOM
laptop propagated the worm to SIPRNet, the Department of Defense's classified network. The
cleanup took on the order of 14 months, prompted the ban on removable media and contributed to
the creation of US Cyber Command. Textbook isolation, defeated by a removable drive.
- GoldenJackal (ESET research, published in October 2024): a cyberespionage group with two
different toolsets, specifically designed to jump into isolated systems, used against an embassy
in Belarus (2019) and against a European government body (May 2022 – March 2024). The pattern: a
component on the USB collects from the isolated machine and waits for that same USB to go back
to a connected machine in order to exfiltrate. You do not need a connection: you need a cycle.
Minimum controls, and they are process, not product:
- One-way, single-use media for entry: labelled, used once, destroyed or reformatted with a
procedure. No USBs that come and go: the round trip is literally GoldenJackal's exfiltration
mechanism.
- A dedicated intermediate scanning station, with different engines from the enclave's,
isolated itself and with a rebuildable image. It is a sacrificial machine, not anybody's laptop.
- Chain of custody: who generated the artifact, who transported it, who imported it, with what
hash and at what time. It is the record you will need when an incident has to be reconstructed.
- Autorun disabled and device control across the enclave: only registered media, by identifier,
and only on the designated machines.
- The vendor's laptop does not come in. If they have to work, they do it from an enclave
machine, with a named account and a logged session. It is the point that gets negotiated most and
the one that costs most when conceded.
3.3 Patching and vulnerabilities with no connection
Isolation does not exempt you from patching: it changes its calendar and its cost. And that
change is the real argument against an unnecessary air gap — an environment where a patch takes
weeks to get in is an environment where an actively exploited vulnerability lives for weeks.
- Vulnerability data has to be brought in like any other artifact: scanner databases, vendor
advisories, the distribution's OVAL. Trivy explicitly documents the scenario: its databases
(vulnerabilities, Java, checks, VEX Hub) are packaged as self-hostable OCI images in your
own registry; the checks bundle is embedded in the binary as a fallback, with the date of
the release you use;
--offline-scan avoids the calls to Maven Central; and
--skip-version-check --disable-telemetry — both, one alone is not enough — cut the
connections to check.trivy.dev. Verify the equivalent for your scanner before assuming it.
- The scanner is software that also comes in through the physical channel, and scanners are a
supply chain target:
kubernetes-standards §2 documents the compromise of Trivy's actions in
March 2026. Pin by digest and verify signatures also for security tools.
- Honest calendar: define an import SLA (e.g. a weekly content window, plus a rehearsed
emergency route for a critical KEV) and measure it. Triage follows the rules of
vulnerability-management-standards; what changes here is that the clock starts when the datum
gets in, not when the CVE is published, and that difference has to be measured and reported,
not hidden.
- Inventory and SBOM are more important here, not less: without them you cannot answer "does it
affect me?" when the advisory arrives through a slow channel.
3.4 Time
With no external source, the clock drifts, and the drift breaks things nobody associates with
the clock:
- Kerberos: the maximum tolerated skew by default in MIT krb5 is 300 seconds (five
minutes) (
clockskew in krb5.conf). Once exceeded, authentication fails wholesale and the
symptom is "I can't log in to anything", not "the clock is wrong".
- TLS: a fast clock invalidates valid certificates; a slow one accepts expired ones. And in an
isolated enclave nobody gets the expiry warning by email.
- Logs and forensics: with no common reference, correlating two servers is impossible.
Design: a stratum-1 source inside the enclave — a GNSS/GPS receiver with an antenna, or a
disciplined oscillator — and chrony as the internal server, with at least two sources so you
can detect that one is lying. Without GNSS, the minimum acceptable pattern is a documented and
periodic manual adjustment procedure against a reliable reference, with a record. Watch drift as
a first-class metric: it is one of the few that degrades silently until it breaks everything at
once.
3.5 Internal PKI
- The enclave needs its own hierarchy: an offline root (inside the enclave itself, or held
separately), an online issuing CA, and internal and reachable CRL/OCSP distribution points.
- The classic failure: certificates issued by a CA whose CRL DP points at an Internet URL.
Clients that validate revocation strictly fail; those that do not, accept revoked certificates.
Neither is what you wanted.
- The CRL expires: its
nextUpdate is a time bomb if nobody republishes. Automate the
regeneration and monitor the remaining time, just as you monitor certificate expiry.
- No trust anchors that depend on an external service. The whole chain is resolved inside.
3.6 Licences and dependencies that phone home
It is the design failure discovered on cut-over day, not before. Before isolating, inventory
which component needs to talk to the outside to function, not just to update:
- Product activation and licence servers (including those that only check "every now and then" and
fail after N days).
- Certificate revocation checks and timestamping (RFC 3161).
- Mandatory telemetry and version checks.
- DNS resolution of external domains, including the ones a library does at start-up.
- Federated authentication against a cloud IdP. Federating with an external IdP means having a
data path: either the IdP lives inside, or the enclave is not isolated.
- Models, dictionaries and databases that a service downloads on first start.
Demand contractually, before buying, the answer to "does it work with no Internet access and
for how long?" and an offline licensing route. Verify it in a genuinely cut-off environment —
not with a firewall rule you can remove — because the commercial answer and the technical one
rarely match.
3.7 Backup, recovery and observability
- The copy lives inside the enclave and so does its key: an encrypted repository whose secret
is in a cloud KMS is a backup you cannot restore. The mechanics are in
backup-recovery-standards; the constraint belongs here.
- The DR plan cannot assume downloads. Everything needed to rebuild — ISO images, packages,
container images, the restore tools' binaries, the documentation itself — has to be inside and
tested from inside. A runbook that starts with
curl https://… is not a runbook in this
environment.
- Telemetry: metrics, logs and traces stay inside; the observability stack is deployed in full
within the enclave. If something has to get out (reports, alerts to the corporate SOC), the
diode is the correct mechanism and you have to accept that there will be no return channel:
nobody will be able to "ask for more context" from outside. Design what leaves to be
self-sufficient.
- The SOC outside does not see the enclave. Either there are analysts inside, or there is a
well-designed unidirectional flow, or the enclave is a detection blind spot — which is exactly
where an attacker who is already in wants to be.
4. Verification
Isolation is demonstrated, not declared.
- Path test: from several enclave hosts, an active attempt to get out over HTTP(S), DNS, NTP,
ICMP and common protocols towards controlled external destinations. Everything must fail,
and you also have to review what was logged at the edge. Repeat after every network change.
- Inventory of physical paths: enabled USB ports, optical drives, BMCs and their management
network, serial consoles, Wi-Fi and Bluetooth on laptops and servers, and any out-of-band
management interface somebody has connected to the corporate network "just for monitoring".
That last one is the most common and the one that breaks the whole isolation.
- Import chain test: bring in an artifact with a deliberately tampered signature and check
that the internal side rejects it. If it goes through, your verification is decorative.
- Clock test: shift a server's clock beyond
clockskew and check that detection fires before
it breaks authentication.
- Licence and cold start test: restart the whole enclave with no connectivity at all and check
what does not come up. Doing it for the first time during a disaster is the scenario you were
trying to avoid.
- Emergency route rehearsal: time how long it takes for a critical patch to be applied inside,
end to end. That number is your real exposure, and it goes in the risk register.
5. Security
- Correct threat model: isolation removes the opportunistic remote attacker. It does not
remove the insider, the vendor, the supply chain of the software you import or the patient
attacker waiting for a USB to make the return trip. Design for those four.
- Defence in depth inside the enclave: the most expensive mistake is treating the interior as a
trust zone. With no Internet access, lateral movement is just as easy and much less visible.
Internal segmentation, least privilege, MFA, EDR and hardening remain mandatory
(
linux-hardening-standards, identity-access-management-standards).
- Exfiltration is physical too. The same media controls you apply on entry apply on exit, and
all the more so if what motivated the isolation was confidentiality.
- Watch what remains: attempts to reach the Internet from the enclave are an extremely
high-value detection signal — either there is a configuration leak, or there is something trying
to phone home. That they fail does not mean you should not alert. On the contrary: they are the
cleanest alert you are going to get.
- Cryptography: the enclave cannot lean on external timestamping, transparency or key
management services. Everything inside, with its own custody and rotation.
6. When the air gap is the right answer
| Situation |
Verdict |
| Immutable backup vault, offline root CA, long-term archive |
Correct and cheap. Little content, low frequency, low operational cost |
| A system whose compromise has physical or national security consequences, with a long service life and no capacity for fast patching |
Correct, and the cost is justified (here the doctrine is set by ot-ics-security-standards) |
| Data whose classification requires it by rule |
Correct by obligation; the work is doing it well, not arguing about it |
| A malware analysis or R&D lab with sensitive material |
Correct, with the threat direction inverted (ctf-lab-standards) |
| A normal business application, "just in case" |
Expensive theatre. It degrades security: patching becomes slow, observability blind, and the team ends up opening exceptions nobody audits |
| Replacing access management and segmentation nobody wants to do |
Incorrect. The air gap is not a shortcut for skipping IAM or network policy; it is an additional control on top of both |
Criterion in one line: the air gap is justified when the cost of being disconnected is lower
than the risk of being connected, and that calculation has to be written with numbers — patching
time, dedicated people, cost of the mirror — not with adjectives.
7. Long-term sustainability and prohibitions
- A recurring cost, not a project: the mirror, the import window, the scanning station, the
time source, the PKI and the DR rehearsal are continuous work with a named owner. An air gap
with no operational budget degrades to "an old unpatched network with firewall rules".
- Review the decision every year: is there still a reason? An isolated enclave kept by inertia
is pure cost, and an enclave where three "temporary" exceptions have already been opened is no
longer isolated — it is worse than segmented, because nobody reviews its rules.
Explicit prohibitions:
- ❌ Calling a network with firewall rules towards the Internet an "air gap". FORBIDDEN in any
design or audit document: the word sets risk expectations that reality does not meet.
- ❌ Verifying the signature only on the connected side.
- ❌ Removable media that go in and out of the enclave (the round trip).
- ❌ Personal media, and vendor machines connected to the enclave's network.
- ❌ Autorun enabled; writing with no device control.
- ❌ "There is no need to patch here because it is isolated". It is the statement that turns
isolation into a long-lived vulnerability.
- ❌ An enclave with no defined and monitored time source.
- ❌ CRLs or distribution points pointing outside; trust anchors that depend on an external
service.
- ❌ "Temporary" exceptions to the isolation with no expiry date and no review.
- ❌ Federating the enclave's identity against an external IdP.
- ❌ Backups or encryption keys of the enclave held outside and only outside.
- ❌ A DR plan that at some step requires downloading something.
- ❌ Isolating without having inventoried which components need to phone home to function.
- ❌ Choosing a mirroring platform by its code licence without checking the usage limits of the
free binary (§2.3).
- ❌ Treating the inside of the enclave as a flat trust zone.
8. Mandatory web verification
Before fixing anything from this document in a real design:
- Licences and limits of the mirroring platforms: verified raw as of August 2026 —
Pulp GPLv2 (
pulp/pulpcore@main:LICENSE), Harbor Apache-2.0
(goharbor/harbor@main:LICENSE), Nexus EPL-1.0 (sonatype/nexus-public@master:LICENSE.txt),
Foreman GPL-3.0, Katello GPL-2.0. JFrog Artifactory is proprietary and has no public
source repository. Always re-verify by reading the licence file, not the GitHub label or the
commercial site.
- Usage limits of Nexus Repository Community Edition: the current documentation cites
40,000 components / 100,000 daily requests; Sonatype's original announcement cited different
figures (100,000 components / 200,000 requests). Declared discrepancy: check
help.sonatype.com for your version before sizing. Declared gap: that page could not be read
raw (a JS application); the datum came in through a web search, not verbatim.
- Status of JFrog's free editions (Artifactory OSS, JFrog Container Registry):
declared gap, not verified.
- Your scanner's connectivity requirements: Trivy's air-gap guide is the reference verified
here (databases as self-hostable OCI images, embedded checks,
--offline-scan,
--skip-version-check and --disable-telemetry). For Grype, Wazuh, OpenSCAP or anything
else, verify the equivalent in its documentation — do not assume it by analogy.
cosign verify flags (--key, --trusted-root, --local-image,
--insecure-ignore-tlog): verified against doc/cosign_verify.md of sigstore/cosign@main.
They change between major versions; check the ones in your binary.
- Kerberos
clockskew: 300 s by default according to MIT krb5's documentation. Active
Directory has its own parameter and its own policy — verify it separately if the enclave is
Windows.
- Cases cited: Stuxnet, Agent.BTZ / Buckshot Yankee (2008, SIPRNet) and GoldenJackal (ESET,
October 2024). If you need to cite them formally, go to ESET's original publication and to the
primary sources of the 2008 case; the attribution details are disputed and this document takes
no side on attribution, it only uses the cases as proof that the vector exists.
- Regulation applicable to the enclave (ENS, national classification schemes, IEC 62443 if it
is industrial): it is set by
grc-compliance-standards or ot-ics-security-standards.
Declared gap: this document cites no requirements for classified environments; the defence
sources consulted historically in this catalogue block automated access.
If the web contradicts this document, the web wins — flag the discrepancy.
1---2name: air-gapped-standards3description: Operating systems with no Internet path — what a real air gap is, how software gets in and what breaks when nothing can phone home. Use when designing or auditing an isolated, disconnected or "offline" environment, a unidirectional gateway or data diode, a sneakernet transfer process with one-time media and chain of custody, an internal mirror of dnf/apt/pip/npm/crates/maven or a container registry (Pulp with pulp export / pulp import and its toc.json, Foreman/Katello, Harbor proxy cache and replication, Sonatype Nexus Repository Community Edition and its usage limits, JFrog Artifactory, reposync, createrepo_c, apt-mirror, devpi, verdaccio), moving images with skopeo copy --dir, docker save, oras pull or a local registry:2 for cephadm/Rook/Kubernetes bootstrap, verifying signatures on the isolated side (rpm --import, gpgcheck, apt Signed-By, cosign verify --key/--trusted-root/--insecure-ignore-tlog, cosign save and --local-image), running a vulnerability scanner without feed access (trivy self-hosted DB, --of4---56# Isolated (air-gapped) environment standards78Criteria verified as of **August 2026**. Re-verify on the web before committing to anything (§8).910> **Hard premise**: **an air gap is not a security control, it is a network restriction that shifts11> the risk.** What it removes — direct remote access — it swaps for two others that almost nobody12> budgets for: **a human, physical entry channel** (which is the documented vector) and **the13> structural inability to patch in time**. A badly operated isolated environment is less secure than14> a connected and well-patched one. The decision is not "isolate or not", it is **whether you can15> pay the operational cost of being isolated**.1617## 1. Scope and triggers1819Applies to the **design and operation of an environment with no Internet path**: which isolation20model is chosen and what it guarantees, how software gets in and how it is verified **inside**,21physical transfer and its governance, patching and vulnerability triage without feeds, time,22internal PKI, licences that phone home, backup and recovery inside the enclave, observability that23cannot leave, and the criterion for when isolation is the right answer.2425Triggers: "air gap", "air-gapped", "isolated environment", "no Internet access", "separate26network", "offline", "sneakernet", "data diode", "unidirectional gateway", `pulp export`/`pulp27import`, `toc.json`, `reposync`, `createrepo_c`, `apt-mirror`, `debmirror`, `devpi`, `verdaccio`,28`skopeo copy --dir`, `docker save`/`load`, `oras pull`, local `registry:2`, `cosign save`,29`cosign verify --trusted-root`/`--insecure-ignore-tlog`/`--local-image`, `rpm --import`,30`gpgcheck=1`, `Signed-By`, `trivy --offline-scan`/`--skip-version-check`, `grype db import`,31`chronyc sources` with no upstream, GNSS/GPS stratum 1, `clockskew`, CRL `nextUpdate`, licence32server, "activation", "cannot phone home".3334**Not applicable**: see `ot-ics-security-standards` (**the sibling boundary and the most likely35one**: **industrial** isolation — the Purdue model, the level 3.5 DMZ, IEC 62443-3-2 zones and36conduits, a diode between plant and corporate, EWS, PLC project files, 20-year-old assets that are37not patched for physical safety reasons — is **theirs**. Here, isolation **as a general operating38mode**, applicable also to an R&D enclave, a backup vault, an offline root CA, a malware lab or a39non-industrial regulated environment. Arbitration rule: **if on the other side of the diode there40is a physical process that can kill somebody, `ot-ics` rules; if on the other side there is data41and servers, this skill rules**. And the order of priorities changes with it: there *safety* above42everything; here confidentiality is usually what motivated the isolation),43`ctf-lab-standards` (a disposable security lab and sample detonation: **isolation there protects44the world from the lab; here it protects the enclave from the world** — they are two different45threat directions and two different designs), `firewall-policy-standards` (the rule as an artifact46and its life cycle; **here it is decided whether a path exists, there the rule is written**.47Corollary of §2.1: an environment with firewall rules **is not isolated**, it is segmented),48`networking-standards` and `routing-switching-standards` (VLANs, VRFs, addressing and switching of49the enclave), `vulnerability-management-standards` (**triage, CVSS/EPSS/KEV, VEX and remediation50SLAs are theirs**; here **why the calendar changes** and how the data arrives with no connection),51`backup-recovery-standards` (the mechanics of the copy and the tested restore; here the constraint52that the repository and its keys cannot be outside the enclave),53`bcdr-standards` (RTO/RPO and exercises: **a DR plan that assumes downloading something from the54Internet is not a plan in this environment**), `secrets-management-standards` (secrets manager,55rotation; here that it **cannot depend on a cloud KMS**), `cryptography-pki-standards` (algorithms,56custody and the **offline root CA as a practice** — the offline root is an air gap and that skill57owns it; here the PKI *of the enclave* and the availability of its CRLs),58`identity-access-management-standards` (IdP, MFA and federation: **federating with a cloud IdP is59exactly the data path that isolation denies**),60`opensource-licensing-standards` (licence obligations of the mirrored software; here only the61verified licence status of the tools in §2.3),62`cicd-standards` (the pipeline and its gates; here the pipeline **split in two** by the cut),63`iac-standards` (Terraform/Ansible and their providers and collections, which also have to be64mirrored), `kubernetes-standards` (registry, admission and verified signatures in the cluster),65`ceph-standards` (**sister**: `cephadm` explicitly documents deployment in an isolated environment66against a local container registry; the registry belongs here, the cluster is theirs),67`observability-standards` (telemetry stack; here that it **cannot export**),68`grc-compliance-standards` (regulatory framework, evidence and the eventual accreditation of the69enclave), `incident-response-forensics-standards` (response and forensics inside the enclave,70including the extraction of evidence through the same physical channel as everything else),71`detection-engineering-standards` (rules and their update with no feed).7273## 2. Default decisions7475> Verify on the web before fixing anything in a real project (§8). Licences and usage limits of the76> mirroring tools change, and they are the kind of datum most often written from memory.7778### 2.1 What a real air gap is7980**Operational, not commercial definition**: an environment is isolated if **no data path exists**81between it and an untrusted network. A data path is anything that moves bytes, whether or not it82has an IP address.8384| What gets called an air gap | What it is | What to assume |85|---|---|---|86| A separate VLAN with a firewall and egress rules | **Segmented network** | There is a path. If there is a rule, there is a flow, and a badly placed rule opens it |87| Separate network + jump host / bastion | **Segmented network with a bottleneck** | There is a path, and the bottleneck is the target |88| Separate network + data diode (egress) | **Unidirectional isolation** | Nothing enters over the network **by physical design**; there is still a human entry path |89| Separate network, no link, transfer by media | **Air gap with sneakernet** | The USB **is** the path, and it is the documented vector |90| No link and no transfer of any kind | Total isolation | Very little of this exists: the software has to get in at some point |9192**The three paths nobody draws on the diagram**: **removable media**, the **vendor's or93integrator's laptop** that gets plugged in to do a job, and the **firmware update** (BMC, BIOS,94storage array, switch) that arrives in an image downloaded by somebody. If your threat model does95not cover them, you have not modelled the air gap: you have drawn a VLAN.9697### 2.2 Models and when to use them9899| Model | Fits when | Real cost |100|---|---|---|101| **Totally isolated** | The enclave needs no fresh data and its content never leaves (backup vault, offline root CA, legal archive) | Low. It is the only case where the air gap comes cheap |102| **Unidirectional with a data diode** | You need to **get out** telemetry, logs or results without admitting anything back | High: specific hardware, protocols that tolerate having no ACK, and **zero return channel** — not even to confirm arrival |103| **Controlled sneakernet** | You need to **bring in** software and data regularly | The most expensive in people and the most dangerous. It is a process, not a cable |104105**The diode does not solve entry.** A diode guarantees that nothing enters over that link; the106software still has to get in somewhere else, and that somewhere else is where the risk lives.107Designing the diode and leaving USB ungoverned is optimising the armoured door of a house with the108window open.109110### 2.3 Internal mirroring: choice and verified licence111112| Tool | Licence (verified raw) | Criterion |113|---|---|---|114| **Pulp 3** (`pulpcore`) | **GPLv2** — `LICENSE` file of `pulp/pulpcore@main` | **Default for RPM/DEB/PyPI/containers** when the case is exactly "isolated downstream instance": it is the only one with an **export/import** flow designed for it (§3.1) |115| **Foreman** / **Katello** | Foreman **GPL-3.0**, Katello **GPL-2.0** — `LICENSE`/`LICENSE.txt` files of `theforeman/foreman@develop` and `Katello/katello@master` | If you already manage the RHEL/Debian fleet with Foreman; Katello is Pulp with content management on top |116| **Harbor** | **Apache-2.0** — `LICENSE` file of `goharbor/harbor@main` | **Default for a container registry**: a CNCF project, with a *proxy cache*, replication between instances, immutable tags and cosign signature verification in the project policy |117| **Sonatype Nexus Repository Community Edition** | **EPL-1.0** — `LICENSE.txt` file of `sonatype/nexus-public@master` | **Licence trap**: the code is EPL, but the free edition **has usage limits** — the current documentation cites **40,000 components and 100,000 requests/day**, with ingest paused when exceeded (after a grace period). **A full mirror of a distribution exceeds 40,000 components easily**: if your case is an operating system mirror, this tool forces you to buy. Verify the current numbers before choosing it (§8) |118| **JFrog Artifactory** | **Proprietary** | There is no public source repository to read (`jfrog/artifactory-oss` returns 404). Valid if it is already paid for; **do not count on a free tier** without verifying it. **Declared gap**: the current status of its free editions has not been verified |119| `reposync` + `createrepo_c`, `apt-mirror`/`debmirror`, `devpi`, `verdaccio`, `registry:2` | Each with its own | **Valid and often sufficient.** Less governance and less traceability, but no usage limits and no surprise licence. For a small enclave, a `reposync` in cron and an `rsync` to media beat a platform nobody maintains |120121**Rule before choosing**: enumerate **all** the ecosystems the enclave consumes — RPM/DEB, PyPI,122npm, crates, Maven, Go modules, OCI images, Ansible collections, Terraform providers, Helm charts,123IDE extensions, scanner databases — and check which ones the tool supports. **Whatever is missing,124somebody will bring in on a USB**, and that is exactly the failure you wanted to avoid.125126## 3. Structure and conventions127128### 3.1 How software gets in129130Canonical flow, in three legs, with the verification **repeated on the internal side**:1311321. **Outside (connected zone)**: it is synchronised against the upstream origin with **signature133 verification enabled** (`gpgcheck=1`/`repo_gpgcheck=1` in `dnf`, `Signed-By` in `apt`'s134 `.sources`, hashes pinned in the language *lockfiles*, `cosign verify` for images). A **transfer135 artifact** is produced with its hash manifest.1362. **Crossing**: physical media or diode. The manifest travels **alongside** the content and, if137 the threat model demands it, **signed with a key of the internal enclave**, not with the outside138 one.1393. **Inside**: it is verified **again**, with the public key that already lives inside the enclave140 and that arrived through a different channel (an installation ceremony, not the same USB).141142**Non-negotiable rule**: **a signature verified only on the connected side protects nothing.** The143attacker you are worried about is in transit, not at the origin. If the internal importer accepts144what arrives because "it was already verified outside", the air gap has only added latency.145146**Pulp export/import** is the mechanism that implements this out of the box: the *upstream*147instance generates a `.tar` of the selected repository versions plus a **`-toc.json` file with the148global and per-file SHA-256 hash**, which the *downstream* instance — described in the149documentation as **network-isolated** — uses to verify and import. It supports **incremental150export** (`full=False`, with `start_versions=` to fix the starting point) and **chunking** by151`chunk_size` so it fits on the media. That is the pattern to replicate even if you do not use Pulp:152**content + signed manifest + verification at the destination + incrementality**.153154**Container images**: `skopeo copy --dest-dir` or `oras` produce a transportable OCI directory;155`docker save`/`load` works but loses signatures and metadata. Inside, they are pushed to Harbor or156to a local `registry:2`. If the consumer is `cephadm`, Rook or Kubernetes, **the internal registry157must exist before the bootstrap**: `cephadm`'s documentation describes exactly this scenario and158requires all the images (Ceph, Prometheus, node-exporter, Grafana) to be inside already.159160**Signing on the isolated side with cosign**: `cosign verify` can work without going out to the161Internet with `--key` and a **`--trusted-root` (Sigstore trusted root JSON file) copied inside**,162and with `--local-image` over images saved with `cosign save`. `--insecure-ignore-tlog` exists and163is sometimes unavoidable, but **it is a degradation**: it gives up the inclusion proof in the164transparency log. If you use it, make it a written decision, not a flag copied from a blog.165166### 3.2 The physical transfer167168USB is the documented vector. This is not theory:169170- **Stuxnet** got into an isolated enrichment facility through removable media. It is the canonical171 case and the reason "isolated" stopped meaning "secure".172- **Agent.BTZ / Operation Buckshot Yankee (2008)**: an infected USB stick plugged into a US CENTCOM173 laptop propagated the worm to **SIPRNet**, the Department of Defense's classified network. The174 cleanup took on the order of **14 months**, prompted the ban on removable media and contributed to175 the creation of US Cyber Command. Textbook isolation, defeated by a removable drive.176- **GoldenJackal** (ESET research, published in October 2024): a cyberespionage group with **two177 different toolsets, specifically designed to jump into isolated systems**, used against an embassy178 in Belarus (2019) and against a European government body (May 2022 – March 2024). The pattern: a179 component on the USB collects from the isolated machine and **waits for that same USB to go back180 to a connected machine** in order to exfiltrate. You do not need a connection: you need a cycle.181182Minimum controls, and they are process, not product:183184- **One-way, single-use media** for entry: labelled, used once, destroyed or reformatted with a185 procedure. **No USBs that come and go**: the round trip is literally GoldenJackal's exfiltration186 mechanism.187- **A dedicated intermediate scanning station**, with different engines from the enclave's,188 isolated itself and with a rebuildable image. It is a sacrificial machine, not anybody's laptop.189- **Chain of custody**: who generated the artifact, who transported it, who imported it, with what190 hash and at what time. It is the record you will need when an incident has to be reconstructed.191- **Autorun disabled and device control** across the enclave: only registered media, by identifier,192 and only on the designated machines.193- **The vendor's laptop does not come in.** If they have to work, they do it from an enclave194 machine, with a named account and a logged session. It is the point that gets negotiated most and195 the one that costs most when conceded.196197### 3.3 Patching and vulnerabilities with no connection198199**Isolation does not exempt you from patching: it changes its calendar and its cost.** And that200change is the real argument against an unnecessary air gap — an environment where a patch takes201weeks to get in is an environment where an actively exploited vulnerability lives for weeks.202203- **Vulnerability data has to be brought in like any other artifact**: scanner databases, vendor204 advisories, the distribution's OVAL. Trivy explicitly documents the scenario: its databases205 (vulnerabilities, Java, *checks*, VEX Hub) are packaged as **self-hostable OCI images** in your206 own registry; the *checks* bundle is **embedded in the binary** as a fallback, with the date of207 the release you use; `--offline-scan` avoids the calls to Maven Central; and208 `--skip-version-check --disable-telemetry` — **both, one alone is not enough** — cut the209 connections to `check.trivy.dev`. Verify the equivalent for your scanner before assuming it.210- **The scanner is software that also comes in through the physical channel**, and scanners are a211 supply chain target: `kubernetes-standards` §2 documents the compromise of Trivy's *actions* in212 March 2026. Pin by digest and verify signatures **also** for security tools.213- **Honest calendar**: define an import SLA (e.g. a weekly content window, plus a **rehearsed214 emergency route** for a critical KEV) and measure it. Triage follows the rules of215 `vulnerability-management-standards`; what changes here is that **the clock starts when the datum216 gets in, not when the CVE is published**, and that difference has to be measured and reported,217 not hidden.218- **Inventory and SBOM are more important here, not less**: without them you cannot answer "does it219 affect me?" when the advisory arrives through a slow channel.220221### 3.4 Time222223With no external source, **the clock drifts**, and the drift breaks things nobody associates with224the clock:225226- **Kerberos**: the maximum tolerated skew by default in MIT krb5 is **300 seconds (five227 minutes)** (`clockskew` in `krb5.conf`). Once exceeded, authentication fails wholesale and the228 symptom is "I can't log in to anything", not "the clock is wrong".229- **TLS**: a fast clock invalidates valid certificates; a slow one accepts expired ones. And in an230 isolated enclave **nobody gets the expiry warning by email**.231- **Logs and forensics**: with no common reference, correlating two servers is impossible.232233Design: **a stratum-1 source inside the enclave** — a GNSS/GPS receiver with an antenna, or a234disciplined oscillator — and `chrony` as the internal server, with **at least two sources** so you235can detect that one is lying. Without GNSS, the minimum acceptable pattern is a **documented and236periodic** manual adjustment procedure against a reliable reference, with a record. Watch drift as237a first-class metric: it is one of the few that degrades silently until it breaks everything at238once.239240### 3.5 Internal PKI241242- The enclave needs **its own hierarchy**: an offline root (inside the enclave itself, or held243 separately), an online issuing CA, and **internal and reachable CRL/OCSP distribution points**.244- **The classic failure**: certificates issued by a CA whose CRL DP points at an Internet URL.245 Clients that validate revocation strictly fail; those that do not, accept revoked certificates.246 Neither is what you wanted.247- **The CRL expires**: its `nextUpdate` is a time bomb if nobody republishes. Automate the248 regeneration and **monitor the remaining time**, just as you monitor certificate expiry.249- No trust anchors that depend on an external service. The whole chain is resolved inside.250251### 3.6 Licences and dependencies that phone home252253**It is the design failure discovered on cut-over day, not before.** Before isolating, inventory254which component needs to talk to the outside to **function**, not just to update:255256- Product activation and licence servers (including those that only check "every now and then" and257 fail after N days).258- Certificate revocation checks and timestamping (RFC 3161).259- Mandatory telemetry and version checks.260- DNS resolution of external domains, including the ones a library does at start-up.261- Federated authentication against a cloud IdP. **Federating with an external IdP means having a262 data path**: either the IdP lives inside, or the enclave is not isolated.263- Models, dictionaries and databases that a service downloads on first start.264265Demand contractually, **before buying**, the answer to "does it work with no Internet access and266for how long?" and an offline licensing route. Verify it **in a genuinely cut-off environment** —267not with a firewall rule you can remove — because the commercial answer and the technical one268rarely match.269270### 3.7 Backup, recovery and observability271272- **The copy lives inside the enclave** and so does its key: an encrypted repository whose secret273 is in a cloud KMS is a backup you cannot restore. The mechanics are in274 `backup-recovery-standards`; the constraint belongs here.275- **The DR plan cannot assume downloads.** Everything needed to rebuild — ISO images, packages,276 container images, the restore tools' binaries, the documentation itself — has to be inside and277 **tested from inside**. A runbook that starts with `curl https://…` is not a runbook in this278 environment.279- **Telemetry**: metrics, logs and traces stay inside; the observability stack is deployed in full280 within the enclave. If something has to get out (reports, alerts to the corporate SOC), **the281 diode is the correct mechanism** and you have to accept that there will be no return channel:282 nobody will be able to "ask for more context" from outside. Design what leaves to be283 self-sufficient.284- **The SOC outside does not see the enclave.** Either there are analysts inside, or there is a285 well-designed unidirectional flow, or the enclave is a detection blind spot — which is exactly286 where an attacker who is already in wants to be.287288## 4. Verification289290Isolation is demonstrated, not declared.2912921. **Path test**: from several enclave hosts, an active attempt to get out over HTTP(S), DNS, NTP,293 ICMP and common protocols towards controlled external destinations. **Everything** must fail,294 and you also have to review what was logged at the edge. Repeat after every network change.2952. **Inventory of physical paths**: enabled USB ports, optical drives, BMCs and their management296 network, serial consoles, Wi-Fi and Bluetooth on laptops and servers, and **any out-of-band297 management interface** somebody has connected to the corporate network "just for monitoring".298 That last one is the most common and the one that breaks the whole isolation.2993. **Import chain test**: bring in an artifact **with a deliberately tampered signature** and check300 that **the internal side rejects it**. If it goes through, your verification is decorative.3014. **Clock test**: shift a server's clock beyond `clockskew` and check that detection fires before302 it breaks authentication.3035. **Licence and cold start test**: restart the whole enclave with no connectivity at all and check304 what does not come up. Doing it for the first time during a disaster is the scenario you were305 trying to avoid.3066. **Emergency route rehearsal**: time how long it takes for a critical patch to be applied inside,307 end to end. That number is your real exposure, and it goes in the risk register.308309## 5. Security310311- **Correct threat model**: isolation removes the opportunistic remote attacker. It **does not312 remove** the insider, the vendor, the supply chain of the software you import or the patient313 attacker waiting for a USB to make the return trip. Design for those four.314- **Defence in depth inside the enclave**: the most expensive mistake is treating the interior as a315 trust zone. With no Internet access, lateral movement is just as easy and **much less visible**.316 Internal segmentation, least privilege, MFA, EDR and hardening remain mandatory317 (`linux-hardening-standards`, `identity-access-management-standards`).318- **Exfiltration is physical too.** The same media controls you apply on entry apply on exit, and319 all the more so if what motivated the isolation was confidentiality.320- **Watch what remains**: attempts to reach the Internet from the enclave are an extremely321 high-value detection signal — either there is a configuration leak, or there is something trying322 to phone home. That they fail does not mean you should not alert. On the contrary: they are the323 cleanest alert you are going to get.324- **Cryptography**: the enclave cannot lean on external timestamping, transparency or key325 management services. Everything inside, with its own custody and rotation.326327## 6. When the air gap is the right answer328329| Situation | Verdict |330|---|---|331| Immutable backup vault, offline root CA, long-term archive | **Correct and cheap.** Little content, low frequency, low operational cost |332| A system whose compromise has physical or national security consequences, with a long service life and no capacity for fast patching | **Correct**, and the cost is justified (here the doctrine is set by `ot-ics-security-standards`) |333| Data whose classification requires it by rule | **Correct by obligation**; the work is doing it well, not arguing about it |334| A malware analysis or R&D lab with sensitive material | **Correct**, with the threat direction inverted (`ctf-lab-standards`) |335| A normal business application, "just in case" | **Expensive theatre.** It degrades security: patching becomes slow, observability blind, and the team ends up opening exceptions nobody audits |336| Replacing access management and segmentation nobody wants to do | **Incorrect.** The air gap is not a shortcut for skipping IAM or network policy; it is an additional control **on top of** both |337338**Criterion in one line**: the air gap is justified when **the cost of being disconnected is lower339than the risk of being connected**, and that calculation has to be written with numbers — patching340time, dedicated people, cost of the mirror — not with adjectives.341342## 7. Long-term sustainability and prohibitions343344- **A recurring cost, not a project**: the mirror, the import window, the scanning station, the345 time source, the PKI and the DR rehearsal are **continuous work with a named owner**. An air gap346 with no operational budget degrades to "an old unpatched network with firewall rules".347- **Review the decision every year**: is there still a reason? An isolated enclave kept by inertia348 is pure cost, and an enclave where three "temporary" exceptions have already been opened is no349 longer isolated — it is worse than segmented, because nobody reviews its rules.350351Explicit prohibitions:352353- ❌ Calling a network with firewall rules towards the Internet an "air gap". **FORBIDDEN** in any354 design or audit document: the word sets risk expectations that reality does not meet.355- ❌ Verifying the signature **only** on the connected side.356- ❌ Removable media that go in and out of the enclave (the round trip).357- ❌ Personal media, and vendor machines connected to the enclave's network.358- ❌ Autorun enabled; writing with no device control.359- ❌ "There is no need to patch here because it is isolated". It is the statement that turns360 isolation into a long-lived vulnerability.361- ❌ An enclave with no defined and monitored time source.362- ❌ CRLs or distribution points pointing outside; trust anchors that depend on an external363 service.364- ❌ "Temporary" exceptions to the isolation with no expiry date and no review.365- ❌ Federating the enclave's identity against an external IdP.366- ❌ Backups or encryption keys of the enclave held outside and only outside.367- ❌ A DR plan that at some step requires downloading something.368- ❌ Isolating without having inventoried which components need to phone home to function.369- ❌ Choosing a mirroring platform by its code licence without checking the **usage limits of the370 free binary** (§2.3).371- ❌ Treating the inside of the enclave as a flat trust zone.372373## 8. Mandatory web verification374375Before fixing anything from this document in a real design:3763771. **Licences and limits of the mirroring platforms**: verified raw as of August 2026 —378 Pulp **GPLv2** (`pulp/pulpcore@main:LICENSE`), Harbor **Apache-2.0**379 (`goharbor/harbor@main:LICENSE`), Nexus **EPL-1.0** (`sonatype/nexus-public@master:LICENSE.txt`),380 Foreman **GPL-3.0**, Katello **GPL-2.0**. **JFrog Artifactory is proprietary** and has no public381 source repository. Always re-verify **by reading the licence file**, not the GitHub label or the382 commercial site.3832. **Usage limits of Nexus Repository Community Edition**: the current documentation cites384 **40,000 components / 100,000 daily requests**; Sonatype's original announcement cited different385 figures (100,000 components / 200,000 requests). **Declared discrepancy**: check386 `help.sonatype.com` for your version before sizing. **Declared gap**: that page could not be read387 raw (a JS application); the datum came in through a web search, not verbatim.3883. **Status of JFrog's free editions** (Artifactory OSS, JFrog Container Registry):389 **declared gap**, not verified.3904. **Your scanner's connectivity requirements**: Trivy's air-gap guide is the reference verified391 here (databases as self-hostable OCI images, embedded *checks*, `--offline-scan`,392 `--skip-version-check` **and** `--disable-telemetry`). For Grype, Wazuh, OpenSCAP or anything393 else, verify the equivalent in its documentation — do not assume it by analogy.3945. **`cosign verify` flags** (`--key`, `--trusted-root`, `--local-image`,395 `--insecure-ignore-tlog`): verified against `doc/cosign_verify.md` of `sigstore/cosign@main`.396 They change between major versions; check the ones in your binary.3976. **Kerberos `clockskew`**: 300 s by default according to MIT krb5's documentation. Active398 Directory has its own parameter and its own policy — verify it separately if the enclave is399 Windows.4007. **Cases cited**: Stuxnet, Agent.BTZ / Buckshot Yankee (2008, SIPRNet) and GoldenJackal (ESET,401 October 2024). If you need to cite them formally, go to ESET's original publication and to the402 primary sources of the 2008 case; the attribution details are disputed and **this document takes403 no side on attribution**, it only uses the cases as proof that the vector exists.4048. **Regulation applicable to the enclave** (ENS, national classification schemes, IEC 62443 if it405 is industrial): it is set by `grc-compliance-standards` or `ot-ics-security-standards`.406 **Declared gap**: this document cites no requirements for classified environments; the defence407 sources consulted historically in this catalogue block automated access.408409If the web contradicts this document, **the web wins** — flag the discrepancy.