Criar aplicações 100% seguras é um grande desafio para as organizações, embora algumas precauções sejam tomadas no que diz respeito ao desenvolvimento e deployment seguro, precisamos nos preocupar também com falhas e brechas que podem ser abertas por uso inadequado da parte dos usuários. É notório que muitas pessoas não costumam tomar as devidas precauções ao utilizar a internet, conteúdos muitas vezes duvidosos como links que oferecem recompensa por cliques por exemplo é algo muito compartilhado em redes sociais e aplicativos de comunicação. Em entrevista concedida à BBC sobre os 30 anos da World Wide Web (https://www.bbc.com/portuguese/geral-47536362) Tim Berners-Lee, o criador da mesma, mostra sua preocupação com o futuro da rede devido à desinformação dos usuários.

É nosso papel blindar as aplicações que desenvolvemos contra todo tipo de vulnerabilidade, sejam elas técnicas ou humanas. O volume 24 do ISTR (Internet Security Threat Report) relatório produzido pela Symantec em Fevereiro de 2019 revela os principais tipos de ataques feitos por cibercriminosos em 2018:

Formjacking

Resultado de imagem para Formjacking

O uso de código JavaScript para roubo de dados sensíveis como detalhes de cartão de crédito está entre os principais tipos de ataque. A cada mês cerca de 4800 websites são comprometidos com código malicioso. Os ataques frequentemente ocorreram em e-commerces varejistas de pequeno e médio porte, que vendem bens dos mais variados tipos.

Criptojacking

Resultado de imagem para Criptojacking

Criptojacking – o uso dos dispositivos de vítimas para a execução de código minerador de criptomoeda sem seu consentimento – teve uma pequena diminuição em comparação ao ano anterior, quando ocorreram cerca de 69 milhões de eventos desse tipo. A quantidade de ataques tem certa relação com a valorização de criptomoedas como o Monero, porém não na mesma proporção mostrando que para os cibercriminosos, ataques desse tipo ainda é algo rentável.

Email com conteúdo malicioso

Imagem relacionada

Outro ponto preocupante sobre os ataques, é a quantidade de emails utilizados para ataque, em média 48% dos e-mails recebidos por funcionários de pequenas e médias empresas contém arquivos Office com conteúdo malicioso.

Os anexos geralmente contém scripts que fazem download de malwares que infectam os computadores das vítimas abrindo portas para o comprometimento da rede corporativa.

Cloud

Imagem relacionada

O ponto fraco das aplicações em nuvem em 2018, segundo o ISTR, foi a má configuração dos recursos como banco de dados e armazenamento, o que levou à brechas de segurança que resultaram em mais de 70 milhões de registros roubados ou vazados. Vulnerabilidades também foram exploradas em serviços como Kubernetes e APIs públicas expostas sem os devidos cuidados com segurança. Existem diversas ferramentas para busca de falhas de segurança em aplicações sendo utilizadas pelos cibercriminosos.

Como manter nossas aplicações seguras?

Resultado de imagem para Como manter nossas aplicações seguras?

Podemos proteger nossas aplicações de ataques seguindo boas práticas de segurança em todas as etapas do ciclo de vida destas, do desenvolvimento ao deploy e hospedagem. A OWASP (Open Web Application Security Project) é uma organização sem fins lucrativos dedicada à segurança na web. Entre os diversos materiais oferecidos pela organização, está o OWASP Top 10, um relatório que lista as 10 vulnerabilidades mais críticas em aplicações web. A última versão do relatório foi publicada em 2017, e mostra além das vulnerabilidades, formas de evitar que as aplicações sejam comprometidas, iremos falar sobre algumas delas a seguir.

Injeção

Falhas de injeção como SQL, noSQL, OS ou LDAP, caracterizam-se pelo envio de dados não confiáveis à um interpretador como parte de um comando ou consulta. O atacante pode extrair dados sensíveis ou executar comandos sem autorização. A seguir temos um exemplo de query vulnerável à esse tipo de ataque:

String query = “SELECT * FROM contas WHERE id_cliente = ” + request.getParameter(“id”) + “;”;

No exemplo, um comando SQL mal intencionado pode ser injetado na query através do parâmetro sem tratamento no servidor.

Como evitar?

  • Evite o uso de concatenação de parâmetros, prefira APIs seguras como Mapeamento Objeto Relacional (ORM) ou declarações com tratativa de tipo.
  • Utilize validação server-side das entradas fornecidas.
  • Em comandos SQL utilize LIMIT ou outros controles para mitigar o risco de retorno massivo de registros.

Autenticação Quebrada

Quando uma aplicação possui autenticação vulnerável, permitindo aos atacantes acessarem dados das contas, podendo comprometer todo o sistema, caso os acessos contenham privilégios administrativos. Um exemplo comum de ataque, é o acesso ao sistema utilizando uma lista de possíveis senhas e força bruta para realizar a autenticação.

Como evitar?

  • Utilize autenticação multi-fator para impedir ataques como força bruta, por exemplo.
  • Não fazer o deploy das aplicações contendo credenciais padrão, principalmente às de administrador do sistema.
  • Utilize validação de senhas, não permitindo senhas fracas e comumente usadas.
  • Implemente políticas de rotatividade de senhas, com expiração automática.
  • Garanta o registro, recuperação de credenciais e acesso controlado à APIs.
  • Limite a quantidade de tentativas falhas de login.
  • Prefira controle de sessão server-side, evite o uso de cookies.

Exposição de Dados Sensíveis

Quando não existe proteção correta dos dados sensíveis como número de cartão de crédito, CPF, RG entre outros. Dessa forma, esses dados podem ser roubados e utilizados para roubo de identidade, fraude e outros crimes. Falta de criptografia para tráfego desse tipo de informação é uma falha comum que leva à esse tipo de vulnerabilidade.

Como evitar?

  • Identifique quais são os dados sensíveis de sua aplicação.
  • Não armazene dados sensíveis desnecessariamente, descartando-as assim que possível.
  • Use criptografia ao trafegar os dados, protocolos criptografados como HTTPS garantem uma transmissão segura de ponta a ponta.
  • Não utilize cache para dados sensíveis.
  • Não armazene senhas como texto puro, utilize funções hash para armazenamento e verificação.

XXE (Entidades XML Externas)

Processadores XML antigos processam referências à entidades XML externas dentro do próprio documento, permitindo o uso dessas entidades para descoberta de arquivos internos, execução remota de código, scanning de porta e ataques DDoS.

Como evitar?

  • Se possível, utilize formatos de dado menos complexos como JSON.
  • Utilize as versões mais atualizadas de processadores XML.
  • Implemente validação server-side das entradas de arquivo XML utilizando filtro “whitelist”.

Controle de Acesso Quebrado

Quando restrições sobre o que um usuário autenticado pode fazer não são aplicadas corretamente, permitimos que atacantes acessem funcionalidades ou dados não autorizados. Um usuário mal intencionado pode por exemplo tentar forçar o acesso à URLs administrativas: https://aplicacao.com.br/perfil https://aplicacao.com.br/admin

Como evitar?

  • Permita acesso livre apenas aos recursos públicos da aplicação, quanto ao restante restrinja aos perfis específicos.
  • Salve logs das ações realizadas pelos usuários
  • Desabilite a listagem de arquivos no servidor

Configurações Incorretas de Segurança

Uma das vulnerabilidades mais vistas, é a configuração incorreta de servidores, banco de dados etc. no que diz respeito à segurança. Muitos utilizam as configurações padrão, deixam seus serviços de armazenamento abertos, permitem mensagens de erro não tratadas, exibindo informações críticas de segurança aos usuários. Como evitar?

  • Remova ou bloqueie features desnecessárias à sua aplicação de servidores.
  • Desabilite quaisquer portas padrão que estejam expostas no seu servidor e não são utilizadas. Ex. ssh.
  • Não exiba mensagens de erro com a stacktrace ou com detalhes sobre a segurança de sua aplicação.
  • Remova quaisquer aplicações de exemplo que podem vir junto com alguns servidores. Ex.: página de boas vindas do Apache.

Uso de componentes com vulnerabilidades conhecidas

Resultado de imagem para Uso de componentes com vulnerabilidades conhecidas

O uso de componentes, bibliotecas ou frameworks com os mesmos privilégios da aplicação pode abrir brechas para atacantes explorarem suas falhas e obterem acesso privilegiado à recursos importantes.

Como evitar?

  • Remova dependências desnecessárias de seus projetos
  • Sempre utilize componentes de fontes oficiais e repositórios com links seguros e populares.
  • Desconfie de componentes que não são mantidos com frequência ou não recebem patches de segurança.
  • Realize scan de segurança de seus componentes utilizando ferramentas de check de dependências.

Essas são algumas das vulnerabilidades comuns listadas no ranking da OWASP, e as técnicas propostas para evitá-las. Como dito no começo deste artigo, nem todos os usuários da web tem conhecimento sobre as formas de evitar ataques e as precauções que precisam ser tomadas para o uso responsável da internet, mas nós como desenvolvedores, administradores e engenheiros devemos assegurar que mesmo mediante falhas humanas, nossos sistemas continuem confiáveis e seguros.