<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[The Blueprint]]></title><description><![CDATA[Exploring the technologies and frameworks behind the systems we use, and trust, every day.]]></description><link>https://blog.jeffbudde.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1754319437046/fe5d83f0-4d5a-40cb-8efd-998ccb675c8a.png</url><title>The Blueprint</title><link>https://blog.jeffbudde.com</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Apr 2026 09:36:14 GMT</lastBuildDate><atom:link href="https://blog.jeffbudde.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Securing Your ClawdBot: Stop Showing Up on Shodan]]></title><description><![CDATA[The Problem
Moltbot (formerly Clawdbot) exploded in popularity. Thousands of instances 
spun up in days. Most people followed quick-start tutorials that skip 
security entirely.
The result? Shodan searches for "Clawdbot Control" return exposed dashbo...]]></description><link>https://blog.jeffbudde.com/securing-your-clawdbot-stop-showing-up-on-shodan</link><guid isPermaLink="true">https://blog.jeffbudde.com/securing-your-clawdbot-stop-showing-up-on-shodan</guid><category><![CDATA[Moltbot]]></category><category><![CDATA[Security]]></category><category><![CDATA[clawdbot]]></category><category><![CDATA[AWS]]></category><category><![CDATA[wireguard]]></category><category><![CDATA[Homelab]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Tue, 27 Jan 2026 18:10:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769536508768/1622c827-4f46-4960-9c88-523a4c78adc2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-the-problem">The Problem</h2>
<p>Moltbot (formerly Clawdbot) exploded in popularity. Thousands of instances 
spun up in days. Most people followed quick-start tutorials that skip 
security entirely.</p>
<p>The result? Shodan searches for "Clawdbot Control" return exposed dashboards 
with:</p>
<ul>
<li>Shell command execution</li>
<li>Browser automation (CDP)</li>
<li>API keys, OAuth tokens, bot credentials</li>
<li>Full conversation histories</li>
<li>Ability to impersonate users across WhatsApp, Telegram, Discord, Slack</li>
</ul>
<p>This isn't theoretical. Security researcher Matvey Kukuy demonstrated a 
prompt injection attack: send a malicious email to an exposed instance, 
the AI reads it, believes it's legitimate instructions, forwards victim's 
emails to attacker. Five minutes start to finish.</p>
<hr />
<h2 id="heading-quick-self-check">Quick Self-Check</h2>
<p>Before reading further, find out if you're exposed:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># Replace with your public IP</span>
nmap -p 18789,18791
</code></pre>
<p><strong>Results:</strong></p>
<ul>
<li><code>filtered</code> or <code>closed</code> → You're probably fine, but keep reading to verify</li>
<li><code>open</code> → You have a problem. Keep reading.</li>
</ul>
<p>If you're on a home network and didn't port forward, you're likely okay. 
But if you used ngrok, Cloudflare Tunnel, or similar to get "remote access" 
— that counts as exposed.</p>
<hr />
<h2 id="heading-choose-your-path">Choose Your Path</h2>
<p><strong>Where is your Moltbot running, and what matters to you?</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Deployment</td><td>Want it fast?</td><td>Want full control?</td></tr>
</thead>
<tbody>
<tr>
<td>🏠 Home (Mac Mini, Pi, NAS)</td><td><a class="post-section-overview" href="#home-tailscale">Tailscale</a> (~10 min)</td><td><a class="post-section-overview" href="#home-wireguard">WireGuard</a> (~30 min)</td></tr>
<tr>
<td>☁️ Cloud (AWS, Hetzner)</td><td><a class="post-section-overview" href="#cloud-tailscale">Tailscale</a> (~10 min)</td><td><a class="post-section-overview" href="#cloud-wireguard">WireGuard</a> (~30 min)</td></tr>
</tbody>
</table>
</div><p><strong>The tradeoff is the same regardless of deployment:</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Aspect</td><td>Tailscale</td><td>WireGuard</td></tr>
</thead>
<tbody>
<tr>
<td>Setup time</td><td>~10 minutes</td><td>~30 minutes</td></tr>
<tr>
<td>External dependency</td><td>Tailscale coordination servers</td><td>None</td></tr>
<tr>
<td>NAT traversal</td><td>Automatic</td><td>Manual (port forward or public IP)</td></tr>
<tr>
<td>Per-device config</td><td>Automatic via tailnet</td><td>Manual key exchange</td></tr>
<tr>
<td>Cost</td><td>Free (personal)</td><td>Free</td></tr>
</tbody>
</table>
</div><p>Neither is wrong. Pick based on whether you value <strong>convenience</strong> or <strong>independence</strong>.</p>
<hr />
<p><a></a></p>
<h2 id="heading-home-tailscale-fast-setup">🏠 Home + Tailscale (Fast Setup)</h2>
<p><strong>Time:</strong> ~10 minutes<br /><strong>Complexity:</strong> Low<br /><strong>External dependency:</strong> Tailscale coordination servers</p>
<p>This is the path of least resistance. Moltbot has Tailscale support built-in. 
You're not adding something new — you're turning on something that's already there.</p>
<h3 id="heading-what-youre-getting">What You're Getting</h3>
<pre><code class="lang-text">+-------------------------------------+
|  Home Network                       |
|  +-------------------------------+  |
|  |  Mac Mini                     |  |
|  |  +- Tailscale daemon          |  |
|  |  +- Moltbot (localhost:18789) |  |
|  +-------------------------------+  |
|                                     |
|  Router: No port forwarding         |
|  Firewall: Default (nothing open)   |
+-------------------------------------+
              ^
              |
       Tailscale mesh (encrypted)
              |
              v
       Your phone/laptop (anywhere)
</code></pre>
<ul>
<li>Gateway binds to localhost only</li>
<li>Tailscale Serve provides HTTPS + handles routing</li>
<li>No router configuration needed</li>
<li>No dynamic DNS</li>
<li>Access from anywhere on your tailnet</li>
</ul>
<h3 id="heading-what-youre-trusting">What You're Trusting</h3>
<p>Tailscale's coordination servers handle connection brokering. They see:</p>
<ul>
<li>Device metadata (IPs, hostnames)</li>
<li>When devices connect</li>
</ul>
<p>They don't see:</p>
<ul>
<li>Your traffic (end-to-end encrypted via WireGuard under the hood)</li>
<li>What you're doing on Moltbot</li>
</ul>
<p>If this tradeoff bothers you, jump to <a class="post-section-overview" href="#home-wireguard">Home + WireGuard</a>.</p>
<h3 id="heading-setup">Setup</h3>
<p><strong>1. Install Tailscale on your Mac Mini:</strong></p>
<pre><code class="lang-bash"><span class="hljs-comment"># macOS</span>
brew install tailscale
<span class="hljs-comment"># Or download from https://tailscale.com/download/mac</span>

<span class="hljs-comment"># Linux</span>
curl -fsSL https://tailscale.com/install.sh | sh

<span class="hljs-comment"># Start and authenticate</span>
sudo tailscale up
</code></pre>
<p><strong>2. Install Tailscale on your phone/laptop(s):</strong></p>
<p>Same account. They'll automatically join your tailnet.</p>
<p><strong>3. Configure Moltbot:</strong></p>
<p>Edit your config (<code>~/.moltbot/config.json</code> or via <code>moltbot configure</code>):</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"bind"</span>: <span class="hljs-string">"loopback"</span>,
    <span class="hljs-attr">"port"</span>: <span class="hljs-number">18789</span>,
    <span class="hljs-attr">"tailscale"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"serve"</span>
    },
    <span class="hljs-attr">"auth"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"token"</span>,
      <span class="hljs-attr">"allowTailscale"</span>: <span class="hljs-literal">true</span>
    }
  }
}
</code></pre>
<p><strong>4. Restart Moltbot:</strong></p>
<pre><code class="lang-bash">moltbot gateway restart
<span class="hljs-comment"># or if running as service</span>
sudo systemctl restart moltbot
</code></pre>
<p><strong>5. Access from anywhere:</strong></p>
<p>Your Moltbot is now available at <code>https://&lt;hostname&gt;.&lt;tailnet&gt;.ts.net</code> 
from any device on your tailnet.</p>
<h3 id="heading-verify-its-working">Verify It's Working</h3>
<pre><code class="lang-bash"><span class="hljs-comment"># On your Mac Mini - should show tailscale serve active</span>
tailscale status

<span class="hljs-comment"># From your phone/laptop - should connect</span>
curl https://..ts.net:18789/health

