SELINUX: COMO TORNAR UM SERVIDOR MAIS SEGURO Alex Sander de Oliveira Toledo1 Fernanda Amaral Ferreira2 Resumo: O texto apresenta discussão sobre o processo de implementação de segurança em servidores GNU/Linux através do SELinux, já incorporado ao kernel, onde é utilizado o modelo Mandatory Access Control (MAC). Palavras-chave: Segurança, Redes, Servidores, Software Livre. 1 Introdução A partir da década de 90, o mundo convive, mais intensamente com a globalização e seus efeitos sócio-políticos-culturais. Presencia-se uma época de evolução constante na qual a tecnologia vem reinando entre as nações de forma a facilitar tarefas. O surgimento da “Sociedade da Informação global” está transformando o estilo de vida das pessoas e trazendo mudanças radicais na obtenção das informações, tanto no ambiente de trabalho quanto no nível de relacionamento pessoal Esta sociedade da Informação possui em seu entorno sociocultural e econômico o impacto de tecnologias que facilitam a criação, distribuição e manipulação da informação. Porém, percebe-se que, muitas vezes, a informação é apresentada de forma fragmentada e de muito fácil acesso, sendo necessário o desenvolvimento de 1 2 Coordenador do Curso de Bacharelado em Sistemas de Informação do Centro Universitário Newton Paiva Coordenadora do Centro de Excelência do Ensino, Unidade Silva Lobo, do Centro Universitário Newton Paiva estruturas de avaliação, localização, seleção, organização e segurança destas informações. Aliado a estas mudanças, pode-se observar que a revolução das telecomunicações está viabilizando o acesso dos usuários às informações em qualquer lugar e a qualquer hora. Seguindo esta tendência, as organizações têm a necessidade de estarem interconectadas a diferentes tipos de sistemas, formando assim complexos ambientes heterogêneos. A administração da segurança destes ambientes heterogêneos apresenta-se como um grande desafio, na medida em que cada sistema possui características de segurança específicas. Dentre os sistemas operacionais de rede mais utilizados atualmente pode-se citar os sistemas UNIX e seus derivados (GNU/Linux, FreeBSD, etc). Quando do surgimento do Unix na década de 70, adotou-se um modelo de segurança baseado em permissões de acesso, usando como formato usuário-grupooutros. Este mesmo modelo convencional foi adotado na criação do Linux e é usado até hoje nos sistemas GNU/Linux. Estas permissões, embora simples de compreender e implementar, não são suficientemente seguras para bloquear alguns tipos de ataques ao sistema operacional e aplicativos em uso, como por exemplo o “Ataque do Dia 03” e “Buffer Overflow4”, necessitando pois de algum tipo de sistema de segurança mais sofisticado (Red, 2005), como as estabelecidas no Orange Book5. 3 Aproveitamento de falhas ainda não corrigidas para atacar o computador. Acontece quando o tamanho de um buffer ultrapassa sua capacidade máxima de armazenamento, podendo ser utilizado para execução de algum programa malicioso. 5 Conjunto de regras sistemáticas a serem utilizadas no processo de avaliação de segurança, estabelecidas pelo Governo do Estados Unidos. 4 Com o propósito de preencher esta lacuna, a National Security Agency dos Estados Unidos iniciou um projeto buscando implementar diversas modificações no kernel do Linux, acrescentando uma camada especializada neste kernel, com o objetivo de melhorar a segurança de seu modelo convencional. Assim, surgiu o projeto Security-Enhanced Linux (Segurança Aprimorada Linux), ou pontualmente conhecido como SELinux. Inicialmente restrito aos nichos acadêmicos e a algumas específicas distribuições voltadas para sistemas críticos, o SELinux está presente em grande fatia das distribuições, como Red Hat, Debian, Fedora e até mesmo na distribuição Ubuntu, mostrando ser uma implementação real, com o objetivo de incrementar o aspecto segurança em sistemas GNU/Linux. SELinux é um projeto mantido pela National Security Agency e pela comunidade SELinux como um projeto Open Source. 2 Segurança da Informação Com o aumento da complexidade no ambiente de rede, todos os ativos tornam-se alvos potenciais de possíveis ataques. Neste ambiente hostil que se tornaram os sistemas em rede, para manter a segurança da informação, é necessário um conhecimento mais profundo e específico em relação a todo o processo em que estes sistemas estão submetidos, não se limitando apenas ao emprego das ferramentas de segurança voltadas para os ativos de rede. Cada vez mais sofisticados, os invasores passaram a empregar modernas técnicas e avançadas ferramentas com potencial agressivo com a finalidade de comprometer as redes de comunicação e obterem acesso às informações. Segundo Maccarty (2005), para proteger os hosts efetivamente contra ameaças, é importante entender a natureza das ameaças e por que elas estão aumentando. Os três principais fatores que conduziram ao aumentado de ameaças são a complexidade de software, conectividade de rede e conteúdo ativo e código móvel. A figura 1 mostra o número de incidentes reportados anualmente pelo CERT.br, de 1999 a setembro de 1010. Pode-se aferir que o rápido crescimento demonstra que os ataques, de uma maneira geral, estão se tornando mais comuns e especializados. Figura 1 – Incidentes reportados pelo CERT.br no período de 1999 a março de 2010 Fonte: http://www.cert.br/stats/incidentes/ Os principais tipos de incidentes, ocorridos em 2009, são mostrados na figura 2, onde fraudes, scans e worms ocupam posição de destaque pelo percentual registrado. Figura 2 – Tipos de ataques reportados pelo CERT.br no ano de 2009 Fonte: http://www.cert.br/stats/incidentes/2009-jan-dec/tipos-ataque.html Estas possibilidades de exploração de vulnerabilidades aumentam sensivelmente a dificuldade de manutenção da infraestrutura operacional dos sistemas, tornando árduo o trabalho dos seus administradores. O número de equipamentos que necessitam ser protegidos aumenta de acordo com a demanda do crescimento computacional, porém os investimentos destinados a proteção de perímetros permanecem estanques. Assim como outros ativos que compõem os ambientes computacionais, as organizações também necessitam de sistemas adequados para lidar com novos tipos de ataques que são direcionados e exploram falhas nos equipamentos servidores. Ponto fundamental e importante é definir o que realmente se trata o processo de proteger ou tornar um sistema seguro. Para o melhor entendimento faz-se necessário observar a definição especificada pela National Security Agency (Agência de Segurança Nacional dos Estados Unidos): “Segurança de Redes é a proteção de redes e seus serviços contra modificações não autorizadas, destruição ou roubo”. 3 Controle de acesso em sistemas operacionais GNU/Linux O sistema legado de segurança do Linux se baseia em controles discretos de acesso (Discretionary Access Controls – DACs). Isso significa que o dono de um arquivo possui controle absoluto sobre o objeto que criou. Se um usuário conceder, inadvertidamente, acesso global de escrita em um arquivo, não há um processo separado para validar essa etapa. Se ainda, um agressor conseguir executar códigos arbitrários, por exemplo, no servidor web pela exploração de uma vulnerabilidade no software servidor web, o código do programa – uma shell, por exemplo – será executada com os privilégios da conta de usuário usada pelo servidor web. Se essa conta for o usuário apache, por exemplo, o agressor terá acesso a todos os arquivos que esse usuário possa acessar. Todos os mecanismos DAC possuem uma falha fundamental que é de não reconhecer a diferença entre usuários humanos e programas de computador, portanto o DAC não está fornecendo ao usuário a habilidade de usar o acesso, ao invés disso, está passando essa habilidade aos softwares. Para resolver estes problemas, como uma alternativa mais robusta, usa-se o Mandatory Access Control (MAC), que é baseado em políticas globais do sistema que não podem ser alteradas por usuários/aplicações específicos. Cada objeto é associado a uma classe de segurança, cada usuário/aplicação é associado a um passe para uma classe de segurança e regras são verificadas na leitura e escrita dos objetos pelos usuários/aplicações. O mecanismo MAC prevê que usuários individuais não têm escolha em relação às permissões de acesso que eles possuem ou que objetos podem acessar (MACCARTY, 2005). Segundo Maccarty (2005), a implementação do SELinux, com seu contexto de controle centralizado através de MAC, é possível dimensionar as políticas de segurança a nível de processo, controlando-as individualmente cada processo e seus recursos, permitindo um melhor nível de segurança. SELinux além de controlar todas as interações entre os processos, prevê mais flexibilidade para configuração por políticas, sem a necessidade de recompilar o kernel para seu funcionamento. No MAC, apenas os administradores do sistema têm controle sobre as políticas de segurança, que são definidas em nível organizacional. Este é o mecanismo de controle de acesso no qual se baseia o SELinux. 4 SELinux A segurança da informação é um conjunto de medidas que se constituem basicamente de controles e políticas de segurança visando à proteção das informações que trafegam numa rede de computadores dentro de uma organização e o controle do risco de revelação ou alteração desta mesma informação por pessoas não autorizadas. Segundo a NSA (2008), o “Security-Enhanced Linux” (SELinux) é um conjunto de patches ligados ao kernel Linux que somados a alguns utilitários têm a função de incorporar uma forte e flexível arquitetura de controle de acesso mandatório na maioria dos subsistemas do kernel. SELinux é uma implementação de controle de acesso mandatório (MAC) no kernel Linux usando o framework LSM (Linux Security Modules) (MACCARTY, 2005), que tem por objetivos de segurança primários: − Isolamento das aplicações – tornar cada aplicação única para o sistema operacional, de modo a identificá-la unicamente; − Fluxo de informações – tem por função determinar os canais permissivos e proibitivos que uma aplicação pode executar; − Confidencialidade – garante a autoria de uma aplicação; − Integridade – garante que o conteúdo das aplicações não sejam adulterados; − Autoproteção – tem por função garantir a execução de aplicações de modo seguro; − Menor privilégio - as aplicações tendem a ser executadas com o menos privilégio possível para cumprir suas obrigações; − Separação de papéis – cada aplicação tem uma tarefa a cumprir e deverá somente executar aquilo que lhe diz respeito. A arquitetura SELinux consiste nos seguintes componentes: − Código no nível de Kernel; − Biblioteca compartilhada; − Política de segurança; − Ferramentas. A Arquitetura do SELinux, apresentada na figura 3, é formada por um conjunto de módulos, onde cada um tem sua finalidade específica. Pode-se observar que quando ativo, o código no nível de kernel do SELinux monitora o sistema ativamente e se assegura que as operações requisitadas sejam autorizados, recusando algumas operações não expressamente autorizadas. Gera, também, as entradas de registro (log) do sistema para determinadas operações permitidas e negadas, consistentes com as especificações da política. Figura 3 – Arquitetura SELinux Fonte: Adaptado de Mayer, Macmillan e Caplan (2006) A maioria de componentes fora do núcleo do SELinux são ligados a uma biblioteca compartilhada do SELinux, chamada libselinux1.so. Ess biblioteca disponibiliza as funções associadas com a Interface de Programação da Aplicação de SELinux (API), que deve ser instalada e disponível ou os programas de ligação falharão. A segurança do SELinux baseia suas decisões em um arquivo de políticas que pode ser configurado pelo administrador. O arquivo da política fornece uma grande flexibilidade, permitindo políticas de segurança personalizadas, instrumento dos administradores de SELinux, que servem a necessidades locais. Quando um sistema SELinux inicializa, carrega a política de segurança local em um arquivo binário da política, que reside tipicamente em /etc/security/selinux. O arquivo binário da política do SELinux é gerado por um makefile, que reside no diretório fonte do SELinux, tipicamente /etc/security/selinux/src/policy ou /etc/selinux. O makefile concatena uma variedade de arquivos fonte, o resultado é armazenado em no arquivo policy.conf, que reside no diretório de fonte de SELinux. A compilação final é feita através do arquivo binário contido em policy.conf, que então resulta nas políticas do SELinux dentro do kernel do Linux. SELinux inclui três categorias principais de ferramentas para sua administração: − Comandos especiais para administrar e usar o SELinux; − Versões modificadas dos comandos e programas padrões do Linux; − Ferramentas suplementares de SELinux, usadas para finalidades tais como a análise e o desenvolvimento de política, como: Apol, SEAudit, SECmds, SEPCuT e SEUser, todas aplicações com interfaces gráficas. 5 Conclusões Os problemas relacionados com a segurança da informação requerem uma abordagem proativa, pois ocasionalmente são inevitáveis de ocorrer. A abordagem primaria dos sistemas Unix/Linux, baseadas em DAC, mostrase insuficiente para atender aos requisitos corporativos de segurança. Decorrente destas inseguranças oriundas do modelo DAC, surgiram pesquisas e definições que deságuam no modelo MAC de segurança e sua implementação em sistemas computacionais. Sendo assim, um sistema utilizando MAC, no caso SELinux, garante que o usuário não pode mudar os atributos de segurança indiscriminadamente e que o controle total das regras de acesso do MAC estão nas mãos do administrador do sistema. Todos os aplicativos de usuário, programas e scripts devem trabalhar dentro de limites das regras de acesso definidas pelos módulos de política de segurança escolhidos. Usando o SELinux, o dever do administrador é selecionar cautelosamente os módulos de políticas de segurança corretos. 6 Referências Bibliográficas MACCARTY, B. SELinux: NSA’s Open Source Security Enhanced Linux. Sebastopol: O’Reilly, 2005. MAYER, F.; MACMILLAN, K; CAPLAN, D. SELinux by Example: Using Security Enhanced Linux. United States: Prentice Hall, 2006. RED Hat. SELinux Guide. 2005. Disponível em: <http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/selinux-guide/>. Acesso em: 19 jun. 2008. SMALLEY, S. Configuring the SELinux Policy. 2005. Disponível em: <http://www.nsa.gov/selinux/papers/policy2.pdf>. Acesso em: 20 jun. 2008a. SMALLEY, S.; VANCE, C.; SALAMON, W. Implementing SELinux as a Linux Security Module. 2006. Disponível em: <http://www.nsa.gov/selinux/papers/module.pdf>. Acesso em: 20 jun. 2008c. THOMPSON, Kerry. The Unofficial SELinux FAQ. . Disponível <http://www.crypt.gen.nz/selinux/faq.html>. Acesso em 24 de abr. 2009. em: