<?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>Security-Theatre on Zero-Entry</title>
    <link>https://zero-entry.co.za/tags/security-theatre/</link>
    <description>Recent content in Security-Theatre on Zero-Entry</description>
    <generator>Hugo -- 0.147.7</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 24 Apr 2026 14:26:40 +0400</lastBuildDate>
    <atom:link href="https://zero-entry.co.za/tags/security-theatre/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Security Theatre in Enterprise Networks</title>
      <link>https://zero-entry.co.za/posts/security-theatre-in-enterprise-networks/</link>
      <pubDate>Thu, 19 Feb 2026 19:00:00 +0200</pubDate>
      <guid>https://zero-entry.co.za/posts/security-theatre-in-enterprise-networks/</guid>
      <description>Why security controls that look good on paper often fail under basic adversarial pressure - field notes from real assessments.</description>
      <content:encoded><![CDATA[<blockquote>
<p>Disclaimer: The examples below are anonymised and aggregated across multiple engagements. The goal is to highlight recurring patterns, not embarrass any specific organisation.</p></blockquote>
<p><img loading="lazy" src="/images/Pasted%20image%2020260219201318.png"></p>
<h1 id="security-theatre-field-notes-from-the-inside">Security Theatre: Field Notes from the Inside</h1>
<h2 id="the-scene">The Scene</h2>
<p>Most environments I assess are not wide open. They have firewalls, policies, and controls that look sensible on a slide deck.</p>
<p>The same weaknesses keep showing up anyway. Security gets implemented as a compliance checklist rather than an adversarial system.</p>
<p>That is security theatre: controls that exist, but fail under pressure.</p>
<p>It shows up in small things (a forgotten hyperlink), legacy things (Telnet still running), and complex things (multi-tenant routing edge cases that quietly break the idea of &ldquo;internal&rdquo;).</p>
<p>Most incidents do not start with a zero-day. They start with an assumption.</p>
<h2 id="the-meaning">The Meaning</h2>
<p>Security theatre is security that only works from one angle.</p>
<ul>
<li>It satisfies an audit requirement</li>
<li>It meets a policy statement</li>
<li>It was set up once and never re-validated</li>
<li>It relies on &ldquo;internal trust&rdquo; as a boundary</li>
</ul>
<p>It fails the moment an attacker does basic due diligence.</p>
<h3 id="real-security-vs-theatre">Real Security vs Theatre</h3>
<table>
  <thead>
      <tr>
          <th>Real security</th>
          <th>Security theatre</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Tested adversarially</td>
          <td>Signed off administratively</td>
      </tr>
      <tr>
          <td>Assumes compromise is possible</td>
          <td>Assumes trust is default</td>
      </tr>
      <tr>
          <td>Measured continuously</td>
          <td>Configured once</td>
      </tr>
      <tr>
          <td>Has clear ownership</td>
          <td>&ldquo;Someone&rdquo; owns it</td>
      </tr>
      <tr>
          <td>Breaks safely</td>
          <td>Breaks silently</td>
      </tr>
  </tbody>
</table>
<h2 id="a-simple-test">A Simple Test</h2>
<p>Rate each control against three questions:</p>
<ol>
<li>Is it verified? Not configured, but tested.</li>
<li>Is it monitored? Will you know when it fails?</li>
<li>Is it owned? Is someone accountable for its health?</li>
</ol>
<p>Two &ldquo;no&rdquo; answers means you do not have a control.</p>
<h2 id="field-notes">Field Notes</h2>
<h3 id="1-internal-rfc1918-space-leaking-other-peoples-infrastructure">1. &ldquo;Internal&rdquo; RFC1918 Space Leaking Other People&rsquo;s Infrastructure</h3>
<p>On one client network, we found a large number of devices in the <code>172.30.x.x</code> and <code>172.31.x.x</code> ranges. Normal enough.</p>
<p>The exposed services were not normal:</p>
<ul>
<li>Cisco IOS devices presenting known vulnerabilities</li>
<li>OpenSSH issues flagged, including severe exposure classes</li>
<li>SNMP responding with default community strings (<code>public</code>)</li>
<li>Telnet open in cleartext</li>
</ul>
<p>When we pulled device information over SNMP, the fingerprints did not match the client&rsquo;s environment. The devices looked like other organisations&rsquo; routers, visible from within this client&rsquo;s own network.</p>
<p>Whether it was a provider-side forwarding mistake, a multi-tenant routing bleed, or a design choice nobody fully understood, the problem is the same:</p>
<blockquote>
<p>&ldquo;Internal&rdquo; is a routing decision, not a security boundary.</p></blockquote>
<p>A network can be &ldquo;private&rdquo; on paper while being multi-tenant in practice. Technically not the client&rsquo;s fault. Still their problem.</p>
<p>The pessimistic outlook: unintended trust paths, lateral movement opportunities, messy incident response (&ldquo;is that ours?&rdquo; becomes a real question), and reputational fallout if the client network becomes a stepping stone into someone else&rsquo;s infrastructure.</p>
<h3 id="2-monitoring-interfaces-that-become-management-interfaces">2. Monitoring Interfaces That Become Management Interfaces</h3>
<p>SNMP is often justified as &ldquo;monitoring only.&rdquo;</p>
<p>In practice it provides device names, interfaces, routing hints, OS and platform fingerprinting, uptime, load, and depending on configuration, more. When SNMPv2c is exposed with default communities, &ldquo;monitoring&rdquo; becomes enumeration on demand.</p>
<p>The control exists (&ldquo;we have monitoring&rdquo;), but the threat model is absent (&ldquo;monitoring endpoints are high-value targets&rdquo;).</p>
<p>What to do instead:</p>
<ul>
<li>SNMPv3 with auth and privacy where possible</li>
<li>Strict ACLs so only the monitoring system can reach SNMP</li>
<li>Remove default communities, remove write communities unless there is a hard requirement</li>
<li>Continuous checks for <code>public</code>/<code>private</code> drift</li>
</ul>
<h3 id="3-telnet-in-2026">3. Telnet in 2026</h3>
<p>Telnet still appears internally more often than people admit. Rarely a deliberate decision. More often a leftover: legacy device, a &ldquo;temporary&rdquo; troubleshooting session, vendor defaults, a project that ended but the port stayed open.</p>
<p>What to do:</p>
<ul>
<li>Disable Telnet everywhere, policy plus validation</li>
<li>If legacy hardware makes that impossible, isolate it and treat it as hostile</li>
<li>Enforce SSH and modern cipher suites for all management</li>
<li>Log and alert on any Telnet session as a high-signal event</li>
</ul>
<h3 id="4-the-easiest-brand-hijack-is-a-broken-hyperlink">4. The Easiest Brand Hijack Is a Broken Hyperlink</h3>
<p>One of the more sobering findings I have seen had no CVE attached.</p>
<p>A client website linked to their social media profiles. The X and Instagram links pointed to accounts that did not exist. We registered the usernames the website was implicitly endorsing.</p>
<p>Any visitor clicking those links landed on an attacker-controlled profile that looked official by association. I was, briefly, the client&rsquo;s new social media manager.</p>
<p>The organisation likely had solid perimeter controls. Their public brand identity had an unguarded back door.</p>
<p>What to do:</p>
<ul>
<li>Treat web presence as an asset inventory: domains, handles, app store listings</li>
<li>Reserve key usernames even on platforms you do not actively use</li>
<li>Run a quarterly external exposure review with marketing and security together</li>
<li>Add a brand protection checklist to release processes</li>
</ul>
<h3 id="5-hidden-ssids-and-other-comforting-myths">5. Hidden SSIDs and Other Comforting Myths</h3>
<p>I have assessed environments where the guest Wi-Fi was modern and well-configured (WPA3), additional SSIDs existed as &ldquo;hidden,&rdquo; and those SSIDs still covered public areas: roads, car parks, the perimeter.</p>
<p>Hidden SSIDs do not stop discovery. The tooling is trivial and takes minutes. They stop casual users from seeing the network in a dropdown list.</p>
<p>What to do:</p>
<ul>
<li>Remove unused SSIDs entirely</li>
<li>Prefer WPA3-Enterprise (EAP) where feasible</li>
<li>Segment wireless properly: guest is not corporate, corporate is not infrastructure</li>
<li>Validate coverage from outside the perimeter</li>
</ul>
<h3 id="6-medium-findings-that-do-not-feel-medium">6. &ldquo;Medium&rdquo; Findings That Do Not Feel Medium</h3>
<p>Scanner outputs create a predictable behaviour pattern. Critical gets attention, high gets scheduled, medium gets ignored, info gets laughed off.</p>
<p>Some medium findings describe classes of weakness that become severe with real-world conditions: SSH weaknesses that matter under MITM conditions, management interfaces with brute-force exposure, patch states that are &ldquo;mostly fine&rdquo; but leave a few critical paths open.</p>
<p>Severity is a starting hypothesis, not a verdict. Two mediums can combine into a critical.</p>
<p>Prioritise weaknesses that enable credential capture, management access, or trust boundary crossing regardless of how the scanner scored them.</p>
<h3 id="7-logs-exist-but-meaning-does-not">7. Logs Exist, but Meaning Does Not</h3>
<p>On the blue side, I often see logging enabled but not operationally useful.</p>
<p>Suricata is a good example. It can generate excellent visibility, but without a workflow it becomes noise. The questions that matter are: what are our top external destinations, which internal hosts talk to unusual places, and what changed since last week.</p>
<p>&ldquo;We have monitoring&rdquo; becomes a checkbox, and the logs do not get reviewed.</p>
<p>What to do:</p>
<ul>
<li>Build simple, repeatable queries that surface top talkers, new domains, and rare destinations</li>
<li>Baseline normal behaviour and alert on deviations</li>
<li>Assign ownership: someone reviews signals and acts on them</li>
</ul>
<h2 id="why-this-happens">Why This Happens</h2>
<p>Most security theatre comes from normal organisational pressure:</p>
<ul>
<li>Compliance is measurable; security is contextual</li>
<li>Change control is painful, so legacy stays</li>
<li>Ownership is fragmented, so controls drift</li>
<li>Teams are stretched, so verification falls away</li>
<li>Perimeters look strong, so internal trust grows by default</li>
</ul>
<p>More tools will not fix this. Verification, ownership, and feedback loops will.</p>
<h2 id="breaking-the-cycle">Breaking the Cycle</h2>
<p><strong>This week:</strong></p>
<ul>
<li>Kill Telnet wherever it exists</li>
<li>Remove default SNMP communities, lock SNMP behind ACLs</li>
<li>Inventory and reserve public brand assets</li>
<li>Delete unused SSIDs, validate coverage beyond the perimeter</li>
<li>Review private ranges for routing weirdness and unintended reachability</li>
</ul>
<p><strong>The structural fix:</strong> a control is not done when it is configured. It is done when it is verified with adversarial thinking, monitored for failure, and owned with accountability.</p>
<p>If you cannot answer &ldquo;who owns this control,&rdquo; it is theatre waiting to fail.</p>
<h2 id="the-end">The End</h2>
<p>Security is not the number of controls you can list. It is the number that survive contact with an adversary.</p>
<p>If your &ldquo;internal&rdquo; network is only secure because everyone agrees to behave, that is not a network. It is a trust exercise.</p>
<h2 id="appendix-how-screwed-am-i">Appendix: How Screwed Am I?</h2>
<p>If any of these are true, you are looking at theatre:</p>
<ul>
<li>&ldquo;It&rsquo;s fine because it&rsquo;s internal&rdquo;</li>
<li>&ldquo;We enabled logging&rdquo; (but nobody reviews it)</li>
<li>&ldquo;We use SNMP for monitoring&rdquo; (but it&rsquo;s v2c and broadly reachable)</li>
<li>&ldquo;It&rsquo;s hidden&rdquo; (SSIDs, panels, directories)</li>
<li>&ldquo;We patched most of it&rdquo;</li>
<li>&ldquo;That&rsquo;s only a medium&rdquo;</li>
<li>&ldquo;We don&rsquo;t know who owns it&rdquo;</li>
</ul>
<p>Hunt the assumptions, not just the CVEs.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
