24,818 research outputs found

    Análise estática de segurança de código-fonte : abordagem para avaliação de ferramentas

    Get PDF
    Monografia (graduação)—Universidade de Brasília, Faculdade UnB Gama, Curso de Engenharia de Software, 2015.Uma das técnicas para se reduzir o número de vulnerabilidades presentes em software é a detecção e resolução de defeitos presentes no código fonte do mesmo. A detecção de tais defeitos pode ser automatizada com ferramentas de análise estática de segurança de código fonte. O presente trabalho apresenta uma abordagem para que se avaliem ferramentas de análise estática de segurança de código fonte, desde a seleção das ferramentas a serem avaliadas à apresentação dos resultados da avaliação. Por fim, o trabalho apresenta exemplos de uso da abordagem apresentada, onde se avaliam a capacidade de detecção de loops infinitos por algumas ferramentas Livres e a corretude da análise de uma ferramenta que se propõe a realizar análises corretas.One technique to reduce the number of vulnerabilities found in software is the detection and resolution of flaws present in the source code. The detection of these flaws may be automated with source code security static analysis tools. This work presents an approach to evaluate source code security static analysis tools, since the selection of the tools being evaluated to the presentation of the evaluation results. Later, it presents usage examples for the proposed approach, the ability of some Free (as in freedom) static analyzers to detect infinite loops and the soundess of the analysis of a tool that claims to be sound are evaluated

    Integração party-granlog: interpretação abstrata aplicada a paralelização de programas em lógica

    Get PDF
    Este trabalho apresenta a integração dos modelos ParTy e Granlog. O ParTy (Parallel Types Analyzer) é um interpretador abstrato de tipos. O Granlog (Granularity Analyzer for LOGic programming) é um analisador automático de granulosidade na Programação em Lógica. O modelo Granlog necessita da análise estática de modos, tipos, medidas e dependências dos argumentos de um programa Prolog. Atualmente a análise de modos, tipos e medidas não é automática, o programador adiciona estas informações ao código fonte. A análise estática pode ser realizada através da técnica de Interpretação Abstrata. Esta técnica simula a execução de um programa segundo um domínio abstrato obtendo informações sobre o seu comportamento. O ParTy realiza a interpretação abstrata de tipos para os argumentos de um programa Prolog. A integração ParTy-Granlog torna automática a análise de tipos no modelo Granlog.Eje: TeoríaRed de Universidades con Carreras en Informática (RedUNCI

    Integração party-granlog: interpretação abstrata aplicada a paralelização de programas em lógica

    Get PDF
    Este trabalho apresenta a integração dos modelos ParTy e Granlog. O ParTy (Parallel Types Analyzer) é um interpretador abstrato de tipos. O Granlog (Granularity Analyzer for LOGic programming) é um analisador automático de granulosidade na Programação em Lógica. O modelo Granlog necessita da análise estática de modos, tipos, medidas e dependências dos argumentos de um programa Prolog. Atualmente a análise de modos, tipos e medidas não é automática, o programador adiciona estas informações ao código fonte. A análise estática pode ser realizada através da técnica de Interpretação Abstrata. Esta técnica simula a execução de um programa segundo um domínio abstrato obtendo informações sobre o seu comportamento. O ParTy realiza a interpretação abstrata de tipos para os argumentos de um programa Prolog. A integração ParTy-Granlog torna automática a análise de tipos no modelo Granlog.Eje: TeoríaRed de Universidades con Carreras en Informática (RedUNCI

    Improving vulnerability detection of wap

    Get PDF
    Tese de mestrado, Informática, Universidade de Lisboa, Faculdade de Ciências, 2017As aplicações web apresentam um nível de sofisticação que foi gradualmente melhorado no decorrer de duas décadas. Em particular, estas aplicações evoluíram de simples aglomerados de documentos hipermédia, para sistemas altamente complexos e extensíveis, desempenhando um papel fundamental no acesso a uma miríade de serviços. No entanto, esta evolução manifesta-se também pela procura e desenvolvimento de aplicações avançadas em prazos restritos, um fenómeno que é desencadeado pela competitividade agressiva e dinamismo próprios da Web moderna. Esta mudança de paradigma leva muitos programadores a seguir atalhos no desenvolvimento de aplicações, tal como o uso de linguagens de programação populares (ex. PHP), a integração de bibliotecas e extensões de origem dúbia, e a negligência para com os bons padrões de desenvolvimento de software. Infelizmente, tais práticas encontram-se frequentemente associadas à ocorrência de vulnerabilidades no código fonte destas aplicações, que comprometem a segurança das mesmas. A gravidade deste problema induz assim uma urgência crescente no que toca ao desenvolvimento de aplicações seguras. Contudo, o sucesso das medidas de segurança depende tanto dos conhecimentos de quem as elabora, bem como da correta utilização das linguagens de programação. ´E por isso que uma longa história de trabalho em segurança de aplicações web tem vindo a acompanhar tal evolução. As ferramentas de análise estática de código são utilizadas para detetarem vulnerabilidades nos programas de forma automática. Por excelência, estas ferramentas são as mais utilizadas por conseguirem uma maior cobertura do código analisado, poderem ser utilizadas durante o ciclo de desenvolvimento de aplicações e por não necessitarem de executar o código da aplicação. Porém, a qualidade da análise realizada por estas ferramentas na deteção de vulnerabilidades assenta na correta codificação do conhecimento sobre as vulnerabilidades a detetar e implementação das técnicas de análise estática de código, tal como a análise de comprometimento. Isso significa que, por um lado, estas ferramentas apenas procuram vulnerabilidades no código fonte para as quais foram codificadas, sendo incapazes de encontrar os restantes tipos de vulnerabilidades. Por outro lado, podem gerar falsos positivos (falsas vulnerabilidades) e falsos negativos (vulnerabilidades não detetadas) devido à não completude das técnicas de análise estática nelas implantadas. O principal objetivo desta dissertação assenta no melhoramento das capacidades de deteção de vulnerabilidades presentes na ferramenta Web Application Protection (WAP) para análise de código PHP. A concretização deste objetivo pressupõe três passos. O primeiro passo consiste, numa primeira instancia, no estudo das vulnerabilidades de validação de input de aplicações web e das formas como são detetadas por análise estática de código. Seguidamente, no levantamento de falhas de implementação num conjunto de ferramentas de análise estática de código fonte em PHP e em particular na WAP. É importante perceber que falhas estão presentes nas ferramentas atuais e de que forma se correlacionam com os falsos positivos e negativos gerados nas análises. Para efetuar este levantamento, é necessário executar cada ferramenta em estudo e comparar os resultados de ferramentas diferentes, utilizando como alvo de análise os mesmos artefactos de software em PHP. ´E de igual importância analisar o código manualmente, pelo que constituía única forma de detetar falsos negativos e confirmar falsos positivos simultaneamente presentes em todas as ferramentas. As ferramentas são aplicadas no processamento de código fonte PHP encontrado em pacotes de software da plataforma WordPress. O segundo passo consiste no estudo de um dos problemas identificados. O problema selecionado para o efeito assenta na identificação e resolução de dependências circulares no código fonte, as quais podem prejudicar a qualidade da análise, provocando até a paragem inesperada da ferramenta. As dependências circulares são oriundas da inclusão recursiva de código contido em ficheiros (ex. ficheiro a inclui ficheiro b e ficheiro b inclui ficheiro a). Inicialmente, é feito um levantamento das capacidades de inclusão disponíveis na linguagem PHP com base na documentação oficial. Seguidamente, são definidos e avaliados casos de estudo que utilizam estas capacidades de modo a produzir dependências circulares. Observam-se os respetivos comportamentos das ferramentas no processamento destes casos. Simultaneamente, é feita uma ponte com o comportamento demonstrado pelo PHP Zend, pois fornece um contexto prático que serve para completar as ambiguidades identificadas na documentação oficial. O terceiro passo consiste na resolução do problema das dependências circulares na ferramenta WAP. Apresentamos propostas de resolução do problema das dependências circulares, passando pela identificação de ficheiros raiz, caminhos de inclusão e causadores de ciclo dado um conjunto aleatório de ficheiros PHP. Este passo culmina no desenvolvimento de dois algoritmos que detetam e resolvem ciclos num projeto PHP, respetivamente. Oferecemos uma avaliação experimental das melhorias implementadas na ferramenta WAP, com base em pacotes de software da plataforma WordPress. Por um lado, a avaliação pretende verificar a capacidade de deteção de ciclos e vulnerabilidades por parte da versão melhorada da WAP. Por outro, permite a confirmação dos comportamentos identificados no segundo passo, bem como a identificação de novos problemas, relacionados com falhas de implementação das ferramentas Pixy, RIPS e phpSAFE. A nova versão da ferramenta WAP (WAP++) permitiu identificar e resolver 16 de pendências circulares e detetar 6 vulnerabilidades adicionais além das 885 vulnerabilidades detetadas pela versão original. Para além disso, a ferramenta WAP++ não apresenta nem os comportamentos erróneos da versão original, nem os comportamentos erróneos observados nas outras ferramentas de análise estática. Em contraste, a versão original da ferramenta WAP não identifica quaisquer dependências circulares.For over two decades, the web has been evolving from a simple set of hypermedia documents to a complex ecosystem of web applications that are supported by various frameworks. This paradigm shift has been promoting a series of practices that lead to an increasing number of vulnerabilities, which can compromise the security of web applications. One of the main contributing factors lies in vulnerable source code, written in unsafe languages such as PHP. In order to mitigate the problem, a large research effort on web application security has occurred over the past years. Source code static analysis tools perform the task of finding program vulnerabilities in an automated fashion. These tools offer superior code coverage, easier integration into the application development cycle, and do not require the actual code to be executed. They instead perform source code analysis, looking for potential bugs while inspecting the program code. However, the analysis performed by these tools depends on their knowledge of the classes of vulnerabilities and the implementation of analysis techniques, such as taint analysis. This means that, on one hand, the tools only search for vulnerabilities in the source code that they hold knowledge of, being unable to find other kinds of problems. On the other hand, the tools may generate false positives and false negatives, due to the limitations and incompleteness of implemented analysis techniques. One of such tools is the Web Application Protection (WAP). The main objective of this dissertation is to identify problems with WAP and improve its vulnerability detection capabilities, when processing open source PHP code. Four static analysis tools - WAP, Pixy, phpSAFE and RIPS - are evaluated against a set of WordPress plugins that are known to be vulnerable, in order to collect examples of incorrect processing of the tools which lead, for instance, to false negatives. Additionally, we define and evaluate several use cases for a common found limitation, which consists in the identification and circumvention of circular dependencies (i.e., recursive inclusion of code) in the source code. If circular dependencies are not treated correctly, they may lead to unexpected tool behaviors and incorrect analyses. These assessments help reflecting upon new solutions to address WAP’s shortcomings. A new version of WAP is implemented, and evaluated with the same original WordPress plugins. This dissertation offers the following contributions. A list of vulnerabilities is compiled through manual analysis of the plugins, in a format that allows comparison between the chosen tools, and the identification of common false negatives. An enhanced version of WAP is implemented, with improved detection capabilities that reduce both false positives and false negatives. Two evaluations concerning WAP and a set of WordPress plugins are present, comparing the results before and after the enhancements, respectively

    Invalidating web applications attacks by employing the right secure code

    Get PDF
    Tese de mestrado, Informática, Universidade de Lisboa, Faculdade de Ciências, 2019Desde o seu aparecimento, as aplicações web têm vindo a tornar-se cada vez mais populares e tornaram-se numa parte essencial das nossas vidas. Usamo-las todos os dias para fazer diversas tarefas tais como fazer compras, consultar o saldo da nossa conta bancária e entrar em contacto com os nossos familiares e amigos. Atualmente, as aplicações web são a forma mais utilizada para aceder aos serviços e recursos das organizações. No entanto, são conhecidas por conter vulnerabilidades no seu código-fonte. Estas vulnerabilidades, quando exploradas, podem causar danos severos às organizações como, por exemplo, o roubo de milhões de credenciais dos utilizadores e o acesso a informação confidencial, o que as torna num alvo apetecível para utilizadores mal intencionados. Por esta razão, é essencial que o acesso a serviços críticos tais como serviços de saúde e financeiros, seja feito através de aplicações web seguras. A utilização de código seguro nas aplicações é de uma importância extrema para obter aplicações seguras e garantir a segurança dos seus utilizadores. As vulnerabilidades são deixadas inadvertidamente no código-fonte por programadores porque estes não têm o conhecimento necessário para escrever código seguro ou porque os testes de software não dedicam tempo suficiente à segurança. Por outro lado, os programadores que utilizam nas suas aplicações funções seguras da linguagem de programação acreditam que as suas aplicações estão protegidas. No entanto, algumas destas funções não invalidam todos os ataques e deixam as aplicações vulneráveis. Este trabalho é focado na linguagem PHP porque esta é atualmente a linguagem de programação mais utilizada para o desenvolvimento de aplicações web. A linguagem PHP permite aos programadores realizarem ações que não seriam possíveis noutras linguagens, o que torna mais fácil aos programadores cometer erros. A linguagem PHP contém um grande número de funções seguras que podem ser utilizadas para remover vulnerabilidades dos diversos tipos. No entanto, uma grande maioria destas funções não é segura em todos os contextos ou é específica para um tipo de vulnerabilidade, o que cria a possibilidade de serem utilizadas incorretamente. Este problema torna mais fácil o aparecimento de vulnerabilidades se for tido em consideração o facto de uma grande parte dos cursos de programação existentes atualmente não dar ênfase suficiente à segurança. Por último, um outro fator que contribui para o aparecimento de vulnerabilidades é a complexidade das aplicações web atuais. Tal complexidade deve-se ao facto de as tecnologias disponíveis na web terem sofrido uma evolução significativa nos últimos anos, o que leva ao aumento da quantidade de linguagens de programação e funcionalidades que os programadores têm de conhecer. Atualmente, existe um grande número de ferramentas de análise estática destinadas a analisar código-fonte PHP e encontrar potenciais vulnerabilidades. Algumas destas ferramentas são baseadas em taint analysis e outras baseadas em análise dinâmica, execução simbólica, entre outras técnicas. Um problema conhecido destas ferramentas é o facto de, por vezes, reportarem vulnerabilidades que não são reais (falsos positivos), o que pode levar o programador a perder tempo à procura de problemas que não existem. Este tipo de ferramentas dá aos programadores relatórios em formatos variados e a esmagadora maioria delas deixa para o programador a tarefa de verificar se as vulnerabilidades reportadas são reais e removê-las caso o sejam. No entanto, muitas delas não dão informação sobre como remover as vulnerabilidades. Dado que muitos programadores estão mal informado acerca da escrita de código seguro, este processo nem sempre elimina as vulnerabilidades por completo. Apenas um pequeno número de ferramentas de análise estática realiza a correção automática do código-fonte das aplicações e as que o fazem muitas vezes têm limitações. Destas limitações, destaca-se o facto de inserirem código sintaticamente inválido que impede o funcionamento correto das aplicações, o que permite a introdução de melhorias nesta área. De entre os vários tipos de vulnerabilidades que podem ocorrer em aplicações web, os dois mais conhecidos são a injeção de SQL e o Cross-Site Scripting, que serão estudados em detalhe nesta dissertação. Esta dissertação tem dois objetivos principais: em primeiro lugar, estudar estes dois tipos de vulnerabilidades em aplicações web PHP, os diferentes ataques que as exploram e as diferentes formas de escrever código seguro para invalidar esses ataques através da utilização correta de funções seguras; em segundo lugar, desenvolver uma ferramenta capaz de inserir pequenas correções no código-fonte de uma aplicação web PHP de modo a remover vulnerabilidades sem alterar o comportamento original da mesma. As principais contribuições desta dissertação são as seguintes: um estudo dos diferentes tipos de ataques de injeção de SQL e Cross-Site Scripting contra aplicações web escritas em PHP; um estudo dos diferentes métodos de proteger aplicações web escritas em PHP e as situações em que os mesmos devem ser usados; o desenvolvimento de uma ferramenta capaz de remover vulnerabilidades de aplicações web escritas em PHP sem prejudicar o seu comportamento original; uma avaliação experimental da ferramenta desenvolvida com código PHP artificial gerado automaticamente e código PHP real. A solução proposta consiste no desenvolvimento de uma ferramenta de análise estática baseada em taint analysis que seja capaz de analisar programas PHP simplificados e, caso estejam vulneráveis, inserir linhas de código com correções simples que removam tais vulnerabilidades. Tudo isto sem alterar o comportamento original dos programas. A ferramenta desenvolvida limita-se exclusivamente à inserção de novas linhas de código, sem modificar as já existentes, para minimizar a probabilidade de tornar um programa sintaticamente inválido. Isto permite remover vulnerabilidades de aplicações web e, ao mesmo tempo, ensinar aos programadores como escrever código seguro. Os programas PHP simplificados que a ferramenta analisa consistem em ficheiros PHP contendo um único caminho do fluxo de controlo do programa original a que correspondem. Este programa simplificado não pode conter estruturas de decisão nem ciclos. A decisão de analisar programas simplificados foi tomada para permitir manter o foco desta dissertação na inserção de correções seguras, algo que atualmente apenas é feito por um pequeno número de ferramentas. Para avaliar a ferramenta desenvolvida, utilizámos cerca de 1700 casos de teste contendo código PHP artificial gerado automaticamente com vulnerabilidades de Cross-Site Scripting e seis aplicações web reais, escritas em PHP, contendo o mesmo tipo de vulnerabilidade. Foram também utilizados 100 casos de teste contendo código PHP artificial com vulnerabilidades de injeção de SQL. A ferramenta conseguiu analisar todos os ficheiros PHP. Relativamente à capacidade de a ferramenta inserir correções no código-fonte das aplicações, obtivemos resultados encorajadores: todos os ficheiros que foram corrigidos continham código PHP sintaticamente válido e apenas um ficheiro viu o seu comportamento original alterado. O ficheiro cujo comportamento foi alterado apresenta uma estrutura mais complexa do que a esperada para um programa simplificado, o que influenciou a execuc¸ ˜ao da nossa ferramenta neste caso. Relativamente à capacidade de a ferramenta detetar vulnerabilidades, verificámos que a mesma reportou algumas vulnerabilidades que não são reais. Tal situação aconteceu em parte devido ao uso de expressões regulares nas aplicações web, algo que causa muitas dificuldades a ferramentas de análise estática. Verificámos também que muitos dos falsos negativos (vulnerabilidades reais que não foram reportadas) se deveram ao contexto em que determinadas funções seguras são utilizadas, algo que, mais uma vez, causa muitas dificuldades a ferramentas deste tipo. As situações referidas aconteceram principalmente no código artificial, que não deve ser visto como representativo de aplicações web reais. Assim, podemos afirmar que a nossa ferramenta lida eficazmente com código PHP real, o que abre a porta à possibilidade de a mesma ser utilizada para corrigir vulnerabilidades em aplicações disponíveis ao público. Após esta avaliação experimental, concluímos que a solução desenvolvida cumpriu os objetivos principais para os quais foi concebida, ao ser capaz de remover vulnerabilidades sem prejudicar o comportamento original dos programas. A solução desenvolvida constitui uma melhoria nas capacidades das ferramentas de análise estática existentes atualmente, em especial das que realizam correção automática de código. O estudo realizado acerca destes dois tipos de vulnerabilidades permitiu também obter uma fonte de informação correta e confiável acerca das formas de escrever código seguro para prevenir os dois tipos de vulnerabilidades estudados em aplicações web escritas em PHP.Currently, web applications are the most common way to access companies’ services and resources. However, since their appearance, they are known to contain vulnerabilities in their source code. These vulnerabilities, when exploited, can cause serious damage to organizations, such as the theft of millions of user credentials and access to confidential data. For this reason, accessing critical services, such as health care and financial services, with safe web applications is crucial to its well-functioning. Often, vulnerabilities are left in the source code unintentionally by programmers because they do not have the necessary knowledge about how to write secure code. On the other hand, programmers that use secure functions from the programming language in their applications, employing thus secure code, believe that their applications are protected. However, some of those functions do not invalidate all attacks, leaving applications vulnerable. This dissertation has two main objectives: to study the diverse types of web application vulnerabilities, namely different attacks that exploit them, and different forms to build secure code for invalidating such attacks, and to develop a tool capable of protecting PHP web applications by inserting small corrections in their source code. The proposed solution was evaluated with both artificial and real code and the results showed that it can insert safe corrections while maintaining the original behavior of the web applications in the vast majority of the cases, which is very encouraging

    Estimação estática de métricas para distribuir aplicações Java

    Get PDF
    Este trabalho apresenta um conjunto de ferramentas desenvolvidas para auxiliar a distribuição das classes de uma aplicação Java pelos recursos de uma arquitectura heterogénea, baseada em microprocessadores genéricos e dispositivos de lógica reconfigurável. Para poder tomar decisões relacionadas com essa distribuição, foi preciso identificar as diferentes formas de uma classe se relacionar com outras (fuga de referências) e obter uma estimativa estática para a complexidade dos métodos de cada classe. Os resultados obtidos com o caso de estudo RayTracer mostraram que a métrica de complexidade, estimada estaticamente, segue o mesmo padrão que o tempo de execução medido dinamicamente.Projecto PPC-VM (POSI / CHS / 47158 / 2002) Fundação para a Ciência e Tecnologia. FEDER

    Detection of vulnerabilities and automatic protection for web applications

    Get PDF
    Tese de doutoramento, Informática (Ciências da Computação), Universidade de Lisboa, Faculdade de Ciências, 2016In less than three decades of existence, the Web evolved from a platform for accessing hypermedia to a framework for running complex web applications. These applications appear in many forms, from small home-made to large-scale commercial services such as Gmail, Office 365, and Facebook. Although a significant research effort on web application security has been on going for a while, these applications have been a major source of problems and their security continues to be challenged. An important part of the problem derives from vulnerable source code, often written in unsafe languages like PHP, and programmed by people without the appropriate knowledge about secure coding, who leave flaws in the applications. Nowadays the most exploited vulnerability category is the input validation, which is directly related with the user inputs inserted in web application forms. The thesis proposes methodologies and tools for the detection of input validation vulnerabilities in source code and for the protection of web applications written in PHP, using source code static analysis, machine learning and runtime protection techniques. An approach based on source code static analysis is used to identify vulnerabilities in applications programmed with PHP. The user inputs are tracked with taint analysis to determine if they reach a PHP function susceptible to be exploited. Then, machine learning is applied to determine if the identified flaws are actually vulnerabilities. In the affirmative case, the results of static analysis are used to remove the flaws, correcting the source code automatically thus protecting the web application. A new technique for source code static analysis is suggested to automatically learn about vulnerabilities and then to detect them. Machine learning applied to natural language processing is used to, in a first instance, learn characteristics about flaws in the source code, classifying it as being vulnerable or not, and then discovering and identifying the vulnerabilities. A runtime protection technique is also proposed to flag and block injection attacks against databases. The technique is implemented inside the database management system to improve the effectiveness of the detection of attacks, avoiding a semantic mismatch. Source code identifiers are employed so that, when an attack is flagged, the vulnerability is localized in the source code. Overall this work allowed the identification of about 1200 vulnerabilities in open source web applications available in the Internet, 560 of which previously unknown. The unknown vulnerabilities were reported to the corresponding software developers and most of them have already been removed.Em duas décadas de existência, a web evoluiu de uma plataforma para aceder a conteúdos hipermédia para uma infraestrutura para execução de aplicações complexas. Estas aplicações têm várias formas, desde aplicações pequenas e caseiras, a aplicações complexas e de grande escala e para diversos propósitos, como por exemplo serviços comerciais como o Gmail, Office 365 e Facebook. Apesar do grande esforço de investigação da última década em como tornar as aplicações web seguras, estas continuam a ser uma fonte de problemas e a sua segurança um desafio. Uma parte importante deste problema deriva de código fonte vulnerável, muitas vezes desenvolvido com linguagens de programação com poucas validações e construído por pessoas sem os conhecimentos mais adequados para uma programação segura. Atualmente a categoria de vulnerabilidades mais explorada é a de validação de input, diretamente relacionada com os dados (inputs) que os utilizadores inserem nas aplicações web. A tese propõe metodologias para a detecção e remoção de vulnerabilidades no código fonte e para a proteção das aplicações web em tempo de execução, empregando técnicas como a análise estática de código, aprendizagem máquina e protecção em tempo de execução. Numa primeira fase, a análise estática é utilizada para descobrir e identificar vulnerabilidades no código programado na linguagem PHP. Os inputs dos utilizadores são rastreados e é verificado se estes são parâmetros de funções PHP susceptíveis de serem exploradas. A combinação desta técnica com a aprendizagem máquina aplicada em minerização de dados é proposta para prever se as vulnerabilidades detectadas são falsos positivos ou reais. Caso sejam reais, o resultado da análise estática de código é utilizado para eliminá-las, corrigindo o código fonte automaticamente com fixes (remendos) e protegendo assim as aplicações web. A tese apresenta também uma nova técnica de análise estática de código para descobrir vulnerabilidades. A técnica aprende o que é código vulnerável e depois tira partido desse conhecimento para localizar problemas. A aprendizagem máquina aplicada ao processamento de linguagem natural é utilizada para, numa primeira instância, aprender aspectos que caracterizam as vulnerabilidades, para depois processar e analisar o código fonte, classificando-o como sendo ou não vulnerável, descobrindo e identificando os erros. Numa terceira fase, é proposta uma nova técnica de proteção em tempo de execução para descobrir e bloquear ataques de injeção contra bases de dados. A técnica é concretizada dentro do sistema de gestão de bases de dados para melhorar a eficácia na detecção dos ataques. É utilizada conjuntamente com identificadores de código fonte que, quando um ataque é sinalizado, permitem identificar a vulnerabilidade no programa. No total este trabalho permitiu a identificação de cerca de 1200 vulnerabilidades em aplicações web de código aberto disponíveis na Internet, das quais 560 eram até então desconhecidas. As vulnerabilidades desconhecidas foram reportadas aos autores do software onde foram encontradas e muitas delas já foram removidas

    Compreensão de aplicações web: o processo e as ferramentas

    Get PDF
    Já ninguém duvida que a compreensão de programas (CP) é uma área cada vez mais importante, e a sua aplicação cada vez mais abrangente na engenharia da programação, constituindo-se como um desafio permanente e actual para as ciências de computação. A compreensão de programas nasce da tentativa de melhorar os processos de manutenção de sistemas aplicacionais, mas de facto está também francamente associada ao processo de aprendizagem de linguagens de programação. Por isso, nesta linha de preocupações têm sido desenvolvidas inúmeras ferramentas de auxílio à compreensão de software para manutenção (alteração ou actualização de código), reverse-engineering/re-engineering, ou ensino de programação. A complexidade do processo de compreensão requer a existência de modelos de aprendizagem e representação de conhecimento. Uma questão que então se coloca muitas vezes, é saber se as ferramentas obedecem aos modelos cognitivos existentes; importa também saber como medir o seu real impacto na compreensão. Este artigo tem como objectivo a descrição de um conjunto de critérios a adoptar no sentido de avaliar se uma ferramenta pode efectivamente ajudar na compreensão de programas, apresentando-se uma aplicação prática. Dada a importância cada vez maior das aplicações que correm sobre a Web, o estudo incidirá sobre esse recente paradigma de programação. Procuraremos identificar o que de novo há neste tipo de programação que interessa realçar para o seu bom entendimento.FC
    corecore