Introdução ao SELinux

selinux

Este artigo é uma tradução livre, do original publicado no site Infosec Institute Resources.

Uma das tarefas de qualquer sistema operacional é prover programas que ampliem significantemente a segurança de seu ambiente. Vários destes programas  foram criados; alguns são melhores que outros. Como isso se dá em termos de Linux? Claro que aqui nos temos muito mais opções quando se trata deste tipo de software, mas alguns valem a pena ser recomendados. Algumas pessoas já sabem o que quero dizer: SELinux. Por que escolher esta solução? Por que o acho tão diferente de outros softwares deste tipo? E uma última pergunta: Quem deveria utilizá-lo?

Esta série de artigos irá mostrar o que é o SELinux e o que oferece a cada tipo de usuário(a). Eu espero que encontre as respostas para todas as suas perguntas. Apesar de o SELinux utilizar os padrões básicos, ele é realmente revolucionário. Este sistema, como o próprio nome sugere é Security Enhanced Linux ( Linux de Segurança Reforçada )! Então eu o(a) convido a ler esta série de artigos e aprender a respeito desta ferramenta.

O que é o SELinux e de onde ele surgiu?

Você quer uma definição oficial? Tudo bem, sem problema. SELinux é um sistema com MAC ou Mandatory Access Control ( Controle de Acesso Mandatório ). Ele implementa uma política de segurança baseada em RBAC, Role-Based Access Control ( Controle de Acesso Baseado em Funções ). Esta política é implementada pelo DTAC, que é Dynamic Typed Access Control ( Controle de Acesso Dinamicamente Digitado ), que também é traduzido como o nome de domínio do Sistema de Controle de Acesso. Verdade, parece um pouco desorientador. Mas na prática, é muito simples. É só a teoria que parece ser muito complicada.

E agora é o momento para algo ainda mais simples: um pouquinho da história do SELinux. Todo o trabalho realizado no SELinux é mantido pela NSA ou Agência de Segurança Nacional dos Estados Unidos. A verba vai para a equipe que trabalha no desenvolvimento do SELinux, a Secure Computing Corp. É importante notar que a companhia também possui todas as patentes do software. A ideia do SELinux, um produto que hoje todos conhecemos, não é realmente nova; já tem vinte anos de idade. Em 1992, uma nova ideia para segurança resultou em um projeto chamado Distributed Trusted Match. O projeto desenvolveu algumas soluções inovadoras, que vieram a fazer parte de um sistema operacional chamado Fluke. O Fluke evoluiu para o Flux, que levou ao desenvolvimento da Arquitetura Flask. A arquitetura Flask foi então integrada ao kernel Linux, e todo o novo projeto criado foi então chamado SELinux. Como isto aconteceu?

O SELinux foi o primeiro projeto de segurança na história dos cientistas da NSA. Eles foram os primeiros a notar que os principais sistemas operacionais uma segurança crítica necessária para reforçar o controle de acesso e separação da informação interna nos requerimentos de consistência. O resultado disso é que a maioria dos mecanismos de segurança são vulneráveis a manipulação e tratamento, o que envolve uma cascata de consequências. A escolha do Linux como sistema para o projeto de segurança da NSA não foi acidental. Ele foi escolhido por duas característica principais:

– Popularidade crescente;

– Ambiente de desenvolvimento aberto.

A intenção da NSA era apresentar uma funcionalidade que pudesse ter sucesso entre os principais sistemas operacionais e ao mesmo tempo pudesse ter a chance de contribuir para a melhoria na segurança dos sistemas operacionais comumente utilizados. O projeto que foi registrado como SELinux é resultado de vários projetos anteriores da NSA.

O trabalho dos cientistas da NSA ( significando os pesquisadores patrocinados pela NSA ) não tinha a intenção de resolver problemas existentes de segurança e o SELinux não era de forma alguma uma tentativa de melhorar a segurança no Linux. As mudanças no Linux somente cobriam a introdução de novos mecanismos.

