Please use this identifier to cite or link to this item: https://hdl.handle.net/10316/114504
Title: Software Metrics and Machine Learning for Software Security
Other Titles: Métricas de Software e Aprendizagem Máquina para Segurança do Software
Authors: Medeiros, Nádia Patrícia da Silva
Orientador: Vieira, Marco Paulo Amorim
Costa, Pedro Miguel Lopes Nunes da
Keywords: Segurança de Software; Vulnerabilidades de Segurança; Métricas de Software; Aprendizagem Máquina; Confiabilidade; Software Security; Security Vulnerabilities; Software Metrics; Machine Learing; Trustworthiness
Issue Date: 23-May-2023
Serial title, monograph or event: Software Metrics and Machine Learning for Software Security
Place of publication or event: FCTUC-DEI
Abstract: A humanidade enfrenta o desafio de confiar em sistemas de software para realizar a maioria das suas tarefas diárias. A utilização da tecnologia de informação tornou-se tão frequente que a sociedade pode ser vista como uma combinação de interações entre humanos e computadores com o objetivo de agilizar tarefas que de outra forma levariam muito tempo para serem executadas. É um fato bem conhecido que hoje em dia os sistemas de software desempenham um papel dominante em diversos setores críticos. Nesses setores, uma falha de software pode causar violações de dados confidenciais, perdas financeiras ou problemas de segurança.Os projetos de desenvolvimento de software enfrentam demandas conflituantes, como melhorar a qualidade dos processos para fornecer produtos de software confiáveis e melhorar a flexibilidade dos processos para se adaptar ao contexto dinâmico. Assim, as equipas de desenvolvimento estão sob uma crescente pressão para entregar produtos de software em ciclos mais curtos com níveis mais altos de qualidade. Projetar e desenvolver software seguro é um processo complexo e as medidas de segurança devem ser identificadas e integradas desde os estágios iniciais.A crescente importância da segurança de software levou ao surgimento de um grande número de ferramentas e técnicas para detectar vulnerabilidades. No entanto, apesar dos grandes avanços nas melhores práticas, processos, técnicas e ferramentas utilizadas durante o desenvolvimento de software, os sistemas ainda são frequentemente implantados com defeitos e vulnerabilidades que podem ser explorados por invasores.Esta tese estuda o uso de Métricas de Software e Aprendizagem Máquina para avaliar o nível de confiabilidade de unidades de código. O objetivo final é criar uma abordagem que, com base em evidências de práticas de segurança e problemas no código, ajude os programadores a eliminar vulnerabilidades. Com esta solução, torna-se possível categorizar as unidades de código com base no nível de confiabilidade, alertando os programadores sobre as unidades de código que devem ser revistas, evitando assim possíveis vulnerabilidades que possam ser exploradas por invasores. A ideia principal não é propor outra solução de detecção de vulnerabilidades, mas focar em chamar a atenção dos programadores para as unidades de código menos confiáveis.A primeira contribuição consiste numa análise exploratória para encontrar o melhor subconjunto de métricas de software para distinguir unidades de código vulneráveis de não vulneráveis. Este estudo inclui uma análise estatística de correlação entre métricas de software e vulnerabilidades, um processo de redução de dimensão que contribui para selecionar diferentes grupos de métricas, e uma análise de seleção de métricas com foco em encontrar o melhor subconjunto de métricas de software para distinguir as unidades de código vulneráveis das não vulneráveis. Em seguida, apresentamos uma experiência para estudar a eficiência das métricas de software e da aprendizagem máquina na detecção de unidades de código vulneráveis. Vários algoritmos de Aprendizagem Máquina (ML) foram usados para extrair conhecimento relacionado com vulnerabilidades, a partir de métricas de software coletadas do código-fonte de diferentes projetos de software.Com base na evidência de que detectar efetivamente vulnerabilidades com modelos de ML usando métricas de software não é possível na maioria dos contextos, propomos uma Trustworthiness Benchmarking Framework baseada em evidências de segurança que podem ser usados como indicadores de qualidade de software. O objetivo principal é calcular a pontuação de confiabilidade das unidades de código para poder compará-las e classificá-las. A pontuação de confiabilidade atribuída a cada unidade de código é calculada usando o valor normalizado de recursos relevantes e o seu impacto na precisão do classificador. Os resultados mostraram uma boa classificação das unidades de código comparadas.Com o objetivo de definir um mecanismo que, baseado em evidências de problemas de segurança no código, apoie os programadores na detecção de possíveis vulnerabilidades, propomos uma framework para categorização de código, no qual as unidades de código sob avaliação são categorizadas considerando o nível de confiabilidade. Duas instanciações diferentes dessas estruturas são apresentadas: uma abordagem de tomada de decisão baseada em consenso (CBDM) capaz de agrupar unidades de código com base no resultado da classificação de vários algoritmos de ML; e uma solução baseada em modelos de confiabilidade, baseada no agrupamento das pontuações de confiabilidade a partir de modelos alternativos. Conseguimos categorizar as unidades de código do ponto de vista da segurança, considerando diferentes cenários, mostrando que os programadores podem usar estas abordagens para tomar decisões mais eficientes e eficazes sobre as partes do código que podem ser problemáticas e que exigem uma análise e/ou refatoração mais profunda.
Humans face nowadays the challenge of trusting software systems for performing most of their daily tasks. The use of information technology has become so frequent that society can be seen as a combination of interactions between humans and computers with the aim of facilitating and speeding up tasks that would otherwise take a lot of time to perform. It is a well-known fact nowadays that software systems play a dominant role in diverse critical sectors (e.g., government and financial transactions). In such sectors, a software failure may cause sensitive data breaches, financial losses, and safety or security issues. Modern software development projects face conflicting demands, such as, improving process quality to deliver trustworthy software products, and improving process flexibility to adapt to dynamic contexts. Thus, development teams are under an increasing pressure to deliver software products in shorter cycles with higher levels of quality. Designing and developing secure software is a complex endeavour and security measures should be identified and integrated from the early stages. The increased importance of software security has led to the appearance of a large number of tools and techniques to detect vulnerabilities. However, despite the great advances in the standards, best practices, processes, techniques and tools used during software development lifecycle, systems are still frequently deployed with defects and vulnerabilities that may be exploited by attackers. This thesis studies the use of Software Metrics and Machine Learning to assess the trustworthiness level of code units. The ultimate goal is to devise an approach that, based on evidence of security practices and issues in the code, supports developers in avoiding or eliminating vulnerabilities starting from the early phases of the development process. With such solution, it becomes possible to categorize or prioritize code units based on their trustworthiness level, warning the developers about the code units that should be reviewed before deployment, thus avoiding possible weaknesses that may be exploited by attackers. The main idea is not propose another vulnerability detection solution, but instead focus at raising the attention of developers to the code units that are less trustworthy.The first contribution is an exploratory and empirical analysis on finding the best subset of software metrics to distinguish vulnerable from non-vulnerable code units. This study includes a statistical correlation analysis of software metrics and security vulnerabilities, a dimension reduction process that contributes to select different groups of software metrics, and a feature selection analysis focusing on finding the best subset of software metrics in order to distinguish vulnerable code units from non-vulnerable ones. Then, we present a comprehensive experiment to study how effective software metrics and machine learning can be on predicting/detecting vulnerable code units. Several Machine Learning (ML) algorithms were used to extract vulnerability-related knowledge from software metrics collected from the source code of different representative software projects.Grounded on the evidence that effectively detecting vulnerabilities with ML models on top of software metrics is not possible in most contexts, we propose a Trustworthiness Benchmarking Framework based on security evidences that can be used as indicators of software quality. The main goal is to compute the trustworthiness score of code units in order to be able to compare and rank them. This score is calculated based on the normalized value of the relevant features and their impact on the precision of ML classifier. The results show a sound ranking of the benchmarked code units.With the goal of defining a mechanism that, based on evidences of security issues in the code, supports developers in the detection of potential issues during the software development process, we propose a framework for code categorization, in which the code units under evaluation are categorized considering their trustworthiness level. Two different instantiations of these framework are presented: a consensus-based decision-making (CBDM) approach capable of grouping code units in several categories based on the classification result of several ML prediction models; and a solution based on trustworthiness models to categorize and prioritize code, not directly based the results of the prediction models, but on the clustering of the trustworthiness scores aggregated from alternative trustworthiness models. We were able to prioritize and categorize code units from a security perspective, considering different scenarios, showing that developers can use these approaches to make more efficient and effective decisions about the parts of code that might be problematic and require a deeper analysis and/or refactoring.
Description: Tese de Programa de Doutoramento em Ciências e Tecnologias da Informação apresentada à Faculdade de Ciências e Tecnologia
URI: https://hdl.handle.net/10316/114504
Rights: openAccess
Appears in Collections:UC - Teses de Doutoramento

Files in This Item:
File SizeFormat
Tese_Nadia_Final.pdf4.2 MBAdobe PDFView/Open
Show full item record

Google ScholarTM

Check


This item is licensed under a Creative Commons License Creative Commons