O artigo anterior era sobre o SELinux. Minha impressão deste sistema de segurança é dupla. Por um lado, nunca há muita segurança em TI e o SELinux contém tudo o que você precisa para proteger o sistema operacional e os aplicativos contra acesso não autorizado. Por outro lado, parece muito complicado e desnecessariamente complexo, o que torna seu uso impraticável. Mais de uma ou duas vezes nos manuais do usuário para instalação de software comercial, tenho visto recomendações para executar setenforce 0 antes de iniciar a instalação.
Uma solução que tem metade da funcionalidade do SELinux, mas é muito mais fácil de configurar e operar, pode ser uma proteção mais confiável, apenas porque não é assustador mergulhar em todos esses domínios, políticas e funções. Isso é exatamente o que o AppArmor oferece.
Como o SELinux, o AppArmor é uma implementação Mandatory Access Control (MAC) baseada na arquitetura Linux Security Modules (LSM). O modelo de segurança de Apparmor é vincular atributos de controle de acesso não a usuários, mas a programas. O AppArmor fornece isolamento por meio de perfis carregados no kernel, geralmente na inicialização.
O AppArmor difere de outras implementações do Linux MAC porque é baseado em caminhos e também permite combinar perfis de aplicação e alerta. Além disso, o AppArmor usa anexos de arquivo para facilitar o desenvolvimento e tem uma barreira de entrada muito mais superficial do que o próprio SELinux.
DAC e MAC
A arquitetura de controle de acesso discricionário (DAC) restringe o acesso a recursos críticos com base nos atributos dos assuntos ou do grupo ao qual pertencem. Esses atributos determinam os direitos de acesso aos recursos do sistema de arquivos. Cada administrador está bem ciente da importância dos privilégios de leitura (leitura), gravação (gravação) e execução ( execução ).
Esses atributos se aplicam a três categorias de usuários: usuário (proprietário), grupo (grupo), outros (outros). A categoria do proprietário refere-se a um único usuário do sistema operacional, enquanto um grupo pode conter muitos usuários do sistema operacional. A categoria restante inclui aqueles usuários que não pertencem às duas primeiras.
O modelo DAC dá ao proprietário do recurso o direito de determinar o tipo de acesso para as categorias de usuários especificadas. Essa diferenciação de acesso é adequada para proteger contra ações não intencionais do usuário e permite que você responda às seguintes perguntas:
- Quais recursos FS estão disponíveis para um determinado usuário do sistema operacional para leitura, gravação e execução?
- Quais recursos FS estão disponíveis para este grupo para leitura, escrita e execução?
- Quais recursos FS estão disponíveis para outros usuários para leitura, escrita e execução?
- Qual usuário tem direitos suficientes para executar este processo?
Figura: 1 Sistemas de segurança DAC e MAC.
O sistema de segurança Mandatory Access Control (MAC) assume controle centralizado sobre as regras de política de acesso, em que os usuários comuns não têm a oportunidade de fazer quaisquer alterações nelas. O designer de política determina quais programas ou processos podem executar certas ações nos recursos do sistema. O MAC se concentra mais em programas do que em usuários e resolve o problema de delimitar o acesso do processo aos recursos do sistema operacional.
Em essência, o projeto do MAC tenta replicar o delineamento dos privilégios de acesso à documentação no mundo físico. Se um determinado funcionário tiver o direito de ler documentos marcados como "ultrassecreto", ele também terá acesso aos documentos padrão confidenciais e internos. O contrário, entretanto, não é verdade. O mesmo é verdadeiro no contexto dos privilégios de acesso dos processos do sistema operacional na arquitetura MAC. Portanto, se um programa pode ler o arquivo / etc / sudoers, ele também tem acesso a / etc / hosts, mas o inverso também não é verdadeiro.
Instalando e configurando o AppArmor
Os elementos básicos do AppArmor são pré-instalados no Ubuntu Server, já as ferramentas de gerenciamento e o conjunto de perfis de aplicativos devem ser instalados separadamente.
[admin@server ~]$ sudo aptitude install apparmor-utils apparmor-profiles
Verificar o status antes de definir.
[admin@server ~]$ sudo apparmor_status
apparmor module is loaded.
31 profiles are loaded.
31 profiles are in enforce mode.
/snap/snapd/10492/usr/lib/snapd/snap-confine
/snap/snapd/10492/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
As últimas linhas indicam os modos de aplicação e reclamação. O que são esses regimes em resumo?
- No modo Aplicar , o kernel impõe as regras escritas no arquivo de perfil. Violações não são permitidas e a entrada correspondente vai para os logs.
- No modo Reclamar , o AppArmor registra apenas violações, sem bloquear as próprias ações.
O conteúdo do pacote apparmor-profiles está localizado na pasta
/usr/share/apparmor/extra-profiles/
, existem mais de cem perfis prontos lá.
[admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |head total 484 -rw-r--r-- 1 root system 1724 May 19 2020 README drwxr-xr-x 3 root system 4096 Dec 8 10:14 abstractions/ -rw-r--r-- 1 root system 1319 May 19 2020 bin.netstat -rw-r--r-- 1 root system 1815 May 19 2020 etc.cron.daily.logrotate -rw-r--r-- 1 root system 948 May 19 2020 etc.cron.daily.slocate.cron -rw-r--r-- 1 root system 722 May 19 2020 etc.cron.daily.tmpwatch -rw-r--r-- 1 root system 2623 May 19 2020 sbin.dhclient [admin@server ~]$ ll /usr/share/apparmor/extra-profiles/ |wc -l 118
Antes que o perfil se torne ativo, você precisa transferi-lo da pasta
/usr/share/apparmor/extra-profiles/
para
/etc/apparmor.d/
. Agora ele pode ser estudado e, se desejado, alterado. Vamos pegar algo mais simples, por exemplo
/etc/apparmor.d/bin.ping
.
...
#include <tunables/global>
profile ping /{usr/,}bin/{,iputils-}ping flags=(complain) {
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability net_raw,
capability setuid,
network inet raw,
network inet6 raw,
/{,usr/}bin/{,iputils-}ping mixr,
/etc/modules.conf r,
# Site-specific additions and overrides. See local/README for details.
#include <local/bin.ping>
}
Tudo está bem claro, exceto para os sinalizadores do mixr. Descrição dos significados das bandeiras abaixo:
- r - ler;
- w - registro
- a - escrita incremental ao final do arquivo, a partir do anexo em inglês;
- k - arquivos de bloqueio;
- l - criar links simbólicos para arquivos executáveis;
- m - carregar arquivos executáveis na memória;
- cx - transição para o perfil de nível inferior durante a execução;
- Cx - transição para o perfil de nível inferior quando executado com variáveis de ambiente de limpeza;
- ix - herança de execução;
- px - requer a definição de um perfil de segurança discreto para o recurso;
- Px - é necessária a definição de um perfil de segurança discreto para o recurso, as variáveis de ambiente são apagadas;
- ux - não verifica o lançamento de novos processos;
- Ux - não verifica o lançamento de novos processos e limpa as variáveis de ambiente;
Você também pode especificar
Capabilities
os kernels Linux que o processo tem permissão para usar. A lista completa está na página correspondente do manual.
Para mudar do modo de aprendizagem para o modo forçado, você precisa executar o comando
aa-enforce <prog_name>, - aa-complain <prog_name>
. Se agora, após ativar o modo forçado, o ping tentar fazer algo, algo não intencional do AppArmor irá bloqueá-lo.
[admin@server ~]$ sudo aa-enforce ping
Setting /usr/bin/ping to enforce mode.
[admin@server ~]$ sudo cp /usr/bin/man /usr/bin/ping
[admin@server ~]$ /usr/bin/ping ping
/usr/bin/ping: can't open the manpath configuration file /etc/manpath.config
Se você precisar criar um novo perfil, não será difícil. Primeiro, você precisa criar um modelo usando o comando
aa-autodep
e, em seguida, preenchê-lo executando
aa-genprof
. Um exemplo de diálogo interativo com genprof gratuito no link .
Materiais usados