| Nome: | Descrição: | Tamanho: | Formato: | |
|---|---|---|---|---|
| 1.5 MB | Adobe PDF |
Autores
Resumo(s)
As 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.
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.
Descrição
Tese de mestrado, Informática, Universidade de Lisboa, Faculdade de Ciências, 2017
Palavras-chave
Análise estática de código fonte Vulnerabilidades de validação de entrada Dependências circulares Segurança de aplicações web Segurança de software Teses de mestrado - 2017
