OWASP Top 10 de 2021 – Parte Final

O OWASP Top 10 2021 é uma valiosa referência que identifica as principais vulnerabilidades em aplicações web e fornece orientações sobre como preveni-las.

Avatar


29 de Novembro de 2023

Olá, querido (a) aluno(a)!

Continuando o estudo sobre o OWASP Top 10 (Este é o sexto e último artigo sobre o tema!) 

As vulnerabilidades de segurança em aplicações web são uma ameaça constante que pode comprometer a integridade, confidencialidade e disponibilidade dos dados. O OWASP Top 10 2021 é uma valiosa referência que identifica as principais vulnerabilidades em aplicações web e fornece orientações sobre como preveni-las. Neste artigo, focaremos no tópico “Próximos Passos” do guia OWASP Top 10 2021.

A11:2021 – Próximos Passos

A lista OWASP Top 10 é uma referência conhecida que destaca os dez riscos mais críticos de segurança em aplicações web. Contudo, há riscos adicionais na fronteira de serem incluídos que, embora não façam parte dos dez principais, permanecem importantes e merecem atenção. Mesmo que os dados não os coloquem entre os mais prevalentes ou com maior impacto para estar no Top 10, eles não devem ser ignorados.

Para organizações que buscam aprimorar sua segurança de aplicativos e consultores de segurança, ou ainda para provedores de ferramentas que querem ampliar o alcance de seus produtos, é recomendável prestar atenção e tratar os três principais riscos em potencial. Esses riscos, embora não listados como os principais pelo OWASP Top 10, ainda são relevantes para a manutenção da segurança robusta das aplicações web.

  1. Problemas de qualidade do código

Questões de qualidade de código abrangem uma variedade de falhas, desde problemas de segurança conhecidos e padrões inadequados até reutilização imprópria de variáveis, vazamento de dados sensíveis por saídas de depuração, imprecisões de arredondamento, vulnerabilidades de tempo de verificação versus tempo de uso (TOCTOU), e desvios em conversões de tipos assinados e não assinados, além de uso após liberação de memória. A característica distintiva dessas questões é a sua detectabilidade por meio de configurações de compilador mais estritas, uso de ferramentas de análise de código estático e extensões de lint para ambientes de desenvolvimento integrados (IDEs). Linguagens modernas de programação como Rust, com seu sistema de propriedade de memória, e Go, com checagem rigorosa de tipos e limites, já resolvem muitos desses problemas por padrão.

Estratégias de Prevenção:

Para evitar tais falhas, é recomendável utilizar plenamente as funções de análise de código estático disponíveis no seu editor de código ou IDE. Empregar ferramentas especializadas de análise estática pode proporcionar uma camada adicional de segurança. Além disso, considere a possibilidade de adotar ou migrar para uma linguagem de programação ou framework que inerentemente previne certas categorias de erros, como Rust ou Go, que oferecem recursos avançados de segurança de memória e checagem de tipos.

Cenário de Ataque Hipotético:

Um atacante poderia explorar uma condição de corrida, obtendo ou manipulando dados, ao utilizar uma variável que é compartilhada estática e indevidamente entre múltiplas threads de execução. Esta condição de corrida pode resultar em comportamentos imprevisíveis do aplicativo e potencial comprometimento de dados.

  1. Negação de serviço

As questões de qualidade de código englobam um leque de problemas que vão desde vulnerabilidades e práticas inseguras já conhecidas até a inapropriada reutilização de variáveis para diferentes finalidades, a revelação involuntária de dados sensíveis em logs de depuração, falhas de aritmética de ponto flutuante, vulnerabilidades do tipo tempo de verificação vs. tempo de uso (TOCTOU), além de erros oriundos da conversão entre tipos de dados com e sem sinal, e uso de recursos já liberados (use-after-free). Um indicativo comum dessas falhas é que frequentemente são identificáveis através de configurações de compilação estritas, ferramentas de análise estática e extensões de linting para ambientes de desenvolvimento. Novos paradigmas de linguagem, como a gestão de memória e verificação de empréstimos em Rust, e a checagem estrita de limites em Go, reduzem significativamente a ocorrência desses erros.

Precauções:

Ative e faça uso integral das funcionalidades de análise estática em seu ambiente de desenvolvimento. Avalie a adoção de ferramentas avançadas de análise estática. Pondere a possibilidade de transição para linguagens ou frameworks que naturalmente minimizam ou eliminam certos tipos de falhas, exemplificando com Rust ou Go, que oferecem robustos sistemas de segurança de memória e tipos.

Exemplo de cenário de ataque:

Imagine um cenário onde um atacante capitaliza uma condição de corrida que surge da utilização inadequada de uma variável estática acessada por múltiplas threads concorrentemente, o que pode permitir a leitura ou alteração não autorizada de informações.

