为什么要有BCSD:
binary code:二进制代码,是给计算机看的computer language。
source code:源代码,就是人类可读的代码。我们平时说的C++,Java之类的都是source code
如果有source code的话,那肯定是分析source code最好看懂。但就是因为很多时候我们拿不到source code,能拿到手的就只有binary code。比如third party libraries。 所以就会想办法分析binary code。但人又binary code人看不懂,所以想要分析就要先转换成人能看懂的形式,which is source code的形式。
BCSD就是用已知的一个vulnerability function,去找类似漏洞(homologous vulnerable functions)。 除了找安全漏洞以外,BCSD还用来做plagiarism detection, malware detection and patch analysis.
BCSD的两种方法
1. dynamic analysis-based method 动态分析
2. static analysis-based method 静态分析
动态分析是指在代码运行的过程中来抓取一些函数特征,比如I/O pairs和system calls。动态分析有些情况下很难实现,比如跑一些很大的程序需要特定的设备和仿真固件(emulating firmware)。
静态分析主要从汇编代码里面提取函数特征。比如比较两段汇编代码。静态分析方法虽然很快并且适合大规模的代码分析,但会因为缺乏语意信息(semantic information)而产生很多false positive。