<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>LinnemanLabs</title><link>https://linnemanlabs.com/</link><description>Recent content on LinnemanLabs</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 01 Jun 2026 06:17:20 -0400</lastBuildDate><atom:link href="https://linnemanlabs.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello, my name is Orca</title><link>https://linnemanlabs.com/posts/hello-my-name-is-orca/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/hello-my-name-is-orca/</guid><description>Any unprivileged app can claim Orca&amp;rsquo;s D-Bus name and read raw Wayland keystrokes - passwords included.</description></item><item><title>Two Hops and a Shell on Ubuntu</title><link>https://linnemanlabs.com/posts/two-hops-and-a-shell/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/two-hops-and-a-shell/</guid><description>Ubuntu&amp;rsquo;s userns AppArmor patch checks a pointer, not a property. Two profile hops chain a confined process to host root.</description></item><item><title>Porting Dirty Frag to arm64</title><link>https://linnemanlabs.com/posts/porting-dirtyfrag-arm64/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/porting-dirtyfrag-arm64/</guid><description>On aarch64 the rxrpc path oopses and AppArmor blocks the exploit over SSH. A complain-mode profile transition slips it through.</description></item><item><title>Detection Below the Socket Layer</title><link>https://linnemanlabs.com/posts/purple-team-engineering-tetragon-ebpf-detection-raw-sockets-af-packet/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/purple-team-engineering-tetragon-ebpf-detection-raw-sockets-af-packet/</guid><description>Malware that hand-builds its own packets slips past socket-level monitoring so the detection drops below the socket too.</description></item><item><title>The DNF Numbers Station</title><link>https://linnemanlabs.com/posts/purple-team-engineering-covert-channels-dnf-numbers-station/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/purple-team-engineering-covert-channels-dnf-numbers-station/</guid><description>C2 traffic indistinguishable from DNF update checks, with tasking hidden in the microseconds of Apache ETags.</description></item><item><title>Building and Detecting a Rust C2 Beacon</title><link>https://linnemanlabs.com/posts/purple-team-engineering-building-detecting-rust-c2-beacon/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/purple-team-engineering-building-detecting-rust-c2-beacon/</guid><description>Dual-layer encryption and a hardening pass from 1.4MB to 388K and the YARA rules that catch the beacon anyway.</description></item><item><title>Modeling hackerbot-claw Against My Own CI/CD</title><link>https://linnemanlabs.com/posts/modeling-hackerbot-claw-attack-against-my-cicd-pipeline/</link><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/modeling-hackerbot-claw-attack-against-my-cicd-pipeline/</guid><description>A single pull_request_target misstep turns a trusted GitHub workflow into a supply-chain backdoor.</description></item><item><title>Running Your Own Transparency Infrastructure</title><link>https://linnemanlabs.com/posts/self-hosted-sigstore-transparency-infrastructure/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/self-hosted-sigstore-transparency-infrastructure/</guid><description>The full Sigstore trust stack, self-hosted from a YubiKey CA up. No public good instance required.</description></item><item><title>A Self-Hosted Observability Platform</title><link>https://linnemanlabs.com/posts/building-self-hosted-observability-platform/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/building-self-hosted-observability-platform/</guid><description>No Helm charts, no managed services. A 118-node observability platform configured by hand from the official docs.</description></item><item><title>An AI-Powered Alert Triage Engine</title><link>https://linnemanlabs.com/posts/building-ai-alert-triage-engine/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/building-ai-alert-triage-engine/</guid><description>Claude investigates each alert by querying Mimir and Loki through tool-calling, then triages it before it pages a human.</description></item><item><title>hello, world</title><link>https://linnemanlabs.com/posts/hello-world/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/posts/hello-world/</guid><description>introducing LinnemanLabs - 20+ years of breaking and building systems, now writing it down.'</description></item><item><title>About Me</title><link>https://linnemanlabs.com/about/me/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/about/me/</guid><description>&lt;pre class="term"&gt;
░▒▓██████████████████████████████████████████████████████████████████████████▓▒░

 ██▓ ██▓ ███▄ █ ███▄ █ ▓█████ ███▄ ▄███▓ ▄▄▄ ███▄ █
 ▓██▒ ▓██▒ ██ ▀█ █ ██ ▀█ █ ▓█ ▀ ▓██▒▀█▀ ██▒▒████▄ ██ ▀█ █
 ▒██░ ▒██▒▓██ ▀█ ██▒▓██ ▀█ ██▒▒███ ▓██ ▓██░▒██ ▀█▄ ▓██ ▀█ ██▒
 ▒██░ ░██░▓██▒ ▐▌██▒▓██▒ ▐▌██▒▒▓█ ▄ ▒██ ▒██ ░██▄▄▄▄██ ▓██▒ ▐▌██▒
 ░██████▒░██░▒██░ ▓██░▒██░ ▓██░░▒████▒▒██▒ ░██▒ ▓█ ▓██▒▒██░ ▓██░
 ░ ▒░▓ ░░▓ ░ ▒░ ▒ ▒ ░ ▒░ ▒ ▒ ░░ ▒░ ░░ ▒░ ░ ░ ▒▒ ▓▒█░░ ▒░ ▒ ▒
 ░ ░ ▒ ░ ▒ ░░ ░░ ░ ▒░░ ░░ ░ ▒░ ░ ░ ░░ ░ ░ ▒ ▒▒ ░░ ░░ ░ ▒░
 ░ ░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░ ░ ░
 ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░

 ██▓ ▄▄▄ ▄▄▄▄ ██████
 ▓██▒ ▒████▄ ▓█████▄ ▒██ ▒
 ▒██░ ▒██ ▀█▄ ▒██▒ ▄██░ ▓██▄
 ▒██░ ░██▄▄▄▄██ ▒██░█▀ ▒ ██▒
 ░██████▒▓█ ▓██▒░▓█ ▀█▓▒██████▒▒
 ░ ▒░▓ ░▒▒ ▓▒█░░▒▓███▀▒▒ ▒▓▒ ▒ ░
 ░ ░ ▒ ░ ▒ ▒▒ ░▒░▒ ░ ░ ░▒ ░ ░
 ░ ░ ░ ▒ ░ ░ ░ ░ ░
 ░ ░ ░ ░ ░ ░
 ░

