Log / Auditoria de tudo permitido pelo SELinux

3

Estou analisando alguns softwares proprietários para criar um conjunto de requisitos de permissão e políticas do SELinux para permitir que ele seja instalado e executado no Oracle Linux (ou qualquer derivado do RHEL).

Estou executando o SELinux no modo permissivo, executei o semodule -DB para desativar o "dontaudit" e estou visualizando /var/log/audit/audit.log para ver os resultados.

No entanto, gostaria de ver também TUDO que foi permitido (não apenas recusas ou auditowow), que parece ser a maioria a julgar por isso:

[root@aw-selinuxtest ~]# seinfo --stats

Statistics for policy file: /etc/selinux/targeted/policy/policy.24
Policy Version & Type: v.24 (binary, mls)

   Classes:            81    Permissions:       237
   Sensitivities:       1    Categories:       1024
   Types:            3852    Attributes:        291
   Users:               9    Roles:              12
   Booleans:          228    Cond. Expr.:       268
   Allow:          311381    Neverallow:          0
   Auditallow:        133    Dontaudit:           0
   Type_trans:      38576    Type_change:        38
   Type_member:        48    Role allow:         19
   Role_trans:        368    Range_trans:      5601
   Constraints:        90    Validatetrans:       0
   Initial SIDs:       27    Fs_use:             24
   Genfscon:           84    Portcon:           471
   Netifcon:            0    Nodecon:             0
   Permissives:        91    Polcap:              2

Alguém sabe como fazer isso? Estou lutando para encontrar uma resposta até agora.

    
por kingpotnoodle 04.03.2015 / 15:14

1 resposta

5

Ao contrário da prática usual, configurar o SELinux para o modo permissive e registrar todas as negações do AVC para desenvolver um módulo de política pode resultar na inclusão de um conjunto errado de permissões em tal política.

Um exemplo disso pode ser o seguinte: suponha que essa operação normal do software proprietário exija uma transição de domínio , no modo permissivo, a transição não acontece e parece que o domínio de origem requer todas as permissões registradas como negações de AVC ( SELinux Cookbook de Sven Vermeulen contém várias referências a este problema em potencial).

Uma abordagem melhor para criar um módulo de política para um software proprietário seria manter o SELinux em modo de execução em primeiro lugar, para garantir que o privilégio mínimo possível seja concedido.

O próximo passo seria pesquisar o software, tanto on-line (tem documentação?) como off-line ( ss , strace , ipcs , ...) para determinar detalhadamente seu projeto arquitetônico, ou seja, mas não limitado a:

  • arquivos, que também devem ser divididos em subgrupos (configuração, transações, logs, ...)

  • processos, serviços (o software possui um script systemd / upstart / init?)

  • conectividade de rede (tráfego de entrada e saída, portas, ...)

  • usuários, grupos

Com todas essas informações em mãos, você poderia começar a desenvolver uma política para esse software.

Você precisará:

  • crie um arquivo filecontexts definindo o contexto de segurança de todos os arquivos envolvidos

  • crie um arquivo de interfaces que defina seu domínio em termos de todas as interações entre arquivos, processos, portas, usuários, transições de domínio, ...

  • crie um arquivo de execução de tipo descrevendo quais usuários têm acesso ao domínio acima e às regras reais

Compile e carregue, verifique as negações do AVC, depure e melhore sua política. Enxagúe e repita.

Do livro acima, uma última citação:

Some policy developers like to run application permissive mode (either by running the entire system in permissive mode or by marking this particular domain as a permissive domain), registering all accesses performed (through the AVC denials) and enhancing the policy based on that information. Although this might give a faster working policy, these developers will also risk that they add too many privileges to a policy, something that is very difficult to challenge and change later. Instead, we let SELinux prevent accesses and look at how the application reacts. Based on the error logging of the application or the behavior of the application and the AVC denial(s) seen through the logs, we can have a good picture of what privileges are really needed.

    
por 21.03.2015 / 21:21

Tags