O que está escondido em meio ao SELinux?

De fato, três elementos deste sistema deveriam atrair a nossa atenção. O primeiro é o kernel. Primeiramente, o SELinux tentou vários tipos de kernel, mas hoje a a estrutura completa do SELinux usa o kernel Linux. Ele é, é claro, levemente modificado e chamado de LSM, Linux Security Modules ( Módulos de Segurança do Linux ). Esta infraestrutura prove todas as interfaces que permitem a você o controle total do acesso a todos os objetos do sistema quando estes são inicializados por ações dos(as) usuários(as). Que são, por exemplo, abrir um arquivo, criar uma nova pasta, ou vinculação de portas. Como ele funciona? Bem, o SELinux simplesmente conecta à interface e força o uso de sua própria política de segurança. Do ponto de vista do administrador que instala o SELinux, este sistema é simplesmente um patch para o kernel.

O segundo elemento que eu devo mencionar é que progranas chave são modificados. Como isso funciona na prática? Na maioria dos casos, o SELinux permite aos programas um pouquinho de liberdade. Eles não precisam saber que o SELinux não é só Linux. Mas em qualquer sistema operacional existem alguns programas no sistema em que segurança é crítica e que devem sempre ser estendidos para dar suporte ao SELinux. Estes programas são principalmente o ssh, ls, ps, xdm ou login. E mais uma vez há uma razão para a escolha do Linux. Durante a instalação ou download, versões completamente modificadas destes programas são requeridas ou patches de segurança devem ser aplicados ao código fonte destes programas para garantir a segurança do sistema.

A terceira e última coisa que distingue o SELinux são suas regras, ou políticas. Qual é o papel delas? Elas definem direitos de acesso, o direito de acompanhar atividades do sistema, e o comportamento do sistema SELinux. Embora eu as tenha mencionado em terceiro lugar, elas são as mais importantes. Estas regras determinam a ação efetiva do sistema. Uma grande parte destes artigos serão dedicadas a como escrever estas regras e o modo como elas são construídas no sistema. A verdade é que administradores(as) de sistemas nunca, sob nenhuma circunstância, deveriam ser requeridos a escrever suas próprias regras para as políticas, a não ser que sejam requisitos customizados.

Entretanto, todo(a) administrador(a) de sistema deveria ter o conhecimento que lhe permitiria modificar as regras para adaptá-las às necessidades de seu sistema. Como complemento a saber algo e ser capaz de usar esse conhecimento, você precisa entender todas as regras já existentes no sistema.

Como realmente entender a maldita coisa chamada MAC?

Como mencionado anteriormente, o sistema é um método para reforçar o MAC ( Controle de Acesso Mandatório ) SELinux. Então vejamos exatamente o que significa para nós administradores. Bem, eu consegui descobrir o princípio mais importante, aplicável a todos os sistemas que utilizam MAC. Na minha opinião, deveria ser isto: nenhum dos(as) usuários(as) tem o direito de decidir de forma alguma a segurança e o direito de acesso a objetos do sistema. Todos esses direitos e segurança deveriam ser sempre definidas de acordo com a política de segurança do sistema. No caso do SELinux, elas deveriam ser sempre ser refletidas nos registros de políticas.

Políticas MAC sozinhas são muito frequentemente confundidas com ACL ( Access Control List ou Lista de Controle de Acesso ). Os fatos refutam esse mito muito rapidamente. De fato, ACLs não conduzem uma política MAC. Estas listas tem também outra desvantagem. Na prática, elas são muito complicadas em termos de configuração e manutenção corretas. Você também pode dizer que elas são diferentes em termos de ação. ACLs sempre especificam casos de uso individual, enquanto MAC sempre configuram princípios gerais.

