Serverless.com Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Uma Organização é a entidade de nível mais alto dentro do ecossistema do Serverless Framework. Ela representa um grupo coletivo, como uma empresa, departamento ou qualquer entidade grande, que abrange múltiplos projetos, equipes e aplicações.
A Equipe são os usuários com acesso dentro da organização. As equipes ajudam a organizar os membros com base em funções. Colaboradores
podem visualizar e implantar aplicativos existentes, enquanto Administradores
podem criar novos aplicativos e gerenciar as configurações da organização.
Um App é um agrupamento lógico de serviços relacionados dentro de uma Organização. Ele representa uma aplicação completa composta por múltiplos serviços serverless que trabalham juntos para fornecer uma funcionalidade coesa.
Um Serviço é o componente central de uma aplicação Serverless. Ele representa todo o seu projeto serverless, encapsulando todas as funções, configurações e recursos necessários. Geralmente é definido em um arquivo serverless.yml
, um serviço inclui metadados como o nome do serviço, configurações do provedor, funções, eventos, recursos, plugins e variáveis personalizadas.
Este é um resumo do tutorial oficial da documentação:
Crie uma conta na AWS (Serverless.com começa na infraestrutura da AWS)
Crie uma conta em serverless.com
Crie um aplicativo:
Isso deve ter criado um app chamado tutorialapp
que você pode verificar em serverless.com e uma pasta chamada Tutorial
com o arquivo handler.js
contendo algum código JS com um código helloworld
e o arquivo serverless.yml
declarando essa função:
Crie um provedor AWS, acessando o dashboard em https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
.
Para dar acesso ao serverless.com
ao AWS, será solicitado que você execute uma pilha do cloudformation usando este arquivo de configuração (no momento da escrita): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Este template gera um papel chamado SFRole-<ID>
com arn:aws:iam::aws:policy/AdministratorAccess
sobre a conta com uma Identidade de Confiança que permite que a conta AWS do Serverless.com
acesse o papel.
O tutorial pede para criar o arquivo createCustomer.js
, que basicamente criará um novo endpoint de API tratado pelo novo arquivo JS e pede para modificar o arquivo serverless.yml
para que ele gere uma nova tabela DynamoDB, defina uma variável de ambiente, o papel que estará usando as lambdas geradas.
Faça o deploy executando serverless deploy
O deployment será realizado via uma CloudFormation Stack
Note que as lambdas estão expostas via API gateway e não via URLs diretas
Teste
O passo anterior imprimirá as URLs onde suas funções lambda de endpoints API foram implantadas
Funções IAM excessivamente permissivas podem conceder acesso não autorizado a recursos em nuvem, levando a vazamentos de dados ou manipulação de recursos.
Princípio do Menor Privilégio: Atribua apenas as permissões necessárias a cada função.
Use Funções Separadas: Diferencie funções com base nos requisitos da função.
Armazenar informações sensíveis (por exemplo, chaves de API, credenciais de banco de dados) diretamente em serverless.yml
ou código pode levar à exposição se os repositórios forem comprometidos ou se o acesso à AWS for comprometido, pois serão legíveis a partir das configurações das lambdas.
Variáveis de Ambiente: Injete segredos em tempo de execução sem codificá-los.
Integração com Secrets Manager: Use serviços como AWS Secrets Manager, Azure Key Vault ou HashiCorp Vault.
Variáveis Criptografadas: Aproveite os recursos de criptografia do Serverless Framework para dados sensíveis.
Controles de Acesso: Restrinja o acesso a segredos com base em funções.
Evite Registrar Segredos: Certifique-se de que segredos não sejam expostos em logs ou mensagens de erro.
Dependências desatualizadas ou inseguras podem introduzir vulnerabilidades, enquanto o manuseio inadequado de entradas pode levar a ataques de injeção de código.
Gerenciamento de Dependências: Atualize regularmente as dependências e escaneie em busca de vulnerabilidades.
Validação de Entrada: Implemente validação e sanitização rigorosas de todas as entradas.
Revisões de Código: Realize revisões minuciosas para identificar falhas de segurança.
Análise Estática: Use ferramentas para detectar vulnerabilidades na base de código.
Sem registro e monitoramento adequados, atividades maliciosas podem passar despercebidas, atrasando a resposta a incidentes.
Registro Centralizado: Agregue logs usando serviços como AWS CloudWatch ou Datadog.
Ative o Registro Detalhado: Capture informações essenciais sem expor dados sensíveis.
Configure Alertas: Configure alertas para atividades suspeitas ou anomalias.
Monitoramento Regular: Monitore continuamente logs e métricas em busca de potenciais incidentes de segurança.
APIs abertas ou mal protegidas podem ser exploradas para acesso não autorizado, ataques de Negação de Serviço (DoS) ou ataques entre sites.
Autenticação e Autorização: Implemente mecanismos robustos como OAuth, chaves de API ou JWT.
Limitação de Taxa e Controle de Fluxo: Previna abusos limitando as taxas de requisição.
Configuração Segura de CORS: Restringa origens, métodos e cabeçalhos permitidos.
Use Firewalls de Aplicação Web (WAF): Filtre e monitore requisições HTTP em busca de padrões maliciosos.
Recursos compartilhados e isolamento inadequado podem levar a elevações de privilégio ou interações não intencionais entre funções.
Isolar Funções: Atribua recursos e funções IAM distintos para garantir operação independente.
Particionamento de Recursos: Use bancos de dados ou buckets de armazenamento separados para diferentes funções.
Use VPCs: Implemente funções dentro de Nuvens Privadas Virtuais para melhor isolamento de rede.
Limite Permissões de Funções: Certifique-se de que as funções não possam acessar ou interferir nos recursos umas das outras, a menos que explicitamente necessário.
Dados não criptografados em repouso ou em trânsito podem ser expostos, levando a vazamentos de dados ou adulterações.
Criptografar Dados em Repouso: Utilize recursos de criptografia do serviço em nuvem.
Criptografar Dados em Trânsito: Use HTTPS/TLS para todas as transmissões de dados.
Comunicação Segura da API: Imponha protocolos de criptografia e valide certificados.
Gerenciar Chaves de Criptografia de Forma Segura: Use serviços de chave gerenciada e gire as chaves regularmente.
Mensagens de erro detalhadas podem vazar informações sensíveis sobre a infraestrutura ou base de código, enquanto exceções não tratadas podem levar a falhas na aplicação.
Mensagens de Erro Genéricas: Evite expor detalhes internos nas respostas de erro.
Tratamento Centralizado de Erros: Gerencie e sane erros de forma consistente em todas as funções.
Monitore e Registre Erros: Acompanhe e analise erros internamente sem expor detalhes aos usuários finais.
Configurações de implantação expostas ou acesso não autorizado a pipelines de CI/CD podem levar a implantações de código malicioso ou configurações incorretas.
Pipelines de CI/CD Seguros: Implemente controles de acesso rigorosos, autenticação multifator (MFA) e auditorias regulares.
Armazene Configurações de Forma Segura: Mantenha arquivos de implantação livres de segredos codificados e dados sensíveis.
Use Ferramentas de Segurança de Infraestrutura como Código (IaC): Utilize ferramentas como Checkov ou Terraform Sentinel para impor políticas de segurança.
Implantações Imutáveis: Previna alterações não autorizadas após a implantação adotando práticas de infraestrutura imutável.
Usar plugins de terceiros não verificados ou maliciosos pode introduzir vulnerabilidades em suas aplicações serverless.
Avalie Plugins Minuciosamente: Avalie a segurança dos plugins antes da integração, preferindo aqueles de fontes respeitáveis.
Limite o Uso de Plugins: Use apenas os plugins necessários para minimizar a superfície de ataque.
Monitore Atualizações de Plugins: Mantenha os plugins atualizados para se beneficiar de correções de segurança.
Isolar Ambientes de Plugins: Execute plugins em ambientes isolados para conter possíveis compromissos.
Funções publicamente acessíveis ou APIs sem restrições podem ser exploradas para operações não autorizadas.
Restringir Acesso a Funções: Use VPCs, grupos de segurança e regras de firewall para limitar o acesso a fontes confiáveis.
Implemente Autenticação Robusta: Certifique-se de que todos os endpoints expostos exijam autenticação e autorização adequadas.
Use API Gateways de Forma Segura: Configure API Gateways para impor políticas de segurança, incluindo validação de entrada e limitação de taxa.
Desative Endpoints Não Utilizados: Revise regularmente e desative quaisquer endpoints que não estejam mais em uso.
Conceder permissões excessivas a membros da equipe e colaboradores externos pode levar a acesso não autorizado, vazamentos de dados e uso indevido de recursos. Esse risco é aumentado em ambientes onde múltiplos indivíduos têm níveis variados de acesso, aumentando a superfície de ataque e o potencial para ameaças internas.
Princípio do Menor Privilégio: Certifique-se de que membros da equipe e colaboradores tenham apenas as permissões necessárias para realizar suas tarefas.
Chaves de Acesso e Chaves de Licença são credenciais críticas usadas para autenticar e autorizar interações com o CLI do Serverless Framework.
Chaves de Licença: São identificadores únicos necessários para autenticar o acesso à versão 4 do Serverless Framework, que permite login via CLI.
Chaves de Acesso: Credenciais que permitem que o CLI do Serverless Framework se autentique com o Dashboard do Serverless Framework. Ao fazer login com o CLI serverless
, uma chave de acesso será gerada e armazenada no laptop. Você também pode configurá-la como uma variável de ambiente chamada SERVERLESS_ACCESS_KEY
.
Exposição Através de Repositórios de Código:
Codificar ou acidentalmente cometer Chaves de Acesso e Chaves de Licença em sistemas de controle de versão pode levar a acesso não autorizado.
Armazenamento Inseguro:
Armazenar chaves em texto simples dentro de variáveis de ambiente ou arquivos de configuração sem criptografia adequada aumenta a probabilidade de vazamento.
Distribuição Inadequada:
Compartilhar chaves através de canais não seguros (por exemplo, e-mail, chat) pode resultar em interceptação por atores maliciosos.
Falta de Rotação:
Não girar regularmente as chaves estende o período de exposição se as chaves forem comprometidas.
Permissões Excessivas:
Chaves com permissões amplas podem ser exploradas para realizar ações não autorizadas em múltiplos recursos.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)