• Nenhum resultado encontrado

1 INTRODUÇÃO

2.4 VULNERABILIDADES DE SOFTWARE EM AMBIENTES WEB

Pode-se dizer que as vulnerabilidades de software em uma organização facilitam os ataques e crimes cibernéticos. Há uma série de fraquezas que um sistema pode possuir.

Essas fraquezas, quando exploradas, causam prejuízo às corporações, no entanto, é possível defender-se. Mas como se defender de algo que não se conhece? Pensando nisso, explica-se nesta sessão, algumas das vulnerabilidades de software mais críticas e utilizadas em ataques de software na Internet, segundo a OWASP (2013).

OWASP é uma comunidade aberta dedicada a capacitar as organizações para conceber, desenvolver, adquirir, operar e manter aplicações confiáveis. Os documentos produzidos por esta organização são elaborados de forma colaborativa semelhante a outros projetos de software de código aberto como o Eclipse, por exemplo.

Frequentemente, em reportagens sobre o futuro da tecnologia, nota-se que há uma tendência de os sistemas empresariais convergirem para a Web. E, dentre as vulnerabilidades de aplicações Web mais críticas, segundo a (OWASP, 2007, 2010, 2013) estão: Cross Site Scripting (XSS), Falhas de Injeção, Execução Maliciosa de Arquivo, Referência Insegura Direta a objeto, Cross Site Request Forgery (CSRF), Vazamento de Informações e Tratamento de erros Inapropriado, Furo de Autenticação e Gerência de Sessão, Armazenamento criptográfico inseguro, Comunicações Inseguras e Falha ao Restringir Acesso À URLs.

2.4.1 Cross Site Scripting (XSS)

Mais conhecido como XSS, Cross Site Scripting é um subconjunto de inserções do tipo HTML, a linguagem interpretada pelos navegadores Web. Se as interações ocorridas entre o usuário e o sistema, através do navegador, não são codificadas ou validadas, um atacante pode se beneficiar disso.

Normalmente, os ataques mais comuns, envolvendo XSS, são realizados através da linguagem Java Script, no entanto qualquer outra linguagem de script pode ser utilizada se o navegador suportá-la (OWASP, 2007). Script é um conjunto de instruções previamente escrito que é executado linha após linha, neste caso pelo navegador Web.

Os três tipos mais conhecidos de XSS são: Refletido, Armazenado e Inserção DOM. O Refletido é o mais fácil de ser explorado, pois a página pode refletir os dados fornecidos pelo usuário como se estivesse retornando diretamente ao mesmo, assim o atacante pode sequestrar a sessão e utilizar os dados contidos nela como bem entender.

O XSS Armazenado é chamado assim porque armazena os dados em alguma estrutura, como arquivo texto ou banco de dados para ser utilizado posteriormente sem filtros (OWASP, 2007). Desta forma, as entradas dos usuários de sistemas Web com muitas sessões, como blogs e fóruns, podem ser utilizadas por outros usuários, o que causará uma inconsistência no sistema.

Já, a Inserção DOM é mais complexa, pois utiliza Java Script, o que aumenta o potencial de uma invasão, pois são muitos recursos a serem utilizados. A manipulação dos dados de entrada do usuário, através do navegador, sem que ele perceba, pode incluir a captura de logins e senhas do sistema em uso. Se o sistema for uma aplicação bancária, o prejuízo pode ser alto. Há atacantes que roubam centavos de várias contas, assim passam desapercebidos.

Geralmente, o que acontece é uma mistura dos três tipos de scripts, não necessariamente um sistema será invadido, apenas, com o uso de XSS, contudo este recurso auxilia no conhecimento das possíveis vulnerabilidades de uma aplicação Web.

2.4.2 Falhas de Injeção

Injeção é termo que se usa para denominar a forma de como os comandos de entrada são realizados nos programas de computador (OWASP, 2010). Essa injeção de dados pode conter falhas. As falhas ocorrem quando os dados entrantes não são adequadamente verificados e corrigidos, ou descartados, se necessário.

Para os softwares em geral, em especial as aplicações Web, existem muitos tipos de injeção: SQL, LDAP, XPath, XSLT, HTML, XML, comando de sistema operacional e muitas outras. A injeção mais conhecida e mais utilizada pelo que se tem dados concretos segundo OWASP (2010), é a injeção SQL. As falhas de injeção do tipo SQL ocorrem quando os dados de entrada inseridos pelo usuário são acrescidos com instruções específicas para determinadas ações de bancos de dados.

