Você está na página 1de 12

VAULT - ESTUDO FERRAMENTAL

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.

Com o Vault, podemos gerenciar e administrar segredos computacionais de uma maneira


segura, simples e eficaz. Os segredos (entre outros mais), são qualquer informação que desejamos
controlar rigidamente o acesso, como por exemplo:
● Chaves de API
● Senhas
● Certificados

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

A ferramenta possui uma gama de funcionalidades, entre as principais estão:


Armazenamento seguro de segredos, segredos dinâmicos (sob demanda), Leasing, renovação e
revogação de segredos.
Com o Vault é possível armazenar de maneira segura, permitindo auditoria de quem teve acesso a
informação, acrescentou, modificou ou deletou registros. Esse tipo de controle se faz cada vez mais
importante para as organizações, como a LGPD (Lei Geral de Proteção de Dados). Além do
armazenamento, a solução pode criar segredos dinâmicos sob demanda, como credenciais de
acesso ao AWS.
Então, os riscos de alguém roubar ou, por exemplo, ser utilizado por outro cliente, é
drasticamente reduzido, visto que a ferramenta fornece mecanismos de acesso único para cada
cliente de forma aleatória e dinâmica. A solução provê mecanismos nativos para revogar estes
segredos dinâmicos, desta maneira, caso desejado, pode ser revogado automaticamente após o
término de uso, minimizando o tempo total que o segredo existiu.
A HashiCorp disponibiliza versões do Vault nos maiores sistemas operacionais modernos,
como Linux, Windows, MacOs , FreeBSD, NetBSD, OpenBSD e no Solaris. A instalação é simples,
como mostrado em sua documentação disponibilizada, bastando apenas descompactar o pacote e
com um comando, já está pronto para inicializá-lo em modo desenvolvedor.
O Vault, em modo desenvolvedor, não armazena as informações na máquina local do
desenvolvedor, ele apenas cifra e transfere o armazenamento para seu back-end. O back-end por
sua vez não tem meios para decifrar as informações contidas, dependendo do Vault para decifrar.
É possível configurar uma série de backends para o Vault, desde soluções mais simples,
como memória RAM ou sistemas de arquivos, para soluções mais complexas, como bancos de
dados, S3, Google Spanner e Google Storage.
Outra funcionalidade muito importante da solução, são os Secrets Engines. De maneira
resumida, são componentes que armazenam, geram ou cifram dados. Para utilização mais simples e
familiar, o Vault funciona de maneira similar a um sistema de arquivos.
O secret engine é habilitado em um caminho e o Vault consegue rotear a requisição para o
prefixo e transferir para o correto secret engine habilitado.

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.

GERENCIAMENTO DOS SEGREDOS

O Desafio: Os segredos para aplicativos e sistemas precisam ser centralizados e as soluções


baseadas em IP estático não escalam em ambientes dinâmicos com aplicativos e máquinas que
mudam frequentemente

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

Automação de segurança: Gerenciamento de segredos e proteção de dados confidenciais com


base na identidade do usuário e na identidade do workload (serviços, servidores e aplicações).
RECURSOS DOS SEGREDOS DINÂMICOS

Segredos Dinâmicos: É possível criar, revogar e alterar segredos de maneira dinâmica e


programática

Armazenamento Secreto: É possível criptografar os dados em repouso, no back-end de


armazenamento de sua escolha.
Plugins de identidade: Melhore a extensibilidade do Vault com back-ends de identidade
conectáveis.
Registros de auditoria detalhados: Registro de auditoria detalhado de todas as interações com o
cliente (autenticação, criação de tokens, acesso secreto e revogação).
Leasing e revogação de segredos: Possível gerenciar a autorização e criar tokens baseados em
tempo para revogação automática ou revogação manual.

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.

ONDE POSSO APLICAR O VAULT?

Em sistemas modernos ou até mesmo na gestão de ambientes em Cloud, existe uma


infinidade de secret’s que precisam ser armazenados, exemplo: (Banco de Dados – Chaves de API’s
– Consoles de Cloud Computing – Serviços SaaS – Arquiteturas orientadas a serviços e muito mais).
É aí que entra o Vault, pois com ele podemos armazenar seguramente todos os secrets e logs de
auditoria. Outros exemplos de possíveis uso são:

General Secret Storage: Possibilidade de armazenar qualquer tipo de secret


Exemplo:
– Variáveis de ambientes sensíveis
– Credenciais de Banco de dados
– Credenciais de API’s
– Gerenciamento de configuração

Employee Credential Storage: Mecanismo para armazenar credenciais compartilhadas


Exemplo:
– Serviços WEB
– Serviços de senhas compartilhadas
OBS: O mecanismo de log de auditoria permite que você saiba quais os secrets foram acessados por
um determinado usuário, podendo obter os últimos logs de acesso que o usuário utilizou.

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

Vault – modo “Dev”.


Iniciando o Vault no modo DEV
No modo DEV (vault -dev) não é necessário nenhuma configuração adicional. A autenticação será
realizada automaticamente (local), facilitando o uso dos recursos do Vault apenas para
desenvolvimento/estudos.
Obs: No modo DEV todas as funcionalidades estarão disponíveis.

Vault – modo Server


O Vault funciona como uma aplicação client/server. No modo server o Vault será o responsável por
interagir com os Storages e Backends.
Todas as operações realizadas através da CLI do Vault interagem com o servidor através de uma
conexão TLS.
INTEGRAÇÃO DO GITLAB COM O VAULT

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

Conforme visto no estudo realizado, o Vault é um aplicativo de gerenciamento de segredos


oferecido pela HashiCorp, que permite o armazenamento e gerenciamento das informações
confidenciais, como variáveis ​de ambiente secretas, chaves de criptografia e tokens de autenticação.
O seu uso associado aos projetos de desenvolvimento no GitLab da SETIC seria importante,
pois hoje, os segredos ficam armazenados no próprio código ou até mesmo no GitLab, o que não é
uma prática recomendada e nem segura.
Portanto, recomendamos a realização de um estudo para implantação em ambiente de teste
para maior conhecimento sobre o funcionamento da ferramenta para que, caso aprovada, seja
utilizada nos projetos de desenvolvimento da SETIC.
ENVOLVIDOS

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/

Segredos externos com CI


https://docs.gitlab.com/ee/ci/secrets/index.html

Install Vault
https://learn.hashicorp.com/vault/getting-started/install

Documentação Secrets Engines


https://www.vaultproject.io/docs/secrets/index.html

Autenticação e leitura de segredos com o Vault


https://docs.gitlab.com/ee/ci/examples/authenticating-with-hashicorp-vault/

Gerenciamento de Segredos
https://medium.com/mercos-engineering/gerenciamento-de-segredos-1a24beafbb5

Iniciando a trilha com o Vault


https://churrops.io/2017/08/28/meetup-churrops-iniciando-a-trilha-com-o-vault-teoria/

Você também pode gostar