Mandatory Access Control – AppArmor

Um servidor bem permissionado significa um servidor mais seguro. Isso desde os primórdios até os dias atuais. Por isto, devido a essa poderosa e conservadora forma de evitar ataques apresentaremos neste artigo como se proteger de modo eficiente.

Mandatory Access Control (MAC) e Discretionary Access Control (DAC)

MAC e DAC são dois modelos de controle de acesso que se diferem nas entidades que especificam as permissões.

No modelo DAC as permissões de um recurso são especificadas pelo utilizador que é dono do recurso. O dono do recurso decide quem pode, ou não pode, realizar as varias operações sobre o recurso (o conjunto de operações de um recurso varia conforme o tipo do recurso, um arquivo, um socket, etc). Um exemplo do modelo DAC é o controle de acesso a arquivos num sistema UNIX, onde as permissões de leitura escrita e execução são especificadas pelos donos dos arquivos. O problema do modelo DAC é que qualquer processo iniciado por um utilizador tem as mesmas permissões que esse utilizador. Isto pode comprometer a segurança, caso uma aplicação tenha algum bug ou seja uma aplicação “mal intencionada”, pois a aplicação tem as mesmas permissões que o utilizador que a iniciou.

No modelo MAC as permissões são especificadas pelo sistema. Essas permissões são baseadas numa política global, no nível de segurança do utilizador e na classificação do recurso. A política de segurança não pode ser alterada ou removida a não ser pela utilização de operações privilegiadas. Este modelo permite implementar uma política de segurança que siga o princípio least privilege, onde cada aplicação apenas deve ter autorização para realizar as operações estritamente necessárias para o seu bom funcionamento, sendo as restantes operações não permitidas. Desta forma é criado um ambiente mais seguro, pois é limitada a quantidade de estragos que uma aplicação “mal comportada” pode fazer. Por exemplo, se limitarmos o acesso de uma aplicação editora de texto apenas ao que está sendo editado, mesmo que a aplicação tenha alguma vulnerabilidade, esta não conseguirá comprometer mais nada além do arquivo que está sendo editado.

O DAC é bem conhecido, e este artigo não contemplará ele. Focaremos no MAC, razoavelmente pouco conhecido, mas muito eficaz.

Atualmente existem vários tipos de MACs: SELinux da Red hat, AppArmor utilizado no Ubuntu, Smack um MAC focando em simplicidade e o Tomoyo que possui uma espécie de inteligência artificial baseada no histórico de ações tomadas previamente. Destacaremos, de forma breve, o poder de fogo do AppArmor.

AppArmor

O AppArmor foi incluído no kernel Linux oficial em sua versão 2.6.36, mas seu desenvolvimento (e uso) começou já em 1998, na distribuição GNU/Linux Immunix. Com a aquisição pela Novell em 2005, o AppArmor (aparentemente o principal motivo da aquisição) foi adotado no SUSE Linux Enterprise. Num caso infeliz e bastante noticiado, no entanto, em 2007 a equipe de desenvolvimento do AppArmor foi dispensada pela empresa.

O AppArmor se baseia nos caminhos dos arquivos para definir seu contexto de segurança. Os arquivos de configuração, assim com os domínios de segurança, estão nos diretórios /etc/apparmor/ e /etc/apparmor.d/.

Assim como os demais sistemas MAC, o AppArmor também dispõe de dois modos de operação: enforcement (ativo) e complain (reclamação, equivalente ao permissivo do SELinux: relata violação das políticas mas não impede nada).

Para desabilitar o AppArmor como um todo, basta parar o serviço deste.

As políticas se localizam em /etc/apparmor.d/. Dentro deste diretório, temos os mais vastos serviços ou utilitários que rodam sobre a autoridade do AppArmor. Por exemplo:

                      /usr/sbin/tcpdump → /etc/apparmor.d/usr.sbin.tcpdump

                      /sbin/dhclient3 → /etc/apparmor.d/sbin.dhclient3

O perfil é associado ao programa no momento em que este é executado. Portanto, como nos informa a man page do AppArmor, não é possível confinar um programa que já esteja em execução.

Os perfis em uso, juntamente com seus respectivos modos de operação no momento, podem ser obtidos com uma consulta ao securityfs (já montado por padrão pelo Ubuntu):

                      root@Umbreon ~ # cat /sys/kernel/security/apparmor/profiles

                      /usr/sbin/tcpdump (enforce)

                      /usr/lib/connman/scripts/dhclient-script (enforce)

Esta saída significa que nosso sistema atualmente tem quatro perfis de segurança, para os dois programas exibidos na saída, e o modo de operação de todos eles é o enforce.

O AppArmor trabalha com o daemon auditd para exibir suas mensagens. Se o audit não estiver instalado, ele utilizará as mensagens de kernel normal do Linux, ou seja, o syslog. É muito interessante instalar o auditd e utilizá-lo para que tenhamos um log limpo do nosso sistema e do que ocorre com ele.

A visualização do MAC AppArmor é simples. Basta executarmos o comando apparmor_status, que surgem nossos perfis e políticas:

               root@lab01 ~ # apparmor_status

               apparmor module is loaded.

               24 profiles are loaded.

               2 profiles are in enforce mode.

                /sbin/dhclient3

                /usr/sbin/tcpdump

              4 profiles are in complain mode.

              /bin/ping

              /usr/lib/dovecot/pop3

             /usr/lib/dovecot/pop3-login

             /usr/sbin/avahi-daemon

            4 processes have profiles defined.

             1 processes are in enforce mode :

            /sbin/dhclient3 (859)

           1 processes are in complain mode.

            /usr/sbin/nmbd (825)

Para alterar perfis do AppArmor basta utiliza o sintaxe:

aa-mode command

            root@lab01 ~ # aa-enforce /bin/ping

            root@lab01 ~ # aa-complain /etc/apparmor.d/*

Já me disseram que o AppArmor não é tão bom por ser muito fácil de desativar — basta parar o serviço. Porém, não creio que essa característica seja, de fato, uma falha de segurança. O próprio bootloader GRUB possui opções como essa.

A comparação do AppArmor com o SELinux é inevitável, uma vez que estes são os dois únicos sistemas MAC a virem ativados por padrão em alguma distribuição GNU/Linux. O SELinux em Red hats e o AppArmor no Ubuntu. De uma forma geral, enquanto o SELinux é capaz de se interpor fortemente entre o administrador e seu objetivo, o AppArmor parece ser menos intrusivo.

Todavia, como segurança e facilitade são sempre opostas, tem-se a impressão de que o AppArmor é menos seguro, já que este, possui menos inconvenientes. O importante, no entanto, é alcançar o objetivo principal dos sistemas MAC: o controle de acesso. Se seu sistema MAC preferido é capaz de bloquear o acesso de serviços do sistema a arquivos sensíveis, seja ele AppArmor ou SELinux, parabéns pela segurança implementada.