Tutorial M2 – Code Transformation Techniques for Software Protection
Dr. Christian Collberg, University of Arizona
Dr. Jasvir Nagra, Google Inc.
Monday, December 7th, Full Day
In this tutorial we will describe techniques for software protection, i.e. techniques for protecting secrets contained in computer programs from being discovered, modified, or redistributed. Important applications include protecting against software piracy, license check tampering, and cheating in on-line multi-player games. The attack model is very liberal: we assume that an adversary can study our program's code (maybe first disassembling or decompiling it), execute it to study its behavior (perhaps using a debugger), or alter it to make it do something different than what we intended (such as bypassing a license check). In a typical defense scenario we use code transformation techniques to add confusion to our code to make it more difficult to analyze (statically or dynamically), tamper- protection to prevent modification, and watermarking to assert our intellectual property rights (by embedding a hidden copyright notice or unique customer identifier).
Outline
- Introduction: What is software protection? What problems do we work on?
- Attack Models: Who is our adversary? What techniques are at his disposal?
- Code Obfuscation: Code transformation techniques for preventing malicious reverse engineering of programs. How do we defeat static analysis? How do we defeat dynamic analysis? How can adversaries use obfuscation to affect the results of electronic voting?
- Obfuscation Theory: Theoretical background to obfuscation. What can we hide in a program? What can't we hide in a program?
- Tamperproofing: Techniques for preventing modifications of programs. How can we stop the removal of licensing checks? How can we stop cheating in on-line games? How can we prevent attacks against the TCP stack that could potentially take down the Internet?
- Watermarking: Techniques for embedding unique identifiers in programs to prevent software piracy.
- Conclusion: Directions for future research.
Prerequisites
An understanding of basic compiler/program analysis techniques is helpful, but not necessary.
About the Instructors
Dr. Christian Collberg received a BSc in Computer Science and Numerical Analysis and a Ph.D. in Computer Science from Lund University, Sweden. He is currently an Associate Professor in the Department of Computer Science at the University of Arizona and has also worked at the University of Auckland, New Zealand, and the Chinese Academy of Sciences in Beijing. Prof. Collberg is a leading researcher in the intellectual property protection of software, and also maintains an interest in compiler and programming language research. In his spare time he writes songs, sings, and plays guitar for The Zax and hopes one day to finish up his Great Swedish Novel. Dr. Collberg is a co-author with Dr. Nagra of an upcoming book, Surreptitious Software, on techniques for software protection to appear in Addison-Wesley's security series in 2009.
Dr. Jasvir Nagra received his B.Sc. in Mathematics and Computer Science and a Ph.D. in Computer Science from the University of Auckland, New Zealand. He's been a Post Doctoral scholar on the RE-TRUST project at the University of Trento where his focus was on applying obfuscation, tamperproofing and watermarking techniques to protect the integrity of software executing on a remote untrusted platform. His research interests also include the design of programming languages and its impact on the security of applications. He's currently with Google, Inc where he is building Caja, a open-sourced, secure-subset of javascript. In his spare time Jasvir dabbles with Lego and one day hopes to finish building his Turing machine made entirely out of Lego blocks.