Um guia para codificação segura do OWASP

As organizações modernas dependem muito de software e sistemas. Os padrões de codificação seguros são significativos, pois dão alguma garantia de que o software instalado no sistema da organização está protegido contra falhas de segurança. Esses padrões de segurança, quando usados ​​corretamente, podem evitar, identificar e remover lacunas que podem comprometer a integridade do software. Além disso, seja desenvolvendo software para dispositivos portáteis, sistemas de desktop ou servidores, a codificação segura é crítica para o desenvolvimento de software moderno.

As organizações modernas dependem muito de software e sistemas. Os padrões de codificação seguros são significativos, pois dão alguma garantia de que o software instalado no sistema da organização está protegido contra falhas de segurança. Esses padrões de segurança, quando usados ​​corretamente, podem evitar, identificar e remover lacunas que podem comprometer a integridade do software. Além disso, seja desenvolvendo software para dispositivos portáteis, sistemas de desktop ou servidores, a codificação segura é crítica para o desenvolvimento de software moderno.

De acordo com o Software Engineering Institute, as falhas de arquitetura ou codificação de software são responsáveis ​​por até 90% dos problemas de segurança. Portanto, é por isso que as técnicas e diretrizes de codificação seguras são essenciais.

Existem várias abordagens para criar aplicativos com segurança, como CERT Coding Standards, Common Weakness Enumeration, etc. Mas o OWASP (Open Web Application Security Project) oferece critérios de codificação seguros bem meticulosos.

As medidas tecnológicas relacionadas à minimização da incidência de bugs de software são o tema da Lista de Verificação OWASP. Embora os aplicativos da web e a arquitetura que os acompanha sejam as ênfases principais, a maioria das recomendações se aplica a qualquer ambiente de implantação de software.

Validação de entrada

A validação de entrada garante que apenas a entrada formatada corretamente entre em um banco de dados e evita que dados errôneos permaneçam no banco de dados e façam com que os elementos subsequentes falhem.

A validação de entrada deve ser colocada no fluxo de dados o mais rápido possível, de preferência tão rapidamente quanto o sistema obtém a entrada do usuário.

A entrada é rigorosamente verificada quanto a quaisquer variáveis ​​que levem o software a agir de forma estranha, o que pode causar ameaças como injeção e script entre sites.

De acordo com a lista de verificação OWASP, algumas técnicas para ficar seguro de validações de entrada são:

• Realizar todas as validações de dados em um sistema confiável;

Deve haver uma rotina de validação de entrada centralizada para o aplicativo;

Verificar se os valores do cabeçalho em solicitações e respostas contêm apenas caracteres ASCII;

Validar todas as entradas em uma lista “branca” de caracteres permitidos sempre que possível; e

Se quaisquer caracteres potencialmente perigosos devem ser permitidos como entrada, certificar-se de implementar controles adicionais como codificação de saída, APIs específicas de tarefas seguras e contabilidade para usar esses dados em todo o aplicativo. Exemplos de caracteres perigosos comuns incluem: <> “‘% () & + \ \’ \”

Vamos dar uma olhada em um exemplo:

As organizações modernas dependem muito de software e sistemas. Os padrões de codificação seguros são significativos, pois dão alguma garantia de que o software instalado no sistema da organização está protegido contra falhas de segurança. Esses padrões de segurança, quando usados ​​corretamente, podem evitar, identificar e remover lacunas que podem comprometer a integridade do software. Além disso, seja desenvolvendo software para dispositivos portáteis, sistemas de desktop ou servidores, a codificação segura é crítica para o desenvolvimento de software moderno.
Figura 1 Fonte: w3schools. Snippet de código de validação de JavaScript

Existe um campo obrigatório aqui: Nome. Use w3schools para executar esta demonstração. Você verá um alerta dizendo “O nome deve ser preenchido” se ignorar o campo e clicar em enviar. É uma validação de entrada utilizando JavaScript.

Output Encoding

