Manipulando bits de permissão especiais
No artigo sobre Redução de Privilégios em Programas, utilizamos o comando sudo
para executar um programa com privilégios de superusuário. No entanto, é possível realizar essa ação sem usar um comando externo.
Para isso, usamos permissões especiais de arquivos conhecidas como bit setuid e bit setgid. Esses atributos permitem que arquivos sejam executados com os privilégios do usuário ou do grupo proprietário.
Para ajustar os bits setuid
e setgid
, utilizamos o comando chmod
com as opções u+s
e g+s
, respectivamente.
# Muda o dono do arquivo para root e o grupo para wheel
sudo chown root:wheel main # No Linux, o grupo é root
# Ajusta o bit setuid
sudo chmod u+s main
# Ajusta o bit setgid
sudo chmod g+s main
Ao listar o arquivo com ls -l
, um s
no lugar do x
indica que o bit setuid ou setgid está ativado. Em sistemas modernos, o nome do arquivo pode ficar destacado para indicar que o bit está ativo, devido às implicações de segurança.
Com as permissões de superusuário configuradas, o programa pode usar as syscalls Setuid
e Setgid
para ajustar o ID do usuário e do grupo sem precisar do comando sudo
.
// Ajusta o ID do grupo
err = syscall.Setgid(gid)
if err != nil {
fmt.Println(err)
return
}
// Ajusta o ID do usuário
err = syscall.Setuid(uid)
if err != nil {
fmt.Println(err)
return
}
Ajustar as permissões de arquivos é mais prático do que usar o comando sudo
, mas requer cuidado. Os bits setuid e setgid são perigosos e podem ser explorados para obter acesso não autorizado. Um atacante poderia executar comandos através do seu programa para obter acesso privilegiado.
Uma lista de programas perigosos que podem ser explorados com bits setuid está disponível em GTFOBins. Esse site mostra como explorar uma grande e surpreendente coleção de programas comuns.
Vídeo com a explicação detalhada: