hacktricks/cryptography/cipher-block-chaining-cbc-mac-priv.md
2024-02-10 15:36:32 +00:00

6.1 KiB

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

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 per Brute-Force angreifen.

CBC-MAC

Cipher Block Chaining Message Authentication Code (CBC-MAC) ist eine in der Kryptographie verwendete Methode. Sie funktioniert, indem eine Nachricht blockweise verschlüsselt wird, wobei die Verschlüsselung jedes Blocks mit dem vorherigen Block verknüpft ist. Dieser Prozess erzeugt eine Kette von Blöcken, die sicherstellt, dass selbst eine einzige Bit-Änderung der ursprünglichen Nachricht 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 bestehthttps://wikimedia.org/api/rest_v1/media/math/render/svg/bbafe7330a5e40a04f01cc776c9d94fe914b17f5 unter Verwendung eines geheimen Schlüssels k und einer Blockverschlüsselung E:

https://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/CBC-MAC_structure_en.svg/570px-CBC-MAC_structure_en.svg.png

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) erzeugen. Also:

  • E(m1 XOR 0) = s1
  • E(m2 XOR 0) = s2

Dann erzeugt eine aus m1 und m2 konkatenierte Nachricht (m3) 2 Signaturen (s31 und s32):

  • E(m1 XOR 0) = s31 = s1
  • E(m2 XOR s1) = s32

Die Berechnung ist möglich, 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. Dadurch wird E(m2 XOR s1 XOR 0) erzeugt, was s32 ist.
Nun können Sie s32 als Signatur des vollständigen Namens Administrator verwenden.

Zusammenfassung

  1. Holen Sie sich die Signatur des Benutzernamens Administ (m1), die s1 ist.
  2. Holen Sie sich die Signatur des Benutzernamens rator\x00\x00\x00 XOR s1 XOR 0, die s32 ist.
  3. Setzen Sie das Cookie auf s32 und es wird ein gültiges Cookie für den Benutzer Administrator sein.

Angriff auf die Kontrolle des IV

Wenn Sie den verwendeten IV-Wert kontrollieren können, könnte der Angriff sehr einfach sein.
Wenn das Cookie nur der verschlüsselte Benutzername ist, können Sie den Benutzer "administrator" vortäuschen, indem Sie den Benutzer "Administrator" erstellen und sein Cookie erhalten.
Nun, wenn Sie den IV-Wert kontrollieren 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

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: