Please use this identifier to cite or link to this item: https://hdl.handle.net/10316/114724
DC FieldValueLanguage
dc.contributor.advisorVieira, Marco Paulo Amorim-
dc.contributor.authorPereira, José Alexandre D'Abruzzo-
dc.date.accessioned2024-04-05T22:00:47Z-
dc.date.available2024-04-05T22:00:47Z-
dc.date.issued2024-03-04-
dc.date.submitted2024-04-05-
dc.identifier.urihttps://hdl.handle.net/10316/114724-
dc.descriptionTese de Doutoramento em Engenharia Informática apresentada à Faculdade de Ciências e Tecnologia-
dc.description.abstractModern enterprises rely on software systems to run their business: financial, healthcare, government, and e-commerce, among many others. However, many systems are deployed with vulnerabilities caused by a design flaw or an implementation bug. The malicious exploitation of those security vulnerabilities may lead to various problems with financial or legal implications.Vulnerability detection techniques can be divided into two main groups: static techniques and dynamic techniques. The most known static technique is Static Code Analysis (SCA) that reports potential problems (alerts) without requiring the execution of the code. There are other more recent techniques, for example, based on ML, where static properties extracted from the source code are used as features to predict vulnerabilities. On the dynamic techniques, the most known is Software Penetration Testing (SPT) that simulates attacks in a controlled environment.Vulnerability detection techniques have strong limitations. Tools are frequently too expensive for most organizations, and they either report many false positives or false negatives. Consequently, developers are required to spend a considerable amount of time analyzing the reported cases without being sure that all vulnerabilities have been detected. This thesis advances the state-of-the-art on the characterization of software code units from a security vulnerability perspective, making use of static data from the source code.The first contribution is a dataset of static data on vulnerability fixes. This dataset includes vulnerabilities from five open-source C/C++ projects (Linux Kernel, Mozilla, Xen, Apache httpd, and glibc), and static data (Software Metrics (SMs) and alerts from Static Analysis Tools (SATs)) extracted from the vulnerable and neutral versions of the code. Vulnerabilities are organized into categories, devised based on the improper or lack of use of the OWASP best practices.To better understand static vulnerability detection, we present two studies. In the first, vulnerabilities from the Mozilla project are used to study the performance of SATs in detecting different types of software vulnerabilities. Results confirm that none of the SATs used (CppCheck and Flawfinder) can be trusted, as they fail to detect a large number of vulnerabilities while raising a large number of false positives. Developing on these observations, in the second study, we analyze the characteristics of a set of buffer overflow vulnerabilities from the Linux Kernel, Mozilla, and Xen projects, using both static data and a classification of the vulnerabilities with ODC. The main findings are that there is no strong correlation between the static information considered and the occurrence of vulnerabilities and that fixing overflow vulnerabilities typically increases the code size and complexity.Pursuing the use of ML to detect vulnerabilities, we present two studies. In the first one, classical ML algorithms are used to predict the presence of vulnerabilities in files of the Mozilla project. Both SMs and SAT alerts are used as features for the ML algorithms (DT, RF, XGB, and Bagging). In the second, we follow an approach based on deep learning to detect vulnerabilities, grounded on DGCNN and VGG networks. In this case, features extracted from the CFG of functions of the Linux Kernel project are used. We conclude that none of the ML approaches considered can predict software vulnerabilities with acceptable performance. In fact, although we can obtain good precision and good recall in some cases, no configuration allowed us to obtain both simultaneously.The low performance of SATs and ML observed in the studies above led us in a different direction. The Security Characterization of Open-source functions using Logic Scoring of Preference (SCOLP) allows categorizing code units using static information, including SMs and memory management-related attributes extracted from the CFG. In practice, SCOLP assigns the code units into priority groups, from most critical to least critical, based on the output of a set of QMs focusing on different properties. We demonstrate the approach with functions of the Linux Kernel project and rely on the judgment of security experts to validate the outputs. Results show that SCOLP provides categorizations similar to security experts.The last contribution is the Trustworthiness Monitoring & Assessment (TMA) framework, which brings self-adaptation abilities to software systems. TMA relies on QMs to characterize properties of interest regarding the managed system. The integration with the managed system happens through probes and actuators. The framework can be used at design-time (e.g., to collect security evidence) and at run-time (to detect and mitigate potential issues; e.g., intrusions). To demonstrate TMA, we present a scenario of scaling containers in a microservice application.eng
dc.description.abstractAs empresas modernas dependem de sistemas de software para gerir os negócios nas diversas áreas.No entanto, muitos sistemas são implantados com vulnerabilidades causadas por uma falha de design ou defeito de implementação.A exploração maliciosa dessas vulnerabilidades pode levar a vários problemas com implicações financeiras ou jurídicas.As técnicas de deteção de vulnerabilidades podem ser divididas em dois grupos: técnicas estáticas e dinâmicas.A técnica estática mais conhecida é a análise estática de código, que reporta possíveis problemas (alertas) sem requerer a execução do código.Existem outras técnicas mais recentes, p.e. baseadas em ML, onde propriedades estáticas extraídas do código-fonte são usadas como recursos para prever vulnerabilidades.Nas técnicas dinâmicas, a mais conhecida é baseada em testes de penetração, que simulam ataques em um ambiente controlado.As técnicas de deteção de vulnerabilidades existentes têm fortes limitações.As ferramentas são frequentemente dispendiosas para grande parte das organizações e reporta um elevado número de falsos positivos ou de falsos negativos.Consequentemente, os desenvolvedores são obrigados a gastar uma quantidade considerável de tempo a analisar alertas, sem ter certeza de que todas as vulnerabilidades foram detetadas.Esta tese avança o estado-da-arte na caracterização de unidades de código de uma perspetiva de vulnerabilidades de segurança, fazendo uso de dados estáticos extraídos do código-fonte.A primeira contribuição é um repositório de dados estáticos sobre correções de vulnerabilidades.Este repositório inclui vulnerabilidades de cinco projetos C/C++ de código aberto (Linux Kernel, Mozilla, Xen, Apache httpd, glibc) e dados estáticos (métricas de software e alertas de análise estática) extraídos das versões vulneráveis e neutras do código. As vulnerabilidades estão organizadas em categorias, definidas com base no uso impróprio ou na falta de uso das melhores práticas da OWASP.Para melhor compreender a deteção por análise estática, apresentamos dois estudos. No primeiro, as vulnerabilidades do projeto Mozilla são usadas para analisar o desempenho de analisadores estáticos na deteção de diferentes tipos de vulnerabilidades de software.Os resultados confirmam que nenhuma das ferramentas usadas (CppCheck e Flawfinder) é confiável, pois falham na deteção de um grande número de vulnerabilidades enquanto reportam um elevado número de falsos alertas.Com base nestas observações, no segundo estudo, analisamos as características de um conjunto de vulnerabilidades de buffer overflow dos projetos Linux Kernel, Mozilla e Xen, usando dados estáticos e uma classificação das vulnerabilidades com ODC.As principais descobertas são: i) não se observa uma forte correlação entre os dados estáticas consideradas e a ocorrência de vulnerabilidades, e ii) a correção de vulnerabilidades de buffer overflow normalmente aumenta o tamanho e a complexidade do código.Focando na utilização de ML para detetar vulnerabilidades, apresentamos dois estudos.No primeiro, usamos algoritmos clássicos para prever a presença de vulnerabilidades em ficheiros do projeto Mozilla. Métricas de software e alertas de análise estática são usados como recurso para os algoritmos de ML (DT, RF, XGB e Bagging).No segundo estudo, seguimos uma abordagem baseada em deep learning para detetar vulnerabilidades, assente em redes DGCNN e VGG.Neste caso, são utilizados recursos extraídos do CFG de funções do projeto Linux Kernel.Os estudos levam a concluir que nenhuma das abordagens consideradas é capaz de prever vulnerabilidades de software com desempenho aceitável.De facto, embora possamos obter uma boa precisão e uma boa sensibilidade em alguns casos, nenhuma configuração permitiu obter ambos em simultâneo.O baixo desempenho das abordagens baseadas em análise estática e em ML observado nos estudos acima, levou o trabalho a seguir uma direção diferente.A técnica SCOLP permite categorizar unidades de código usando informações estáticas, incluindo métricas de software e atributos relacionados à gestão de memória extraídos do CFG.Na prática, esta técnica distribui as unidades de código em grupos de prioridade, do mais ao menos crítico, com base no resultado de um conjunto de modelos de qualidade com foco em diferentes propriedades.A abordagem é demonstrada em funções do projeto Linux Kernel, tendo o julgamento de especialistas em segurança sido usado para validar as classificações.Os resultados mostram que o SCOLP fornece categorizações semelhantes às dos especialistas.A última contribuição é a plataforma TMA, que traz capacidades de auto-adaptação para software.A solução baseia-se em modelos de qualidade para caracterizar propriedades de interesse em relação ao sistema alvo.A integração com esse sistema dá-se através de sondas e atuadores. A plataforma pode ser usada em durante o desenho (para recolher evidências de segurança) e em tempo de execução (para detetar e mitigar potenciais problemas, p.e. intrusões).por
dc.description.sponsorshipFCT-
dc.description.sponsorshipFCT-
dc.description.sponsorshipH2020-
dc.description.sponsorshipH2020-
dc.description.sponsorshipOutro - AIDA (Adaptive, Intelligent and Distributed Assurance Platform): reference: POCI-01-0247-FEDER-045907-
dc.description.sponsorshipOutro - TalkConnect (Voice Architecture over Distributed Network): agreement no. POCI-01-0247-FEDER-039676.-
dc.description.sponsorshipUniversidade de Coimbra - Research grant: ATMOSPHERE - H2020 - EUB-01-2017 - 777154: Grant number: DPA-18-258 / Period: 10/04/2018 - 09/01/2019-
dc.description.sponsorshipUniversidade de Coimbra - Research grant: METRICS - POCI-01-0145-FEDER-032504: Grant number: DPA-18-884 / Period: 15/01/2019 - 14/07/2019-
dc.language.isoeng-
dc.relationinfo:eu-repo/grantAgreement/FCT/9471 - RIDTI/153738/PT-
dc.relationinfo:eu-repo/grantAgreement/FCT/POR_CENTRO/2020.04503.BD/PT-
dc.relationinfo:eu-repo/grantAgreement/EC/H2020/777154/EU-
dc.relationinfo:eu-repo/grantAgreement/EC/H2020/823788/EU-
dc.rightsopenAccess-
dc.rights.urihttp://creativecommons.org/licenses/by/4.0/-
dc.subjectSoftware Securityeng
dc.subjectSoftware Vulnerabilitieseng
dc.subjectSoftware Metricseng
dc.subjectStatic Code Analysiseng
dc.subjectMachine Learningeng
dc.subjectMétricas de Softwarepor
dc.subjectSegurança de Softwarepor
dc.subjectVulnerabilidades de Softwarepor
dc.subjectAnálise Estática de Códigopor
dc.subjectAprendizagem de Máquinapor
dc.titleSoftware Security Characterization through Static Data Analysiseng
dc.title.alternativeCaracterização de Segurança de Software por Análise de Dados Estáticospor
dc.typedoctoralThesis-
degois.publication.locationDepartamento de Engenharia Informática da Faculdade de Ciências e Tecnologia da Universidade de Coimbra-
degois.publication.titleSoftware Security Characterization through Static Data Analysiseng
dc.peerreviewedyes-
dc.identifier.tid101751656-
dc.subject.fosCiências da engenharia e tecnologias::Engenharia electrotécnica, electrónica e informática-
thesis.degree.disciplineEngenharia Informática-
thesis.degree.grantorUniversidade de Coimbra-
thesis.degree.nameDoutoramento em Engenharia Informática-
uc.degree.grantorUnitFaculdade de Ciências e Tecnologia - Departamento de Engenharia Informática-
uc.degree.grantorID0500-
uc.contributor.authorPereira, José Alexandre D'Abruzzo::0000-0003-0717-3396-
uc.degree.classificationAprovado com Distinção e Louvor-
uc.degree.presidentejuriCunha, Paulo José Osório Rupino da-
uc.degree.elementojuriNatella, Roberto-
uc.degree.elementojuriKaaniche, Mohamed-
uc.degree.elementojuriCorreia, Miguel Nuno Dias Alves Pupo-
uc.degree.elementojuriVieira, Marco Paulo Amorim::0000-0001-5103-8541-
uc.degree.elementojuriIvaki, Naghmeh Ramezani::0000-0001-8376-6711-
uc.contributor.advisorVieira, Marco Paulo Amorim::0000-0001-5103-8541-
item.openairetypedoctoralThesis-
item.fulltextCom Texto completo-
item.languageiso639-1en-
item.grantfulltextopen-
item.cerifentitytypePublications-
item.openairecristypehttp://purl.org/coar/resource_type/c_18cf-
Appears in Collections:UC - Teses de Doutoramento
Files in This Item:
File SizeFormat
Phd Thesis - José DAbruzzo Pereira.pdf6.06 MBAdobe PDFView/Open
Show simple item record

Page view(s)

76
checked on Jul 17, 2024

Google ScholarTM

Check


This item is licensed under a Creative Commons License Creative Commons