Dev (Back & Front)ARTIGO

Manipulando bits de permissão especiais

Manipulando bits de permissão especiais
Imagem: Cesar Gimenes

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.

bash
# 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.

go
// 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:

Trabalha com tecnologia desde a década de 90. Já atuou na área de educação e participou de projetos de mobilidade de grande volume para laboratórios farmacêuticos. Criou games tanto para PC, como para iOS. Hoje está direcionando seus esforços em plataformas de Sistemas Embarcados, IoT, microservices e cloud computing. É um entusiasta de tecnologias como Golang e Docker.

Ver perfil
IMMMaturidade MarTech3,6 · Em desenvolvimento
Como você classificaria hoje o nível de maturidade tecnológica da área de marketing da sua empresa?