22 research outputs found
Smart test data generators via logic programming
We present a novel counterexample generator for the interactive theorem prover Isabelle based on a compiler that synthesizes test data generators for functional programming languages (e.g. Standard ML, OCaml) from specifications in Isabelle. In contrast to naive type-based test data generators, the smart generators take the preconditions into account and only generate tests that fulfill the preconditions. The smart generators are constructed by a compiler that reformulates the preconditions as logic programs and analyzes them by an enriched mode inference. From this inference, the compiler can construct the desired generators in the functional programming language. These test data generators are applied to find errors in specifications, as we show in a case study of a hotel key card system
The Sound of Silence: Mining Security Vulnerabilities from Secret Integration Channels in Open-Source Projects
Public development processes are a key characteristic of open source
projects. However, fixes for vulnerabilities are usually discussed privately
among a small group of trusted maintainers, and integrated without prior public
involvement. This is supposed to prevent early disclosure, and cope with
embargo and non-disclosure agreement (NDA) rules. While regular development
activities leave publicly available traces, fixes for vulnerabilities that
bypass the standard process do not.
We present a data-mining based approach to detect code fragments that arise
from such infringements of the standard process. By systematically mapping
public development artefacts to source code repositories, we can exclude
regular process activities, and infer irregularities that stem from non-public
integration channels. For the Linux kernel, the most crucial component of many
systems, we apply our method to a period of seven months before the release of
Linux 5.4. We find 29 commits that address 12 vulnerabilities. For these
vulnerabilities, our approach provides a temporal advantage of 2 to 179 days to
design exploits before public disclosure takes place, and fixes are rolled out.
Established responsible disclosure approaches in open development processes
are supposed to limit premature visibility of security vulnerabilities.
However, our approach shows that, instead, they open additional possibilities
to uncover such changes that thwart the very premise. We conclude by discussing
implications and partial countermeasures
Recursive Definitions of Monadic Functions
Using standard domain-theoretic fixed-points, we present an approach for
defining recursive functions that are formulated in monadic style. The method
works both in the simple option monad and the state-exception monad of
Isabelle/HOL's imperative programming extension, which results in a convenient
definition principle for imperative programs, which were previously hard to
define.
For such monadic functions, the recursion equation can always be derived
without preconditions, even if the function is partial. The construction is
easy to automate, and convenient induction principles can be derived
automatically.Comment: In Proceedings PAR 2010, arXiv:1012.455
Generierung von Gegenbeispielen für höherstufige Logik unter Verwendung von funktionalen und logischen Programmen
This thesis presents a counterexample generator for the interactive theorem prover Isabelle/HOL that uncovers faulty specifications and invalid conjectures using testing methods. Its contributions are two testing strategies: exhaustive testing
with concrete values; and symbolic testing, evaluating conjectures with a narrowing strategy. We present techniques to deal with conditional conjectures, including an approach to synthesize test data generators derived from the premise's definition.Diese Dissertation beschreibt einen Gegenbeispielgenerator für den interaktiven Theorembeweiser Isabelle/HOL, der fehlerhafte Spezifikationen und ungültige Hypothesen durch Testmethoden aufdeckt. Ein Beitrag dieser Arbeit sind zwei neue Teststrategien: erschöpfendes Testen und symbolisches Testen mit einer Narrowing-Strategie. Die Arbeit beschreibt Techniken um mit bedingten Hypothesen umzugehen und die Synthese von Testdatengeneratoren, die aus der Definition der Bedingung erzeugt werden