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:
Download

como tornar um servidor mais seguro