SQL é a linguagem utilizada para manipular informações em bancos de dados, há comandos específicos para criar, modificar, excluir ou visualizar dados na forma de tabelas. Entretanto, as aplicações Web, assim como outras aplicações, tratam os dados de entrada do usuário e os utilizam para enviar comandos ao banco de dados. Aí está o problema, quando esses dados não são tratados de forma correta, ocorrem as falhas de injeção.

Alguém com conhecimentos específicos de banco de dados pode preparar comandos em SQL para modificar de forma maliciosa as informações contidas nos sistemas corporativos, ou apenas utilizar-se deste conhecimento para adentrar no código da aplicação e visualizar informações secretas sobre uma determinada organização.

Da mesma maneira, as outras formas de injeção ocorrem, pois, quase sempre, há um interpretador de comandos, que executa o que lhe é repassado, isto é, um software que executa procedimentos conforme os dados de entrada, normalmente, apresenta uma saída. No entanto, este programa não verifica se os dados são maliciosos, apenas confere se os comandos estão escritos de forma correta e na ordem necessária para sua execução. Cabe ao desenvolvedor tratar corretamente as entradas de dados dos usuários e verificar se estas podem ou não prejudicar a aplicação.

2.4.3 Execução Maliciosa de Arquivo

Há aplicações na Web que permitem que o usuário envie arquivos de seu computador ou dispositivo móvel, isso é muito comum em redes sociais, aplicações empresariais que permitem envio de curriculum, imagens e outros tipos de arquivo. No momento de seu desenvolvimento, a parte de envio de arquivos deveria ser planejada para que, antes de transferir totalmente os arquivos, estes fossem lidos e interpretados para garantir que não há nenhum código que possa prejudicar a aplicação.

O que acontece nos ataques que exploram esta vulnerabilidade é a preparação prévia de arquivos, contendo instruções de sistema operacional ou mesmo de comandos para aplicações Web (OWASP, 2007). Este preparo é realizado por pessoas com conhecimentos específicos de software e com intensão de prejudicar a quem recebe o arquivo, que, muitas vezes, não sabe o mal contido dentro dele.

Entre o mal que pode ser causado por um arquivo, contendo código malicioso, pode estar a execução de código remoto, que envia dados pessoais secretamente para o criador do arquivo, instalação de ferramentas para deixar o sistema mais vulnerável e suscetível a invasões futuras, ou até mesmo o comprometimento total do sistema.

2.4.4 Referência Insegura Direta a objeto

Esta é uma vulnerabilidade comum, mas, OWASP (2013) afirma que ela não é tão testada quanto deveria no desenvolvimento de softwares. Quando se desenvolve programas de computador, trabalha-se com referências a objetos. Um objeto em várias linguagens de programação é uma instância de algo que se utiliza no sistema.

A referência direta pode ser um parâmetro de um formulário, um registro de banco de dados, um arquivo ou diretório, enfim, uma referência a um objeto que deve estar escondida de modo que somente um usuário autenticado no sistema possa manipular esse objeto. Todavia essa prática nem sempre é seguida por falta de conhecimento ou por pressa de entregar o programa pronto, ou esquecimento por parte do desenvolvedor.

O fato é que essa referência é insegura por ser direta, ela pode ser utilizada por um usuário mesmo que ele não esteja autenticado no sistema. Com os comandos certos, esse usuário pode se apossar dos dados do sistema e prejudicar o funcionamento sistema.

2.4.5 Cross Site Request Forgery (CSRF)

Especialmente em aplicações Web, há uma opção bastante conhecida dos navegadores da Internet que serve para salvar as credenciais de um usuário do sistema, o próprio navegador identifica uma ação de login e pergunta se o usuário deseja lembrar senha, lembrar usuário e senha, salvar dados de login, etc.

Seria apenas uma maneira de ajudar o usuário para que este não precise digitar login e senha na próxima vez que usar o sistema. Porém, há aplicações especialmente criadas para ataques do tipo CSRF que forçam o navegador da vítima a enviar requisições com os dados da sessão ativa, e a autenticação ocorre normalmente como se fosse o próprio usuário que estivesse realizando as ações (OWASP, 2010).

As ações podem variar. Há casos em que um atacante consegue modificar o roteador da vítima sem que ela saiba, normalmente, as vulnerabilidades deste tipo são exploradas juntamente com as vulnerabilidades XSS (Cross Site Scripting), assim as ações podem ser mais prejudiciais, ou mais produtivas na visão dos atacantes.

