Como tornar um processo invisível para outros usuários?

19

Como você pode iniciar um processo e torná-lo invisível para o comando top ? O processo é iniciado por um usuário normal (não raiz) e não deve ser visível para outros usuários normais.

    
por Debugger 21.07.2011 / 21:06

6 respostas

14

O kernel do Linux desde 3.3 contém suporte para ocultar processos para outros usuários.

Isso é feito pelas opções hidepid= e gid= mount para / proc, conforme descrito em o commit correspondente e Documentation / filesystems / proc.txt

O Debian Wheezy também inclui esse recurso.

    
por 15.03.2012 / 10:33
11

O comando top lê os dados do proc, que são fornecidos diretamente do kernel. Para esconder processos, você teria que usar código dentro do kernel para fazer o mascaramento.

Além de usar uma estrutura de segurança como o SELinux e o grsecurity (mencionadas nas outras respostas), o código no estilo rootkit é sua única opção restante. Eu digo "estilo" porque um "rootkit" por si só não é ruim, é como é usado. Existem razões perfeitamente legítimas por trás da ocultação de processos de outros usuários, e é por isso que essa capacidade existe em estruturas de segurança.

A rota básica que você deve seguir para fazer isso funcionar é ligar (ou sequestrar, dependendo de como você olha) a (s) função (ões) no kernel linux que distribui os dados /proc/pid/ . Eu demonstro um método de ligar as funções do kernel do Linux em um módulo de segurança que escrevi:

link

O código "alto nível" para isso está no método hijack_syscalls() em security.c , e a mágica do diabo nos detalhes por trás dele está no arquivo hijacks.c .

Você provavelmente encontrará a (s) função (ões) que você irá querer conectar no diretório fs/proc/ do código-fonte do kernel do linux. Tenha em mente que o Linux não fornece uma ABI estável, então seu código precisará mudar um pouco para que funcione em diferentes versões do kernel do Linux. Além disso, lembre-se de que você precisa de acesso root completo à máquina para poder inserir este código.

ATUALIZAÇÃO:

Se você encapsular o símbolo do kernel pid_getattr com algum código adicional, é muito fácil fazer isso. Eu adicionei recentemente algo que oculta processos ao módulo do kernel acima:

link

Você pode fazer algo semelhante, tornando os processos de um determinado usuário ou grupo não visíveis para ninguém, exceto para o usuário root. Fazê-lo pelo nome do processo é um pouco mais complexo, mas possível. Dê uma olhada na função exe_from_mm() . Observe que pode haver implicações no desempenho de usá-lo dentro de pid_getattr .

    
por 22.07.2011 / 05:17
4

Parece que as duas principais opções.

  • O Selinux trabalha colocando diferentes pessoas em diferentes domínios de segurança e, de certo modo, encaixotando-as para que não possam ver coisas umas das outras. Isso é abordado em esta questão . Como o selinux está se tornando rapidamente a estrutura de segurança de fato no mundo Linux, essa provavelmente é a direção que você deve seguir.

  • O outro é o grsecurity como mencionado por marioosh e como perguntado nesta questão . Algumas distros possuem pacotes alternativos do kernel com correções de grsecurity aplicadas. Se o seu tem isso, você pode procurar usá-los.

Se por algum motivo você quiser fazer isso sem a adição de uma estrutura de segurança como selinux ou grsecurity, explique como o que você está fazendo não está escrevendo um root-kit.

    
por 21.07.2011 / 22:35
1

Não é tão simples na caixa padrão do linux. Olhe para o grsecurity , mas isso requer a correção do kernel, etc.

    
por 21.07.2011 / 21:13
1

você pode sobrescrever seu argv [0] com outro nome ... mas falando de forma restrita, você está procurando por algum tipo de rootkit. isso pode ajudá-lo: link

    
por 21.07.2011 / 21:47
0

Você pode escrever um comando equivalente que funcione como top , mas não exiba processos que correspondam a um nome específico. Como alternativa, você pode obter o código-fonte do comando top e modificá-lo de acordo. Você pode então substituir o comando top em /usr/sbin (ou onde estiver) com sua versão.

    
por 22.07.2011 / 02:12