Quando o usuário insere dados, o software deve codificá-los antes da saída. O processo de codificação de saída envolve a conversão de caracteres especiais em um formato distinto, mas idêntico, que não é mais perigoso para o tradutor de destino. Vários ambientes de codificação, como .Net Core, incluem codificação de saída integrada.

De acordo com a lista de verificação OWASP, algumas técnicas para usar a codificação de saída são:

Utilizar uma rotina padrão testada para cada tipo de codificação de saída;

A saída contextualmente codifica todos os dados retornados ao cliente originados fora do limite de confiança do aplicativo. A codificação de entidade HTML é um exemplo, mas não funciona em todos os casos; e

Limpar contextualmente todas as saídas de dados não confiáveis ​​para consultas de SQL, XML e LDAP.

Estou usando o script de alerta XSS para codificação / escape de saída como exemplo: Use o freeformatter para executar esta demonstração.

As organizações modernas dependem muito de software e sistemas. Os padrões de codificação seguros são significativos, pois dão alguma garantia de que o software instalado no sistema da organização está protegido contra falhas de segurança. Esses padrões de segurança, quando usados ​​corretamente, podem evitar, identificar e remover lacunas que podem comprometer a integridade do software. Além disso, seja desenvolvendo software para dispositivos portáteis, sistemas de desktop ou servidores, a codificação segura é crítica para o desenvolvimento de software moderno.

Autenticação e gerenciamento de senha

As senhas são um dos métodos de autenticação de usuário menos seguros, mas também são frequentemente usadas para aplicativos da web para proteger dados online.

A autenticação é o procedimento de confirmação de que uma pessoa, organização ou site é quem se diz ser. O gerenciamento de senhas é uma coleção de diretrizes e procedimentos que os indivíduos devem adotar enquanto salvam as senhas para manter a confidencialidade e a disponibilidade dos ativos.

OWASP recomenda os seguintes métodos:

  • Implementar o monitoramento para identificar ataques contra várias contas de usuário, utilizando a mesma senha;
  • Implementar hash de senha em um sistema confiável;
  • As respostas de falha de autenticação não devem indicar qual parte dos dados de autenticação estava incorreta. Por exemplo, em vez de “Nome de usuário inválido” ou “Senha inválida”, apenas use “Nome de usuário e / ou senha inválidos” para ambos. As respostas de erro devem ser verdadeiramente idênticas na exibição e no código-fonte;
  • Aplicar os requisitos de comprimento de senha estabelecidos por política ou regulamento;
  • Exigir autenticação para todas as páginas e recursos, exceto aqueles especificamente destinados ao público;
  • Todas as funções administrativas e de gerenciamento de contas devem ser pelo menos tão seguras quanto o mecanismo de autenticação principal; e
  • Usar a autenticação multifator para contas transacionais altamente confidenciais ou de alto valor.

De acordo com o relatório de comportamento de segurança de senha e autenticação de 2020:

  • 50% dos respondentes de TI e 39% dos usuários usam a mesma senha em contas organizacionais.
  • 56% das pessoas que usam gadgets pessoais para acessar informações de trabalho não utilizam autenticação de dois fatores.

Gerenciamento de sessão

O gerenciamento de sessão é o procedimento de processamento seguro de muitas solicitações de um determinado usuário ou organização para um aplicativo baseado na web. O HTTP o usa para interagir entre páginas da web e navegadores, e uma sessão é uma coleção de solicitações e ações HTTP iniciadas por uma única pessoa.

O código PHP no cenário a seguir cria uma nova sessão.

As organizações modernas dependem muito de software e sistemas. Os padrões de codificação seguros são significativos, pois dão alguma garantia de que o software instalado no sistema da organização está protegido contra falhas de segurança. Esses padrões de segurança, quando usados ​​corretamente, podem evitar, identificar e remover lacunas que podem comprometer a integridade do software. Além disso, seja desenvolvendo software para dispositivos portáteis, sistemas de desktop ou servidores, a codificação segura é crítica para o desenvolvimento de software moderno.
Figura 2 Fonte: tutorialrepublic.com

De acordo com o OWASP, a seguir estão entre as melhores práticas:

  • Definição do domínio e o caminho para os cookies que contêm identificadores de sessão autenticada com um valor restrito apropriado para o siteç
  • A funcionalidade de logout deve estar disponível em todas as páginas protegidas por autorização;
  • Gere um novo identificador de sessão em qualquer reautenticação;
  • Defina o atributo “seguro” para cookies transmitidos por uma conexão TLS:
  • Os controles de gerenciamento de sessão devem usar algoritmos bem avaliados que garantem identificadores de sessão suficientemente aleatórios: e
  • Estabeleça um tempo limite de inatividade da sessão o mais curto possível, com base no equilíbrio entre risco e requisitos funcionais de negócios.

Controle de acesso

A prática de autorizar ou recusar solicitações específicas de uma pessoa, aplicativo ou procedimento é conhecida como controle de acesso. O processo de dar e remover credenciais também faz parte do controle de acesso. É o serviço de segurança essencial para uma boa parte do software e também é suportado pela maioria de muitos outros serviços de segurança.

Algumas abordagens de controle de acesso estão listadas abaixo, de uma grande variedade:

  • Restrinja o acesso a funções protegidas apenas a usuários autorizados;
  • Negue todo o acesso se o aplicativo não puder acessar suas informações de configuração de segurança;
  • Use apenas objetos de sistema confiáveis, por exemplo, objetos de sessão do lado do servidor, para tomar decisões de autorização de acesso;
  • Crie uma Política de Controle de Acesso para documentar as regras de negócios de um aplicativo, tipos de dados e critérios e processos de autorização de acesso para que o acesso possa ser provisionado e controlado adequadamente; e
  • Restrinja o acesso aos dados do aplicativo apenas a usuários autorizados.

A identificação e o gerenciamento de acesso dependem principalmente de autenticação e autorização. Imagine o seguinte cenário.

Suponha que você precise entrar em uma das redes de intranets de sua empresa para obter alguns documentos.

  • Você pode se identificar inserindo suas credenciais de login no formulário de login;
  • Você confirma sua identidade inserindo sua senha correspondente para obter acessibilidade à página por meio de autenticação; e
  • Os direitos de acesso que seu administrador de sistema atribui a você são conhecidos como autorização. Quando você verifica sua identidade e se inscreve no serviço, esses controles de acesso definem quais ações você pode executar com os documentos.

Práticas criptográficas

As práticas criptográficas são empregadas para manter a confidencialidade e integridade das informações. Diferentes abordagens criptográficas, como criptografia de chave simétrica ou criptografia de chave pública, podem ser implantadas durante a transferência de informações e armazenamento, dependendo das demandas de segurança e dos riscos presentes.

Por exemplo, a criptografia na vida diária se refere a vários cenários em que a criptografia fornece um serviço seguro, como retirada de dinheiro de um banco, navegação segura na web, e-mails e armazenamento de dados e o uso de um smartphone celular.

A seguir estão algumas das práticas criptográficas:

  • Módulos criptográficos devem falhar com segurança;
  • Estabeleça e utilize uma política e processo para como as chaves criptográficas são gerenciadas;
  • Proteja os segredos principais contra acesso não autorizado; e
  • Todas as funções criptográficas usadas para proteger os segredos devem ser implementadas em um sistema confiável.

Tratamento e registro de erros

O tratamento de erros refere-se aos processos usados ​​para lidar com resultados inesperados quando um programa ou software recebe uma entrada incomum. Problemas de tratamento de erros podem expor muitos detalhes sobre a vítima e podem encontrar locais de entrada nas características da vítima.

Pesquisadores da Universidade de Toronto descobriram que mesmo pequenos erros no tratamento de erros ou a falha em resolver problemas de qualquer forma resultam em falhas graves em sistemas distribuídos.

Na instância abaixo, você pode ver um erro de consulta SQL, juntamente com o local de instalação do site para encontrar um ponto de entrada fraco.