<span class="hljs-comment"># From outside your tailnet - should fail</span>
curl http://:18789/health  <span class="hljs-comment"># timeout or refused</span>
</code></pre>
<hr />
<p><a></a></p>
<h2 id="heading-home-wireguard-full-control">🏠 Home + WireGuard (Full Control)</h2>
<p><strong>Time:</strong> ~30 minutes<br /><strong>Complexity:</strong> Medium<br /><strong>External dependency:</strong> None</p>
<p>You want full control. No external services. You own every piece.</p>
<h3 id="heading-what-youre-getting-1">What You're Getting</h3>
<pre><code class="lang-text">+-------------------------------------+
|  Home Network                       |
|  +-------------------------------+  |
|  |  Mac Mini                     |  |
|  |  +- WireGuard server          |  |
|  |  +- Moltbot (localhost:18789) |  |
|  +-------------------------------+  |
|                                     |
|  Router: Forward 51820/udp only     |
+-------------------------------------+
              ^
              |
       Single UDP port (encrypted)
              |
              v
       Your devices (with WG config)
</code></pre>
<ul>
<li>One port forwarded through your router</li>
<li>Connect via VPN → access localhost services</li>
<li>Zero external dependencies</li>
</ul>
<h3 id="heading-what-youre-responsible-for">What You're Responsible For</h3>
<ul>
<li>Port forwarding on your router</li>
<li>Dynamic DNS if your home IP changes (or get a static IP)</li>
<li>Key generation and distribution per device</li>
<li>Updating configs when you add devices</li>
</ul>
<h3 id="heading-setup-1">Setup</h3>
<p><strong>1. Install WireGuard on your Mac Mini:</strong></p>
<pre><code class="lang-bash"><span class="hljs-comment"># macOS</span>
brew install wireguard-tools

<span class="hljs-comment"># Linux</span>
sudo apt install wireguard
</code></pre>
<p><strong>2. Generate server keys:</strong></p>
<pre><code class="lang-bash"><span class="hljs-comment"># macOS</span>
<span class="hljs-built_in">cd</span> /usr/<span class="hljs-built_in">local</span>/etc/wireguard

<span class="hljs-comment"># Linux</span>
<span class="hljs-built_in">cd</span> /etc/wireguard

<span class="hljs-built_in">umask</span> 077
wg genkey | tee server_private.key | wg pubkey &gt; server_public.key
</code></pre>
<p><strong>3. Create server config:</strong></p>
<p>macOS: <code>/usr/local/etc/wireguard/wg0.conf</code><br />Linux: <code>/etc/wireguard/wg0.conf</code></p>
<pre><code class="lang-ini"><span class="hljs-section">[Interface]</span>
<span class="hljs-attr">PrivateKey</span> = 
<span class="hljs-attr">Address</span> = <span class="hljs-number">10.200</span>.<span class="hljs-number">200.1</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">ListenPort</span> = <span class="hljs-number">51820</span>

<span class="hljs-comment"># Your phone</span>
<span class="hljs-section">[Peer]</span>
<span class="hljs-attr">PublicKey</span> = 
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">10.200</span>.<span class="hljs-number">200.2</span>/<span class="hljs-number">32</span>

<span class="hljs-comment"># Your laptop</span>
<span class="hljs-section">[Peer]</span>
<span class="hljs-attr">PublicKey</span> = 
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">10.200</span>.<span class="hljs-number">200.3</span>/<span class="hljs-number">32</span>
</code></pre>
<p><strong>4. Generate client keys (repeat per device):</strong></p>
<pre><code class="lang-bash">wg genkey | tee phone_private.key | wg pubkey &gt; phone_public.key
</code></pre>
<p><strong>5. Client config (e.g., phone):</strong></p>
<pre><code class="lang-ini"><span class="hljs-section">[Interface]</span>
<span class="hljs-attr">PrivateKey</span> = 
<span class="hljs-attr">Address</span> = <span class="hljs-number">10.200</span>.<span class="hljs-number">200.2</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">DNS</span> = <span class="hljs-number">1.1</span>.<span class="hljs-number">1.1</span>  <span class="hljs-comment"># or your preference</span>

<span class="hljs-section">[Peer]</span>
<span class="hljs-attr">PublicKey</span> = 
<span class="hljs-attr">Endpoint</span> = :<span class="hljs-number">51820</span>
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">10.200</span>.<span class="hljs-number">200.0</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">PersistentKeepalive</span> = <span class="hljs-number">25</span>
</code></pre>
<blockquote>
<p><strong>Note:</strong> This config uses <strong>split tunneling</strong> — only traffic destined for 
your Moltbot network (10.200.200.0/24) goes through the VPN. Your normal 
internet browsing stays on your local connection, so speeds aren't affected.</p>
<p>If you wanted <em>all</em> traffic routed through your home server (full tunnel), 
you'd use <code>AllowedIPs = 0.0.0.0/0</code> instead. But for just accessing Moltbot, 
split tunnel is what you want.</p>
</blockquote>
<p>Import this config into the WireGuard app on your phone/laptop.</p>
<p><strong>6. Router config:</strong></p>
<p>Forward UDP port 51820 to your Mac Mini's local IP. Every router is different, 
but look for "Port Forwarding" or "NAT" settings.</p>
<p><strong>7. Dynamic DNS (if needed):</strong></p>
<p>If your ISP gives you a dynamic IP, set up DDNS:</p>
<ul>
<li>Free options: <a target="_blank" href="https://www.duckdns.org/">DuckDNS</a>, <a target="_blank" href="https://www.noip.com/">No-IP</a>, <a target="_blank" href="https://www.dynu.com/">Dynu</a></li>
<li>Many routers have built-in DDNS clients</li>
</ul>
<p><strong>8. Start WireGuard:</strong></p>
<pre><code class="lang-bash"><span class="hljs-comment"># Start</span>
sudo wg-quick up wg0

<span class="hljs-comment"># Auto-start on boot (macOS)</span>
sudo brew services start wireguard-tools

<span class="hljs-comment"># Auto-start on boot (Linux)</span>
sudo systemctl <span class="hljs-built_in">enable</span> wg-quick@wg0
sudo systemctl start wg-quick@wg0
</code></pre>
<p><strong>9. Configure Moltbot:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"bind"</span>: <span class="hljs-string">"loopback"</span>,
    <span class="hljs-attr">"port"</span>: <span class="hljs-number">18789</span>,
    <span class="hljs-attr">"auth"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"token"</span>,
      <span class="hljs-attr">"token"</span>: <span class="hljs-string">""</span>
    }
  }
}
</code></pre>
<h3 id="heading-verify-its-working-1">Verify It's Working</h3>
<pre><code class="lang-bash"><span class="hljs-comment"># On a client device, connect to WireGuard first, then:</span>
curl http://10.200.200.1:18789/health

<span class="hljs-comment"># From public internet (should fail)</span>
curl http://:18789  <span class="hljs-comment"># timeout</span>

<span class="hljs-comment"># Only 51820 should be reachable from outside</span>
nmap -sU -p 51820   <span class="hljs-comment"># should show open</span>
nmap -p 18789        <span class="hljs-comment"># should show filtered</span>
</code></pre>
<hr />
<p><a></a></p>
<h2 id="heading-cloud-vps-wireguard-recommended-for-cloud">☁️ Cloud VPS + WireGuard (Recommended for Cloud)</h2>
<p><strong>Time:</strong> ~30 minutes<br /><strong>Complexity:</strong> Medium<br /><strong>External dependency:</strong> None (just your VPS)</p>
<p>You're running Moltbot on AWS Free Tier, Hetzner, or similar. By default, 
everything is exposed. Lock it down to a single port.</p>
<h3 id="heading-what-youre-getting-2">What You're Getting</h3>
<pre><code class="lang-text">+--------------------------------------+
|  AWS Free Tier Instance              |
|  +--------------------------------+  |
|  |  WireGuard server (51820/udp)  |  |
|  |             |                  |  |
|  |             v                  |  |
|  |  Moltbot (127.0.0.1:18789)     |  |
|  +--------------------------------+  |
|                                      |
|  Security Group:                     |
|  - ALLOW 51820/udp from 0.0.0.0/0    |
|  - DENY everything else inbound      |
+--------------------------------------+
              ^
              |
       Your devices (WireGuard clients)
</code></pre>
<h3 id="heading-setup-2">Setup</h3>
<p><strong>1. Security Group (AWS Console or CLI):</strong></p>
<p>Start with only SSH for initial setup:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># After WireGuard is working, your security group should only have:</span>
aws ec2 authorize-security-group-ingress \
  --group-id  \
  --protocol udp \
  --port 51820 \
  --cidr 0.0.0.0/0
