Pular para o conteúdo principal

🔐 Segurança

Introdução​

A segurança é uma prioridade máxima no Semaphore UI. Seja automatizando tarefas críticas de infraestrutura ou gerenciando o acesso da equipe a sistemas sensíveis, o Semaphore UI foi projetado para oferecer operações robustas e seguras desde a instalação. Esta seção descreve como o Semaphore lida com a segurança e o que você deve considerar ao implantá-lo em produção.

Autenticação e autorização​

O Semaphore oferece suporte a autenticação segura e a mecanismos flexíveis de autorização:

  • Métodos de login:

    • Usuário/senha
      Método padrão que usa credenciais armazenadas no banco de dados do Semaphore. As senhas nunca são armazenadas em texto puro; elas recebem hash com Argon2id (consulte Hash de senhas).

    • LDAP
      Permite a integração com serviços de diretório corporativos. Oferece suporte a filtragem de usuários/grupos e a conexões seguras via LDAPS.

    • OpenID Connect (OIDC)
      Permite o login único (SSO) com provedores de identidade como Google, Azure AD ou Keycloak. Oferece suporte a claims personalizadas e mapeamento de grupos.

  • Autenticação de dois fatores (2FA)
    A 2FA baseada em TOTP está disponível e é recomendada para todos os usuários. Ela pode ser habilitada por usuário e oferece suporte a códigos de recuperação opcionais. Consulte as opções de configuração mfa.totp.enabled e mfa.totp.allow_recovery.

  • Controle de acesso baseado em funções
    Você pode atribuir diferentes funções aos usuários, como Admin, Maintainer ou Viewer, limitando o acesso conforme a responsabilidade.

  • Gerenciamento de sessões
    As sessões são protegidas com cookies HTTP seguros. Os mecanismos de expiração de sessão e de logout garantem uma exposição mínima.

Hash de senhas​

Desde a v2.20

O hash de senhas com Argon2id está disponível desde o Semaphore 2.20. As versões anteriores usam bcrypt.

As senhas dos usuários locais recebem hash com Argon2id, o algoritmo recomendado pela OWASP para o armazenamento de senhas. O Semaphore usa os parâmetros de força mínima da OWASP:

ParâmetroValor
Memória19 MiB (m=19456)
Iterações2 (t=2)
Paralelismo1 (p=1)
Salt16 bytes aleatórios por senha
Tamanho do hash32 bytes

Os hashes são armazenados no formato de string PHC padrão, por exemplo $argon2id$v=19$m=19456,t=2,p=1$<salt>$<hash>, de modo que os parâmetros usados em cada hash ficam registrados junto com ele.

Isso se aplica a todas as formas de definir uma senha: a interface web, a API e os comandos da CLI semaphore user add, semaphore user change-by-login e semaphore setup.

Atualizando a partir de versões anteriores à 2.20. As versões anteriores à 2.20 aplicavam hash às senhas com bcrypt. Nenhuma etapa de migração é necessária:

  • Os hashes bcrypt existentes continuam sendo aceitos no login, então todos os usuários continuam funcionando após a atualização.
  • No primeiro login bem-sucedido, a senha recebe um novo hash com Argon2id de forma transparente e o hash bcrypt é substituído.
  • Se os parâmetros do Argon2id do Semaphore forem reforçados em uma versão futura, os hashes criados com os parâmetros antigos serão atualizados da mesma forma no próximo login.

Como o novo hash acontece apenas no login, os usuários que nunca mais fizerem login mantêm o hash bcrypt. Para forçar a atualização dessas contas, redefina a senha delas com semaphore user change-by-login --password ... ou pela interface de administração.

nota

Os códigos de recuperação da autenticação de dois fatores não são senhas de usuário e continuam usando bcrypt.

Segredos e credenciais​

