<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
  <channel>
    <title>Censys</title>
    <link>https://censys.com/</link>
    <description>The Authority for Internet Intelligence and Insights</description>
    <language>en-US</language>
    <lastBuildDate>Thu, 18 Jun 2026 12:14:09 +0000</lastBuildDate>
    <generator>https://wordpress.org/?v=6.9.4</generator>
    <atom:link href="https://censys.com/feed/" rel="self" type="application/rss+xml">
    </atom:link>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <sy:updateBase>1970-01-01T00:00+00:00</sy:updateBase>
    <item>
      <title>AdaptixC2: Fingerprinting an Open-Source C2 Framework at Scale</title>
      <link>https://censys.com/blog/adaptixc2-open-source-c2-framework/</link>
      <description><![CDATA[<p>Executive Summary AdaptixC2 is an open-source post-exploitation framework with a default configuration that makes deployed servers trivially identifiable from passive scanning. As of 11 June 2026, Censys tracks 390 web properties — each a distinct IP or hostname and port pair — across 217 hosts running AdaptixC2 with default or near-default settings. This includes three [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/adaptixc2-open-source-c2-framework/">AdaptixC2: Fingerprinting an Open-Source C2 Framework at Scale</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>C2</category>
      <category>Research</category>
      <category>Threat Intelligence</category>
      <guid isPermaLink="false">https://censys.com/?p=9821</guid>
      <pubDate>Wed, 17 Jun 2026 16:31:14 +0000</pubDate>
      <content:encoded><![CDATA[<h2 class="wp-block-heading" id="Executive-Summary">Executive Summary</h2>



<ul class="wp-block-list">
<li>AdaptixC2 is an open-source post-exploitation C2 framework whose default configuration ships branded HTTP headers (<code>Server: AdaptixC2, Adaptix-Version: v1.2</code>) on every unauthenticated request, making deployed servers trivially identifiable from passive scanning.</li>



<li>As of 16 June 2026, Censys tracks 412 web properties across 236 hosts running AdaptixC2 with default or near-default settings.</li>



<li>Three beacon listener clusters (Hivelocity, M247, PSB Hosting) – each spanning multiple IPs across adjacent subnets with identical default TLS certificates – suggest individual operators running coordinated, redundant callback infrastructure.</li>



<li>One host (<code>2.26.229[.]254</code>) was actively serving payloads, including a Linux installer with 12 persistence mechanisms and Russian-language comments.</li>



<li>Operators who modify the <code>Server</code> header to evade detection leave the default 404 page body intact. Querying on both signals catches this class of evasion.</li>



<li>All detections are available in Censys via the <a href="https://platform.censys.io/explore/threats/THREAT-0210">THREAT-0210</a> threat label.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>AdaptixC2 is an open-source post-exploitation framework with a default configuration that makes deployed servers trivially identifiable from passive scanning. As of 11 June 2026, Censys tracks 390 web properties — each a distinct IP or hostname and port pair — across 217 hosts running AdaptixC2 with default or near-default settings. This includes three distinct beacon-listener clusters that suggest coordinated multi-server deployments and one host serving implants from an open directory. The framework ships branded HTTP headers on every unauthenticated request, so the first passive probe identifies the framework without authentication or endpoint knowledge.</p>



<p>Not all of these hosts represent malicious activity. Some are almost certainly authorized red team infrastructure. What we can say from passive scanning is that the infrastructure exists, it’s detectable, and defenders who understand the fingerprint can make informed decisions about what to block or monitor.</p>



<h2 class="wp-block-heading" id="What-Is-AdaptixC2?">What Is AdaptixC2?</h2>



<p>Post-exploitation frameworks provide the tooling operators use after gaining an initial foothold: maintaining access, running commands, moving laterally, and collecting data from compromised systems.</p>



<p>AdaptixC2 is a publicly available post-exploitation framework written in Go (teamserver) and C++/Qt (GUI client). It’s designed for red team engagements, though like most offensive frameworks it sees use in unauthorized operations as well. The project is at v1.2 and has less public analysis coverage than older frameworks like <a href="https://censys.com/blog/recap-of-a-suspicious-surge-in-cobalt-strike/">Cobalt Strike</a>, Havoc, or Sliver.</p>



<p>The framework ships two agent families. In C2 terminology, an agent is an implant that runs on a compromised host and checks in with the operator for tasking, not an AI agent. The Beacon agent is a C++ implant supporting Beacon Object File (BOF) execution on Windows, Linux, and macOS; the Gopher agent is a Go implant with async BOF support across the same platforms. The framework implements listeners as loadable plugins (“extenders”) covering HTTP/S, DNS/DoH, SMB named pipes, and raw TCP transports. The teamserver exposes a full REST and WebSocket API for operator control — credential management, agent tasking, screenshot capture, tunnel management, and multi-operator collaboration.</p>



<p>What makes AdaptixC2 detectable at scale is a design choice in <code>profile.yaml:</code> the error block sets <code>Server: AdaptixC2 </code>and <code>Adaptix-Version: v1.2</code> on every unmatched route. They appear on any request that doesn’t match the configured endpoint — no authentication required, no prior knowledge of the endpoint path needed. Passive scanners see the banner on the first probe.</p>



<h2 class="wp-block-heading" id="Architecture">Architecture</h2>



<h3 class="wp-block-heading">Teamserver</h3>



<p>The teamserver is a single Go binary. At startup it loads <code>profile.yaml</code> to configure the network interface, port, endpoint path, password, and HTTP response behavior. It then generates or loads a self-signed TLS certificate, loads extender plugins from disk, starts an HTTPS server via gin, and restores state from a SQLite database.</p>



<p>The router hierarchy in <code>connector.go</code> defines four distinct groups under the configured endpoint (default <code>/endpoint</code>):</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="1294" height="796" src="https://censys.com/wp-content/uploads/adaptixc2_teamserver_endpoints.png" alt="" class="wp-image-9832"/></figure>



<p>Anything outside the <code>/endpoint</code> prefix, and any path under /endpoint that isn’t registered, hits the <code>NoRoute</code> handler, which returns the configured error response — the 404 page with the branded headers.</p>



<h3 class="wp-block-heading">Authentication Model</h3>



<p>Authentication is two-tier. The <code>/login</code> endpoint takes a JSON body with a username and password and returns a short-lived JWT access token (12 hours) and a long-lived refresh token (168 hours, or seven days). Each startup generates fresh JWT signing keys via <code>crypto/rand</code> and signs tokens with HS256.</p>



<p>OTP tokens gate WebSocket upgrades and one-time file transfers. An authenticated operator calls <code>/otp/generate</code> with a JWT access token to create a 64-character hex OTP. These tokens are single-use — calling the corresponding endpoint twice with the same token fails.</p>



<h3 class="wp-block-heading">Extender System</h3>



<p>Listeners compile to Go shared libraries (<code>.so</code> files) that load at runtime. When a listener starts, it can register routes on either the <code>api_group</code> (JWT-protected) or the <code>public_group</code> (unauthenticated). This is the correct design for agent callbacks — agents don’t carry operator credentials, so their check-in endpoints can’t require JWT auth.</p>



<p>In practice, the HTTP beacon listener (BeaconHTTP extender) doesn’t use the teamserver’s public endpoint group at all. It starts its own separate HTTP server on the operator-configured callback port, independent of the teamserver:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1582" height="648" src="https://censys.com/wp-content/uploads/adaptix_c2_start_teamserver.png" alt="" class="wp-image-9833"/></figure>



<p>This is why the Censys scan finds two distinct populations — teamservers (typically port <code>4321</code>, operator API) and beacon listeners (high ports like <code>43211</code>, agent callbacks). Both surfaces return the default 404 page, but they serve different purposes.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="1169" height="521" src="https://censys.com/wp-content/uploads/image-142.png" alt="" class="wp-image-9824"/></figure>



<h2 class="wp-block-heading" id="The-Fingerprint">The Fingerprint</h2>



<p>Detection relies on two independent signals from the default configuration, both visible without authentication.</p>



<p><strong>The headers.</strong> The default <code>profile.yaml</code> sets these headers in <code>HttpServer.error.headers</code>:</p>



<pre class="wp-block-code"><code>HttpServer:
  error:
    status: 404
    headers:
      Content-Type: "text/html; charset=UTF-8"
      Server: "AdaptixC2"
      Adaptix-Version: "v1.2"
    page: "404page.html"</code></pre>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="775" height="324" src="https://censys.com/wp-content/uploads/image-146.png" alt="" class="wp-image-9840" style="aspect-ratio:2.3920906679527367;width:775px;height:auto"/></figure>



<p>Because this is the error handler, not a specific route, these headers appear on any path that doesn’t match the configured endpoint. Even when an operator uses the default <code>/endpoint</code> path, API access still requires a valid JWT. But any request to <code>/</code>, <code>/robots.txt</code>, <code>/favicon.ico</code>, or any arbitrary path returns a 404 with <code>Server: AdaptixC2</code> in the response.</p>



<p><strong>The 404 body.</strong> The default <code>404page.html</code> contains:</p>



<pre class="wp-block-code"><code>&lt;h1>AdaptixC2 404&lt;/h1>
&lt;p>You need to enter the correct connection details.&lt;/p>
</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="695" height="378" src="https://censys.com/wp-content/uploads/image-145.png" alt="" class="wp-image-9827"/></figure>



<p>This string is specific enough to use as a standalone indicator when an operator has changed the response headers.</p>



<p><strong>Combined query:</strong></p>



<p><code>host.services.endpoints.http.headers: (key: "server" and value: "AdaptixC2") or host.services.endpoints.http.headers: (key: "adaptix-version" and value: "v1.2")</code></p>



<div id="censys-title-with-content-block_28256d2a02418cbe51b821deda92379b" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Follow Along in Censys</h3>
                    </div>
                            </div>
        </div>
       
                                            <div class="button-wrapper">
                    <a href="https://platform.censys.io/search?q=host.services.endpoints.http.headers%3A+%28key%3A+%22server%22+and+value%3A+%22AdaptixC2%22%29+or+host.services.endpoints.http.headers%3A+%28key%3A+%22adaptix-version%22+and+value%3A+%22v1.2%22%29" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" target="_blank" rel="nofollow">
                        <span class="avia_iconbox_title">View Current Results</span>
                    </a>
                </div>
                        </div>
</div>


<p><strong>Body-only fallback (catches header-modified deployments):</strong></p>



<p><code>host.services.endpoints.http.body: "You need to enter the correct connection details."</code></p>



<p><strong>DNS listener (tertiary signal).</strong> The BeaconDNS extender sets <code>AA=true</code> on every response and returns <code>TXT "OK"</code> for any query that doesn’t match its beacon protocol format — specifically, any query with fewer than five labels. Censys captures this as a DNS service with <code>version: "OK"</code> on UDP/53.</p>



<p><code>host.services.dns.version: "OK" and host.services.protocol = "DNS"</code></p>



<p>This query returns around 30 hosts globally. Most are legitimate DNS servers hiding their BIND version with a custom string, so the signal needs cross-referencing, either against the <code>Adaptix C2</code> threat label or via active probe. Querying a random short hostname returns <code>TXT "OK"</code> (what Censys captures), while a query formatted as a beacon-check-in (five or more dot-separated labels in the BeaconDNS protocol format) returns <code>A 127.0.0.1</code> on a genuine listener. Default TTLs jitter between 10 and 70 seconds). On hosts that aren’t running BeaconHTTP, this is the only passive signal.</p>



<h2 class="wp-block-heading" id="Discovery">Discovery</h2>



<p>We started from the source code. AdaptixC2’s <code>profile.yaml</code> and <code>404page.html</code> are both in the public GitHub repository — the fingerprint follows directly from reading them, no prior infrastructure exposure needed. We confirmed the expected headers against live deployments and ran both queries against Censys.</p>



<p>The combined scan returned 236 unique hosts. The default configuration is explicit enough that a single query captures most of the population. The harder work was making sense of what those hosts represent.</p>



<h2 class="wp-block-heading" id="Censys-ARC-Perspective">Censys ARC Perspective</h2>



<p>The hosts break down across a range of ASNs and geographies, with clustering that suggests organized deployment.</p>



<h3 class="wp-block-heading">Port Distribution</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Port</strong></td><td><strong>Count</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>4321</code></td><td>46</td><td>Default teamserver port</td></tr><tr><td><code>43211</code></td><td>15</td><td>Common beacon listener port</td></tr><tr><td><code>8080</code> / <code>8443</code> / <code>8989</code></td><td>~3 each</td><td>Non-default teamserver ports</td></tr><tr><td>Various (<code>1337</code>, <code>9999</code>, <code>8562</code>, etc.)</td><td>50+</td><td>Operators choosing non-standard ports</td></tr></tbody></table></figure>



<p>The 46 hits on port <code>4321</code> confirm that many operators deploy with the default configuration and leave the port unchanged. The 15 hits on <code>43211</code> concentrate in two of the three beacon listener clusters described below.</p>



<h3 class="wp-block-heading">Top ASNs</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>ASN</strong></td><td><strong>Name</strong></td><td><strong>Hosts</strong></td><td><strong>Notes</strong></td></tr><tr><td>AS29802</td><td>HVC-AS (Hivelocity)</td><td>13</td><td>Beacon listener cluster; multiple active AdaptixC2 servers observed across <code>23.227.203.0/24</code>, <code>46.21.153.0/24</code></td></tr><tr><td>AS9009</td><td>M247</td><td>9</td><td>Beacon listener cluster; <code>38.132.122.x</code>, <code>146.70.87.x</code></td></tr><tr><td>AS132203</td><td>Tencent</td><td>7</td><td>Port <code>4321</code>; servers hosted in HK and CN Tencent Cloud regions</td></tr><tr><td>AS9081</td><td>PSB Hosting</td><td>6</td><td>Beacon listener cluster; <code>45.155.69.x</code>, </td></tr><tr><td>AS20473</td><td>Vultr</td><td>5</td><td>Geographically spread</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Geographic Distribution</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Country</strong></td><td><strong>Hosts</strong></td></tr><tr><td>US</td><td>38</td></tr><tr><td>HK</td><td>18</td></tr><tr><td>CN</td><td>14</td></tr><tr><td>NL</td><td>12</td></tr><tr><td>SG</td><td>8</td></tr><tr><td>DE</td><td>8</td></tr><tr><td>FR</td><td>5</td></tr><tr><td>RU</td><td>3</td></tr></tbody></table></figure>



<p>The US count is high partly because Hivelocity is a US-based provider, and those hosts are almost certainly beacon listeners rather than teamservers. The Hong Kong and China hosts cluster on Tencent Cloud, consistent with East Asia-based operators or operators targeting that region.</p>



<h3 class="wp-block-heading">Notable Hosts</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>IP</strong></td><td><strong>Port</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>185.190.142[.]66</code></td><td><code>4321</code></td><td>Contabo FR; RDP (<code>3389</code>) also open; certificate <code>O=OpenClaw</code> on port <code>443</code></td></tr><tr><td><code>89.125.255[.]29</code></td><td><code>4321</code></td><td>RoyaleHosting NL; self-signed certificate with <code>C=RU</code>, <code>ST=as</code>, <code>O=as</code></td></tr><tr><td><code>38.147.173[.]24</code></td><td><code>8562</code></td><td>Lucidacloud HK; port <code>50050</code> also open</td></tr><tr><td><code>156.225.22[.]201</code></td><td><code>1337</code></td><td>cognetcloud HK; non-standard port</td></tr><tr><td><code>202.95.8[.]92 / .97 / .98</code></td><td><code>4321</code></td><td>CTG Server HK; three sequential IPs</td></tr></tbody></table></figure>



<p>The cert on <code>89.125.255[.]29</code> stands out: <code>C=RU, ST=as, O=as</code> — “as” filled in twice when prompted for state and organization. <code>185.190.142[.]66</code> has both AdaptixC2 on port <code>4321</code> and RDP open on <code>3389</code>, which suggests an operator working directly on the teamserver box rather than managing it remotely through a jump host.</p>



<p><code>38.147.173[.]24</code> runs AdaptixC2 on port <code>8562</code> and also has port <code>50050</code> open. Port <code>50050</code> is the default Cobalt Strike teamserver port. We can’t confirm from a passive scan that a live Cobalt Strike instance is present — port <code>50050</code> could be in use for something else, or the process may not be running at scan time. The combination suggests an operator working with multiple offensive tools.</p>



<h2 class="wp-block-heading" id="Infrastructure-Clusters">Infrastructure Clusters</h2>



<p>The most informative finding from the Censys scan isn’t the individual hosts — it’s three beacon listener clusters that likely represent single operators running multiple callback servers.</p>



<p>These are beacon listeners, not teamservers. A teamserver needs to be reachable by the operator for API access — typically a single port on a fixed IP. A beacon listener only needs to be reachable by agents on compromised hosts. Operators often run multiple beacon listeners across different providers, ports, and geographies for redundancy and to complicate takedown. Shared TLS certificate patterns tie these clusters together.</p>



<ul class="wp-block-list">
<li><strong>Hivelocity cluster.</strong> Eight or more IPs across two subnets (<code>23.227.203.0/24</code> and <code>46.21.153.0/24</code>) all serving the AdaptixC2 404 page on randomized high ports (<code>42215</code>, <code>42235</code>, <code>43211</code>, <code>43435</code>, <code>43655</code>). Every host in this cluster uses the default OpenSSL self-signed certificate: <code>C=AU, ST=Some-State, O=Internet Widgits Pty Ltd</code>. That certificate is what OpenSSL generates when you run <code>openssl req</code> and accept all defaults. Its presence across eight IPs on two adjacent subnets from the same provider strongly suggests a single operator who stood up a batch of callback servers without customizing the TLS configuration.</li>



<li><strong>M247 cluster.</strong> Eight IPs across two subnets (<code>38.132.122.x</code> and <code>146.70.87.x</code>), almost all on port <code>43211</code>. Same default OpenSSL certificate as the Hivelocity cluster. M247 is a popular choice for red team and grey-area infrastructure. The shared port and shared cert pattern point to the same operator or the same deployment tooling.</li>



<li><strong>PSB Hosting cluster.</strong> Six IPs across two subnets (<code>45.155.69.x</code> and <code>185.242.245.x</code>) on randomized ports in the <code>42xxx</code>–<code>44xxx</code> range. Smaller than the other two clusters but the same behavioral signature: adjacent IPs, randomized high ports, default cert.</li>
</ul>



<p>The sequential or near-sequential IP allocation within each cluster suggests these were provisioned at the same time, probably from the same provider account. Operators who spin up beacon listeners in bulk tend to take consecutive IPs because that’s what you get when you order multiple VMs in the same region in the same session. Whether any of these are authorized engagements, passive scanning can’t say — the clustering pattern describes how the infrastructure was built, not what it was used for.</p>



<h2 class="wp-block-heading" id="A-Live-Deployment">A Live Deployment: 2.26.229[.]254</h2>



<p>The clearest evidence of an active operation in this dataset is <code>2.26.229[.]254</code>. It ran AdaptixC2 listeners on ports <code>4433</code> (BeaconHTTP) and <code>4455</code> (GopherTCP) and simultaneously served payloads over an open HTTP directory on port <code>7000</code>. No authentication required — the files were publicly accessible to anyone who connected.</p>



<h3 class="wp-block-heading">Payloads</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Filename</strong></td><td><strong>SHA256</strong></td><td><strong>Type</strong></td></tr><tr><td><code>install.sh</code></td><td><code>479b7abd5df2f6ab3de8c32a36478c15012dbc8217f9fa825fd4b9cb7e9b8d13</code></td><td>Linux persistence installer</td></tr><tr><td><code>timesync.bin</code></td><td><code>fb1f4f5a4ef76960577462634f4a104fb307e161fc2791b9231a07a2c751beca</code></td><td>Gopher agent (ELF x64)</td></tr><tr><td><code>svhost.exe</code></td><td><code>06b13dfd84493b01a020eecdabff6308b5b790ed4cd4c7a96a30ae6be1ca325d</code></td><td>Beacon (Windows x64)</td></tr><tr><td><code>svc_timesync.x64.exe</code></td><td><code>7d35d687ae8d4056e394905e9f8962512e6d55ff98664ed1facee6554a565624</code></td><td>Beacon (Windows x64)</td></tr><tr><td><code>agent.x86.exe</code></td><td><code>51fba778dae6f108f7afa800bdb7745e6a0f6d2630a37ecc84c1d4a1609f9692</code></td><td>Beacon (Windows x86)</td></tr></tbody></table></figure>



<p><code>timesync.bin</code> is a Gopher agent (ELF x64) for Linux. The three <code>.exe</code> files are Windows Beacon implants in both x64 and x86 variants. A legitimate <code>VC_redist.x86.exe</code> was also present, likely as a runtime dependency.</p>



<h3 class="wp-block-heading">install.sh: Linux Persistence Installer</h3>



<p>The installer presents itself as a routine package update — fake <code>apt</code> output, fake kernel unpacking — while running the actual installation in a background subshell. Russian-language comments throughout the script indicate the author’s working language. It deploys <code>timesync.bin</code> to <code>/usr/local/lib/systemd/timesync </code>and establishes 12 independent persistence mechanisms before shredding itself.</p>



<ol class="wp-block-list">
<li><strong>Hidden user</strong> — creates <code>systemd-timesync</code> (UID 9999) with a random password and a hardcoded operator SSH key in <code>authorized_keys</code>. SSH access survives agent removal.</li>



<li><strong>Fake systemd service</strong> — overwrites <code>systemd-timesyncd.service</code> to execute the beacon, masquerading as the NTP sync daemon.</li>



<li><strong>Three cron jobs</strong> at 5-minute, 10-minute, and 15-minute intervals across separate crontab locations. Any one survivor restarts the agent.</li>



<li><strong>Initramfs hook</strong> — drops a script into <code>/etc/initramfs-tools/scripts/init-premount/</code> and rebuilds the initrd via <code>update-initramfs</code>. The agent runs before the root filesystem mounts.</li>



<li><strong>GRUB init replacement</strong> — appends <code>init=/usr/local/lib/systemd/systemd-persistence.sh</code> to <code>GRUB_CMDLINE_LINUX_DEFAULT</code> and rebuilds <code>grub.cfg.</code> The kernel hands PID 1 to the attacker’s script instead of systemd on next boot. This survives service removal, cron purges, and user deletion.</li>



<li><strong>LD_PRELOAD library</strong> — writes and compiles <code>libsystemd-override.so</code>, registered in <code>/etc/ld.so.preload</code>. A GCC constructor causes every dynamically linked process to fork and exec the beacon. Removing the binary alone is not sufficient.</li>



<li><strong>Kernel thread masquerading</strong> — two beacon instances launched as <code>[kworker/0:0]</code> and <code>[kthreadd]</code> via <code>exec -a</code>, blending into kernel thread entries in ps output.</li>



<li><strong>Integrity monitor</strong> — <code>monitor.sh</code> running as <code>[kworker/u:0]</code>, checking every 60 seconds and re-downloading the agent from <code>hxxp://2.26.229[.]254:7000/timesync.bin</code> if it’s absent.</li>



<li><strong>Shell profile injection</strong> — appends agent launch to <code>.bashrc</code> and <code>.profile</code> for every user in <code>/home/*</code> and root.</li>



<li><strong>DNS hijacking</strong> — sets <code>2.26.229[.]254</code> as the primary <code>systemd-resolved</code> DNS server. All DNS queries route through the C2 host.</li>



<li><strong>eBPF hook</strong> — if <code>bpftool</code> is present, loads a kprobe on <code>sys_getdents64</code> returning 0, attempting to hide processes from directory listings.</li>



<li><strong>Systemd timer</strong> — <code>systemd-timesync.timer</code> firing two minutes after boot and every 10 minutes thereafter.</li>
</ol>



<p>Cleanup: zeroes all files under <code>/var/log</code>, clears bash history, and shreds the installer with <code>shred -u</code>.</p>



<p>The combination of GRUB init replacement and LD_PRELOAD means the implant survives most detection-and-removal workflows short of a full OS reinstall. The eBPF hook — loading a kprobe on <code>sys_getdents64</code> to zero out process directory entries — aims to make running processes invisible to standard userspace tools, adding a kernel-level hiding layer on top of the process name masquerading in items 7 and 9.</p>



<h3 class="wp-block-heading">Beacon Config (Extracted via Static Analysis)</h3>



<p>The Agents section below covers config extraction from Windows beacon binaries. The three <code>.exe</code> samples from <code>2.26.229[.]254 </code>all call back to the same listener:</p>



<ul class="wp-block-list">
<li><strong>C2:</strong> <code>hxxp://2.26.229[.]254:4433</code></li>



<li><strong>Callback URIs:</strong> <code>/api/v1/status</code>, <code>/updates/check.php</code>, <code>/content.html</code></li>



<li><strong>Custom header:</strong> <code>X-ISS</code></li>



<li><strong>User-Agent:</strong> <code>Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20121202 Firefox/20.0</code></li>



<li><strong>RC4 key:</strong> <code>1baccab4cbd2b84f6bc54bf8e6551f93</code></li>



<li><strong>Sleep:</strong> 10 seconds</li>
</ul>



<h2 class="wp-block-heading" id="The-API-Surface">The API Surface</h2>



<p>The teamserver’s REST API is spelled out in <code>server.go</code> and <code>connector.go</code>. Here’s what’s behind it.</p>



<p>The authentication flow:</p>



<ol class="wp-block-list">
<li>Operator calls <code>POST /endpoint/login</code> with a JSON credential body. Server returns access token (12hr) and refresh token (168hr).</li>



<li>Operator attaches the access token as <code>Authorization: Bearer &lt;token></code> on all subsequent requests.</li>



<li>Before opening a WebSocket channel, operator calls <code>POST /endpoint/otp/generate</code> to get a one-time token, then upgrades via GET <code>/endpoint/connect?otp=&lt;token></code>.</li>



<li>Expired access tokens are refreshed via <code>POST /endpoint/refresh</code> with the refresh token.</li>
</ol>



<p><strong>Authentication and session:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Endpoint</strong></td><td><strong>Method</strong></td><td><strong>Auth</strong></td><td><strong>Purpose</strong></td></tr><tr><td><code>/login</code></td><td>POST</td><td>None</td><td>Issue access and refresh tokens</td></tr><tr><td><code>/refresh</code></td><td>POST</td><td>None</td><td>Rotate access token using refresh token</td></tr><tr><td><code>/otp/generate</code></td><td>POST</td><td>JWT</td><td>Generate OTP for WebSocket or file transfer</td></tr><tr><td><code>/otp/upload/temp</code></td><td>POST</td><td>OTP</td><td>Upload a file for agent tasking</td></tr><tr><td><code>/otp/download/sync</code></td><td>GET</td><td>OTP</td><td>Download a file from the server</td></tr><tr><td><code>/connect</code></td><td>GET (WS)</td><td>OTP</td><td>Open operator WebSocket channel</td></tr><tr><td><code>/channel</code></td><td>GET (WS)</td><td>OTP</td><td>Open secondary channel (terminal/build/tunnel)</td></tr><tr><td><code>/sync</code></td><td>POST</td><td>JWT</td><td>Synchronize state for a connecting operator</td></tr></tbody></table></figure>



<p><strong>Agents and tasks:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Endpoint</strong></td><td><strong>Method</strong></td><td><strong>Purpose</strong></td></tr><tr><td><code>/agent/list</code></td><td>GET</td><td>List all registered agents</td></tr><tr><td><code>/agent/generate</code></td><td>POST</td><td>Build and return an implant binary</td></tr><tr><td><code>/agent/command/execute</code></td><td>POST</td><td>Issue a command to an agent</td></tr><tr><td><code>/agent/command/raw</code></td><td>POST</td><td>Send raw task payload</td></tr><tr><td><code>/agent/command/file</code></td><td>POST</td><td>Upload a file for agent tasking</td></tr><tr><td><code>/agent/task/list</code></td><td>GET</td><td>List completed tasks</td></tr><tr><td><code>/agent/task/cancel</code></td><td>POST</td><td>Cancel a pending task</td></tr></tbody></table></figure>



<p><strong>Infrastructure and collection:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Endpoint</strong></td><td><strong>Method</strong></td><td><strong>Purpose</strong></td></tr><tr><td><code>/listener/create</code></td><td>POST</td><td>Start a new listener</td></tr><tr><td><code>/listener/list</code></td><td>GET</td><td>List all configured listeners</td></tr><tr><td><code>/creds/list</code></td><td>GET</td><td>List harvested credentials</td></tr><tr><td><code>/creds/add</code></td><td>POST</td><td>Add credential entries</td></tr><tr><td><code>/screen/list</code></td><td>GET</td><td>List captured screenshots</td></tr><tr><td><code>/screen/image</code></td><td>GET</td><td>Retrieve a screenshot image</td></tr><tr><td><code>/tunnel/start/socks5</code></td><td>POST</td><td>Start a SOCKS5 proxy tunnel</td></tr><tr><td><code>/tunnel/start/lportfwd</code></td><td>POST</td><td>Start a local port forward</td></tr><tr><td><code>/download/list</code></td><td>GET</td><td>List files pulled from agents</td></tr><tr><td><code>/targets/list</code></td><td>GET</td><td>List tracked target hosts</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="What-Is-and-Isn’t-Exposed-Without-Authentication">What Is and Isn’t Exposed Without Authentication</h2>



<p>The teamserver management API is reasonably secured when the password is set correctly. The unauthenticated surface on the teamserver port is limited:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Endpoint</strong></td><td><strong>Auth</strong></td><td><strong>What it exposes</strong></td></tr><tr><td><code>ANY /&lt;path></code></td><td>None</td><td><code>Server: AdaptixC2</code> and <code>Adaptix-Version: v1.2</code> in headers; 404 body with branding</td></tr><tr><td><code>POST /endpoint/login</code></td><td>None</td><td>Returns tokens if password correct; 404 otherwise</td></tr><tr><td><code>POST /endpoint/refresh</code></td><td>None</td><td>Returns new access token if refresh token valid; 404 otherwise</td></tr></tbody></table></figure>



<p>All 50+ data endpoints require a valid JWT access token. There’s no unauthenticated path to agent lists, credentials, screenshots, downloads, or operator sessions through the teamserver API.</p>



<p>The OTP-gated endpoints (<code>/connect</code>, <code>/channel</code>, <code>/otp/upload/temp</code>, <code>/otp/download/sync</code>) require a valid OTP generated by an authenticated operator. OTP tokens are single-use and expire quickly.</p>



<h3 class="wp-block-heading">Error Response Behavior</h3>



<p>Failed authentication attempts — wrong password, missing token, expired token — all return HTTP 404 with the same <code>Server: AdaptixC2</code> branded response. The server doesn’t distinguish between “wrong password” and “path doesn’t exist” in its response to the client. This is intentional: it prevents an attacker from confirming which endpoint paths are valid by observing different status codes.</p>



<p>The side effect is that the <code>Server: AdaptixC2</code> header appears on every response, including failed auth attempts. An attacker probing the server learns the framework identity from the first probe, before making any authentication attempts.</p>



<h2 class="wp-block-heading" id="Agents">Agents</h2>



<p>AdaptixC2 ships two distinct agent families.</p>



<p><strong>Beacon</strong> is a C++ implant targeting Windows, Linux, and macOS. Its primary capability beyond standard C2 tasks is BOF (Beacon Object File) execution — a technique popularized by Cobalt Strike that lets operators run compiled C code in-process without touching disk. This makes Beacon harder to detect for endpoint tools focused on child process creation. The default watermark embedded in <code>config.yaml</code> is <code>be4c0149</code>.</p>



<p>Beacon supports multiple transport protocols through its extender system:</p>



<ul class="wp-block-list">
<li><strong>BeaconHTTP</strong>: HTTP/S callback with configurable URIs, headers, and User-Agent rotation</li>



<li><strong>BeaconDNS</strong>: DNS-based callback channel. The listener replies with <code>TXT "OK"</code> to any short-label or unrecognized query and sets the authoritative-answer bit on every response, which Censys surfaces as <code>dns.version: "OK"</code> — a usable passive fingerprint on its own.</li>



<li><strong>BeaconSMB</strong>: Named pipe communication for peer-to-peer pivoting within compromised networks</li>



<li><strong>BeaconTCP</strong>: Bind-style TCP channel for internal pivots</li>
</ul>



<p>The transports differ in external visibility. BeaconHTTP, BeaconDNS, and BeaconTCP all expose a socket reachable by any internet scanner. BeaconSMB has no external footprint at all — the teamserver-side <code>Start()</code> for the SMB extender is a no-op. The named pipe lives on a victim machine already running another beacon, which acts as an SMB relay for the rest of the network. An SMB-only deployment is invisible to Censys or any other internet scanner.</p>



<p><strong>Gopher</strong> is a Go implant covering the same platforms. It supports async BOF execution, meaning tasks run in a background goroutine and the agent continues polling without waiting for completion. The default watermark is <code>904e5493</code>. Gopher compiles to a statically linked binary with no external runtime dependency, which makes Linux deployment straightforward.</p>



<p>Both agents use watermarks — short hex strings baked into the compiled binary — to associate callbacks with a specific build. The defaults (<code>be4c0149</code>, <code>904e5493</code>) are identifiable in memory or binary dumps if an operator doesn’t change them.</p>



<h3 class="wp-block-heading">Agent Beacon Protocol</h3>



<p>When a BeaconHTTP listener starts, it runs its own HTTP server on the configured callback port, completely separate from the teamserver. Agent callbacks don’t go to port <code>4321</code> — they go to the listener’s dedicated port. That’s why the Hivelocity cluster (all high ports, no operator API) looks different from individual teamservers (single port, full REST API).</p>



<p>On check-in, the agent sends a request to the configured URI path with a custom header containing a base64-encoded, RC4-encrypted “beat” blob. The listener decrypts the beat using the pre-shared <code>encrypt_key</code> (32 hex chars configured when the listener is created) and extracts the agent type, agent ID, and beacon data. The request body contains any outgoing task data from the agent. The response body contains pending tasks for the agent, embedded in the configured <code>page-payload</code> template string.</p>



<p>The RC4 key is specific to each listener instance and is set by the operator at listener creation time. Agents compiled for a given listener embed this key. This provides meaningful separation between the callback protocol and the teamserver API.</p>



<h3 class="wp-block-heading">Beacon Config Extraction</h3>



<p>Beacon implants embed an RC4-encrypted configuration blob in the <code>.rdata</code> section of the compiled PE. MinGW builds (the default toolchain) place it at the start of <code>.rdata</code>. The layout, derived from the Go-side serialization in <code>pl_main.go</code> and the C++ parser in <code>AgentConfig.cpp</code>:</p>



<pre class="wp-block-code"><code>&#91;4-byte LE: ciphertext_size]
&#91;ciphertext_size bytes: RC4 ciphertext]
&#91;16 bytes: RC4 key]</code></pre>



<p>Decryption requires no external keys — the RC4 key is stored in the binary itself. Slice the ciphertext using the 4-byte size field, use the trailing 16 bytes as the key, and decrypt. The first four bytes of the plaintext are the agent watermark (<code>0xBE4C0149</code> for Beacon, <code>0x904E5493</code> for Gopher). C2 host strings follow as length-prefixed fields, each immediately followed by a 4-byte port value.</p>



<p>Because the number of header fields between the watermark and the first host string varies across build configurations, the most reliable extraction approach scans the plaintext for strings that match IP or hostname patterns rather than parsing at fixed offsets. Non-MinGW toolchains may place the blob at a non-zero offset within <code>.rdata</code>; a 4-byte-aligned sliding search over the section recovers it in those cases.</p>



<p>Any Beacon implant recovered from an endpoint, pulled from a staging server, or retrieved from a sandbox can be parsed for its C2 server, callback URIs, and the listener RC4 key — without executing the binary. The <code>2.26.229[.]254 </code>samples above demonstrate this: three independently compiled executables, all pointing to the same listener config.</p>



<h3 class="wp-block-heading">Third-Party Extensions: KharonHTTP</h3>



<p>AdaptixC2’s extender system supports loading third-party listeners as Go plugins. KharonHTTP (<code>github.com/entropy-z/Kharon</code>) is one — we found it running on two hosts in this dataset.</p>



<p>KharonHTTP implements a malleable C2 profile system — operators configure URI paths, response headers, User-Agent patterns, request body prepend/append wrappers, and cookie or parameter encoding via a JSON profile. This is similar to Cobalt Strike’s Malleable C2 profiles: a single listener binary that takes on different network personas depending on operator configuration. KharonHTTP uses a custom block cipher (“LokyCrypt”) — an 8-byte block, 16-round Feistel construction with XOR post-processing — instead of AdaptixC2’s default RC4.</p>



<p>We found KharonHTTP active on two hosts. <code>1.14.172[.]47</code> ran two KharonHTTP listeners on ports <code>56743</code> and <code>56744</code>. <code>104.236.230[.]184</code> ran one on port <code>443</code>. The callback domain <code>llmscience.top</code> was extracted from the listener config on <code>1.14.172[.]47</code>. The hardcoded agent type identifier is <code>c17a905a</code>.</p>



<p>One behavioral note for defenders running active scans: KharonHTTP returns the literal string <code>"Bad Request"</code> in the response body when the <code>Host</code> header doesn’t match any configured callback. This fires before the operator’s malleable profile is consulted, so it’s consistent regardless of what profile is loaded. KharonHTTP listeners run plain HTTP by default — operators configure TLS separately — so this response is readable in cleartext even on non-standard ports.</p>



<h2 class="wp-block-heading" id="Operator-Profile">Operator Profile</h2>



<p>The infrastructure doesn’t suggest a single threat actor; it’s a mixed population with varying levels of operational discipline.</p>



<p>The three beacon listener clusters — Hivelocity, M247, PSB — show operators who understand multi-server deployment. Spinning up eight servers across two subnets and pointing agents at all of them is not a default behavior; someone made a deliberate choice to run redundant callback infrastructure. Whether those campaigns are authorized is a separate question.</p>



<p>The default OpenSSL certificate (<code>C=AU, ST=Some-State, O=Internet Widgits Pty Ltd</code>) visible across these clusters indicates operators who aren’t concerned about TLS fingerprinting — they either don’t know it’s a detection vector or don’t consider it a priority for their specific operations.</p>



<p>The outlier hosts show more varied configurations. <code>89.125.255[.]29</code> uses <code>C=RU, ST=as, O=as</code> in the certificate — someone who customized the TLS config but filled in “as” twice for state and organization. <code>185.190.142[.]66</code> carries an <code>O=OpenClaw</code> certificate on port <code>443</code> alongside an active AdaptixC2 instance and open RDP. The <code>install.sh</code> installer distributed from <code>2.26.229[.]254</code> has Russian-language comments throughout. These are observations about individual hosts, not a basis for connecting them to each other.</p>



<p>The three sequential CTG Server IPs (<code>202.95.8[.]92, 202.95.8[.]97</code>, <code>202.95.8[.]98</code>), all on port <code>4321</code>, were likely provisioned by the same operator. Port <code>4321</code>  appeared on <code>.92</code> on May 26th, <code>.98</code> on May 29th, <code>.97</code> appeared on May 30th: three consecutive IPs from the same provider, all coming online within a four-day window.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="2048" height="972" src="https://censys.com/wp-content/uploads/image-144.png" alt="" class="wp-image-9826"/></figure>



<p>The “TestCoonection” variant is the most instructive signal in the dataset for detection purposes. Changing the <code>Server</code> header requires editing <code>profile.yaml</code> and restarting the teamserver — the operator made a deliberate choice to evade header-based detection. The <code>Server</code> value contains a consistent typo: “Coonection” with a double-o, present across multiple scans. Querying on the 404 body string still catches it.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="500" height="680" src="https://censys.com/wp-content/uploads/image-143.png" alt="" class="wp-image-9825"/></figure>



<p>That’s the pattern across this population: operators at varying stages of OPSEC maturity, some running defaults, some making targeted changes. The ones making targeted changes tend to address one detection vector at a time and leave others intact. That’s what makes layered detection — headers and body, passive and active — worth maintaining.</p>



<h2 class="wp-block-heading" id="IOCs">IOCs</h2>



<h3 class="wp-block-heading">Detection Queries</h3>



<p><strong>Threat label (simplest — finds all detections including evasion variants):</strong></p>



<p><code>host.services.threats.name: "Adaptix C2" or web.threats.name: "Adaptix C2"</code></p>



<div id="censys-title-with-content-block_678f8579c18b24114a0f79ea43fea7fc" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Follow Along in Censys</h3>
                    </div>
                            </div>
        </div>
       
                                            <div class="button-wrapper">
                    <a href="https://platform.censys.io/search?q=host.services.threats.name%3A+%22Adaptix+C2%22+or+web.threats.name%3A+%22Adaptix+C2%22" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" target="_blank" rel="nofollow">
                        <span class="avia_iconbox_title">View Current Results</span>
                    </a>
                </div>
                        </div>
</div>


<p><strong>Header-based (primary):</strong></p>



<p><code>web.endpoints.http.headers: (key: "Server" and value: "AdaptixC2")</code></p>



<p><strong>Version-specific:</strong></p>



<p><code>web.endpoints.http.headers: (key: "Adaptix-Version" and value: "v1.2")</code></p>



<p><strong>Body-based (catches header-modified deployments):</strong></p>



<p><code>web.endpoints.http.body: "You need to enter the correct connection details."</code></p>



<p><strong>DNS listener (tertiary — requires cross-reference):</strong></p>



<p><code>host.services.dns.version: "OK" and host.services.protocol = "DNS"</code></p>



<p><strong>Censys threat detection:</strong> <a href="https://platform.censys.io/explore/threats/THREAT-0210">THREAT-0210</a> (includes body hash, header, and “TestCoonection” variant)</p>



<h3 class="wp-block-heading">Representative Infrastructure</h3>



<p><strong>Hivelocity beacon listener cluster:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>IP</strong></td><td><strong>Port</strong></td><td><strong>ASN</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>23.227.203[.]205</code></td><td><code>43211</code></td><td>HVC-AS</td><td>Default OpenSSL certificate</td></tr><tr><td><code>46.21.153[.]146</code></td><td><code>43211</code></td><td>HVC-AS</td><td>Same certificate; randomized high ports</td></tr><tr><td><code>46.21.153[.]148</code></td><td><code>43211</code></td><td>HVC-AS</td><td>Same certificate; randomized high ports</td></tr></tbody></table></figure>



<p><strong>M247 beacon listener cluster:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>IP</strong></td><td><strong>Port</strong></td><td><strong>ASN</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>38.132.122[.]141</code></td><td><code>43211</code></td><td>M247</td><td>Default OpenSSL certificate</td></tr><tr><td><code>38.132.122[.]145</code></td><td><code>43211</code></td><td>M247</td><td>Same certificate</td></tr><tr><td><code>38.132.122[.]161</code></td><td><code>43211</code></td><td>M247</td><td>Same certificate</td></tr><tr><td><code>146.70.87[.]23</code></td><td><code>43225</code></td><td>M247</td><td>Same certificate pattern</td></tr><tr><td><code>146.70.87[.]64</code></td><td><code>43211</code></td><td>M247</td><td>Same certificate pattern</td></tr><tr><td><code>146.70.87[.]96</code></td><td><code>43211</code></td><td>M247</td><td>Same certificate pattern</td></tr><tr><td><code>146.70.87[.]218</code></td><td><code>42445</code></td><td>M247</td><td>Same certificate pattern</td></tr><tr><td><code>146.70.87[.]237</code></td><td><code>43211</code></td><td>M247</td><td>Same certificate pattern</td></tr></tbody></table></figure>



<p><strong>PSB Hosting beacon listener cluster:</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>IP</strong></td><td><strong>Port</strong></td><td><strong>ASN</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>45.155.69[.]106</code></td><td><code>42211</code></td><td>PSB Hosting</td><td>Randomized high ports</td></tr><tr><td><code>45.155.69[.]153</code></td><td><code>43345</code></td><td>PSB Hosting</td><td>Same pattern</td></tr><tr><td><code>45.155.69[.]175</code></td><td><code>42455</code></td><td>PSB Hosting</td><td>Same pattern</td></tr><tr><td><code>185.242.245[.]4</code></td><td><code>44355</code></td><td>PSB Hosting</td><td>Same pattern</td></tr><tr><td><code>185.242.245[.]27</code></td><td><code>44875</code></td><td>PSB Hosting</td><td>Same pattern</td></tr><tr><td><code>185.242.245[.]120</code></td><td><code>42534</code></td><td>PSB Hosting</td><td>Same pattern</td></tr></tbody></table></figure>



<p><strong>Notable individual hosts:</strong></p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>IP</strong></td><td><strong>Port</strong></td><td><strong>Notes</strong></td></tr><tr><td><code>185.190.142[.]66</code></td><td><code>4321</code></td><td>Contabo FR; RDP open; <code>O=OpenClaw</code> certificate on port <code>443</code></td></tr><tr><td><code>89.125.255[.]29</code></td><td><code>4321</code></td><td>RoyaleHosting NL; <code>C=RU, ST=as, O=as </code>certificate</td></tr><tr><td><code>38.147.173[.]24</code></td><td><code>8562</code></td><td>Lucidacloud HK; port <code>50050</code> also open</td></tr><tr><td><code>156.225.22[.]201</code></td><td><code>1337</code></td><td>cognetcloud HK</td></tr><tr><td><code>202.95.8[.]92</code></td><td><code>4321</code></td><td>CTG Server HK; sequential with <code>.97</code> and <code>.98</code></td></tr><tr><td><code>167.17.47[.]121</code></td><td><code>443</code> / <code>4321</code> / <code>53</code></td><td>TRUNKNETWORKS-AS SG; teamserver + active DNS beacon listener (<code>dns.version: "OK"</code>)</td></tr><tr><td><code>91.230.94[.]235</code></td><td><code>4321</code> / <code>53</code></td><td>NETRACK-AS RU; teamserver + active DNS beacon listener (<code>dns.version: "OK"</code>)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><strong>Samples and Artifacts (</strong><strong>2.26.229[.]254</strong><strong>)</strong></h3>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Filename</strong></td><td><strong>SHA256</strong></td><td><strong>Type</strong></td></tr><tr><td><code>install.sh</code></td><td><code>479b7abd5df2f6ab3de8c32a36478c15012dbc8217f9fa825fd4b9cb7e9b8d13</code></td><td>Linux persistence installer</td></tr><tr><td><code>timesync.bin</code></td><td><code>fb1f4f5a4ef76960577462634f4a104fb307e161fc2791b9231a07a2c751beca</code></td><td>Gopher agent (ELF x64)</td></tr><tr><td><code>svhost.exe</code></td><td><code>06b13dfd84493b01a020eecdabff6308b5b790ed4cd4c7a96a30ae6be1ca325d</code></td><td>Beacon (Windows x64)</td></tr><tr><td><code>svc_timesync.x64.exe</code></td><td><code>7d35d687ae8d4056e394905e9f8962512e6d55ff98664ed1facee6554a565624</code></td><td>Beacon (Windows x64)</td></tr><tr><td><code>agent.x86.exe</code></td><td><code>51fba778dae6f108f7afa800bdb7745e6a0f6d2630a37ecc84c1d4a1609f9692</code></td><td>Beacon (Windows x86)</td></tr></tbody></table></figure>



<p><strong>Operator SSH public key (hardcoded in <code>install.sh</code>):</strong></p>



<p><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIoi/bPuWr2EOQZo2OVDqG8XsRMz5epEGqG9sjcwZGJ1 timesync-manager</code></p>



<p>Presence of this key in <code>authorized_keys</code> on any host links the infection to this operator.</p>



<p><strong>BeaconHTTP RC4 key (extracted from Windows samples):</strong> <code>1baccab4cbd2b84f6bc54bf8e6551f93</code></p>



<h3 class="wp-block-heading">Agent Watermarks</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Agent</strong></td><td><strong>Default Watermark</strong></td></tr><tr><td>Beacon (C++)</td><td><code>be4c0149</code></td></tr><tr><td>Gopher (Go)</td><td><code>904e5493</code></td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><strong>Find AdaptixC2 Infrastructure on Censys</strong></h3>



<p>All hosts in this dataset are tagged under the <code>Adaptix C2</code> threat label (<a href="https://platform.censys.io/explore/threats/THREAT-0210">THREAT-0210</a>) in Censys. The threat detection covers both the default header-based detection and the body-based fallback, including the “TestCoonection” evasion variant.</p>



<p><code>host.services.threats.name: "Adaptix C2" or web.threats.name: "Adaptix C2"</code></p>



<div id="censys-title-with-content-block_678f8579c18b24114a0f79ea43fea7fc" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Follow Along in Censys</h3>
                    </div>
                            </div>
        </div>
       
                                            <div class="button-wrapper">
                    <a href="https://platform.censys.io/search?q=host.services.threats.name%3A+%22Adaptix+C2%22+or+web.threats.name%3A+%22Adaptix+C2%22" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" target="_blank" rel="nofollow">
                        <span class="avia_iconbox_title">View Current Results</span>
                    </a>
                </div>
                        </div>
</div>


<h2 class="wp-block-heading" id="Takeaways">Takeaways</h2>



<ol class="wp-block-list">
<li><strong>Default branding makes passive detection trivial.</strong> The <code>Server: AdaptixC2</code> and <code>Adaptix-Version: v1.2 </code>headers appear on every unauthenticated request because they’re set in the error handler, not a specific route. No credential or endpoint knowledge is needed to identify a default-configuration deployment.</li>



<li><strong>Operators trying to evade headers leave the body string behind.</strong> The “TestCoonection” variant confirms that at least one operator modified the response headers to avoid detection but left the default 404 page intact. Body-based detection catches this class of evasion. Defenders should query both signals.</li>



<li><strong>Three beacon listener clusters suggest coordinated multi-server operations.</strong> The Hivelocity, M247, and PSB clusters — identifiable from sequential IPs, shared ports, and identical default OpenSSL certificates — likely represent single operators running redundant callback infrastructure. The shared cert pattern is the clustering signal.</li>



<li><strong>External visibility varies by transport.</strong> BeaconHTTP, BeaconDNS, and BeaconTCP all expose sockets that passive scanning can reach. BeaconSMB does not — the SMB extender binds no socket on the teamserver, and the named pipe lives on an already-compromised victim. Operators who pivot entirely through SMB after initial access leave nothing for internet scanners to find. The deployments counted here are necessarily those that kept at least one externally-reachable listener running.</li>



<li><strong>412 web properties across 236 hosts is a population worth monitoring — with the caveat that passive scanning can’t separate authorized engagements from unauthorized ones.</strong> Some of these are authorized red team engagements. Passive scanning can’t distinguish them from unauthorized activity. What it can do is surface the infrastructure so analysts can make that determination themselves. The fingerprint is in production (THREAT-0210) and covers both header-based and body-based detection paths, including the evasion variant. Defenders can use the queries above to identify AdaptixC2 deployments in their threat intelligence pipelines.</li>
</ol>
<p>The post <a href="https://censys.com/blog/adaptixc2-open-source-c2-framework/">AdaptixC2: Fingerprinting an Open-Source C2 Framework at Scale</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>REDCap on the Internet: An Exposure Analysis</title>
      <link>https://censys.com/blog/redcap-exposure-analysis/</link>
      <description><![CDATA[<p>Executive Summary Introduction REDCap is a browser-based platform for collecting and managing research data, developed and distributed by Vanderbilt University to a group of academic, healthcare, and non-profit organizations. By design, the software is often exposed to the Internet to facilitate collaboration and enable study participants to access the platform.&#160; In a report published on [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/redcap-exposure-analysis/">REDCap on the Internet: An Exposure Analysis</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Research</category>
      <category>Threat Intelligence</category>
      <guid isPermaLink="false">https://censys.com/?p=9804</guid>
      <pubDate>Tue, 16 Jun 2026 19:01:09 +0000</pubDate>
      <content:encoded><![CDATA[<h2 class="wp-block-heading" id="Executive-Summary">Executive Summary</h2>



<ul class="wp-block-list">
<li>Google&#8217;s Threat Intelligence Group (GTIG) recently attributed a year-plus espionage campaign against North American academic, medical, and military research institutions to <strong>UNC6508</strong>, a PRC-nexus actor. The consistent initial access vector was an <strong>externally facing REDCap server</strong>: exploited, then backdoored with custom malware (dubbed “INFINITERED”) for over a year of data exfiltration. The initial access method is unconfirmed at the time of writing.<br></li>



<li>REDCap (Research Electronic Data Capture) is a web application used by research institutions worldwide to build and manage study databases. <strong>It commonly holds clinical trial data, participant records, and other sensitive research information</strong>.<br></li>



<li>As of June 16, 2026, Censys observed <strong>just over 8,500 REDCap instances globally</strong>, with concentrations in the U.S. (40%), the U.K (7.4%), Germany (4.8%), and Australia (3.9%).<br></li>



<li>REDCap <strong>version 16.0.17</strong> represents a third of all observations, followed by 16.1.4 at 4.93% and 16.0.15 at 3.34%. Based on Censys observations, 17.1.3 appears to be the latest version available, and just 1.18% of instances are on this patch version. </li>
</ul>



<h2 class="wp-block-heading" id="Introduction">Introduction</h2>



<p><a href="https://project-redcap.org/">REDCap</a> is a browser-based platform for collecting and managing research data, developed and distributed by Vanderbilt University to a group of academic, healthcare, and non-profit organizations. By design, the software is often exposed to the Internet to facilitate collaboration and enable study participants to access the platform.&nbsp;</p>



<p>In a <a href="http://cloud.google.com/blog/topics/threat-intelligence/prc-targets-us-medical-research">report</a> published on June 15, 2026, Google Threat Intelligence Group (GTIG) attributed a “sophisticated” campaign targeting North American academic, medical, and military researchers to UNC6508, a People&#8217;s Republic of China (PRC)-nexus threat actor.&nbsp;</p>



<p>While the initial access method is currently unconfirmed, UNC6508 exploited a public-facing REDCap server to drop a webshell and deploy INFINTERED malware, a PHP backdoor. Using this method, the actor maintained access to sensitive environments for over a year and collected information from sensitive systems, abused administrative tools for data exfiltration, and deployed additional malware.</p>



<p>Patch management for this is likely complicated for academic users who maintain self-hosted installations of REDcap, where available versions and how they’re rolled out depend on your institution’s IT team. <a href="https://projectredcap.org/software/requirements/">REDcap states</a> that new long-term support releases are rolled out every 6 months.<br></p>



<h2 class="wp-block-heading">Censys ARC Perspective</h2>



<h3 class="wp-block-heading" id="Geography">Geography</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="560" src="https://censys.com/wp-content/uploads/image-140.png" alt="" class="wp-image-9806"/></figure>



<p>The U.S. dominates the exposure landscape of REDCap instances (40%), followed by the U.K. (7.4%), Germany (4.8%), and Australia (3.9%). While most instances are concentrated in the U.S. and Europe, there is a long tail of instances across more than 100 countries, including China (2.5%), India (2.4%), and South Africa (2.1). The global spread illustrates it’s a popular tool with wide adoption.</p>



<h3 class="wp-block-heading" id="Networks">Networks</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="580" src="https://censys.com/wp-content/uploads/image-139.png" alt="" class="wp-image-9805"/></figure>



<p>A plurality of REDCap instances are cloud deployments—primarily Amazon and Microsoft, though Alibaba Cloud, OVH, and Digital Ocean are also among the top autonomous systems where we observe REDCap instances.</p>



<p>Research institutions like the U.K’s <a href="https://www.jisc.ac.uk/janet">Janet Network</a> (Jisc), Germany’s <a href="https://www.dfn.de/en/">National Research and Education Network</a> (DFN), and Italy’s <a href="https://www.garr.it/en">Research and Education Network</a> (GARR) also host instances of REDCap on their dedicated networks.</p>



<h3 class="wp-block-heading" id="Versions">Versions</h3>



<p>We find that 16.0.17 is the most commonly observed version of REDCap deployed, representing just over 30% of all Internet-facing deployments. 16.1.4, the next largest concentration of versions, represents just 4.93%.</p>



<p>It’s unclear from REDCap’s website when each of these versions were released, but existence of 17.x.x releases suggest that 16.x.x versions may be somewhat outdated. 17.1.3 appears to be the latest version available, and only 1.18% of instances are running this patch version as of June 16, 2026.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>REDCap Version</strong></td><td><strong>Percent of Observations</strong></td></tr><tr><td>16.0.17</td><td>30.1%</td></tr><tr><td>16.1.4</td><td>4.93%</td></tr><tr><td>16.0.15</td><td>3.34%</td></tr><tr><td>17.1.2</td><td>3.30%</td></tr><tr><td>16.0.32</td><td>1.91%</td></tr><tr><td>15.5.36</td><td>1.83%</td></tr><tr><td>16.0.33</td><td>1.66%</td></tr><tr><td>17.1.1</td><td>1.37%</td></tr><tr><td>17.1.3</td><td>1.18%</td></tr><tr><td>17.0.8</td><td>1.07%</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="Mitigation">Mitigation: What Can Be Done?</h2>



<ul class="wp-block-list">
<li>REDCap operators should assemble a comprehensive inventory of instances and ensure they are patched to the latest version available. </li>



<li>As REDCap notes in their <a href="https://projectredcap.org/wp-content/resources/REDCapTechnicalOverview.pdf">documentation on best practices</a>, “much of the security surrounding REDCap has nothing to do with the REDCap software itself but rather is dependent upon the IT infrastructure and environment in which REDCap has been installed…Typical best practices are that the web server and database server be two separate servers and that the database server be located securely behind a firewall.”</li>



<li>Enforce multi-factor authentication on administrator accounts at a minimum.</li>
</ul>
<p>The post <a href="https://censys.com/blog/redcap-exposure-analysis/">REDCap on the Internet: An Exposure Analysis</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>Powering the AI-Enabled SOC with Censys Internet Intelligence and Google SecOps</title>
      <link>https://censys.com/blog/ai-soc-censys-internet-intelligence-google-secops/</link>
      <description><![CDATA[<p>Introduction Security Operations teams are being asked to move faster, investigate more accurately, and utilize automation and AI to understand what is happening across not only their own environments, but outside their firewall as well. Google helps teams achieve this through the SecOps platform, but as SOCs are pressured to deliver on faster triaging, more [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/ai-soc-censys-internet-intelligence-google-secops/">Powering the AI-Enabled SOC with Censys Internet Intelligence and Google SecOps</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Censys Platform</category>
      <category>SOC</category>
      <guid isPermaLink="false">https://censys.com/?p=9754</guid>
      <pubDate>Tue, 16 Jun 2026 16:27:56 +0000</pubDate>
      <content:encoded><![CDATA[<h2 class="wp-block-heading" id="Introduction">Introduction</h2>



<p>Security Operations teams are being asked to move faster, investigate more accurately, and utilize automation and AI to understand what is happening across not only their own environments, but outside their firewall as well. Google helps teams achieve this through the SecOps platform, but as SOCs are pressured to deliver on faster triaging, more in-depth investigations, wider hunting, and accurate detections, one thing becomes clear: quality, high-fidelity, world-class adversary external Internet intelligence data is key to fulfilling the goals of the AI-enabled SOC.</p>



<p>This is where Censys steps in.</p>



<p>Censys provides the foundational Internet mapping data that gives Google SecOps users rich, real-time context about IPs, web properties, certificates, active DNS, history, adversary clusters, and relationships — all in real-time. With the <a href="https://docs.censys.com/docs/platform-google-secops-integration">Censys for Google SecOps SOAR integrations</a>, teams can automatically enrich their alerts with Censys data and get all the context they need to make quick, accurate decisions that proactively protect their organization.</p>



<h2 class="wp-block-heading" id="Why-External-Infrastructure-Context-Matters">Why External Infrastructure Context Matters</h2>



<p>Many alerts begin with a simple indicator: an IP address, domain or certificate hash, for example. On its own, this indicator only tells part of the story. An analyst still needs more detail, such as:</p>



<ul class="wp-block-list">
<li>Is this infrastructure newly spun-up or has it been around for awhile?</li>



<li>What services are exposed?</li>



<li>Any certificates associated with it?</li>



<li>Is this host malicious?</li>



<li>Is that indicator related to other suspicious infrastructure?</li>



<li>Was this service active when the incident was triggered?</li>



<li>Has the host changed recently?</li>



<li>Is this something we should block, hunt deeper, escalate or ignore?</li>
</ul>



<p>Without context, analysts lose time pivoting across different tools, ingesting from multiple data sources, and reconstructing relationships to answer those questions above. It doesn’t matter whether those tasks are completed manually or automated with the help of AI; if the contextual data isn’t at the forefront of any decision, investigation, or detection, then teams will not get the results they expect, no matter how much AI they throw at it.</p>



<p>Censys closes that gap by bringing Internet-scale intelligence directly into Google SecOps workflows, so that those questions are answered immediately without needing to look elsewhere. And by injecting contextualized, evidence-backed data at the start, organizations can even reduce AI token costs.</p>



<h2 class="wp-block-heading" id="Google-SecOps-+-Censys:-Enrichment-Where-Analysts-Already-Work">Google SecOps + Censys: Enrichment Where Analysts Already Work</h2>



<p>Google SecOps supports enrichment of indicators, events, and cases through playbooks, helping teams add context throughout their investigation, triage, detection and response workflows. The <a href="https://docs.censys.com/docs/platform-google-secops-integration">Censys integration</a> extends that model with external Internet mapping intelligence without requiring analysis to leave their SecOps workflow. Censys actions can be run directly from a SecOps case or triggered automatically through playbooks. Currently, the integration supports these key actions:</p>



<ul class="wp-block-list">
<li><strong>Entity enrichment</strong> for hosts, web properties and certificates. This can be a manual enrichment or automated.</li>



<li><strong>Rescan</strong> actions to refresh Censys observations outside of the scheduled scan.</li>



<li><strong>Historical lookups</strong> to understand how an asset has changed over time.</li>



<li><strong>Related infrastructure discovery</strong> to identify clusters of interest from an indicator.</li>
</ul>



<p>This creates a stronger foundation for triage, threat hunting, <a href="https://censys.com/blog/ultimate-guide-to-detection-engineering-with-censys/">detection engineering</a>, and incident response use cases — everything that the AI-enabled SOC needs.</p>



<p>Let’s explore how Google SecOps + Censys works for each use case.</p>



<h3 class="wp-block-heading" id="Use-Case--1:-Faster,-Higher-Confidence-Alert-Triaging">Use Case #1: Faster, Higher Confidence Alert Triaging</h3>



<p>In a traditional SOC workflow, alert triage often starts with a basic question: “Is this worth investigating?”</p>



<p>Censys helps answer that question faster.</p>



<p>When an alert contains an IP address, domain, web property, or certificate, Google SecOps can invoke Censys enrichment to return external context such as exposed services, certificates, host details, web technologies, and security configurations. The actual IP address is also scored by Censys through its intelligent <a href="https://docs.censys.com/docs/platform-reputation-scores">Reputation Scoring</a> method that instantly lets analysts know if it’s malicious, high risk, medium risk, low risk, or benign. </p>



<p>If the Reputation Score is used in automated workflows, analysts can confidently triage thousands of alerts within minutes by ignoring the benign and low risk and concentrating on only malicious and high risk hosts.</p>



<p>The overall result is faster, accurate triaging with clearer reasoning.</p>



<h3 class="wp-block-heading" id="Use-Case--2:-Threat-Hunting-Across-Related-Infrastructure">Use Case #2: Threat Hunting Across Related Infrastructure</h3>



<p>Threat hunters rarely care about a single IOC in isolation. The real value comes from understanding the broader cluster of infrastructure that surrounds it.</p>



<p>Censys enables this by allowing hunters to pivot from one observable IOC into related infrastructure. Through the Google SecOps integration, users can use the powerful <a href="https://docs.censys.com/docs/platform-threat-hunting-use-censeye-to-build-detections">CensEye</a> to discover related assets for a host, web property, or certificate. This is especially valuable when threat actors reuse infrastructure patterns rather than exact indicators. A single IP may rotate out, but certificates or other configurations or naming conventions may reveal a larger campaign. </p>



<p>Inside Google SecOps, this allows hunters to move from an isolated IOC to an infrastructure-led investigation. This, in turn, supports a more proactive approach in the AI-enabled SOC, where teams proactively uncover adversary footprints instead of waiting for that indicator to become an alert in the future.</p>



<h3 class="wp-block-heading" id="Use-Case--3:-Detection-Engineering-With-Internet-Mapping-Context">Use Case #3: Detection Engineering With Internet Mapping Context</h3>



<p>Detection engineering becomes more powerful when rules are informed by external infrastructure context.</p>



<p>Google SecOps supports customer detection authoring using YARA-L and also enables users to leverage natural language and Gemini to search, iterate, drill down, and create detections. Censys now adds another layer: infrastructure intelligence that can help detection engineers understand what to look for and why it matters.</p>



<p>For example, detection engineers can use Censys to identify patterns such as:</p>



<ul class="wp-block-list">
<li>Newly exposed services associated with suspicious infrastructure.</li>



<li>Certificates reused across multiple suspicious hosts.</li>



<li>Web properties sharing technologies with known malicious infrastructure.</li>



<li>Infrastructure that appears, disappears, or changes during a campaign window.</li>



<li>Hosts with service histories that align with attacker staging or payload delivery.</li>
</ul>



<p>This can help detection engineering teams move beyond static IOC-based detections and towards behaviorally informed infrastructure-aware detections. The value is not just detecting one bad IP, but understanding the infrastructure pattern well enough to detect the next one.</p>



<h3 class="wp-block-heading" id="Use-Case--4:-Incident-Response-With-Historical-Asset-Context">Use Case #4: Incident Response With Historical Asset Context</h3>



<p>During incident response, timing matters.</p>



<p>Responders need to know what an external host looked like at the time of an event, not just what it looks like now. Censys historical data helps teams understand how a host appeared at a particular point in time, with scan snapshots and event history showing when services were added, removed or modified.</p>



<p>This is critical when investigating callbacks, credential theft, phishing infrastructure, or suspicious outbound connections. An IP may no longer expose the same service by the time an analyst investigates. A domain may have changed hosting providers. A service may have appeared briefly and disappeared, or a certificate may have rotated.</p>



<p>With Censys historical lookups available through the Google SecOps integration, responders can investigate infrastructure as it existed during the relevant incident window, helping teams track changes over time and giving incident responders better evidence for containment, scoping, and post-incident analysis.</p>



<h3 class="wp-block-heading" id="Use-Case--5:-Rescans,-Refreshing-The-Internet-View-When-It-Matters">Use Case #5: Rescans, Refreshing The Internet View When It Matters</h3>



<p>Internet infrastructure changes constantly. Attackers rotate services, move infrastructure on the fly, update certificates, and stand up short-lived assets.</p>



<p>For the first four use cases, analysts need the latest view; the context they had just a few hours ago may already be out of date. A rescan lets analysts scan for any changes on-demand rather than having to wait for the scheduled scans, which may be too late. With the Censys rescan integration, Google SecOps can initiate a rescan of all data and return a scan ID that can be used to monitor status. This is especially useful when:</p>



<ul class="wp-block-list">
<li>An alert references infrastructure that may have changed since last observation.</li>



<li>A suspicious service needs to be verified before escalation.</li>



<li>A responder wants to confirm whether exposed infrastructure is still active.</li>



<li>A hunter wants the freshest possible data before expanding an investigation.</li>
</ul>



<p>For the AI-enabled SOC, rescans help ensure that automated reasoning is grounded in truth and current evidence, not stale observations.</p>



<h2 class="wp-block-heading" id="Conclusion">Conclusion</h2>



<p>The future SOC will not be defined by automation per se; rather, it will be defined by the quality of the data that powers automation and AI.</p>



<p>Together, Google SecOps and Censys can help security teams:</p>



<ul class="wp-block-list">
<li>Triage alerts faster with richer infrastructure context.</li>



<li>Hunt beyond isolated IOCs into related infrastructure.</li>



<li>Create stronger detections based on observable infrastructure patterns.</li>



<li>Investigate incidents using current and historical internet asset data.</li>



<li>Invoke manual or automated enrichment directly inside existing SOC workflows.</li>



<li>Refresh observations with rescans when the latest Internet view is needed.</li>



<li>Use CensEye to uncover related infrastructure and support deeper adversary investigations.</li>
</ul>



<p>For the AI-enabled SOC, this is the difference between just reacting to alerts and being able to understand the infrastructure behind them. </p>



<p>Google and Censys are the <a href="https://info.censys.com/censys-google-secops">perfect partners</a> to enable AI-assisted security operations to be faster, more accurate, and more actionable than ever before.</p>
<p>The post <a href="https://censys.com/blog/ai-soc-censys-internet-intelligence-google-secops/">Powering the AI-Enabled SOC with Censys Internet Intelligence and Google SecOps</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>The Package That Never Shipped: Following a USPS Smishing Kit Through Censys DNS Data</title>
      <link>https://censys.com/blog/following-a-usps-smishing-kit-through-censys-dns-data/</link>
      <description><![CDATA[<p>Executive Summary It Starts With a Text Message You know the message. Everyone has gotten one. A package could not be delivered, there is an unpaid customs fee or a bad address, and here is a helpful link to fix it. This one pointed at: Believe it or not, xupqnqz[.]one is not USPS (United States [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/following-a-usps-smishing-kit-through-censys-dns-data/">The Package That Never Shipped: Following a USPS Smishing Kit Through Censys DNS Data</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Research</category>
      <category>Threat Intelligence</category>
      <guid isPermaLink="false">https://censys.com/?p=9627</guid>
      <pubDate>Fri, 12 Jun 2026 19:35:28 +0000</pubDate>
      <content:encoded><![CDATA[<h2 class="wp-block-heading" id="Executive-Summary">Executive Summary</h2>



<ul class="wp-block-list">
<li>A live smishing campaign delivered by SMS impersonates United States Postal Service (USPS)&nbsp; package delivery. The lure is not a hand-built knockoff. The kit serves <strong>USPS&#8217;s own production HTML, CSS, fonts, and images verbatim</strong> from the phishing host, complete with USPS&#8217;s live Google Analytics tag firing against USPS&#8217;s real marketing infrastructure.</li>



<li>Underneath the deception the kit captures<strong> data in real time</strong>. It opens a WebSocket back to its origin and streams the victim&#8217;s card data keystroke-by-keystroke, runs a server-side BIN lookup on the card number, and pushes routing decisions (retry, PIN prompt, OTP prompt, kill-switch) back into the victim&#8217;s browser while they type. This was captured live, not inferred from source.</li>



<li>The lure arrives as a single hostname. <strong>Censys passive DNS turned that one host into the whole operation.</strong> A single seed IP resolved to over a hundred lookalike subdomains, and across the confirmed cluster Censys recorded <strong>682 unique lookalike hostnames</strong> (snapshot 2026-05-20), most of which no longer answer in live DNS but remain in Censys&#8217;s historical record.</li>



<li>Pivoting on the kit&#8217;s HTTP banner hash carried the hunt from the USPS lure host onto a <strong>sibling running a second campaign from a Tencent prefix </strong>that impersonates UPS instead of USPS, on a Java/Spring Boot backend instead of the USPS kit&#8217;s Go backend. Both campaigns bake the operator&#8217;s own internal theme name, <code>us_post_ups</code>, directly into their cookies. Same operator, two brands, one kit family.</li>



<li>The durable detection signals are structural, not cosmetic: the <code>/us_post_usps/</code> asset path, the <code>theme_*_verify_us_post_ups</code> cookie family, the <code>valid_&lt;14digits&gt;_&lt;32hex&gt;</code> token shape, and a banner hash that returns exactly the five UPS-themed (<em>not USPS)</em> hosts globally. Hostnames and IPs rotate weekly. These do not.</li>
</ul>



<h2 class="wp-block-heading" id="It-Starts-With-a-Text-Message">It Starts With a Text Message</h2>



<p>You know the message. Everyone has gotten one. A package could not be delivered, there is an unpaid customs fee or a bad address, and here is a helpful link to fix it. This one pointed at:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;usps.xupqnqz&#91;.]one/uqjmw</code></pre>



<br>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="778" height="1248" src="https://censys.com/wp-content/uploads/image-138.png" alt="" class="wp-image-9650" style="width:507px;height:auto"/></figure>



<p><br><br>Believe it or not, <code>xupqnqz[.]one</code> is not USPS (United States Postal Service). It is a six-character random string on a <code>.one</code> domain, prefixed with the comforting subdomain <code>usps.</code> That <code>usps.</code> label is the entire con. On a phone, with the real domain truncated in a narrow address bar, the leftmost thing the victim reads is &#8220;usps&#8221;. The kit operator is betting the rest never gets read.</p>



<p>Tap the link and you do not land on a fake mailbox right away. You hit a &#8220;Security Check&#8221; page that is a pixel-faithful clone of Cloudflare&#8217;s &#8220;Verify you are human&#8221; interstitial: the orange shield, the rounded checkbox, the <code>Performance &amp; security by Cloudflare</code> footer. It even ships a twelve-language translation table and picks your language from <code>navigator.language</code>, so the lure speaks English, Spanish, Chinese, Arabic, and eight others without the operator lifting a finger.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="611" height="765" src="https://censys.com/wp-content/uploads/Screenshot-2026-06-12-at-11.19.09-AM.png" alt="V1 fake Cloudflare Security Check gate" class="wp-image-9631"/><figcaption class="wp-element-caption"><em>V1 fake Cloudflare Security Check gate</em></figcaption></figure>



<p></p>



<p>This is the modern smishing pattern: wrap the scam in the most boring, most trusted interaction on the web. Nobody is suspicious of a Cloudflare check. We are all trained to click it and move on. That is exactly what the kit wants.</p>



<p>For the purposes of this post, though, the interesting move is not the lure. It is what happens when you take that one hostname to Censys and start pulling on the thread.</p>



<h2 class="wp-block-heading" id="One-Host,-and-What-Censys-Already-Knew-About-It">One Host, and What Censys Already Knew About It</h2>



<p>The lure hostname resolves to <a href="https://platform.censys.io/hosts/43.157.174.200">`43.157.174.200`</a>, a Tencent Cloud machine in <code>43.157.128.0/18, ASN 132203</code>. A normal first step. The interesting step is the second one.</p>



<div id="censys-title-with-content-block_66f169e8bf5c379d68ae4fa460482554" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Follow Along in Censys</h3>
                    </div>
                            </div>
        </div>
       
                                            <div class="button-wrapper">
                    <a href="https://platform.censys.io/hosts/43.157.174.200" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" target="_blank" rel="nofollow">
                        <span class="avia_iconbox_title">View 43.157.174.200 in Censys</span>
                    </a>
                </div>
                        </div>
</div>


<p>Censys does not just tell you what is running on <code>43.157.174.200</code> right now. It tells you every hostname it has ever seen resolve to that IP. Pull the host&#8217;s DNS view and the single SMS hostname explodes into roughly a hundred siblings, all variations on the same two themes:</p>



<ul class="wp-block-list">
<li><code>usps.xupq*.one</code> (the SMS lure&#8217;s exact shape, with a rotating four-to-six character tail)</li>



<li><code>informed.deliwek*.shop</code> (a nod to &#8220;Informed Delivery&#8221;, USPS&#8217;s real free mail-preview product)</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="2048" height="1187" src="https://censys.com/wp-content/uploads/image-135.png" alt="" class="wp-image-9629" style="aspect-ratio:1.7253663515048814;width:1111px;height:auto"/></figure>



<p>That is the moment a single-link phishing report turns into an infrastructure hunt. The operator is not running one domain. They are running a domain <strong>factory</strong>, and one IP is hosting the whole catalog.</p>



<h2 class="wp-block-heading" id="Following-the-DNS">Following the DNS</h2>



<p>This is the part of the investigation I want to dwell on, because it is the part that Censys makes almost unfairly easy and that you cannot reproduce with live DNS alone.</p>



<p><a href="https://docs.censys.com/docs/platform-active-dns">Active DNS</a> answers one question: what does this name resolve to <strong>right now</strong>. Smishing operators have read that memo. The lure hostname in your text message is meant to live for hours, maybe a day, then go dark. Resolve it next week and you get nothing. The infrastructure looks like it evaporated.</p>



<p>It did not evaporate. It rotated. And Censys&#8217;s DNS resolutions data keeps the receipts.</p>



<p>Querying Censys&#8217;s resolutions API for the seven IPs that ultimately make up this cluster returns <strong>682 unique hostnames</strong> as of the 2026-05-20 snapshot. The shape distribution is the operator&#8217;s whole playbook on one page:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Hostname shape</strong></td><td><strong>Count</strong></td><td><strong>What it impersonates</strong></td></tr><tr><td><code>*.life</code> (bare random apex)</td><td>334</td><td>the operator&#8217;s preferred disposable landing domain</td></tr><tr><td><code>informed.deliwek*.shop</code></td><td>250</td><td>USPS Informed Delivery</td></tr><tr><td><code>usps.xupq*.one</code></td><td>78</td><td>the USPS SMS lure pattern</td></tr><tr><td><code>deliwek*.shop</code> (bare)</td><td>17</td><td>USPS delivery theme</td></tr><tr><td><code>xupq*.one</code> (bare)</td><td>3</td><td>apex of the lure pattern</td></tr></tbody></table></figure>



<p>Most of these names return nothing if you <a href="https://en.wikipedia.org/wiki/Dig_(command)">dig</a> them today. They are spent. But they all sit in Censys&#8217;s history with <code>first_seen</code> and <code>last_seen</code> timestamps, which lets you reconstruct the rotation cadence and, more usefully, prove that a domain you just received in a fresh lure belongs to infrastructure that has been burning through names for weeks. The single host <code>43.157.174.200</code> alone accounts for 306 of those names. Two of its siblings carry another 197 and 202.</p>



<p>A defender who only has the live hostname sees one disposable domain. A defender with Censys sees the disposable-domain *generator* and every name it has emitted. That is the difference, and it is the whole reason this investigation got interesting instead of dead-ending at a 404.</p>



<h2 class="wp-block-heading" id="What-the-Lure-Actually-Does"><strong>What the Lure Actually Does</strong></h2>



<p>Before chasing the rest of the infrastructure, it is worth understanding what is waiting at the end of the link, because the kit&#8217;s mechanics are genuinely a step above the average phishing page.</p>



<p>Click the fake Cloudflare checkbox and the page makes a JSONP call to<code> /eat?callback=jsonpCallback_&lt;timestamp&gt;,</code> which hands back a token shaped like <code>valid_20260521033009_cfe592644a1fdc56930624518ab3bcf7</code>, that is, <code>valid_&lt;YYYYMMDDhhmmss&gt;_&lt;32-hex&gt;</code>. The endpoint also sets a <code>gfsessionid</code> cookie, the default cookie name of the Go <a href="https://goframe.org/">GoFrame</a> web framework. That cookie is our first tell about the backend stack. The &#8220;CAPTCHA&#8221; itself is theater: the callback parameter is never validated, so the gate&#8217;s only real job is to keep casual visitors and crawlers from deep-linking straight to the payload.</p>



<p></p>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:27% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="614" height="2048" src="https://censys.com/wp-content/uploads/image-137.png" alt="" class="wp-image-9632 size-full"/></figure><div class="wp-block-media-text__content">
<p>Token in hand, the page boots a Vue 3 single-page app (<code>/assets/index-02f64fb4.js</code>, a 444 KB Vite bundle) titled <code>Welcome | USPS</code>, and here is the design choice that makes this kit worth writing about. It does not draw a fake USPS page. It serves the visually compelling version, that to the victim appears to be a <strong>real</strong> one. Every template, stylesheet, font, and image is USPS&#8217;s genuine production asset, fetched straight off the phishing host under the path prefix <code>/us_post_usps/</code>. A single victim session pulls 66 distinct USPS-owned files, roughly 700 KB: USPS&#8217;s <code>head.html</code>, <code>header.html</code>, and <code>footer.html</code>, USPS&#8217;s Bootstrap CSS, two dozen navigation icons, the hero images, even six USPS-licensed Monotype web fonts.</p>



<p>Because the kit serves USPS&#8217;s real <code>head.html</code> verbatim, it also serves the live tags embedded in it: USPS&#8217;s Google Analytics 4 property <code>G-CSLL4ZEK4L</code> and a Google AdServices conversion beacon pointed at <code>https://www.usps.com/</code>. Every victim browser that touches this kit fires analytics hits into USPS&#8217;s own marketing pipeline. That is an odd and very useful artifact: USPS&#8217;s marketing team is, in principle, the one party on earth who can see this campaign&#8217;s traffic landing on their conversion dashboards from domains they do not own.</p>



<p>The <code>/us_post_usps/</code> prefix is the cleanest detection seam in the whole kit. It exists nowhere on the real <code>usps.com</code>. Any browser fetching <code>/us_post_usps/pages/head.html</code> is, by definition, on the kit, no matter which throwaway hostname it arrived through.</p>
</div></div>



<p><em>Image: V1 USPS package lure rendered from USPS&#8217;s own templates</em></p>



<p>Now the part the victim never sees. As they fill in the form, the SPA opens a WebSocket to <code>wss://&lt;host&gt;/ws?token=&lt;UUIDv4&gt;</code> and streams what they type, character by character. We captured this live (279 WebSocket frames across seven sessions), not from reading the bundle. The capture shows the kit exfiltrating each stabilized keystroke as it lands:</p>



<pre class="wp-block-code"><code>{"event":"input_text","content":{"type":"input_card","key":"cardName","text":"Rob"},...}
{"event":"input_text","content":{"type":"input_card","key":"cardName","text":"Robert Bbase"},...}
{"event":"input_text","content":{"type":"input_card","key":"cardName","text":"Robert Base"},...}
{"event":"input_text","content":{"type":"input_card","key":"cardNumber","text":"4242424242424242"},...}
{"event":"input_text","content":{"type":"input_card","key":"cvv","text":"145"},...}</code></pre>



<p></p>



<p>Note the typo <code>Robert Bbase</code> and its correction both reach the operator. Every intermediate state of the card number, expiry, and CVV is captured before the victim ever clicks submit. A parallel HTTP POST to <code>/&lt;random&gt;/api/input</code> double-ships the same values, so an abandoned, half-typed card is still harvested.</p>



<p>When the form is finally submitted, the operator&#8217;s backend does something most kits do not bother with. It runs a <strong>server-side BIN lookup</strong> (to validate the format of the value to protect against bogus data) against the card number and pushes the enriched record back into the victim&#8217;s browser over the same socket:</p>



<pre class="wp-block-code"><code>{
&nbsp;&nbsp;"event": "result_type",
&nbsp;&nbsp;"content": {
&nbsp;&nbsp;&nbsp;&nbsp;"type": "reject",
&nbsp;&nbsp;&nbsp;&nbsp;"value": { "data": {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"cardData": {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"cardBIN": { "bin": 424242, "bank": "STRIPE PAYMENTS UK, LTD.",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"country": "UNITED KINGDOM", "schema": "VISA", "type": "CREDIT", "level": "CLASSIC" },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"cardName": "Robert Base", "cardNumber": "4242424242424242", "expires": "02/30", "cvv": "145"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"cardHistory": &#91; ... ]
&nbsp;&nbsp;&nbsp;&nbsp;}}
&nbsp;&nbsp;}
}</code></pre>



<br>



<p>Two things stand out. First, <code>cardHistory</code> is an array: the kit remembers every card the victim has tried in the session, which is exactly the data structure you build if you intend to trap a victim in a &#8220;your card was declined, try another&#8221; loop and skim a second and third card. Second, the data is streamed via websocket <strong>live</strong>. The periodic config the backend returns carries operator-controlled fields including a kill-switch (<code>isBlock</code>) that, when flipped, bounces the victim to the real <code>www.usps.com</code>, and two capture templates whose internal labels are in Chinese (<code>PIN验证</code>, &#8220;PIN verification&#8221;; <code>邮箱验证</code>, &#8220;Email verification&#8221;) while every victim-facing string is in clean English. The operator works in one language and presents in another.</p>



<p>That dual-language config, captured straight out of the kit, is also the strongest in-artifact attribution signal we have. More on that below.</p>



<h2 class="wp-block-heading" id="The-Twin:-A-UPS-Campaign-Built-on-the-Same-Bones">The Twin: A UPS Campaign Built on the Same Bones</h2>



<p>Here is where the hunt paid off in a way I did not expect when I started with a single SMS link.</p>



<p>The seven hosts in this cluster did not come from DNS alone. DNS gave me the lookalike catalog on each known IP. To find the *other* IPs, I pivoted on what the kit looks like on the wire. The host&#8217;s HTTP service has a banner hash (http header hash), and one of those hashes turned out to be a near-perfect cluster boundary:</p>



<p><code>host.services.banner_hash_sha256="4fe8bec780537aa223406965415c1f85e83eec1f4e2181cf82e2a7b7516026e6" and host.services.protocol="HTTP"</code></p>



<p>That query returns exactly five hosts, globally. Not five thousand. Five. And they are spread across two different Tencent /18 prefixes (<code>43.157.128.0/18</code> and <code>43.173.64.0/18</code>), which is the tell that the operation is bigger than the prefix the lure lives on.</p>



<p>When I pulled those five hosts and visited them, they were not USPS. They were UPS.</p>



<div class="wp-block-media-text is-stacked-on-mobile" style="grid-template-columns:21% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="614" height="2048" src="https://censys.com/wp-content/uploads/image-136.png" alt="" class="wp-image-9630 size-full"/></figure><div class="wp-block-media-text__content">
<p>The UPS variant (call it V2) wears a similar fake Cloudflare gate, but the machinery behind it is a different build:</p>



<ul class="wp-block-list">
<li>The gate is English-only, with no twelve-language table, but the HTML hard-codes <code>&lt;html lang="zh-CN"&gt;:</code> a Chinese locale stamped on an English page, a small slip that survived the re-skin.</li>



<li>Instead of the JSONP token, clicking through fires a redirect chain: <code>/__theme/runtime/entry/verify</code> sets a cookie and 302s off-domain to <code>xupqrnn[.]one/us?__theme_site_ticket=&lt;32hex&gt;</code>, which chains through <code>/__theme/runtime/site/pass</code> and lands on the UPS SPA.</li>



<li>Both hops in that chain set a cookie, and both cookie names, contain the literal string <code>us_post_ups: theme_entry_verify_us_post_ups and theme_site_verify_us_post_ups</code>. That is the operator&#8217;s own internal name for the kit&#8217;s &#8220;theme&#8221;, leaked twice, in two independent endpoints. Neither name has any business existing on real UPS or USPS infrastructure, which makes either one a SIEM-grade indicator on its own.</li>



<li>The UPS SPA&#8217;s favicon still points at <code>/usps/images/logo_mobile.svg</code>. The brand on screen says UPS; the favicon path says USPS. That is a fork artifact, left in place when the operator copied the USPS kit and re-themed it for UPS.</li>



<li>The backend is no longer Go. Request any path the kit does not route and you get Spring Boot&#8217;s stock JSON error, timestamp and all:</li>
</ul>



<p><code>{"timestamp":"2026-05-21T05:33:43.670+08:00","status":404,"error":"Not Found","path":"/__theme/runtime/entry/verify"}</code></p>
</div></div>



<p><em>Image: V2 UPS lure, same kit family, different brand</em></p>



<p>The second campaign represents a sibling within the same kit lineage that mirrors the real-time exfiltration model, the Tencent hosting footprint, and the shared Caddy reverse proxy, yet it swaps the USPS costume for a UPS one across two distinct technical platforms, GoFrame and Spring Boot. It is the signature of a single operator managing parallel brands, where the infrastructure and code heritage are shared, even if the specific backend implementation is not.</p>



<h2 class="wp-block-heading" id="Same-Operator,-Two-Brands">Same Operator, Two Brands</h2>



<p>Lining up the two variants side by side makes the shared parentage hard to miss, and gives defenders a clean V1-versus-V2 discriminator.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td></td><td><strong>V1 (USPS)</strong></td><td><strong>V2 (UPS)</strong></td></tr><tr><td>Backend</td><td>GoFrame (Go)</td><td>Spring Boot (Java)</td></tr><tr><td>Lure gate</td><td>12-language fake Cloudflare</td><td>English fake Cloudflare, <code>lang="zh-CN"</code></td></tr><tr><td>Token / handoff</td><td><code>/eat </code>JSONP <code>valid_&lt;14&gt;_&lt;32hex&gt;</code></td><td><code>/__theme/runtime/*</code> 302 chain</td></tr><tr><td>Cookies</td><td><code>gfsessionid</code> (GoFrame default)</td><td><code>theme_*_verify_us_post_ups</code></td></tr><tr><td>SPA title</td><td><code>Welcome | USPS</code></td><td><code>Welcome | UPS</code></td></tr><tr><td>Favicon</td><td>/<code>us_post_usps/124.png</code></td><td><code>/usps/images/logo_mobile.svg</code> (USPS-pathed)</td></tr><tr><td>Brand asset prefix</td><td><code>/us_post_usps/*</code> (real USPS templates)</td><td><code>/usps/*</code></td></tr><tr><td>Port-80 banner hash</td><td><code>8e5546c83d…</code></td><td><code>4fe8bec780…</code> (5 hosts globally)</td></tr><tr><td>Reverse proxy</td><td><code>Via: 1.1 Caddy</code></td><td>V<code>ia: 1.1 Caddy</code></td></tr></tbody></table></figure>



<p>The seven confirmed hosts break down as two V1 USPS hosts and five V2 UPS hosts:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>IP</strong></td><td><strong>Prefix</strong></td><td><strong>Kit</strong></td><td><strong>Backend</strong></td><td><strong>Censys DNS names (2026-05-20)</strong></td></tr><tr><td><a href="https://platform.censys.io/hosts/43.157.174.200">`43.157.174.200`</a></td><td>43.157.128.0/18</td><td>V1 USPS</td><td>GoFrame</td><td>306</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.157.158.108">`43.157.158.108`</a></td><td>43.157.128.0/18</td><td>V1 USPS</td><td>GoFrame</td><td>0 in snapshot*</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.157.151.131">`43.157.151.131`</a></td><td>43.157.128.0/18</td><td>V2 UPS</td><td>Spring Boot</td><td>197</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.157.148.168">`43.157.148.168`</a></td><td>43.157.128.0/18</td><td>V2 UPS</td><td>Spring Boot</td><td>202</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.173.100.171">`43.173.100.171`</a></td><td>43.173.64.0/18</td><td>V2 UPS</td><td>Spring Boot</td><td>64</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.173.104.156">`43.173.104.156`</a></td><td>43.173.64.0/18</td><td>V2 UPS</td><td>Spring Boot</td><td>12</td></tr><tr><td><a href="https://platform.censys.io/hosts/43.173.105.83">`43.173.105.83`</a></td><td>43.173.64.0/18</td><td>V2 UPS</td><td>Spring Boot</td><td>32</td></tr></tbody></table></figure>



<p><code>*43.157.158.108</code> showed no HTTP service and zero DNS names in the snapshot, only SSH on a different OpenSSH build than its siblings. A live probe against one of its <code>usps.xupq*.one</code> names returned <code>Server: GoFrame HTTP Server </code>with a valid JSONP token, confirming it as a second V1 USPS host whose web service simply was not in the cache at scan time.</p>



<p>A few infrastructure notes that shape how durable each pivot is:</p>



<ul class="wp-block-list">
<li>All six HTTP-serving hosts share one <strong>port-443 TLS banner hash</strong> and front everything with <code>Via: 1.1 Caddy</code>. The shared TLS config is real, but on its own the TLS hash is far too common (over a million hits) to use globally; it only becomes useful ANDed with the Tencent ASN.</li>



<li>Six of the seven run the same OpenSSH 8.9p1 build, yet <strong>every host has a distinct SSH host key</strong>. Identical golden-image clones would share host keys. These do not, which means the operator provisions each VM individually. SSH host-key pivoting is therefore a dead end here, worth saying out loud so nobody wastes time on it.</li>



<li>Nobody is patching. Every host carries the same stale SSH CVE set, regreSSHion (CVE-2024-6387) and friends, untouched. That is consistent with a spin-up, run-until-burned, abandon model. Potentially attributed to the vendored image of the hosting provider.</li>
</ul>



<h2 class="wp-block-heading" id="Where-Is-This-Thing,-Actually?">Where Is This Thing, Actually?</h2>



<p>Geolocation on this cluster is a useful reminder that the obvious answer is usually wrong. The seven hosts give four different &#8220;locations&#8221; depending on which signal you trust:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Signal</strong></td><td><strong>Says</strong></td></tr><tr><td>ASN owner</td><td>Tencent (TENCENT-NET-AP, country code CN)</td></tr><tr><td>Whois network name (<code>43.157.128.0/18</code>)</td><td><code>6 COLLYER QUAY</code> (Singapore CBD address)</td></tr><tr><td>Whois network name (<code>43.173.64.0/18</code>)</td><td><code>ACEVILLE PTE.LTD.</code> (Tencent&#8217;s Singapore entity)</td></tr><tr><td>Censys geo (43.157.x)</td><td>São Paulo, Brazil</td></tr><tr><td>Censys geo (43.173.x)</td><td>Santa Clara, California</td></tr><tr><td>Server-side clock (both kits)</td><td><code>+08:00</code></td></tr></tbody></table></figure>



<p>None of São Paulo, Santa Clara, Singapore, or Beijing is a reliable physical-server location. The realistic read is: VMs inside Tencent&#8217;s overseas cloud, billed to a Singapore entity, owned by a Chinese ASN, with geo-IP records that reflect intended customer regions rather than where the metal sits.</p>



<p>The one signal that shows up consistently is the <code>+08:00</code> server clock, emitted independently by both backends (the Go kit&#8217;s token timestamp and the Spring Boot kit&#8217;s JSON error timestamp). That is the servers&#8217; configured locale, <code>Asia/Shanghai</code>, and it is worth being precise about what it does and does not tell us. It is a property of the deployment, not a GPS pin on the operator. A Chinese-speaking operator working from anywhere can set their Linux boxes to CST.</p>



<h2 class="wp-block-heading" id="On-Attribution">On Attribution</h2>



<p>I am going to be disciplined here, because this is where smishing writeups tend to over-reach.</p>



<p>Everything about this kit is consistent with the loosely-tracked Chinese-language smishing-as-a-service ecosystem often labeled &#8220;Smishing Triad&#8221;: the USPS and delivery-brand themes, the multilingual fake Cloudflare gate, the Tencent-on-Singapore-whois hosting, the dual-language operator config with Chinese internal labels and English victim copy, and the polished realtime card-skimming with server-side BIN enrichment. Those are real, in-artifact signals.</p>



<p>What I do <strong>not</strong> have is a shared TLS certificate, a shared backend IP, or a shared body hash tying this specific infrastructure to a previously published IOC list. So I am not asserting attribution to that cluster or to any named operator. The evidence supports &#8220;consistent with a known ecosystem,&#8221; and stops there.</p>



<h2 class="wp-block-heading" id="Hunting-It-Yourself">Hunting It Yourself</h2>



<p>The whole point of doing this in Censys is that you can reproduce and monitor it. Here are the pivots, ordered by how durable I expect them to be.</p>



<p><strong>Strongest, the V2 banner hash (returns exactly the five UPS-themed hosts):</strong></p>



<p><code>host.services.banner_hash_sha256="4fe8bec780537aa223406965415c1f85e83eec1f4e2181cf82e2a7b7516026e6" and host.services.protocol="HTTP"</code></p>



<div id="censys-title-with-content-block_141e1bd7cdf61cf9a2f3a42ab07c4f26" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Follow Along in Censys</h3>
                    </div>
                            </div>
        </div>
       
                    <div class="block-content">
                <p>Open the query host.services.banner_hash_sha256=&#8221;4fe8bec780537aa223406965415c1f85e83eec1f4e2181cf82e2a7b7516026e6&#8243; and host.services.protocol=&#8221;HTTP&#8221; in Censys Platform</p>
            </div>
                                            <div class="button-wrapper">
                    <a href="https://platform.censys.io/search?q=host.services%3A%28banner_hash_sha256%3D%224fe8bec780537aa223406965415c1f85e83eec1f4e2181cf82e2a7b7516026e6%22+and+protocol%3D%22HTTP%22%29&#038;utm_source=censys_blog" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" target="_blank" rel="nofollow">
                        <span class="avia_iconbox_title">View in Censys</span>
                    </a>
                </div>
                        </div>
</div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>



<p><strong>The V1 USPS banner hash (separates the GoFrame USPS hosts):</strong></p>
</blockquote>



<p><code>host.services.banner_hash_sha256="8e5546c83d764e1287b55cbe868a45344a6f0afa9782d798d03b2b7cfc53ec38" and host.services.protocol="HTTP"</code></p>



<p><strong>JA4T transport fingerprints, scoped to the Tencent ASN so they stay tight</strong> (they survive application-layer re-skins that would flip the body or banner hash):</p>



<pre class="wp-block-code"><code>host.services.ja4tscan.fingerprint="65160_2-4-8-1-3_1424_7_1-2-4-8-16" and host.autonomous_system.asn=132203
host.services.ja4tscan.fingerprint="59136_2-4-8-1-3_1424_7_1-2-4-8-16" and host.autonomous_system.asn=132203</code></pre>



<br>



<p>The first matches the cluster hosts in <code>43.157.128.0/18</code>; the second the hosts in <code>43.173.64.0/18</code>.</p>



<p><strong>And the move that started everything</strong>: take any one of these IPs (or a fresh lure hostname) and pull its DNS history in Censys. That is what turns a single disposable domain into the operator&#8217;s whole rotation.</p>



<h2 class="wp-block-heading">For Defenders</h2>



<p>Hostnames and IPs in this operation are disposable by design. Detections written against them go stale in days. Detections written against the kit&#8217;s structure should outlive several re-skins.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Where</strong></td><td><strong>Indicator</strong></td><td><strong>Why it lasts</strong></td></tr><tr><td>SMS gateway / URL inspection</td><td>substrings <code>xupq</code>, <code>deliwek</code>, <code>xupqrnn</code>, <code>gwrpfjx</code> in delivery-themed URLs</td><td>the operator&#8217;s domain-generation shapes</td></tr><tr><td>Proxy / EDR (paths)</td><td><code>/us_post_usps/, /__theme/runtime/site/pass, /__theme/runtime/entry/verify, /&lt;random&gt;/api/input</code></td><td>none of these exist on real USPS or UPS</td></tr><tr><td>Proxy / EDR (cookies)</td><td><code>theme_*_verify_us_post_ups</code>, <code>gfsessionid</code> on a &#8220;USPS&#8221;/&#8221;UPS&#8221; host</td><td>the operator&#8217;s theme name; GoFrame&#8217;s default cookie</td></tr><tr><td>Body inspection</td><td>JSONP matching <code>valid_d{14}_[0-9a-f]{32}</code>; Spring Boot JSON 404 with <code>+08:00</code> on a delivery-brand host</td><td>kit-specific shapes</td></tr><tr><td>Censys monitoring</td><td>the two banner hashes above; the ASN-scoped JA4T fingerprints</td><td>banner hash returns exactly the cluster; JA4T survives re-skins</td></tr><tr><td>Brand-side analytics</td><td>hits to USPS GA4 property <code>G-CSLL4ZEK4L</code> from any host other than <code>www.usps.com</code></td><td>a seam only USPS&#8217;s own marketing team can see</td></tr></tbody></table></figure>



<p>The Tencent prefixes <code>43.157.128.0/18</code> and <code>43.173.64.0/18</code> are also reasonable block-list candidates for most enterprises, since legitimate destinations on operator-occupied overseas cloud prefixes are rare.</p>



<h2 class="wp-block-heading" id="Conclusion"><strong>Conclusion</strong></h2>



<p>The lesson I keep relearning is that the artifact in your messages inbox is the smallest part of the story. One USPS smishing text gave up one hostname. That hostname gave up one IP. And Censys&#8217;s view of that IP, especially its DNS history, unrolled an operation with hundreds of disposable lookalike domains, a real-time operator-piloted skimming kit that serves the genuine USPS website as its own bait, and an entire parallel UPS campaign built on the same kit and the same internal theme name.</p>



<p>What makes DNS so valuable here is that it is the one layer the operator cannot make disposable. They can burn a hostname in a day, rotate an IP, re-skin USPS into UPS, swap Go for Java. What they cannot do is un-resolve the names they have already used, because Censys already saw them. The cosmetic layer is cheap and changes constantly. The structure, the asset paths, the cookie theme name, the banner hash, and the DNS history, is where the operation actually lives, and it is where it can be tracked.</p>



<h2 class="wp-block-heading" id="Indicators-of-Compromise">Indicators of Compromise</h2>



<p><strong>Cluster hosts (Tencent, ASN 132203)</strong></p>



<pre class="wp-block-code"><code>43.157.174.200&nbsp; &nbsp; V1 USPS (GoFrame) &nbsp; 43.157.128.0/18
43.157.158.108&nbsp; &nbsp; V1 USPS (GoFrame) &nbsp; 43.157.128.0/18
43.157.151.131&nbsp; &nbsp; V2 UPS&nbsp; (Spring)&nbsp; &nbsp; 43.157.128.0/18
43.157.148.168&nbsp; &nbsp; V2 UPS&nbsp; (Spring)&nbsp; &nbsp; 43.157.128.0/18
43.173.100.171&nbsp; &nbsp; V2 UPS&nbsp; (Spring)&nbsp; &nbsp; 43.173.64.0/18
43.173.104.156&nbsp; &nbsp; V2 UPS&nbsp; (Spring)&nbsp; &nbsp; 43.173.64.0/18
43.173.105.83 &nbsp; &nbsp; V2 UPS&nbsp; (Spring)&nbsp; &nbsp; 43.173.64.0/18</code></pre>



<br>



<p><strong>Lure / handoff hostnames</strong></p>



<pre class="wp-block-code"><code>usps.xupqnqz&#91;.]one&nbsp; &nbsp; &nbsp; V1 USPS lure

xupqnqz&#91;.]one &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; V1 apex

gwrpfjx&#91;.]life&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; V2 UPS lure

xupqrnn&#91;.]one &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; V2 cross-domain handoff</code></pre>



<br>



<p><strong>Hostname-generation shapes</strong> (hundreds of disposable instances)</p>



<pre class="wp-block-code"><code>usps.xupq*&#91;.]one&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 78 observed

informed.deliwek*&#91;.]shop&nbsp; 250 observed

*&#91;.]life (random apex)&nbsp; &nbsp; 334 observed

deliwek*&#91;.]shop &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 17 observed</code></pre>





<br>



<p><strong>Banner hashes</strong></p>



<pre class="wp-block-code"><code>4fe8bec780537aa223406965415c1f85e83eec1f4e2181cf82e2a7b7516026e6   V2 UPS (port 80, 5 hosts globally)
8e5546c83d764e1287b55cbe868a45344a6f0afa9782d798d03b2b7cfc53ec38   V1 USPS (port 80)
</code></pre>



<br>



<p><strong>Cookies / paths / token shape</strong></p>



<pre class="wp-block-code"><code>gfsessionid                          GoFrame default (V1)
theme_entry_verify_us_post_ups=1     V2 redirect chain
theme_site_verify_us_post_ups=1      V2 redirect chain
/us_post_usps/                       V1 USPS-asset path prefix
/__theme/runtime/entry/verify        V2 handoff
/__theme/runtime/site/pass           V2 handoff
valid_&lt;YYYYMMDDhhmmss&gt;_&lt;32-hex&gt;      V1 JSONP token shape
</code></pre>



<br>



<h2 class="wp-block-heading" id="More-Reading">More Reading</h2>



<ol class="wp-block-list">
<li>Resecurity, &#8220;&#8216;Smishing Triad&#8217; Targeted USPS and US Citizens for Data Theft&#8221; (Aug 2023), the original naming of the cluster. <a href="https://www.resecurity.com/blog/article/smishing-triad-targeted-usps-and-us-citizens-for-data-theft">https://www.resecurity.com/blog/article/smishing-triad-targeted-usps-and-us-citizens-for-data-theft<br></a></li>



<li>Brian Krebs, &#8220;Phishers Spoof USPS, 12 Other Nat&#8217;l Postal Services,&#8221; Krebs on Security (Oct 2023), an early account of the USPS-themed campaign and its reuse of USPS&#8217;s own Google Analytics tag. https://krebsonsecurity.com/2023/10/phishers-spoof-usps-12-other-natl-postal-services/</li>
</ol>



<ol start="3" class="wp-block-list">
<li>Silent Push, &#8220;Smishing Triad: Chinese eCrime Group Targets 121+ Countries, Intros New Banking Phishing Kit&#8221; (Apr 2025), documents the Lighthouse kit and its real-time front-end-to-backend victim sync. <a href="https://www.silentpush.com/blog/smishing-triad/">https://www.silentpush.com/blog/smishing-triad/<br></a></li>



<li>Palo Alto Networks Unit 42, &#8220;The Smishing Deluge: China-Based Campaign Flooding Global Text Messages.&#8221; https://unit42.paloaltonetworks.com/global-smishing-campaign/</li>
</ol>



<ol start="5" class="wp-block-list">
<li>Google, &#8220;Fighting scams with legal and legislative action&#8221; (Nov 2025), Google&#8217;s civil action against the operators of the Lighthouse phishing-as-a-service kit. https://blog.google/company-news/outreach-and-initiatives/public-policy/legal-action-and-legislation-fight-scammers/</li>
</ol>



<ol start="6" class="wp-block-list">
<li>Brian Krebs, &#8220;Google Sues to Disrupt Chinese SMS Phishing Triad,&#8221; Krebs on Security (Nov 2025), names &#8220;Wang Duo Yu&#8221; and &#8220;CoSmile&#8221; as the kit developers. https://krebsonsecurity.com/2025/11/google-sues-to-disrupt-chinese-sms-phishing-triad/</li>
</ol>
<p>The post <a href="https://censys.com/blog/following-a-usps-smishing-kit-through-censys-dns-data/">The Package That Never Shipped: Following a USPS Smishing Kit Through Censys DNS Data</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>The Mythos Era of Threat Defense: Censys Sees Exposures and Adversary Infrastructure First</title>
      <link>https://censys.com/blog/mythos-exposure-management-censys/</link>
      <description><![CDATA[<p>This is not a panic blog.&#160;&#160; Security has always been a cat-and-mouse game between attacker and defender. Reaper answered Creeper in 1972. VirusScan arrived in 1987. EDR, SIEM, CTI, and vulnerability management all emerged because defenders and attackers forever adapted to one another. Mythos is the latest turn of that wheel. The wrinkle this time [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/mythos-exposure-management-censys/">The Mythos Era of Threat Defense: Censys Sees Exposures and Adversary Infrastructure First</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Attack Surface Management</category>
      <category>External Attack Surface Management</category>
      <guid isPermaLink="false">https://censys.com/?p=9413</guid>
      <pubDate>Wed, 03 Jun 2026 20:07:59 +0000</pubDate>
      <content:encoded><![CDATA[<p>This is not a panic blog.&nbsp;&nbsp;</p>



<p>Security has always been a cat-and-mouse game between attacker and defender. Reaper answered Creeper in 1972. VirusScan arrived in 1987. EDR, SIEM, CTI, and vulnerability management all emerged because defenders and attackers forever adapted to one another.</p>



<p>Mythos is the latest turn of that wheel. The wrinkle this time is <em>speed</em>. Ease of automation.</p>



<p>As of May 22, 2026, <a href="https://www.anthropic.com/research/glasswing-initial-update">Mythos Preview has found</a> what it estimates are 6,202 high- or critical-severity vulnerabilities across 1,000+ open-source projects. <strong>Less than 1% have been patched or have public disclosures</strong>.</p>



<p>An example: <a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-claude-mythos-autonomous-offensive-thresho/">this FreeBSD NFS</a> remote code execution flaw.&nbsp;</p>



<p>As for adversary usage of frontier models, <a href="https://www.anthropic.com/news/disrupting-AI-espionage">Anthropic has also reported</a> a large-scale espionage campaign where attackers used agentic AI to carry out major portions of the operation across dozens of targets.</p>



<p>AI is automating away repetitive work everywhere. Cybercrime is no different. Agents can handle reconnaissance, testing, reproduction, exploit development, infrastructure recycling, and operational follow-through.&nbsp;</p>



<p>Censys has always hung our hat on our superior speed, <a href="https://censys.com/blog/announcing-our-attack-surface-management-platform/">going back to our ASM announcement in 2019</a>. The AI breakthroughs have been staggering since then – we never anticipated how prescient our desire was to build a real-time map of the entire public Internet.</p>



<p><a href="https://censys.com/solutions/external-exposure-management">Censys Attack Surface Management</a> helps security teams understand what they expose. <a href="https://censys.com/platform">Censys Platform</a> helps SOC, CTI, and detection engineering teams understand what adversaries expose.</p>



<p>In the Mythos era, both matter. Let’s talk about why, starting with exposures.</p>



<h2 class="wp-block-heading" id="Exposure-Management-in-the-Mythos-Era">Exposure Management in the Mythos Era</h2>



<p>Exposure management is the practice of continuously finding, validating, prioritizing, and reducing Internet-facing risk when AI can accelerate vulnerability discovery, exploit development, and attacker reconnaissance.</p>



<p>Same as it always was, just under a faster clock.</p>



<h2 class="wp-block-heading" id="Why-ASM-Becomes-the-First-Control-Plane">Why ASM Becomes the First Control Plane</h2>



<p>Censys cannot protect against every path to compromise.</p>



<p>Social engineering exists. Identity attacks exist. Insider risk exists. Supply chain compromise exists. A user can still approve a bad OAuth grant, enter credentials into a fake login page, or run something they should not run.</p>



<p>But if an attacker, or an army of agents working for an attacker, wants to operate at scale, the public Internet is the lowest-lift place to start.</p>



<p>It is remote. It is parallelizable. It is measurable. It is full of services, ports, certificates, software, DNS records, cloud resources, admin panels, developer tools, forgotten test environments, and vulnerable systems waiting to be found.</p>



<p>That makes ASM the first control plane for Mythos-era exposure management.</p>



<p>Traditional disciplines (vulnerability management, cloud security, NDR alerts, etc.) still matter. <strong>But when the vulnerability is Internet-reachable</strong>, <strong>outside-in visibility becomes the first line of prioritization</strong>.</p>



<p>Censys ASM helps answer the questions that matter in that moment:</p>



<ul class="wp-block-list">
<li>What assets do we expose?</li>



<li>Which services are reachable?</li>



<li>Which ports are open?</li>



<li>Which software, certificates, protocols, and web properties are present?</li>



<li>Which vulnerabilities are associated with those services?</li>



<li>Which exposures changed recently?</li>



<li>Which risks should remediation teams handle first?</li>
</ul>



<p>In an AI-speed vulnerability cycle, that context is not a luxury. It is how teams decide what to fix first.</p>



<h2 class="wp-block-heading" id="The-Exposure-Problem-AI-Makes-Impossible-to-Ignore">The Exposure Problem AI Makes Impossible to Ignore</h2>



<p>Most organizations do not have one clean, static attack surface.</p>



<p>There are mergers, subsidiaries, regional teams, contractor-managed infrastructure!&nbsp;</p>



<p>And you&#8217;re bound to have abandoned projects and experiments. Forgotten load balancers. Old DNS records. SaaS configuration buried in portals, each with a different solitary admin. Temporary GPU instances. Jupyter notebooks. AI demos.&nbsp;</p>



<p>A traditional inventory might know the approved assets. A cloud console might know what exists in one provider. A vulnerability scanner might know what it can reach on expected ports. A CMDB might know what someone remembered to register.</p>



<p>Attackers do not care about those boundaries. They care about what is reachable.</p>



<p>That is why Censys ASM continuously maps the public-facing attack surface. Teams need to see what the Internet sees, not just what their internal systems believe should exist.</p>



<p>If AI helps attackers test more hosts, more ports, more paths, more headers, more version combinations, more default panels, and more obscure service fingerprints, then the defender’s data has to keep up.</p>



<p>“AI will magically exploit every vuln” – <strong>no.</strong> It’s dumber than that: <strong>more automation creates more attempts. </strong>Brute force by intelligent, subject-authoritative bots.</p>



<h2 class="wp-block-heading" id="Censys-ASM:-Comprehensive-Coverage-for-AI-Speed">Censys ASM: Comprehensive Coverage for AI-Speed</h2>



<p>Censys ASM is built for the problem Mythos amplifies: discovering and prioritizing Internet-facing exposure before it becomes an incident.</p>



<p>If your ASM program only looks where you expect services to live, it will miss the places where real risk accumulates. AI tools and developer infrastructure often do not show up on a tidy list of standard ports. They show up wherever someone got a demo working, opened a port, pushed a test environment, or forgot to clean up.</p>



<p>Censys ASM helps teams discover assets and services across the public Internet, including non-standard ports and unexpected service locations. That matters when the riskiest exposure is not the corporate website. It might be an AI service, Jupyter notebook, model dashboard, admin panel, debug server, or forgotten development tool listening somewhere your normal controls do not inspect.</p>



<h2 class="wp-block-heading" id="Playbook-1:-Find-What-Others-Miss-Across-All-65,535-Ports">Playbook 1: Find What Others Miss Across All 65,535 Ports</h2>



<p>A lot of exposure management failures begin with a vendor assumption:</p>



<p>“Nobody runs that there.”</p>



<p>Except – someone does!</p>



<p>AI and ML tools are a good example. Ollama, Jupyter, TensorBoard, MLflow, Spark, Ray, Xinference, local LLM UIs, GPU dashboards, and experimental model services can appear on non-standard ports. Some are intended for local development. Some are spun up for a week. Some are created by data science teams that move faster than security review. Some are forgotten after the demo.</p>



<p>That is exactly the kind of asset an attacker would rather find before you do.</p>



<p>A Mythos-era exposure management program should start with full-port visibility and searches for AI-adjacent services.</p>



<p>Example ASM QL patterns:</p>



<pre class="wp-block-code"><code>host.services.http.response.body: {Ollama, Xinference}
or web_entity.instances.http.response.body: {Ollama, Xinference}
or host.services.port: {11434, 8080, 7860}
or web_entity.instances.port: {11434, 8080, 7860}</code></pre>



<p>For broader AI and ML workflow detection:</p>



<pre class="wp-block-code"><code>host.services.port: {8888, 6006, 5000, 7077, 8080, 8265}
or host.services.software.product: {Jupyter, TensorBoard, MLflow, Spark, Ray}
or host.services.service_name: {Jupyter, TensorBoard, MLflow, Spark, Ray}
or web_entity.instances.port: {8888, 6006, 5000, 7077, 8080, 8265}
or web_entity.instances.software.product: {Jupyter, TensorBoard, MLflow, Spark, Ray}
or web_entity.instances.service_name: {Jupyter, TensorBoard, MLflow, Spark, Ray}</code></pre>



<p>The goal is not to declare every AI tool malicious.</p>



<p>The goal is to find Internet-facing AI infrastructure that security did not approve, does not monitor, or cannot explain.</p>



<p>That is the difference between “we have a policy” and “we know what is exposed.”</p>



<h2 class="wp-block-heading" id="Playbook-2:-Triage-New-Vulnerabilities-During-Resolution-Hour">Playbook 2: Triage New Vulnerabilities During Resolution Hour</h2>



<p>When a critical CVE is disclosed, most organizations enter some version of the same scramble.&nbsp;</p>



<p>In the Mythos era, that first hour matters more. Call it Resolution Hour.</p>



<p>The objective is not to fix everything in 60 minutes (wouldn’t that be nice). The objective is to resolve the most important uncertainties quickly.</p>



<p>A strong Resolution Hour workflow looks like this:</p>



<ol class="wp-block-list">
<li>Search ASM for affected software, products, services, ports, banners, web fingerprints, and vulnerability identifiers (using the <a href="https://censys.com/censys-arc/rapid-response-advisories">Censys ARC rapid response queries</a>).</li>



<li>Prioritize assets exposed to the public Internet.</li>



<li>Check whether Censys indicates active exploitation or other high-risk context.</li>



<li>Segment findings by ownership, business unit, cloud provider, geography, or asset tag.</li>



<li>Route the most urgent assets into remediation workflows.</li>



<li>Set alerts so newly discovered exposure is not missed after the first search.</li>
</ol>



<p>This is where Censys ASM and vulnerability management meet.</p>



<p>Vulnerability management teams have massive lists of theoretical risk. Censys ASM helps identify reachable risk. The intersection helps set priorities for the entire program.</p>



<h2 class="wp-block-heading" id="Playbook-3:-Hunt-for-Shadow-AI-and-Exposed-AI-Services">Playbook 3: Hunt for Shadow AI and Exposed AI Services</h2>



<p>Again, let’s use AI tools as an example. Businesses are urging their use faster than methodologies can be vetted.&nbsp;</p>



<p>Data scientists, engineers, analysts, and product teams are experimenting with AI tools recklessly to fulfil these mandates. Security doesn’t need to block all of that (<em>arguably</em>), but does need to know when it becomes an exposure.</p>



<p>Censys ASM helps teams identify AI-related cloud assets using provider metadata, tags, service fingerprints, and exposed ports.</p>



<p>Example ASM QL pattern for cloud-tagged AI experiments:</p>



<pre class="wp-block-code"><code>(
&nbsp;&nbsp;host.cloud: {aws, google, azure, "Amazon Aws", "Google Cloud", "Microsoft Azure", "Microsoft Corporation"}
&nbsp;&nbsp;or cloud.aws.tags.value: *
&nbsp;&nbsp;or cloud.gcp.tags: *
&nbsp;&nbsp;or cloud.azure.tags: *
)
and
(
&nbsp;&nbsp;cloud.aws.tags.value: {"ai-test", "gpu-instance", "jupyter"}
&nbsp;&nbsp;or cloud.gcp.tags.value: {"ai-test", "gpu-instance", "jupyter"}
&nbsp;&nbsp;or cloud.azure.tags.value: {"ai-test", "gpu-instance", "jupyter"}
&nbsp;&nbsp;or tags: {"ai-test", "gpu-instance", "jupyter"}
&nbsp;&nbsp;or host.tags: {"ai-test", "gpu-instance", "jupyter"}
)</code></pre>



<p>That query is not the end state. It is a starting point.</p>



<p>Every organization will have its own naming conventions. Search for your internal project names, GPU naming patterns, model names, business unit tags, sandbox labels, and cloud account conventions.</p>



<p>Then operationalize it:</p>



<ul class="wp-block-list">
<li>Save the query.</li>



<li>Alert on new matches.</li>



<li>Send notifications to Slack, Teams, Jira, ServiceNow, or the workflow your teams already use.</li>



<li>Review whether the exposure is approved, temporary, misconfigured, or dangerous.</li>



<li>Track recurrence.</li>
</ul>



<p>The important shift is that ASM is not just a dashboard. It’s a control loop.</p>



<h2 class="wp-block-heading" id="Playbook-4:-Close-Dangling-DNS-Before-Agents-Follow-It">Playbook 4: Close Dangling DNS Before Agents Follow It</h2>



<p>Dangling DNS is exactly the kind of boring exposure that survives because everyone assumes someone else owns it.</p>



<p>A team shuts down a bucket, app, page, or third-party service. The DNS record stays behind. Now a trusted subdomain may still point at a resource your organization no longer controls.</p>



<p>Boom: subdomain takeover.</p>



<p>In the Mythos era, this matters even more. Dangling DNS is easy to automate. Attackers do not need a brilliant exploit chain to abuse a forgotten CNAME. They need to find it, claim the abandoned resource, and put content behind a domain your users and systems already trust.</p>



<p>Censys ASM helps close that gap by detecting dangling DNS risks across CNAMEs, NS records, and third-party services like S3, GitHub, Heroku, and others. These detections are powered by Censys Internet Map data, and ASM shows the impacted name, the DNS record, and the evidence behind the finding.</p>



<p>From there, the fix is usually straightforward: update or remove the stale DNS record, or reclaim the decommissioned resource before someone else does.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="2000" height="1324" src="https://censys.com/wp-content/uploads/image-1.jpeg" alt="" class="wp-image-9414" style="aspect-ratio:1.5105791115232234;width:909px;height:auto"/></figure>



<h2 class="wp-block-heading" id="Playbook-5:-Give-AI-Agents-Safe-Access-to-Real-Attack-Surface-Data">Playbook 5: Give AI Agents Safe Access to Real Attack Surface Data</h2>



<p>Security teams are going to use AI agents too. They should; make it a fair fight.</p>



<p>But if an AI workflow is going to reason about your attack surface, it needs real data. Not a stale export or an old spreadsheet.&nbsp;</p>



<p><a href="https://docs.censys.com/docs/asm-mcp-server">Censys ASM MCP Server</a> gives AI-assisted workflows structured access to verified attack surface data, so teams can ask practical questions:</p>



<ul class="wp-block-list">
<li>What Internet-facing assets are affected by this CVE?</li>



<li>What exposed services appeared this week?</li>



<li>Which AI-related assets are not approved?</li>



<li>Which dangling DNS findings need review?</li>



<li>Which high-risk exposures should become tickets?</li>
</ul>



<p>Give your own agents bounded access to current, external visibility so it can help triage, summarize, and route work without hallucinating assets or working from stale data.</p>



<p>If attackers are using AI to move faster, defenders should too. The pattern is, AI needs current and correct context.</p>



<h2 class="wp-block-heading" id="Where-Does-Censys-Platform-Fit?">Now, Where Does Censys Platform Fit?</h2>



<p>Censys ASM answers one half of the Mythos problem:</p>



<p>“What do we expose?”</p>



<p>Censys Platform answers the other:</p>



<p>“What are adversaries exposing?”</p>



<p>That matters because attackers are not static. Their infrastructure changes. Their domains rotate. Their kits mutate. Their hosting shifts. Their certs change. Their command-and-control servers churn. Their phishing pages move between compromised sites and disposable infrastructure.</p>



<p>An attacker can use agents to test lure variants, generate infrastructure, rotate domains, mutate templates, search for exposed services, and evade simple blocklists. The result is an unlocked scale.</p>



<p>That is where CTI, threat hunting, and <a href="https://censys.com/blog/ultimate-guide-to-detection-engineering-with-censys/">detection engineering</a> teams need better Internet intelligence.</p>



<p>A single IOC is rarely enough. An IP, a domain, a hash – these are not the detection. These are seeds!</p>



<h2 class="wp-block-heading" id="The-Domain-Is-Not-the-Detection.-The-Domain-Is-the-Seed.">The Domain Is Not the Detection. The Domain Is the Seed.</h2>



<p>Let’s say a CTI team receives a suspicious domain from a phishing report.</p>



<p>The fastest possible detection is obvious:</p>



<p><code>Alert when url_domain = "example-bad-domain.com"</code></p>



<p>That might catch one thing. It misses the campaign.</p>



<p>The better workflow starts by opening the domain in Censys and asking: “What are the <em>real</em> indicators here?”</p>



<p>Maybe the answer is a certificate pattern. Maybe a redirect path. Maybe a hosting provider and port combination. Maybe a web title. A JavaScript artifact. An HTTP header. A favicon hash. An exposed admin panel. Or even – the same lure template deployed across dozens of hosts.</p>



<p>That is the move from IOC matching to detection engineering.</p>



<p>Censys Platform helps teams make that move. Instead of asking “should we block this one domain?” teams can ask:</p>



<ul class="wp-block-list">
<li>What else looks like this?</li>



<li>What did it expose yesterday?</li>



<li>What domains resolve here?</li>



<li>What certs are reused?</li>



<li>Does this infrastructure match known offensive tooling?</li>



<li>Is this a one-off indicator or a repeatable pattern that can become a detection?</li>



<li>Can that detection become enrichment, a watchlist, or a blocklist?</li>
</ul>



<p>That is how Censys Platform helps CTI and detection engineering teams keep up with adversary infrastructure that changes faster than static feeds.</p>



<p>Imagine a security researcher identifies a suspicious infrastructure pattern tied to a fast-moving phishing or malware delivery campaign.</p>



<p>The first version of the finding is just a domain. Censys Platform then facilitates investigation:</p>



<ul class="wp-block-list">
<li>Search the domain.</li>



<li>Review the live host and service profile.</li>



<li>Look at the TLS certificate.</li>



<li>Check DNS relationships.</li>



<li>Inspect web titles, headers, paths, and body artifacts.</li>



<li>Pivot to similar services.</li>



<li>Review historical changes.</li>



<li>Use Live Rescan to confirm what is still active.</li>



<li>Save the pattern as a Collection.</li>



<li>Monitor new matches.</li>
</ul>



<p>Then the detection engineer turns the finding into logic:</p>



<pre class="wp-block-code"><code>Alert when internal telemetry touches infrastructure matching this campaign pattern:
- matching web title or page artifact
- matching redirect structure
- matching certificate reuse
- matching suspicious service exposure
- matching DNS relationship
- matching hosting or port pattern
- currently live according to Censys</code></pre>



<br>



<h2 class="wp-block-heading" id="The-Best-Mythos-Era-Defense-Is-Not-Another-Static-Feed">The Best Mythos-Era Defense Is Not Another Static Feed</h2>



<p>Security teams already buy threat intelligence as a finished product. They pay someone else to collect infrastructure, enrich it, score it, package it, and hand it back as a feed.</p>



<p>In the Mythos era, the <em>real</em> question is: what can your team produce from the rawest, freshest intelligence data available?</p>



<p>Censys already gives you dynamic intelligence out of the box. ASM continuously tracks your own Internet-facing assets, exposures, dangling DNS, vulnerable services, and risky changes. Censys Platform gives CTI teams live infrastructure intelligence like “Bulletproof hosting”, C2, or hacktool labels.</p>



<p>But you can also use Censys to build your own feeds.</p>



<p>A <a href="https://docs.censys.com/docs/platform-collections">Censys Collection</a> can become a living feed of infrastructure that matches your logic. Not someone else’s generic IOC list. Your pattern. Your confidence tiers. Your use case. Your decision on whether the output should become enrichment, triage context, a detection input, a blocklist, or an investigation queue.</p>



<p>That matters because Mythos-speed attackers will not be defeated by static indicators alone. Domains rotate. Hosts disappear. Certificates change. Services move. Infrastructure gets reused in ways that are obvious only when you can see the broader Internet pattern.</p>



<p>Crunch your own threat and vuln intelligence!</p>



<p>Feed Censys context into your own AI models and you can start doing the kind of threat intelligence work teams often outsource to vendors like Recorded Future: clustering infrastructure, identifying related services, prioritizing suspicious changes, generating analyst-ready context, and turning raw observations into operational intelligence.</p>



<p>The difference is that you are not limited to a finished report or a static feed. You are working directly from current Internet evidence.</p>



<h2 class="wp-block-heading" id="See-What-Mythos-Exposure-Management-Looks-Like-With-Censys">See What Mythos Exposure Management Looks Like With Censys</h2>



<p>Censys gives you best-in-class Internet data, ready-made dynamic intelligence, and the building blocks to create your own living feeds for exposure management and SecOps.&nbsp;</p>



<p>To see how Censys provides you with the intelligence and speed required to protect your attack surface against today’s AI-powered threats, <a href="https://censys.com/asm-demo-request">request a demo</a>.</p>



<p><br>Or, <a href="https://accounts.censys.io/register">create a free Censys account</a> to start using features like:</p>



<ul class="wp-block-list">
<li>Collections: create a real-time feed based on your own tailored logic.</li>



<li>Lookup APIs: integrate Censys data into your existing workflows&nbsp;</li>



<li>AI Assistant: ask questions in natural language to get quick insights and context.</li>
</ul>



<p>For more on how to write detections that contend with a Mythos-caliber security landscape, <a href="https://censys.com/blog/ultimate-guide-to-detection-engineering-with-censys/">read the Ultimate Detection Engineering Guide.&nbsp;</a></p>
<p>The post <a href="https://censys.com/blog/mythos-exposure-management-censys/">The Mythos Era of Threat Defense: Censys Sees Exposures and Adversary Infrastructure First</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>Make Your Security Tools Smarter with Internet Intelligence</title>
      <link>https://censys.com/blog/smarter-security-tools-internet-intelligence/</link>
      <description><![CDATA[<p>Security teams are not suffering from a lack of data to investigate, or from a lack of tools to investigate with. The challenge is adding enough context to make fast, accurate decisions without forcing an analyst to pivot from console to console. Determining whether an IOC is worth investigating or should be deprioritized is an [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/smarter-security-tools-internet-intelligence/">Make Your Security Tools Smarter with Internet Intelligence</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Censys Platform</category>
      <guid isPermaLink="false">https://censys.com/?p=9428</guid>
      <pubDate>Thu, 04 Jun 2026 14:52:12 +0000</pubDate>
      <content:encoded><![CDATA[<p>Security teams are not suffering from a lack of data to investigate, or from a lack of tools to investigate with. The challenge is adding enough context to make fast, accurate decisions without forcing an analyst to pivot from console to console. Determining whether an IOC is worth investigating or should be deprioritized is an ongoing struggle for security teams, and inefficient SOC triaging is a common problem that makes organizations vulnerable to risk.&nbsp;</p>



<p>This blog will cover the importance of alert context and how to strike the right balance of contextual information without information overload in your SOC.</p>



<h2 class="wp-block-heading" id="Context-Is-Key-">Context Is Key&nbsp;</h2>



<p>Keeping an organization safe requires a mix of proactive defense and reactive response. An alert that bubbles up to the SOC via a SIEM or SOAR will often contain an external IP address or URL. A SOC analyst (carbon or silicon) needs external context to answer questions that will impact how the alert is handled.</p>



<ul class="wp-block-list">
<li>Is it still online?&nbsp; If not, how did it appear at the time of the incident?</li>



<li>Where is it and who owns the network it&#8217;s running on?</li>



<li>Are there certificates or DNS entries that provide clues to the entities behind it?</li>



<li>What services, software, and hardware is it running?</li>



<li>Are there indicators of suspicious or malicious services?</li>



<li>If the incident happened in the past, how did it look at that moment?&nbsp;&nbsp;</li>



<li>Are there similar assets on the Internet that aren&#8217;t on my radar but should be?</li>
</ul>



<p>Enrichment actions and automated playbooks can attach all of this context to an incident in real time, speeding up triage and conserving human or AI resources.&nbsp;</p>



<h2 class="wp-block-heading" id="Get-the-Right-Context-With-the-Right-Tools">Get the Right Context With the Right Tools</h2>



<p>Threat intelligence platforms (TIPs) like Dataminr’s ThreatConnect, Securonix’s ThreatQ, Vertex Synapse, Maltego, Cyware, ServiceNow TISC and Filigran OpenCTI take raw intelligence, correlate it, and make it actionable. They add layers of context — but they require good inputs to make that context valuable, trustworthy, and actionable.&nbsp;</p>



<p>The Internet changes quickly as cloud IPs change hands and attackers rotate infrastructure to stay ahead of detection. Analysts need context that answers critical questions like:&nbsp;</p>



<ul class="wp-block-list">
<li>How many of the IOCs are still active?</li>



<li>How many look like they have changed hands?</li>



<li>Has anything about these incidents changed since we started looking at them?</li>



<li>Have other similar systems appeared that should be added to the IOC list?</li>
</ul>



<p>There are several tools that help fill in these blanks to provide analysts with a clear, complete picture of an alert, including what it means, how much of a risk it poses, and how best to address it.&nbsp;&nbsp;</p>



<h3 class="wp-block-heading" id="Contextualizing-With-Censys">Contextualizing With Censys</h3>



<p>With Censys Internet intelligence, your SOC can determine how external assets look right now and how they appeared at any point in the past, including the time an incident occurred. That context can be used directly inside SIEM, SOAR, TIP, and investigative platforms to accelerate triage, enrich investigations, and identify related infrastructure that may otherwise go unnoticed.</p>



<p>For example, an intel report might contain a set of IOCs that have been seen to act maliciously. Pulling in Internet intelligence from Censys can keep these indicators fresh during an investigation. <a href="https://censys.com/blog/reputation-score-internet-map-risk-signal/"><em>Check out three common examples of contextualized SOC alerts with Censys → </em></a><em>&nbsp;</em></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="400" height="400" src="https://censys.com/wp-content/uploads/medium-risk-gif.gif" alt="" class="wp-image-9433"/></figure>



<p>Censys also keeps track of malicious infrastructure, and can provide a near real-time view of the infrastructure an organization needs to look out for. <a href="https://censys.com/resources/integration/securonix-threatquotient/">ThreatQ </a>can even query Censys to ingest information about vulnerabilities and exposures present in your environment or interesting third parties. This context can be used to accelerate triage, allowing an analyst to make accurate decisions about the need for proactive defense.</p>



<h3 class="wp-block-heading" id="Contextualizing-with-Maltego-">Contextualizing with Maltego&nbsp;</h3>



<p><a href="https://censys.com/integration/maltego/">Maltego</a> can find relationships that help an analyst pivot from an asset of interest to a larger set of related assets. The more information a tool like this has about an asset, the better chance it has to find interesting relationships. Censys often has thousands of separate attributes stored for each asset which Maltego and similar investigative tools can ingest to enhance an investigation. These include:</p>



<ul class="wp-block-list">
<li>Network ownership</li>



<li>Geolocation</li>



<li>HTTP headers and banners</li>



<li>DNS Domain relationships</li>



<li>Certificate issuers and subjects</li>



<li>Open ports and protocols</li>



<li>JARM and JA4 signatures</li>



<li>Censys defined labels such as IOT, LOGIN_PAGE, DATABASE, or HONEYPOT</li>



<li>Censys defined threats</li>
</ul>



<p>This information will be current thanks to a robust scanning infrastructure. All ports and services across the Internet are examined and any identified protocol is scanned for its unique attributes. Combinations of these attributes can allow an analyst using Maltego to pivot into clusters of related assets.</p>



<p><a href="https://censys.com/tech-brief/censys-maltego/" target="_blank" rel="noreferrer noopener">View the joint solution brief</a></p>



<h3 class="wp-block-heading" id="Contextualizing-with-Vertex-Synapse">Contextualizing with Vertex Synapse</h3>



<p>A central intelligence system like <a href="https://censys.com/resources/integration/vertex-synapse/">Vertex Synapse</a> can store these scanning observations, correlate them across investigations, and identify patterns that may not be visible when looking at a single incident in isolation. This current and historical enrichment data helps analysts track the evolution of malicious or otherwise interesting infrastructure.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1974" height="616" src="https://censys.com/wp-content/uploads/image-131.png" alt="" class="wp-image-9430"/></figure>



<p><em>Querying Censys for activity associated with 185.158.248.141 between July 1, 2025 and the current date.</em></p>



<p><a href="https://censys.com/tech-brief/censys-vertex/" target="_blank" rel="noreferrer noopener">View the joint solution brief</a></p>



<h2 class="wp-block-heading" id="Build-Censys-Internet-Intelligence-Into-Your-Workflows">Build Censys Internet Intelligence Into Your Workflows</h2>



<p>Censys provides continuously updated visibility into Internet-exposed assets and maintains historical observations to track how the infrastructure changes over time. When it is integrated into security workflows, this added context helps analysts validate and expand on threat intelligence, uncover related infrastructure, prioritize investigations, and make faster, more informed decisions during an incident.</p>



<div id="censys-title-with-content-block_3e058076ee62332e997c3a459d7fdf4e" class="censys-block-wrapper censys-block-title-with-content">
    <div class="censys-block-inner">
        <div class="block-heading">
                         <div class="block-title-wrapper">
                    <div class="title-wrapper-inner default">
                        <h3 class="censys-block-title av-special-heading-tag">Explore Integrations</h3>
                    </div>
                            </div>
        </div>
       
                    <div class="block-content">
                <p>Censys and its partners now offer 55+ integrations across 45+ technology alliance partners. Explore our integration library to see how you can build Censys Internet intelligence into your workflows.</p>
            </div>
                                            <div class="button-wrapper">
                    <a href="https://censys.com/resources/integrations/" class="avia-button   avia-icon_select-no avia-style-solid avia-color-default avia-size-medium avia-position-left" >
                        <span class="avia_iconbox_title">Integration Library</span>
                    </a>
                </div>
                        </div>
</div><p>The post <a href="https://censys.com/blog/smarter-security-tools-internet-intelligence/">Make Your Security Tools Smarter with Internet Intelligence</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>How a Dangling DNS Entry Can Lead to a Subdomain Takeover</title>
      <link>https://censys.com/blog/dangling-dns-subdomain-takeover/</link>
      <description><![CDATA[<p>The most dangerous risks are often the ones that manage to go unnoticed. Dangling DNS — stale DNS entries that continue pointing to defunct resources — are some of the quietest, and most dangerous: easily overlooked, easily exploited. These misconfigurations are common, which makes them a frequent target for attackers, who actively search for them [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/dangling-dns-subdomain-takeover/">How a Dangling DNS Entry Can Lead to a Subdomain Takeover</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Attack Surface Management</category>
      <guid isPermaLink="false">https://censys.com/?p=9392</guid>
      <pubDate>Fri, 05 Jun 2026 20:26:26 +0000</pubDate>
      <content:encoded><![CDATA[<p>The most dangerous risks are often the ones that manage to go unnoticed. Dangling DNS — stale DNS entries that continue pointing to defunct resources — are some of the quietest, and most dangerous: easily overlooked, easily exploited.</p>



<p>These misconfigurations are common, which makes them a frequent target for attackers, who actively search for them because they create opportunities for subdomain takeover. Once exploited, attackers can host malicious content under a trusted domain, enabling phishing, malware delivery, and reputational damage.</p>



<p>This blog will cover what dangling DNS is, how it can lead to subdomain takeover, and how organizations can detect and defend against these risks with Censys.</p>



<h2 class="wp-block-heading" id="What-Is-Dangling-DNS?">What Is Dangling DNS?</h2>



<p>A dangling DNS entry is a DNS record that points to a resource that no longer exists or is no longer controlled by the organization. The DNS record itself remains active, even though the underlying service has been deleted, decommissioned, or abandoned.</p>



<p>This often happens when organizations use third-party services like AWS S3, GitHub Pages, or Heroku. If the service is decommissioned or the account associated with the service is deleted but the DNS entry is not removed, the DNS record still points to the now-defunct, or “dangling” resource.</p>



<p>Dangling DNS can exist on any domain or subdomain in the attack surface. It is particularly common in large organizations where infrastructure changes frequently, ownership changes between teams, or cloud resources are rapidly provisioned and decommissioned.</p>



<h2 class="wp-block-heading" id="Why-Is-Dangling-DNS-a-Problem?">Why Is Dangling DNS a Problem?</h2>



<p>Dangling DNS entries create blind spots in an organization’s attack surface. Because the DNS record remains publicly visible and resolvable, attackers can identify these abandoned references and attempt to claim the associated resource. From an attacker’s perspective, dangling DNS records are a strategic opportunity to gain control over a trusted subdomain without compromising the organization directly.</p>



<h3 class="wp-block-heading" id="Why-Dangling-DNS-Is-Hard-to-Catch-Manually">Why Dangling DNS Is Hard to Catch Manually</h3>



<p>In large organizations, DNS records accumulate over years across multiple teams, cloud accounts, and infrastructure providers. When a resource is decommissioned, removing the DNS entry is rarely part of the standard offboarding checklist. Ownership gaps between teams and legacy resources make the problem worse — nobody is sure who is responsible for a record created three years ago by someone who has since left.</p>



<p>Attackers, by contrast, can automate subdomain enumeration and CNAME validation at scale. The asymmetry is significant: finding these records automatically is dramatically faster than doing so manually.</p>



<h3 class="wp-block-heading" id="How-Dangling-DNS-Leads-to-Subdomain-Takeover">How Dangling DNS Leads to Subdomain Takeover</h3>



<p>Subdomain takeover occurs when an attacker successfully claims the resource referenced by a dangling DNS record and gains control over the affected subdomain.</p>



<p>Attackers find dangling DNS instances by scanning and identifying subdomains associated with a website, then checking whether these subdomains point to any resources that no longer exist (a dangling DNS entry). Attackers frequently automate the discovery of these vulnerabilities using tools that scan for:</p>



<ul class="wp-block-list">
<li>Dangling CNAME records</li>



<li>Unclaimed cloud resources</li>



<li>Expired third-party service configurations</li>



<li>Misconfigured NS records</li>
</ul>



<br>



<p>The process typically works like this:</p>



<ol class="wp-block-list">
<li><strong>A DNS Record Points to a Decommissioned Resource.</strong>&nbsp;</li>



<li><strong>Attackers Discover the Dangling Entry.&nbsp;</strong></li>



<li><strong>The Attacker Claims the Resource.&nbsp;</strong></li>



<li><strong>The Attacker Gains Control of the Subdomain.&nbsp;</strong></li>
</ol>



<br>



<p>Once the dangling resource is claimed, the attacker can host arbitrary content under the legitimate domain. This may include:</p>



<ul class="wp-block-list">
<li>Phishing pages</li>



<li>Malware delivery</li>



<li>Fake login portals</li>



<li>Malicious redirects</li>



<li>Defacement content</li>



<li>Credential harvesting infrastructure</li>
</ul>





<p>Since the subdomain belongs to a trusted domain, users and security tools may be less likely to immediately identify the activity as malicious.</p>



<h3 class="wp-block-heading" id="Which-Services-Are-Most-Commonly-Exploited?">Which Services Are Most Commonly Exploited?</h3>



<p>Subdomain takeover is most common on platforms that allow users to claim named resources. Services frequently involved include AWS S3, GitHub Pages, Heroku, Fastly, Azure, Shopify, and Zendesk. Any platform where a CNAME points to a user-claimable namespace is a potential vector.</p>



<h3 class="wp-block-heading" id="What-Are-the-Consequences-of-Subdomain-Takeover?">What Are the Consequences of Subdomain Takeover?</h3>



<p>Subdomain takeover can have serious operational and security consequences.</p>



<ul class="wp-block-list">
<li><strong>Brand and Reputation Damage: </strong>Attackers can host malicious or inappropriate content on a company-owned subdomain and be associated with an attack, damaging trust with customers and partners.</li>



<li><strong>Phishing Attacks: </strong>A phishing page hosted on a legitimate company subdomain appears significantly more trustworthy than a completely unrelated domain. This increases the likelihood of credential theft and social engineering success.</li>



<li><strong>Malware Distribution: </strong>Attackers can distribute malware or malicious downloads from the compromised subdomain, leveraging the organization’s reputation to bypass suspicion.</li>



<li><strong>Session Hijacking and Cookie Abuse: </strong>In some cases, compromised subdomains can be leveraged to abuse cookies scoped to the parent domain or interfere with web application trust assumptions.</li>



<li><strong>Security Monitoring Gaps: </strong>Because the activity occurs on a legitimate company subdomain, monitoring tools may not immediately recognize the infrastructure as compromised.</li>



<li><strong>Data Breaches</strong>: If sensitive data is shared through the compromised subdomain, it could lead to data breaches.</li>
</ul>



<h2 class="wp-block-heading" id="Frequently-Asked-Questions-About-Dangling-DNS">Frequently Asked Questions About Dangling DNS</h2>



<ul class="wp-block-list">
<li><strong>What is the difference between dangling DNS and a misconfigured DNS record?</strong> A misconfigured DNS record has incorrect values (wrong IP, wrong CNAME target). A dangling DNS record was correct when created but now points to a resource that no longer exists or is no longer owned by the organization. Both are risks, but dangling DNS is specifically exploitable via subdomain takeover.</li>



<li><strong>Can subdomain takeover happen on subdomains I don&#8217;t actively use?</strong> Yes — inactive or forgotten subdomains are the most common targets. If a DNS record exists, attackers will find it regardless of whether the subdomain appears in your navigation or marketing materials.</li>



<li><strong>How do attackers find dangling DNS records? </strong>Attackers use automated tools to enumerate subdomains (via certificate transparency logs, DNS brute-forcing, and public records), then check each subdomain&#8217;s CNAME target to see if the referenced resource is unclaimed on the relevant platform.</li>



<li><strong>Does HTTPS or a valid TLS certificate protect against subdomain takeover?</strong> No. An attacker who claims the resource can also provision a valid TLS certificate for it through the platform&#8217;s automated provisioning — meaning the subdomain will show a padlock in the browser even while under attacker control.</li>



<li><strong>How often should I audit DNS records for dangling entries?</strong> Ideally, DNS should be audited continuously, since new dangling entries can appear any time a cloud resource is decommissioned. At minimum, include a DNS review in any cloud resource offboarding checklist and run a full audit quarterly.</li>
</ul>



<h2 class="wp-block-heading" id="How-Censys-Helps-Detect-Dangling-DNS-Risks">How Censys Helps Detect Dangling DNS Risks</h2>



<p>Censys helps organizations identify and remediate dangling DNS risks before attackers can exploit them.&nbsp;</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="2560" height="1284" src="https://censys.com/wp-content/uploads/Untitled-design-2-scaled.png" alt="" class="wp-image-9447" style="aspect-ratio:1.9922439995807568;width:1016px;height:auto"/><figcaption class="wp-element-caption">Dangling DNS risks in Censys ASM</figcaption></figure>



<p>Censys continuously analyzes Internet-facing infrastructure using its <a href="https://censys.com/internet-map/">Map of the Internet</a>: the most complete, accurate, and up-to-date Internet intelligence dataset available. Now, Censys’ Internet intelligence dataset includes DNS records, which are refreshed daily. This enables organizations to detect stale or vulnerable DNS configurations with current, continuously updated visibility.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="1976" height="962" src="https://censys.com/wp-content/uploads/heroku-Edited.png" alt="" class="wp-image-9448" style="aspect-ratio:2.0540565324041173;width:1024px;height:auto"/><figcaption class="wp-element-caption">An example domain takeover risk for a Heroku resource on a web entity.</figcaption></figure>



<p>In <a href="https://censys.com/solutions/external-exposure-management?utm_term=censys%20search%20engine&amp;utm_campaign=S_NOAM_Brand-South&amp;utm_source=adwords&amp;utm_medium=ppc&amp;hsa_acc=8569338945&amp;hsa_cam=23437290954&amp;hsa_grp=194221679911&amp;hsa_ad=791787380548&amp;hsa_src=g&amp;hsa_tgt=kwd-2373514664086&amp;hsa_kw=censys%20search%20engine&amp;hsa_mt=p&amp;hsa_net=adwords&amp;hsa_ver=3&amp;gad_source=1&amp;gad_campaignid=23437290954&amp;gbraid=0AAAAACn6icq0k373rw1n2pg-DJMFGLES4&amp;gclid=CjwKCAjw2rrQBhBuEiwAarLWHQuXawoPWfzZNmQ5OKk8GJwRpLzyANXP-wfi_g4rtpjbfRCKf35_0RoCqJ0QAvD_BwE">Censys ASM</a>, dangling DNS risks can be identified on domain and web entity assets. Censys checks all names within a given workspace to detect dangling DNS risks across CNAMEs, NS Records, and third party services. It surfaces those risks within existing ASM workflows, and includes context that helps analysts quickly decide how to best address the risk. Each detection shows:&nbsp;</p>



<ul class="wp-block-list">
<li>Associated domain name</li>



<li>Impacted DNS record</li>



<li>Evidence for the detection</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="2560" height="797" src="https://censys.com/wp-content/uploads/Screenshot-2026-06-04-at-11.00.32-AM-Edited-scaled.png" alt="" class="wp-image-9463" style="aspect-ratio:3.0538513974096797;width:1045px;height:auto"/><figcaption class="wp-element-caption">The risk evidence for a dangling CNAME risk.</figcaption></figure>



<p>This context helps security teams react to alerts quickly so they can remediate risks before attackers can exploit them.</p>



<p><a href="https://docs.censys.com/docs/asm-dangling-dns-risks"><em>Learn more about dangling DNS detection in ASM →&nbsp;</em></a></p>



<h2 class="wp-block-heading" id="Prevent-Subdomain-Takeover-with-Censys-ASM">Prevent Subdomain Takeover with Censys ASM</h2>



<p>Dangling DNS entries are easy for analysts to overlook — and, unfortunately, easy for attackers to find. They can create a direct path to subdomain takeover and expose organizations to phishing, malware distribution, and reputational harm.</p>



<p>Dangling DNS in Censys ASM mitigates this risk by surfacing dangling DNS threats quickly so analysts can respond to them before they’re exploited. Informed by Censys’ comprehensive, accurate, and up-to-date Map of the Internet, Censys dangling DNS alerts are fresh, reliable, and contextualized with the information analysts need to act quickly and confidently.&nbsp;</p>



<p>Dangling DNS risks are now available in your Censys ASM workspace and will be enabled in mid-June. Reach out to your customer success team for more information. If you don’t have Censys ASM, <a href="https://censys.com/request-a-demo">request a demo</a> to learn how it can help protect your organization.</p>
<p>The post <a href="https://censys.com/blog/dangling-dns-subdomain-takeover/">How a Dangling DNS Entry Can Lead to a Subdomain Takeover</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>Why Internet Intelligence Is the Foundation of Exposure Management and CTEM</title>
      <link>https://censys.com/blog/internet-intelligence-foundation-exposure-management-ctem/</link>
      <description><![CDATA[<p>“You can’t defend what you can’t see.”&#160; Yes, yes, you’ve heard this before. Everyone has. It’s the reason you collect telemetry,&#160; send it to your SIEM, and action on your playbook via your SOAR. It’s why you follow a CTEM style program.&#160; But there lies the problem. In security, ensuring visibility is a well-established objective. [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/internet-intelligence-foundation-exposure-management-ctem/">Why Internet Intelligence Is the Foundation of Exposure Management and CTEM</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <category>Attack Surface Management</category>
      <category>Censys Internet Map</category>
      <guid isPermaLink="false">https://censys.com/?p=9382</guid>
      <pubDate>Fri, 29 May 2026 19:04:53 +0000</pubDate>
      <content:encoded><![CDATA[<p><strong>“You can’t defend what you can’t see.”&nbsp;</strong></p>



<p>Yes, yes, you’ve heard this before. Everyone has. It’s the reason you collect telemetry,&nbsp; send it to your SIEM, and action on your playbook via your SOAR. It’s why you follow a CTEM style program.&nbsp;</p>



<p>But there lies the problem. In security, ensuring visibility is a well-established objective. But too often, we focus on ensuring our team’s visibility through their tools: are they receiving the right alerts? Is the tool showing them the right data? Are my tools sharing the right information with each other?&nbsp;</p>



<p>Meanwhile, we forget to ask the more foundational question:&nbsp;</p>



<p><strong><em>How much can these tools actually see?&nbsp;&nbsp;</em></strong></p>



<p>Continuous Threat Exposure Management (CTEM) is an excellent example. It’s great for discovering vulnerabilities, prioritizing risks, and integrating them into workflows. But those functions rely on complete visibility into your attack surface. When there are holes at this foundational visibility level, your CTEM won’t point them out; it’ll fill them in as best they can, often inadequately or inaccurately. This leaves you with unknown blind spots and poor output, which result in missed alerts, inaccurate data, and vulnerabilities left open.&nbsp;</p>



<p>Welcome in, adversaries.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Why-Is-Complete-Internet-Visibility-Important-to-CTEM?">Why Is Complete Internet Visibility Important to CTEM?</h2>



<p>External exposure is where most modern intrusions start: misconfigurations, shadow IT, remote access drift, and Internet-facing systems that internal scanners never record. Without comprehensive visibility and deep scanning data that can see your entire attack surface, every other piece of your attack surface workflow is less effective. You may be prioritizing and remediating what you know, but there may be elements of your attack surface that your tools have failed to discover.</p>



<p>To be effective and trustworthy, CTEM must draw from a complete data set, which is achieved through <em>comprehensive</em> and <em>continuous</em> Internet visibility. An accurate picture of your attack surface starts from an accurate picture of the Internet: when your CTEM’s source of truth is instead riddled with holes, the output is equally porous. If you can’t see the entire Internet, how do you know parts of your own attack surface aren’t lurking in those blind spots?&nbsp;</p>



<p>Further, attack surfaces are not static. Your tools should pull from real-time data to draw an accurate and complete picture of your attack surface. This requires continuous scanning of the entire Internet: anything older than 24 hours should be considered stale and out of date.</p>



<p>CTEMs and other tools pulling from incomplete Internet visibility is dangerous in and of itself. The problem compounds when tools deliver the output as truth rather than a best-guess, with no mention of the gaps beneath the surface. Pay no attention to the approximations made behind the UI curtain.</p>



<p>Analysts, in turn, assume the seemingly complete picture their CTEM has presented them is, in fact complete. As a result, its underlying holes are never addressed. Never patched. The easiest of targets.</p>



<h2 class="wp-block-heading" id="What-Does-a-Complete-Visibility-for-CTEM-Management-Look-Like?">What Does a Complete Visibility for CTEM Management Look Like?</h2>



<p>CTEM needs a foundation of a comprehensive, accurate, and up-to-date data set. This is achieved through:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Deep scanning</strong>: Full visibility relies on deep scanning that spans the breadth of the Internet. For example, <a href="https://censys.com/blog/evaluating-censys-performance/">Censys sees</a> all 65K ports and protocols. Most scanners miss higher, less commonly used ports — which is why adversaries tend to target those. You need to see those, because attackers certainly can.&nbsp;</li>



<li><strong>Frequent seed discovery:</strong> Modern attack surfaces evolve by the minute, making stale inventories a liability. Continuous seed discovery provides the real-time awareness organizations need to keep pace with automated and AI-accelerated threats. Censys scans the entire Internet continuously —&nbsp;most data is no more than four hours old, and no data is ever more than 24 hours old.</li>
</ul>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="2048" height="732" src="https://censys.com/wp-content/uploads/image-127.png" alt="" class="wp-image-9388" style="width:823px;height:auto"/></figure>



<h2 class="wp-block-heading">What Attack Surface Management (ASM) Vendors Get Wrong</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td></td><td><strong>EASM vendors</strong></td><td><strong>Censys</strong></td></tr><tr><td>What it does</td><td>Actively probes and validates exposures on the assets it knows about</td><td>Continuously scans the entire internet to discover every asset, then surfaces exposures across that complete picture</td></tr><tr><td>Asset inventory scope</td><td>Limited to seeded assets and inferred connections. Known unknowns remain unknown.</td><td>65K ports and protocols, entire IPv4 space, refreshed every 4–24 hours. Discovers what you didn&#8217;t know to look for.</td></tr><tr><td>Shadow IT and unmanaged assets</td><td>Misses assets outside initial scope — actively validates a subset</td><td>Finds internet-facing assets regardless of whether the organization knows they exist</td></tr><tr><td>False positives</td><td>Incomplete inventory creates noise — unvalidated or misattributed assets generate alerts that waste analyst time</td><td>First-party scanning data confirms what&#8217;s real, reducing false positives at the source before they reach your team</td></tr><tr><td>The core risk</td><td>False completeness. Validation confidently confirms what it found is clean — with no visibility into what it missed.</td><td>Find everything first. Then validate.</td></tr><tr><td>CTEM stage served</td><td>Prioritization, Validation — but only across a partial attack surface</td><td>Discovery first, fully — the foundation all other CTEM stages depend on</td></tr><tr><td>The right question to ask</td><td>&#8220;Are the exposures we found exploitable?&#8221;</td><td>&#8220;Have we found all our exposures — and are any of them exploitable?&#8221;</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="Why-Most-CTEM-Programs-Have-a-Discovery-Gap-and-How-to-Close-It">Why Most CTEM Programs Have a Discovery Gap and How to Close It</h2>



<p><a href="https://censys.com/solutions/external-exposure-management">Censys ASM</a> is built on the <a href="https://censys.com/internet-map/">most complete, accurate, and real-time Internet intelligence in the world.</a> When tested against our competitors, we consistently see more, with higher accuracy, and faster (<a href="https://censys.com/blog/evaluating-censys-performance/">see for yourself</a>). Censys sees all 65K ports and protocols on the Internet, has a database of over 15 billion certificates, and a library of 700+ risks and thousands of CVEs. It pairs this data with DNS insights, emerging threat data via <a href="https://censys.com/censys-arc/">Censys ARC research</a>, AI-driven predictive scanning and relationship building, and more to form the most powerful Internet intelligence engine that exists today — and, therefore, the best foundation for CTEM tooling.</p>



<p>Initially, Censys ASM can help you seed and map your external attack surface — but this is just step one. Equally as important is the ongoing discovery that follows. Censys ASM continuously discovers new assets and organizational relationships to populate your attack surface and ensure it is up to date. This occurs every 4 hours for cloud assets and every 24 hours for non-cloud assets.</p>



<p>In addition, Censys provides intelligent context to help analysts triage faster and more confidently. An AI assistant, reputation-based risk scoring, and natural-language queries allow analysts to interact with data naturally and get the intelligence they need to make quick, evidence-based decisions.</p>



<h2 class="wp-block-heading" id="Why-Internet-Visibility-Improves-Every-Security-Tool-in-Your-Stack">Why Internet Visibility Improves Every Security Tool in Your Stack</h2>



<ul class="wp-block-list">
<li><strong>Accurate and Complete Inventory: </strong>SOCs find what others miss with Censys’ first-party scanning data that discovers Internet-exposed assets (including services on nonstandard ports, hosts using self-signed certificates, and even hosts in residential networks) so your inventory accurately reflects what attackers can reach.</li>



<li><strong>Immediate Exposure Detection:</strong> Continuous asset discovery allows organizations to monitor their attack surfaces continuously and alert on meaningful deltas (new hosts, ports, certs, services).&nbsp;</li>



<li><strong>Reduced Mean Time to Remediate (MTTR): </strong>Full visibility and data enriched with intelligent context allows teams to triage and remediate faster.</li>



<li><strong>Better ROI on Third-Party Tooling: </strong>When integrating with third-party tools like AI agents, SIEMs, SOARs, and CTEMs, ASM’s comprehensive and accurate data provides a strong foundation for accurate, reliable and actionable output.</li>
</ul>



<h2 class="wp-block-heading" id="Power-Your-Exposure-Management-and-CTEM-Program-With-Censys">Power Your Exposure Management and CTEM Program With Censys</h2>



<p>Like any security tool, CTEMs are only as good as their foundational data inputs. Without accurate Internet-wide visibility, your CTEM ends up reporting on a subset of data that you can only hope captures everything on your attack surface. But “hope” is a vulgar word in security and better left for motivational speeches and fantasy novels. Security professionals need their source of truth to be just that: the truth, the whole truth, and nothing but it.&nbsp;</p>



<p>Censys data’s comprehensiveness, accuracy, and freshness is <a href="https://censys.com/blog/evaluating-censys-performance/">proven</a> to be better than any other vendor. That makes it indisputably the best source of truth when it comes to Internet intelligence and visibility.&nbsp;</p>



<p>Perhaps that’s why most of Censys’ competitors use Censys data.&nbsp;</p>



<p><a href="https://censys.com/request-a-demo/">Request a demo</a> to see how Censys ASM can detect, monitor, and defend your external attack surface today.</p>



<p></p>
<p>The post <a href="https://censys.com/blog/internet-intelligence-foundation-exposure-management-ctem/">Why Internet Intelligence Is the Foundation of Exposure Management and CTEM</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
    <item>
      <title>The Oracle Problem: Why AI SOCs Need Ground Truth Context</title>
      <link>https://censys.com/blog/the-oracle-problem-why-ai-socs-need-ground-truth-context/</link>
      <description><![CDATA[<p>“So privily without their leave I went / To Delphi, and Apollo sent me back / Baulked of the knowledge that I came to seek.”Oedipus the King, 429 BCE And so Oedipus went in secret to Delphi to question the Oracle about his fate. Instead of answers, Apollo turned him away, denying the certainty he [&#8230;]</p>
<p>The post <a href="https://censys.com/blog/the-oracle-problem-why-ai-socs-need-ground-truth-context/">The Oracle Problem: Why AI SOCs Need Ground Truth Context</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></description>
      <category>Uncategorized</category>
      <guid isPermaLink="false">https://censys.com/?p=9254</guid>
      <pubDate>Thu, 21 May 2026 14:35:36 +0000</pubDate>
      <content:encoded><![CDATA[<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“So privily without their leave I went / To Delphi, and Apollo sent me back / Baulked of the knowledge that I came to seek.”<br><em>Oedipus the King, 429 BCE</em></p>
</blockquote>



<p>And so Oedipus went in secret to Delphi to question the Oracle about his fate. Instead of answers, Apollo turned him away, denying the certainty he came to seek.</p>



<p>Meanwhile, at tech companies across the globe, Claude Code goes down and everybody takes lunch. The Oracle is unavailable, you are denied the certainty of working code.</p>



<p>In the modern SOC, the oracle doesn’t go silent.</p>



<p>Platforms like Palo Alto Networks Cortex XSIAM and Cortex XSOAR have become that oracle unifying telemetry, applying AI-driven analysis, orchestrating workflows, and delivering answers at machine speed. Analysts don’t just investigate anymore; they consult.</p>



<p>And increasingly, they trust what they’re told.</p>



<h2 class="wp-block-heading">When the oracle speaks, people stop asking for evidence</h2>



<p>AI-driven SOC platforms have fundamentally reshaped operations. Cortex correlates signals across the environment, applies analytics, and delivers clear, actionable outputs faster than any human workflow could.</p>



<p>This is the point.</p>



<p>Speed, consistency, and scale are no longer tradeoffs. They are baseline expectations.</p>



<p>But the earliest signal in an investigation is still thin by design:</p>



<ul class="wp-block-list">
<li>a single IP</li>



<li>a domain</li>



<li>a certificate</li>



<li>a timestamp</li>
</ul>



<p>From there, the system builds understanding by connecting activity, enriching signals, and guiding response.</p>



<p>The outputs are fast. Structured. Confident.</p>



<p>And that confidence is usually well-earned.</p>



<h2 class="wp-block-heading">Ground truth keeps the oracle anchored</h2>



<p>In security operations, ground truth isn’t a correction mechanism. It is a validation layer.</p>



<p>It’s the difference between:</p>



<ul class="wp-block-list">
<li>Inferred relationships and observed ones</li>



<li>Static assumptions and time-bound reality</li>



<li>Partial context and full situational awareness</li>
</ul>



<p>Cortex already synthesizes vast internal telemetry and applies AI to drive decisions. At the same time, many investigations benefit from incorporating external, real-world context about internet-facing infrastructure:</p>



<ul class="wp-block-list">
<li>What is this host presenting right now?</li>



<li>How has it evolved over time?</li>



<li>What infrastructure is associated with it?</li>



<li>How does it align with broader patterns of risk?</li>
</ul>



<p>These aren’t gaps in capability. They are extensions of scope.</p>



<p>And answering them with evidence strengthens already high-quality decisions.</p>



<h2 class="wp-block-heading">The next evolution of AI SOC is context-aware AI</h2>



<p>AI SOC platforms like Cortex XSIAM are already delivering on their core promise: unified operations, AI-driven analysis, and automated response at scale.</p>



<p>The next evolution is not about replacing or reworking that foundation.</p>



<p>It’s about expanding the context those systems can draw from.</p>



<p>Context-aware AI doesn’t change how the oracle operates. It sharpens what it knows.</p>



<h2 class="wp-block-heading">Where Censys fits: expanding context within Cortex workflows</h2>



<p>Censys integrates directly into Cortex XSIAM and XSOAR, bringing continuously refreshed Internet intelligence into the workflows analysts already use.</p>



<p>Within Cortex, this enables teams to:</p>



<ul class="wp-block-list">
<li>Enrich observables like IPs, domains, and certificates inline</li>



<li>Pivot from a single indicator to related internet-facing infrastructure</li>



<li>Incorporate real-time external observations into investigations</li>



<li>Extend playbooks and AI-driven workflows with additional context</li>
</ul>



<p>This integration operates entirely within the Cortex ecosystem by enhancing visibility without changing how teams work.</p>



<p>The value is additive:</p>



<ul class="wp-block-list">
<li>broader context at the moment of decision</li>



<li>more informed triage and investigation</li>



<li>consistent enrichment across workflows</li>



<li>stronger alignment between AI outputs and observable reality</li>
</ul>



<h2 class="wp-block-heading">A shared oracle needs a shared foundation</h2>



<p>In a modern SOC, multiple teams rely on the same system:</p>



<ul class="wp-block-list">
<li>Triage</li>



<li>Incident response</li>



<li>Threat intelligence</li>



<li>Detection engineering</li>
</ul>



<p>Cortex ensures those teams operate with shared workflows and coordinated intelligence.</p>



<p>Expanding the context available to that system ensures that every decision, across roles and functions,&nbsp; is grounded in the same external reality.</p>



<h2 class="wp-block-heading">The bottom line</h2>



<p>The Oracle Problem isn’t that AI is unreliable.</p>



<p>It’s that speed can make confidence feel like certainty.</p>



<p>Cortex delivers the speed, scale, and intelligence modern SOCs demand.</p>



<p>Censys expands that intelligence with real-world, verifiable context ensures those decisions remain anchored in evidence.</p>



<p>Bring the oracle into your SOC. Just make sure what it speaks is grounded in truth.&nbsp;</p>



<br>
<br>



<p><em>This partner blog was developed as part of the Censys Partner Spotlight Series in collaboration between Palo Alto Networks and Censys to highlight joint integration capabilities and our shared better together approach to AI-driven SOC operations.</em></p>
<p>The post <a href="https://censys.com/blog/the-oracle-problem-why-ai-socs-need-ground-truth-context/">The Oracle Problem: Why AI SOCs Need Ground Truth Context</a> appeared first on <a href="https://censys.com">Censys</a>.</p>]]></content:encoded>
      <dc:creator>Kate Lake</dc:creator>
    </item>
  </channel>
</rss>