<?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>Network-Pentest on Zero-Entry</title>
    <link>https://zero-entry.co.za/tags/network-pentest/</link>
    <description>Recent content in Network-Pentest on Zero-Entry</description>
    <image>
      <title>Zero-Entry</title>
      <url>https://zero-entry.co.za/images/about.jpg</url>
      <link>https://zero-entry.co.za/images/about.jpg</link>
    </image>
    <generator>Hugo -- 0.147.7</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 12 Jun 2026 07:25:21 +0200</lastBuildDate>
    <atom:link href="https://zero-entry.co.za/tags/network-pentest/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="the-patterns-underneath">The Patterns Underneath</h2>
<p>The field notes above are specific. Step back and the same three shapes keep appearing across otherwise unrelated environments. A control is present, it satisfies a diagram or an audit line, and it quietly does nothing under pressure. These are the patterns worth recognising before you find them.</p>
<h3 id="detection-without-response">Detection without response</h3>
<p>Detection promises visibility. Alerts come in, someone investigates, action is taken. It works for a while. Dashboards get checked, alerts get acknowledged, then the noise builds. False positives pile up. A day goes by without anyone looking, then two, and eventually nobody is sure who owns the dashboard.</p>
<p>At that point the alert that fires and the alert that does not fire produce the same outcome: nothing. An alert nobody investigates is a log entry, not a control. I have watched a Cowrie session persist for minutes on a box that was generating events the whole time, with the events landing in an index nobody queried. The data was perfect. The response was absent.</p>
<p>If you want to test this in your own environment, trigger something that should alert and time how long until a human acts. If the answer is &ldquo;never,&rdquo; the detection is theatre.</p>
<h3 id="authentication-with-escape-hatches">Authentication with escape hatches</h3>
<p>Strong authentication gets undermined at the exceptions, not the front door. Legacy devices that &ldquo;don&rsquo;t support it.&rdquo; Applications that need a compatibility mode. A temporary workaround that quietly becomes permanent. Then the choice problem: several authentication methods enabled at once for convenience, some far weaker than others, with the intention of resilience and the effect of dilution.</p>
<p>Attackers do not attack the strong path. They enumerate the methods on offer and use the weakest one you left enabled &ldquo;just in case.&rdquo; A tenant with phishing-resistant MFA on the primary flow and a legacy protocol still accepting a username and password is a tenant with no MFA, for anyone who bothers to ask the right endpoint which methods it supports.</p>
<p>The test: list every way to authenticate to a system, then rate the weakest one. That is your real authentication strength. The strongest path is irrelevant if a weaker one is still reachable.</p>
<h3 id="segmentation-without-isolation">Segmentation without isolation</h3>
<p>Segmentation looks clean in a diagram. Separate zones, tidy rulesets, clear boundaries. In practice the boundaries collapse at shared services. DNS, authentication, file shares, jump hosts, and management interfaces punch holes through supposedly isolated segments because something on one side needs something on the other. Rules get added to make a thing work, the isolation erodes a rule at a time, and nobody re-tests the boundary as a whole.</p>
<p>The network looks compartmentalised. When it matters, it routes like a flat one. This is the same failure as the multi-tenant routing in field note one, seen from the inside: &ldquo;internal&rdquo; and &ldquo;isolated&rdquo; are both routing decisions wearing a security costume.</p>
<p>The test: from a low-trust segment, see what you can actually reach. Not what the diagram says you should reach. What answers.</p>
<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>