O registro mantém um registro das modificações em qualquer aplicativo. Por exemplo, um invasor procura indivíduos que usam as mesmas credenciais. Os atacantes podem usar essas credenciais para obter acesso a todas as contas. Como pode não haver registro ou rastreamento de tais ocorrências de eventos, os invasores podem realizar o mesmo ataque após várias semanas com novas credenciais.

Algumas abordagens de manuseio de erros e registro estão listadas abaixo, de uma variedade diversa:

  • Use manipuladores de erros que não exibam informações de depuração ou rastreamento de pilha;
  • Libere adequadamente a memória alocada quando ocorrerem condições de erro;
  • Os controles de registro devem oferecer suporte ao sucesso e à falha de eventos de segurança especificados;
  • Registre todas as falhas de validação de entrada;
  • Registre todas as tentativas de autenticação, especialmente as falhas;
  • Use uma função hash criptográfica para validar a integridade da entrada de log; e
  • Implemente mensagens de erro genéricas e use páginas de erro personalizadas.

Proteção de dados

Os atacantes podem roubar dados em uma variedade de métodos de aplicativos online e da web. Furtos de dados são ocorrências comprovadas que podem causar a entrada ou exposição ilícita de informações críticas, privadas ou outras informações protegidas. Portanto, a proteção de dados é o procedimento para evitar que informações essenciais sejam adulteradas, comprometidas ou perdidas.

De acordo com o OWASP, a seguir estão entre as melhores práticas:

  • Remova a documentação desnecessária do sistema de aplicativos, pois isso pode revelar informações úteis aos invasores;
  • Desative os recursos de preenchimento automático em formulários que devem conter informações confidenciais, incluindo autenticação;
  • Implementar privilégios mínimos – restrinja os usuários apenas à funcionalidade, aos dados e às informações do sistema necessários para executar suas tarefas; e
  • Implemente controles de acesso apropriados para dados confidenciais armazenados no servidor. Isso inclui dados em cache, arquivos temporários e dados acessíveis apenas por usuários específicos do sistema.

Segurança de comunicação

Segurança de comunicação é a prática de impedir que interceptores ilegais obtenham telecomunicações compreensíveis e, ao mesmo tempo, enviar informações aos receptores.

A criptografia protege todos os dados confidenciais. O protocolo de segurança TLS (Transport Layer Security) é usado em combinação com vários métodos de criptografia para proteger as comunicações.

A invasão de e-mail é uma violação prevalente de segurança de comunicação. Por exemplo, em 2019, os invasores invadiram 773 milhões de e-mails do Outlook.

De acordo com a lista de verificação OWASP, algumas técnicas para segurança de comunicação são:

  • Utilizar uma única implementação de TLS padrão que seja configurada apropriadamente;
  • Implementar criptografia para a transmissão de todas as informações confidenciais;
  • Especificar a codificação de caracteres para todas as conexões; e
  • Parâmetros de filtro que contêm informações confidenciais do referenciador HTTP ao vincular a sites externos.

Configuração do sistema

A configuração do sistema se refere ao hardware do computador, procedimentos e elementos distintos que compõem o sistema completo e seus limites. Para obter direitos de administração ilegal ou informações sobre o sistema, os atacantes frequentemente tentam atacar pontos fracos não corrigidos ou obter exposição a contas padrão, sistemas de arquivos não protegidos e assim por diante.

Para configurações do sistema, use os critérios abaixo:

  • Restrinja o servidor da web, o processo e as contas de serviço com o mínimo de privilégios possível;
  • Defina quais métodos HTTP, Get ou Post, o aplicativo suportará e se ele será tratado de forma diferente em páginas diferentes no aplicativo;
  • Implemente um sistema de gerenciamento de ativos e registre os componentes do sistema e software nele; e
  • Remova o código de teste ou qualquer funcionalidade não destinada à produção antes da implantação.

Segurança de banco de dados

O termo segurança de banco de dados está relacionado a um conjunto de tecnologias, políticas e procedimentos para garantir e manter tríades de Confidencialidade, Integridade e Disponibilidade (CID) do banco de dados.

