/etc/apparmor.d/
e eles contém uma lista de regras de controle de acesso em recursos que cada programa pode fazer uso. Os perfis são compilados e carregados no núcleo pelo comando apparmor_parser
. Cada perfil pode ser carregado tanto em modo de aplicação ("enforcing") quanto em modo de registro ("complaining"). O primeiro aplica a política e reporta as tentativas de violação, enquanto que o último não aplica a política mas mantém os registros de chamadas de sistema que deveriam ter sido negadas.
apt install apparmor apparmor-profiles apparmor-utils
com privilégios de root.
aa-status
confirmará isso rapidamente:
#
aa-status
o módulo apparmor é carregado. 32 perfis são carregados. 15 perfis estão no modo de imposição. /usr/bin/man [...] 17 perfis estão em modo de reclamação. /usr/sbin/dnsmasq [...] 1 processos têm perfis definidos. 1 processos estão em modo de imposição. /usr/sbin/libvirtd (468) libvirtd 0 processos estão em modo de reclamação. 0 processos não são confinados, mas têm um perfil definido.
aa-enforce
e aa-complain
, passando como parâmetro tanto o caminho para o executável como o caminho para o arquivo de políticas. Além disso, um perfil pode ser inteiramente desabilitado com aa-disable
ou posto em modo auditar (audit) (para também aceitar chamadas de sistema) com aa-audit
.
#
aa-enforce /usr/bin/pidgin
Setting /usr/bin/pidgin to enforce mode.
#
aa-complain /usr/sbin/dnsmasq
Setting /usr/sbin/dnsmasq to complain mode.
aa-unconfined
para listar os programas que não tem perfil associado e que expõem um soquete de rede aberto. Com a opção --paranoid
você tem todos os processos não confinados que tem ao menos uma conexão de rede ativa.
#
aa-não confinado
451 /usr/bin/containerd não confinado 467 /usr/sbin/sshd (sshd: /usr/sbin/sshd -D [ouvinte] 0 de 10-100 inicializações) não confinado 892 /usr/sbin/exim4 não confinado
/sbin/dhclient
(já existe um perfil enviado por apparmor-profiles, então você pode comparar seus resultados com o oficial). Para isso usaremos aa-genprof dhclient
. Ele irá convidá-lo a usar o aplicativo em outra janela e, quando terminar, voltar para aa-genprof
para verificar eventos do AppArmor nos logs do sistema e converter esses logs em regras de acesso. Para cada evento registrado, ele fará uma ou mais sugestões de regras que você pode aprovar ou editar posteriormente de várias maneiras:
#
aa-genprof dhclient
Gravando perfil atualizado para /usr/sbin/dhclient. Configurando /usr/sbin/dhclient para modo de reclamação. Antes de começar, você pode querer verificar se um já existe um perfil para o aplicativo que você deseja confinar. Veja a seguinte página wiki para Mais Informações: https://gitlab.com/apparmor/apparmor/wikis/Profiles Criação de perfil: /usr/sbin/dhclient Por favor, inicie o aplicativo para ser perfilado outra janela e exercite sua funcionalidade agora. Depois de concluído, selecione a opção "Scan" abaixo em para verificar os logs do sistema em busca de eventos do AppArmor. Para cada evento do AppArmor, você receberá o oportunidade de escolher se o acesso deve ser permitido ou negado. [(S)can system log for AppArmor events] / (F)inish
S
Lendo entradas de log de /var/log/syslog. Perfil: /usr/sbin/dhclientExecute: /usr/sbin/dhclient-script Gravidade: desconhecida (I)herit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish
P
O AppArmor deve higienizar o ambiente quando trocar de perfil? A higienização do ambiente é mais segura, mas algumas aplicações dependem da presença de LD_PRELOAD ou LD_LIBRARY_PATH. [(S)im] / (N)ãoS
Escrevendo perfil atualizado para /usr/sbin/dhclient-script. Mudanças no modo de reclamação: Perfil: /usr/sbin/dhclientCapacidade: net_raw Gravidade: 8 [1 - capacidade net_raw,] (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)finish
A
Adicionando o recurso net_raw ao perfil. Perfil: /usr/sbin/dhclient Capacidade: net_bind_service Gravidade: 8 1 - #include <abstrações/nis>] 2 - capacidade net_bind_service, (A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)finiseA
Adicionando #include <abstractions/nis> ao perfil. Perfil: /usr/sbin/dhclientCaminho: /etc/ssl/openssl.cnf Novo modo: proprietário r Gravidade: 2 [1 - #include <abstrações/lightdm>] 2 - #include <abstrações/openssl> 3 - #include <abstractions/ssl_keys> 4 - proprietário /etc/ssl/openssl.cnf r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob com (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r) t / (F)concluir
2
Perfil: /usr/sbin/dhclient Caminho: /etc/ssl/openssl.cnf Novo modo: proprietário r Gravidade: 2 1 - #include <abstrações/lightdm> [2 - #include <abstrações/openssl>] 3 - #include <abstractions/ssl_keys> 4 - proprietário /etc/ssl/openssl.cnf r, [(A)llow] / (D)eny / (I)gnore / (G)lob / Glob com (E)xtension / (N)ew / Abo(r)t / (F)inish / (M)oreA
[...] Perfil: /usr/sbin/dhclient-scriptCaminho: /usr/bin/dash Novo modo: proprietário r Gravidade: desconhecida 1 - #include <abstrações/gvfs-open> [2 - #include <abstrações/lightdm>] 3 - #include <abstractions/ubuntu-browsers.d/plugins-common> 4 - #include <abstrações/xdg-open> 5 - proprietário /usr/bin/dash r, (A)llow / [(D)eny] / (I)gnore / (G)lob / Glob com (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r) t / (F)concluir
A
Adicionando #include <abstractions/lightdm> ao perfil. Excluídas 2 entradas de perfil correspondentes anteriores. = Perfis locais alterados = Os seguintes perfis locais foram alterados. Você gostaria de salvá-los? [1 - /usr/sbin/dhclient] 2 - /usr/sbin/dhclient-script (S)salvar alterações / Salvar perfil selecionado(t)ed / [(V)visualizar alterações] / Visualizar alterações b/w (C)perfis enxutos / Abo(r)tS
Escrevendo perfil atualizado para /usr/sbin/dhclient. Escrevendo perfil atualizado para /usr/sbin/dhclient-script. Criação de perfil: /usr/sbin/dhclient Por favor, inicie o aplicativo para ser perfilado outra janela e exercite sua funcionalidade agora. Depois de concluído, selecione a opção "Scan" abaixo em para verificar os logs do sistema em busca de eventos do AppArmor. Para cada evento do AppArmor, você receberá o oportunidade de escolher se o acesso deve ser permitido ou negado. [(S)can system log for AppArmor events] / (F)inishF
Configurando /usr/sbin/dhclient para impor o modo. Configurando /usr/sbin/dhclient-script para impor o modo. Perfis do AppArmor recarregados no modo de imposição. Considere contribuir com seu novo perfil! Consulte a seguinte página wiki para obter mais informações: https://gitlab.com/apparmor/apparmor/wikis/Profiles Concluída a geração do perfil para /usr/sbin/dhclient.
O primeiro evento detectado é a execução de outro programa. Neste caso, você tem múltiplas escolhas: você pode rodar o programa com o perfil do processo pai (a escolha “Inherit”), você pode rodá-lo com seu próprio e dedicado perfil (as escolhas “Profile” e “Named”, diferindo apenas pela possibilidade de usar um nome de perfil arbitrário), você pode rodá-lo com um sub-perfil do processo pai (a escolha “Child”), você pode rodá-lo sem qualquer perfil (a escolha “Unconfined”) ou você pode decidir não rodá-lo de forma alguma (a escolha “Deny”).
Note que quando você opta por rodá-lo sob um perfil dedicado que não existe ainda, a ferramenta irá criar o perfil em falta para você e irá fazer sugestões de regras para esse perfil nesta mesma execução.
| |
A nível do kernel, os poderes especiais do usuário root foram divididos em "recursos" ("capabilities"). Quando uma chamada de sistema requer um recurso específico, o AppArmor irá verificar se o perfil permite ao programa fazer uso desse recurso.
| |
Aqui o programa busca por permissões de leitura para /etc/ssl/openssl.cnf . O aa-genprof detectou que essa permissão foi também obtida por múltiplas "abstrações” e as oferece como escolhas alternativas. Uma abstração fornece um conjunto de regras de acesso reutilizável, reunindo múltiplos recursos que são comumente usados juntos. Nesse caso específico, o arquivo é geralmente acessado através das funções relacionadas ao serviço de nomes da biblioteca C e nós digitamos “2” para primeiro selecionarmos a opção “#include <abstractions/openssl>” e então “A” para dar a permissão.
| |
Note que essa requisição de acesso não é parte do perfil do dhclient, mas do novo perfil que nós criamos quando permitimos /usr/sbin/dhclient-script executar com seu próprio perfil.
Após termos passado por todos os eventos registrados, o programa se oferece para salvar todos os perfis que foram criados durante sua execução. Neste caso, nós temos dois perfis que nós salvamos ao mesmo tempo com "Salvar" (“Save”) (mas você pode salvá-los individualmente também) antes de sair do programa com "Terminar" (“Finish”).
|
aa-genprof
é na realidade apenas um envoltório inteligente em volta do aa-logprof
: ele cria um perfil vazio, carrega-o em modo de registro ("complain mode") e então roda o aa-logprof
que é uma ferramenta para atualizar um perfil com base nas violações de perfil que foram registradas. Então você pode rodar novamente essa ferramenta mais tarde para aprimorar o perfil que você acabou de criar.
/etc/apparmor.d/usr.sbin.dhclient
próximo ao perfil enviado por apparmor-profiles em /usr/share/apparmor/extra-profiles/sbin.dhclient
.
/etc/apparmor.d/usr.sbin.dhclient-script
pode ser semelhante a /usr/share/apparmor/extra-profiles/sbin.dhclient
, enviado em apparmor-profiles também.