Política de Selinux para CAP_SYS_PTRACE, invocando o nome do processo

2

Eu tenho um sistema no qual temos o GDB instalado e um binário de destino que precisa ser depurado para erros. Não queremos que o usuário possa depurar qualquer outro processo além do binário de destino.

Existe alguma maneira de usar o Selinux para criar uma política para restringir o CAP_SYS_PTRACE a um processo de destino? e falha ao tentar depurar qualquer outro processo?

    
por user9830364 29.09.2018 / 06:44

1 resposta

1

Modo "Permissões clássicas de ptrace" já permite o rastreamento de processos executados como seu uid, mas nada de privilegiado. Coloque isso em /etc/sysctl.d/program.conf

kernel.yama.ptrace_scope = 0 

Se o programa for executado como um usuário diferente, permita alternar para esse usuário para executar o gdb. Tal como com uma regra de sudo.

Em seguida, o gdb pode ser chamado com a sintaxe gdb program ou gdb -p PID .

Realmente restringi-lo para rastrear apenas um programa, nem mesmo outros sendo executados como usuário, é mais difícil. Atualmente, o CentOS 7 não possui nenhuma política de SELinux direcionada para o gdb. Rodar sem limites significa que o SELinux não se aplica e permitirá o mesmo usuário ou CAP_SYS_PTRACE.

Você pode definir políticas para o seu programa e para o GDB e permitir que ele faça o que quiser.

allow gdb_t program_t:process { ptrace } ;

O problema é que nenhum desses tipos existe ainda. Você também teria que descobrir todas as transições de domínio necessárias para confinar o gdb, mas ainda funcionar.

Existe um booleano que já existe que irá desligar o ptrace globalmente. Não é muito útil, pois não há exceções, mas você pode impedir que o root rastreie processos.

setsebool -P deny_ptrace on
    
por 01.10.2018 / 03:02

Tags