TSIG (Transaction Signature) ist ein DNS-Sicherheitsmechanismus, der DNS-Nachrichten zwischen zwei bekannten Parteien mithilfe eines gemeinsamen geheimen Schlüssels und eines verschlüsselten Hash-Werts authentifiziert und in erster Linie Zonentransfers und dynamische Aktualisierungen schützt. Er ersetzt die schwache, auf der Quell-IP basierende Validierung durch kryptografische Authentifizierung und stellt sicher, dass nur Parteien, die über den richtigen Schlüssel verfügen, sensible DNS-Vorgänge durchführen können. Eine ordnungsgemäße Implementierung erfordert synchronisierte Uhren, sorgfältiges Schlüsselmanagement, eine sichere Schlüsselverteilung sowie die explizite Verknüpfung von Schlüsseln mit Zugriffsregeln, um Betriebsausfälle und Sicherheitsrisiken zu vermeiden.
So funktioniert TSIG
TSIG verwendet einen gemeinsamen geheimen Schlüssel und einen verschlüsselten Hash, um nachzuweisen, dass eine DNS-Nachricht von einer Partei stammt, die den Schlüssel besitzt, und während der Übertragung nicht verändert wurde. Beide Seiten müssen zuvor mit demselben Schlüsselnamen, Algorithmus und geheimen Schlüssel konfiguriert werden.
- Schlüssel teilen: Ein Administrator generiert einen geheimen Schlüssel und konfiguriert denselben Schlüsselnamen, denselben Algorithmus und dasselbe Geheimnis auf beiden Servern oder auf dem Client und dem Server.
- Die Nachricht signieren: Der Absender berechnet einen verschlüsselten Hashwert aus der DNS-Nachricht sowie bestimmten TSIG-Feldern, darunter ein Zeitstempel, und fügt das Ergebnis als TSIG-Eintrag an die Nachricht an.
- Signatur überprüfen: Der Empfänger sucht den Schlüssel anhand seines Namens, berechnet den Hash neu und vergleicht ihn mit dem empfangenen. Bei einer Nichtübereinstimmung wird die Nachricht abgelehnt.
- Zeitprüfung: Der Empfänger überprüft außerdem, ob der signierte Zeitstempel innerhalb eines zulässigen Zeitfensters liegt, wodurch die Wiederholung aufgezeichneter Nachrichten eingeschränkt wird.
- Antwort signieren: Der Empfänger signiert seine Antwort mit demselben Schlüssel, sodass der Anfragende überprüfen kann, ob die Antwort tatsächlich vom erwarteten Server stammt.
TSIG authentifiziert und schützt die Integrität von Nachrichten, verschlüsselt diese jedoch nicht. Da es auf einem gemeinsamen Geheimnis basiert, eignet es sich für die Kommunikation zwischen bekannten Parteien, nicht jedoch für die öffentliche Auflösung, und die Uhren auf beiden Seiten müssen in angemessenem Maße synchronisiert bleiben.
Häufige TSIG-Probleme
TSIG enthält einen Zeitstempel, und der Empfänger lehnt Nachrichten außerhalb eines zulässigen Zeitfensters ab. Wenn die Serveruhren abweichen, schlagen Übertragungen oder Aktualisierungen mit einem Zeitfehler fehl, obwohl der Schlüssel korrekt ist. Die Synchronisierung beider Seiten mit NTP behebt das Problem in der Regel.
Der Schlüsselname, der Algorithmus und das Geheimnis müssen auf beiden Seiten übereinstimmen. Ein Tippfehler im Geheimnis, ein anderer Algorithmus oder ein anders geschriebener Schlüsselname führt zu einem Fehler wegen einer ungültigen Signatur oder eines unbekannten Schlüssels, und die Anfrage wird abgelehnt.
Die Definition eines Schlüssels allein erfordert dessen Verwendung noch nicht. Wenn die Zone weiterhin Übertragungen oder Aktualisierungen anhand der Quell-IP-Adresse zulässt, können nicht signierte Anfragen erfolgreich sein. In der Zugriffsregel muss der Schlüssel explizit genannt werden.
In Tickets eingefügte, über viele Zonen hinweg geteilte oder nie rotierte Geheimnisse vergrößern das Risiko, falls eines davon bekannt wird. Die Verwendung eines separaten Schlüssels pro Beziehung und dessen planmäßige Rotation begrenzt den Schaden.
TSIG signiert Nachrichten, verschlüsselt sie jedoch nicht. Der während einer Übertragung gesendete Zoneninhalt kann weiterhin auf dem Übertragungsweg gelesen werden, sofern die Übertragung nicht zusätzlich geschützt ist, beispielsweise durch TLS.