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.
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/sudoersListe 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/sudoersou arquivos em/etc/sudoers.d/não pertencendo aroot:root;Permissões em
/etc/sudoersou nos arquivos de/etc/sudoers.d/permitindo escrita (w) para grupo e/ou outros;Binário
sudosendo 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.
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 -lPara visualizar as regras de um usuário específico (verificando como root), utilize a opção -U:
sudo -lU usuarioAnalogamente, é 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;
doneParalelamente, é 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/nullIndicadores de risco:
Presença da opção
NOPASSWDem regras que permitem execução de programas que possuem funcionalidades (argumentos) para execução de comandos;Comandos permitidos especificados sem caminho absoluto (como
vimem vez de/usr/bin/vim) ou com uso de coringas (como*,[]);
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/nullOu 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/nullIndicadores de risco:
Diretórios graváveis por usuários não root (como
/tmp, diretórios/homede usuários) incluídos nosecure_path;Valores altos de
timestamp_timeout(por exemplo, 60 minutos ou-1para nunca expirar) aumenta o risco de uso indevido de algum terminal autenticado;env_resetdesabilitado ouenv_keepincluindo variáveis sensíveis (comoPATH,LD_PRELOAD,LD_LIBRARY_PATH);
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/nullPara 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/nullIndicadores de risco:
Diretiva
#includedirpresente 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.dque são links simbólicos para locais não convencionais (como um script em diretório gravável por qualquer usuário).
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.txtAnalogamente, é 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.txtApós obter a lista, compare manualmente com o índice GTFOBins:
Acesse https://gtfobins.github.io;
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
NOPASSWDassociadas 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