De fato, o suporte a ACL foi retirado desde a versão 2.4.x do kernel Linux. Por que isso aconteceu? Porque os(as) desenvolvedores(as) do kernel Linux decidiram que ACLs não eram uma forma realmente boa de se controlar os poderes e ações do(a) usuário(a) no sistema operacional. Apesar disso, essas listas são utilizadas às vezes. Por exemplo, se temos um servidor Samba, elas são frequentemente utilizadas, porque permitem que você configure permissões para todos os arquivos do cliente Microsoft Windows.

Outro atalho de peso, ou DTAC

Como mencionei anteriormente, DTAC é o Dynamic Typed Access Control ( Controle de Acesso Dinamicamente Digitado ), mas também é traduzido como o nome de domínio do Sistema de Controle de Acesso. Mas não é disso que essa seção trata. Vamos focar nas características reais do DTAC. Podemos começar?

No caso do DTAC, cada um dos objetos de um sistema, seja ele um diretório, porta, ou qualquer dispositivo, tem o seu tipo único. O que isso significa na prática? Algumas regras top-down são sempre forçadas em cada tipo de objeto. Estas regras não dependem de forma alguma de decisões do(a) usuário(a), mas o(a) administrador(a) de sistemas cria e controle as políticas. Isso significa que em qualquer sistema que utilize um DTAC, você pode criarqualquer número de políticas, mil ou um milhão, e o sistema está sempre preparado.

Como complemento, o sistema possui conjuntos inteiros de regras sobre como agir em todos os objetos de cada tipo. Retornaremos a este assunto posteriormente. De fato, no caso do DTAC, o controle e teste de validação em todas as regras do sistema é muito mais fácil que em outros casos. Como curiosidade, e devo mencionar que a IBM desenvolveu uma ferramenta que tem como tarefa principal automatizar a checagem da consistência e precisão das políticas de segurança DTAC.

Outro suporte de peso, RBAC

Como mencionei anteriormente, RBAC significa Role Based Access Control. Podemos entender que este é um sistema de controle de acesso baseado em funções de usuários(as) no sistema. Este termo não é utilizado com frequência. Onde podemos encontrá-lo? Bem, qualquer sistema Unix ou Linux padrão possui controle de acesso baseado em funções. E a verdade é que se você olhar de perto para um sistema Unix, as funções estão sempre divididas. Há sempre certos tipos de usuários(as) no sistema que são nomeados a exercer um uma gama limitada de atividades. Isso significa que cada um deles executa uma função dentro do sistema Unix.

Existe outro elemento que qualifica um sistema Unix padrão a se tornar um sistema com RBAC embutido. Há uma coisa chamada SUID. Como todos(as) vocês devem saber, o SUID pode mudar as funções de um(a) usuário(a) e as ações que podem ser executadas por ele(a).

Como isso funciona com o SELinux? Bem, é realmente um sistema SELinux RBAC com regras embutidas que é implementado com o DTAC. O sistema SELinux também estende o que é chamada de filosofia do SUID. Assim, também pode estender o entendimento a respeito de funções de usuários no sistema. Para resumir rapidamente: Um sistema SELinux é desenhado para permitir de uma forma muito mais flexível, que também é mais preciso e melhor adaptável às suas necessidades, a identificar e a ajudar na implementação de funções em um sistema.

Resumo

Esta foi uma breve introdução ao SELinux. O artigo descreve as bases nas quais o mecanismo é usado diariamente. Ainda não faz nada de especial, mas o desejo de escrever um resumo sobre o que ele é me cativou. Em nosso website, com SELinux nós capturamos 50 correções críticas de segurança em um pequeno espaço de tempo, menos de sete dias. Outra vantagem decisiva é a sua facilidade de uso. Como um administrador de sistemas Linux, eu nunca encontrei uma ferramenta que usasse regras tão simples, e ainda descrevesse tanto. Mesmo assim muito poucos(as) administradores(as) de sistemas conhecem o sistema SELinux. Meu próximo artigo desta série irá alguns passos além.