heygrc
NIST 800-53 CM-7 im Code

Nur die Fähigkeiten, die tatsächlich benötigt werden.

CM-7 (Least Functionality) ist die NIST 800-53-Kontrolle, die besagt, dass ein System so konfiguriert sein sollte, dass es nur seine essentiellen Fähigkeiten bereitstellt und nicht benötigte Dienste, Ports und Funktionen deaktiviert oder einschränkt. Jede unnötige Fähigkeit ist eine Angriffsfläche. Und Angriffsflächen werden im Code hinzugefügt: ein installiertes Paket, ein aktivierter Dienst, ein geöffneter Port, ein aktiviertes Feature-Flag.

How it shows up in a diff

The shapes the same control failure takes.

Least Functionality wird jedes Mal untergraben, wenn eine Änderung eine Fähigkeit hinzufügt, die das System für seine Aufgabe nicht benötigt. Die wiederkehrenden Muster:

  • Ein unnötiger Dienst wird hinzugefügt

    Ein Daemon oder Agent, den die Anwendung nicht benötigt (z. B. ein SSH-Server oder ein überflüssiger Sidecar), wird installiert und ausgeführt, wodurch jeder Instanz ein Dienst und ein Port hinzugefügt wird.

  • Eine Verwaltungs- oder Debug-Schnittstelle wird freigelegt

    Eine Admin-Konsole, ein Profiler oder ein Debug-Endpoint ist in der Produktion erreichbar und bietet einem Angreifer eine mächtige Angriffsfläche.

  • Ein deaktivierter Port oder Protokoll wird wieder geöffnet

    Ein Port oder ein altes Protokoll, das zuvor deaktiviert wurde, wird aus Bequemlichkeit wieder aktiviert und erweitert damit die erreichbaren Ziele.

  • Ein Entwicklungs-Feature bleibt aktiviert

    Eine Seed-Route, ein Sample-Daten-Endpoint oder ein ausführlicher Modus, der für die Entwicklung gedacht ist, wird aktiviert in der Produktion ausgeliefert.

  • Eine breite Standardkonfiguration bleibt bestehen

    Eine unsichere, aber bequeme Standardkonfiguration (z. B. Verzeichnisauflistung, eine Wildcard-Host-Allowlist) bleibt aktiviert, anstatt auf das Notwendige eingeschränkt zu werden.

Worked example

Ein SSH-Server, der in ein Container-Image eingebettet ist.

Entwickler möchten sich per Shell in Container einloggen, um Fehler zu beheben, daher installiert das Image einen SSH-Server und startet ihn beim Booten. Es funktioniert, und jetzt führt jeder laufende Container einen sshd aus, den er nicht benötigt: einen Dienst, der Verbindungen über die gesamte Flotte hinweg annimmt, nur für gelegentliche Bequemlichkeit.

Dockerfile+2 -1
FROM python:3.12-slim+ RUN apt-get update && apt-get install -y openssh-serverCOPY . /app- CMD ["python", "app.py"]+ CMD service ssh start && python app.py
heygrcNIST 800-53 CM-7

Das Installieren und Starten eines SSH-Servers bewirkt, dass jeder Container einen Dienst ausführt, den er nicht benötigt, der Verbindungen annimmt und die Angriffsfläche der gesamten Flotte vergrößert. CM-7 (Least Functionality) verlangt, dass ein System nur essentielle Fähigkeiten bereitstellt und unnötige Dienste deaktiviert. Verwenden Sie stattdessen die Plattform-Exec-Funktion (kubectl exec, docker exec), um bei Bedarf eine Shell zu erhalten, anstatt einen sshd in das Image einzubetten.

What an auditor does with this

Least Functionality wird gegen das tatsächlich Ausgeführte geprüft.

Eine Bewertung nach NIST 800-53 prüft, ob ein System nur das ausführt, was es benötigt: die aktivierten Dienste, Ports und Funktionen und ob die unnötigen deaktiviert oder eingeschränkt sind. Eine Änderung, die einen Dienst hinzufügt, eine Verwaltungsschnittstelle freilegt oder einen Port wieder öffnet, ist die konkrete Erweiterung der Angriffsfläche dahinter und ist im Diff zum Image, Manifest oder zur Konfiguration sichtbar.

What this is, and is not

Eine Überprüfung, kein Hardening-Pipeline.

heygrc markiert Änderungen, die CM-7 betreffen, und verweist auf die Kontrolle, sodass die Korrektur im Pull Request erfolgt. Es führt keine Benchmark-Scans oder Hardening-Automatisierung durch. Es erkennt den Moment, in dem eine Änderung eine Fähigkeit hinzufügt, die das System nicht benötigt, direkt im Diff.