Autentique com nome de usuário e senha para obter privilégios mais altos

1

Existe alguma maneira de aumentar os privilégios do seu processo? Aqui está um exemplo: Finja que o programa A foi compilado em C com apenas privilégios de modo de usuário. Agora vamos apenas dizer que este programa queria obter privilégios de root, mas precisava do nome de usuário e senha para o root. Por isso, chamou uma macro, ou biblioteca, que então solicitou o nome de usuário e a senha. Se o nome de usuário, ou senha, estava incorreto, ele retornou um erro, mas se o nome de usuário e a senha estiverem corretos, ele concederá privilégios de root do processo.

    
por Fumerian Gaming 31.01.2017 / 22:34

1 resposta

0

Isso não é possível. Não porque não haja nenhuma função em C, mas porque o modelo de segurança Unix proíbe isso.

No modelo de segurança Unix, um programa pode apenas reduzir seus privilégios, mas nunca pode aumentar seus privilégios. Um processo pode reduzir temporariamente seus privilégios efetivos e recuperar seus privilégios "reais" originais mais tarde, mas nunca pode ir mais longe do que onde começou.

Um processo que registra usuários deve começar com privilégios de root, ou seja, com o direito de fazer tudo. Uma vez que o usuário tenha inserido seu nome e senha e o programa de login tenha verificado, o processo muda permanentemente para o usuário desejado. Ele pode obter privilégios de root de duas maneiras:

  • Pode ser iniciado por outro processo que está sendo executado como root. É assim que o login do console e o login SSH funcionam.
  • Pode ser um executável setuid pertencente ao root. É assim que su e sudo funcionam.

Eu simplifiquei algumas coisas aqui, mas o princípio fundamental de que um programa não pode aumentar seus privilégios é sempre verdadeiro. Existe apenas uma maneira em que um processo pode ganhar privilégios, e isso é por executando um executável setuid¹.

Se um programa precisar executar algumas tarefas com privilégios mais altos, ele não poderá fazê-lo sozinho. Deve obter um processo de privilégios mais altos para isso. Ele pode fazer isso entrando em contato com um servidor já em execução que é executado com os privilégios desejados ou executando um executável setuid. O executável setuid pode ser algo como su ou sudo , que por sua vez executa um executável que não tem nenhuma permissão especial, mas se houver elevação de privilégio, deve haver um executável setuid na cadeia.

¹ ou setgid, setpcap…

    
por 01.02.2017 / 01:17