Este é o segundo artigo de uma série voltada à gestão de Segurança da Informação para startups. No primeiro post vimos que uma má gestão de Segurança da Informação pode acarretar diversos riscos para o negócio e que as consequências podem ser graves, podendo até inviabilizar a sua continuidade.
Seja um website completo ou apenas o back-end, startups dependem de soluções predominantemente online, tanto para sustentar seus negócios quanto para cumprir os seus requisitos de escalabilidade.
No entanto, há diversas ameaças relacionadas a essa abordagem, que podem acarretar lucros cessantes da empresa, danos de reputação e outros contratempos.
O intuito deste artigo é mostrar como os cibercriminosos exploram as vulnerabilidades, desde explorações diretas (e.g.: SQLi) até de maneira organizada (e.g.: exploit kit), mas não excluem startups como alvo.
Ameaças da internet
Não há como escrever sobre segurança de aplicações web sem citar o OWASP Top 10. A página trata-se da lista das 10 principais falhas de segurança web, na qual se descreve como evitá-las e corrigi-las, além de disponibilizar algumas ferramentas open source que viabilizam uma análise.
Dessa forma, o OWASP Top 10 destaca-se como uma fonte importante tanto de informação em segurança, quanto no estabelecimento de um guia para testar aplicações web.
A lista é divulgada pela OWASP Foundation, após a coleta de estatísticas de vulnerabilidades web da indústria. A última divulgação do Top 10 foi em 2013 e agora está planejada uma nova divulgação entre 2016 e 2017.
OWASP TOP 10
As 10 principais falhas de segurança, segundo relatório do OWASP Top 10 de 2013, estão apresentadas na figura abaixo.
Tendo como base o OWASP Top 10, vamos conhecer duas ameaças que uma aplicação deve enfrentar quando está exposta na internet: SQL Injection e Exploit kits.
SQL Injection: Roubo de dados, acesso não-autorizado, comando remoto
No topo da lista está a injeção [de código malicioso em sites]. Este tipo de falha é responsável por boa parte dos incidentes relacionados a roubos de dados. No entanto, essa falha também pode ser explorada para obter acesso privilegiado a sistemas, ou mesmo executar comandos remotamente no servidor de banco de dados.
Apesar de haver outras formas de injeção, a mais comum e notória é SQL Injection (SQLi), utilizada para injetar comandos SQL em variáveis de URLs que serão processadas, de maneira a executar tal comando no banco de dados da aplicação. Assim, se realizado com êxito, o adversário ganha a capacidade de executar comandos no banco de dados remotamente.
Dependendo de como está a configuração do banco de dados, o usuário de banco, que agora pode ser controlado remotamente pelo atacante, pode ter permissões suficientes nas tabelas e nos bancos de dados para realizar comandos como dump e drop.
Não se atentar contra esse tipo de ataque pode acarretar em risco de exposição de dados sigilosos (e.g.: DUMP) ou downtimes (e.g.: DROP), que podem ser muito prejudiciais para as operações e a imagem da startup no mercado.
Apesar de contar com quase duas décadas de existência, SQLi é uma forma de ataque que continua sendo bastante predominante hoje em dia. Segundo o relatório IBM X-Force Threat Intelligence de 2016, SQLi é responsável por 4.1% de todos os ciberataques.
Esse ataque é tão comum, que, ironicamente, até mesmo o MySQL.com já foi vítima, assim como outras tantas possuem lugar cativo no SQLi Hall-of-Shame.
Exploit kits: uma indústria do cibercrime
Uma ameaça muito comum, sobretudo no Brasil, é o uso de exploit kits por parte dos cibercriminosos, que são usados para executar exploits no computador do usuário com o intuito de cumprir algum fim malicioso (falaremos melhor sobre o assunto no próximo artigo da série); assim que o usuário acessa o site malicioso, o navegador realiza o download de um malware no computador da vítima e o executa de maneira silenciosa, o que é usualmente chamado de drive-by download.
Com o intuito de atrair vítimas para seus sites maliciosos, cibercriminosos frequentemente exploram vulnerabilidades em sites legítimos a fim de injetar pequenas páginas ou scripts que redirecionem o navegador da vítima para a página maliciosa, usurpando assim a reputação do site legítimo e disseminar ataques.
Por vezes, os cibercriminosos simplesmente realizam o upload do malware no site legítimo e depois realizam campanhas de phishing, contendo links que redirecionam as vítimas para a URL recém-criada no site legítimo.
Em ambos casos, os cibercriminosos exploram falhas de segurança para incluir conteúdos maliciosos no site legítimo, seja acessando páginas administrativas expostas na Internet [A2], pelo uso inseguro de FTP para a administração de conteúdo do site [A5], exploração de vulnerabilidades da infraestrutura ou aplicação [A9] e outras falhas listadas no OWASP top 10.
O revés que uma startup pode ter quando códigos maliciosos são injetados em seu site começa quando seu domínio é adicionado em blacklists de sites maliciosos. A partir desse momento, visitantes que utilizam soluções de segurança, baseadas nessas blacklists, vão passar a se deparar com mensagens de aviso sobre conteúdo malicioso no site, além de, dependendo de como está configurada essa filtragem de conteúdo, serem completamente impedidos de visitar o site.
Dessa forma, não apenas a credibilidade da marca é afetada, mas também pode haver impacto financeiro direto, em negócios como e-commerce, por exemplo. Para se ter ideia do impacto potencial dessa ameaça, o próprio navegador Chrome, por padrão, possui esse tipo de proteção, o que corresponde a 48.64% do market share de navegadores.
Combatendo as ameaças: Segurança por design e boas práticas
Um dos principais requisitos para que uma startup tenha sucesso é a escalabilidade. Portanto, a segurança deve estar presente desde o princípio.
Segurança por design (ou segurança por projeto) visa construir aplicações que sejam inerentemente seguras a partir de uma abordagem bottom-up. Assim, ao incluir novas funcionalidades na aplicação, diversas propriedades de segurança dos módulos e infraestrutura que suportam essa nova funcionalidade serão herdadas.
Princípios de arquitetura de software como modularidade, separação de conceitos (segregation of concerns) e conceito de crosscutting (crossecutting concern) devem ser levados em conta ao desenhar a solução de segurança da aplicação. Com essa abordagem, a aplicação terá uma linha base de segurança bem definida, além de maior escalabilidade, agilidade e facilidade de manutenção.
No entanto, apenas segurança por design não é suficiente para garantir a inviolabilidade da aplicação. É necessário conhecer as principais ameaças da web (e.g.: OWASP Top 10) e adotar boas práticas de segurança durante a implementação da aplicação, testando a segurança por meio da visão de um atacante ao final de cada ciclo de desenvolvimento.