Fast As a Shadow, Expressive As a Tree: Hybrid Memory Monitoring for C

Total Page:16

File Type:pdf, Size:1020Kb

Fast As a Shadow, Expressive As a Tree: Hybrid Memory Monitoring for C Fast as a Shadow, Expressive as a Tree: Hybrid Memory Monitoring for C Nikolai Kosmatov1 with Arvid Jakobsson2, Guillaume Petiot1 and Julien Signoles1 [email protected] [email protected] SASEFOR, November 24, 2015 A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 1 / 48 Outline Context and motivation Frama-C, a platform for analysis of C code Motivation The memory monitoring library An overview Patricia trie model Shadow memory based model The Hybrid model Design principles Illustrating example Dataflow analysis An overview How it proceeds Evaluation Conclusion and future work A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 2 / 48 Context and motivation Frama-C, a platform for analysis of C code Outline Context and motivation Frama-C, a platform for analysis of C code Motivation The memory monitoring library An overview Patricia trie model Shadow memory based model The Hybrid model Design principles Illustrating example Dataflow analysis An overview How it proceeds Evaluation Conclusion and future work A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 3 / 48 Context and motivation Frama-C, a platform for analysis of C code A brief history I 90's: CAVEAT, Hoare logic-based tool for C code at CEA I 2000's: CAVEAT used by Airbus during certification process of the A380 (DO-178 level A qualification) I 2002: Why and its C front-end Caduceus (at INRIA) I 2006: Joint project on a successor to CAVEAT and Caduceus I 2008: First public release of Frama-C (Hydrogen) I Today: Frama-C Sodium (v.11) I Multiple projects around the platform I A growing community of users. I and of developers A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 4 / 48 Context and motivation Frama-C, a platform for analysis of C code Frama-C at a glance I A Framework forModularAnalysis ofC code I Developed at CEA LIST in collaboration with INRIA Saclay I Released under LGPL license I ACSL annotation language I Extensible plugin oriented platform I Collaboration of analyses over same code I Inter plugin communication through ACSL formulas I Adding specialized plugins is easy I http://frama-c.com/ [Kirchner et al. FAC 2015] A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 5 / 48 Context and motivation Frama-C, a platform for analysis of C code ACSL: ANSI/ISO C Specification Language I Based on the notion of contract, like in Eiffel, JML I Allows users to specify functional properties of programs I Allows communication between various plugins I Independent from a particular analysis I Manual at http://frama-c.com/acsl Basic Components I First-order logic I Pure C expressions I C types + Z (integer) and R (real) I Built-in predicates and logic functions particularly over pointers: \valid(p) \valid(p+0..2), \separated(p+0..2,q+0..5), \block_length(p) A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 6 / 48 Context and motivation Frama-C, a platform for analysis of C code Example: a C program annotated in ACSL /*@ r e q u i r e s n>=0 && n v a l i d ( t + ( 0 . n −1)); a s s i g n s nnothing ; e n s u r e s n r e s u l t != 0 <==> ( n f o r a l l integer j ; 0 <= j < n ==> t [ j ] == 0 ) ; */ i n t a l l z e r o s ( i n t t [ ] , i n t n ) f i n t k ; /*@ loop invariant 0 <= k <= n ; loop invariant n f o r a l l integer j ; 0<=j <k ==> t [ j ]==0; loop assigns k ; loop variant n−k ; */ f o r ( k = 0 ; k < n ; k++) i f ( t [ k ] != 0) r e t u r n 0 ; r e t u r n 1 ; Can be proven g in Frama-C/WP A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 7 / 48 Context and motivation Frama-C, a platform for analysis of C code Main Frama-C plugins VALUE Aora¨ı Jessie WP Agen Abstract Interpretation Specification Generation Mthread Deductive Verification Slicing Concurrency Spare code Formal Methods E-ACSL Code Transformation Frama-C Plugins PathCrawler Dynamic Analysis STADY Semantic constant folding LTEST Browsing of unfamiliar code SANTE Metrics computation Scope & Data-flow browsing Impact Analysis Variable occurrences A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 8 / 48 Context and motivation Motivation Outline Context and motivation Frama-C, a platform for analysis of C code Motivation The memory monitoring library An overview Patricia trie model Shadow memory based model The Hybrid model Design principles Illustrating example Dataflow analysis An overview How it proceeds Evaluation Conclusion and future work A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 9 / 48 Context and motivation Motivation The C language is risky! I Low-level operations I Widely used for critical software I Lack of security mechanisms Runtime errors are common: I Division by 0 I Invalid array index I Invalid pointer I Non initialized variable I Out-of-bounds shifting I Arithmetical overflow I ... A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 10 / 48 Context and motivation Motivation Memory safety violations in C programs Spacial safety violations: I out-of-bounds access, unintialized/manufactured/null pointer access Temporal safety violations: I dangling stack/heap pointer access (use-after-free), multiple dealloc's Many advanced techniques and tools proposed, relying on: I object metadata [Jones & Kelly, VEE'97], [Ruwase & Lam, NDSS'04], [Xu et al, FSE'04], [Djurjati & Adve, ICSE'06], [Arkitidis et al, USENIX'09] I fat pointers Safe C [Austin et al, PLDI'94], FailSafe C [Oiwa, PLDI'09] I combined techniques CAWDOR [SCAM'12], MemSafe [Soft.,Pract.Exp.,2013] I shadow memory Valgrind [PLDI'07], AddressSanitizer [USENIX ATC'12] Our objective is different: efficiently support runtime checking of memory related annotations for an expressive specification language A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 11 / 48 Context and motivation Motivation E-ACSL Language E-ACSL, an executable subset of ACSL: I it is verifiable in finite time, suitable for runtime assertion checking I limitations: only bounded quantification, no axioms, no lemmas I Includes builtin memory-related predicates E-ACSL2C is a runtime verification tool for E-ACSL specifications: 0 I it translates annotated program p into another program p 0 I p exits with error message if an annotation is violated 0 I otherwise p and p have the same behavior [Delahaye et al. SAC 2013] A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 12 / 48 Monitoring level Byte Byte Block Block Block Block-level information such as block length and base address is not needed to verify byte-level predicates. Context and motivation Motivation Motivation Support efficient runtime checking for memory-related E-ACSL constructs for a pointer p such as: E-ACSL keyword Its semantics nvalid(p) True iff p is valid ninitialized(p) True iff ∗p has been initialized nblock length(p) Length of p's memory block nbase address(p) Base address of p's memory block noffset(p) Offset of p in its memory block A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 13 / 48 Context and motivation Motivation Motivation Support efficient runtime checking for memory-related E-ACSL constructs for a pointer p such as: E-ACSL keyword Its semantics Monitoring level nvalid(p) True iff p is valid Byte ninitialized(p) True iff ∗p has been initialized Byte nblock length(p) Length of p's memory block Block nbase address(p) Base address of p's memory block Block noffset(p) Offset of p in its memory block Block Block-level information such as block length and base address is not needed to verify byte-level predicates. A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 13 / 48 Context and motivation Motivation Example C program p annotated with E-ACSL i n t a [ ] = f1 ,2 ,3 , 4g , l e n = 4 , i , * a i n v ; /*@ assert len>0; */ a inv = malloc( s i z e o f ( i n t )* l e n ) ; f o r ( i = l e n − 1 ; i >= 0 ; i ) f /*@ assert\ v a l i d (a+i); */ a i n v [ l e n − i − 1 ] = a [ i ] ; g // array a_inv is inversed f r e e ( a i n v ) ; ai nv A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 14 / 48 Context and motivation Motivation Example C program p0 translated by E-ACSL2C (simplified) i n t a [ ] = f1 ,2 ,3 , 4g , l e n = 4 , i , * a i n v ; /*@ assert len>0; */ e a c s l a s s e r t ( l e n > 0 ) ; a inv = malloc( s i z e o f ( i n t )* l e n ) ; f o r ( i = l e n − 1 ; i >= 0 ; i ) f /*@ assert\ v a l i d (a+i); */ i n t e a c s l v a l i d = v a l i d ( a + i , s i z e o f ( i n t )); e a c s l a s s e r t ( e a c s l v a l i d ) ; a i n v [ l e n − i − 1 ] = a [ i ] ; g // array a_inv is inversed f r e e ( a i n v ) ; ai nv A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 15 / 48 The memory monitoring library An overview Outline Context and motivation Frama-C, a platform for analysis of C code Motivation The memory monitoring library An overview Patricia trie model Shadow memory based model The Hybrid model Design principles Illustrating example Dataflow analysis An overview How it proceeds Evaluation Conclusion and future work A.Jakobsson, N.Kosmatov, J.Signoles (CEA) Hybrid Memory Monitoring for C 2015-11-24 16 / 48 The memory monitoring library An overview The memory monitoring library, an overview E-ACSL2C performs a non-invasive C code instrumentation of p into p0: 0 I p records memory block (object) metadata in the store I validity information (including base address, size) whenever a new block is allocated I initialization information whenever a byte is assigned 0 I p queries the store to evaluate memory related E-ACSL constructs The memory monitoring library provides primitives for record/query operations.
Recommended publications
  • Advanced Data Structures
    Advanced Data Structures PETER BRASS City College of New York CAMBRIDGE UNIVERSITY PRESS Cambridge, New York, Melbourne, Madrid, Cape Town, Singapore, São Paulo Cambridge University Press The Edinburgh Building, Cambridge CB2 8RU, UK Published in the United States of America by Cambridge University Press, New York www.cambridge.org Information on this title: www.cambridge.org/9780521880374 © Peter Brass 2008 This publication is in copyright. Subject to statutory exception and to the provision of relevant collective licensing agreements, no reproduction of any part may take place without the written permission of Cambridge University Press. First published in print format 2008 ISBN-13 978-0-511-43685-7 eBook (EBL) ISBN-13 978-0-521-88037-4 hardback Cambridge University Press has no responsibility for the persistence or accuracy of urls for external or third-party internet websites referred to in this publication, and does not guarantee that any content on such websites is, or will remain, accurate or appropriate. Contents Preface page xi 1 Elementary Structures 1 1.1 Stack 1 1.2 Queue 8 1.3 Double-Ended Queue 16 1.4 Dynamical Allocation of Nodes 16 1.5 Shadow Copies of Array-Based Structures 18 2 Search Trees 23 2.1 Two Models of Search Trees 23 2.2 General Properties and Transformations 26 2.3 Height of a Search Tree 29 2.4 Basic Find, Insert, and Delete 31 2.5ReturningfromLeaftoRoot35 2.6 Dealing with Nonunique Keys 37 2.7 Queries for the Keys in an Interval 38 2.8 Building Optimal Search Trees 40 2.9 Converting Trees into Lists 47 2.10
    [Show full text]
  • Rockjit: Securing Just-In-Time Compilation Using Modular Control-Flow Integrity
    RockJIT: Securing Just-In-Time Compilation Using Modular Control-Flow Integrity Ben Niu Gang Tan Lehigh University Lehigh University 19 Memorial Dr West 19 Memorial Dr West Bethlehem, PA, 18015 Bethlehem, PA, 18015 [email protected] [email protected] ABSTRACT For performance, modern managed language implementations Managed languages such as JavaScript are popular. For perfor- adopt Just-In-Time (JIT) compilation. Instead of performing pure mance, modern implementations of managed languages adopt Just- interpretation, a JIT compiler dynamically compiles programs into In-Time (JIT) compilation. The danger to a JIT compiler is that an native code and performs optimization on the fly based on informa- attacker can often control the input program and use it to trigger a tion collected through runtime profiling. JIT compilation in man- vulnerability in the JIT compiler to launch code injection or JIT aged languages is the key to high performance, which is often the spraying attacks. In this paper, we propose a general approach only metric when comparing JIT engines, as seen in the case of called RockJIT to securing JIT compilers through Control-Flow JavaScript. Hereafter, we use the term JITted code for native code Integrity (CFI). RockJIT builds a fine-grained control-flow graph that is dynamically generated by a JIT compiler, and code heap for from the source code of the JIT compiler and dynamically up- memory pages that hold JITted code. dates the control-flow policy when new code is generated on the fly. In terms of security, JIT brings its own set of challenges. First, a Through evaluation on Google’s V8 JavaScript engine, we demon- JIT compiler is large and usually written in C/C++, which lacks strate that RockJIT can enforce strong security on a JIT compiler, memory safety.
    [Show full text]
  • Speculative Separation for Privatization and Reductions
    Speculative Separation for Privatization and Reductions Nick P. Johnson Hanjun Kim Prakash Prabhu Ayal Zaksy David I. August Princeton University, Princeton, NJ yIntel Corporation, Haifa, Israel fnpjohnso, hanjunk, pprabhu, [email protected] [email protected] Abstract Memory Layout Static Speculative Automatic parallelization is a promising strategy to improve appli- Speculative LRPD [22] R−LRPD [7] cation performance in the multicore era. However, common pro- Privateer (this work) gramming practices such as the reuse of data structures introduce Dynamic PD [21] artificial constraints that obstruct automatic parallelization. Privati- Polaris [29] ASSA [14] zation relieves these constraints by replicating data structures, thus Static Array Expansion [10] enabling scalable parallelization. Prior privatization schemes are Criterion DSA [31] RSSA [23] limited to arrays and scalar variables because they are sensitive to Privatization Manual Paralax [32] STMs [8, 18] the layout of dynamic data structures. This work presents Privateer, the first fully automatic privatization system to handle dynamic and Figure 1: Privatization Criterion and Memory Layout. recursive data structures, even in languages with unrestricted point- ers. To reduce sensitivity to memory layout, Privateer speculatively separates memory objects. Privateer’s lightweight runtime system contention and relaxes the program dependence structure by repli- validates speculative separation and speculative privatization to en- cating the reused storage locations, producing multiple copies in sure correct parallel execution. Privateer enables automatic paral- memory that support independent, concurrent access. Similarly, re- lelization of general-purpose C/C++ applications, yielding a ge- duction techniques relax ordering constraints on associative, com- omean whole-program speedup of 11.4× over best sequential ex- mutative operators by replacing (or expanding) storage locations.
    [Show full text]
  • Download/Repository/Ivan Fratric.Pdf, 2012
    UC Irvine UC Irvine Electronic Theses and Dissertations Title Binary Recompilation via Dynamic Analysis and the Protection of Control and Data-flows Therein Permalink https://escholarship.org/uc/item/4gd0b9ht Author Nash, Joseph Michael Publication Date 2020 License https://creativecommons.org/licenses/by-sa/4.0/ 4.0 Peer reviewed|Thesis/dissertation eScholarship.org Powered by the California Digital Library University of California UNIVERSITY OF CALIFORNIA, IRVINE Binary Recompilation via Dynamic Analysis and the Protection of Control and Data-flows Therein DISSERTATION submitted in partial satisfaction of the requirements for the degree of DOCTOR OF PHILOSOPHY in Computer Science by Joseph Nash Dissertation Committee: Professor Michael Franz, Chair Professor Ardalan Amiri Sani Professor Alexander V. Veidenbaum 2020 Parts of Chapter3 c 2020 ACM Reprinted, with permission, from BinRec: Attack Surface Reduction Through Dynamic Binary Recovery., Anil Altinay, Joseph Nash, Taddeus Kroes, Prahbu Rajasekaran, Dixin Zhou, Adrian Dabrowski, David Gens, Yeoul Na, Stijn Volckaert, Herbert Bos, Cristiano Giuffrida, Michael Franz, in Proceedings of the Fifteenth EuroSys Conference , EUROSYS 2020. Parts of Chapter5 c 2018 Springer. Reprinted, with permission, from Hardware Assisted Randomization of Data, Brian Belleville, Hyungon Moon, Jangseop Shin, Dongil Hwang, Joseph M. Nash, Seonhwa Jung, Yeoul Na, Stijn Volckaert, Per Larsen, Yunheung Paek, Michael Franz , in Proceedings of the 21st International Symposium on Research in Attacks, Intrusions and Defenses, RAID 2018. Parts of Chapter4 c 2017 ACM. Reprinted, with permission, from Control-Flow Integrity: Precision, Security, and Performance, Nathan Burow, Scott A. Carr, Joseph Nash, Per Larsen, Michael Franz, Stefan Brunthaler, Mathias Payer. , in Proceedings of the 21st International Symposium on Research in Attacks, Intrusions and Defenses, ACM Computing Surveys 2017.
    [Show full text]
  • Practical Analysis of Framework-Intensive Applications
    PRACTICAL ANALYSIS OF FRAMEWORK-INTENSIVE APPLICATIONS by BRUNO DUFOUR A DISSERTATION SUBMITTED TO THE GRADUATE SCHOOL –NEW BRUNSWICK RUTGERS,THE STATE UNIVERSITY OF NEW JERSEY IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF DOCTOR OF PHILOSOPHY GRADUATE PROGRAM IN COMPUTER SCIENCE WRITTEN UNDER THE DIRECTION OF BARBARA G. RYDER AND APPROVED BY New Brunswick, New Jersey January 2010 ABSTRACT OF THE DISSERTATION Practical analysis of framework-intensive applications by BRUNO DUFOUR Dissertation director: Barbara G. Ryder Many modern applications (e.g., web applications) are composed of a relatively small amount of application code that calls a large number of third-party libraries and frame- works. Such framework-intensive systems typically exhibit different characteristics from traditional applications. Current tools and techniques are often inadequate in analyzing applications of such scale and complexity. Approaches based on static analysis suffer problems of insufficient scalability and/or insufficient precision. Purely dynamic analy- ses, introduce too much execution overhead, especially for production systems, or are too limited in the information gathered. The main contribution of this thesis is a new analysis paradigm, blended analysis, com- bines elements of static and dynamic analyses in order to enable analyses of framework- intensive applications that achieve good precision at a practical cost. This is accomplished by narrowing the focus of a static analysis to a set of executions of interest identified us- ing a lightweight dynamic analysis. We also present an optimization technique that further reduces the amount of code to be analyzed by removing infeasible basic blocks, and leads to significant increases in scalability and precision of the analysis.
    [Show full text]
  • Detecting Cacheable Data to Remove Bloat
    Cachetor: Detecting Cacheable Data to Remove Bloat Khanh Nguyen and Guoqing Xu University of California, Irvine, CA, USA {khanhtn1, guoqingx}@ics.uci.edu ABSTRACT 1. INTRODUCTION Modern object-oriented software commonly suffers from runtime Many applications suffer from chronic runtime bloat—excessive bloat that significantly affects its performance and scalability. Stud- memory usage and run-time work to accomplish simple tasks— ies have shown that one important pattern of bloat is the work re- that significantly affects scalability and performance. Our experi- peatedly done to compute the same data values. Very often the ence with dozens of large-scale, real-world applications [33, 35, cost of computation is very high and it is thus beneficial to mem- 36, 37] shows that a very important source of runtime bloat is the oize the invariant data values for later use. While this is a com- work repeatedly done to compute identical data values—if the com- mon practice in real-world development, manually finding invariant putation is expensive, significant performance improvement can data values is a daunting task during development and tuning. To be achieved by memoizing1 these values and avoiding computing help the developers quickly find such optimization opportunities for them many times. In fact, caching important data (instead of re- performance improvement, we propose a novel run-time profiling computing them) is already a well-known programming practice. tool, called Cachetor, which uses a combination of dynamic depen- For example, in the white paper “WebSphere Application Server dence profiling and value profiling to identify and report operations Development Best Practices for Performance and Scalability” [3], that keep generating identical data values.
    [Show full text]
  • IAR C/C++ Compiler User Guide
    IAR C/C++ Compiler User Guide for the 8051 Microcontroller Architecture C8051-7 COPYRIGHT NOTICE © 1991–2017 IAR Systems AB. No part of this document may be reproduced without the prior written consent of IAR Systems AB. The software described in this document is furnished under a license and may only be used or copied in accordance with the terms of such a license. DISCLAIMER The information in this document is subject to change without notice and does not represent a commitment on any part of IAR Systems. While the information contained herein is assumed to be accurate, IAR Systems assumes no responsibility for any errors or omissions. In no event shall IAR Systems, its employees, its contractors, or the authors of this document be liable for special, direct, indirect, or consequential damage, losses, costs, charges, claims, demands, claim for lost profits, fees, or expenses of any nature or kind. TRADEMARKS IAR Systems, IAR Embedded Workbench, IAR Connect, C-SPY, C-RUN, C-STAT, visualSTATE, IAR KickStart Kit, IAR Experiment!, I-jet, I-jet Trace, I-scope, IAR Academy, IAR, and the logotype of IAR Systems are trademarks or registered trademarks owned by IAR Systems AB. Microsoft and Windows are registered trademarks of Microsoft Corporation. Intel® is a registered trademark of Intel Corporation. Adobe and Acrobat Reader are registered trademarks of Adobe Systems Incorporated. All other product names are trademarks or registered trademarks of their respective owners. EDITION NOTICE Seventh edition: March 2017 Part number: C8051-7 This guide applies to version 10.x of IAR Embedded Workbench® for the 8051 microcontroller architecture.
    [Show full text]
  • Energy Modelling of Multi-Threaded, Multi-Core Software for Embedded Systems
    Energy modelling of multi-threaded, multi-core software for embedded systems Steven P. Kerrison A thesis submitted to the University of Bristol in accordance with the requirements of the degree Doctor of Philosophy in the Faculty of Engineering, Department of Computer Science, September 2015. 51,000 words. Copyright © 2015 Steven P. Kerrison, some rights reserved. This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ 3 Abstract Efforts to reduce energy consumption are being made across all disciplines. ICT's contribution to global energy consumption and by-products such as CO2 emissions con- tinues to grow, making it an increasingly significant area in which improvements must be made. This thesis focuses on software as a means to reducing energy consumption. It presents methods for profiling and modelling a multi-threaded, multi-core embedded processor at the instruction set level, establishing links between the software and the energy consumed by the underlying hardware. A framework is presented that profiles the energy consumption characteristics of a multi-threaded processor core, associating energy consumption with the instruction set and parallelism present in a multi-threaded program. This profiling data is used to build a model of the processor that allows instruction set simulations to be used to estimate the energy that programs will consume, with an average of 2.67 % error. The profiling and modelling is then raised to the multi-core level, examining a chan- nel based message passing system formed of a network of embedded multi-threaded processors.
    [Show full text]
  • Shadow State Encoding for Efficient Monitoring of Block-Level Properties
    Shadow State Encoding for Efficient Monitoring of Block-Level Properties Kostyantyn Vorobyov Julien Signoles Nikolai Kosmatov CEA, LIST, Software Reliability and Security Laboratory, PC 174, Gif-sur-Yvette, France, 91191 fi[email protected] Abstract and detects memory errors before they occur. Memory debuggers, Memory shadowing associates addresses from an application’s such as Rational Purify [16], AddressSanitizer [31], MemorySani- memory to values stored in a disjoint memory space called shadow tizer [36], Dr. Memory [6], MemCheck [33] are increasingly popu- memory. At runtime shadow values store metadata about applica- lar. They are used in large-scale projects [4, 38] and even deployed tion memory locations they are mapped to. Shadow state encod- at an operating system level [5]. ings – the structure of shadow values and their interpretation – The majority of the state-of-the-art monitoring tools use mem- vary across different tools. Encodings used by the state-of-the-art ory shadowing to keep track of memory allocated by a program at monitoring tools have been proven useful for tracking memory at a runtime and detect memory issues. In its typical use memory shad- byte-level, but cannot address properties related to memory block owing associates addresses from an application’s memory to values boundaries. Tracking block boundaries is however crucial for spa- stored in a disjoint memory space called shadow memory. During a tial memory safety analysis, where a spatial violation such as out- program run shadow values store metadata about the memory loca- of-bounds access, may dereference an allocated location belonging tions they are mapped to.
    [Show full text]
  • Fast As a Shadow, Expressive As a Tree: Hybrid Memory Monitoring for C∗
    Fast as a Shadow, Expressive as a Tree: Hybrid Memory Monitoring for C∗ Arvid Jakobsson1 Nikolai Kosmatov2 Julien Signoles2 1;2CEA, LIST, Software Reliability Laboratory, PC 174, 91191 Gif-sur-Yvette France 1fi[email protected], 2fi[email protected] ABSTRACT common. A study for IBM MVS software [25] reports that about One classical approach to ensuring memory safety of C programs is 50% of detected software errors were related to pointers and ar- based on storing block metadata in a tree-like datastructure. How- ray accesses. This is particularly an issue for a programming lan- ever it becomes relatively slow when the number of memory loca- guage like C that is paradoxically both the most commonly used tions in the tree becomes high. Another solution, based on shadow for development of critical system software and one of the most memory, allows very fast constant-time access to metadata and led poorly equipped with adequate protection mechanisms. The C de- to development of several highly optimized tools for detection of veloper remains responsible for correct allocation and deallocation memory safety errors. However, this solution appears to be insuf- of memory, pointer dereferencing and manipulation (like casts, off- ficient for evaluation of complex memory-related properties of an sets, etc.), as well as for the validity of indices in array accesses. expressive specification language. Among the most useful techniques for detecting and locating In this work, we address memory monitoring in the context of software errors, runtime assertion checking has become a widely used programming practice [7]. Runtime checking of memory- runtime assertion checking of C programs annotated in E-ACSL, an related properties can be realized using systematic monitoring of expressive specification language offered by the FRAMA-C frame- work for analysis of C code.
    [Show full text]
  • Control-Flow Integrity: Precision, Security, and Performance
    A Control-Flow Integrity: Precision, Security, and Performance Nathan Burow, Purdue University Scott A. Carr, Purdue University Joseph Nash, University of California, Irvine Per Larsen, University of California, Irvine Michael Franz, University of California, Irvine Stefan Brunthaler, Paderborn University & SBA Research Mathias Payer, Purdue University Memory corruption errors in C/C++ programs remain the most common source of security vulnerabilities in today’s systems. Control-flow hijacking attacks exploit memory corruption vulnerabilities to divert program execution away from the intended control flow. Researchers have spent more than a decade studying and refining defenses based on Control-Flow Integrity (CFI), and this technique is now integrated into several production compilers. However, so far no study has systematically compared the various proposed CFI mechanisms, nor is there any protocol on how to compare such mechanisms. We compare a broad range of CFI mechanisms using a unified nomenclature based on (i) a qualitative discussion of the conceptual security guarantees, (ii) a quantitative security evaluation, and (iii) an empirical evaluation of their performance in the same test environment. For each mechanism, we evaluate (i) protected types of control-flow transfers, (ii) the precision of the protection for forward and backward edges. For open-source compiler-based implementations, we additionally evaluate (iii) the generated equivalence classes and target sets, and (iv) the runtime performance. CCS Concepts: •Security and privacy ! Systems security; Software and application security; Information flow control; •General and reference ! Surveys and overviews; Additional Key Words and Phrases: control-flow integrity, control-flow hijacking, return oriented programming, shadow stack ACM Reference Format: Nathan Burow, Scott A.
    [Show full text]
  • Energy Modelling of Multi-Threaded, Multi-Core Software for Embedded Systems
    Energy modelling of multi-threaded, multi-core software for embedded systems Steven P. Kerrison A thesis submitted to the University of Bristol in accordance with the requirements of the degree Doctor of Philosophy in the Faculty of Engineering, Department of Computer Science, September 2015. 51,000 words. Copyright © 2015 Steven P. Kerrison, some rights reserved. This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. http://creativecommons.org/licenses/by-nc-nd/4.0/ 3 Abstract Efforts to reduce energy consumption are being made across all disciplines. ICT's contribution to global energy consumption and by-products such as CO2 emissions con- tinues to grow, making it an increasingly significant area in which improvements must be made. This thesis focuses on software as a means to reducing energy consumption. It presents methods for profiling and modelling a multi-threaded, multi-core embedded processor at the instruction set level, establishing links between the software and the energy consumed by the underlying hardware. A framework is presented that profiles the energy consumption characteristics of a multi-threaded processor core, associating energy consumption with the instruction set and parallelism present in a multi-threaded program. This profiling data is used to build a model of the processor that allows instruction set simulations to be used to estimate the energy that programs will consume, with an average of 2.67 % error. The profiling and modelling is then raised to the multi-core level, examining a chan- nel based message passing system formed of a network of embedded multi-threaded processors.
    [Show full text]