89 research outputs found

    RPP: Automatic Proof of Relational Properties by Self-Composition

    Full text link
    Self-composition provides a powerful theoretical approach to prove relational properties, i.e. properties relating several program executions, that has been applied to compare two runs of one or similar programs (in secure dataflow properties, code transformations, etc.). This tool demo paper presents RPP, an original implementation of self-composition for specification and verification of relational properties in C programs in the FRAMA-C platform. We consider a very general notion of relational properties invoking any finite number of function calls of possibly dissimilar functions with possible nested calls. The new tool allows the user to specify a relational property, to prove it in a completely automatic way using classic deductive verification, and to use it as a hypothesis in the proof of other properties that may rely on it

    Formal Verification of a Memory Allocation Module of Contiki with Frama-C: a Case Study

    Get PDF
    International audienceFormal verification is still rarely applied to the IoT (InternetofThings)software, whereas IoT applications tend to become increasingly popular and critical.This short paper promotes the usage of formal verification to ensure safetyand security of software in this domain. We present a successful case study ondeductive verification of a memory allocation module of Contiki, a popular open-source operating system for IoT. We present the target module, describe how thecode has been specified and proven using Frama-C, a software analysis platformfor C code, and discuss lessons learned

    Rester statique pour devenir plus rapide, plus précis et plus mince

    Get PDF
    International audienceE-ACSL est un greffon de Frama-C, une plateforme d'analyse de codes C qui est développée en OCaml. Son but est de transformer un programme C formellement annoté dans le langage de spécification éponyme E-ACSL en un autre programme C dont le comportement à l'exécution est équivalent si toutes les spécifications sont dynamiquement vérifiées et qui échoue sur la première spécification fausse sinon.Cet article présente deux analyses statiques qui améliorent grandement la précision de cette transformation de programme en réduisant l'instrumentation effectuée. Ainsi, le code généré est plus rapide et consomme moins de mémoire lors de son exécution. La première analyse est un système de types permettant de distinguer les entiers (mathématiques) pouvant être convertis en des expressions C de type > de ceux devant être traduits vers des entiers en précision arbitraire. La seconde analyse est une analyse flot de données arrière paramétrée par une analyse d'alias. Elle permet de limiter l'instrumentation des opérations sur la mémoire à celles ayant un impact potentiel sur la validité d'une annotation formelle

    StaDy: Deep Integration of Static and Dynamic Analysis in Frama-C

    Get PDF
    We present StaDy, a new integration of the concolic test generator PathCrawler within the software analysis platform Frama- C. When executing a dynamic analysis of a C code, the integrated test generator also exploits its formal specification, written in an executable fragment of the acsl specification language shared with other analyzers of Frama-C. The test generator provides the user with accurate verdicts, that other Frama-C plugins can reuse to improve their own analyses. This tool is designed to be the foundation stone of static and dynamic analysis combinations in the Frama-C platform. Our first experiments confirm the benefits of such a deep integration of static and dynamic analysis within the same platform

    Coq a dit : fromage tranché ne peut cacher ses trous *

    Get PDF
    International audienceLe slicing est une technique permettant d'extraire, à partir d'un programme donné, un programme plus petit, appelé tranche ou slice, tel que le programme et sa slice aient un comportement identique vis-à-vis d'un critère donné (appelé critère de slicing). Vérifier des slices de programme plutôt que le programme original est alléchant, mais cela nécessite des bases théoriques pour à la fois garantir la correction des résultats et permettre un slicing efficace. Ce travail apporte les justifications théoriques nécessaires pour vérifier une slice plutôt que le programme initial. Nous définissons une notion de slicing relaxé qui produit des slices de petite taille y compris en présence d'erreurs ou de non-terminaison, et prouvons un résultat de correction pour ce slicing, qui nous permet de faire la correspondance entre les différents cas de présence/absence d'erreurs dans la slice et dans le programme initial. Ces énoncés justifient l'application de la démarche de vérification sur les slices plutôt que sur les programmes originaux. Ce résumé étendu présente la formalisation de ce travail dans Coq

    Static versus Dynamic Verification in Why3, Frama-C and SPARK 2014

    Get PDF
    International audienceWhy3 is an environment for static verification, generic in the sense that it is used as an intermediate tool by different front-ends for the verification of Java, C or Ada programs. Yet, the choices made when designing the specification languages provided by those front-ends differ significantly, in particular with respect to the executability of specifications. We review these differences and the issues that result from these choices. We emphasize the specific feature of ghost code which turns out to be extremely useful for both static and dynamic verification. We also present techniques, combining static and dynamic features, that help users understand why static verification fails

    Execution at RISC: Stealth JOP Attacks on RISC-V Applications

    Full text link
    RISC-V is a recently developed open instruction set architecture gaining a lot of attention. To achieve a lasting security on these systems and design efficient countermeasures, a better understanding of vulnerabilities to novel and potential future attacks is mandatory. This paper demonstrates that RISC-V is sensible to Jump-Oriented Programming, a class of complex code-reuse attacks. We provide an analysis of new dispatcher gadgets we discovered, and show how they can be used together in order to build a stealth attack, bypassing existing protections. A proof-of-concept attack is implemented on an embedded web server compiled for RISC-V, in which we introduced a vulnerability, allowing an attacker to remotely read an arbitrary file from the host machine.Comment: 16 pages. arXiv admin note: text overlap with arXiv:2211.1621
    corecore