Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Golang Securities 01

Golang Securities 01

This talk was presented to the developers of the Golang skill at a private company. In it, we addressed the most common vulnerabilities found in software written with Go and discussed some ways to fix them.

Juliana Gaioso

January 08, 2024
Tweet

More Decks by Juliana Gaioso

Other Decks in Programming

Transcript

  1. Segurança o que isso quer dizer? Confidencialidade Dados estarão disponíveis

    e visíveis somente para quem possuir autorização Disponibilidade O sistema estará disponível sempre que for demandado Integridade Dados não são alterados de forma não autorizada
  2. Segurança o que isso quer dizer? Confidencialidade Dados estarão disponíveis

    e visíveis somente para quem possuir autorização Disponibilidade O sistema estará disponível sempre que for demandado Integridade Dados não são alterados de forma não autorizada Autenticidade Comprova a origem, a autoria e a veracidade da informação Não repúdio A autoria da informação não pode ser negada
  3. Fraqueza ou falha em um sistema que, quando explorada, compromete

    a segurança do sistema ou dos dados Vulnerabilidades
  4. Fraqueza ou falha em um sistema que, quando explorada, compromete

    a segurança do sistema ou dos dados CVE CWE Vulnerabilidades
  5. CWEs common weakness enumeration SQL injection, XSS, buffer overflow, código

    exposto, código Falta de resiliência, monolitos não segmentados, não gerenciamento de dependências projeto
  6. Vulnerabilidades comuns OWASP Top 10 A01:2021-Broken Access Control A06:2021-Vulnerable and

    Outdated Components A02:2021-Cryptographic Failures A07:2021-Identification and Authentication Failures A03:2021-Injection A08:2021-Software and Data Integrity Failures A04:2021-Insecure Design A09:2021-Security Logging and Monitoring Failures A05:2021-Security Misconfiguration A10:2021-Server-Side Request Forgery
  7. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  8. Validar dados: tipo, intervalo, tamanho Remover conjuntos de caracteres potencialmente

    perigosos (<, >, ", ', %, (, ), &, +, \, \', \") Input Validation Ocorre quando as entradas permitem inserções maliciosas Verificar cabeçalhos (heads, HTTP, URL, Cookies, redirecionamentos) Rejeição de dados que não forem validados Previne principalmente: * injection
  9. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  10. Sanitização de dados baseada em contexto, especialmente para consultas (SQL,

    XML) Output Encoding Ocorre quando as entradas permitem inserções maliciosas Codificação feita em um sistema confiável Previne principalmente: XSS
  11. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  12. Tudo que não é público deve ser continuamente autenticado Lógicas

    separadas entre o serviço de autenticação e o que realiza a requisição Authentication Falhas para autenticar / reautenticar Existências de procedimentos de falha Mensagens de erro não tão específicas e idênticas para todos os casos Previne principalmente: Broken Access
  13. Se a aplicação gerenciar um repositório de credenciais, esta deverá

    garantir que as senhas são armazenadas na base de dados somente sob a forma de resumo/hash da senha na forma de one-way salted hashes, e que a tabela/arquivo que armazena as senhas e as próprias chaves são manipuladas apenas pela aplicação. Password Management Falhas para autenticar / reautenticar Previne principalmente: Broken Access
  14. O código fonte não é um lugar seguro para nenhum

    tipo de credencial Password Management Falhas para autenticar / reautenticar Previne principalmente: Broken Access
  15. Utilizar somente método POST Utilizar somente conexões protegidas (SSL/TSL) Password

    Management Falhas para autenticar / reautenticar Inspeção cuidadosa de códigos ligados a autenticação e ao gerenciamento / tráfego de senhas Previne principalmente: Broken Access
  16. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  17. Excesso de informação nas respostas de erro Ausência de informações

    de depuração ou de excessão Error Handling and Logging Tratamentos de erros e de logs Quaisquer erro ligados aos processos de segurança devem negar acesso Acesso restrito aos logs Validação de integridade de registros de logs
  18. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  19. Arquivos devem ser armazenados em um diretório diferente do contexto

    da aplicação Desativar privilégios de execução de arquivos File Management Falhas para autenticar / reautenticar Sempre solicitar autenticação antes do carregamento de arquivos Validação do tipo do arquivo Scan de arquivos Previne principalmente: injection, XSS
  20. Vulnerabilidades comuns Golang Input Validation Error Handling and Logging Output

    Encoding Communication Security Authentication and Password Management File Management Session Management Memory Management Access Control General Practices
  21. Verificar se o tamanho do buffer é o mesmo especificado

    Verificar limites de buffer Memory Management Garantir que existirá memória suficiente para execução Verificar os limites e os tamanhos recebidos e esperados do buffer caso as chamadas à função sejam realizadas em ciclos Previne principalmente: Indisponibilidade
  22. Liberar a memória alocada após a execução da rotina Sempre

    que possível utilizar pilhas não executáveis Memory Management Garantir que existirá memória suficiente para execução Evitar o uso de funções que conhecidamente são vulneráveis cmo strcat() e printf() Previne principalmente: Indisponibilidade