Vamos ver como essa teoria poderá vir ou já vieram em questões de concurso?

1) questão autoral (2022)

Assinale a alternativa correta em relação aos problemas de qualidade de código:

A) Problemas de qualidade de código são exclusivamente relacionados a erros de segurança e não incluem questões de eficiência ou manutenibilidade do código.

B) Problemas como reutilização de variáveis, vazamento de dados por saídas de depuração e vulnerabilidades de tempo de verificação versus tempo de uso (TOCTOU) não são detectáveis por ferramentas de análise de código estático ou configurações de compilador estritas.

C) Linguagens modernas como Rust e Go podem reduzir a prevalência de problemas de qualidade de código devido a sistemas de segurança de memória e checagem de tipos e limites.

D) A utilização de ferramentas de análise de código estático e extensões de lint para ambientes de desenvolvimento integrados (IDEs) não contribui significativamente para a identificação e prevenção de problemas de qualidade de código.

E) Migrar para uma linguagem de programação ou framework que previne certas categorias de erros é desaconselhável, pois pode introduzir mais complexidade ao ambiente de desenvolvimento sem benefícios significativos de segurança.

Gabarito : C

Comentário: 

“Linguagens modernas como Rust e Go podem reduzir a prevalência de problemas de qualidade de código devido a sistemas de segurança de memória e checagem de tipos e limites.” Essa afirmação é verdadeira porque Rust e Go são projetados para evitar muitos problemas comuns de segurança de memória e de gerenciamento de tipos, que são fontes frequentes de bugs em outras linguagens. Rust, por exemplo, utiliza um sistema de propriedade de memória que previne condições de corrida e erros de acesso a memória, enquanto Go tem um sistema de tipos robusto e verificações de limites para prevenir overflows e outros bugs relacionados a tipos. As demais alternativas são falsas: A) ignora problemas de eficiência e manutenibilidade; B) e D) são incorretas porque as ferramentas de análise de código estático e configurações de compilador estritas são justamente úteis para detectar uma gama de problemas de qualidade de código; e E) é falso pois a migração para linguagens mais seguras pode oferecer benefícios significativos de segurança, embora possa haver trade-offs como curva de aprendizado ou adaptação do código existente.

2) Ano: 2023 Banca: VUNESP Órgão: TCM-SP Prova: VUNESP – 2023 – TCM-SP – Auditor de Controle Externo – Especialidade: Tecnologia da Informação

Ataques de negação de serviço (Denial of Service – DoS) podem ser realizados de diversas formas, como por meio 

A) da interceptação de tráfego, inspecionando os dados trafegados em redes de computadores, utilizando programas específicos para a captura de informações sensíveis, como senhas.

B) da descoberta, por tentativa e erro, da senha de um usuário conhecido de um computador ligado à Internet, para então ser possível acessar sites, computadores e serviços em nome desse usuário.

C) do envio de grande quantidade de requisições para um serviço de um computador atacado, consumindo os recursos necessários ao seu funcionamento, o que impede que as requisições dos demais usuários sejam atendidas. 

D) do furto de senhas de acesso à interface Web usada para administração remota de um computador ligado à Internet.

E) do mascaramento de pacotes IP com endereços remetentes falsificados, impedindo que o atacante seja identificado.

Gabarito: C.

Comentário: 

Ataques DoS são realizados por meio do envio de uma grande quantidade de requisições a um computador ou rede, sobrecarregando os recursos do sistema até que ele não consiga mais responder aos usuários legítimos. Isso pode ser feito de várias maneiras, incluindo, mas não limitado a, requisições de rede esmagadoras, solicitações de conexão TCP/IP em massa ou exploração de vulnerabilidades de segurança que causam esgotamento de recursos ou travamentos do sistema.

As demais opções descrevem outros tipos de ataques cibernéticos que não são classificados como DoS:

A alternativa A descreve um ataque de interceptação de tráfego, também conhecido como sniffing.

A alternativa B está descrevendo um ataque de força bruta para adivinhar senhas.

A alternativa D descreve um roubo de credenciais de acesso.

A alternativa E descreve uma técnica de spoofing de IP, que pode ser usada em ataques DoS, mas por si só, apenas mascarar pacotes IP não constitui um ataque DoS.

Então é isso! 

Bons estudos e até o nosso próximo artigo.

Prof. Jósis Alves

Analista de TI no Supremo Tribunal Federal


Quer ficar por dentro dos concursos públicos abertos e previstos pelo Brasil?
Clique nos links abaixo:

CONCURSOS ABERTOS

CONCURSOS 2023

Receba gratuitamente no seu celular as principais notícias do mundo dos concursos!
Clique no link abaixo e inscreva-se gratuitamente:

TELEGRAM

Avatar


29 de Novembro de 2023