Em 2020, de acordo com a Microsoft, um banco de dados interno de suporte ao cliente contendo registros de usuários anônimos foi publicado online involuntariamente. Cerca de 250 milhões de dados de clientes da Microsoft vazaram publicamente sem a segurança de senha.

Jeremiah Fowler, um pesquisador de segurança, descobriu, em fevereiro, que um banco de dados pertence à Estee Lauder. O banco de dados desprotegido, de acordo com Fowler, comprometeu dados privados mantidos em mais de 440 milhões de identidades de clientes.

A injeção de SQL é o ataque comum que explora a segurança do banco de dados. Por exemplo, como OR “” = “” é sempre TRUE, o SQL recuperará todas as entradas da tabela “Usuários”.

Figura 3 fonte: w3schools

A seguir estão algumas estratégias de segurança de banco de dados:

  • Use credenciais seguras para acesso ao banco de dados;
  • Use procedimentos armazenados para abstrair o acesso aos dados e permitir a remoção de permissões para as tabelas base no banco de dados;
  • Desligue todas as funcionalidades desnecessárias do banco de dados;
  • Desative todas as contas padrão que não são necessárias para oferecer suporte aos requisitos de negócios; e
  • Utilize validação de entrada e codificação de saída e certifique-se de endereçar metacaracteres. Se eles falharem, não execute o comando do banco de dados.

Gerenciamento de arquivos

O gerenciamento de arquivos trata da proteção de dados confidenciais de atacantes intrometidos, aplicando políticas rígidas de gerenciamento de direitos e mantendo a autorização.

Os administradores do sistema podem estabelecer limitações, privilégios e responsabilidades de arquivos usando um sistema de gerenciamento de arquivos. Isso melhora a eficácia, pois envolve atribuir funções a indivíduos e permitir vários tipos de acessibilidade aos arquivos.

De acordo com o ITRC e o Departamento de Saúde e Serviços Humanos dos Estados Unidos, o maior roubo de dados afetou mais de 98,2 milhões de pessoas durante o primeiro trimestre de 2021.

Abaixo estão algumas estratégias fornecidas pelo OWASP:

  • Limite os tipos de arquivos que podem ser carregados apenas para os tipos necessários para fins comerciais;
  • Impedir ou restringir o upload de qualquer arquivo que possa ser interpretado pelo servidor web;
  • Nunca envie o caminho absoluto do arquivo para o cliente; e
  • Faça a varredura de arquivos carregados pelo usuário em busca de vírus e malware.

Gerenciamento de memória

Gerenciamento de memória são técnicas usadas para manter software e informações na memória e monitorar sua utilização e recuperar a memória do sistema sempre que possível.

Por arquiteto-chefe de segurança, Schneider Electric;

“Ataques baseados em memória estão acontecendo ao nosso redor e ninguém parece querer falar sobre isso porque não há muitas defesas contra eles. A Virsec tem uma solução extraordinária e eficaz para a defesa contra ataques baseados em memória. Esses caras são monstros nisso. ”

Para gerenciar a memória com eficácia, você pode realizar as seguintes medidas:

  • Verifique novamente se o buffer é tão grande quanto o especificado;
  • Libere apropriadamente a memória alocada após a conclusão das funções e em todos os pontos de saída;
  • Especificamente, recursos próximos; não confie na coleta de lixo. (por exemplo, objetos de conexão, identificadores de arquivo, etc.); e
  • Verifique os limites do buffer ao chamar a função em um loop e certifique-se de que não haja perigo de gravação além do espaço alocado.

Conclusão

Integrar as abordagens mencionadas acima em seu programa e aplicativos online implantando-as na produção ajudará a protegê-lo contra vários ataques que podem violar a tríade de confidencialidade, integridade e disponibilidade.

Fonte: cybersecurity.att.com

Posts relacionados: OWASP Top 10 Liberadas as Vulnerabilidades principais de 2021 / Você conhece o projeto OWASP Top 10 Privacy Risks? e 21 melhores ferramentas gratuitas de Segurança da Informação