SELinux Do conceito à prática Rodrigo César Coelho de Oliveira Assis Programa de Pós-Graduação em Segurança da Informação – Universidade Estácio de Sá João Pessoa, Brasil [email protected] Resumo—Com o aumento da “facilidade” de possíveis ataques potenciais nos sistemas, foi necessário para manter a segurança da informação, o 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. Baseado no aumento da segurança do sistema contra ameaças externas, tem-se uma medida de segurança que s constitui basicamente de controles e políticas, que é o caso do SELinux, visando a proteção das informações e obtendo controle do fluxo de dados de qualquer alteração desta informação por pessoas não autorizadas. Palavras-chave—segurança, redes, servidores, software Livre. Abstract— With increasing complexity in the network environment, followed by the "ease" of possible potential attacks on systems, it was necessary to maintain the security of information, deeper insight and specific in relation to the process in which these systems are submitted, not limited only to the use of security tools focused on network assets. Based on increased system security against external threats, there is a safety measure that's basically constitutes controls and policies, which is the case of SELinux, aimed at protecting information and getting data flow control any changes in this information by unauthorized persons. Keywords—security, networks, servers, software open source I. INTRODUÇÃO Este estudo dirigido foi desenvolvido para fins de conclusão da cadeira de Segurança em Linux, tendo como objetivo dar uma visão sobre o SELinux, relatando seus conceitos, objetivos, características, benefícios, sua arquitetura e seu funcionamento, seguido de uma abordagem prática em um servidor virtual para realizar testes comparando o Centos 6.5 com o SELinux habilitado e desabilitado referente à utilização da ferramenta GLPI. II. SELINUX A. Conceitos Security-Enhanced Linux (SELinux) é conhecido por ser um framework que visa reforçar a segurança do sistema aplicando um conjunto de diretivas rígidas de segurança, ou seja, é considerado uma “ferramenta” padrão incorporada no kernel do Linux, com a finalidade de ser bem útil para a proteção do sistema. Segundo Referência [1] 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 B. Objetivos O SELinux tem como objetivo principal mitigar ainda mais os riscos de ataques e vulnerabilidades do sistema operacional, pois possui uma política de segurança mais rígida. Esse framework não irá substituir os mecanismos de segurança e sim integrar-se a eles aprimorando-os. Alguns outros objetivos vistos foi o isolamento das aplicações e o controle do fluxo de informações, provendo uma política de segurança sobre todos os processos e objetos do sistema baseando suas decisões em contextos de segurança no qual possui informações relevantes à segurança do sistema. C. Características O SELinux tem como uma das principais características bloquear tudo por padrão. Referência [5] cita que o kernel consulta o SELinux antes de cada chamada do sistema para saber se o processo está autorizado a fazer a operação dada. Com isso, a ideia desse framework é restringir as permissões, de forma que cada serviço ou aplicativo tenha permissão para realizar apenas as tarefas a que é destinado, contando com um dos princípios básicos da segurança da informação que é a confidencialidade. Isso impede que serviços vulneráveis sejam usados para obter privilégios adicionais, como é comum em ataques. D. DAC X MAC Antes de ser iniciado a sessão sobre a arquitetura e funcionamento do SELinux, é necessário citar dois pontos principais, o DAC (Discretionary Access Control) e o MAC (Mandatory Access Control). Referência [6] cita que o MAC possui vantagens de segurança em relação ao DAC, pois permite que sejam definidas permissões de como os processos irão interagir com os arquivos, portas, dispositivos e outros processos, no qual essa interação é feita através de uma política de segurança definida pelo administrador sobre todos os processos e objetos. Referência [7] informa que enquanto o DAC atribui confiança completa para os usuários e nele é impossível controlar o fluxo de dados, o MAC atribui somente a confiança no administrador da política, tornando assim a segurança do sistema mais rígida, e possibilita o controle do fluxo de dados. O SELinux é implementado em cima da arquitetura MAC provendo maior segurança a arquivos, diretórios, processos, entre outros objetos, através de suas políticas. E. Arquitetura e Funcionamento Atualmente pode-se encontrar muitos problemas ao tentar criar um servidor com o SELinux habilitado, ou seja, quando esse framework está ativo acaba afetando o sistema, forçando a execução de ações configuradas (políticas definidas, conforme citado anteriormente no item D). Muitos sysadmin (System Administrator), acabam desabilitando o SELinux apenas pelo simples fato de não conhecerem bem a ferramenta. Referência [4] apresenta na Fig. 1, a arquitetura do SELinux, no qual esse módulo carrega as políticas de segurança da Policy Database (base de dados de políticas) assim que o sistema operativo inicia. Sempre que existe um pedido de ação (por exemplo, a leitura, escrita, etc.) sobre um objeto (um ficheiro, um socket, entre outros) a operação é interceptada no kernel pelo SELinux. Se o DAC negar a ação, então o SELinux não executa nenhuma verificação, sendo esta ação negada. No caso do DAC permitir a ação, o SELinux verifica as suas políticas negando ou permitindo a execução de determinada ação em função destas. Estas decisões/regras/políticas são armazenadas em cache, designada de Access Vector Cache (AVC). Por estas regras se encontrarem numa cache, pode fazer com que o tempo de verificação destas diminua, permitindo aumentar a segurança do sistema sem afetar o seu desempenho. Em um breve resumo significa que, quando uma operação de um processo está sendo executado, esta é interceptada no kernel pelo SELinux, conforme dito anteriormente, que se encarregará de verificar se existe uma liberação para aquele tipo de operação. No caso se essa operação estiver sido liberada nas políticas, o processo continua a executar sua rotina, caso contrário a operação é bloqueada e o processo recebe uma resposta de erro. Referência [8] cita como exemplo, o comprometimento de uma conta de sistema que é associada ao serviço HTTP, no qual o SELinux através de suas políticas definidas, irá limitar este comprometimento apenas ao serviço HTTP, impossibilitando o envolvimento de outros serviços, ou até mesmo, do próprio sistema operacional. Fig. 1: Arquitetura do SELinux (Modo de Funcionamento). Referência [4] F. Benefícios/Vantagens O real potencial do SELinux está na possibilidade de definir novas políticas, protegendo os serviços mais importantes e fazendo com que ele se molde à configuração usada. Outros benefícios são as políticas de segurança que são definidas apenas pelo administrador do sistema. Também conta com a redução da chance de uma vulnerabilidade escalar privilégios, permitindo realizar uma espécie de isolamento dos serviços/processos. Outra vantagem é o controle do fluxo de dados, já comentado anteriormente, e também a fortificação da confidencialidade e integridade, protegendo processos de entradas falsas. G. Contextos de Segurança O SELinux conta com seu principal aliado que são seus contextos de segurança. Referência [5] cita que os direitos de um processo dependem desse contexto de segurança, no qual Referência [8] explica que um contexto é um valor de dado assumido pelos objetos de uma classe. Ainda complementa que os contextos da arquitetura DAC são: Tipo, Dono, Grupo e Outros, enquanto os contextos da arquitetura MAC mudam de características, conforme: Usuário, Papel, Tipo e Nível. Fig. 2: Contexto de Segurança. Próprio autor. Texto Referência [8] Conforme pode ser visto na Fig. 2, Referência [5] cita em um breve resumo que o contexto é definido pela identidade do usuário que iniciou o processo, o papel e o domínio que o usuário realiza naquele momento, afirmando que os direitos realmente dependem do domínio, porém as transições entre os domínios são controladas pelos papéis. Por fim, as transições possíveis entre os papéis dependem da identidade. III. TRABALHOS FUTUROS O trabalho futuro consiste em elaborar uma parte prática desenvolvida em um ambiente virtual, para analisar e comparar o comportamento do SELinux habilitado e desativado, em um servidor de testes, para ser implementado uma ferramenta de gerenciamento de chamados conhecida como GLPI. Nessa abordagem, será citado os modos de operações do SELinux, juntamente com suas políticas. Junto aos testes, será realizado os print’s de tela para confirmação da demonstração e das configurações realizadas no servidor virtual. IV. CONCLUSÃO Conclui-se que, além do SELinux ser um software livre e já implantado no kernel do Linux, é também uma poderosa ferramenta capaz de auxiliar a segurança do sistema operacional, através de suas políticas definidas no seu contexto de segurança, sendo assim viável para uso em servidores com aplicações comuns, contando com uma segurança pró-ativa. No entanto, seu uso em redes corporativas ou em computadores domésticos não é tão simples, pois uma boa política de segurança, desde sua criação, refinamento e manutenção, requer muito tempo e esforço, no qual o dever do administrador é selecionar cuidadosamente os módulos de políticas de segurança corretos. REFERÊNCIAS [1] NSA, “Security-Enhanced Linux”, Disponível em: https://www.nsa.gov/research/selinux/ . Acesso em: 06 de nov. 2015. [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] R. Benites Gil, “Definição e entendimento básico do SELinux”. Disponível em: http://segurancadeti.com.br/selinux-introducao/ . Acesso em: 07 de nov. 2015. R. Cavalieri, “Servidor CentOS 7 – Como desativar o SELinux”. Disponível em: http://www.tecdicas.com/servidor-centos-7-desativarselinux/ . Acesso em: 07 de nov. 2015. A. Leite , and N. Cardoso, “SELinux – Segurança em Sistemas Informáticos”. Disponível em: http://web.fe.up.pt/~jmcruz/ssi/ssi.1011/ trabs-als/final/G05.T10-selinux-rel.final.pdf .Acesso em: 07 de nov. 2015. Debian Handbook, “O Manual do Administrador Debia - Introdução ao SELinux”. Disponível em: https://debian-handbook.info/browse/ptBR/stable/sect.selinux.html. Acesso em: 08 de nov. 2015. Wikipédia, “SELinux” , Disponível em: https://pt.wikipedia.org/wiki /SELinux. Acesso em: 08 de nov. 2015. J. Zucco, “Entendendo o SELinux – Security Enhanced Linux”, Disponível em: http://jczucco.googlepages.com/selinux.html. Acesso em: 08 de nov. 2015. B. R. da Silva , “SELinux – Segurança em Servidores GNU/Linux”, Disponível em: http://www.vivaolinux.com.br/artigo/SELinuxSeguranca-em-Servidores-GNU-Linux. Acesso em: 10 de nov. 2015. C. Eduardo Morimoto, “Linux, Guia Prático”. Disponível em: http://www.hardware.com.br/livros/linux/firewall-selinux.html . Acesso em: 07 de nov. 2015. E. Ivashko, “Linux Seguro: Parte 1. SELinux – história de seu desenvolvimento, arquitetura e princípios operacionais.”, Disponível em: http://www.ibm.com/developerworks/br/library/l-secure-linux-ru/ . . Acesso em: 12 de nov. 2015. A. S. de O. Toledo, and F. A. Ferreira, “SELINUX: Como tornar um servidor mais seguro”. Disponível em: http://blog.newtonpaiva.br/pos/wp-content/uploads/2013/02/E3-SI21.pdf . Acesso em: 13 de nov. 2015. T. Scherf, “Controle de acesso obrigatório com SELinux”, Disponível em:http://www.linuxnewmedia.com.br/images/uploads/pdf_aberto/LM4 5_pag66-73.pdf . Acessos em: 14 de nov. 2015. A. Emanuel, “SELinux na prática”, Disponível em: http://www.vivaolinux.com.br/artigo/SELinux-na-pratica?pagina=1 . Aceso em: 14 de nov. 2015. H. A. M. Cardozo, “Reforçando a segurança do Linux com SELinux”, Disponível em: http://www.ppgia.pucpr.br/~jamhour/RSS/TCCRSS09A/Heitor%20Aug usto%20Murari%20Cardozo%20-%20Artigo.pdf . Acesso em: 15 de nov. 2015.