Slide 1

Slide 1 text

08/01/2024 Golang Securities 101 @juligaioso Juliana Gaioso

Slide 2

Slide 2 text

Juliana Gaioso Application Security Fã de SciFi e de terror Atleta não profissional Mãe de pet

Slide 3

Slide 3 text

Juliana Gaioso Application Security Fã de SciFi e de terror Atleta não profissional Mãe de pet

Slide 4

Slide 4 text

Juliana Gaioso Application Security Fã de SciFi e de terror Atleta não profissional Mãe de pet

Slide 5

Slide 5 text

Visão geral de segurança Vulnerabilidades comuns em projetos com Golang Referências ------- tags

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

O código fonte não é um lugar seguro para nenhum tipo de credencial Password Management Falhas para autenticar / reautenticar Previne principalmente: Broken Access

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Referências Security Best Practices for Go Developers OWASP Go Secure Coding Practices Guide OWASP Top Ten

Slide 29

Slide 29 text

Aceito feedbacks (mas também não fico quieta) [email protected] Obrigada por participar!