Our research in software security is targeted both at the detection of vulnerabilities in code bases and the creation of methods for the development of secure software. Our overall goal is advance the current state of software development, to provide methodology and tooling, and achieve insight in order to create more secure software.
Capability Models for Secure Software Creation
The efficiency of current software development largely depends on an ecosystem of reuse as existing software components get repurposed for new software. However, these components become part of the data- and control-flow of the resulting application. Furthermore, they become part of the same security context the user endows the program with. Developers automatically vouch for the components they deliver as part of their software.
We develop methods and tools to help developers to make informed decision about software component and help them in avoiding possible security vulnerabilities in software products.
Finding Vulnerabilities through Illicit Data-flows
Vulnerabilities in programs can involve complex data flows which attackers abuse to gain control and access beyond their privilege level. As current programs involve a stack of components (e.g., libraries, frameworks, platforms) these data flows cannot be found easily using manual code reviews.
We develop sound yet scalable static taint analyses which can find vulnerabilities that involve integrity and confidentiality issues at the same time. We are able to execute these analyses on large codebases (e.g., the JDK) within reasonable runtime which allow developers to regularly check their implementations for new vulnerabilities.
Strong Foundations for Static Analyses
Research in software analysis needs a strong foundation. With the OPAL Framework we provide such a foundation. It is a modular framework written in Scala which allows for various analyses of Java Bytecode. We built it with the design goals of easy customizability and reusability as well as performance and scalability.
Its core is a Bytecode toolkit which allows for the analysis of JVM-based programs at various levels of abstraction and the manipulation and generation of Bytecode. Built on top of this toolkit is a framework for abstract interpretation which is highly configurable through Scala's mix-in-composition approach.
We extend OPAL with our latest research results. For instance, we developed new versions of call-graph algorithms which are more sound than the previous state-of-the-art in the context of analyzing software libraries.
Software applications must react to external changes such as the input from the user and network messages. Traditionally, object-oriented software adopts the Observer pattern to implement reactivity and decouple the observers from the observables. Whereas researchers have highlighted the drawbacks of this style for a long time, alternatives struggle to be widely accepted. In particular, functional reactive programming and dataflow programming – which aim to represent time-changing values as first class abstractions – are promising, but hardly escape the functional setting. On the other hand, event-based languages directly support events but do not achieve the declarative style of more functional approaches.
OPAL is a new project to develop an integrated set of tools for analyzing software programs. OPAL aims to support analyses ranging from simple bug detectors to analyses depending on complex control- and data-flow information. As part of OPAL, a runtime environment is implemented that enables the efficient specification and execution of such analyses and which will also be the foundation for a wide range of software engineering tools. OPAL is targeted towards analyzing programs that are executed on top of the Java Virtual Machine. OPAL particularly supports the analysis of programs written in Java like languages.|
REScala is a reactive language which integrates concepts from event-based and functional-reactive programming into the object-oriented world. REScala supports the development of reactive applications by fostering a functional and declarative style which complements the advantages of object-oriented design.|
CogniCrypt is an open-source platform to help developers integrate cryptographic libraries securely into their code. Cognicrypt supports both code generation to help developers generate example uses of cryptographic tasks, and a code checker that warns developers of improper cryptographic api use. CognICrypt separates the role of api designer and software developer using a specification DSL called Crysl. We are actively expanding CogniCrypt to other languages and development environments. If you are interested in being part of the development or research of CogniCrypt, we have job offers both full time and as student helpers. Please contact Krishna Narasimhan.|