O Pacote de
dados RADIUS segue o seguinte formato:
Código:
O campo código
tem o tamanho fixo de um octeto e serve para identificar qual tipo
de pacote RADIUS está sendo enviado. Caso o campo código
esteja preenchido de forma incorreta, ele é descartado
silenciosamente, sem que ocorra um processamento posterior deste
pacote. Dentre os possíveis tipos de pacote podemos
citar:
-
Requisição de acesso
(Access-Request)
-
Acesso aceito
(Access-Accept)
-
Acesso negado
(Access-Reject)
-
Desafio de acesso
(Access-Challenge)
Identificador:
O campo de
identificação possui o tamanho fixo de um octeto, e o seu
principal objetivo é identificar as requisições e as
respostas trocadas. O servidor RADIUS AAA pode detectar uma
requisição duplicada através da análise do IP
de origem e da porta UDP de origem. Nestes casos, o pacote é
descartado silenciosamente.
Comprimento:
O campo Comprimento possui o tamanho fixo de 2 octetos e serve para
informar o tamanho do pacote. Também estão inclusos no
cálculo do tamanho do pacote os campos Código,
Identificador, Comprimento, Autenticador e Atributos. Se o tamanho
especificado no campo Comprimento for menor que o tamanho do
pacote, os octetos fora do alcance especificado são
ignorados.
Caso o tamanho do pacote seja menor do que o tamanho especificado
no campo Comprimento, este pacote é silenciosamente
descartado. Os pacotes RADIUS devem possuir
um tamanho mínimo de 20 octetos e um tamanho máximo de
4096 octetos.
Autenticador:
O campo de
Autenticação possui o tamanho de dezesseis octetos. Os
valores incluídos neste campo do pacote são utilizados
para autenticar as respostas do servidor RADIUS e também
são utilizados no algoritmo de ocultação de
senhas.
Requisição de
Autenticação
Nos pacotes de requisição de acesso, o
valor do campo de Autenticação é um número
aleatório chamado de Autenticador de Requisições.
É fundamental que este valor numérico não seja
previsível, e que seja único durante o período em
que está sendo utilizado. Se estas condições
não forem atendidas, a repetição de um mesmo valor
numérico de autenticação poderia permitir que um
atacante respondesse no lugar do usuário legitimo, utilizando
uma resposta anteriormente interceptada. Em outro caso, um atacante
poderia responder uma predição de uma
requisição futura, e usar esta previsibilidade para
enganar os usuários e atuar como um servidor falso. Dentro do
pacote de Requisição de acesso, é utilizado o
algoritmo de ocultação de senhas. Este algoritmo gera um
hash do segredo compartilhado concatenado com o Autenticador
de requisições. Em seguida, é feito um XOR com a
senha do usuário, e este valor é colocado no campo de
senha do usuário do pacote. Desta forma, o segredo
compartilhado e a senha do usuário não são enviados
diretamente pela rede. Assim, somente quem possuir o segredo
compartilhado e a senha do usuário poderá realizar a
mesma operação e verificar se o resultado é
compatível. Neste caso, somente o servidor RADIUS possui estas
informações.
Resposta de
Autenticação
O valor inserido no campo de
Autenticação nos pacotes do tipo Acesso Aceito, Acesso
Negado, e Desafio de acesso são chamados de Resposta de
Autenticação. Eles contêm um hash MD5 que
é calculado através do pacote RADIUS, o campo de
código, o identificador, o comprimento, o campo de
Autenticação do pacote de requisição de acesso,
e os atributos de resposta, seguidos do segredo compartilhado entre
o Servidor RADIUS e o NAS. Desta forma, o campo com a Resposta de
Autenticação é formado por:
MD5(Código+Identificador+Comprimento+Campo de
Autenticação do pacote de requisição de
acesso+Atributos de Resposta + Segredo Compartilhado), onde o sinal
“+” representa a concatenação.
Atributos:
O campo de Atributos
é responsável por carregar informações
específicas de autenticação e de
autorização, como os detalhes específicos de uma
dada requisição ou de uma dada resposta. Dentre os tipos
de informações contidas, podemos citar o nome do
usuário a ser autenticado, o endereço IP do NAS, a porta
que será utilizada na conexão, dentre
outras.