Professor:
Otto
Índice
1-Introdução
2-Objetivos
do Protocolo WEP
3-Estrutura
do WEP
4-Reutilização
de uma Seqüência
5.Gerenciamento
das Chaves WEP
6-Autenticação
de Mensagens
7-Conclusões
8-Bibliografia
1.
Introdução
1.
Objetivos
do Protocolo WEP
Vamos agora nas próximas seções,
analisar melhor o funcionamento e a utilidade deste protocolo. Vimos
anteriormente que os três principais objetivos a serem alcançados por este
aplicativo de segurança são: confidencialidade,
autenticidade e integridade dos dados transmitidos. Mas o que isto realmente
significa?
Em primeiro lugar, aparece confidencialidade, que significa simplesmente que o
protocolo de segurança deve ser capaz de evitar que um “intruso”, que neste caso
pode ser qualquer pessoa não autorizada a participar da comunicação, possa ler,
alterar, remover ou inserir dados na rede.
Além de confidencialidade, o protocolo deve garantir aos seus
usuários autenticidade e para tal, deve implementar um controle de acesso à
infraestrutura da rede sem fio. Ao utilizarmos o protocolo WEP, temos a opção de
poder simplesmente descartar todos os pacotes que não chegarem devidamente encriptados pelo WEP. Fazendo isso, podemos garantir que
apenas usuários que tenham uma chave WEP de criptografia possam fazer parte da
comunicação. Dessa maneira, realizamos um controle de acesso à rede e uma
decorrente autenticação dos usuários.
Por último, iremos citar o terceiro e
igualmente importante objetivo a ser alcançado pelo protocolo, a integridade dos
dados transmitidos. Para que uma mensagem enviada chegue até seu destinatário de
forma correta, sem alterações, o protocolo implementa uma função linear chamada
de “checksum” para que o conteúdo da mensagem
transmitida seja protegido e mantido inalterado ao longo da transmissão.
No entanto, ao longo deste trabalho
iremos mostrar que nenhum destes três objetivos são alcançados seguramente com
este protocolo. Para visualizarmos melhor o que ocorre atualmente com o WEP,
vamos primeiramente analisar sua estrutura, apontar suas falhas e finalmente
mostrar alguns tipos de ataques ocorridos e suas
conseqüências.
2.
Estrutura
do WEP
A estrutura deste protocolo é bastante
simples e fácil de se entender como será observado ao longo
desta
seção.
Inicialmente, cada uma das partes que desejam participar da comunicação
deve possuir uma chave secreta k que será usada no processo de criptografia e no
processo inverso também. Esta chave k será a mesma usada tanto para criptografar os dados a serem transmitidos como para
recuperar os dados na recepção. O nome que se dá a este processo é criptografia
simétrica devido ao fato da chave ser única para os dois processos. É importante
lembrar que a troca de chaves deve ser feita de maneira segura, se possível
pessoalmente, para que a segurança não seja comprometida. Iremos ver mais
adiante que essa mesma chave k também é usada para autenticação, o que torna o
protocolo um tanto quanto vulnerável neste aspecto.
Então, suponhamos que queremos enviar uma mensagem M que irá ser
transmitida através de uma wlan que utiliza o
protocolo WEP. Primeiramente, essa mensagem será computada por um programa
conhecido como “checksum”, que é um algoritmo
polinomial detetor de erros aleatórios, que irá gerar
um ICV (Integrity Check
Value) para que na recepção, possa ser verificada a
integridade da mensagem. Neste caso, o algoritmo utilizado para fazer esse
controle é o CRC-32. Ele irá gerar um ICV de 4 bytes que deve ser recuperado
exatamente igual pelo receptor da mensagem M, caso contrário, a mensagem
recebida será imediatamente considerada errada e será descartada. Então, a
mensagem M e o seu resultado de “checksum” c(M) serão
concatenados e chamados de texto plano P. Portanto P = { M, c(M) }. É importante
observarmos que o texto plano não depende da chave k.
Num segundo estágio, é gerada uma seqüência de bits pseudo-aleatórios a
partir da chave secreta k (40 bits) e de um vetor de inicialização v (24 bits) gerado aleatoriamente também. Essa
seqüência é gerada pelo algoritmo de criptografia RC4 e será indicada por RC4
(v,k).
Então, finalizando o processo de criptografia, faz-se um xor entre o texto plano P e a seqüência RC4. O resultado
dessa operação de xor constituirá o pacote cifrado que
será transmitido ao longo do ar. Esse pacote cifrado será aqui indicado
por:
C = P Ä
RC4 (v,
k)
Além do pacote cifrado, transmite-se
também o vetor de inicialização utilizado, para que o
processo reverso de decriptar seja
possível.
A recuperação do pacote se dá de maneira
simples, aplicando-se o mesmo processo de maneira inversa. O receptor terá o
pacote cifrado C e o vetor de inicialização v.
Tendo-se este vetor e conhecendo-se a chave secreta k, o receptor pode utilizar
o mesmo RC4 para gerar a seqüência de bits aleatória. Uma vez tendo essa
seqüência, basta ele aplicar um xor entre essa
seqüência e o pacote cifrado para recuperar o texto plano P (pacote original).
Isso só é possível devido a algumas propriedades do xor que citaremos abaixo:
P´= C Ä RC4 (v, k)
P´= ( P Ä RC4(v, k) ) Ä RC4 (v, k)
P´=
P
Então, fazendo-se o xor da seqüência
RC4 com ela mesma o resultado é zero. Portanto restará o xor de uma seqüência de zeros com
P. Mas, o resultado do xor de qualquer número com zero,
será o próprio número. Dessa maneira, foi possível recuperar o pacote original.
O próximo passo do receptor agora será dividir o pacote em M´e c´(M´), em
seguida ele recomputa o CRC-32 e compara o resultado
obtido c(M´) com c´(M´). Se forem iguais, significa que o pacote recebido possui
um checksum válido e portanto será aceito. Esta última
etapa é realizada com o intuito de preservar a integridade dos dados
transmitidos, fazendo com que o receptor rejeite pacotes que por ventura estejam
corrompidos.
A figura abaixo ilustra melhor o
processo descrito nesta seção:
figura 1 – Criptografia
WEP
3.
Reutilização
de uma Seqüência
A
criptografia WEP, ao utilizar o algoritmo RC4 permite que a mesma seqüência
aleatória se repita de vez em quando. Isso, é um ponto muito desfavorável para o
aspecto de segurança do protocolo, mostraremos a seguir, o que pode ocorrer ao
reutilizarmos uma seqüência RC4(v,k).
Suponha que C1 e C2 são dois pacotes
cifrados com o mesmo vetor de inicialização e a mesma
chave secreta.
Então temos a seguinte situação:
C1
= P1 Ä
RC4(v,k)
C2
= P2 Ä
RC4(v,k)
C1
Ä
C2 = (P1 Ä
RC4(v,k)) Ä
(P2 Ä
RC4(v,k))
=
P1 Ä
P2
Ou seja, podemos observar que com dois
pacotes cifrados com a mesma seqüência, é possível recuperar um xor dos dois textos planos sem conhecer a chave secreta e o
vetor de inicialização. Isso só foi possível pois
houve um cancelamento da seqüência RC4, que por sua vez ocorreu devido ao fato
dos dois pacotes terem sido igualmente cifrados. Esse resultado permite uma
série de ataques ao protocolo uma vez que se um dos dois textos é conhecido,
imediatamente o outro torna-se conhecido. Mas conhecer um pacote não é tarefa
tão difícil, afinal muitos pacotes possuem conteúdo previsível (ex: cabeçalho).
Além disso, muitos textos possuem redundância, o que torna mais fácil descobrir
seus conteúdos através de várias técnicas conhecidas. (ex: análise da frequência).
Para evitar este tipo de ataque, o WEP
utiliza um vetor de inicialização diferente para cada
pacote, e então, apesar da chave ser a mesma para todos os pacotes, a seqüência
gerada pelo RC4 será diferente para cada pacote.
No entanto, apesar de existir a
recomendação de se utilizar um vetor de inicialização
diferente para cada pacote, o protocolo WEP não especifica a maneira como devem
ser selecionados os VI´s, e isso causa deficiência no protocolo já que a chance
de serem utilizados dois VI´s iguais, a que chamaremos de colisão, existe e nem
sempre é pequena.
Algumas placas geram os vetores de inicialização de maneira seqüencial começando do zero e
incrementando seu valor a cada pacote enviado. Além disso, resetam seu valor para zero cada vez que um cartão é reinserido na máquina. Isso faz com que baixos valores de
VI´s ocorram mais freqüentemente que os outros, aumentando a chance de haver
colisão entre eles.
Além disso, a própria arquitetura do
protocolo permite a ocorrência de colisões. Suponha por exemplo que estamos
transmitindo numa taxa de 5Mbps (o máximo seria 11Mbps) pacotes de 1500 bytes.
Com isso podemos transmitir aproximadamente 416 pacotes por segundo. Como os
VI´s possuem 24 bits, a quantidade de pacotes diferentes que podem ser mandados
é 224 , ou seja podemos no melhor caso ficar 11
horas e 12 minutos sem mandar pacotes repetidos. No entanto esse cálculo é
otimista, pois uma colisão pode acontecer mais freqüentemente. Uma implementação
que usa um VI aleatório de 24 bits por pacote, terá de acordo com o “Paradoxo do
Aniversário”, 50% de chance de repetir um VI depois de apenas 4823 pacotes, o
que significa alguns poucos minutos. O gráfico abaixo ilustra essa probabilidade
de colisão:
figura 2 – Probabilidade de
Colisão
4.
Gerenciamento
das Chaves WEP
Uma outra vulnerabilidade do protocolo,
se encontra no gerenciamento das chaves de criptografia. Se na transmissão, já é
mandado o vetor de inicialização sem proteção alguma,
é importante que a chave seja confidencial, caso contrário qualquer um que
possua a chave estará apto a descobrir a seqüência RC4(v,k).
Então, o protocolo realiza uma
distribuição global das chaves através de um mecanismo externo onde cada
mensagem tem um campo IK que identifica uma entre as quatro possibilidades de
chave. Porém, na prática acaba-se usando a mesma chave k para a rede inteira. Se
no entanto, a rede é grande, utilizada por muitas pessoas, então, a chave será
conhecida por muitas pessoas e quanto mais gente tiver conhecimento da chave,
maior será a probabilidade dela deixar de ser
confidencial.
Além disso, o fato da chave ser a mesma
para a rede inteira aumenta as chances de ocorrer uma colisão, o que é
extremamente desfavorável.
Para evitar este tipo de problema, uma
das soluções seria a troca periódica das chaves, porém, essa troca seria manual
e no caso de termos uma rede muito grande, a realização da troca de centenas ou
milhares de chaves seria um tanto quanto trabalhosa e até mesmo
insana.
Uma outra medida que muitos
administradores de rede tomam para tentar diminuir esse risco de descoberta da
chave k é simplesmente fazer diretamente a configuração das chaves nos próprios
dispositivos, dessa forma o usuário final não tem conhecimento de k. Essa medida
diminui o risco, mas não resolve o problema visto que as chaves continuam
guardadas nos dispositivos remotos.
5.
Autenticação
de Mensagens
Como já citamos anteriormente, no
protocolo WEP utiliza-se um algoritmo (CRC-32) para detectar possíveis erros de
transmissão que por ventura tenham modificado o conteúdo dos dados. No entanto,
como trata-se de um código linear, mostraremos a seguir que esse código não é
eficiente contra ataques maliciosos que podem fazer modificações controladas no
pacote e não despertar suspeita.
Vamos ilustrar primeiro, como é feito o
processo de autenticação de mensagens no WEP:
figura 3 – Autenticação de
Mensagens
O usuário para poder fazer parte da rede
sem fio, envia para o AP (ponto de acesso) um pedido de autenticação. Este
retorna para o usuário uma espécie de desafio, ao qual o usuário deve cifrar
utilizando o RC4 e a chave que ele posssui, e então,
enviar de volta o desafio cifrado para o AP que vai utilizar a chave k para
decifrar o conteúdo. Se o conteúdo recuperado pelo AP for igual ao original,
significa que o usuário utilizou a chave k correta e portanto poderá ser
autenticado e receberá uma confirmação do AP.
No entanto, vamos mostrar que é possível
violar a integridade dos dados, interceptando uma mensagem e modificando seu
conteúdo. Isso só é possível devido ao fato do checksum e do RC4 serem funções lineares. Suponhamos então
que C é um texto cifrado capturado por um atacante malicioso que deseja inserir
um ruído r no pacote. Então, ao inserir este ruído, o atacante modificará o
texto cifrado C para C´da seguinte maneira:
C´= C Ä (r,
c(r))
= RC4(v,k)
Ä
(M,c(M)) Ä (r,
c(r))
= RC4(v,k)
Ä (M
Ä r,c(M)
Ä
c(r))
= RC4(v,k)
Ä (M´,
Ä c(M
Ä
r))
= RC4(v,k)
Ä (M´,
Ä
c(M´))
Portanto, provamos ser possível inserir
um ruído numa mensagem alterando não só a mensagem original como também o checksum da mensagem original, fazendo isso, provamos que o
CRC-32 não foi capaz de manter a integridade dos dados.
Além de modificar uma mensagem, é
possível também inserir na rede uma nova mensagem, violando novamente o controle
de acesso a rede. Mostraremos que isto é possível, devido ao fato do checksum ser uma função que não possui chave alguma. Então,
basta conhecer um texto plano P para que junto com o texto cifrado C a seqüência
RC4 seja descoberta:
P Ä C = P Ä (P Ä RC4(v,k)) = RC4(v,k)
A partir desta seqüência, é possível
injetar na rede um novo pacote cifrado de uma nova mensagem
M´:
C´= (M´,c(M´))
Ä RC4
(v,k)
Com isso, um atacante estará apto a
enviar para o AP o desafio cifrado corretamente e conseqüentemente receberá a
confirmação de autenticação na rede.
É importante lembrar que isso só é
possível se usarmos o mesmo VI da mensagem original. Mas apesar do protocolo
recomendar que não se reutilize o VI, ele não exige que os VI´s sejam trocados a
cada pacote.
Uma das possíveis soluções para este
problema seria utilizar um código de autenticação de mensagem (MAC) com chave,
uma função de Hash por exemplo que evitasse que o ICV
fosse alterado por algum intruso.
Um
outro possível ataque seria através de uma redireção
de IP. Este tipo de ataque é possível quando o AP atua como roteador de uma conexão da Internet.
Nesse caso, a idéia principal seria
capturar um pacote cifrado no ar e utilizar por exemplo a técnica descrita acima
para modificar seu conteúdo, no caso fazer uma modificação no endereço de
destino deste pacote para um novo endereço conhecido pelo atacante. Dessa
maneira, estaríamos usufruindo do AP que faria todo o processo de decriptar o pacote e então enviaria este pacote decriptado para o endereço especificado pelo atacante.
Através desse tipo de ataque, explora-se a capacidade do AP de decifrar os
pacotes, para enviá-los da rede sem fio para a Internet.
6.
Conclusões
Através do estudo das técnicas de
criptografia no WEP, foi possível analisar seu funcionamento e também apontar
suas vulnerabilidades e falhas de segurança.
Vimos que um dos grandes problemas
ocorre quando há a repetição de vetores de inicialização, de maneira que deveria existir um controle
mais severo quanto a não reutilização destes.
Um outro ponto seria o tamanho da chave
de criptografia que no WEP é de 40 bits e que numa versão mais atualizada
aumenta para 104 bits. Esse aumento no tamanho da chave é válido para dificultar
que esta seja descoberta mais rapidamente.
Além do tamanho das chaves, um dos
pontos que podem ser melhorados é a questão do gerenciamento das mesmas, que
atualmente é feito manualmente, de forma tão pouco prática que raramente é
realizada a troca de chaves.
E para finalizar, outra questão que
deveria ser modificada é a função de checksum que por
ser uma função que não possui chave, facilita ataques que alteram a integridade
dos dados bem como a autenticidade da rede sem fio.
7.
Bibliografia
BORISOV, N., GOLDBERG,
FLUHRER,
S., MANTIN,
RIVEST,
R. 2001. “ RSA Security Response to Weaknesses in Key Scheduling Algorithm of
RC4 ”. RSA Security’s Site. (http/www.rsasecurity.com/rsalabs/technotes/wep.html) .
WILLIAM A. ARBAUGH, NARENDAR SHANKAR, Y. C. JUSTING 2001. “ Your 802.11 Wireless Network has no Clothes ” .
“ Wireless LAN Security: A Short History ” (http/www.oreillynet.com/pub/a/wireless/2002/04/19/security)
VERISSIMO,
Fernando – Segurança em Redes sem
Fio. 2002. 90f. Monografia apresentada à Universidade Federal do Rio de
Janeiro, como requisito final do curso de Tópicos Especiais em Redes Integradas
Faixa Larga (COS871). Disponível em http://www.ravel.ufrj.br/~verissimo/cos871,
última visita em 18.Dez.2002.
Figuras –
(http:/www.tempest.com.br)