Quebra wep

944 visualizações

Publicada em

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
944
No SlideShare
0
A partir de incorporações
0
Número de incorporações
90
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Quebra wep

  1. 1. Algoritmo RC4● Funcionamento do RC4 – Vetor State (S) ● 256 posições 0 1 2 3 4 5 6 7 8 9 ● Permutação de acordo com a chave (K) K x x x x x 1
  2. 2. Algoritmo RC4index1 = 0;index2 = 0;for(counter = 0; counter < 256; counter++){ index2 = (key[index1] + state[counter] + index2) % 256; swap_byte(&state[counter], &state[index2]); index1 = (index1 + 1) % key_data_len;} 2
  3. 3. Algoritmo RC4● Após a permuta é realizada a criação da chave de qualquer tamanho pelo PRNG inicializa-se x = y = 0 x = (x + 1) % 256; y = (state[x] + y) % 256; swap_byte(&state[x], &state[y]); xorIndex = (state[x] + state[y]) % 256; GeneratedByte = state[xorIndex]; 3
  4. 4. Algoritmo RC4● Verificação do funcionamento:● Software wep.php● apresenta a chave, o vetor State e os Bytes utilizandos para realizar a cifragem da mensagem● ex: php wep.php normal 10:11:12:13 “teste” 4
  5. 5. Situação Atual● O WEP apresenta chaves fracas● artigo: “Weaknesses in the Key Scheduling Algorithm of RC4” de Fluhrer / Mantin / Shamir● Programas WEPCrack e AirSnort 5
  6. 6. Situação Atualindex1 = 0;index2 = 0;for(counter = 0; counter < 256; counter++){ index2 = (key[index1] + state[counter] + index2) % 256; swap_byte(&state[counter], &state[index2]); index1 = (index1 + 1) % key_data_len;} 6
  7. 7. Situação Atual● Existem dois elementos que alteram os valores de S: – Index2 (varia de acordo com a chave) – Counter (contador linear)● Existe uma probabilidade de que um valor seja alterado tanto pelo Index, quanto pelo Counter 7
  8. 8. Situação Atual● Ou seja existe a probabilidade de aprox. 37% de que um valor seja alterado apenas por Counter● Para uma chave com K bytes, sendo E < K existe uma probabilidade de que E dependa apenas dos elementos 0..E da chave no vetor S● Ou seja, em 37% dos casos o algoritmo passa a ser equivalente a....... 8
  9. 9. Situação Atualfor(counter = 0; counter < 256; counter++) { index2 = (key[index1] + state[counter] + index2) % 256; swap_byte(&state[counter], &state[index2]); index1 = (index1 + 1) % key_data_len;}for(counter = 0; counter < 256; counter++){ index2 = (key[index1] + counter + index2) % 256; state[counter] = index2; index1 = (index1 + 1) % key_data_len;} 9
  10. 10. Situação Atual● A probabilidade desta afirmação estar correta para os elementos de State 10
  11. 11. Situação Atual● prova:● executar os dois algoritmos e comparar o número de colisões para cada elemento de State php wep.php prove1 8 500 norm 11
  12. 12. Situação Atual● Desta forma: State[E] = ΣK(E) + E(E + 1)/2● Onde (E) representa o somatório dos bytes de 0..E (inclusive) da chave K – State[1] = K[0] + K[1] + 1(1 + 1)/2 – State[2] = K[0] + K[1] + K[2] + 2(2 + 1)/2 12
  13. 13. Situação Atual● prova:● verificar se o valor de State[E] pode ser obtido pela fórmula php wep.php prove1 8 500 norm state 13
  14. 14. Situação Atual● Exemplo de chave fraca – permite a descoberta do segredo a partir do vetor de permutação devido a relação entre chaves prévias e vetor State – Exemplo de previsão simples no caso em que S[1] = 1 ● K[0] + K[1] = 0 (chave fraca), implicando: ● S[2] = K[2] + 2 (2+1) / 2 = K[2] + 3 14
  15. 15. Situação Atual● prova:● gerar as chaves com K[0] = 0 e K[1] = 0 php wep.php prove1 8 500 weak state 15
  16. 16. Situação Atual● Após a permuta é realizada a criação da chave de qualquer tamanho pelo PRNG inicializa-se x = y = 0 x = (x + 1) % 256; y = (state[x] + y) % 256; swap_byte(&state[x], &state[y]); xorIndex = (state[x] + state[y]) % 256; GeneratedByte = state[xorIndex]; 16
  17. 17. Situação Atual● Considerando uma situação onde State[1]=1 – ou seja, K[0]=K[1]=0 x = (0 + 1) % 256; /* x == 1 */ y = (state[1] + 0) % 256; /* y == 1 */ swap_byte(&state[1], &state[1]); /* no effect */ xorIndex = (state[1] + state[1]); /* xorIndex = 2 */ GeneratedByte = state[2] 17
  18. 18. Situação Atual● Sempre que State[1] = 1, a alteração realizada pelo PRNG torna-se previsível – É realizado um XOR entre o texto claro e State[2] – Ao descobrir State[2], o atacante pode sugerir um K[2] provável State[2] = K[2] + 3, quando State[1]=1● prova: php wep.php normal 00:00:12:82 “teste” 18
  19. 19. Situação Atual● prova:● para encontrar novas chaves com State[1]=1 – 1000 tentativas (aleatório) – chave com tam=5 php wep.php find_weak 1000 5 19
  20. 20. Quebra do WEP● No wep, o IV representa os primeiros 3 bytes do segredo compartilhado (K) = K[0], K[1], K[2]● O LLC adiciona sempre o mesmo cabeçalho (0xaa), primeiro byte a ser cifrado (texto claro) ● O atacante pode, então recriar os primeiros passos da permuta de State a partir do IV utilizado 20
  21. 21. Quebra do WEP● Resumindo, o atacante possui: – IV = K[0], K[1], K[2] – Precisa descobrir S[3] para descobrir/sugerir K[3], pois S[3] = K[0] + K[1] + K[2] + K[3] + 3(3 + 1)/2 21
  22. 22. Quebra do WEP● Sempre que S[1] = 0 e S[0] = n o primeiro byte será cifrado por S[n], pois: x = (x + 1) % 256; x = 1 y = (state[x] + y) % 256; y = (state[1]) = 0 swap_byte(&state[x], &state[y]); state[1] <-> state [0] xorIndex = (state[x] + state[y]) % 256; xorIndex = (state[1] + state[0]) = state[1] GeneratedByte = state[xorIndex]; GeneratedByte = state[1] 22
  23. 23. Quebra do WEP● prova:● para encontrar novas chaves com State[1]=0 – 1000 tentativas (aleatório) – chave com tam=5 php wep.php find_weak 1000 5● utiliza-se a chave encontrada no RC4● o valor apontado por State[0] será o índice em State para o valor utilizado na cifragem php wep.php normal 50:233:61:247:240 "ola mundo" 23
  24. 24. Quebra do WEP● Se (S[1] + S[S[1]] = 3) então o texto será cifrado por S[3] – Descoberta de S[3] ● S[3] = texto_cifrado XOR 0xaa – Inversão do processo de permutação do RC4 ● S[3] = K[0] + K[1] + K[2] + K[3] + 3(3 + 1)/2● O mesmo é feito para K[4], ... Ou seja (S[1]+S[S[1]]=4) ... .... .... 24
  25. 25. Quebra do WEP● Exemplo:php wep.php normal 4:29:74:3:228 “teste”KEY: 4:29:74:3:228<- objetivoState:S[0]=3 S[1]=0 S[2]=110 S[3]=116 S[4]=197 S[5]=38...RC4 KEY:116:79:90:205:73O atacante possui os valores iniciais da chaveIV[0]=K[0]=4 IV[1]=K[1]=29 IV[2]=K[2]=74 25
  26. 26. Quebra do WEP● Para obter K[3]:IV[0]=K[0]=4 IV[1]=K[1]=29 IV[2]=K[2]=74S[3]=116 (obtém realizando um XOR entre 0xaa e o valor do primeiro byte do pacote capturado)S[3] = 4 + 29 + 74 + K[3] + 3 x (3+1)/2K[3] = 116 – 4 – 29 – 74 – 6 = 3 K[3] = 3 26
  27. 27. Quebra do WEP● Próximo passo: – Encontrar uma situação onde S[1]=0 e S[0]=4 com chave fraca, ou seja, que: S[4] = K[0] + K[1] + K[2] + K[3] + K[4] + 4(4+1)/2 ... 27
  28. 28. Quebra do WEP● Exemplo 2:php wep.php normal 26:55:29:50:43 “teste”KEY: 26:55:29:50:43<- objetivoState:S[0]=3 S[1]=0 S[2]=10 S[3]=166 S[4]=213 S[5]=218...RC4 KEY:166:198:122:220:59 28
  29. 29. Quebra do WEP● Para obter K[3]:IV[0]=K[0]=26 IV[1]=K[1]=55 IV[2]=K[2]=29S[3]=166 (obtém realizando um XOR entre 0xaa e o valor do primeiro byte do pacotecapturado)K[3] = 166 – 26 – 55 – 29 – 6 = 50 K[3] = 50 ... ... ... 29

×