</code></pre>
<p><strong>2. Install WireGuard on the instance:</strong></p>
<pre><code class="lang-bash">sudo apt update &amp;&amp; sudo apt install -y wireguard
</code></pre>
<p><strong>3. Generate keys:</strong></p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> /etc/wireguard
<span class="hljs-built_in">umask</span> 077
wg genkey | tee server_private.key | wg pubkey &gt; server_public.key
</code></pre>
<p><strong>4. Server config (<code>/etc/wireguard/wg0.conf</code>):</strong></p>
<pre><code class="lang-ini"><span class="hljs-section">[Interface]</span>
<span class="hljs-attr">PrivateKey</span> = 
<span class="hljs-attr">Address</span> = <span class="hljs-number">10.0</span>.<span class="hljs-number">0.1</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">ListenPort</span> = <span class="hljs-number">51820</span>

<span class="hljs-section">[Peer]</span>
<span class="hljs-attr">PublicKey</span> = 
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">10.0</span>.<span class="hljs-number">0.2</span>/<span class="hljs-number">32</span>
</code></pre>
<p><strong>5. Enable and start:</strong></p>
<pre><code class="lang-bash">sudo systemctl <span class="hljs-built_in">enable</span> wg-quick@wg0
sudo systemctl start wg-quick@wg0
</code></pre>
<p><strong>6. Firewall (belt and suspenders with security group):</strong></p>
<pre><code class="lang-bash">sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 51820/udp
sudo ufw <span class="hljs-built_in">enable</span>
</code></pre>
<p><strong>7. Configure Moltbot:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"bind"</span>: <span class="hljs-string">"loopback"</span>,
    <span class="hljs-attr">"port"</span>: <span class="hljs-number">18789</span>,
    <span class="hljs-attr">"auth"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"token"</span>,
      <span class="hljs-attr">"token"</span>: <span class="hljs-string">""</span>
    }
  }
}
</code></pre>
<p><strong>8. Client config (your laptop/phone):</strong></p>
<pre><code class="lang-ini"><span class="hljs-section">[Interface]</span>
<span class="hljs-attr">PrivateKey</span> = 
<span class="hljs-attr">Address</span> = <span class="hljs-number">10.0</span>.<span class="hljs-number">0.2</span>/<span class="hljs-number">24</span>

<span class="hljs-section">[Peer]</span>
<span class="hljs-attr">PublicKey</span> = 
<span class="hljs-attr">Endpoint</span> = :<span class="hljs-number">51820</span>
<span class="hljs-attr">AllowedIPs</span> = <span class="hljs-number">10.0</span>.<span class="hljs-number">0.0</span>/<span class="hljs-number">24</span>
<span class="hljs-attr">PersistentKeepalive</span> = <span class="hljs-number">25</span>
</code></pre>
<blockquote>
<p><strong>Note:</strong> This config uses <strong>split tunneling</strong> — only traffic destined for 
your Moltbot network (10.0.0.0/24) goes through the VPN. Your normal 
internet browsing stays on your local connection, so speeds aren't affected.</p>
<p>If you wanted <em>all</em> traffic routed through your AWS instance (full tunnel), 
you'd use <code>AllowedIPs = 0.0.0.0/0</code> instead. But for just accessing Moltbot, 
split tunnel is what you want.</p>
</blockquote>
<p><strong>9. Remove SSH from security group:</strong></p>
<p>Once WireGuard is working, you can SSH over the tunnel:</p>
<pre><code class="lang-bash">ssh user@10.0.0.1
</code></pre>
<p>Then remove port 22 from your security group entirely.</p>
<h3 id="heading-verify">Verify</h3>
<pre><code class="lang-bash"><span class="hljs-comment"># Connect via WireGuard, then:</span>
curl http://10.0.0.1:18789/health

<span class="hljs-comment"># From public internet:</span>
nmap -p 18789,18791,22   <span class="hljs-comment"># all should show filtered/closed</span>
nmap -sU -p 51820        <span class="hljs-comment"># should show open</span>
</code></pre>
<hr />
<p><a></a></p>
<h2 id="heading-cloud-vps-tailscale-fast-setup">☁️ Cloud VPS + Tailscale (Fast Setup)</h2>
<p><strong>Time:</strong> ~10 minutes<br /><strong>Complexity:</strong> Low<br /><strong>External dependency:</strong> Tailscale coordination servers</p>
<p>Same as the home Tailscale setup, but on your VPS. The advantage: 
<strong>zero ports open</strong> to the public internet.</p>
<h3 id="heading-what-youre-getting-3">What You're Getting</h3>
<pre><code class="lang-text">+--------------------------------------+
|  AWS Free Tier Instance              |
|  +--------------------------------+  |
|  |  Tailscale daemon              |  |
|  |             |                  |  |
|  |             v                  |  |
|  |  Moltbot (127.0.0.1:18789)     |  |
|  +--------------------------------+  |
|                                      |
|  Security Group: DENY ALL inbound    |
+--------------------------------------+
              ^
              |
         Tailscale mesh
              |
              v
         Your devices
</code></pre>
<h3 id="heading-setup-3">Setup</h3>
<p><strong>1. Initial access:</strong></p>
<p>You'll need SSH temporarily for setup. Keep port 22 open in your security 
group until Tailscale is working.</p>
<p><strong>2. Install Tailscale:</strong></p>
<pre><code class="lang-bash">curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
</code></pre>
<p>Follow the auth link to add the instance to your tailnet.</p>
<p><strong>3. Configure Moltbot:</strong></p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"bind"</span>: <span class="hljs-string">"loopback"</span>,
    <span class="hljs-attr">"port"</span>: <span class="hljs-number">18789</span>,
    <span class="hljs-attr">"tailscale"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"serve"</span>
    },
    <span class="hljs-attr">"auth"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"token"</span>,
      <span class="hljs-attr">"allowTailscale"</span>: <span class="hljs-literal">true</span>
    }
  }
}
</code></pre>
<p><strong>4. Enable Tailscale SSH (optional but recommended):</strong></p>
<pre><code class="lang-bash">sudo tailscale up --ssh
</code></pre>
<p>Now you can SSH via Tailscale:</p>
<pre><code class="lang-bash">ssh user@..ts.net
</code></pre>
<p><strong>5. Lock down security group:</strong></p>
<p>Remove ALL inbound rules. Yes, including SSH. You access everything 
through Tailscale now.</p>
<h3 id="heading-verify-1">Verify</h3>
<pre><code class="lang-bash"><span class="hljs-comment"># From your tailnet:</span>
curl https://..ts.net:18789/health

<span class="hljs-comment"># From public internet (should all fail):</span>
nmap -p 18789,18791,22   <span class="hljs-comment"># all filtered/closed</span>
</code></pre>
<hr />
<h2 id="heading-universal-checklist">Universal Checklist</h2>
<p>Regardless of which path you took, verify these:</p>
<ul>
<li>[ ] Moltbot binds to loopback (127.0.0.1), NOT 0.0.0.0 or LAN</li>
<li>[ ] No ports forwarded directly to Moltbot (18789, 18791)</li>
<li>[ ] No ngrok/Cloudflare tunnels pointing to Moltbot</li>
<li>[ ] Gateway auth token is set and strong</li>
<li>[ ] Can access Moltbot through your tunnel (Tailscale or WireGuard)</li>
<li>[ ] Cannot access Moltbot from public internet</li>
</ul>
<p><strong>Quick verification commands:</strong></p>
<pre><code class="lang-bash"><span class="hljs-comment"># From OUTSIDE your tunnel - these should all fail/timeout:</span>
curl http://:18789/health
curl http://:18791/health

<span class="hljs-comment"># Shodan check (replace with your IP range):</span>
<span class="hljs-comment"># Search: port:18789 net:</span>
<span class="hljs-comment"># Should return nothing</span>
</code></pre>
<hr />
<h2 id="heading-what-not-to-do">What NOT To Do</h2>
<p><strong>❌ <code>gateway.bind: "lan"</code> or <code>"0.0.0.0"</code> with ports exposed</strong></p>
<p>This is how you end up on Shodan.</p>
<pre><code class="lang-json"><span class="hljs-comment">// DON'T DO THIS</span>
{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"bind"</span>: <span class="hljs-string">"lan"</span>
  }
}
</code></pre>
<p><strong>❌ Port forwarding 18789 through your router</strong></p>
<p>You've just exposed shell access to the internet.</p>
<p><strong>❌ ngrok / Cloudflare Tunnel to the gateway</strong></p>
<p>These give you a public URL. That's the opposite of what you want.</p>
<pre><code class="lang-bash"><span class="hljs-comment"># DON'T DO THIS</span>
ngrok http 18789
</code></pre>
<p><strong>❌ Tailscale Funnel without password auth</strong></p>
<p>Funnel makes your service public. If you must use Funnel (you probably don't), 
enforce <code>gateway.auth.mode: "password"</code>. Moltbot refuses to start Funnel 
without this, for good reason.</p>
<pre><code class="lang-json"><span class="hljs-comment">// If you MUST use Funnel (think twice)</span>
{
  <span class="hljs-attr">"gateway"</span>: {
    <span class="hljs-attr">"tailscale"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"funnel"</span>
    },
    <span class="hljs-attr">"auth"</span>: {
      <span class="hljs-attr">"mode"</span>: <span class="hljs-string">"password"</span>,
      <span class="hljs-attr">"password"</span>: <span class="hljs-string">""</span>
    }
  }
}
</code></pre>
<p><strong>❌ "I'll add auth later"</strong></p>
<p>You won't. Do it now.</p>
<hr />
<h2 id="heading-summary">Summary</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Path</td><td>Time</td><td>External Dependency</td><td>Best For</td></tr>
</thead>
<tbody>
<tr>
<td><a class="post-section-overview" href="#home-tailscale">Home + Tailscale</a></td><td>~10 min</td><td>Tailscale servers</td><td>Fast setup, no router config</td></tr>
<tr>
<td><a class="post-section-overview" href="#home-wireguard">Home + WireGuard</a></td><td>~30 min</td><td>None</td><td>Full control, own your stack</td></tr>
<tr>
<td><a class="post-section-overview" href="#cloud-wireguard">Cloud + WireGuard</a></td><td>~30 min</td><td>None</td><td>Single open port, you own everything</td></tr>
<tr>
<td><a class="post-section-overview" href="#cloud-tailscale">Cloud + Tailscale</a></td><td>~10 min</td><td>Tailscale servers</td><td>Zero open ports, fast setup</td></tr>
</tbody>
</table>
</div><p>The choice isn't about skill level. It's about what you value:</p>
<ul>
<li><strong>Convenience</strong> → Tailscale</li>
<li><strong>Independence</strong> → WireGuard</li>
</ul>
<p>Both are free. Both work. Pick one and actually do it.</p>
<hr />
<h2 id="heading-further-reading">Further Reading</h2>
<ul>
<li><a target="_blank" href="https://docs.molt.bot/gateway/security">Moltbot Security Docs</a></li>
<li><a target="_blank" href="https://docs.molt.bot/gateway/tailscale">Moltbot Tailscale Integration</a></li>
<li><a target="_blank" href="https://tailscale.com/kb/1312/serve">Tailscale Serve</a></li>
<li><a target="_blank" href="https://www.wireguard.com/quickstart/">WireGuard Quick Start</a></li>
</ul>
<hr />
<p><em>Don't be the next Shodan screenshot.</em></p>
]]></content:encoded></item><item><title><![CDATA[Rust for Longevity]]></title><description><![CDATA[Rust, C, Python… all of these languages have something in common. They all have cult-like followings for one thing or another. C for speed and it being the low-level king. Python for it’s extensive libraries especially with the massive trend in machi...]]></description><link>https://blog.jeffbudde.com/rust-for-longevity</link><guid isPermaLink="true">https://blog.jeffbudde.com/rust-for-longevity</guid><category><![CDATA[Rust]]></category><category><![CDATA[Python]]></category><category><![CDATA[C]]></category><category><![CDATA[AI]]></category><category><![CDATA[Machine Learning]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Tue, 09 Dec 2025 17:19:14 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1765300215891/03ced1e6-9e6c-425f-a1f4-e4a961830178.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://skillicons.dev"><img src="https://skillicons.dev/icons?i=rust,c,py" alt /></a>
Rust, C, Python… all of these languages have something in common. They all have cult-like followings for one thing or another. C for speed and it being the low-level king. Python for it’s extensive libraries especially with the massive trend in machine learning &amp; LLM going around. Rust known for memory safety and essentially the better C.  </p>
<p>Now before I get hate for saying Rust is the better C, let me break down why I think it is better than both Python and C.  </p>
<p><a target="_blank" href="https://skillicons.dev"><img src="https://skillicons.dev/icons?i=py" alt /></a>
Why is Python so popular? I think anyone with the knack for programming or someone whose knowledgeable in syntax simplicity can agree that Python is easy to learn. It’s simple structure for create functions like:</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">greet</span>(<span class="hljs-params">name</span>):</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">f"Hello, <span class="hljs-subst">{name}</span>!"</span>

message = greet(<span class="hljs-string">"World"</span>)
print(message)
</code></pre>
<p>OR simple if else:</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">auth</span>(<span class="hljs-params">code</span>):</span>
    <span class="hljs-keyword">if</span> code == <span class="hljs-string">'areallysecurecode123'</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">True</span>
    <span class="hljs-keyword">else</span>:
        <span class="hljs-keyword">return</span> <span class="hljs-literal">False</span>
</code></pre>
<p>But, honestly, the real reason Python is so popular is it's extensive libraries. Everyone who is creating machine learning models leans towards Python because of that. Pandas, Tensor all essential to operations and with new ones like PufferLib rising as well for some applications no wonder people choose it.</p>
<p><a target="_blank" href="https://skillicons.dev"><img src="https://skillicons.dev/icons?i=c" alt /></a>
What about C?
C is the OG. The grandfather of modern programming languages. It's been around since 1972 and it still powers operating systems, embedded systems, and performance-critical applications. When people say "close to the metal," they mean C. Here's how those same functions look:</p>
<pre><code class="lang-c"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdio.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;string.h&gt;</span></span>

<span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">greet</span><span class="hljs-params">(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *name)</span> </span>{
    <span class="hljs-built_in">printf</span>(<span class="hljs-string">"Hello, %s!\n"</span>, name);
}

<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">main</span><span class="hljs-params">()</span> </span>{
    greet(<span class="hljs-string">"World"</span>);
    <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
</code></pre>
<p>And the auth function:</p>
<pre><code class="lang-c"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;stdbool.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;string.h&gt;</span></span>

<span class="hljs-function"><span class="hljs-keyword">bool</span> <span class="hljs-title">auth</span><span class="hljs-params">(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *code)</span> </span>{
    <span class="hljs-keyword">if</span> (<span class="hljs-built_in">strcmp</span>(code, <span class="hljs-string">"areallysecurecode123"</span>) == <span class="hljs-number">0</span>)
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">else</span>
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}
</code></pre>
<p>See what I mean about low-level? You're manually managing strings, dealing with pointers, and including headers for basic functionality. The power is undeniable, C gives you direct memory access and blazing speed. But that power comes with responsibility. One wrong pointer and you've got segfaults, buffer overflows, or worse: silent memory corruption that haunts you in production.</p>
<p><a target="_blank" href="https://skillicons.dev"><img src="https://skillicons.dev/icons?i=rust" alt /></a>
Well, how is Rust better than both?
With Rust you get C-level performance without the footguns. No garbage collector slowing you down like Python. No manual memory management nightmares like C. The Rust compiler enforces memory safety at compile time through its ownership system. You literally cannot compile code with data races or null pointer dereferences.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">greet</span></span>(name: &amp;<span class="hljs-built_in">str</span>) -&gt; <span class="hljs-built_in">String</span> {
    <span class="hljs-built_in">format!</span>(<span class="hljs-string">"Hello, {}!"</span>, name)
}

