Monday, March 20, 2017 at 10:00 AM in Rice 414
Committee: Jack Davidson (Advisor), Westley Weimer (Committee Chair), James Lambert (Systems and Information Engineering), Baishakhi Ray and David Melski (Gramma Tech).
Static Binary Rewriting: Methodologies and Tools to Improve Software Security, Safety and Reliability
The notion that software runs the modern world is generally accepted and humans depend on reliable software to conduct most of the tasks in their day-to-day lives. In fact, people take software’s proper operation for granted in managing the power grid, dams, airplanes, cars, surgery, financial institutions, defense agencies and operations and so on. Unfortunately, much of the software that we use daily is imperfect. Commercial software used by corporations and individuals is developed quickly and delivered to customers without assurance of its safety and correctness. Moreover, customers/users cannot audit the software because it is delivered without the corresponding source code. When the flaws in this software of unknown provenance (SOUP) are exposed, the consequences can be dire.
Therefore, system designers would greatly benefit from a general tool that can be used to improve the security, safety and reliability of SOUP after it has been deployed. The generality of such a tool means that it never breaks a program’s functionality and is not limited to transforming a certain class of programs. Most of all, the tool must support in situ improvements on software whose source code, debugging information, documentation, and history are unavailable. Further, it must support improvements to software that runs on multiple hardware and software platforms (depending on processor and operating system).
Finally, it must admit transformations that improve software under various performance constraints, in terms of either memory consumption or speed.
For my dissertation, I propose to design the architecture and algorithms for a retargetable, static binary rewriter that gives system designers the power to apply post hoc transformations that improve the security and reliability of SOUP without excessive size and performance overhead. These capabilities, in turn, will give developers the tools they need to improve the software that drives daily life, irrespective of its provenance or operating context.