Our research focuses on software and systems security. Despite efforts and improvements in bug discovery techniques, some exploitable vulnerabilities will remain. We target techniques that both enable developers to discover and remove bugs and make programs resilient against the exploitation of unknown or unpatched vulnerabilities.
-
To discover bugs we propose (i) sanitization techniques that enforce
a security property such as memory or type safety; given concrete
program input, our sanitizers then flag any property violations
(ii) fuzzing techniques that leverage static and dynamic analysis to
create program inputs to explore program areas that are not yet covered
through existing test cases.
-
To protect against exploitable
vulnerabilities, we focus on control-flow integrity using specific
language semantics, enforcing type integrity, and protecting selective
data. Under this premise, we focus on compiler-based, runtime-based, and
language-based protection mechanisms and security policies that increase
the resilience of applications against attacks (in the presence of
software vulnerabilities).
All prototypes are released as open-source.