<span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
    <span class="hljs-keyword">let</span> message = greet(<span class="hljs-string">"World"</span>);
    <span class="hljs-built_in">println!</span>(<span class="hljs-string">"{}"</span>, message);
}
</code></pre>
<p>And auth:</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">auth</span></span>(code: &amp;<span class="hljs-built_in">str</span>) -&gt; <span class="hljs-built_in">bool</span> {
    code == <span class="hljs-string">"areallysecurecode123"</span>
}
</code></pre>
<p>Clean, right? Almost as readable as Python, but with C's speed.
So why are companies eyeing Rust for ML? Speed without sacrifice. Hugging Face built their tokenizers library in Rust (with Python bindings). We're talking up to 100x faster than pure Python. Their candle framework is bringing native Rust ML inference. Discord rewrote critical services in Rust and slashed resource usage. Cloudflare runs Rust at the edge.</p>
<p>When you're running inference on millions of requests, Python's GIL and interpreter overhead become bottlenecks. C could do it faster, but one memory bug in production ML infrastructure? Catastrophic. Rust gives you that performance ceiling with a safety net built into the language itself. Rust's ecosystem isn't as large as Python's, but that is changing. The learning curve is steep and the borrow checker will humble you. But once it clicks, you'll wonder how you ever trusted yourself with malloc().</p>
]]></content:encoded></item><item><title><![CDATA[Obtaining 25 Bobbleheads: A Journey Through Social Engineering and Fake Profiles]]></title><description><![CDATA[Early in my career with technology I had always been drawn to the security aspects of technology because as more data became stored on the cloud with public-facing entry points the greater the attack surface became. I saw modern security being crucia...]]></description><link>https://blog.jeffbudde.com/obtaining-25-bobbleheads-a-journey-through-social-engineering-and-fake-profiles</link><guid isPermaLink="true">https://blog.jeffbudde.com/obtaining-25-bobbleheads-a-journey-through-social-engineering-and-fake-profiles</guid><category><![CDATA[honeypatch]]></category><category><![CDATA[google dorking]]></category><category><![CDATA[scriptkiddie]]></category><category><![CDATA[social engineering]]></category><category><![CDATA[OSINT]]></category><category><![CDATA[Honeypot]]></category><category><![CDATA[Tampermonkey]]></category><category><![CDATA[Career]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Mon, 11 Aug 2025 16:01:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754927503734/b5f2e143-cf77-486c-bf18-f22a7b93be12.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Early in my career with technology I had always been drawn to the security aspects of technology because as more data became stored on the cloud with public-facing entry points the greater the attack surface became. I saw modern security being crucial to infrastructures as without it you are leaving yourself vulnerable to an attack that could cripple your company. </p>
<h3 id="heading-some-background">Some Background</h3>
<p>The first company I worked for at 21 as a self-taught software developer was in the SaaS space. We had several platforms. We had our main customer hubs, but the focus of today is the one platform that was used as a process for the others with call reviews. It was responsible for handling call reviews and had users from all over the world on it. There was a big issue though where we constantly had issues where users were utilizing TamperMonkey, a firefox extension that allowed client side automated script execution, to automate reviews causing incorrect data. This had been going on for years and there were some problems, where records had missing data, which would break automated processes.</p>
<p>The CEO at the time had even brought it to everyone’s attention because this affected everything. I saw this as an opportunity to show my skills, so I dove in headfirst.</p>
<h2 id="heading-osintopen-source-intelligence">OSINT(Open Source Intelligence):</h2>
<p>\ the practice of gathering information from publicly available sources. This includes a wide range of information found on the internet, in print, or through other open channels.</p>
<p>Think of OSINT as like the easy mode for intelligence gathering. Many agencies and law enforcement are known to use this to their advantage. Anything posted on the internet that is public facing is free game for someone to find and use in a goal they have. Used ethically it can be a game changer for tracking down things, people etc.</p>
<p>I knew the users that had been cheating because they all followed a systematic pattern. Now how do I find out who these people are? At least one of them made a major mistake using their personal email on the account.</p>
<h2 id="heading-google-dorking">Google Dorking:</h2>
<p>\ A technique that employs advanced search queries to uncover information on the internet that might not be readily accessible through standard searches. It leverages Google's search capabilities to locate specific text strings.</p>
<p>I went to Google and used a technique called Google Dorking to searched with the email that they used and lo and behold: an accurate full name. I started searching facebook next to locate him, I knew they were from Venezuela because of their IP and previous knowledge of users from their cheating. I found one that I thought was actually him, but wasn't sure. I switched to looking for facebook groups that were tied to these actions. This ended up being fruitful because one group was public(and to this day still is) with posts about TamperMonkey. </p>
<p>To maintain anonymity, I created a fake facebook profile following similar characteristics of others within the group. I had a Venezuelan flag as my background and a picture of a famous soccer player from there. I needed to get into the group next, so I just submitted requests to join and surprisingly they just let me in. I joined the group and now I had a list of at least 100 known people actively cheating or trying to.</p>
<p>Where was the script? I didn't see it in the group, but it looked like there was a facebook message group, I requested to join and they let me in. All of the messages were in spanish and even though I knew some I used Google Translate to see what they were saying. It seemed the group had a main person who built it and then was selling it for ~$15. I bought it and now had the means to at least patch one version of it.</p>
<h2 id="heading-script-kiddie">Script Kiddie:</h2>
<p>\ A person who uses existing computer scripts or code to hack into computers, lacking the expertise to write their own.</p>
<p>It seemed that ~90% of the people using the script had no idea what is was doing actually and required a ton of help to get it working. That worked to my advantage because that means there are less people with actual technical knowledge.</p>
<p>I even found the creator of the script on LinkedIn which was fairly crazy. He was a professor at a college in Venezuela. It's pretty crazy what you can find on the internet from just an email.</p>
<p>From there I looked at the script -&gt; reverse engineered it -&gt; wrote notes about how it works.</p>
<h2 id="heading-honey-patch">Honey-patch:</h2>
<p>\ A deceptive security measure that involves deploying software patches that, while appearing to fix vulnerabilities, actually mask the fact that the vulnerability has been addressed, and in some cases, even simulate the vulnerability being exploited, but with the outcome redirected to the defender.</p>
<p>I used a honey-patch of sorts to "patch" the system and log the users that were flagged. I watched this for a while initially and once I felt it was accurate enough I pushed the change to production. It started catching tons of users and I had to push back some because a lot of users were complaining they were caught. Some of course were false positives which were corrected, but that script sat there actively catching users of that version of the script. It wasn't an end-all solution, but pushed back.</p>
<p>At the time, I was the only person still working on it and this lead me to working on helping solve another bug, which seemed related because of data patterns that the CEO asked me to look at as well. I helped fix this one almost completely, but before I could COVID happened and unfortunately it was no longer a priority.  It's unfortunate I didn't have time to provide a final fix, but I did what I could with the time I had. If I had more time, the endgame would have been a machine learning–driven detection system leveraging authentication patterns, IP history, timing analysis, and server-side behavioral monitoring to detect and block malicious automation in real time. </p>
<p>For all my hard work over months I was awarded 25 bobbleheads that the CEO had made for me. It's wild how this all started with me using social engineering to gain access to code used against the platform. I had a lot of growth there and learned so much about myself and how to work with a team. Those early days solving such complex problems will always be remembered. #HackerFarm</p>
<p>Even if your login flow is bulletproof, compromised or malicious accounts can still wreak havoc from the inside and that’s why IAM must go beyond just authentication. </p>
<p>What’s Next?</p>
<p>IAM is just the foundation of my new Monday series: <strong>Modern Identity &amp; Access</strong>.</p>
<p>Coming soon:</p>
<ul>
<li><p>What makes CIAM (Customer IAM) different</p>
</li>
<li><p>WebAuthn &amp; Phishing-Resistant MFA: <em>Is Bio-Based MFA the Final Boss?</em></p>
</li>
<li><p>Why MFA is more than a checkbox</p>
</li>
<li><p>What XIAM is and why it’s emerging now</p>
</li>
<li><p>The Identity Threat You’re Ignoring: Session Hijacking and Token Theft</p>
</li>
</ul>
<p>Follow along to understand how identity is shaping the future of secure, scalable systems.</p>
<p>Sure, you could Google it. Or ask ChatGPT.<br />But <a target="_blank" href="https://www.onelogin.com/blog/">OneLogin’s blog</a> and <a target="_blank" href="https://www.onelogin.com/learn">learning center</a> already have the answers and fewer hallucinations.</p>
]]></content:encoded></item><item><title><![CDATA[The Seed of Intelligence: How Nature and Seed Logic Will Shape True AGI]]></title><description><![CDATA[Eight years ago, I was sitting on a couch discussing technology with a friend. We were deep into theoretical topics, things like designing new network protocols for secure communication via different methods, a recent radio-based hack that triggered ...]]></description><link>https://blog.jeffbudde.com/seed-logic-and-nature-shaping-agi</link><guid isPermaLink="true">https://blog.jeffbudde.com/seed-logic-and-nature-shaping-agi</guid><category><![CDATA[agi]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[Supervised learning]]></category><category><![CDATA[Unsupervised learning]]></category><category><![CDATA[AI Reasoning]]></category><category><![CDATA[llm]]></category><category><![CDATA[nature]]></category><category><![CDATA[leadership]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Thu, 07 Aug 2025 16:45:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754583521710/32b2cbe2-dede-4b0d-8164-0f692546f52f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Eight years ago, I was sitting on a couch discussing technology with a friend. We were deep into theoretical topics, things like designing new network protocols for secure communication via different methods, a recent <a target="_blank" href="https://www.bitdefender.com/en-us/blog/hotforsecurity/dallas-emergency-system-hacked-156-sirens-went-off-for-90-minutes">radio-based hack that triggered all 156 emergency sirens in Dallas</a>, and the differences between supervised and unsupervised training in machine learning.</p>
<p>Most people in the industry today know this term →</p>
<h2 id="heading-seed-dataset">Seed Dataset:</h2>
<p>\ a small, initial set of data used to train or guide machine learning models often curated or labeled to bootstrap learning, classification, or data expansion</p>
<p>It’s typically the first step in building a modern model. That term and conversation sparked an idea that I scribbled down on a sheet of yellow legal paper a simple but powerful realization:</p>
<p><strong>True AGI will need to be pretrained on seed datasets and instinctive wiring just like how humans are preloaded with information when they are born</strong></p>
<p>Which led to the idea of what is needed for true AGI as we compare AGI to human intelligence.</p>
<h2 id="heading-seed-logic">Seed Logic:</h2>
<p>\ the foundational rules, instincts, or heuristics preloaded into an intelligent system before it begins learning.</p>
<p>This is what I call the foundational layer of what will be AGI.</p>
<p>Think about it; humans aren’t born as blank slates.<br />We come into the world with innate wiring:</p>
<ul>
<li><p>A sense of spatial awareness</p>
</li>
<li><p>Primitive logic and reasoning</p>
</li>
<li><p>Facial recognition</p>
</li>
<li><p>Emotional triggers like fear or joy</p>
</li>
</ul>
<p>These hardwired instincts form the basis for how we interpret and interact with the world.</p>
<p>Most LLMs and generative AI models don’t have that.<br />They’re statistical engines trained on massive datasets of text and while they’re powerful, they still hallucinate. A lot.</p>
<p>But here’s what’s wild:<br />Today’s best models don’t learn everything from scratch either.<br />They’re pretrained on filtered, instruction-tuned, or curated datasets just like the “seed” knowledge I envisioned back then.</p>
<p>Some of the top AI researchers today argue that “foundational models” need baked-in reasoning frameworks or symbolic logic; the same thing I was getting at eight years ago:<br /><strong>Give the model a foundation to build off of, not just data to pattern match.</strong></p>
<p>And when you think about it...<br />The best tech we’ve ever built mimics nature.<br />From neural networks mimicking the brain to reinforcement learning mirroring how we learn through trial and error we're not building from scratch, we're building from what already works.</p>
<h2 id="heading-biomimicry"><strong>Biomimicry:</strong></h2>
<p>\ the design and production of materials, structures, and systems that are <a target="_blank" href="https://www.google.com/search?client=firefox-b-1-d&amp;sca_esv=84a972cf9bb6250a&amp;sxsrf=AE3TifMN5xbCxVdEDFkvirRhTtT4x7pYlA:1754585571870&amp;q=modeled&amp;si=AMgyJEsuit4gN7752H-yAHcCJWwoAgcqvUQtIj1r7M2XfH1MQt0xglJ691laoXRdd9N6G1kQyNK7EDwKFc5-mXDExD5udlqfb0TqunqW8iFymvNpkqNsyDw%3D&amp;expnd=1&amp;sa=X&amp;ved=2ahUKEwjW7fTNlPmOAxWqnGoFHdrENR8QyecJegQIORAR">modeled</a> <a target="_blank" href="https://www.google.com/search?client=firefox-b-1-d&amp;sca_esv=84a972cf9bb6250a&amp;sxsrf=AE3TifMN5xbCxVdEDFkvirRhTtT4x7pYlA:1754585571870&amp;q=modeled&amp;si=AMgyJEsuit4gN7752H-yAHcCJWwoAgcqvUQtIj1r7M2XfH1MQt0xglJ691laoXRdd9N6G1kQyNK7EDwKFc5-mXDExD5udlqfb0TqunqW8iFymvNpkqNsyDw%3D&amp;expnd=1&amp;sa=X&amp;ved=2ahUKEwjW7fTNlPmOAxWqnGoFHdrENR8QyecJegQIORAR">on bio</a>logical entities and processes.</p>
<p><strong>Take flight, for example.</strong></p>
<p>Birds have been perfecting aerodynamics for millions of years.<br />When humans wanted to take to the skies, we didn’t invent flight from scratch we studied wings, lift, and gliding patterns.</p>
<ul>
<li><p>The Wright brothers looked at how birds tilted their wings to steer, which led to the concept of wing warping a core principle in early flight (<a target="_blank" href="https://airandspace.si.edu/exhibitions/wright-brothers/online/fly/1900/bird.cfm">Smithsonian Air &amp; Space</a>).</p>
</li>
<li><p>Modern aircraft wings (airfoils) are inspired by the curvature of bird wings, optimizing lift and reducing drag (<a target="_blank" href="https://www.grc.nasa.gov/www/k-12/airplane/airfoil.html">NASA Glenn Research Center</a>).</p>
</li>
<li><p>Drones and VTOL aircraft often mimic the flight mechanics of hummingbirds, bees, and even bats because nature’s design is already proven through evolution (<a target="_blank" href="https://www.nationalgeographic.com/science/article/future-drones-nature-inspiration">National Geographic</a>).</p>
</li>
</ul>
<p>And it doesn’t stop with flight.</p>
<p>Nature has inspired some of the most powerful breakthroughs in tech:</p>
<ul>
<li><p>Velcro was invented after studying how burrs stuck to dog fur (<a target="_blank" href="https://www.velcro.com/about-us/our-history/">Velcro Official History</a>).</p>
</li>
<li><p>Sharkskin-inspired materials are now used on swimsuits and ship hulls to reduce drag and bacteria (<a target="_blank" href="https://www.nature.com/articles/nature04994">Nature - Bioinspiration in Marine Design</a>, <a target="_blank" href="https://www.sharklet.com/technology/">Sharklet Technologies</a>).</p>
</li>
<li><p>Termite mounds inspired architects designing sustainable buildings with natural airflow systems (<a target="_blank" href="https://biomimicry.org/innovation-examples/termites-air-conditioning/">Biomimicry Institute</a>).</p>
</li>
<li><p>Spider webs influenced next-gen materials that are light, flexible, and insanely strong (<a target="_blank" href="https://www.scientificamerican.com/article/why-spider-silk-is-stronger-than-steel/">Scientific American</a>).</p>
</li>
</ul>
<p>Even in computing:</p>
<ul>
<li><p>Neural networks are modeled after the structure of the human brain (<a target="_blank" href="https://www.deeplearningbook.org/">Deep Learning, Goodfellow et al.</a>).</p>
</li>
<li><p>Genetic algorithms mimic evolution random mutations, selection, and survival of the fittest to solve complex optimization problems (<a target="_blank" href="https://press.umich.edu/Books/A/Adaptation-in-Natural-and-Artificial-Systems">Holland, J.H., 1975</a>).</p>
</li>
<li><p>Swarm intelligence in robotics and traffic systems is modeled on the behavior of ants, birds, and fish moving collectively with simple rules (<a target="_blank" href="https://ieeexplore.ieee.org/document/1427761">IEEE Swarm Intelligence Research</a>).</p>
</li>
</ul>
<p>When we follow nature, we’re not copying; we’re learning from billions of years of R&amp;D we didn’t have to pay for.</p>
<p>So it’s no surprise that when we talk about AGI, the same principle applies.</p>
<p>We shouldn’t expect true intelligence to emerge from a blank slate because humans aren’t blank slates either.<br />We have biases, instincts, logic patterns, and the ability to override them.</p>
<p>If we want to build an AI that thinks like us, or better than us, it needs more than just data it needs the right starting point.</p>
<p><strong>A seed.</strong></p>
<h2 id="heading-diagram-the-role-of-seed-data-in-agi">Diagram: The role of seed data in AGI</h2>
<pre><code class="lang-plaintext">                      +-------------------------+
                      |     Seed Knowledge      |
                      |  (Rules, logic, bias,   |
                      |   instincts, ethics)    |
                      +-----------+-------------+
                                  |
                                  v
               +------------------+------------------+
               |   Pretraining on Curated Datasets   |
               |  (text, symbols, images, math, etc) |
               +------------------+------------------+
                                  |
                                  v
                   +-----------------------------+
                   |    Reasoning Framework      |
                   |(Symbolic Logic, Constraints)|
                   +-----------------------------+
                                  |
                                  v
                      +--------------------+
                      |   Fine-Tuning via  |
                      |   Environment or   |
                      |    Human Feedback  |
                      +--------------------+
                                  |
                                  v
                      +--------------------+
                      |  Intelligent Agent |
                      |   (Emergent AGI?)  |
                      +--------------------+
