<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Incident on tiago mendes</title>
    <link>https://tiago.mendes.im/tags/incident/</link>
    <description>Recent content in Incident on tiago mendes</description>
    <generator>Hugo -- 0.147.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 15 Dec 2024 10:00:00 +0000</lastBuildDate>
    <atom:link href="https://tiago.mendes.im/tags/incident/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The CrowdStrike Lesson</title>
      <link>https://tiago.mendes.im/posts/the-crowdstrike-lesson/</link>
      <pubDate>Sun, 15 Dec 2024 10:00:00 +0000</pubDate>
      <guid>https://tiago.mendes.im/posts/the-crowdstrike-lesson/</guid>
      <description>One vendor, one bad file, 8.5 million blue screens. What July 19th taught me about trusting the software that&amp;rsquo;s supposed to be protecting us.</description>
      <content:encoded><![CDATA[<p>Ok so, remember that Friday in July 2024 where half the internet basically just stopped for the day? Under the hood, CrowdStrike had pushed one broken file and taken down around 8.5 million Windows machines around the world. Around 4am UTC on the 19th they sent a routine update to their Falcon sensor (Falcon is their EDR, which is basically a souped-up antivirus that sits deep in the operating system and watches everything a computer is doing), and within minutes airlines couldn&rsquo;t fly, hospitals pushed back surgeries, 911 lines went quiet, TV channels went black. And nobody was attacking anything, the antivirus tripped over itself.</p>
<h1 id="ok-but-what-actually-broke">Ok but what actually broke</h1>
<p>Falcon ships with a kernel-mode driver, which is a fancy way of saying a piece of code that runs right next to the Windows kernel with full access to memory and hardware. EDRs need to live there because attackers often operate at that level too. That driver pulls in small configuration files called &ldquo;channel files&rdquo; constantly, little rule updates about new threats, and that morning one of them (<code>C-00000291</code>) shipped with malformed data inside. The driver tried to read a memory address it shouldn&rsquo;t have (an out-of-bounds read, in the jargon), and because kernel code runs in ring 0 (the most privileged level the CPU offers) there&rsquo;s no graceful &ldquo;oh well, that thread crashed&rdquo; fallback. When a ring-0 driver faults, the whole OS faults with it. Blue screen, reboot, load the same broken file, blue screen again.</p>
<p>Now picture that happening on thousands of machines at once inside an airport. The &ldquo;fix&rdquo; was that someone physically had to walk up to every single one, boot into safe mode, delete the file by hand, and reboot, because the driver loaded before Windows could even reach the network for a remote patch. You saw the consequences of that for days on the news: Delta staff scribbling flight info on whiteboards, gate screens stuck on blue, passengers camping out on terminal floors in Atlanta with handwritten boarding passes, radiology departments turning people away because the scanners wouldn&rsquo;t come back up.</p>
<p><img alt="Blue screens across the monitors at LaGuardia Airport during the outage" loading="lazy" src="/i1/CrowdStrike_BSOD_at_LGA.jpg">
<em>LaGuardia Airport, July 19th 2024. Photo: Smishra1, CC BY-SA 4.0 via Wikimedia Commons.</em></p>
<h1 id="the-awkward-bit">The awkward bit</h1>
<p>None of this was exotic. CrowdStrike isn&rsquo;t some sketchy vendor, they&rsquo;re one of the biggest names in the business, and Falcon is everywhere because it actually works well. The update pipeline did exactly what it was designed to do, which was take a signed, vendor-approved file and ship it to every sensor on the planet in a few minutes. Everything worked as intended, and that&rsquo;s kind of the uncomfortable part.</p>
<p>The thing that makes modern EDR useful (push fast, push everywhere, run in ring 0 because that&rsquo;s where the interesting stuff happens) is the same thing that turned one bad file into a worldwide outage. No attacker, no zero-day, nothing clever going on, just a signed update shipped at scale with nothing meaningful in the way of a circuit breaker.</p>
<h1 id="what-i-actually-took-from-it">What I actually took from it</h1>
<h2 id="your-security-tool-is-a-supply-chain-too">Your security tool is a supply chain too</h2>
<p>We spend a lot of time worrying about supply chain attacks, meaning malicious code slipped in through some dependency like a compromised npm package. We spend way less time worrying about supply chain <em>accidents</em>, where the code is fine, signed correctly, and just behaves badly anyway. From the customer&rsquo;s seat, the outcome is pretty much identical: the kernel still panics and the plane still doesn&rsquo;t move.</p>
<p>Any vendor that can auto-push code into ring 0 on every machine in your fleet is, by definition, a single point of failure for that fleet, and it&rsquo;s worth being honest about that rather than filing it under &ldquo;boring dependency.&rdquo;</p>
<h2 id="defense-in-depth-is-doing-more-lifting-than-it-can">&ldquo;Defense in depth&rdquo; is doing more lifting than it can</h2>
<p>Everyone says &ldquo;defense in depth&rdquo; like it&rsquo;s a magic phrase, but in practice most places run one EDR on every endpoint, from laptops to servers to point-of-sale machines. When that EDR breaks, there&rsquo;s no second layer underneath, the whole defensive stack goes with it. Real depth implies heterogeneity (different vendors for different tiers, or different OSes), and heterogeneity costs money and complexity that nobody volunteers for.</p>
<p>The outage didn&rsquo;t really punish companies for having bad security, it punished them for having the <em>same</em> security everywhere, which is a genuinely different problem.</p>
<h2 id="staged-rollouts-even-for-just-config">Staged rollouts, even for &ldquo;just config&rdquo;</h2>
<p>The detail from the post-mortem that really stuck with me was that the file went out to everyone at once. No ring deployment (shipping to 1% of machines first, then 10%, then the rest), no canary fleet, nothing. The reasoning was basically &ldquo;this is threat intelligence content, not code, content is low risk, threats move fast, we gotta ship fast.&rdquo; Which is also the exact reasoning that lets a broken file land on 8.5 million machines before anything can stop it.</p>
<p>The content-vs-code distinction is convenient for the vendor but doesn&rsquo;t give the customer any real safety. If a file can crash your kernel, it&rsquo;s code in every sense that matters, and it deserves the same care: canary deployments, ring rollouts, a rollback mechanism, a pause button customers can reach.</p>
<h2 id="the-recovery-plan-is-kinda-the-real-product">The recovery plan is kinda the real product</h2>
<p>Every vendor has an incident response plan. Almost nobody has one for the scenario where the vendor <em>is</em> the incident, and that&rsquo;s what separated the people who handled July 19th okay from the ones who didn&rsquo;t. The ones who did okay had thought about it ahead of time: Bitlocker recovery keys (which you need just to get into an encrypted Windows machine) stored somewhere reachable and not only on the servers that were also down; out-of-band management like IPMI or iLO to get into machines without the OS; runbooks written from the assumption that the security tool itself could be the thing breaking everything.</p>
<p>If your recovery plan quietly assumes your security vendor is healthy, it&rsquo;s less of a plan and more of an aspiration.</p>
<h1 id="what-i-keep-thinking-about">What I keep thinking about</h1>
<p>Security software earns its place by being trusted, privileged, and basically everywhere. You can&rsquo;t really design it any other way, an EDR that can&rsquo;t see inside the kernel can&rsquo;t catch an attacker who&rsquo;s operating in the kernel. But the flip side of &ldquo;trusted, privileged, everywhere&rdquo; is that one bad push from the vendor can become everybody&rsquo;s problem at the same moment.</p>
<p>CrowdStrike didn&rsquo;t teach me Falcon is bad, it isn&rsquo;t. What it reminded me of is that thinking about security software purely as a protector is only half the picture. It&rsquo;s also a dependency in the hard operational sense, sitting in the kernel with update access to thousands of machines, and a dependency that powerful needs to be treated as one, with some redundancy where you can afford it, some staged trust in the update pipeline, and an actual plan for the day something about it goes sideways.</p>
<p>One vendor shouldn&rsquo;t really be able to take down an airline, or a hospital, or someone&rsquo;s emergency line, and when it happens, honestly it&rsquo;s less about blaming CrowdStrike specifically and more about how we keep architecting systems in a way that lets one vendor have that kind of reach.</p>
<p>Anyway, maybe keep a Bitlocker key on paper somewhere :)</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
