5.4 KiB
🔐 Crumbpage 19: The Zero Trust Agent (Paranoid Mode)
Subtitle: Vertraue nichts, was du nicht gerade berührst
Pfad: 19 von X
Schwierigkeit: ⭐⭐⭐⭐ (4/5)
Zeit: ~2 Stunden
Voraussetzungen: SSH Agent, Bash Scripting
"Ein unbewachter Schlüssel ist ein verlorener Schlüssel." 🕵️♂️
📋 Das Szenario
Du sitzt im Café. Dein Laptop ist entsperrt, dein ssh-agent hat alle Keys im RAM.
Ein Dieb reißt dir den offenen Laptop aus der Hand ("Snatch & Run").
Er hat jetzt Zugriff auf alle deine Server. 😱
Oder: Du gehst kurz weg, Screen Lock geht an. Jemand errät dein (schwaches?) Laptop-Passwort oder nutzt einen Exploit am Lockscreen. Sobald er drin ist: Vollzugriff via SSH.
Die Lösung: Der Agent muss seine Schlüssel vergessen, sobald du den Platz verlässt (Screen Lock). Und er muss sofort nach der Passphrase fragen, wenn du wiederkommst (Unlock).
🛡️ Level 1: Das Zeit-Limit (TTL)
Der einfachste Schutz. Schlüssel vergessen sich selbst nach X Minuten.
# Füge Key hinzu, aber vergiss ihn nach 5 Minuten (300 Sekunden)
$ ssh-add -t 300 ~/.ssh/id_ed25519
Pro: Funktioniert überall (Mac/Linux). Contra: Wenn du arbeitest, läuft es manchmal "unter den Fingern" ab.
🛡️ Level 2: Der "Nuke" Button
Gewöhne dir an, nicht nur den Screen zu sperren, sondern den Agent zu leeren.
In deiner .bashrc:
# Sperren UND Schlüssel wegwerfen
alias away='ssh-add -D && loginctl lock-session'
(Auf Mac: ssh-add -D && pmset displaysleepnow)
Benutzung: Wenn du aufstehst, tippe away. Laptop sperrt, Keys sind weg.
🛡️ Level 3: The Watchdog (Debian 13 / Mate Edition)
Status: Getestet & Verifiziert auf Debian 13 (Trixie) mit MATE Desktop.
Du willst, dass das automatisch passiert, wenn der Bildschirmschoner angeht?
Wir nutzen dbus-monitor, um direkt auf den Puls des Screensavers zu hören.
Das Script: ssh-agent-guard.sh
Dieses Script muss in den Autostart (System -> Einstellungen -> Startprogramme).
#!/bin/bash
# ~/.local/bin/ssh-agent-guard.sh
LOG_FILE="$HOME/.ssh-agent-screenlock.log"
SOCKET_PATH="$HOME/.ssh/agent.sock"
PID_FILE="$HOME/.ssh-agent-watchdog.pid"
PAUSE_FILE="$HOME/.ssh-agent-watchdog.pause"
# 1. Singleton Check: Nur ein Wächter erlaubt
if [ -f "$PID_FILE" ]; then
old_pid=$(cat "$PID_FILE")
kill -0 "$old_pid" 2>/dev/null && kill "$old_pid"
fi
echo $$ > "$PID_FILE"
# 2. Cleanup Trap (Aufräumen bei Exit)
cleanup() { rm -f "$PID_FILE"; exit 0; }
trap cleanup SIGINT SIGTERM
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; }
restart_agent() {
# "Deep Work" Check: Darf ich töten?
if [ -f "$PAUSE_FILE" ]; then
log "SKIP: Deep Work Mode aktiv. Agent überlebt."
return
fi
log "🔒 LOCK: Killing Agent..."
# Kill existing agents
if [ -n "$SSH_AGENT_PID" ]; then kill "$SSH_AGENT_PID" 2>/dev/null; fi
pkill -u "$USER" ssh-agent
# Clean Environment
unset SSH_AUTH_SOCK SSH_AGENT_PID
rm -f "$SOCKET_PATH"
# Respawn & Bind to fixed socket
eval "$(ssh-agent -a "$SOCKET_PATH" -s)" >/dev/null
# Save Environment for others
echo "export SSH_AUTH_SOCK=$SOCKET_PATH" > "$HOME/.ssh/agent-environment"
echo "export SSH_AGENT_PID=$SSH_AGENT_PID" >> "$HOME/.ssh/agent-environment"
log "✨ RESPAWN: Neuer Agent (PID: $SSH_AGENT_PID)"
}
# 3. MATE Hardening: Sofort sperren, keine Grace-Period
gsettings set org.mate.screensaver lock-enabled true
gsettings set org.mate.screensaver lock-delay 0
# 4. Der DBus Loop
dbus-monitor --session "type='signal',interface='org.mate.ScreenSaver',member='ActiveChanged'" 2>/dev/null |
while read -r line; do
if echo "$line" | grep -q "boolean true"; then
# EVENT: Screen Locked -> Kill Agent
mate-screensaver-command --lock 2>/dev/null # Double Tap
restart_agent
fi
done
Die Integration
Damit deine Terminals den neuen Agent immer finden, muss das Environment dynamisch geladen werden.
In deiner .bashrc:
# Lade Agent-Info, falls vorhanden
if [ -f ~/.ssh/agent-environment ]; then
source ~/.ssh/agent-environment
fi
🛡️ Level 4: Deep Work & Kontrolle
Manchmal darf der Agent nicht sterben (z.B. bei einem 50GB Upload über SCP, während du Kaffee holst). Dafür haben wir den Watchdog-Knochen (Pause-Funktion).
Im crumbpages-doktor (Modul Remote) gibt es jetzt Befehle:
watchdog status: Läuft der Wächter?watchdog off: PAUSE. Der Screensaver tötet den Agent nicht mehr.watchdog on: SCHARF. Sicherheit wiederhergestellt.
Tipp: Wenn du
exitim Remote-Doktor tippst, feuert jetzt eine "Paranoid Trap" und löscht die Keys sofort (ssh-add -D). Sicher ist sicher.
🦉 Crystal Owl's Weisheit
"Ein System ist nur so sicher wie sein schwächstes Glied. Meistens ist das Glied... Bequemlichkeit."
Wir haben die Bequemlichkeit automatisiert. Der Agent stirbt, wenn du weggehst. Er wird wiedergeboren, wenn du wiederkommst – aber ohne Erinnerung (Keys). Du musst das Passwort neu eingeben. Das ist der Preis der Sicherheit.
Version: 2.0 (Debian 13 Verified)
Status: Final
Tags: #Security #Debian13 #Mate #DBus #ZeroTrust
Navigation:
← Zurück: Alle Themen | Weiter: Tanz am Kernel (Bash Hacks)