Book Deep Read · Chaos Engineering · Chapter 20
Chaos Engineering: System Resiliency in Practice · Ch 20 · The Case for Security Chaos Engineering · 2020
Companies spend a fortune on firewalls, intrusion alarms, security monitoring, and a team that watches the screens around the clock. The awkward question: will any of it actually work at the moment something goes wrong? Most companies don't really know, because on a quiet day none of it is ever truly "used." This chapter is written by someone who led security engineering at a large health insurer, and the pitch is simple: instead of waiting for an attacker to test your defenses for you, cause a small "security accident" yourself and see whether the defenses catch it.
The author's team ran a small experiment: they deliberately opened a "network door" (a port) that should have stayed shut, fully expecting the firewall to block it and raise an alarm every time. In fact the firewall caught it only about 60% of the time. A configuration-checking tool that nobody thought of as a security tool caught it every single time. Worse, when the alarm reached the on-call security team, nobody could tell which system the door belonged to. The place everyone assumed was fine had three holes in it.
The payoff: you stop living on "it should be fine" and get evidence instead. You learn which defense really works, which one is just decoration, and whether an alarm is any use once it reaches a human. It doesn't replace hiring experts to play the attacker; it turns a once-a-year exam into a daily quiz. One honest cost: it only checks the kinds of slips you thought to check, so it can't stop a truly novel attack, and "opening a door on purpose" in a real system needs a carefully drawn boundary, or the drill itself becomes the incident.
Don't wait for an attacker to grade your defenses. Make a small mistake on purpose and see whether it gets stopped, seen, and handled.
Want to see how a security chaos hypothesis is written, how it really differs from red and purple teaming, how ChaoSlingr's port experiment was built, and how to test the prevent / detect / respond layers one by one? → Switch to Deep
You think security comes from adding another layer of defense, but most defenses have never been tested under real conditions, and whether they work is only revealed on the day of a real incident. In this chapter Aaron Rinehart carries chaos engineering over to security: proactively and safely inject "security failures" (most typically, human misconfiguration), write down a hypothesis first, then verify that preventive, detective, and response controls actually behave as expected, so you find failing controls before an attacker does.
The second-to-last chapter of Part V, "Evolution," after Ch19 "Chaos Engineering on a Database" and before the Ch21 conclusion. Earlier chapters ask "does the system still work when it breaks?"; this one applies the same empirical method to security, where the adversary is a person with intent. In practice it maps to cloud security operations, compliance, and incident response.
Security teams traditionally work by stacking defenses: buy another product, add another rule. But the more controls you stack, the more complex the system gets, and the less anyone can say whether the whole set will fire in a specific situation. Worse, there is no feedback: once a detection rule is written, its first real test is a real attack, and failing that test costs you an actual breach.
The argument has three steps. ① In complex systems people will make mistakes (a wrong setting, a port left open), and no amount of training eliminates that. ② Attackers mostly don't take exotic routes; they pick this low-hanging fruit. ③ So defenders need a continuous feedback loop that actively and repeatedly confirms "when these common mistakes happen, we stop them, see them, and handle them." Without it, your security posture is a belief, not a measured fact.
The chapter's definition is roughly: security chaos engineering is the identification of security control failures through proactive experimentation, to build confidence in the system's ability to defend against malicious conditions. It asks a different question from a pen test:
It reuses the experiment skeleton from earlier chapters: define steady state → hypothesize → inject a condition → observe → fix and retest. Only the steady state changes, from "checkout success rate" to "what should be blocked is blocked, the alert fires within the agreed time, and the on-call person gets enough context."
The author puts security back inside the "complex systems" frame. Modern systems are stitched together from many microservices, cloud resources, and automation scripts; nobody holds the whole picture, and engineers make locally reasonable changes under time pressure. Misconfiguration is a natural by-product of the system running, not one person's negligence (the same line as Ch18's "human error is a symptom, not a root cause").
Two practices follow. First, remove the low-hanging fruit: attackers favor cheap entrances such as open ports, over-broad permissions, and public buckets, so confirm that these common mistakes get blocked or noticed the moment they appear, forcing attackers onto costlier paths. Second, close the feedback loop: security controls rot just like code, and the only way to keep knowing they are alive is to trigger them actively and repeatedly.
The chapter takes apart the limits of the two mainstream exercises:
They are not mutually exclusive: red teams excel at finding attack paths you never imagined; security chaos engineering excels at confirming that the paths you believe are covered really are.
Before automating, the author suggests starting with a security Game Day. The team picks a time, injects a security condition within a controlled scope (say, an unusual permission change), and watches the whole chain: does the alert fire, whose hands does it land in, can the on-call person read from the logs what happened, where, and how bad, and does the runbook work? Half the value is in technical controls and half in people and process: many incident responses fail not because there was no alert, but because the alert reached someone who couldn't act on it.
The chapter's worked example is ChaoSlingr, a security chaos framework for AWS that the author's team built and open-sourced at UnitedHealth Group. It is made of a few serverless functions: Generatr picks a target among resources explicitly tagged as opted in to experiments; Slingr performs the injection, and the signature experiment, PortSlingr, opens or closes a port on a security group that should not change; Trackr records each step of the experiment and sends notifications for later comparison.
The first results the author recounts are the "strange story" from the Simple view. The team assumed the firewall would detect and block the change every time; in fact it caught only about 60%. A cloud-native configuration management tool, not bought for security at all, caught it every time. And when the alert reached the SOC, the logs lacked the context to tell which account or system the event came from. None of the three findings is a "vulnerability"; all are failures of controls and process, exactly the kind that rarely shows up in a pen test report and hurts most in a real incident.
Two design details are worth keeping. First, explicit opt-in: experiments only touch tagged resources, which limits the blast radius and lets teams enroll themselves. Second, every experiment leaves a trail: Trackr makes each injection auditable, so a drill isn't mistaken for a real intrusion and the review afterward has data.
The central choice: are you asking "can an attacker get in?" or "do the controls I trust actually work?"
| Method | Question it answers | Frequency | Cost / limits |
|---|---|---|---|
| Pen test | Which exploitable weaknesses exist within the agreed scope | Typically one to a few times a year | Point-in-time; doesn't test detection or response |
| Red team | Can a realistic adversary reach a goal undetected | Rare, project-based | Expensive; win/lose framing breeds defensiveness, findings hard to act on |
| Purple team | Which attack techniques are visible, attackers and defenders together | Rare | Labor-intensive, limited coverage |
| Security Game Day | Can people and process take over an incident | Monthly / quarterly | Needs cross-team coordination; hard to scale |
| Security chaos experiment | When known common mistakes happen, do controls behave as hypothesized | Automated, continuous | Only tests conditions you thought of; production injection needs a tight scope |
In practice you also choose which layer to test first:
| Layer | Typical injection | What to watch | Common trap |
|---|---|---|---|
| Prevent | Open a port, loosen a permission policy | Is it blocked or auto-reverted | Assuming "we have a firewall" means "it always blocks" |
| Detect | Disable a log, make an unusual permission change | Does an alert fire, and how fast | The alert exists but lacks the context to locate the source |
| Respond | Game Day style simulated incident | Can on-call locate and contain it within the agreed time | Stale runbooks, missing access, no clear owner |
Rule of thumb: start with low-risk configuration experiments (ports, log switches) in non-production or explicitly opted-in resources, prove the stop / see / handle layers line up, then widen the scope; only move into production what has an automatic rollback behind it.
The cloud turned infrastructure into code: one API call opens a port or makes a bucket public. Change frequency went from quarterly to hourly, so the snapshot from the annual audit is stale the next day. That makes continuous control verification a necessity rather than a nicety, and it's why the chapter's tools target cloud configuration. When an interview or architecture review asks "how do you know your detection rules work?", the answer shouldn't be "we configured them" but "we regularly inject known events and have measured hit rate and time to locate."
Industry evidence
① Most security controls are first tested by a real attack, and failing that test costs a breach.
② Security chaos engineering finds failing controls through proactive experiments; the question is not "can they get in" but "do the controls work."
③ In complex systems misconfiguration is the norm; first confirm that low-hanging fruit gets blocked or seen the moment it appears.
④ Check the hypothesis at three layers: prevent (block / revert), detect (timely alert), respond (locatable, actionable).
⑤ Red teams chase wins, purple teams are costly and rare; security chaos is hypothesis-driven, automatable, continuous and blameless. All three complement each other.
⑥ Run people and process through a security Game Day first, then automate with tools.
⑦ ChaoSlingr / PortSlingr: firewall caught ~60%, config tool caught all, SOC lacked context. None is a vulnerability; all are control failures.
⑧ Design essentials: explicit opt-in to bound the blast radius, full trails to avoid misreads.
⑨ Traps: an alert is not successful detection; it can't cover unknown attack paths; use results for blame and the loop breaks.