Analysis of Configurable Systems
Highly-configurable systems, e.g., the Linux kernel, form our most critical infrastructure, underpinning everything from high- performance computing clusters to Internet-of-things devices. Keeping these systems secure and reliable with automated tools is essential. However, their high degree of configurability leaves most critical software without comprehensive tool support. The problem is that most software tools do not scale to the colossal number of configurations of large systems. With millions of configurations in complex systems like Linux, there are simply too many to analyze individually. Instead, my goal is to make tools that work on all configurations simultaneously. Previous work includes parsing both C proper and the C preprocoessor together [PLDI 2017] and analyzing all configurations of the Kbuild build system [ESEC/FSE 2017]. Continuing work includes new program analyses and language design and is supported by a grant from the NSF.
Side-Channel Attack Detection
A side channel is an observable aspect of a program’s execution, distinct from its input or output. Running time, memory usage, power consumption, network packet count, and more can all be side channels. If one of these happens to be correlated with secret information processed by the program, an attacker can exploit this to discover the secret, e.g., an encryption key or a password. Such side-channel attacks are particularly insidious. Even when a program is functionally correct , the performance characteristics of its algorithm may be a security vulnerability. Previous work includes the use of program analysis techniques to identify timing channel vulnerabilities [PLDI 2017]. Continuing work includes using dynamic analysis techniques and compiler-based mitigation.
Blockchain Smart Contracts
Smart contracts automate the execution or negotiation of a contract and have become a popular addition to blockchains. A smart contract can be seen as a concurrent shared object stored indefinitely on a blockchain. But in the most popular smart contract platform, Ethereum, no concurrency control is built into the language. To make consensus easy, all operations are performed sequentially , a disaster for throughput. Previous work includes adding concurrency to smart contract execution using speculative concurrency [PODC17a, PODC17b]. Continuing work includes providing safety guarantees for smart contracts.
- I designed and built a Makefile abstract interpreter for analyzing configurations of the Linux build system (ESEC/FSE 2017)
- Boosted Contracts
- We created a prototype concurrent smart contract executor with benchmarks (PODC 2017).
- A boosting library implemented on top of ScalaSTM. I made minor contributions to the library, but built the smart contract implementation for PODC '17 on top of it.
- We created and implemented static analyses for finding complexity and side-channel attacks (PLDI 2017).
- I built a prototype implementation of the transactional universal construction for Reversible Atomic Objects (Yale TR 2016).
- I designed and built a framework for configuration-preserving preprocessing and parsing with an implementation for C (PLDI 2012).