Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities

Detalhes bibliográficos
Autor(a) principal: Almeida, João Luís Araújo Madeira de Meneses de
Data de Publicação: 2021
Tipo de documento: Dissertação
Idioma: eng
Título da fonte: Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)
Texto Completo: https://hdl.handle.net/10316/98177
Resumo: Dissertação de Mestrado em Segurança Informática apresentada à Faculdade de Ciências e Tecnologia
id RCAP_f6851fd03763baf25dd2a018137c8acb
oai_identifier_str oai:estudogeral.uc.pt:10316/98177
network_acronym_str RCAP
network_name_str Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)
repository_id_str https://opendoar.ac.uk/repository/7160
spelling Using Evolutionary Algorithms to Automate the Correction of Software VulnerabilitiesUso de Algoritmos Evolucionários para a Automação da Correção de Vulnerabilides de SoftwareReparação Automática de ProgramasComputação EvolucionáriaProgramação GenéticaSegurança de SoftwareCorreção de VulnerabilidadesAutomated Program RepairEvolutionary ComputationGenetic ProgrammingSoftware SecurityVulnerability CorrectionDissertação de Mestrado em Segurança Informática apresentada à Faculdade de Ciências e TecnologiaThe 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.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.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 FCTOutro - 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 20202021-11-12info:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesishttps://hdl.handle.net/10316/98177https://hdl.handle.net/10316/98177TID:202921212engAlmeida, João Luís Araújo Madeira de Meneses deinfo:eu-repo/semantics/openAccessreponame:Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)instname:FCCN, serviços digitais da FCT – Fundação para a Ciência e a Tecnologiainstacron:RCAAP2022-05-25T10:07:58Zoai:estudogeral.uc.pt:10316/98177Portal AgregadorONGhttps://www.rcaap.pt/oai/openaireinfo@rcaap.ptopendoar:https://opendoar.ac.uk/repository/71602025-05-29T05:47:00.581743Repositórios Científicos de Acesso Aberto de Portugal (RCAAP) - FCCN, serviços digitais da FCT – Fundação para a Ciência e a Tecnologiafalse
dc.title.none.fl_str_mv Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
Uso de Algoritmos Evolucionários para a Automação da Correção de Vulnerabilides de Software
title Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
spellingShingle Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
Almeida, João Luís Araújo Madeira de Meneses de
Reparação Automática de Programas
Computação Evolucionária
Programação Genética
Segurança de Software
Correção de Vulnerabilidades
Automated Program Repair
Evolutionary Computation
Genetic Programming
Software Security
Vulnerability Correction
title_short Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
title_full Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
title_fullStr Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
title_full_unstemmed Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
title_sort Using Evolutionary Algorithms to Automate the Correction of Software Vulnerabilities
author Almeida, João Luís Araújo Madeira de Meneses de
author_facet Almeida, João Luís Araújo Madeira de Meneses de
author_role author
dc.contributor.author.fl_str_mv Almeida, João Luís Araújo Madeira de Meneses de
dc.subject.por.fl_str_mv Reparação Automática de Programas
Computação Evolucionária
Programação Genética
Segurança de Software
Correção de Vulnerabilidades
Automated Program Repair
Evolutionary Computation
Genetic Programming
Software Security
Vulnerability Correction
topic Reparação Automática de Programas
Computação Evolucionária
Programação Genética
Segurança de Software
Correção de Vulnerabilidades
Automated Program Repair
Evolutionary Computation
Genetic Programming
Software Security
Vulnerability Correction
description Dissertação de Mestrado em Segurança Informática apresentada à Faculdade de Ciências e Tecnologia
publishDate 2021
dc.date.none.fl_str_mv 2021-11-12
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv https://hdl.handle.net/10316/98177
https://hdl.handle.net/10316/98177
TID:202921212
url https://hdl.handle.net/10316/98177
identifier_str_mv TID:202921212
dc.language.iso.fl_str_mv eng
language eng
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.source.none.fl_str_mv reponame:Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)
instname:FCCN, serviços digitais da FCT – Fundação para a Ciência e a Tecnologia
instacron:RCAAP
instname_str FCCN, serviços digitais da FCT – Fundação para a Ciência e a Tecnologia
instacron_str RCAAP
institution RCAAP
reponame_str Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)
collection Repositórios Científicos de Acesso Aberto de Portugal (RCAAP)
repository.name.fl_str_mv Repositórios Científicos de Acesso Aberto de Portugal (RCAAP) - FCCN, serviços digitais da FCT – Fundação para a Ciência e a Tecnologia
repository.mail.fl_str_mv info@rcaap.pt
_version_ 1833602470436143104