Cipher Block Chaining CBC-MAC
CBC
Wenn das Cookie nur der Benutzername ist (oder der erste Teil des Cookies der Benutzername ist) und Sie den Benutzernamen "admin" vortäuschen möchten. Dann können Sie den Benutzernamen "bdmin" erstellen und das erste Byte des Cookies bruteforcen.
CBC-MAC
Cipher Block Chaining Message Authentication Code (CBC-MAC) ist eine in der Kryptographie verwendete Methode. Es funktioniert, indem eine Nachricht blockweise verschlüsselt wird, wobei die Verschlüsselung jedes Blocks mit dem vorherigen verknüpft ist. Dieser Prozess erzeugt eine Kette von Blöcken, die sicherstellt, dass bereits eine einzige Bitänderung in der Originalnachricht zu einer unvorhersehbaren Änderung im letzten Block der verschlüsselten Daten führt. Um eine solche Änderung vorzunehmen oder rückgängig zu machen, wird der Verschlüsselungsschlüssel benötigt, um die Sicherheit zu gewährleisten.
Um den CBC-MAC der Nachricht m zu berechnen, verschlüsselt man m im CBC-Modus mit einem Initialisierungsvektor von Null und behält den letzten Block bei. Die folgende Abbildung skizziert die Berechnung des CBC-MAC einer Nachricht, die aus Blöcken besteht unter Verwendung eines geheimen Schlüssels k und einer Blockchiffre E:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fb%2Fbf%2FCBC-MAC_structure_%28en%29.svg%2F570px-CBC-MAC_structure_%28en%29.svg.png&width=768&dpr=4&quality=100&sign=1a12ef19&sv=1)
Schwachstelle
Bei CBC-MAC wird normalerweise der IV-Wert 0 verwendet.
Dies ist ein Problem, da 2 bekannte Nachrichten (m1
und m2
) unabhängig voneinander 2 Signaturen (s1
und s2
) generieren werden. Also:
E(m1 XOR 0) = s1
E(m2 XOR 0) = s2
Dann wird eine Nachricht, die aus m1 und m2 konkateniert ist (m3), 2 Signaturen (s31 und s32) generieren:
E(m1 XOR 0) = s31 = s1
E(m2 XOR s1) = s32
Was möglich ist, ohne den Schlüssel der Verschlüsselung zu kennen.
Stellen Sie sich vor, Sie verschlüsseln den Namen Administrator in 8-Byte-Blöcken:
Administ
rator\00\00\00
Sie können einen Benutzernamen namens Administ (m1) erstellen und die Signatur (s1) abrufen.
Dann können Sie einen Benutzernamen erstellen, der das Ergebnis von rator\00\00\00 XOR s1
ist. Dies wird E(m2 XOR s1 XOR 0)
generieren, was s32 ist.
Nun können Sie s32 als die Signatur des vollständigen Namens Administrator verwenden.
Zusammenfassung
Holen Sie sich die Signatur des Benutzernamens Administ (m1), die s1 ist
Holen Sie sich die Signatur des Benutzernamens rator\x00\x00\x00 XOR s1 XOR 0, die s32 ist**.**
Setzen Sie das Cookie auf s32 und es wird ein gültiges Cookie für den Benutzer Administrator sein.
Angriff zur Steuerung des IV
Wenn Sie den verwendeten IV-Wert steuern können, könnte der Angriff sehr einfach sein. Wenn das Cookie nur der verschlüsselte Benutzername ist, um den Benutzer "Administrator" zu vortäuschen, können Sie den Benutzer "Administrator" erstellen und sein Cookie erhalten. Nun, wenn Sie den IV-Wert steuern können, können Sie das erste Byte des IV-Werts ändern, sodass IV[0] XOR "A" == IV'[0] XOR "a" und das Cookie für den Benutzer Administrator neu generieren. Dieses Cookie wird gültig sein, um den Benutzer administrator mit dem ursprünglichen IV zu vortäuschen.
Referenzen
Weitere Informationen unter https://en.wikipedia.org/wiki/CBC-MAC
Last updated