░▒▓██████████████████████████████████████████████████████████████████████████▓▒░
┌───────────────────────────────────────────────────────────────────────────────
│
│ ::: presents ::: about · the · operator [release 2026]
│
└──[ keith@linnemanlabs:~/about$ ]──────────────────────────────────────────────┐
 │
 $ whoami │
 keith linneman │
 │
 $ uptime │
 09:08:59 up 20+ years, load average: build, operate, attack │
 │
 $ file /etc/localtime │
 /etc/localtime: symbolic link to ../usr/share/zoneinfo/America/Los_Angeles │
 │
 $ id │
 uid=1001(k) gid=1005(ops) groups=1006(research),1007(blue-team),1008(red-team)│
 │
 $ history | tail -21 | head -20 │
 980 ./build infrastructure --aws --accounts_total=12 --node_count=200+ │
 981 ./build ansible --roles=20+ --zero-lint-failures --handwritten │
 982 ./deploy observability --prometheus --loki --mimir --pyroscope --tempo │
 983 ./build go-libraries --observability --instrumentation --http │
 984 ./build ebpf-exporters --kernel-telemetry --prometheus │
 985 ./build pki --yubikey-root --intermediates=3 --p384 --tuf --cosign │
 986 ./perform key-ceremony --air-gapped --tails --offline-root │
 987 ./build kms-csr-tool --go --hardware-backed-signing │
 988 ./deploy sigstore --rekor --tesseract --tsa --fulcio │
 989 ./deploy spiffe-spire --workload-identity --every-service │
 990 ./build trust.linnemanlabs.com │
 991 ./build app-build-system --github --sigstore --keyless-signing --oidc │
 992 ./deploy wazuh --agents=164 --ossec --osquery --yara --suricata │
 993 ./build linnemanlabs.com │
 994 ./build vigil --alerts --llm-triage --notify=slack │
 995 ./build glimmer --c2 --beacon --raw-sockets --af_packet --dbus │
 996 ./run purple-team-exercises --emulate=adversary --verify=detection │
 997 ./migrate cloudformation --to=terraform --start=trust-account │
 998 ./build switchboard --v1 --grpc --spiffe --runbook-proposal │
 999 ./build hardened-workstation --ebpf --lsm --selinux --secure-boot │
 │
 $ ps -u k │
 PID STAT COMMAND │
 0001 R switchboard --version=1 │
 0002 S vigil --version=1 --deployed │
 0003 R terraform-migration --account=trust │
 0004 R improve-workstation --research --attack --harden --document │
 R = Running(building), S = Sleeping(deployed), Z = Zombie(dormant) │
 │
 $ goodbye │
 goodbye: Command not found. │
 │
 ^] │
 telnet&gt; q │
 Connection closed. │
 │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└─[ methodology ]───────────────────────────────────────────────────────────────┐
 │
 &gt; detect ........... see what is actually happening │
 &gt; instrument ....... make it visible to anyone │
 &gt; correlate ........ connect signals across layers │
 &gt; verify ........... prove the conclusion, end to end │
 &gt; document ......... leave the trail for next time │
 │
 "every bit, every packet, every syscall." │
 │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└─[ now playing ]───────────────────────────────────────────────────────────────┐
 │
 · vigil ........... AI alert triage engine (go) .......... shipped │
 · switchboard ..... AI orchestration platform ............ in progress │
 · trust ........... sigstore + spire chain ............... phase 4 of 6 │
 · clauditor ....... eBPF audit daemon (AI agents) ........ planned │
 · leash ........... eBPF LSM-based AI containment ........ planned │
 · glimmer.......... adversary emulation, C2 framework..... in progress │
 · prism............ detection engineering verifier........ planned │
 │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└─[ stack ]─────────────────────────────────────────────────────────────────────┐
 │
 cloud ............. aws (us-east-2) · 200+ nodes · 12 accounts │
 config ............ cloudformation → terraform · ansible · zero modules │
 observability ..... prometheus · mimir · loki · tempo · pyroscope │
 identity .......... custom pki · spire · sigstore · yubikey root │
 defense ........... wazuh · ossec · suricata · yara · tetragon · ebpf │
 languages ......... go · rust · shell · sql │
 │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└─[ greetz ]────────────────────────────────────────────────────────────────────┐
 │
 to: the people still reading source 3 layers below the abstractions │
 │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└─[ contact ]───────────────────────────────────────────────────────────────────┐
 │
 www ..........: linnemanlabs.com │
 trust ........: trust.linnemanlabs.com │
 github .......: github.com/linnemanlabs │
 github .......: github.com/keithlinneman │
 email ........: hello@linnemanlabs.com │
