Conhecendo (um pouco mais) sobre SELINUX

O SELinux (Security-Enhanced Linux) é uma implementação do Controle de Acesso Obrigatório (MAC) para o sistema operacional Linux.

Criado originalmente pela Agência de Segurança Nacional (NSA) dos Estados Unidos, o SELinux foi projetado para fornecer um nível adicional de segurança aos sistemas Linux, limitando as ações que os processos podem realizar e os recursos aos quais podem acessar.

Ele funciona atribuindo rótulos (labels) a todos os processos e objetos do sistema (arquivos, diretórios, portas de rede, etc.). Esses rótulos definem o contexto de segurança de cada entidade. A política de segurança do SELinux determina quais operações são permitidas entre entidades com diferentes rótulos.

O objetivo principal é aumentar a segurança do sistema Linux, implementando políticas de segurança rigorosas que impedem a um processo com privilégios limitados obter acesso a privilégios mais elevados, limitar as ações que um malware pode realizar, dificultando sua propagação e capacidade de causar danos e proteger dados confidenciais.

Principais conceitos do SELinux: Domínios

Eles representam a identidade de segurança de um processo em execução. É como se cada processo estivesse em uma “caixa de areia” virtual, com permissões específicas e restritas. Essa segmentação é fundamental para garantir que um processo malicioso não possa comprometer todo o sistema.

Os domínios impõem restrições sobre o que um processo pode fazer. Por exemplo, um processo que está executando como um serviço web pode ter permissão para ler e escrever em determinados diretórios, mas não pode executar comandos como “rm -rf /”.

Eles podem ter uma hierarquia, onde um domínio pode ter privilégios maiores que outro. Isso permite criar uma estrutura de segurança mais granular e flexível.

Principais conceitos do SELinux: Tipos

São rótulos que definem a natureza e o propósito dos objetos (arquivos, diretórios, portas de rede, dispositivos de hardware, processos etc). Ao atribuir um tipo a um objeto, o SELinux estabelece um conjunto de regras que determinam como esse objeto pode ser acessado e utilizado.

Os tipos servem para categorizar os objetos de acordo com sua função no sistema, impõem restrições sobre as operações que podem ser realizadas em um objeto e podem ter uma hierarquia, com um tipo mais restritivo que outro.

Ajudam a segmentar o sistema em diferentes partes lógicas, cada uma com suas próprias regras de acesso, criando políticas de segurança personalizadas para diferentes tipos de objetos. Ao atribuir tipos específicos a diferentes tipos de dados, o SELinux pode garantir que os dados sensíveis sejam protegidos de acessos não autorizados.

Principais conceitos do SELinux: Transições

Representam a mudança de um contexto de segurança para outro, definido por um conjunto de atributos como usuário, papel e tipo. As transições permitem que um processo altere seu contexto de segurança temporariamente para realizar determinadas ações, como acessar um recurso que normalmente não teria permissão.

As transições permitem criar políticas de segurança mais flexíveis, permitindo que processos com diferentes níveis de privilégio interajam de forma segura. Em muitos cenários, um processo pode precisar acessar recursos com diferentes níveis de segurança durante seu ciclo de vida. As transições permitem que isso seja feito de forma segura. As transições permitem que as políticas de segurança sejam escaladas para atender a requisitos mais complexos.

As regras de transição definem quais transições são permitidas entre diferentes contextos de segurança. Quando um processo tenta realizar uma transição, o SELinux verifica se a transição está permitida pelas regras de política. Se a transição não for permitida, ela é negada.

Benefícios do SELinux

  • Segurança aprimorada - protege contra uma ampla gama de ameaças, incluindo ataques de malware e exploits.

  • Flexibilidade - permite a criação de políticas de segurança personalizadas para atender às necessidades específicas de cada sistema.

  • Conformidade - ajuda as organizações a cumprir requisitos de conformidade, como os padrões PCI DSS e HIPAA.

Aqui também nem tudo são flores

O Selinux padece dos mesmos problemas do Apparmor, ou seja, a configuração e o gerenciamento são complexos. Os conceitos como domínios, tipos e transições que podem ser abstratos e intimidantes para quem não está familiarizado com segurança da informação.

A criação de políticas personalizadas exige um entendimento profundo das necessidades de segurança do sistema e como traduzi-las em regras do SELinux. Sua configuração e o gerenciamento envolvem o uso de ferramentas e comandos específicos, que exigem treinamento.

As interações entre diferentes componentes do sistema e as políticas do SELinux podem ser complexas e difíceis de rastrear. A depuração de problemas relacionados pode ser desafiadora, pois os erros podem ser difíceis de identificar e isolar.

Fontes: links no texto

Já agora o Apparmor?

Segundo minha experiência – sem os tais “conhecimentos profundos”:

  • O Fedora instalou e ativou SELinux
  • O openSUSE instalou mas não ativou
  • As outras 10 distros não instalaram

O que pude verificar em Julho 2022:

2022-07-08 --- SELinux


01 - openSUSE

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# getenforce
Disabled

# sestatus
SELinux status:                 disabled


02 - Arch

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# getenforce
bash: getenforce: command not found

# sestatus
bash: sestatus: command not found


03 - Debian testing

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# getenforce
bash: getenforce: command not found

# sestatus
bash: sestatus: command not found


04 - Fedora

$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

# getenforce
Enforcing

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33


05 - KDE Neon

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

$ sestatus

Command 'sestatus' not found, but can be installed with:
sudo apt install policycoreutils

$ getenforce

Command 'getenforce' not found, but can be installed with:
sudo apt install selinux-utils


06 - PCLinuxOS

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


07 - Mageia

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


08 - Slackware

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


09 - Void

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


10 - Manjaro

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


11 - Redcore

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
bash: sestatus: command not found

# getenforce
bash: getenforce: command not found


12 - MX Linux

$ id -Z
id: --context (-Z) works only on an SELinux-enabled kernel

# sestatus
Command 'sestatus' not found, but can be installed with:
apt install policycoreutils

# getenforce
Command 'getenforce' not found, but can be installed with:
apt install selinux-utils