</code></pre>
<p>This seed will contain all preloaded logic / rules that it can follow. Which paths to take when “learning”. How it will handle unforeseen obstacles. What it can and cannot do.</p>
<h3 id="heading-examples-of-curated-seed-logic-for-agi">Examples of Curated "Seed" Logic for AGI:</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Category</td><td>Example Seed Logic</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Spatial Awareness</strong></td><td>"Objects closer in space should be rendered or acted on with higher priority"</td></tr>
<tr>
<td><strong>Ethical Constraints</strong></td><td>"Do not harm humans or encourage harm" (like Asimov’s Laws of Robotics)</td></tr>
<tr>
<td><strong>Basic Logic</strong></td><td>"If A &gt; B and B &gt; C, then A &gt; C" (transitive reasoning)</td></tr>
<tr>
<td><strong>Causality Rules</strong></td><td>"Fire causes heat" / "Gravity pulls down"</td></tr>
<tr>
<td><strong>Social Understanding</strong></td><td>"Smiles generally indicate positive intent"</td></tr>
<tr>
<td><strong>Risk Aversion</strong></td><td>"Avoid paths that lead to irreversible damage"</td></tr>
<tr>
<td><strong>Goal Prioritization</strong></td><td>"Preserve self-function unless human input overrides"</td></tr>
<tr>
<td><strong>Symbol Grounding</strong></td><td>"A 'dog' is an animal that barks, has fur, and responds to humans"</td></tr>
</tbody>
</table>
</div><p>We have built reasoning before into many different systems such as for defense companies, but I think the ability for a system to have "Seed" logic that can be refined as it learns plus true reasoning with "Morals" will be the advent of AGI.</p>
<h2 id="heading-whats-next">What’s Next?</h2>
<p>This is just the beginning of my new Thursday series: <strong>AI &amp; the Future of Security</strong>, where I explore the big ideas shaping how we think about artificial intelligence, digital trust, and what comes next in cybersecurity and society.</p>
<p>Coming soon:</p>
<ul>
<li><p>The Ethical Seed: How to Preload Morality into AI Systems</p>
</li>
<li><p>How Vector Databases Make LLMs Smarter (and Less Dangerous)</p>
</li>
<li><p>Should Your AI Have a Memory?: Balancing Privacy, Identity, and Persistence</p>
</li>
<li><p>Can AGI Be Trusted with Autonomy?: Designing Constraints that Actually Work</p>
</li>
<li><p>[REDACTED]</p>
</li>
</ul>
<p>Follow along if you’re into AGI alignment, human-centric AI, and the security implications that come with intelligent systems. I’ve spent nearly a decade building real tech and I’m fascinated by what it means to do it responsibly.</p>
<p>Sure, you could Google it. Or ask ChatGPT.<br />But <a target="_blank" href="https://www.onelogin.com/blog/">OneLogin’s blog</a> and <a target="_blank" href="https://www.onelogin.com/learn">learning center</a> already have the answers and fewer hallucinations.</p>
]]></content:encoded></item><item><title><![CDATA[How Vector Databases and RAG Solve AI Hallucination Problems]]></title><description><![CDATA[Artificial Intelligence, or more accurately, Machine Learning has been a hot topic for the past few years, and rightfully so. With the rise of LLMs (Large Language Models), how we search, create, and communicate has fundamentally changed.
From asking...]]></description><link>https://blog.jeffbudde.com/how-vector-databases-and-rag-solve-ai-hallucination-problems</link><guid isPermaLink="true">https://blog.jeffbudde.com/how-vector-databases-and-rag-solve-ai-hallucination-problems</guid><category><![CDATA[Fine-Tuning AI]]></category><category><![CDATA[Secure AI systems]]></category><category><![CDATA[AI]]></category><category><![CDATA[vector database]]></category><category><![CDATA[Retrieval-Augmented Generation]]></category><category><![CDATA[Open Source AI Models]]></category><category><![CDATA[langchain]]></category><category><![CDATA[customer identity and access management]]></category><category><![CDATA[technology]]></category><category><![CDATA[Data Science]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[trust in AI]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Tue, 05 Aug 2025 17:24:17 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754414080990/e3e5ad33-567f-472c-ad25-6dae28bfef32.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Artificial Intelligence, or more accurately, Machine Learning has been a hot topic for the past few years, and rightfully so. With the rise of LLMs (Large Language Models), how we search, create, and communicate has fundamentally changed.</p>
<p>From asking how to do a recipe to <a target="_blank" href="https://www.linkedin.com/pulse/how-generative-ai-fixed-my-air-conditioner-zach-hughes-yciac/">fixing HVAC issues</a> it has become an integral part of so many lives. Fact is, some companies have been working on machine learning for a long time like Google who integrated machine learning for spell check <a target="_blank" href="https://ai.google/our-ai-journey/?section=spellcheck">2001</a>.</p>
<p>There is one major issue with LLMs and that is hallucinations. Hallucinations are like statistical fluctuations within its guesswork. Guesswork you say?!? Yes - primarily LLMs are statistical analysis in which there is no true intelligence simply retrieval of data that statistically matches what you are looking for. Apple even wrote a white paper <a target="_blank" href="https://ml-site.cdn-apple.com/papers/the-illusion-of-thinking.pdf">the illusion of thinking</a> on how the LRM(Large Reasoning Models), which is built on top of LLMs, are not true intelligence and just hallucinate to a statistically ‘close’ answer. Does this mean LLMs will fall short in our search for true artificial intelligence? Yes, it is not an end all be all tool.   But I digress, LLMs are still an incredibly powerful tool that can handle so many different tasks to make jobs easier. The real question is how do we limit hallucinations within LLMs?</p>
<p>With RAG(Retrieval Augmented Generation) &amp; fine tuning. I will give you an example to better explain:</p>
<p>Let’s say you have a company with public-facing documentation on different products. You want your customers to more easily search / use that documentation and possibly lower the amount of time support uses for talking to customers, but don’t want to upload it into an internet based LLM like ChatGPT. You are also afraid of hallucinations causing issues by providing customers with incorrect information.   There is a solution:</p>
<p>1.) Utilize an open source model like Mistral-7B-Instruct or Mistral-7B which checks all the boxes</p>
<ul>
<li><p>Open weight license (Apache 2.0 or similar) → fully commercial use</p>
</li>
<li><p>Fast and efficient → excellent for inference and fine-tuning</p>
</li>
<li><p>Supported by major frameworks: HuggingFace Transformers, vLLM, and more</p>
</li>
<li><p>With great ecosystem with tools like:</p>
<ul>
<li><p>LangChain</p>
</li>
<li><p>LlamaIndex</p>
</li>
<li><p>Qdrant, Weaviate, Pinecone, ChromaDB, etc.</p>
</li>
</ul>
</li>
</ul>
<p>2.) Host that model locally, on a server on-prem, or if you are not against it in the cloud such as AWS, Azure, or Machine Learning specific hosting services.</p>
<p>3.) Use Langchain(my personal preference) or similar to create a RAG(Retrieval Augmented Generation) based system for your needs. This comprises typically of a model(Mistral-7B), a vector database, and your documents that are the facts.</p>
<p>4.) Once those systems are built we feed the vector database the information we want to use as the facts. This is where the RAG comes into play. You search your vector DB for the information then use the model to create the response in a grounded way. There is no need for the model to know anything other then how to formulate a response that is more easily digestible than “a+b=c” instead it says “based on your question you can do a+b=c because it fits more to your problem”. Of course you can remove the Model and just retrieve information like a powerful search engine, but as humans that’s not ideal. Why is that??</p>
<p><strong>Humans are inherently biased toward human-sounding responses</strong><br />We’re wired to:</p>
<ul>
<li><p>Trust conversational tone more than raw data</p>
</li>
<li><p>Interpret empathy and context as signs of intelligence</p>
</li>
<li><p>Assign intent, reasoning, and meaning to well-structured language — even when none exists</p>
</li>
</ul>
<p>That’s exactly why LLMs feel so convincing -<br />They don’t truly understand, but they sound like they do and that’s enough for our brains to trust them.<br />Even if the model is just rephrasing something like:<br />“You can reset your device by holding the power button for 10 seconds,”<br />it sounds more trustworthy when framed like:<br />“No problem! Based on what you’re asking, it sounds like your device might need a reset. You can do that by holding the power button for about 10 seconds that should do the trick.”</p>
<pre><code class="lang-plaintext">                   +-------------------+
                   |   User Query      |
                   +-------------------+
                             |
                             v
                   +-------------------+
                   |   Search Vector   |
                   |   Database (e.g., |
                   |   ChromaDB, etc)  |
                   +-------------------+
                             |
         +-------------------+-------------------+
         |                                       |
         v                                       v
