Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETIVO
Estudar e conhecer a ferramenta Vault para uma possível aplicabilidade da mesma nos
Projetos de Desenvolvimento da SETIC, tornando o gerenciamento de credenciais de acesso mais
seguros.
JUSTIFICATIVA
Esse estudo propõe uma análise para conhecer e validar se a ferramenta pode ser útil na
SETIC, principalmente para armazenar variáveis de ambiente, controlar rigidamente o acesso a
tokens, senhas, certificados, chaves de criptografia, com o objetivo de proteger segredos e outros
dados confidenciais usando uma IU, CLI ou API HTTP. Visto que é inseguro deixar todas essas
informações no código ou no próprio GitLab, que é o cenário atual da SETIC.
INTRODUÇÃO
Vault é um projeto de código aberto criado pela Hashicorp, amplamente utilizado para
armazenar informações de maneira segura, como por exemplo: tokens de acesso, senhas,
certificados, chaves SSH dentre diversas outras informações. O Vault disponibiliza o acesso a estes
dados através de Interface Gráfica, Linha de Comando ou Chamada HTTP em sua API.
O Vault foi escrito em Go (linguagem criada pelo Google) e é distribuído em um único binário,
tornando ótimo para os diversos ambientes e sistemas operacionais.
Uma vez que você baixar o binário, você pode executar os comandos imediatamente ou até
mesmo já iniciá-lo como um cliente/servidor.
O Vault fornece uma interface unificada para qualquer secret, proporcionando um controle de
acesso totalmente seguro e com um registro de auditoria bem detalhado. Um secret pode ser
qualquer coisa que você deseja controlar o acesso, como chaves, API's, senhas, certificados e etc.
Como uma solução de gerenciamento de segredos que pode ser usada para gerenciar e
armazenar com segurança senhas, credenciais, certificados e muito mais. Uma instalação do Vault
pode ser aproveitada para fornecer um único armazenamento de dados seguro para credenciais
usadas em seus aplicativos, trabalhos de CI/CD do GitLab e muito mais. Além disso, também pode
servir como uma forma de fornecer certificados SSL/TLS para sistemas e implantações em sua
infraestrutura.
Aproveitar o Vault como uma fonte única para todas essas credenciais permite maior
segurança por ter uma única fonte de acesso, controle e capacidade de auditoria em torno de todas
as suas credenciais e certificados confidenciais. Trazendo para a realidade da SETIC, podemos
utilizar o exemplo do Gitlab que a SETIC mantém, onde os secrets, hoje, são armazenados na
ferramenta, sem uma devida proteção e controle para saber quem está acessando e/ou alterando
esses secrets. Portanto, com a utilização do Vault, caso a ferramenta GitLab seja comprometida, os
secrets da mesma não serão comprometidos.
Fornecido como Open Source ou versão Enterprise, onde provê funcionalidades para alta
disponibilidade e balanceamento para cenários grandes e complexos, além de suporte oficial em
diferentes modelos (Silver e Gold).
IMPORTÂNCIA NA PROTEÇÃO DE INFORMAÇÕES
De acordo com um estudo recente realizado por pesquisadores da North Carolina State
University, mais de 100.000 repositórios públicos do GitHub contêm segredos de aplicativos de
código aberto diretamente no código-fonte. Este estudo - de tokens de API privados a chaves
criptográficas - escaneados apenas cerca de 13% dos repositórios públicos do GitHub - mostra que
proteger os segredos de aplicativos de maneira adequada é um dos métodos mais negligenciados de
proteção de informações em software.
Embora a magnitude do impacto seja surpreendente, é importante observar que esse
problema não se limita a projetos de código aberto. Mesmo os repositórios de código-fonte privados
podem revelar segredos se não forem protegidos adequadamente. Veja a violação de segurança na
Buffer Inc. em 2013. O que começou como acesso ilegal ao código-fonte do próprio Buffer vazou as
credenciais da API do Twitter da empresa, eventualmente enviando spam para inúmeras contas de
clientes no Twitter.
Empresas são hackeadas todos os dias e o Buffer deu uma resposta de primeira. Sua
transparência não filtrada e relatórios de incidentes forneceram um exemplo interessante da
importância do gerenciamento de sigilo como um princípio fundamental de segurança da informação.
Mas também levanta a questão de como melhor gerenciar os segredos em uma organização
crescente e escalável.
FLUXO DE TRABALHO
Os Secrets Engines são extremamente flexíveis, então é mais simples pensar sobre sua
função. Normalmente eles recebem algum tipo de dado, tomam alguma ação com estes dados, e
então, retornam um resultado.
Existe uma porção de outros Secrets Engines e estes podem ser consultados na
documentação fornecida pela HashiCorp.
Outro recurso semelhante a um sistema de arquivos são as políticas. É possível criar
políticas para usuários e ou grupos, permitindo assim controlar quem pode realizar qual tipo de ação
em determinado caminho ou registro. Por padrão, todo acesso é bloqueado, conforme necessidade é
preciso ser liberado caso a caso.
A autenticação dos usuários pode ser realizada de várias maneiras. É possível configurar o
Vault para realizar autenticação interna, seja por usuários/senhas tradicionais ou tokens, ou ainda,
usando uma base externa de usuários, como por exemplo uma base LDAP, GitHub, ou usando o
Gmail com o OpenID Connect (OIDC).
OS PRINCIPAIS RECURSOS DO VAULT
Secure Secret Storage: Arbitrary key/value secrets podem ser armazenados no Vault. O
Vault criptografa esses secrets antes de escrevê-lo para o armazenamento persistente
(Storage/Banco de dados/Cônsul), de modo que mesmo obtendo acesso forçado/bruto não
será possível acessar os secrets.
Dynamic Secrets: O Vault pode gerar secrets sob demanda para alguns sistemas, como Amazon
AWS, SQL e etc. Por exemplo, quando um aplicativo precisa acessar um bucket S3, ele solicita ao
Vault as credenciais, o Vault irá gerar um par de chaves do tipo AWS com permissões válidas sob
demanda.
Data Encryption: O Vault pode criptografar e descriptografar dados sem armazená-los. Isso permite
que equipes de segurança definam parâmetros de criptografia, possibilitando que os
desenvolvedores armazenem os dados criptografados em um local como o SQL sem ter que precisar
projetar seus próprios métodos de criptografia.
Leasing and Renewal: Todos os secrets no Vault São criados com um registro de metadados
contendo informações de duração do tempo, renovabilidade e muito mais. No final da locação, o
Vault revoga automaticamente esse secret. Os clientes podem renovar esses registros através de
APIs de renovação integradas.
Revocation: O Vault possui um suporte interno para a revogação de secret. O Vault pode revogar
não só secrets únicos, mas uma árvore de secrets, por exemplo, todos os secrets lidos por um
usuário específico ou todos os secrets de um tipo específico.
A Solução: O Vault gerência e aplica de maneira centralizada o acesso a segredos e sistemas com
base em fontes confiáveis de aplicativo e identidade de usuário
BENEFÍCIOS DO VAULT
Evitar Vazamento: Minimiza impacto de vazamento e ataque, pois credenciais são efêmeras.
(deixam de existir, após seu uso).
Não-Repudiação: Credenciais únicas por acesso, deixando o processo mais seguro e identificado.
Rotação Automática: Atualiza a validade e a frequência da alteração das credenciais de acesso que
são automaticamente rotacionadas. Isto melhora a postura de segurança quanto a padrões de
mercado (SOX, BASEL, LGPD, GDPR, PCI).
Revogação Prática: Devido ao mecanismos de expiração, o Vault conhece cada segredo que cada
entidade possui. Isto torna possível a revogação automática em caso de comprometimento.
Credenciais únicas: automatizam o controle e limitam o impacto de uma revogação pontual.
MÉTODOS DE AUTENTICAÇÃO
Tokens: Os tokens são o principal método de autenticação no Vault. Aprenda como funciona o ciclo
de vida do token
Método de autenticação OIDC: Demonstra o método de autenticação OIDC para verificar e criar um
token com uma política pré-configurada para clientes do Vault.
Azure Active Directory com método de autenticação OIDC e grupos externos: Demonstra como
configurar o método de autenticação OIDC do Vault com o Azure Active Directory e grupos externos
do Vault.
Autenticação AppRole Pull: A autenticação é um processo no Vault pelo qual as informações
fornecidas pelo usuário ou pela máquina são verificadas para criar um token com uma política
pré-configurada.
AppRole com Terraform & Chef: Este tutorial discute os conceitos necessários para ajudar os
usuários a entender o padrão de autenticação AppRole do Vault e como usá-lo para introduzir com
segurança um token de autenticação do Vault para um servidor, aplicativo ou contêiner de destino.
Agente do Vault com AWS: Este tutorial é uma introdução ao Vault Agent que foi introduzido no Vault
0.11. Seu uso básico é demonstrado usando o método de autenticação da AWS como exemplo.
Agente do Vault com Kubernetes: Este tutorial demonstra o método de autenticação automática do
Vault Agent usando o método de autenticação do Kubernetes no lado do servidor.
Identidade: Entidades e Grupos: Este tutorial demonstra os comandos para criar entidades, aliases
de entidade e grupos. Para o propósito da demonstração, o método userpass auth será usado.
Construa Seus Próprios Plugins:Aprenda como construir, registrar e montar um plugin personalizado.
API Key Generation for Scripts: O recurso "dynamic secrets" do Vault é ideal para scripts: uma
chave de acesso AWS pode ser gerada durante a duração de um script e logo em seguida revogada.
O par de chaves não existirá antes ou depois do script, e a criação das chaves será completamente
registrada.
Exemplo: – Aplicações
Data Encryption: Além de armazenar secrets, o Vault pode ser usado para
criptografar/descriptografar dados armazenados em outros lugares. O principal uso disso é permitir
que os aplicativos criptografe seus dados enquanto ainda os armazenam no storage de dados
primário.
O principal benefício é que os desenvolvedores não precisam se preocupar com como criptografar
dados.
Exemplo:
– Aplicações
– Tokens
Vault storage backend: Um backend de Storage nada mais é que o local para armazenamento dos
dados “persistente”.
A configuração do backend de Storage é feita através do arquivo de configuração do Vault
"config.hcl", exemplo:
storage [NAME] {
[PARAMETERS...]
}
For example:
storage "file" {
path = "/mnt/vault/data"
}
Obs: É possível incluir nos parâmetros variáveis de ambiente, tornando precedente sobre os valores
no arquivo de configuração.
Backends secret: O backend (secret/prefixo) Para que seja possível escrever os secrets no Vault é
necessário especificar qual o backend que pretende utilizar. Por padrão, o Vault monta um backend
chamado de genérico para o Secret/prefix. O backend lê e grava os dados no Storage Backend. O
Vault suporte outros tipos de backends, além do genérico, e esse recurso em particular é o que torna
o Vault exclusivo.
Para representar o backends, o Vault se comporta como um sistema de arquivos: Os
backends são montados em caminhos específicos (backend/prefix).
TIPOS DE BACKEND STORAGE SUPORTADOS
Azure Storage
CockroachDB
Consul
DynamoDB
MongoDB
Etcd
Filesystem
Google Cloud
In-Memory
Mysql
PostgreSQL
Cassandra
S3
Swift
Zookeeper
CONCEITO BÁSICO
O Gitlab possui integração nativa com o Vault, sendo o maior exemplo, a utilização de
variáveis de ambiente em um pipeline (esteira de automação), que irá se conectar com o Vault e só
assim terá acesso a credencial de acesso, fazendo com que não seja necessário armazenar senhas
no Gitlab. Um outro exemplo seria que poderíamos armazenar os certificados SSL/TLS necessários
para o OpenShift também no Vault.
Portanto, o Vault é um seguro e único para receber as credenciais de acesso/secrets, que
pode facilitar o trabalho de gerenciamento de segredos, pois caso seja necessário alterar alguma
informação relacionada aos secrets, será somente em um único lugar. Por fim, a utilização do Vault
possibilita ter acesso a logs que auxiliam no processo de auditoria e monitoramento, para saber
como estão sendo utilizadas essas senhas.
CONCLUSÃO
BLACKOPS
Diego Silva
João Batista da Silva Junior
Lucas Gabriel de Lima Gonçalves
Michel Farias Ferreira
Hendrei de Souza Maia (Product Owner)
REFERÊNCIAS
Site do Vault
https://www.vaultproject.io/
Install Vault
https://learn.hashicorp.com/vault/getting-started/install
Gerenciamento de Segredos
https://medium.com/mercos-engineering/gerenciamento-de-segredos-1a24beafbb5