Gerenciamento de segredos

Thiago Trufelli
mercos-engineering
Published in
6 min readOct 3, 2019

A cada dia que passa, as organizações aumentam a quantidade de informações geradas e a complexidade delas. Seguindo a ISO 27001, que é uma norma publicada pela International Standardization Organization (ISO) para a gestão da segurança da informação, devemos classificar as informações em níveis para termos uma correta gestão das informações. Por mais que este padrão não prescreva os níveis de classificação das informações, no Brasil, comumente é utilizado os seguinte níveis:

  • Confidencial
  • Restrita
  • Uso interno
  • Pública

Para cuidar e administrar informações confidenciais e restritas de sistemas de informação, podemos utilizar soluções mais eficientes que a velha planilha do Excel, ou ainda, do Google Sheets. Nesse artigo, apresentarei uma breve pincelada sobre o Vault.

O Vault foi criado pela empresa HashiCorp no ano de 2015. A empresa tem como objetivo resolver problemas no desenvolvimento, operações e desafios de segurança na infraestrutura, para que seus clientes possam focar nas tarefas críticas do negócio.

Com o Vault podemos gerenciar e administrar segredos computacionais de uma maneira segura, simples e eficaz. Segundo a HashiCorp, segredos são qualquer informação que desejamos controlar rigidamente o acesso, como por exemplo:

  • Chaves de API
  • Senhas
  • Certificados

Entre outros tipos de segredos que são possíveis armazenar no Vault.

O Vault é fornecido como Open Source (usando a Licença pública Mozilla 2.0), porém, também existe versões pagas, onde provê funcionalidades para alta disponibilidade e balanceamento para cenários grandes e complexos.

A ferramenta possui uma gama de funcionalidades, entre as principais sã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, ainda mais pela entrada da 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, pois até a solicitação do usuário a credencial não existia. 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 configuração da ferramenta não será abordada nesse artigo, a instalação é extremamente simples, como mostrado em sua documentação disponibilizada, bastando apenas descompactar o pacote e com um comando, já está pronto para inicializar-lo em modo desenvolvedor.

Inciando o Vault em modo desenvolvedor

É importante ressaltar que no modo DEV, todas as informações são mantidas em memória RAM, ou seja, no momento que for encerrado por qualquer motivo, todos os dados são perdidos.

O Vault não armazena as informações, ele apenas cifra e transfere o armazenamento para seu backend. O backend por sua vez não tem meios para decifrar as informações contidas, dependendo do Vault pra 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.

Comparativo de um sistema de arquivos para Secret Engine do Vault

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.

Porém existem outros que apenas armazenam e leem dados, como o Redis e o Memcached.

Outros, por sua vez, criam credenciais sob demanda, como o AWS e Bancos de dados.

Existe uma porção de outros Secrets Engines e estes podem ser consultados na documentação provida 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.

Na criação de um Vault, ele gera alguns elementos em que é necessário guardar com muito cuidado, estes são o Root_Token e os fragmentos da chave master.

O Root Token é um token com acesso total ao Vault. Ele poderá tomar qualquer tipo de ação nele, então, ele deve ser utilizado apenas para a configuração inicial e após esta fase, outro usuário deve ser criado para o uso do dia a dia. Já os fragmentos da chave mestre, como o nome diz, são fragmentos da chave mestre do Vault. A chave mestre cifra a chave utilizada pelo Vault, e consequentemente precisamos destes fragmentos para podermos utilizar o Vault. Apenas neste momento que o Vault fornece estes dados, e devem ser mantidos seguros, pois caso estes dados forem perdidos, o acesso ao Vault é perdido.

Os fragmentos da chave mestre são gerados utilizando o algoritmo de Shamir’s Secret Sharing, onde ele pega a chave mestre, cria fragmentos, e por meio destes fragmentos, tendo um threshold mínimo atingido, a chave mestre é recriada.

Algoritmo de Shamir’s Secret Sharing

Outro ponto importante a ser entendido é o ato de Selar/Desselar o Vault. Sempre que o Vault é inicializado ele inicia selado, neste momento, não temos acesso a nenhuma informação e acesso ao Vault. Precisamos desselar o Vault e para isso utilizamos os fragmentos da chave mestre para ela ser recriada. Uma vez com a chave mestre recriada, ele fica no modo “Desselado” permitindo o acesso ao Vault e as informações contidas (depois de ser autenticar).

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).

Com este artigo, é mostrado o que o Vault pode nos fornecer. Em um cenário em que auditoria, compliance e segurança estão cada vez mais importantes para as organizações, soluções que de maneira simples nos entregam estas necessidades são sempre bem vindas.

A grande quantidade de documentação que a HashiCorp disponibiliza para o Vault e sua a simplicidade e flexibilidade na configuração são pontos muito importantes no projeto.

--

--