Publicação
Improving vulnerability detection of wap
| Resumo: | 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. |
|---|---|
| Autores principais: | Falé, Miguel Amorim |
| Assunto: | 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 |
| Ano: | 2017 |
| País: | Portugal |
| Tipo de documento: | dissertação de mestrado |
| Tipo de acesso: | acesso aberto |
| Instituição associada: | Universidade de Lisboa |
| Idioma: | inglês |
| Origem: | Repositório da Universidade de Lisboa |
| Resumo: | 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. |
|---|