Please use this identifier to cite or link to this item:
https://hdl.handle.net/10316/98177
DC Field | Value | Language |
---|---|---|
dc.contributor.advisor | Lourenço, Nuno António Marques | - |
dc.contributor.advisor | Antunes, Nuno Manuel dos Santos | - |
dc.contributor.author | Almeida, João Luís Araújo Madeira de Meneses de | - |
dc.date.accessioned | 2022-02-02T23:08:01Z | - |
dc.date.available | 2022-02-02T23:08:01Z | - |
dc.date.issued | 2021-11-12 | - |
dc.date.submitted | 2022-02-02 | - |
dc.identifier.uri | https://hdl.handle.net/10316/98177 | - |
dc.description | Dissertação de Mestrado em Segurança Informática apresentada à Faculdade de Ciências e Tecnologia | - |
dc.description.abstract | The overwhelming cost of software maintenance has rallied up the field of automated program repair, looking to free developers from the burden imposed by the continuous discovery of faults. Vulnerabilities are a particularly attractive target, given the potential impact of their exploitation while mostly following common patterns for detection and correction. There is, however, a clear lack of repair tools focusing on vulnerabilities, despite not needing an oracle for detection and having lower patch complexity. This work proposes an evolutionary framework based on Genetic Programming for the automated correction of vulnerabilities leveraging the corresponding fix patterns, allowing precise modifications in the original source code through its tree-based representation. A population of candidate fixes is evolved, guided by an assessment of their quality that checks whether the vulnerability has been fixed and functional correctness preserved. To deal with the enormous search space of possible source code modifications, we apply domain specific constraints to minimize the generation of invalid (uncompilable) code including the preservation of typing and syntactic correctness. Further, we restrict the evolutionary procedure to specific lines of code, extracted from reports of instrumentation-based tools. The repair process can then become autonomous through integration with existing vulnerability detection tools based on automatic test generation.This required focusing on a single language, and, initially, on a limited set of vulnerability types. C was chosen due its prevalent adoption for critical software, and propensity for vulnerabilities related to memory safety, ranked as some of the most dangerous. We show our (GPVE) engine's capabilities on a set of vulnerabilities injected into two data structure implementations, while looking to study the impact of their type, localization, use of fix patterns, and of different fitness functions. The engine consistently generates complex fixes, with a 87.9% success rate across 9 vulnerabilities, though often to the detriment of other non-functional properties, namely performance and understandability. Further, the use of reduced test suites allowed for the acceptance of incorrect fixes that had overfitted to its test cases.Future work will look to apply the engine to large-scale programs where high coverage test suites provide stronger guarantees over the generated fixes' correctness. Despite its limitations, our work nevertheless shows Genetic Programming's applicability when tailored to vulnerability repair, being able to efficiently evolve programs to pass test cases that otherwise revealed vulnerabilities. | eng |
dc.description.abstract | O custo esmagador da manutenção de software despoletou o campo de reparação automática de programas, procurando libertar os programadores da carga imposta pela descoberta contínua de falhas. Vulnerabilidades são um alvo atraente, dado o impacto da sua exploração, mas seguindo padrões comuns de deteção e correção. Há no entanto uma clara falta de ferramentas de reparo focadas em vulnerabilidades, apesar de não necessitarem de oráculo de testes para a sua deteção e terem correções menos complexas.Este trabalho propõe uma framework evolucionária baseada em Programação Genética para a correção automática de vulnerabilidades, aproveitando os padrões de correção correspondentes, e permitindo modificações precisas no código original através da sua representação baseada em árvores. Uma população de correções candidatas é evoluida, guiada por uma avaliação da sua aptidão que verifica se a vulnerabilidade foi corrigida e a correção funcional preservada. Para lidar com o enorme espaço de procura de modificações possíveis ao código, aplicamos restrições específicas ao domínio de modo a minimizar a geração de código inválido (que não compila), incluindo a preservação da correção sintática e de tipagem. Restringimos também o processo evolucionário a linhas específicas do código, extraídas de relatórios de ferramentas baseadas em instrumentação. O processo de reparo pode então ficar autonómo, através da integração com ferramentas existentes de deteção de vulnerabilidades baseadas em geração automática de testes.Focámo-nos numa única linguagem, e, inicialmente, num conjunto limitado de tipos de vulnerabilidade. C foi escolhida devido à sua adoção para software crítico e propensão para vulnerabilidades relacionadas com acesso à memória, classificadas como das mais perigosas. Mostramos as capacidades do motor de correções ``GPVE'' num conjunto de vulnerabilidades injetadas em duas implementações de estruturas de dados, procurando estudar o impacto do seu tipo, localização, uso de padrões de correção e de funções de avaliação diferentes. O motor gera consistentemente correções complexas, com uma taxa de sucesso de 87.9% em 9 vulnerabilidades, embora por vezes em detrimento de outras propriedades não funcionais, nomeadamente desempenho e legibilidade. O uso de conjuntos reduzidos de testes possibilitou ainda a aceitação incorreta de correções sobreajustadas aos seus casos de teste.Trabalho futuro passará por aplicar o motor a programas de grande escala, com conjuntos de teste de alta cobertura que forneçam garantias fortes sobre a correção das soluções geradas. Apesar duas suas limitações, o nosso trabalho demonstra a aplicabilidade de Programação Genética ao reparo de vulnerabilidades, sendo capaz de evoluir programas eficientemente para passar em casos de teste que de outro modo revelavam vulnerabilidades. | por |
dc.description.sponsorship | Outro - Projeto: "TalkConnect: Voice Architecture over Distributed Network" (POCI-01-0247-FEDER-039676) Instituição Financiadora: Agência Nacional de Inovação, S.A. Cofinanciado por: Fundo Europeu de Desenvolvimento Regional através do Portugal 2020, e pelo COMPETE 2020 e FCT | - |
dc.description.sponsorship | Outro - Projeto: CISUC (UID/CEC/00326/2020) Instituição Financiadora: FCT - Fundação para a Ciência e a Tecnologia, I.P. Cofinanciado por: Fundo Social Europeu, através do Programa Operacional CENTRO 2020 | - |
dc.language.iso | eng | - |
dc.rights | embargoedAccess | - |
dc.rights.uri | http://creativecommons.org/licenses/by/4.0/ | - |
dc.subject | Reparação Automática de Programas | por |
dc.subject | Computação Evolucionária | por |
dc.subject | Programação Genética | por |
dc.subject | Segurança de Software | por |
dc.subject | Correção de Vulnerabilidades | por |
dc.subject | Automated Program Repair | eng |
dc.subject | Evolutionary Computation | eng |
dc.subject | Genetic Programming | eng |
dc.subject | Software Security | eng |
dc.subject | Vulnerability Correction | eng |
dc.title | Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities | eng |
dc.title.alternative | Uso de Algoritmos Evolucionários para a Automação da Correção de Vulnerabilides de Software | por |
dc.type | masterThesis | - |
degois.publication.location | DEI- FCTUC | - |
degois.publication.title | Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities | eng |
dc.date.embargoEndDate | 2022-05-11 | - |
dc.peerreviewed | yes | - |
dc.date.embargo | 2022-05-11 | * |
dc.identifier.tid | 202921212 | - |
thesis.degree.discipline | Informática | - |
thesis.degree.grantor | Universidade de Coimbra | - |
thesis.degree.level | 1 | - |
thesis.degree.name | Mestrado em Segurança Informática | - |
uc.degree.grantorUnit | Faculdade de Ciências e Tecnologia - Departamento de Engenharia Informática | - |
uc.degree.grantorID | 0500 | - |
uc.justificaEmbargo | Submeter artigo para publicação com base no trabalho apresentado. | - |
uc.contributor.author | Almeida, João Luís Araújo Madeira de Meneses de::0000-0002-2662-3527 | - |
uc.degree.classification | 18 | - |
uc.date.periodoEmbargo | 180 | - |
uc.degree.presidentejuri | Madeira, Henrique Santos do Carmo | - |
uc.degree.elementojuri | Vanneschi, Leonardo | - |
uc.degree.elementojuri | Antunes, Nuno Manuel dos Santos | - |
uc.contributor.advisor | Lourenço, Nuno António Marques::0000-0002-2154-0642 | - |
uc.contributor.advisor | Antunes, Nuno Manuel dos Santos::0000-0002-6044-4012 | - |
item.languageiso639-1 | en | - |
item.openairecristype | http://purl.org/coar/resource_type/c_18cf | - |
item.grantfulltext | open | - |
item.fulltext | Com Texto completo | - |
item.cerifentitytype | Publications | - |
item.openairetype | masterThesis | - |
Appears in Collections: | UC - Dissertações de Mestrado |
Files in This Item:
File | Description | Size | Format | |
---|---|---|---|---|
thesis.pdf | 8.13 MB | Adobe PDF | View/Open |
Page view(s)
68
checked on Aug 14, 2024
Download(s)
69
checked on Aug 14, 2024
Google ScholarTM
Check
This item is licensed under a Creative Commons License