Olá, e boas-vindas ao curso de Gestão de Segredos em Aplicações da Alura. Eu sou Gustavo Henrique Rorato, analista de segurança da informação, e estou aqui para acompanhá-los nessa jornada de aprendizado.
Audiodescrição: Gustavo é um homem branco, de cabelo castanho, e está vestindo uma blusa preta.
Neste curso, vamos aprofundar nossos conhecimentos sobre a gestão de segredos em aplicações. Aprenderemos sobre a gestão desses segredos, como rotacioná-los, o ciclo de vida deles, como identificá-los no código, verificar se são segredos ou informações sensíveis, entre outras questões relacionadas.
Na primeira aula, vamos entender o que são segredos em aplicações. Se em algum momento foi necessário definir uma senha ou um token em um arquivo ou variável de ambiente na sua aplicação, já trabalhamos com segredos, mesmo que tenhamos dado outro nome a eles.
A definição de segredo refere-se a credenciais sensíveis usadas por aplicações, serviços ou usuários para autenticação e autorização. Ou seja, utilizamos essas credenciais para autenticar e, ao mesmo tempo, autorizar o acesso a algum serviço ou parte de um sistema.
Se esses dados forem expostos, podem comprometer a integridade e confidencialidade da aplicação. A integridade pode ser comprometida se alguma informação for alterada, e a confidencialidade pode ser comprometida se alguma informação sensível da empresa ou aplicação for exposta.
Os exemplos mais comuns de segredos são senhas de bancos, como DB Password, que nós utilizamos frequentemente, chaves de API, como Google Maps, OpenAI, AWS, tokens de acesso, como JWT, Bearer Token, certificados e chaves privadas, TLS ou SSH.
Aqui temos um arquivo .env, que provavelmente, se trabalhamos com aplicações, já devemos ter visto, contendo DB Host, DB Port, que inclui uma porta do Postgres, entre outros segredos que podem causar prejuízos se forem expostos.
É importante destacar que nem toda informação sensível é um segredo. Por exemplo, dados pessoais de usuários não são segredos de aplicação, mas precisam ser protegidos de outra forma. Se nossa aplicação contém dados pessoais, como em um seeder que importa dados para a base de dados, eles não são segredos, mas devem ser protegidos por serem dados sensíveis e informações de usuários. Esses dados precisam ser tratados de forma segura, mas o tratamento é diferente de um segredo. A segurança pode ser garantida através de anonimização ou outras formas.
Aqui temos outro exemplo de segredo versus informação sensível. Qual é a diferença? Por exemplo, uma URL de uma API como https://meubeckend.com/.api não é um segredo; é apenas a URL, o host de uma API que aponta para algum recurso. No entanto, se a URL fosse https://user2.senha.meubeckend.com.br, por exemplo, seria um segredo, pois contém credenciais embutidas. Se essas credenciais vazarem, podem ocorrer problemas de integridade e confidencialidade mencionados anteriormente.
Portanto, dados sensíveis também precisam de proteção por serem confidenciais, e segredos precisam de proteção porque concedem acesso a algo. Em resumo, segredos são credenciais sensíveis usadas por aplicações. Por que as aplicações precisam desses segredos? Porque atualmente, praticamente todas as aplicações interagem com serviços externos, como SMS, e-mail, banco de dados, etc. É para isso que servem esses segredos.
Até a próxima aula!
Na aula anterior, discutimos a diferença entre um segredo e uma informação sensível, bem como a forma de tratá-los em termos de segurança. Um segredo é tratado de uma maneira, enquanto uma informação sensível requer um tratamento diferente, como, por exemplo, a anonimização. Também abordamos alguns conceitos sobre segredos.
Nesta aula, vamos aprender sobre os principais tipos de segredos e onde eles aparecem. Os tipos mais comuns de segredos em aplicações incluem senhas de banco de dados e de serviços externos. Por exemplo, pode ser necessário acessar um banco de dados na AWS, como um RDS, ou acessar um Bucket S3 na AWS para fazer o upload de arquivos na aplicação. Isso pode incluir imagens e uma série de outros serviços disponíveis na AWS, na nuvem do Google ou na Azure.
Além disso, tokens JWT e chaves de API são exemplos de segredos utilizados em integrações com serviços como Google Maps, AWS, Google Cloud e Azure. Existem diversas APIs que podemos consumir, e é importante entender como gerenciar esses segredos de forma segura.
Nós temos APIs de validação de arquivos, de validação de uma série de informações na aplicação, além de certificados e chaves de criptografia SSH, e variáveis de configurações sensíveis, como, por exemplo, Secret Key, onde esses segredos normalmente aparecem na aplicação. Existem os arquivos .env, que são muito comuns. Aplicações Laravel, por exemplo, em PHP, utilizam bastante o arquivo .env, onde estão declaradas todas as variáveis que a aplicação utiliza, seja o acesso a um banco de dados, a configuração de cache, entre outros tipos de variáveis. Por isso, ele deve ser protegido.
No código-fonte, que é a forma menos aconselhável de todas, ainda vemos desenvolvedores colocando esses segredos dentro do próprio código. Essa é uma forma insegura de se fazer, pois o segredo acaba indo para o Git e fica, de certa forma, exposto para que todos vejam. Mesmo que não ocorra um vazamento, todos da equipe, que talvez não deveriam ver, acabam tendo acesso a esse segredo.
Em containers e imagens Docker, infraestrutura e nuvem, se utilizarmos IaC, podemos acabar tendo alguma questão de chave dentro desses arquivos. Logs de erros, quando são impressos sem querer ou compartilhados, podem conter todas as informações do código e credenciais. Alguém pode pedir esse log para ver um debug e ele acaba sendo compartilhado, até com outras empresas. Outro problema dos logs é que, às vezes, outras ferramentas os consomem, como um Power BI, e esses logs acabam indo para ferramentas externas.
Aqui está um exemplo bem simples: no arquivo .env, em Laravel, por exemplo, temos a aplicação do lado esquerdo, indicada com o símbolo do código, e à direita, por exemplo, um MySQL, um Redis e uma SMS API. À direita, está todo o código desse .env, descrevendo essa integração. Este é um exemplo simples do uso de segredos em uma aplicação.
Até a próxima aula.
Olá! Na aula anterior, discutimos os principais tipos de segredos e onde eles aparecem. Nesta aula, vamos aprender sobre os riscos e consequências do gerenciamento inadequado de segredos.
Os riscos mais comuns que ocorrem quando há um gerenciamento inadequado desses segredos incluem, por exemplo, segredos inseridos diretamente no código (hard-coded), especialmente em repositórios públicos. Um exemplo disso é quando colocamos a conexão de um banco de dados MySQL diretamente no código e versionamos esse código em um GitHub público, expondo essa informação e possibilitando o comprometimento da base de dados.
Chaves de API esquecidas em arquivos .env ou Dockerfile podem ser um problema quando não incluímos o .env no .gitignore. Isso pode resultar em um commit que vai para um GitHub, às vezes público, ou em uma imagem publicada no Docker Hub, expondo o Dockerfile com alguma chave de API diretamente nele. Tokens em logs ou prints de erro também são preocupantes. Quando expomos um segredo em um arquivo de log, perdemos a rastreabilidade, pois o desenvolvedor pode compartilhar esse log para depuração, ou ele pode ser consumido por outras ferramentas, até mesmo de terceiros, para monitoramento. Devemos ter cuidado com essas questões.
Senhas fracas e sem rotações são outro problema. Senhas fáceis e provisórias acabam ficando para sempre, tornando-se uma porta de entrada para ataques e comprometimentos dos sistemas. Os impactos diretos de um gerenciamento inadequado de segredos incluem acesso não autorizado a sistemas e dados sensíveis, roubo de informações corporativas e dados de clientes, e interrupção de serviços e operações críticas. Isso pode resultar em roubo de informações, acesso não autorizado para modificações ou benefícios, e interrupção de serviços por invasores que desejam derrubar o sistema.
Extorsão e chantagem por parte dos atacantes são comuns, com bases de dados sendo vendidas na dark web. O comprometimento da cadeia de suprimentos de software é uma questão importante, pois invasores podem comprometer uma biblioteca utilizada em vários sistemas, afetando diversas empresas.
Alguns casos reais ilustram o gerenciamento inadequado de segredos. Em 2016, um desenvolvedor da Uber deixou credenciais de acesso à AWS em um repositório privado do GitHub. Hackers invadiram o repositório e usaram as credenciais para acessar cerca de 57 milhões de dados de usuários e motoristas. A Uber foi multada em 148 milhões de dólares e tentou negociar com os hackers, mas sem sucesso.
Outro exemplo é a Toyota em 2022, onde desenvolvedores deixaram chaves de acesso em um código-fonte no GitHub por cinco anos sem rotação. Isso resultou em uma grande perda de confiança no processo de segurança da Toyota e prejuízo de marketing.
Em 2023, pesquisadores da Wiz descobriram que a Microsoft acidentalmente expôs uma chave de acesso privilegiada do Azure em um repositório público do GitHub. Essa chave permitia acesso às caixas de e-mail do Outlook de diversas organizações, gerando um prejuízo reputacional significativo.
As consequências incluem multas por violação de LGPD ou GDPR, danos à reputação da marca, custos operacionais para resposta e mitigação, e a possibilidade de ações judiciais de clientes prejudicados. Empresas podem ser forçadas a investir em segurança devido a leis que exigem controles específicos.
Essas são as consequências que queremos evitar, e abordaremos alguns controles neste curso. Até a próxima aula!
O curso Gerenciamento de Segredos: segurança, auditoria e automação com Vault possui 167 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de Segurança em DevOps, ou leia nossos artigos de DevOps.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
2 anos de Alura
Matricule-se no plano PLUS 24 e garanta:
Jornada de estudos progressiva que te guia desde os fundamentos até a atuação prática. Você acompanha sua evolução, entende os próximos passos e se aprofunda nos conteúdos com quem é referência no mercado.
Mobile, Programação, Front-end, DevOps, UX & Design, Marketing Digital, Data Science, Inovação & Gestão, Inteligência Artificial
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você participa de eventos exclusivos, pode tirar dúvidas em estudos colaborativos e ainda conta com mentorias em grupo com especialistas de diversas áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
2 anos de Alura
Todos os benefícios do PLUS 24 e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Para estudantes ultra comprometidos atingirem seu objetivo mais rápido.
2 anos de Alura
Todos os benefícios do PRO 24 e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Conecte-se ao mercado com mentoria individual personalizada, vagas exclusivas e networking estratégico que impulsionam sua carreira tech para o próximo nível.