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.