Gerenciar segredos com segurança é um recurso central:

  • Armazenamento de Chaves criptografado
    Credenciais e variáveis secretas são criptografadas em repouso usando criptografia AES.

  • Isolamento de ambiente
    Os segredos são passados aos jobs apenas em tempo de execução e não são expostos diretamente ao ambiente do contêiner.

  • Chaves SSH e tokens
    Os usuários são responsáveis por enviar chaves SSH e tokens válidos. Eles são criptografados e usados apenas durante a execução das tarefas.

  • Integração com HashiCorp Vault (Pro)
    Os segredos podem ser armazenados em uma instância externa do Vault. Escolha o armazenamento por segredo ao criar ou editar um segredo.

Criptografia de dados​

Os dados sensíveis são armazenados no banco de dados de forma criptografada. Você deve definir a opção de configuração access_key_encryption no arquivo de configuração para habilitar a criptografia das Access Keys. Ela deve ser gerada pelo comando:

head -c32 /dev/urandom | base64

Execução de código / playbooks não confiáveis​

O Semaphore executa playbooks e comandos definidos pelo usuário, o que pode ser arriscado:

  • Isolamento em contêineres
    As tarefas são executadas em contêineres Docker isolados. Esses contêineres não têm acesso ao sistema host.

  • Isolamento da execução
    Por predefinição, uma tarefa é um processo comum no servidor Semaphore, com o sistema de ficheiros e o acesso de rede desse servidor. O isolamento é opcional: entregue a tarefa a um runner configurado com o executor docker ou k8s e cada tarefa recebe um contentor ou Pod novo, descartado quando termina.

  • Privilégio mínimo
    Com os executores Docker e Kubernetes, escolhe a imagem, a rede e a conta de serviço, pelo que a tarefa recebe apenas aquilo de que precisa.

  • Usuário do processo da tarefa
    As tarefas podem ser executadas sob um usuário de sistema dedicado e não root (por exemplo, semaphore) para reduzir o impacto de possíveis exploits. Isso é opcional e pode ser configurado conforme as políticas do sistema.

Implantação segura​

Para garantir que o Semaphore seja implantado com segurança:

  • Use HTTPS
    O Semaphore oferece suporte a HTTPS tanto por meio do seu suporte TLS integrado quanto por meio de um proxy reverso como o Nginx. É altamente recomendável habilitar o HTTPS em produção.

    Para habilitar o suporte HTTPS integrado, adicione o seguinte bloco ao config.json:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Execute atrás de um firewall
    Limite o acesso ao Semaphore UI e ao banco de dados apenas a IPs confiáveis.

  • Segurança do banco de dados
    Use senhas fortes e restrinja o acesso ao banco de dados apenas ao Semaphore.

Atualizações e gerenciamento de patches​

Atualizações de segurança são publicadas regularmente:

  • Mantenha-se atualizado
    Use sempre a versão estável mais recente.

  • Changelog
    Revise as alterações no GitHub antes de atualizar.

  • Atualizações automáticas
    Se estiver usando Docker, considere pipelines de automação para atualizações regulares.

Relato de vulnerabilidades​

Encontrou uma vulnerabilidade? Ajude-nos a manter o Semaphore seguro:

Prazos-alvo para correção de vulnerabilidades​

Nosso objetivo é corrigir as vulnerabilidades relatadas dentro dos seguintes prazos-alvo:

  • Crítica: em até 30 dias
  • Alta: em até 60 dias
  • Média: em até 90 dias
  • Baixa: melhor esforço, normalmente em até 180 dias

Patches fora do ciclo podem ser lançados para problemas ativamente explorados que afetem as versões estáveis mais recentes.

Ferramentas de segurança de código​

Usamos CodeQL, Codacy, Snyk e Renovate para analisar a base de código e as dependências, e para automatizar as atualizações de dependências.

  • Sem exploits públicos
    Não divulgue vulnerabilidades publicamente até que sejam corrigidas.

  • Agradecimentos
    Pesquisadores de segurança podem ser mencionados nas notas de versão, se desejarem.