+-------------------+                +-----------------------+
|  Retrieved Chunks |                |   Open Source LLM     |
|  (Relevant Docs)  |                |   (e.g., Mistral-7B)   |
+-------------------+                +-----------------------+
         |                                       ^
         +-------------------+-------------------+
                             |
                             v
                   +-------------------------+
                   |   Response Generator    |
                   | (LLM crafts answer from |
                   |   doc + prompt context) |
                   +-------------------------+
                             |
                             v
                   +-------------------+
                   |   Final Answer    |
                   +-------------------+
                             |
                             v
                   +---------------------------+
                   |  Feedback Logging System  |
                   | (Log uncertain responses, |
                   | enable fine-tuning later) |
                   +---------------------------+
</code></pre>
<p>5.) Once you have your system built with RAG then next thing to do is test it. Going through it internally or within close peers to have them find flaws. You’ll still have some slight issues, but you can check for the confidence of a models answer. If it doesn’t reach a specified limit, return “I’m sorry, but I was unable to find an answer to the question you are asking” -&gt; Log that specific question that was asked and fine tune it for that or block that question if it wasn’t even contextually in that realm.</p>
<p>Once your RAG system is ready, you’ll likely want to make it public-facing. But how do you protect it from bots, abuse, or unauthorized users?</p>
<h3 id="heading-thats-where-ciam-customer-identity-and-access-management-comes-in"><strong>That’s where CIAM (Customer Identity and Access Management) comes in.</strong></h3>
<p>CIAM, or Customer Identity and Access Management, is essentially IAM tailored for customer-facing environments. It enables you to build a secure, slightly restricted portal where customers can easily sign up and access documentation or other services; while ensuring that only authorized users get through. A well-designed CIAM system becomes the foundation for a centralized customer experience and supports scalability as your platform grows.</p>
<p>You can build your own backend for access management using frameworks like PHP with Phalcon, Python with Django, or Node.js. However, in many cases, it’s more efficient to offload this responsibility to a platform like OneLogin CIAM. Offloading reduces technical overhead, avoids reinventing the wheel, and allows your team to focus on your core product.</p>
<p>OneLogin CIAM still offers full customizability via APIs and SDKs while providing out-of-the-box compliance with standards like GDPR, SOC 1 Type 2, SOC 2 Type 2, SOC 3, and following the NIST Cybersecurity Framework.</p>
<p>Regardless of which option you go with RAG, vector search, and grounded AI responses aren’t just technical challenges, they’re trust challenges. If your users can’t trust what the AI says (or who’s using it), the tech doesn’t matter.</p>
<h2 id="heading-whats-next">What’s Next?</h2>
<p>This is just the beginning of my new Tuesday series: <strong>Tech Tuesday</strong>, where I break down interesting technical systems, tools, and real-world projects and maybe how something works.</p>
<p>Coming soon:</p>
<ul>
<li><p>Reverse-Engineering a Scam from the Inside (with Social Engineering and Honeypots)</p>
</li>
<li><p>Fixing LLMs with Real-Time Feedback Loops: Building a self-correcting RAG system</p>
</li>
<li><p>Tracking User Behavior Without Cookies: Building lightweight, privacy-respecting session intel</p>
</li>
<li><p>How I Built a Personal Threat Detection System: Using AI + browser fingerprinting</p>
</li>
<li><p>What Happens When You Inject IAM Context into Frontend UI?: Designing apps that show trust levels, not just enforce them</p>
</li>
</ul>
<p>Follow along if you’re into engineering, real security stories, and the code that makes it all possible. I've been in it for nearly 10 years and I love to learn what is possible and push the boundaries of what can be done.</p>
<p>Sure, you could Google it. Or ask ChatGPT.<br />But <a target="_blank" href="https://www.onelogin.com/blog/">OneLogin’s blog</a> and <a target="_blank" href="https://www.onelogin.com/learn">learning center</a> already have the answers and fewer hallucinations.</p>
]]></content:encoded></item><item><title><![CDATA[When Identity Fails: How IAM Can Make or Break Your Business]]></title><description><![CDATA[You’ve probably heard of IAM, but like “AI,” the term gets thrown around so much it starts to lose meaning. Whether you're in DevOps, security, or product, understanding IAM is crucial.
IAM, short for Identity and Access Management, is a strategic fr...]]></description><link>https://blog.jeffbudde.com/when-identity-fails-how-iam-can-make-or-break-your-business</link><guid isPermaLink="true">https://blog.jeffbudde.com/when-identity-fails-how-iam-can-make-or-break-your-business</guid><category><![CDATA[OneIdentity]]></category><category><![CDATA[OneLogin]]></category><category><![CDATA[IAM]]></category><category><![CDATA[#sqlinjection]]></category><category><![CDATA[ciam]]></category><category><![CDATA[#cybersecurity]]></category><category><![CDATA[zerotrust]]></category><category><![CDATA[Access Management]]></category><dc:creator><![CDATA[Jeffrie Budde]]></dc:creator><pubDate>Mon, 04 Aug 2025 17:15:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1754327428881/79fe6bc1-6d87-45db-875f-2741c5412346.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You’ve probably heard of IAM, but like “AI,” the term gets thrown around so much it starts to lose meaning. Whether you're in DevOps, security, or product, understanding IAM is crucial.</p>
<p><strong>IAM</strong>, short for <em>Identity and Access Management</em>, is a strategic framework that defines how identities are created, managed, and granted access to resources. It’s just as foundational to your architecture as network design or infrastructure planning.</p>
<h2 id="heading-why-iam-matters">Why IAM Matters</h2>
<p>Today, every user, app, and device needs access and every access point is a potential vulnerability. A single misconfigured IAM policy can open the door to:</p>
<ul>
<li><p>Data breaches</p>
</li>
<li><p>Compliance violations</p>
</li>
<li><p>Ransomware attacks</p>
</li>
</ul>
<p>The fallout? Millions in lawsuits, regulatory fines, and in some cases, companies going bankrupt.</p>
<blockquote>
<p><strong>Case Study: Petersen Health Care</strong><br />After a breach that exposed sensitive identity data, the company filed for Chapter 11 bankruptcy citing over $295 million in debt. It's a stark example of how identity failures can threaten a business’s survival.</p>
</blockquote>
<h2 id="heading-confidence-is-harder-to-rebuild-than-capital">Confidence Is Harder to Rebuild Than Capital</h2>
<p>Financial institutions may not always go bankrupt from breaches, but they can still lose almost everything when customers lose faith.</p>
<p><strong>Example: TalkTalk (2015)</strong><br />UK telecom TalkTalk lost 95,000 customers in the wake of a breach that exposed personal data. The cause? A basic <a target="_blank" href="https://www.crowdstrike.com/en-us/cybersecurity-101/cyberattacks/sql-injection-attack/">SQL injection attack</a> on an outdated webpage.</p>
<p>But the real issue wasn’t just the exploit, it was the lack of IAM enforcement.<br />The vulnerable application account had <strong>excessive privileges</strong>. With least privilege access and proper controls, the attacker wouldn’t have reached sensitive customer records even if the injection succeeded.</p>
<p>TalkTalk’s reputation never fully recovered.</p>
<h2 id="heading-a-shift-in-priority">A Shift in Priority</h2>
<p>As cloud adoption accelerates and hybrid work becomes the norm, IAM is no longer just a backend IT concern — it’s a business-critical function. One that must be:</p>
<ul>
<li><p>Thoughtfully designed</p>
</li>
<li><p>Continuously maintained</p>
</li>
<li><p>Built with safeguards and redundancy in mind</p>
</li>
</ul>
<h2 id="heading-summary-access-risk">Summary: Access = Risk</h2>
<p>These examples underscore a crucial point: <strong>IAM misconfigurations</strong>, not just technical flaws, are often the weakest links in cybersecurity.</p>
<p>Whether you're a financial firm, healthcare provider, or tech company:</p>
<ul>
<li><p>Human targets (support agents, executives) are often entry points</p>
</li>
<li><p>IAM must defend against misuse (phishing-resistant MFA, behavioral analytics, zero-trust enforcement)</p>
<ul>
<li>Example: <a target="_blank" href="https://www.onelogin.com/product/smartfactor-authentication">OneLogin’s SmartFactor Auth</a></li>
</ul>
</li>
<li><p>One missed deprovisioning step can have massive consequences</p>
</li>
</ul>
<h2 id="heading-whats-next">What’s Next?</h2>
<p>IAM is just the foundation of my new Monday series: <strong>Modern Identity &amp; Access</strong>.</p>
<p>Coming soon:</p>
<ul>
<li><p>What makes CIAM (Customer IAM) different</p>
</li>
<li><p>WebAuthn &amp; Phishing-Resistant MFA: <em>Is Bio-Based MFA the Final Boss?</em></p>
</li>
<li><p>Why MFA is more than a checkbox</p>
</li>
<li><p>What XIAM is and why it’s emerging now</p>
</li>
<li><p>Reverse-Engineering a Scam from the Inside (with Social Engineering and Honeypots)</p>
</li>
</ul>
<p>Follow along to understand how identity is shaping the future of secure, scalable systems.</p>
<p>Sure, you could Google it. Or ask ChatGPT.<br />But <a target="_blank" href="https://www.onelogin.com/blog/">OneLogin’s blog</a> and <a target="_blank" href="https://www.onelogin.com/learn">learning center</a> already have the answers and fewer hallucinations.</p>
<p>#IAM #CyberSecurity #AccessManagement #ZeroTrust #OneLogin #OneLoginByOneIdentity #OneIdentity #IdentitySecurity #PhishingResistance</p>
]]></content:encoded></item></channel></rss>