| Resumo: | Na atualidade, a integração de funcionalidade e segurança em aplicações é um desafio. Existe a noção de que a segurança é um processo pesado, requer conhecimento e consome o tempo dos programadores, contrastando desta forma com a visão relativa à funcionalidade. Independentemente destes desafios, é importante que as organizações tratem da segurança nos seus processos ágeis, pois os ativos críticos da organização devem ser protegidos contra potenciais ataques. Uma forma de evitar que os ataques tenham sucesso passa por integrar ferramentas que possam ajudar a identificar vulnerabilidades de segurança durante a fase de desenvolvimento das aplicações e sugerir métodos para a sua correção. Segundo o Instituto Gartner, mais de 75% dos problemas com segurança na Internet são devidos a vulnerabilidades exploráveis a partir das Aplicações Web (Web Apps). A maior parte das Web Apps são naturalmente vulneráveis devido às tecnologias adotadas na sua concepção, à forma como são desenhadas e desenvolvidas, e ao uso de vários objetos e recursos, além da integração de outros sistemas. Frequentemente observa-se que são priorizados os aspetos funcionais que atendem a área de negócios, enquanto os requisitos de segurança ficam em segundo plano. Os ataques a Web Apps podem causar problemas de variados níveis de impacto, como por exemplo: interrupção ou queda de desempenho do serviço; acesso não autorizado a dados confidenciais e estratégicos; roubo de informação e clientes; fraudes e modificação de dados no fluxo das operações; perdas financeiras diretas e indiretas; prejuízos à imagem da marca da empresa; perda da lealdade dos clientes e gastos extraordinários com incidentes de segurança. Os riscos de ataques mais comuns são genericamente conhecidos e podem ser previstos com antecedência, pois são listados pela Open Web Application Security Project (OWASP), e dentre eles, três dos principais são: SQL Injection (SQLi); Cross-Site Scripting (XSS); Broken Authentication e Session Management. Os ataques mais graves são aqueles que, quando realizados sobre vulnerabilidades da Web App, não serão detetados de imediato e resultam no acesso a dados sigilosos do negócio, da infraestrutura, ou de clientes, e que podem ser posteriormente organizados para realizar um ataque de impacto mais relevante, ou uma fraude. Neste contexto, um novo paradigma surge no que se refere `a auditoria em ambientes web. O conceito de Auditoria Contínua (AC) emerge como uma nova solução de auditoria que responde a novas necessidades, sendo um tema recente que tem sido objeto de pesquisas e aposta de organizações. O modelo tradicional de auditoria, baseado em análises pontuais e descontínuas, torna-se cada vez mais inadequado à dinâmica atual da informação e aos sistemas que a gerem. Atualizações constantes de aplicações e as alterações nas configurações do sistema podem introduzir vulnerabilidades e deixar uma organização suscetível a ataques. Portanto, para manter os dados seguros, os sistemas e dispositivos devem ser verificados continuamente para identificar e relatar vulnerabilidades à medida que são descobertas. Este conceito traduz-se numa enorme mudança na filosofia tradicional da auditoria para um paradigma de AC que torna possível uma intervenção e ação corretiva mais cedo. Desta forma, é necessário que as organizações adotem uma metodologia que permita aos auditores independentes, fornecer garantias por meio de relatórios sobre a ocorrência de eventos ao longo da vida do sistema. Esses eventos, quando monitorizados em tempo real, permitem desvios a serem detetados e relatados para aumentar a velocidade e a eficácia da resposta pelos elementos responsáveis pela tomada de decisão. As organizações estão sujeitas a vários tipos de auditorias que têm diferentes finalidades, como a qualidade, o ambiente, a operação ou a gestão. Estes processos seguem um período de tempo para validar e analisar o que já foi feito e o estado atual da organização. Na segurança da informação, a AC visa garantir a monitorização em tempo real do sistema e o risco dos ativos da empresa. Para além disso, permite avaliar o nível de segurança atual do sistema, monitorizar o sistema em tempo real, aumentando a eficiência da descoberta e mitigação de vulnerabilidades. Os testes de intrusão, são geralmente um complemento para a AC. Num processo contínuo em que não existe esse comportamento invasivo, as análises de vulnerabilidades são realizadas com o auxílio de ferramentas automáticas ao longo do tempo para observar e monitorizar o estado do sistema e as ações corretivas as serem tomadas. O objetivo desta tese é propor uma abordagem e desenvolver uma ferramenta que permitirá detetar ataques do tipo Injection Attacks (IA) ou Cross-Site Request Forgery (CSRF) em Web Apps, no caso de estas estarem a recorrer ao mecanismo Cross-Origin Resource Sharing (CORS). Para efetuar a deteção de IA, a ferramenta terá a capacidade de analisar os links externos que são passados no atributo href a que uma Web App se liga, com o intuito de verificar se estes estão comprometidos. Para a deteção de CORS a ferramenta analisará todos os links internos passados no atributo src para verificar se estes invocam métodos XMLHttpRequest utilizados para chamadas de CORS. Estes dois tipos de ataques est˜ao sempre associados, contribuindo para um IA bem-sucedido. O IA é uma classe de ataques que depende da injeção de dados numa Web App, causando a execução ou interpretação de dados mal-intencionados de maneira inesperada. Exemplos de ataques desta classe incluem SQLi, HTML Injection, XSS, Header Injection, Log Injection e Full Path Disclosure. Estes são os ataques mais comuns e bem-sucedidos na Internet devido aos seus numerosos tipos, grande superfície de ataque e complexidade necessária para os proteger. O CORS é um mecanismo do browser que permite o acesso controlado a recursos localizados fora de um determinado domínio. Ele estende e adiciona flexibilidade à Same Origin Policy (SOP). No entanto, este mecanismo também oferece potencial para ataques baseados em vários domínios, se a política de CORS de um site estiver mal configurada ou implementada. O CORS não pretende ser uma proteção contra ataques de Cross-Request como o CSRF.Tendo em conta o anteriormente descrito relativamente a IA e CORS, a ferramenta desenvolvida permite a deteção de vulnerabilidades em Web Apps em AC. O foco fundamental está nos links externos e internos da Web App. Corre num servidor web, disponibilizando este serviço aos utilizadores na internet, permitindo analisar ligações externas e internas de uma determinada Web App. Para as ligações externas irá detetar evidências de IA, atribuindo uma classificação de benigno ou maligno às ligações externas identificadas. Para os links internos, verifica se existem chamadas de Cross-Origin mais especificamente CORS. Desta forma um utilizador poderá submeter o URL da sua Web App que irá ser analisado pela ferramenta Vulnerabilities Detector at Runtime and Continuous Auditing (VuDRuCA) que recorre a um mecanismo de AC. A ferramenta VuDRuCA emprega técnicas de crawling para navegar nas páginas da Web App e obter a informação pretendida. Utiliza ainda a API do Virus Total para analisar URLs, identificando conteúdo malicioso detestável por antivírus e scanners de Web Apps. Como backend a ferramenta utiliza uma base de dados relacional que armazena todos os dados recolhidos para que estes possam ser analisados, contribuindo para a apresentação de indicadores. Na fase de avaliação a ferramenta foi testada utilizando uma amostragem de 100 URLs de Web App que recorrem à tecnologia AJAX. Para estes foram contabilizados o número de sites externos e internos da Web App. Após uma primeira análise foram escolhidos 30 Web Apps para categorização, medição dos tempos de execução para deteção de links externos e internos e várias outras métricas relativas aos tempos de execução. Finalmente para testar o motor de AC foram selecionados 10 URL de Web Apps que na sua maioria recorrem a CORS. Nestas 10 Web Apps foi identificada a tecnologia de Content Manamgment System (CMS) utilizada. O módulo de AC, efetuou ainda uma análise durante um período de 5 dias, com intervalos de 24h, para validar se existia a introdução de novos links externos ou se algum destes estava comprometido. Relativamente aos links internos foi validado se existiam novos links internos e se estes recorriam a CORS. |