LEONARDO NADOLNY NETO A participação dos estudantes na

Propaganda
LEONARDO NADOLNY NETO
A participação dos estudantes na elaboração do TCC ocorreu de forma igualitária, pois
todas as atividades foram desenvolvidas em conjunto.
Inicialmente, buscamos nos aprofundar nos assuntos relacionados à autenticação com
servidor Radius através da leitura de artigos e material disponível na internet. Em seguida,
instalamos, configuramos e testamos o servidor de maneira à atender os objetivos propostos.
A redação do artigo concluiu o TCC, apresentando os resultados obtidos e as nossas
conclusões.
Autenticação de clientes em rede sem fio com Radius
Julio Kuten, Leonardo Nadolny Neto
Curso de Especialização em Redes e Segurança de Sistemas
Pontifícia Universidade Católica do Paraná
Curitiba, março de 2010
Resumo
O objetivo deste artigo é descrever a implantação de um servidor de autenticação
Radius para clientes de rede sem fio, utilizando o software FreeRadius e banco de dados
MySQL na distribuição Linux Fedora. Além do embasamento teórico, serão detalhadas as
configurações do servidor e dos equipamentos utilizados, topologia de rede adotada, bem
como os testes realizados e os resultados obtidos.
1 Introdução
Com a popularização e padronização dos equipamentos de rede sem fio, a utilização
de meios não guiados para redes de computadores vem crescendo constantemente, e junto
com esse aumento surgem novas necessidades de segurança.
Visando limitar o acesso à internet de uma rede sem fio, descreveremos a configuração
de um servidor de autenticação Radius para validar as credenciais dos clientes. A principal
motivação para o desenvolvimento desse artigo foi buscar uma solução para controle dos
acessos à internet e gerar um histórico com informações dos usuários e do tempo que
permaneceram conectados em redes que necessitem de um controle mais robusto, tais como
ambientes empresariais, universidades e locais onde acessos não autorizados possam
comprometer de alguma forma a segurança.
Segundo [5], com a utilização de um servidor Radius, é possível aumentar o nível de
segurança de um ambiente de rede sem fio. Radius significa Remote Authentication Dial-In
User Service. Trata-se de um protocolo de rede do tipo cliente/servidor, amplamente utilizado
para autenticar, autorizar e contabilizar acesso de clientes a um sistema ou rede a partir de um
servidor centralizado [3].
2 Funcionamento do Radius
Radius um protocolo utilizado para gerenciar acesso a serviços de rede. Esse protocolo
define o padrão para troca de informações entre o NAS (Network Access Server) e um
servidor AAA - Authorization, Authentication, and Accounting para autenticar, autorizar e
contabilizar os acessos [6].
O usuário que deseja utilizar determinado serviço de rede envia suas credenciais para
o NAS, que encaminha a solicitação de autenticação para o servidor Radius na forma de
mensagem de requisição de acesso. De acordo com a resposta fornecida pelo servidor, o NAS
permite ou nega acesso aos serviços requisitados pelo cliente de acordo com as políticas e
informações definidas pelo servidor Radius [2].
O pacote de dados Radius é composto pelo código, identificador, comprimento,
autenticador e atributos. O código tem tamanho fixo de um byte e é usado para definir o tipo
do pacote Radius que está sendo enviado. Os valores para o campo código são: Requisição de
Acesso (Access-Request), Acesso Aceito (Access-Accept), Acesso Negado (Access-Reject) e
Desafio de Acesso (Access-Challenge). O campo identificador também tem tamanho fixo de
um byte e é usado para identificar as requisições e as respostas trocadas. O campo
comprimento tem tamanho fixo de dois bytes e serve para informar o tamanho do pacote. Os
pacotes Radius devem possuir um tamanho entre 20 e 4096 bytes. O campo autenticador
possui o tamanho de 16 bytes e os valores incluídos nesse campo servem para autenticar as
respostas do servidor Radius e também são utilizados no algoritmo de ocultação de senhas.
Por fim, o campo de atributos é responsável por carregar informações específicas da
autenticação e autorização [4].
O estabelecimento de uma sessão ocorre com uma série de trocas de mensagens. A
Figura 1 mostra as possibilidades da requisição de acesso a um serviço.
Figura 1 – Possibilidades da requisição de acesso a um serviço [2]
O Radius permite utilização de diferentes métodos para autenticação, como PAP,
CHAP e EAP. PAP ou Password Authentication Protocol é um protocolo de autenticação por
senha. CHAP ou Challenge-Handshake Authentication Protocol é o protocolo de autenticação
por desafios de identidade. EAP ou Extensible Authentication Protocol é um protocolo de
autenticação extensível, que oferece suporte a diversos métodos de autenticação.
3 Topologia da Rede
A topologia da rede adotada é composta pelo servidor de autenticação Radius, que
constitui o principal elemento da rede. Esse servidor conta com duas interfaces de rede, e faz
a intermediação dos acessos dos clientes à internet. Utiliza a distribuição Linux Fedora 12
(Kernel 2.6.31), e os softwares FreeRadius versão 2.1.8 e MySQL 5.1.42. Esse servidor é
conectado à internet através de um modem ADSL pela interface de rede eth0. A interface de
rede eth1 é conectada a um switch, onde também são interligados os APs (NAS) por cabo. A
conexão dos clientes (notebooks, dispositivos móveis) com os APs é feita sem fio.
A Figura 2 mostrada abaixo representa o cenário descrito:
Figura 2 - Cenário
4 Configuração dos Equipamentos
Os equipamentos utilizados como NAS foram os roteadores sem fio modelo DI-524 e
DI-624, ambos da marca Dlink. Para que o NAS redirecione corretamente as solicitações de
autenticação para o servidor Radius, é necessário habilitar a comunicação wireless, digitar o
nome da rede, escolher o canal, o tipo de segurança (WPA) e o tipo de encriptação, no caso,
TKIP. Também é preciso informar o endereço IP do servidor Radius, a porta e a senha
secreta, com os valores 192.168.0.1, 1812 e “senhasecreta”, respectivamente.
A Figura 3 exibida abaixo, mostra essa configuração feita pela interface de
configuração web do roteador. Essa interface é acessada digitando o ip do equipamento na url
de um navegador web.
Figura 3 – Interface Web de configuração do roteador
5 Configuração do Software
Para que o Radius busque informações de autenticação e gere os registros dos acessos
em um banco de dados MySQL, foi utilizada uma DDL que é disponibilizada juntamente com
o pacote FreeRadius. Essa DDL é um arquivo em formato .sql que contém as instruções para
criar o banco de dados e toda a estrutura de tabelas, sendo necessário apenas importar esse
arquivo pelo MySQL para gerar o banco de dados. Esse arquivo é chamado de schema.sql e
está localizado em /etc/raddb/sql/mysql.
Feito isso, um banco de dados chamado “radius” é criado, e conta com as seguintes
tabelas: radacct, radcheck, radgroupcheck, radgroupreply, radpostauth, radreply e
radusergroup.
A tabela radacct significa radius accountig, e é utilizada para registrar os acessos
feitos pelos clientes. A tabela radacct conta com colunas para gravar o identificador da
sessão, nome do usuário e do grupo que ele pertence, NAS de origem, data e hora do início e
fim da conexão, entre outros. A tabela radcheck é a tabela onde serão cadastrados os usuários,
com suas respectivas senhas de acesso, e os demais atributos de usuário que serão verificados
no momento da autenticação, como endereço MAC de origem do cliente. A tabela
radgroupcheck contém informações dos grupos referenciados em usergroup para checagem
de parâmetros. Na tabela radgroupreply constam informações sobre a resposta das
autenticações. A tabela radpostauth registra as respostas enviadas para os usuários. A tabela
radreply contém os atributos que serão enviados para o usuário nas respostas diferentes de
Access_Reject. Por fim, a tabela radusergroup é utilizada para definir qual grupo os usuários
fazem parte [1].
O arquivo de configuração do daemon do FreeRadius é o radiusd.conf. Esse arquivo é
composto pelas variáveis que definem os caminhos e locais dos arquivos envolvidos,
informações do processo, como usuário, grupo e pid, cláusula listen que define em quais
interfaces o servidor vai escutar por autenticações, destino dos arquivos de log, programa que
vai efetuar a checagem e demais módulos.
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/lib/freeradius
pidfile = ${run_dir}/${name}.pid
user = radiusd
group = radiusd
max_request_time = 30
cleanup_delay = 5
max_requests = 1024
listen {
type = auth
ipaddr = *
port = 0
}
listen {
ipaddr = *
port = 0
type = acct
}
hostname_lookups = no
allow_core_dumps = no
regular_expressions
= yes
extended_expressions = yes
log {
destination = files
file = ${logdir}/radius.log
syslog_facility = daemon
stripped_names = no
auth = no
auth_badpass = no
auth_goodpass = no
}
checkrad = ${sbindir}/checkrad
security {
max_attributes = 200
reject_delay = 1
status_server = yes
}
proxy_requests = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
}
modules {
$INCLUDE ${confdir}/modules/
$INCLUDE eap.conf
$INCLUDE sql.conf
}
instantiate {
exec
expr
expiration
logintime
}
$INCLUDE policy.conf
$INCLUDE sites-enabled/
O arquivo sites-enabled/default conta as sessões authorize, autenticate e accounting,
que definem os parâmetros para autorização, autenticação e contabilização.
authorize {
preprocess
chap
mschap
eap {
ok = return
}
sql
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
eap
}
preacct {
preprocess
acct_unique
}
accounting {
detail
sql
sql_log
attr_filter.accounting_response
}
session {
sql
}
post-auth {
sql
sql_log
exec
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
pre-proxy {
}
post-proxy {
eap
}
O arquivo sql.conf trata das configurações do banco de dados. Nesse arquivo, é
configurado o acesso do Radius ao servidor de banco de dados MySQL, e também são
definidas as variáveis que correspondem aos nomes das tabelas utilizadas. Esse arquivo
precisa ser alterado e configurado conforme exemplo abaixo, pois o padrão do Radius é
buscar essas informações em arquivos de configuração, e não em um banco de dados.
sql {
database = "mysql"
driver = "rlm_sql_${database}"
server = "localhost"
login = "root"
password = "2mL5j"
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"
groupcheck_table = "radgroupcheck"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
deletestalesessions = yes
sqltrace = no
sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = 5
connect_failure_retry_delay = 60
lifetime = 0
max_queries = 0
nas_table = "nas"
simul_count_query = "SELECT COUNT(*) FROM
${acct_table1} WHERE UserName='%{SQL-User-Name}' \
AND AcctStopTime = 0"
simul_verify_query = "SELECT RadAcctId,
AcctSessionId, UserName, NASIPAddress, NASPortId,\
FramedIPAddress, CallingStationId, FramedProtocol \
FROM ${acct_table1} WHERE UserName= \
'%{SQL-User-Name}' AND AcctStopTime = 0"
}
O arquivo clients.conf contém a configuração de todos os NAS que podem
encaminhar solicitações de autenticação dos clientes para o servidor Radius. O servidor
Radius somente vai aceitar solicitações dos NAS especificados nesse arquivo.
client localhost {
ipaddr = 127.0.0.1
secret
= senhasecreta
require_message_authenticator = no
nastype
= other
}
client 192.168.0.10 {
secret = senhasecreta
shortname = servidor-radius
}
Uma vez feitas essas configurações, é preciso cadastrar usuários e grupos, definindo os
atributos que deverão ser validados para permitir acesso dos usuários à rede sem fio. Essas
informações serão inseridas diretamente no banco de dados através de comandos em
linguagem SQL.
Primeiramente, é preciso se conectar localmente ao banco de dados MySQL, onde
“2mL5j” corresponde à senha do usuário root do banco de dados MySQL, e “radius” ao nome
do banco de dados.
# mysql –p 2mL5j radius
O cadastro de usuário é feito na tabela radcheck. No exemplo abaixo, é cadastrado um usuário
chamado “julio” com a senha “123”.
mysql> INSERT INTO radcheck (username, attribute, op, value)
mysql> VALUES ('julio', 'ClearText-Password', ':=', '123');
O cadastro de grupo é feito na tabela radgroupcheck. Nessa tabela, também é setado o
atributo Simultaneous-Use, com o valor 1. Isso significa que os usuários desse grupo poderão
ter apenas uma sessão por login e senha, o que impede que duas ou mais pessoas utilizem o
mesmo login e senha simultaneamente. No exemplo abaixo, é criado um grupo chamado
“grupo1”.
mysql> INSERT INTO radgroupcheck (groupname, attribute,
mysql> op, value) VALUES ('grupo1', 'Simultaneous-Use',
mysql> ':=', 1);
Após o cadastro de usuário e do grupo, é necessário vincular o usuário “julio” ao “grupo1”,
para que seja feita a validação de usuários simultâneos.
mysql> INSERT INTO usergroup (username, groupname) VALUES ('julio', 'grupo1');
Para controlar quais máquinas poderão acessar a rede, também é possível fazer um controle
por endereço MAC. Para isso, é utilizado o atributo CallingStation-ID, que também é
cadastrado em forma de um registro na tabela radcheck.
mysql> INSERT INTO radcheck (username, attribute, op, value)
mysql> VALUES ('julio', 'CallingStation-ID', ':=', ' 00:1D:7D:F6:52:7E');
Isso faz com que o usário “julio” seja autorizado a acessar a rede sem fio somente se logar da
máquina cujo endereço MAC foi especificado no comando acima. Não será permitido ao
usuário acessar a rede de um equipamento com endereço MAC diferente do cadastrado.
Para iniciar o processo servidor, é utilizado o seguinte comando: service radiusd start,
ou também é possível executá-lo em modo de depuração, com o comando radiusd –X. Nesse
caso, todas as informações são mostradas em tela, o que facilita a identificação de um
possível problema.
6 Configurações dos clientes
Nos computadores clientes, a rede sem fio configurada no AP (conforme Figura 3) irá
aparecer na lista de redes disponíveis. Para que a conexão seja estabelecida corretamente, é
preciso configurar o tipo de segurança, criptografia e o método de autenticação, com os
valores “WPA-Enterprise”, “TKIP” e “Microsoft EAP Protegido (PEAP)”, respectivamente.
Essas configurações podem ser acessadas clicando com o botão direito do mouse sobre a rede
sem fio “Homelinux”, e em seguida em propriedades. Quando o cliente tentar se conectar,
suas credenciais serão exigidas, e será necessário digitar um nome de usuário e senha válidos.
Após isso, será feita a autenticação pelo servidor Radius, e permitido o acesso à internet.
A Figura 4 ilustra a configuração do cliente utilizando o sistema operacional Microsoft
Windows Vista Ultimate.
Figura 4 – Configuração de cliente Windows
7 Procedimentos de Teste e Avaliação
Os testes foram realizados em ambiente doméstico, simulando o cenário representado
pela Figura 2. O servidor utiliza a distribuição Linux Fedora 12, e roda em um computador
dedicado. Conta com duas interfaces de rede e com os softwares FreeRadius 2.1.8 e MySQL
5.1.42, configurados de acordo com os exemplos mostrados no presente artigo.
A metodologia de testes adotada para validar o funcionamento do servidor consiste em
uma série de tentativas de conexões, que devem ser aceitas ou recusadas pelo servidor, de
acordo com as políticas adotadas. Cada uma das situações é descrita em uma linha da tabela
abaixo, e conta com o atributo testado, valor utilizado no teste, resultado esperado da
autenticação, e o resultado final da autenticação.
Tabela 1 – Metodologia de testes aplicada no servidor
Resultado
Atributo
Valor
Esperado
Real/Real
Permitir
Usuário/Senha
(“julio”, “123”)
Autenticação
Real/Falso
Usuário/Senha
Negar Autenticação
(“julio”,“321”)
Falso/Real
Usuário/Senha
Negar Autenticação
(“foo”,”123”)
Falso/Falso
Usuário/Senha
Negar Autenticação
(“foo”,”789”)
Real/Real
Permitir
Usuário/MAC
(“julio”,“00-1DAutenticação
7D-F6-52-7E'”)
Real/Falso
Negar
Usuário/MAC
(“julio”,“00-1DAutenticação
7D-F6-52-7B'”)
Usuário/Conexões
Real/Real
Permitir
Simultâneas
(“julio”, “1”)
Autenticação
Usuário/Conexões
Real/False
Negar
Simultâneas
(“julio”, “2”)
Autenticação
Resultado da
Requisição
Autenticação
Permitida
Autenticação
Negada
Autenticação
Negada
Autenticação
Negada
Validação
OK
OK
OK
OK
Autenticação
Permitida
OK
Autenticação
Negada
OK
Autenticação
Permitida
Autenticação
Negada
OK
OK
8 Conclusão
O desenvolvimento deste artigo, bem como a implementação do servidor, nos
proporcionou uma rica experiência conceitual e prática no que diz respeito à segurança de
rede sem-fio.
O embasamento teórico revela que o protocolo Radius é largamente utilizado para
controlar acesso a recursos de rede, e respondeu positivamente ao objetivo de prover controle
de acesso à internet em uma rede sem fio.
Os resultados obtidos com o uso do FreeRadius e banco de dados MySQL
demonstram um mecanismo eficiente de controle para acesso utilizando usuário/senha, e
também fazendo controle por endereço MAC de origem, além de manter um histórico dos
acessos dos clientes.
Referências
[1] Brandão, Patrick. FreeRadius, servidor radius eficiente e completo. Acesso em:
Fevereiro de 2010. Disponível em: http://www.vivaolinux.com.br/artigo/Freeradius-servidorradius-eficiente-e-completo/
[2] Carvalho, Hugo Eiji Tibana. Radius. Acesso em: Março de 2010. Disponível em:
http://www.gta.ufrj.br/grad/08_1/radius/index.html
[3] Hassel, Jonathan. Radius. O’Reilly, 2002.
[4] Rocha, Dielson. RADIUS – Protocolo de Autenticação. Acesso em: Fevereiro de 2010.
Disponível em:
http://tecnociencia.inf.br/comunidade/index.php?option=com_content&task=view&id=624&I
temid=138&joscclean=1&comment_id=701
[5] Rufino, Nelson Murilo de Oliveira. Segurança em Redes sem Fio. 2a. ed. São Paulo :
Novatec Editora, 2007.
[6] Sanches, Carlos Alberto. Projetando Redes WLAN. São Paulo : Érica, 2005.
Download