Titulo Estágio
Verificação de software orientada a vulnerabilidades de segurança
Áreas de especialidade
Engenharia de Software
Local do Estágio
Departamento de Engenharia Informática
Enquadramento
A verificação de software é uma prática que tem como finalidade identificar e corrigir falhas no código que possam reduzir a qualidade do software. De todas as metodologias existentes, os testes de software são a abordagem mais usada pela indústria. No entanto, mesmo as melhores estratégias de "software testing" deixam algumas falhas por encontrar e, em muitos casos, essas falhas criam vulnerabilidades de segurança.
Neste contexto, a presente dissertação tem como objetivo estudar as situações nas quais um bug de código cria uma vulnerabilidade de segurança, e usar esse conhecimento para melhorar as estratégias de software testing existentes para encontrarem mais vulnerabilidades de software.
Assim, a presente dissertação começa por aplicar e avaliar as estratégias de "software testing" existentes no estado da arte. Cada uma destas estratégias produz numa "test suite" composta por um conjunto de casos de teste. A primeira análise a ser realizada consiste em medir a eficácia destas test suites no que toca a identificar falhas de segurança (ou vulnerabilidades). Partindo desses resultados, o objetivo final é melhorar as estratégias existentes de forma a obter melhores test suites, capazes de identificar mais vulnerabilidades de segurança.
A metodologia a seguir começa por analisar quais os tipos de falhas que mais frequentemente surgem associados a vulnerabilidades de segurança. Partindo desta análise, vai-se utilizar um injetor de falhas de software (já existente e desenvolvido na UC, chamado ucXception) para introduzir falhas de software representativas de vulnerabilidades em diversos programas que serão usados para avaliar as "test suites" geradas pelas diferentes estratégias de teste de software. Esta metodologia (inspirada em mutation testing) irá resultar num conhecimento de quais os tipos de vulnerabilidades de software que mais escapam às atuais estratégias de control-flow testing, data-flow testing, etc.
Como objetivo final, sabendo quais os tipos de falha que habitualmente escapam às estratégias existentes de software testing, vai-se melhorar essas mesmas estratégias de forma a identificar mais vulnerabilidades no código. Assim, o resultado da dissertação será uma abordagem de verificação de software orientada às vulnerabilidades de segurança.
Objetivo
Esta dissertação tem dois objetivos principais:
- Estudar e avaliar em que circunstâncias uma falha de software origina uma vulnerabilidade de segurança.
- Aplicar, avaliar e melhorar estratégias de teste de software especificamente para encontrar falhas de segurança.
O primeiro objetivo será abordado através da análise de bugs reais, publicados em repositórios de projetos open source, e classificando manualmente de forma sistemática os tipos de falhas de software que mais frequentemente surgem associadas a vulnerabilidades de segurança. Parte deste trabalho já foi realizado e é necessário, no âmbito desta dissertação, concluir a análise da informação obtida e conferir os resultados. Em particular, pretende-se determinar quais as condições que distinguem as falhas de software que causam vulnerabilidades das falhas de software que não resultam em problemas de segurança.
O segundo objetivo foca na aplicação e avaliação das estratégias de "software testing" existentes no estado da arte. Em concreto, usar-se-á control-flow testing e data-flow testing, assim como random testing. Cada uma destas estratégias resulta numa "test suite" composta por um conjunto de casos de teste. A primeira análise a ser realizada consiste em medir a eficácia destas test suites no que toca a identificar as falhas de segurança (ou vulnerabilidades). Partindo desses resultados, o objetivo final será melhorar as estratégias existentes de forma a obter melhores test suites, capazes de identificar mais vulnerabilidades de segurança.
Estes dois objetivos, em conjunção, resultam no que é referido no título da dissertação: verificação de software orientada às vulnerabilidades de segurança.
Plano de Trabalhos - Semestre 1
- Estudo do estado da arte. (Meses 1 e 2)
A primeira fase consistirá em aprofundar conhecimentos nos tópicos relacionados com a dissertação, com particular atenção a testes de software (Ammann e Offutt, entre outros) injeção de falhas de software, mutation testing, vulnerabilidades de segurança, e falhas de software em geral. O trabalho deve resultar na escrita do capítulo da dissertação sobre o estado da arte.
- Escolha de ferramentas e preparação do ambiente de testes. (Meses 2 e 3)
Esta tarefa consiste em escolher as ferramentas a usar para criar "test suites" com base nos métodos de teste estudados anteriormente. Juntamente, será necessário escolher um conjunto abrangente de funções e fragmentos de código, escolhido a partir de projetos open source na linguagem C, sendo que esse será o código a ser testado com as "test suites". A ferramenta ucXception será usada para injetar falhas de software no código escolhido, seguindo uma abordagem inspirada em "mutation testing".
- Avaliação das metodologias de teste existentes. (Mês 4)
Esta tarefa tem como objetivo avaliar as metodologias de teste escolhidas durante o estudo do estado da arte (por exemplo, control-flow testing, data-flow testing, black-box testing). Em detalhe, ir-se-á introduzir bugs nas diversas funções do código escolhido, usando a ferramenta ucXception. As falhas de software a injetar serão representativas de vulnerabilidades de segurança (uma questão fundamental a abordar nesta fase). A avaliação consiste em determinar quais as falhas que escapam às metodologias de teste e com que frequência isso acontece.
- Escrita do relatório intermédio. (Mês 5)
As tarefas realizadas no decorrer do primeiro semestre devem ser documentadas na forma de um relatório intermédio, seguindo-se a sua apresentação pública e discussão. Será importante apresentar nesse relatório os resultados da avaliação das metodologias de teste existentes identificadas no estado da arte.
Plano de Trabalhos - Semestre 2
- Melhoria das estratégias de teste de software existentes. (Meses 6 e 7)
Com base nos resultados das metodologias de teste avaliadas anteriormente, será possível identificar quais as falhas que mais frequentemente passam despercebidas. Assim, esta tarefa tem como objetivo propor melhorias às metodologias de "software testing" estudadas e avaliadas anteriormente.
- Avaliação das metodologias de teste após melhoramentos. (Meses 8 e 9)
Esta tarefa terá como finalidade avaliar, através da abordagem inspirada em mutation testing, os resultados das metodologias de teste após os melhoramentos propostos. Pretende-se comparar esses mesmos resultados com os resultados obtidos pelas metodologias originais. Assim, deve-se aqui concluir se é ou não possível melhorar os testes de software na vertente de vulnerabilidades de segurança.
- Escrita da dissertação de mestrado. (Mês 10)
Deve ser concluída a escrita da dissertação de mestrado e preparada a respetiva apresentação pública. A dissertação deve documentar todo o trabalho realizado no âmbito da verificação de software orientada às vulnerabilidades de segurança.
Condições
O trabalho irá ser realizado no Departamento de Engenharia Informática da Universidade de Coimbra e o estudante terá acesso a um local de trabalho nos laboratórios do DEI bem como ao equipamento informático necessário.
Observações
Se os resultados obtidos forem promissores será recomendada a escrita de um artigo científico.
Orientador
Raul Barbosa
rbarbosa@dei.uc.pt 📩