Cipher Block Chaining CBC-MAC

HackTricks 지원

CBC

만약 쿠키사용자 이름만을 포함하고 있고 사용자 이름을 "admin"으로 변조하고 싶다면, 사용자 이름을 **"bdmin"**으로 만들고 쿠키의 첫 번째 바이트브루트포스할 수 있습니다.

CBC-MAC

Cipher block chaining message authentication code (CBC-MAC)는 암호학에서 사용되는 방법입니다. 이 방법은 메시지를 블록 단위로 암호화하여 작동하며, 각 블록의 암호화는 그 이전 블록과 연결됩니다. 이 과정은 블록 체인을 생성하여 원본 메시지의 단 하나의 비트라도 변경되면 암호화된 데이터의 마지막 블록에 예측할 수 없는 변경이 발생하도록 합니다. 이러한 변경을 수행하거나 되돌리려면 암호화 키가 필요하여 보안을 보장합니다.

메시지 m의 CBC-MAC를 계산하려면, m을 초기화 벡터를 0으로 사용하여 CBC 모드로 암호화하고 마지막 블록을 유지합니다. 다음 그림은 비밀 키 k와 블록 암호 E를 사용하여 메시지의 CBC-MAC을 계산하는 과정을 스케치로 나타냅니다:

취약점

일반적으로 CBC-MAC에서 사용되는 IV는 0입니다. 이것은 2개의 알려진 메시지(m1m2)가 독립적으로 2개의 서명(s1s2)을 생성할 수 있는 문제를 야기합니다. 따라서:

  • E(m1 XOR 0) = s1

  • E(m2 XOR 0) = s2

그런 다음 m1과 m2를 연결한 메시지(m3)는 2개의 서명(s31 및 s32)을 생성합니다:

  • E(m1 XOR 0) = s31 = s1

  • E(m2 XOR s1) = s32

암호화 키를 알지 못해도 이를 계산할 수 있습니다.

8바이트 블록으로 이름 Administrator을 암호화하는 경우를 상상해보세요:

  • Administ

  • rator\00\00\00

Administ라는 사용자 이름(m1)을 만들고 서명(s1)을 검색할 수 있습니다. 그런 다음 rator\00\00\00 XOR s1의 결과를 사용자 이름으로 하는 사용자 이름을 만들 수 있습니다. 이렇게 하면 E(m2 XOR s1 XOR 0)가 생성되어 s32가 됩니다. 이제 s32를 사용하여 전체 이름 Administrator의 서명으로 사용할 수 있습니다.

요약

  1. 사용자 이름 Administ(m1)의 서명인 s1을 얻으세요.

  2. 사용자 이름 rator\x00\x00\x00 XOR s1 XOR 0의 서명인 s32를 얻으세요.

  3. 쿠키를 s32로 설정하면 사용자 Administrator의 유효한 쿠키가 됩니다.

IV 제어 공격

사용된 IV를 제어할 수 있다면 공격은 매우 쉬워질 수 있습니다. 쿠키가 사용자 이름만 암호화된 경우 사용자 "administrator"를 흉내 내기 위해 사용자 "Administrator"를 만들면 해당 사용자의 쿠키를 얻을 수 있습니다. 이제 IV를 제어할 수 있다면 IV의 첫 번째 바이트를 변경하여 **IV[0] XOR "A" == IV'[0] XOR "a"**로 만들고 사용자 Administrator의 쿠키를 다시 생성할 수 있습니다. 이 쿠키는 초기 IVadministrator 사용자를 흉내 내는 데 유효합니다.

참고 자료

자세한 내용은 https://en.wikipedia.org/wiki/CBC-MAC에서 확인하세요.

HackTricks 지원

Last updated