Mecanismo de Controle de Acesso Sudo

Esta página descreve brevemente o funcionamento do mecanismo de controle de acesso sudo em sistemas Linux e apresenta instruções práticas para avaliação de riscos associados à sua má configuração. O conteúdo fornece a administradores e a avaliadores instruções técnicas para identificar configurações que ampliam a superfície de ataque, preparando o terreno para análises específicas de outras classes de vulnerabilidades dependentes desse mecanismo.

Pré-requisitos

A seguir são listados alguns assuntos fundamentais sobre sistemas operacionais cujo conhecimento prévio é necessário para o pleno entendimento da seção Explicações Conceituais.

  • Modelo de permissões de arquivos em sistemas compatíveis com POSIX;

  • Mecanismo de controle de acesso sudo (sudoers).

Explicações conceituais

Com o mecanismo de controle de acesso sudo (substitute user and do), o administrador do sistema pode delegar as permissões de determinados usuários (usuários-alvo) para outros usuários (usuários-favorecidos). Isso é útil porque os usuários-favorecidos podem executar programas específicos em nome de algum usuário-alvo sem a necessidade de iniciarem sessões como usuário-alvo. Os usuários-alvo podem ser quaisquer usuários ou grupos existentes no sistema, desde usuários/grupos comuns até superusuários (como o root) e grupos administrativos. Para usufruir dos privilégios concedidos, os usuários-favorecidos podem invocar tais comandos específicos junto ao comando sudo.

Por outro lado, em certos casos, é possível abusar de más configurações desse mecanismo para executar comandos em nome de outros usuários indevidamente, atingindo, portanto, uma elevação de privilégio. Por exemplo, usar o comando sudo para interagir com funcionalidades legítimas de programas que permitem a execução de comandos arbitrários, iniciando um shell interativo (novo processo) com privilégios elevados.

Instruções práticas

Trata-se de um guia prático de verificação de segurança que apresenta uma sequência de instruções, incluindo o uso de ferramentas/comandos, de modo a permitir que administrador avalie de forma objetiva aspectos de segurança do sistema.

Guia para avaliação de riscos

Este guia apresenta algumas etapas de verificação direcionadas exclusivamente a identificar más configurações do mecanismo de controle de acesso sudo em sistemas Linux. Não são indicadas correções ou boas práticas, apenas procedimentos de detecção.

1

Identificação, propriedade e permissões de arquivos de configuração do sudo

Objetivo: Identificar os arquivos de configuração do sudo presentes no sistema, inspecionar suas propriedades e permissões, bem como identificar existência de link simbólico.

Motivo: A política de acesso do sudo é determinada pela combinação do arquivo principal /etc/sudoers e de todos os arquivos referenciados no diretório /etc/sudoers.d/. Omitir a verificação de qualquer um desses arquivos resulta em uma análise de segurança incompleta. Além disso, arquivos de configuração com permissões inadequadas (como arquivos graváveis por outros usuários) permitem que um atacante não privilegiado injete regras arbitrárias para delegação de privilégio.

Método:

Verifique proprietários e permissões do arquivo de configuração principal:

ls -l /etc/sudoers

Liste o diretório que pode incluir arquivos de configuração adicionais. Caso haja algum arquivo, também verifique seus proprietários e permissões.

ls -la /etc/sudoers.d/

Para o próprio binário sudo, localize-o no sistema e verifique suas propriedades:

ls -l $(which sudo)

Indicadores de risco:

  • /etc/sudoers ou arquivos em /etc/sudoers.d/não pertencendo a root:root;

  • Permissões em /etc/sudoers ou nos arquivos de /etc/sudoers.d/ permitindo escrita (w) para grupo e/ou outros;

  • Binário sudo sendo link simbólico para local não convencional (como um script em diretório gravável por qualquer usuário) ou pertencente a usuário não-root.

2

Análise das regras de sudo configuradas

Objetivo: Examinar as regras de sudo em busca de indicadores de más configurações que possam comprometer a segurança.

Motivo: Determinadas opções e formatos de regra (ex.: NOPASSWD, comandos sem caminho absoluto, uso de coringas) são configurações do sudo que aumentam a superfície de ataque para elevação de privilégio.

Método:

Para visualizar as regras que próprio usuário atual possui, utilize a opção -l:

sudo -l

Para visualizar as regras de um usuário específico (verificando como root), utilize a opção -U:

sudo -lU usuario

Analogamente, é possível enumerar as regras de todos os usuários do sistema ao iterar sobre a lista de usuários presente em /etc/passwd:

for u in $(cut -d: -f1 /etc/passwd); do
  echo "--- $u ---" >> sudo_rules.txt;
  sudo -lU "$u" >> sudo_rules.txt;
done

Paralelamente, é possível inspecionar diretamente as entradas nos arquivos de sudoers para buscar padrões:

grep -HnE 'NOPASSWD|NOEXEC|SETENV|sudoedit|\(|\*|\[|\?' /etc/sudoers /etc/sudoers.d/* 2>/dev/null

Indicadores de risco:

  • Presença da opção NOPASSWD em regras que permitem execução de programas que possuem funcionalidades (argumentos) para execução de comandos;

  • Comandos permitidos especificados sem caminho absoluto (como vim em vez de /usr/bin/vim) ou com uso de coringas (como *, []);

3

Diretivas Defaults e variáveis de ambiente do sudo

Objetivo: Examinar diretivas Defaults do sudo que afetam o ambiente de execução dos comandos via sudo.

Motivo: As diretivas Defaults definem a arquitetura de segurança subjacente de como os comandos são executados. Por exemplo, uma configuração relaxada de secure_path pode permitir que um usuário manipule o PATH para assumir o controle de comandos delegados.

Método:

É possível listar todas as diretivas Defaults presentes nos arquivos de configuração do sudo com:

grep -Hn '^\s*Defaults' /etc/sudoers /etc/sudoers.d/* 2>/dev/null

Ou então, filtre diretamente as diretivas de interesse:

grep -HnE 'env_reset|env_keep|secure_path|targetpw|rootpw|timestamp_timeout|visiblepw' /etc/sudoers /etc/sudoers.d/* 2>/dev/null

Indicadores de risco:

  • Diretórios graváveis por usuários não root (como /tmp, diretórios /home de usuários) incluídos no secure_path;

  • Valores altos de timestamp_timeout (por exemplo, 60 minutos ou -1 para nunca expirar) aumenta o risco de uso indevido de algum terminal autenticado;

  • env_reset desabilitado ou env_keep incluindo variáveis sensíveis (como PATH, LD_PRELOAD, LD_LIBRARY_PATH);

4

Verificar diretivas de inclusão e arquivos adicionais em /etc/sudoers.d/

Objetivo: Detectar arquivos adicionais que possam ser carregados por meio de diretivas de inclusão (como #include e #includedir). E também identificar backups (.bak), arquivos temporários (.tmp) ou links simbólicos que alterem o conjunto de regras do sudo.

Motivo: A diretiva de inclusão permite que o sudo leia regras de locais adicionais: arquivos de backup, arquivos swap de editores ou links simbólicos em diretórios incluídos podem ser processados acidentalmente, levando à ativação de regras não desejadas.

Método:

É possível buscar por diretivas de inclusão nos arquivos de configurações do sudo com:

grep -HnE '^\s*#\s*include|^\s*#\s*includedir|^\s*include|^\s*includedir' /etc/sudoers /etc/sudoers.d/* 2>/dev/null

Para o diretório /etc/sudoers.d/, tendo em vista os indicadores de risco abaixo, faça as seguintes verificações:

# Listagem de todos os arquivos presentes no diretório
ls -la /etc/sudoers.d

# Busca por arquivos de backup/temporários comuns
find /etc -maxdepth 2 -type f \( -name '*sudoers*bak' -o -name '*sudoers*old' -o -name '*swp' \) -exec ls -l {} \\; 2>/dev/null

Indicadores de risco:

  • Diretiva #includedir presente e diretório incluído contendo arquivos com nomes de backup, temporários ou links simbólicos;

  • Arquivos incluídos graváveis por usuários não administrativos;

  • Arquivos em /etc/sudoers.d que são links simbólicos para locais não convencionais (como um script em diretório gravável por qualquer usuário).

5

Cruzamento dos comandos permitidos com o índice GTFOBins

Objetivo: Extrair os binários/comandos permitidos via sudo e produzir uma lista que permita comparação com o índice público do GTFOBins.

Motivo: Alguns binários legítimos (editores, interpretadores, utilitários de sistema) possuem funcionalidades que podem ser abusadas quando executados com privilégios; identificar coincidências com o índice GTFOBins é uma verificação fácil para encontrar possíveis vetores de ataque.

Método:

É possível extrair os comandos permitidos para o usuário user (substitua para a sua verificação) a partir do sudo -l:

sudo -lU user 2>/dev/null | sed -n '/commands/,${p;}' | tr ',' '\n' > /tmp/sudo_allowed_user.txt

Analogamente, é possível enumerar para todos os usuários do sistema (como root) com:

for u in $(cut -d: -f1 /etc/passwd); do
  sudo -lU "$u" 2>/dev/null | sed -n '/commands/,${p;}' | tr ',' '\n' 
done > /tmp/sudo_allowed_all_users.txt

Após obter a lista, compare manualmente com o índice GTFOBins:

  1. Pesquise cada binário da lista em busca de página correspondente na base de dados.

Indicadores de risco:

  • Presença de editores, interpretadores (como vi, vim, nano, python, perl, ruby) entre os comandos permitidos;

  • Presença de utilitários com funcionalidades de execução (como less, man, find, awk, tar, nc) na lista permitida;

  • Opções NOPASSWD associadas a binários listados em GTFOBins.

Referências

Lista de fontes usadas para a elaboração do material, bem como recomendações para estudo aprofundado.

Last updated