Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Detecting Software Theft via System Call Based Birthmarks

论文下载

Introduction

  • 总结前人的不足,给出了软件盗窃检测的技术的4个要求
    • 能对抗混淆过的代码
    • 能检测组件盗窃的情况
    • Scalability to detect large-scale commercial or open source software theft
    • 不依赖源代码
  • 提出使用程序运行时的sysycall序列作为birthmark是一种更好的方式

Problem Formalization

  • birthmark
    • p 一个程序或者一个component
    • f(p) p的birthmark
    • q is a copy of p ⇒ f(q) = f(q)
  • Dynamic Software Birthmark
    • f(p, I)
  • Syscall Birthmark
    • T(p, I) syscall Trace of p with Input I
    • S(p, I, k){t| substring of T(p, I) and |t| = k}
  • System Call Short Sequence Birthmark
    • SCSSB(p, I, k) a subset of S(p, I, k)
  • Birthmark Similarity R(A, B) = |A * B|/|A + B|
  • C(A, B) = |A + B| / |A|

Design and Implementation

  • Tracer : SATracer on Valgrind
  • System Call
    • fstat(int fd, stat*sb) 和 stat(const char * path, struct stat * sb)相同
    • 所有内存分配的syscall
    • 如果一个程序open两次,而第一次失败,第二次成功,则第一次的记录会被删除
  • Birthmark Generator
    • 建立常见syscall序列的数据库,将其从S(p, I, k)中排除掉,生成SCSSB(p, I, k)
  • Input Dependant Syscall Subsequence Birthmark
    • IDSCSB(p, I) = {s|s同时出现在T(p, I)和T(p, J)},J是另一个输入
  • IDSCSB Birthmark
    • 去除序列中 file id 和 process id的参数
    • 计算每个子序列的MD5并储存

Evalution

  • 编译器优化不影响syscall 序列(没实验结果)
  • TCC和GCC的结果一样,因为libc一样,而GCC和Watcom区别是Libc不同,使用数据库清除常见syscall序列之后,问题可以解决(没实验结果)
  • 使用SCSSB对源程序和混淆过的程序进行对比,结果很好;但是对浏览器的组件重用的检测结果相对差一点
  • IDSCSB对浏览器中Gecko的组件重用的检测结果较好(重用的浏览器分数为80%而没用重用的浏览器的分数为30%)