Site icon SegInfo – Portal, Podcast e Evento sobre Segurança da Informação

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:

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.

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:

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

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.

Figura 2 Fonte: tutorialrepublic.com

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

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:

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.

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:

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:

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:

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:

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:

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:

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:

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:

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