Como ocultar argumentos de processos de outros usuários?

7

Há algum tempo, costumava usar os patches de kernel grsecurity , que tinham a opção de ocultar argumentos de processo de outros usuários não-root. Basicamente isso só fez /proc/*/cmdline ser modo 0600, e ps lida com isso corretamente mostrando que o processo existe, mas não seus argumentos.

Isso é legal se alguém em uma máquina multiusuário estiver executando, digamos vi christmas-presents.txt , para usar o exemplo canônico.

Existe alguma maneira de fazer isso no Ubuntu, além de instalar um novo kernel?

(Eu estou familiarizado com a técnica que permite que programas individuais alterem seus argumentos, mas a maioria dos programas não faz isso e, de qualquer forma, é animada. Esse usuário do stackoverflow parece estar fazendo a mesma pergunta, mas na verdade parece muito confuso.

    
por poolie 17.11.2010 / 02:51

5 respostas

6

Existe agora uma hidepid mount opção para procfs que permite ocultar argumentos de outros usuários e, opcionalmente, permitir que um grupo veja todos os processos:

  

A primeira opção de montagem é chamada de "hidepid" e seu valor define como   muita informação sobre processos que queremos disponibilizar para não proprietários:

     

hidepid = 0 (padrão) significa o comportamento antigo - qualquer um pode ler todos   arquivos legíveis pelo mundo / proc / PID / *.

     

hidepid = 1 significa que os usuários não podem acessar nenhum diretório / proc / PID /, mas   seus próprios. Arquivos sensíveis como cmdline, sched *, status agora   protegido contra outros usuários. Como verificação de permissão feita em   proc_pid_permission () e permissões de arquivos são deixadas intocadas,   programas que esperam modos específicos de arquivos não são confusos.

     

hidepid = 2 significa hidepid = 1 mais todos / proc / PID / serão invisíveis para   outros usuários. Isso não significa que esconde se existe um processo   (pode ser aprendido por outros meios, por exemplo, por kill -0 $ PID), mas   esconde processo 'euid e egid. Compila a tarefa do intruso de   coleta de informações sobre processos em execução, se algum daemon é executado com   privilégios elevados, se outro usuário executa algum programa sensível,   se outros usuários executam algum programa, etc.

     

gid = XXX define um grupo que será capaz de reunir todos os processos   info (como no modo hidepid = 0). Este grupo deve ser usado em vez de   colocando usuário não root no arquivo sudoers ou algo assim. No entanto, não confiável   usuários (como daemons, etc.) que não devem monitorar as tarefas   em todo o sistema não deve ser adicionado ao grupo.

     

hidepid = 1 ou superior foi projetado para restringir o acesso a arquivos procfs,   que pode revelar algumas informações confidenciais confidenciais como precisa   tempo de digitação:

     

link

     

hidepid = 1/2 não quebra as ferramentas de monitoramento do userspace. ps, top, pgrep,   e conky graciosamente lidar com EPERM / ENOENT e se comportar como se a corrente   o usuário é o único usuário que está executando processos. pstree mostra o processo   subárvore que contém o processo "pstree".

    
por poolie 13.01.2012 / 21:22
8

A única maneira de fazer isso atualmente é colocar cada usuário em um contêiner separado (consulte clone com CLONE_NEWPID e CLONE_NEWNS ) e montando um novo /proc no contêiner. ( lxc fará um pouco disso para você.)

No entanto, existem planos para apresentar recursos de grsecurity para os kernels Ubuntu e upstream. Se você puder, inscreva-se e peça ajuda.

    
por Kees Cook 17.11.2010 / 21:09
6

Até e incluindo Natty, não é possível alterar as permissões nos arquivos /proc/$pid/cmdline com o kernel padrão, os bits de permissão são embutidos no kernel. Atualmente você teria que construir um kernel sob medida com os patches aplicados.

Se os patches são simples para habilitar esta funcionalidade, então pode valer a pena publicá-los na lista do Ubuntu Kernel Team ( [email protected] ) e podemos considerá-los para inclusão em versões futuras.

    
por Andy 17.11.2010 / 20:31
1

Anos atrás, publiquei os seguintes dois patches do kernel:

Esses dois patches ainda funcionam para o atual kernel vanilla estável do kernel.org. Se você estiver interessado, posso postar o patch atual. Não me pergunte porque nunca alguém incluiu uma opção de ocultação de processo no kernel upstream.

Aviso: esses patches ocultam completamente os processos de outros usuários, exceto o root.

    
por user9899 30.01.2011 / 11:31
-2

Você pode impedi-los de acessar o monitor do sistema e a parte superior, alterando suas permissões nas configurações de usuários e grupos. Não tenho certeza de que essa será uma solução completa, mas deve ser suficiente para bloquear isso dos usuários mais comuns.

    
por RolandiXor 17.11.2010 / 03:43