2.4.6 Vazamento de Informações e Tratamento de Erros Inapropriado

Até mesmo os erros das aplicações podem denunciar suas implementações. Na busca de informações, antes de invadir uma aplicação, os atacantes podem forçar a aplicação de software a gerar erros. Isto acontece por causa das mensagens de erro produzidas pelos aplicativo de software, conforme a mensagem pode-se identificar o tipo de aplicação e aproveitar-se das vulnerabilidades conhecidas que possuem.

OWASP (2007) afirma que o tratamento dos erros possíveis de serem inseridos pelos usuários nem sempre ocorre de forma completa, pois desenvolvedores deixam o sistema apresentar mensagens de erro que podem ser extremamente úteis a um invasor.

2.4.7 Furo de Autenticação e Gerência de Sessões

A gerência de sessões autenticadas realmente é um problema para os desenvolvedores de software, além de preocupar-se em autenticar o usuário que está entrando na aplicação, é preciso administrar a sessão autenticada para que esta não seja alvo de sequestros. Os sequestros de sessão são frequentemente utilizados para mudanças nas contas de usuários e invasão de privacidade (OWASP, 2013).

O problema não está somente na entrada do usuário, mas também quando ele realiza logout ou logoff que são os termos utilizados para a saída do sistema. Suas credenciais podem continuar ativas, e outro usuário poderá utilizá-las. Há também o tempo de permanência em uma sessão, também conhecido como timeout, ele é utilizado para que o usuário não precise realizar login novamente ao fechar o navegador sem querer ou enquanto realiza uma leitura na página e fica algum tempo sem realizar ações no sistema. O timeout, se mal administrado, dá direito de ser modificado por qualquer um, assim um ataque ao sistema pode durar horas, se assim desejar o invasor.

2.4.8 Armazenamento criptográfico inseguro

Criptografar é preciso, principalmente em aplicações Web, em que os dados ficam disponíveis o tempo todo, ou pelo menos deveriam. Muitas organizações simplesmente não criptografam suas informações. Outras até utilizam criptografia, porém os algoritmos escolhidos são muito fracos ou até mesmo caseiros. Para OWASP (2007), MD5, SHA-1, RC3 e RC4 são exemplos de algoritmos insuficientes, que já foram quebrados.

Há algoritmos fortes disponíveis no mercado de segurança da informação, no entanto, as empresas precisam ter profissionais capacitados a utilizar bem esses algoritmos. Não adianta ter uma solução cara e robusta de criptografia de dados e armazenar as chaves de segurança em locais vulneráveis e de fácil descoberta. Além do armazenamento de dados, é necessário planejamento para o transporte seguro destes, pois podem ser interceptados.

2.4.9 Comunicações Inseguras

Muitas aplicações de softwares possuem frontend e backend, a parte que se comunica com o usuário e a parte que se comunica com o servidor respectivamente. Em alguns casos, linguagens de programação diferentes são utilizadas na construção dessas duas perspectivas de programas de computador. A comunicação do frontend com o backend, assim como a comunicação entre duas aplicações Web, precisa ser encriptada. (OWASP, 2007). Principalmente, se houver troca de dados sensíveis como informações de cartões de crédito, saúde e aplicações financeiras.

A negligência que ocorre nas organizações que desenvolvem software com relação à comunicação entre os programas pode custar caro (BERNSTEIN e outros, 1997). As informações que trafegam através das redes de computador podem ser “escutadas”, termo utilizado para explicar que as informações podem ser observadas, quando viajam pelas redes de computador.

2.4.10 Falha ao Restringir Acesso À URLs

URL é a forma de acesso aos sistemas acessados através de navegadores Web. Segundo OWASP (2010) é comum desenvolvedores de software esconderem URLs que somente eles sabem que existe. Mas, na realidade, estas URLs podem estar desprotegidas, um ataque que envolve adivinhação ou força bruta tem capacidade de descobrir os caminhos ocultos. Ataques como esses podem encontrar arquivos de configuração com informações que não deveriam ser de conhecimento de alheios ao desenvolvimento daquele sistema.

As invasões que envolvem adivinhação não são realizados sem um prévio conhecimento do atacante, o que há é uma série de tentativas baseadas em URLs comuns no desenvolvimento de software como /admin/adduser.php ou /approveTransfer.do. Portanto, é preciso utilizar autenticação de usuários ao máximo nas URLs existentes no sistema.

Documentos relacionados