hacktricks/cryptography/cipher-block-chaining-cbc-mac-priv.md

5.5 KiB

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

CBC

Se o cookie é apenas o nome de usuário (ou a primeira parte do cookie é o nome de usuário) e você deseja se passar pelo nome de usuário "admin". Então, você pode criar o nome de usuário "bdmin" e fazer força bruta no primeiro byte do cookie.

CBC-MAC

Na criptografia, um código de autenticação de mensagem de cadeia de blocos de cifra (CBC-MAC) é uma técnica para construir um código de autenticação de mensagem a partir de um cifrador de blocos. A mensagem é criptografada com algum algoritmo de cifra de blocos no modo CBC para criar uma cadeia de blocos de forma que cada bloco dependa da correta criptografia do bloco anterior. Essa interdependência garante que uma alteração em qualquer dos bits do texto simples fará com que o último bloco criptografado mude de uma maneira que não pode ser prevista ou neutralizada sem conhecer a chave do cifrador de blocos.

Para calcular o CBC-MAC da mensagem m, criptografa-se m no modo CBC com vetor de inicialização zero e mantém o último bloco. A figura a seguir esboça o cálculo do CBC-MAC de uma mensagem composta por blocos m_{1}\|m_{2}\|\cdots \|m_{x} usando uma chave secreta k e um cifrador de blocos E:

CBC-MAC structure (en).svg

Vulnerabilidade

Com o CBC-MAC, geralmente o IV usado é 0.
Isso é um problema porque 2 mensagens conhecidas (m1 e m2) independentemente gerarão 2 assinaturas (s1 e s2). Então:

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

Então, uma mensagem composta por m1 e m2 concatenados (m3) gerará 2 assinaturas (s31 e s32):

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

O que é possível calcular sem conhecer a chave da criptografia.

Imagine que você está criptografando o nome Administrador em blocos de 8 bytes:

  • Administ
  • rator\00\00\00

Você pode criar um nome de usuário chamado Administ (m1) e recuperar a assinatura (s1).
Em seguida, você pode criar um nome de usuário chamado o resultado de rator\00\00\00 XOR s1. Isso gerará E(m2 XOR s1 XOR 0) que é s32.
agora, você pode usar s32 como a assinatura do nome completo Administrador.

Resumo

  1. Obtenha a assinatura do nome de usuário Administ (m1) que é s1
  2. Obtenha a assinatura do nome de usuário rator\x00\x00\x00 XOR s1 XOR 0 é s32**.**
  3. Defina o cookie como s32 e ele será um cookie válido para o usuário Administrador.

Ataque Controlando IV

Se você puder controlar o IV usado, o ataque pode ser muito fácil.
Se os cookies forem apenas o nome de usuário criptografado, para se passar pelo usuário "administrador" você pode criar o usuário "Administrator" e obterá seu cookie.
Agora, se você puder controlar o IV, poderá alterar o primeiro byte do IV para que IV[0] XOR "A" == IV'[0] XOR "a" e regenerar o cookie para o usuário Administrator. Este cookie será válido para se passar pelo usuário administrador com o IV inicial.

Referências

Mais informações em https://en.wikipedia.org/wiki/CBC-MAC

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks: