◇ OpenCyber Academy
Technical · Chapter 8 · English

Chapter 8 — Identity, host and network failure modes

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Chapter 8 — Identity, host and network failure modes

Lesson map

Lesson 08 published. Map, example, EX029.

flowchart TD
  N0["Learning outcomes and connection"]
  N1["8.1 Name the failure layer and the user outcome"]
  N2["8.2 Normalize clocks without pretending to order eve"]
  N3["8.3 Competing hypotheses and discriminators"]
  N4["8.4 A two-step supervised troubleshooting lab"]
  N5["Subject synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Worked example"]
  EX --> Q["Exercise EX029"]

Logical drawing

flowchart LR
  N0["Learning outcomes and connection"]
  N1["8.1 Name the failure layer and the user outcome"]
  N2["8.2 Normalize clocks without pretending to order eve"]
  N3["8.3 Competing hypotheses and discriminators"]
  N4["8.4 A two-step supervised troubleshooting lab"]
  N5["Subject synthesis"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX029"]
[Learning outcomes and connection]
    |
    v
[8.1 Name the failure layer and the user outcome]
    |
    v
[8.2 Normalize clocks without pretending to order eve]
    |
    v
[8.3 Competing hypotheses and discriminators]
    |
    v
[8.4 A two-step supervised troubleshooting lab]
    |
    v
[Subject synthesis]
    |
    v
[Worked example] --> [Exercise EX029]

Learning outcomes and connection

The learner will distinguish authentication, authorization, host and network symptoms; correct reported times under an explicit clock-offset model; and request observations that discriminate competing explanations. Chapter 7 established which sources could answer a question and which might be incomplete. Chapter 8 applies that discipline to a mixed-symptom packet. The lab is L8, a separate fictional branch. It is not a later discovery about N01–N06, I01–I02, H01 or A01. RFC 9110 supplies general HTTP status semantics; the L8 labels, clocks and diagnoses are original teaching fixtures.

8.1 Name the failure layer and the user outcome

An authentication error concerns establishing the claimed identity; an authorization error concerns whether an established principal may perform an action. A service may report HTTP 401 for an authentication challenge, 403 for a refusal and 503 for temporary service unavailability under appropriate HTTP semantics. Those codes are observations from a particular component, not diagnoses of the whole path. A gateway can produce 503 because an upstream call timed out, while the underlying cause is DNS, routing, queue pressure, an application dependency, a database delay or a deliberate maintenance action. An IdP denial does not prove a malicious user: expired credentials, clock skew, policy rollout and client configuration are possible. A host restart does not prove compromise: patching, crash recovery and operator action are possibilities.

LLR's user outcome remains a correct, authorized room reservation with an audit trail. L8 instead supplies a bounded symptom packet for a teaching variant at approximately 12:00 UTC:

ID Reported source time Fictional observation What it does not establish
F81 Edge 12:00:03, edge clock measured +2 s GET /rooms returned 503 with gateway upstream-timeout label and request r-401. Which upstream component caused the timeout.
F82 IdP 12:00:00, IdP clock measured −1 s One API-to-IdP call reports a timeout. A global IdP outage or policy denial.
F83 Runner host 11:59:58, offset uncertain ±3 s Boot identifier differs from the prior supplied host inventory. That the restart caused F81 or was unauthorized.
F84 Change calendar 11:59 A switch-maintenance window was scheduled for this path. That the switch was actually changed at 11:59.
F85 API query collected 12:06 A 12:00:00–12:00:10 sample has no literal r-401 field. That the API never saw the request; ID mapping and coverage are unknown.

This packet includes one IdP timeout, not an authentication rejection. Do not label it 401, 403 or “credentials stolen.” The edge's 503 says what the client got. The calendar is a planned change, not an execution receipt. The changed boot ID supports the hypothesis that the host restarted; it does not identify why. An API sample with no literal r-401 may be missing a mapped request ID. The packet gives enough to form testable hypotheses, not enough to select a single root cause.

8.2 Normalize clocks without pretending to order every event

For a source whose clock is ahead of UTC by two seconds, subtract two seconds from its reported time. For a source behind UTC by one second, add one second. The formula is corrected UTC = source-reported time − measured source offset. That correction should carry the offset measurement time and uncertainty; clocks can drift. Run the following code offline to reproduce the two stated estimates.

from datetime import datetime, timedelta

def corrected(raw, offset_seconds):
    reported = datetime.fromisoformat(raw.replace("Z", "+00:00"))
    return (reported - timedelta(seconds=offset_seconds)).strftime(
        "%H:%M:%S"
    )

print("F81 corrected:", corrected("2026-10-11T12:00:03Z", 2))
print("F82 corrected:", corrected("2026-10-11T12:00:00Z", -1))

The expected output is F81 corrected: 12:00:01 and F82 corrected: 12:00:01. The matching second does not establish which event came first or whether they share a transaction. F83's ±3-second uncertainty overlaps both estimates, and F84 has no execution timestamp. A proper technical timeline keeps raw time, correction rule, measurement uncertainty, producer and collection time in separate columns. It can state “temporally compatible” while refusing to draw a causal arrow. If an offset measurement is stale, record that as a limitation rather than fabricating subsecond precision.

8.3 Competing hypotheses and discriminators

Build a decision table instead of choosing the most vivid story. For each hypothesis, state what the packet supports, what remains unknown, a least-invasive owner-approved observation and a result that would weaken it.

Hypothesis Present support Bounded discriminator A weakening result
Path-specific network interruption to IdP One API-to-IdP timeout and a scheduled switch window. Network owner supplies an approved execution receipt plus path metrics for the API–IdP segment. No change executed and validated path metrics show normal connectivity in the relevant interval.
Identity service/policy issue One timeout involving IdP. IdP custodian checks same-interval request IDs, policy version and reachability from another client class. The same request succeeded under the validated mapping, with no relevant policy change.
Host restart affecting worker Different boot ID on runner. Host owner supplies boot reason, service dependency, process start and job queue status. Runner is outside the affected edge/API path and the worker finished normally.
API or database delay Edge labels upstream timeout. Application/database owners check bounded upstream trace and authoritative data route. Validated trace shows normal processing within the edge deadline for mapped r-401.
Unauthorized activity Mixed failures could coexist with an incident. First establish a source-linked unauthorized action, target and authority ledger status. A complete approved change record explains the tested action; other hypotheses still need review.

The “weakening” column does not mechanically disprove a hypothesis. A query can be incomplete, and a path can fail intermittently. The responder should update confidence only within the tested interval and source coverage. A scheduled maintenance record may explain timing but not prove execution; an execution receipt plus a path-specific metric is stronger. Even then, attribution of a human or intent requires separate evidence. These distinctions matter because premature principal revocation or service restart can destroy useful volatile state and affect approved reservation work.

8.4 A two-step supervised troubleshooting lab

Step one is a paper request, not live access. Ask the network and application custodians for a 11:59:55–12:00:10 UTC window, including offset measurement, upstream mapping of r-401, timeout class, interface/path metrics, collection receipt and limits. Ask the change owner for a versioned maintenance execution record; a calendar entry alone is insufficient. Simultaneously ask the identity custodian whether the F82 timeout is one request or part of a broader pattern, with privacy-limited fields. The incident lead should approve the source scope, and each custodian should confirm query coverage.

Step two is a conditional interpretation. If a complete gateway-to-API trace maps r-401 to an API request that reached the database after the gateway deadline, API/database latency becomes more plausible; the IdP timeout may be separate. If the trace shows a drop on the API-to-IdP path concurrent with an approved switch change, network maintenance gains support. If the sources cannot be collected, retain multiple hypotheses and record the evidence gap. Do not choose a winner from a missing row. A useful handoff says which user outcomes are impaired, which claims are source-bounded, what authority is pending and what next observation would change the action.

A negative-control variant V8 changes only F82: the IdP custodian now supplies a validated successful response for the same mapped API request. That weakens a complete IdP outage for this transaction but does not prove that the edge's 503 was unrelated to identity for every request, or that the network was healthy everywhere. Keep the original and variant separate. The lab's purpose is to practice revising a hypothesis when better evidence arrives, not to issue a final diagnosis.

Common errors and limits

Exercises — subject 8

EX029 — Symptom separation. Objective: keep layers distinct. For F81–F85, list producer, observed field, affected user outcome, one plausible failure layer and one unsupported inference. Explain why F82 is a timeout rather than an authentication denial. Evidence: five-row Markdown table. Rubric: 2 = all five with source limits; 1 = one conflation; 0 = declares stolen credentials or completed maintenance.

EX030 — Clock transcript. Objective: reproduce §8.2 and preserve uncertainty. Report both exact output lines, the correction formula, F83's uncertainty and why matching corrected seconds cannot order F81/F82. Evidence: raw/corrected timeline. Rubric: 2 = both outputs plus uncertainty; 1 = arithmetic only; 0 = asserts causality from time coincidence.

EX031 — Discriminator matrix. Objective: compare explanations without a premature action. For network, IdP/policy, host, API/DB and unauthorized-activity hypotheses, provide one supporting row, a custodian, an approved observation and a weakening result. Mark authorization status pending. Evidence: five-row table. Rubric: 2 = source-specific and falsifiable; 1 = generic “check logs”; 0 = orders a live restart or principal revocation.

EX032 — Variant handoff. Objective: update a conclusion with a negative control. Write a 160–220-word handoff contrasting original F82 with V8's validated success. Include the corrected clock, remaining r-401 mapping gap, maintenance execution question, service risk of a broad control and next owner. Evidence: versioned note, not final diagnosis. Rubric: 2 = variant kept separate and bounded next request; 1 = notes success but overstates scope; 0 = announces universal recovery or actor.

Subject synthesis

The packet supports several explanations, each with a different discriminator. Technical response requires source-specific, time-bounded and authorized tests; no code output, status code or calendar entry by itself assigns cause or actor. Chapter 9 starts a separate linked K workshop to practice evidence collection before any change proposal.

Continue studying — chapter 08 of 18

← Chapter 07 · Course chapter index · Chapter 09 →

Continue to the next authored lesson.

Worked answers

EX029 — Model symptom table. F81 is an edge-produced 503/upstream-timeout for one room-list read: gateway/upstream path symptom, not proof of attack. F82 is an IdP-produced timeout on one API call: no returned authentication decision is supplied, so it is not a denial or a 401/403 record. F83 is a host-produced changed boot ID: runner restart plausible, cause and link to room-list failure unknown. F84 is a change-calendar schedule: execution unknown. F85 is an API query lacking literal r-401: source coverage and gateway mapping unknown. A good table names producer and scope in every row, keeps the reservation user outcome unverified and infers no human actor.

EX030 — Model corrected clock transcript.

F81 corrected: 12:00:01
F82 corrected: 12:00:01

Correction is reported source time − measured source offset: edge +2 seconds becomes 12:00:01, IdP −1 second also becomes 12:00:01. F83's ±3-second uncertainty overlaps that moment and F84 lacks an execution timestamp. Equal one-second estimates do not order the events or prove causation. Preserve raw time, offset measurement time, uncertainty, producer and collection time.

EX031 — Model five-way discriminator. Network interruption: F82 and F84 are suggestive; network custodian should supply 11:59:55–12:00:10 path metrics and versioned execution receipt; no executed change and normal validated path behavior would weaken it. IdP/policy: F82 motivates same-request result and policy-version check; validated success for the mapped request weakens complete outage. Host restart: F83 motivates boot reason, worker status and dependency check; runner outside affected path with normal job completion weakens direct causation. API/DB delay: F81 motivates mapped upstream timing and authoritative route check; within-deadline processing would weaken it. Unauthorized activity: mixed symptoms alone are insufficient; ask incident lead/change owner for a source-linked unauthorized action and ledger status. A complete approved record for the tested action weakens that specific claim. Collection and control approvals remain pending. No row selects an actor.

EX032 — Model versioned handoff. “Version 1, L8 teaching branch, 12:06 UTC: F81 reports one edge 503 for r-401 and F82 reports one API-to-IdP timeout. With supplied offsets, both source times estimate 12:00:01 UTC; clock uncertainty does not establish order or causation. The runner boot ID changed near this interval, while F84 is only a scheduled maintenance window. The API sample lacks a literal r-401, but the gateway may remap that identifier and source coverage is unverified. The reservation write outcome has not been measured. I request owner-approved gateway mapping, API/IdP path timing and a versioned maintenance execution receipt for 11:59:55–12:00:10, including clocks and collection limits. I do not recommend broad principal revocation or API restart from this packet: either could interrupt legitimate bookings or change useful state. Version 2, separate V8 negative control: the IdP custodian now supplies a validated success for the same mapped API request. That weakens a complete IdP outage for this transaction; it does not establish all identity paths as healthy or explain the edge 503. Application and network owners should compare mapped upstream deadline and path metrics next. Authority to collect or change production remains pending.” Other wording passes if it preserves variant separation, next owner and service risk.