┌───────────────────────────────────────────────────────────────────────────────┘
│
└───────────────────────────────────────────────────────────────────────────────
░▒▓██████████████████████████████████████████████████████████████████████████▓▒░
 · LinnemanLabs · est. 199x · 
░▒▓██████████████████████████████████████████████████████████████████████████▓▒░&lt;/pre&gt;
&lt;h2 id="keith-linneman"&gt;Keith Linneman&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve been doing this since the mid-90s - over 25 years of building, breaking, and operating systems. I started by breaking into them as a kid, living on IRC, learning how networks and operating systems actually worked by taking them apart. That offensive background shaped everything that came after. I moved into infrastructure and operations, bringing an attacker&amp;rsquo;s perspective to how I design, harden, and monitor production systems. Now I&amp;rsquo;m circling back to offensive security with deep infrastructure and operations experience behind it.&lt;/p&gt;</description></item><item><title>Application Provenance</title><link>https://linnemanlabs.com/about/provenance/app/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/about/provenance/app/</guid><description>&lt;p&gt;Provenance for the currently running server binary - source information, build attestations, vulnerability scans, SBOMs, licensing, and container metadata. The application is a custom Go binary built with security and observability as primary concerns.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/keithlinneman/linnemanlabs-web"&gt;linnemanlabs-web on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/keithlinneman/build-system"&gt;build-system on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This page currently covers application-level provenance. I&amp;rsquo;m working toward extending attestations down through the full trust hierarchy - OS-level integrity (IMA/EVM), dm-verity verified filesystems, kernel lockdown, UEFI Secure Boot, and TPM-based hardware attestation - so that every layer is cryptographically anchored to the one below it.&lt;/p&gt;</description></item><item><title>Content Provenance</title><link>https://linnemanlabs.com/about/provenance/content/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/about/provenance/content/</guid><description>&lt;p&gt;Provenance for the content bundle currently being served - source information, build tooling with checksums, and file inventory. The content bundle is a signed artifact containing all static HTML, CSS, JavaScript, and assets generated by Hugo. The server verifies bundle integrity at load time before serving any content.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/keithlinneman/linnemanlabs-site"&gt;linnemanlabs-site on GitHub&lt;/a&gt;&lt;/p&gt;</description></item><item><title>LinnemanLabs Infrastructure</title><link>https://linnemanlabs.com/about/infrastructure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://linnemanlabs.com/about/infrastructure/</guid><description>&lt;p&gt;This site runs on the full LinnemanLabs platform - the same multi-account AWS organization, observability stack, supply chain security, and hardened images behind every project. Everything described here applies to what&amp;rsquo;s serving this page.&lt;/p&gt;
&lt;p&gt;I build and manage all of this myself. No Terraform modules, no managed platforms, no abstraction layers I don&amp;rsquo;t own. Every CloudFormation template, every Ansible role, every pipeline is hand-written because I want to understand exactly what&amp;rsquo;s running and why.&lt;/p&gt;</description></item></channel></rss>