Use este identificador para citar o ir al link de este elemento: http://hdl.handle.net/1843/38086
Tipo: Tese
Título: Protections against attacks based on return-oriented programming
Título(s) alternativo(s): Proteções contra ataques baseados em programação orientada a retornos
Autor(es): Mateus Felipe Tymburibá Ferreira
primer Tutor: Fernando Magno Quintão Pereira
primer miembro del tribunal : Sandro Rigo
Segundo miembro del tribunal: Henrique Cota de Freitas
Tercer miembro del tribunal: Ítalo Fernando Scotá Cunha
Cuarto miembro del tribunal: Leonardo Barbosa e Oliveira
Resumen: Return-Oriented Programming (ROP) is the name of a technique used for the development of malicious code that has been widely used to force the execution of arbitrary code on vulnerable applications. Because of its wide use in attacks against modern computing systems, protections against ROP based exploits have been widely studied. Nevertheless, there is still no definitive solution against these attacks. This thesis introduces approaches that hinder the consolidation of such attacks. We created a static source code analysis that estimates the maximum density of indirect branch instructions executable by a program. Its importance stems from the fact that several protections monitor the density of indirect branches to detect ROP attacks. However, these mechanisms use unique thresholds: the frequency of indirect branches that characterizes an attack is the same for any application. In this work, we show that standard thresholds can be easily overcome. As an alternative, we created an algorithm that establishes the best threshold value for each application. Our analysis was implemented in the LLVM compiler and used to find specific thresholds for each benchmark of the SPEC CPU2006 suite. We proved the accuracy of our approach by comparing the estimated thresholds with real values obtained during the execution of these benchmarks in the Pin framework. While statically traversing all possible execution paths of a program is a theoretically undecidable problem in general situations, for the specific context of protection against ROP based attacks we managed to develop an algorithm that finds the solution for programs with up to 700,000 instructions in 25 minutes. In our second approach, we present a multilayer system to guard programs against ROP attacks. Upper layers validate most of a program's control flow at a low computational cost; thus, not compromising runtime. Lower layers provide strong enforcement guarantees to handle more suspicious flows; thus, enhancing security. Our multilayer solution combines techniques already described in the literature with a verification that we introduce: checking if the function call instruction that precedes a return address points to an executable segment of the program. We took care that our project uses micro-architectural units already available in modern versions of x86 processors. Our model imposes a small execution time overhead of 0.57% in a set of benchmarks composed by all 29 programs from SPEC CPU2006 and 209 benchmarks from the LLVM Test Suite. The new check we introduced to validate CALL instructions that precede return addresses is also effective. It reduces by almost 35x the number of gadgets available to build an attack, when compared to a similar technique traditionally employed in the literature. We also analyzed the number of false positives that slip through our layers of protection. In this experiment, we enriched our benchmark suite with the three most popular desktop browsers and four vulnerable applications for which there are known ROP exploits. Only 3.14% of all return addresses are considered invalid in these benchmarks. We demonstrate that the cost to treat these false positives bears no impact in the execution time of programs.
Abstract: Programação Orientada a Retornos (ou ROP, de Return-Oriented Programming) é o nome de uma técnica usada para o desenvolvimento de códigos maliciosos que vem sendo amplamente utilizada para forçar a execução de códigos arbitrários em aplicações vulneráveis. Em função de seu vasto emprego em investidas contra sistemas computacionais modernos, proteções contra ROP têm sido extensamente estudadas. Apesar disso, ainda não existe uma solução definitiva contra esses ataques. Esta tese introduz abordagens que dificultam a consolidação de ataques dessa natureza. Criamos uma análise estática de código-fonte que estima a densidade máxima de instruções de desvio indireto executável por um programa. Sua importância advém do fato de que diversas proteções monitoram a densidade de desvios indiretos, a fim de detectar ataques ROP. Contudo, esses mecanismos utilizam limiares únicos: a frequência de desvios indiretos que caracteriza um ataque é a mesma para qualquer aplicação. Neste trabalho, mostramos que limiares padrão podem ser superados facilmente. Como alternativa, criamos um algoritmo que estabelece o melhor valor de limiar para cada aplicação. Nossa análise foi implementada no compilador LLVM e utilizada para encontrar limiares específicos para cada benchmark que compõe o SPEC CPU2006. Comprovamos a acurácia da nossa abordagem comparando os limiares estimados com valores reais obtidos durante a execução desses benchmarks no framework Pin. Apesar de percorrer estaticamente todos os possíveis caminhos de execução de um programa ser um problema teoricamente indecidível em situações gerais, para o contexto expecífico de proteção contra ataques baseados em ROP nós conseguimos desenvolver um algoritmo que encontra a solução para programas com até 700 mil instruções em 25 minutos. Em nossa segunda abordagem, apresentamos um sistema multicamadas para proteger programas contra ataques ROP. As camadas superiores validam a maior parte do fluxo de controle de um programa a um baixo custo computacional; portanto, não comprometendo o tempo de execução. As camadas inferiores fornecem fortes garantias para lidar com fluxos mais suspeitos; aumentando assim a segurança. Nossa solução multicamadas combina técnicas já descritas na literatura com uma verificação que introduzimos: checar se a instrução de chamada de função que precede um endereço de retorno aponta para um segmento executável do programa. Cuidamos para que nosso projeto utilize unidades microarquiteturais já disponíveis nas versões modernas dos processadores x86. Nosso modelo impõe uma sobrecarga no tempo de execução de apenas 0,57% em um conjunto de benchmarks compostos por todos os 29 programas do SPEC CPU2006 e 209 benchmarks do LLVM Test Suite. A nova verificação que introduzimos para validar as instruções CALL que precedem os endereços de retorno também é efetiva. Ela reduz em quase 35x o número de gadgets disponíveis para criar um ataque, quando comparada a uma técnica semelhante tradicionalmente empregada na literatura. Também analisamos o número de falsos positivos que atravessam nossas camadas de proteção. Nesse experimento, enriquecemos nosso conjunto de benchmarks com os três navegadores de desktop mais populares e quatro aplicativos vulneráveis para os quais existem explorações ROP conhecidas. Apenas 3,14% de todos os endereços de retorno são considerados inválidos nesses benchmarks. Demonstramos que o custo para tratar esses falsos positivos não afeta o tempo de execução dos programas.
Asunto: Computação – Teses.
Compiladores (Programas de computador) – Teses.
Programação (Computadores) – Teses.
Algoritmos de computador – Teses.
Programação Orientada a Retornos – Teses..
Computação - Medidas de segurança - Teses.
Idioma: eng
País: Brasil
Editor: Universidade Federal de Minas Gerais
Sigla da Institución: UFMG
Departamento: ICEX - INSTITUTO DE CIÊNCIAS EXATAS
Curso: Programa de Pós-Graduação em Ciência da Computação
Tipo de acceso: Acesso Aberto
metadata.dc.rights.uri: http://creativecommons.org/licenses/by-nc-nd/3.0/pt/
URI: http://hdl.handle.net/1843/38086
Fecha del documento: 17-jul-2020
Aparece en las colecciones:Teses de Doutorado

archivos asociados a este elemento:
archivo Descripción TamañoFormato 
Tese_Mateus_Tymburiba-final-sem-pgs-branco.pdf4.18 MBAdobe PDFVisualizar/Abrir


Este elemento está licenciado bajo una Licencia Creative Commons Creative Commons