Security Fundamentals
2.1 Fundamentos de segurança
Os princípios fundamentais da segurança de aplicativos baseiam-se nos conceitos de segurança mencionados neste guia do desenvolvedor. Esta seção tem como objetivo fornecer uma introdução aos princípios fundamentais com os quais qualquer equipe de desenvolvimento deve estar familiarizada.
Modelo de Maturidade de Software Assurance
O Modelo de Maturidade de Software Assurance (SAMM) fornece contexto para o escopo da segurança de software e os fundamentos das boas práticas de segurança:
O modelo SAMM descreve esses fundamentos de segurança de software como Funções de Negócio, que são subdivididos em Práticas de Negócio. O Modelo de Maturidade de Software Assurance OWASP (SAMM) é usado ao longo deste Guia do Desenvolvedor; a maioria das seções do Guia do desenvolvedor faz referência a pelo menos uma das funções ou práticas de negócios do SAMM.
Tríade CID
Segurança é simplesmente controlar quem pode interagir com sua informação, o que eles podem fazer com ela e quando podem interagir com ela. Estas características de segurança podem ser descritas utilizando a tríade CID.
CID significa Confidencialidade, Integridade e Disponibilidade, e geralmente é retratada como um triângulo que representa os fortes laços entre seus três princípios. Esta tríade é considerada os pilares de segurança de aplicações, frequentemente Confidencialidade, Integridade ou Disponibilidade são usadas como propriedades de dados ou processos dentro de um determinado sistema. A tríade CID pode ser ampliada com a tríade AAA: Autorização, Autenticação e Auditoria.
Confidencialidade
Confidencialidade é a proteção dos dados contra a divulgação não autorizada; trata-se de garantir que apenas aqueles com a autorização correta possam acessar os dados e se aplica tanto aos dados em repouso quanto aos dados em trânsito. Confidencialidade também está relacionada ao conceito mais amplo de privacidade de dados.
Integridade
Integridade refere-se à proteção os dados contra modificações não autorizadas ou garantir a confiabilidade dos dados. O conceito contém a noção de integridade de dados (os dados não foram alterados acidental ou deliberadamente) e a noção de integridade da fonte (os dados vieram ou foram alterados por uma fonte legítima).
Disponibilidade
Disponibilidade refere-se à garantia da presença de informação ou recursos. Este conceito não se baseia apenas na disponibilidade dos dados em si, por exemplo, através da utilização da replicação de dados, mas também na proteção dos serviços que fornecem acesso aos dados, por exemplo, através da utilização de balanceamento de carga.
Tríade AAA
A tríade CID é frequentemente ampliada com Autenticação, Autorização e Auditoria, uma vez que estas estão intimamente ligadas aos conceitos da CID. A CID depende fortemente da autenticação e autorização; a confidencialidade e a integridade de dados sensíveis não podem ser garantidas sem elas. A auditoria é adicionada porque pode fornecer o mecanismo para garantir a prova de qualquer interação com o sistema.
Autenticação
Autenticação consiste em confirmar a identidade da entidade que deseja interagir com um sistema seguro. Por exemplo, a entidade poderia ser um cliente automatizado ou um ator humano; em ambos os casos, a autenticação é necessária para um aplicativo seguro.
Autorização
Autorização consiste em especificar direitos de acesso a recursos seguros (dados, serviços, arquivos, aplicativos, etc.). Esses direitos descrevem os privilégios ou níveis de acesso relacionados aos recursos que estão sendo protegidos. Autorização geralmente é precedida por uma autenticação bem-sucedida.
Auditoria
Auditoria trata-se do registro de eventos em nível de implementação, bem como eventos em nível de domínio que ocorrem em um sistema. Isso ajuda a proporcionar o não repúdio, o que significa que as alterações ou ações no sistema protegido são inegáveis. Auditoria pode fornecer não apenas informações técnicas sobre o sistema em execução, mas também prova de que ações específicas foram realizadas. As perguntas típicas respondidas pela auditoria são “Quem fez o quê, Quando e potencialmente Como?”
Vulnerabilidades
O NIST define vulnerabilidade como ‘Fragilidade em um sistema de informação, procedimentos de segurança do sistema, controles internos ou implementação que possa ser explorada ou desencadeada por uma fonte de ameaça.’
Existem muitas fragilidades ou bugs em todas as aplicações grandes, mas o termo vulnerabilidade é geralmente reservado para aquelas fragilidades ou bugs onde existe o risco de um agente de ameaça poder explorá-las usando um vetor de ameaça.
Vulnerabilidades de segurança bem conhecidas:
- Clickjacking
- Credential Stuffing
- Cross-site leaks
- Ataques de Negação de Serviço (DoS)
- Ataque de XSS baseado em DOM incluindo DOM Clobbering
- IDOR (Referência Direta Insegura a Objetos)
- Injeção incluindo Injeção de Comando do OS e XXE
- Ataques de injeção específicos de LDAP
- Poluição de protótipos
- Ataques de SSRF
- Injeção de SQL e o uso de Parametrização de queries
- Redirecionamentos e encaminhamentos não validados
- Ataques de XSS e Evasão de Filtro XSS
HTTP and HTML
Embora não seja uma segurança fundamental como tal, as aplicações web dependem de comunicações HTTP e HTML. Tanto os desenvolvedores de aplicações quanto os engenheiros de segurança devem ter um bom entendimento de HTTP e a linguagem HTML juntamente com seus vários controles de segurança.
A maioria das equipes de desenvolvimento de aplicações estará familiarizada com as comunicações HTTP e o padrão HTML mas, se necessário, consulte o treinamento do W3 Consortium ou da W3 Schools. O OWASP Cheat Sheet Series fornece aos desenvolvedores de aplicações web as informações necessárias para produzir software seguro:
- A folha de dicas HTML5 Security descreve uma grande variedade de controles, alinhados com o atual HTML Living Standard
- Consulte a folha de dicas para CSS Securing Cascading Style Sheets
- Os cabeçalhos HTTP precisam sem seguros, veja a folha de dicas HTTP Security Response Headers
- Considere fortemente HTTP Strict Transport Security
- Se a aplicação tem uma funcionalidade de upload de arquivo, siga a folha de dicas File Upload
- Certifique-se de que a política de segurança de conteúdo esteja em vigor usando a folha de dicas Content Security Policy
- Usando JWTs para uma aplicação Java? Consulte a folha de dicas JSON Web Token
- Armazenando our enviando objetos? Confira a folha de dicas Deserialization
Referências
- WHATWG HTML Living Standard
- OWASP Cheat Sheet Series
- OWASP Modelo de Maturidade de Software Assurance (SAMM)
O Guia do Desenvolvedor da OWASP é um trabalho da comunidade; se há algo que precisa ser mudado então submeta uma issue ou edite no GitHub.