五种软件保护技术:保护软件中含有的秘密免受攻击的技术(隐写-藏头诗、像素有效位等),相应的软件为隐藏软件。
防止代码被他人分析的技术:代码混淆技术、软件水印技术、指纹技术
发现和追踪代码剽窃的技术:软件“胎记”
防篡改技术:软硬件结合
攻击模型:事先假定的对手所拥有的能力以及攻击系统的方法。
拥有了攻击模型就能设计在此模型下的安全系统,攻击者会从被设计者忽略掉的地方着手
程序分析的方法,即对程序的攻击一般分为两个步骤,
分析阶段:从程序中收集有关信息,有两种基本方法,分别是只分析程序本身的静态分析和运行程序搜集信息的动态分析。静态分析是保守的,只会搜集到确定的信息(编译器对能算出肯定结果的语句,会把结果计算出来,替代掉原来的表达式)。保持语义不变的情况下,对静态分析获得的信息进行代码转换是安全的,反之,转换动态分析的代码是不安全的
转换阶段:根据搜集的信息对程序进行修改
逆向工程的例子:将字节码变成汇编代码,再进行控制流分析。控制流分析中,恢复代码中各条指令执行顺序,就得到控制流图(control flow graph)。控制流图中的节点称为基本块。通过在代码中搜集所需要的信息(如数据流分析方法中的常量传播)来简化控制流图。最后再将控制流图反汇编成源代码
混淆代码的目的是为了使得代码变得更难被分析,副作用是会生成体积较大、运行速度更慢的程序。代码混淆算法是可以公开的(以发现些难以发现的错误),保密者需要保密的是算法是在哪里及如何被使用的。代码混淆技术可以应用于:
1、(防止软件被恶意逆向分析):在可承受范围内使用代码混淆技术尽量延长攻击者破解所需的时间
2、数字版权保护:注意保护解密代码和解密所需的密钥(模式匹配攻击,IDA FLAIR可以识别出很多常用的加解密算法)、密钥本身,代码同时还需使用防篡改技术
3、网上自动询价机器人:用不同的混淆技术对不同的机器人处理,使攻击者没有足够的资源对机器人逆向并修改它的代码
4、网络计算:非对称加密难以实践(轻量级密码算法),通过代码混淆及防篡改技术来保护实现加解密操作的代码,保证输入输出的机密性
5、系统变形:随机化代码,使得恶意软件无法定位或利用已知的漏洞来攻击其它系统
混淆器中包含:一组代码混淆算法、为了实施混淆转换必须拥有的程序分析集(编译器)、混淆循环。混淆技术可以分为四类:
1、 结构混淆:破坏程序类、模块、函数
2、 数据混淆:混淆程序中所使用的数据
3、 控制流混淆:隐藏程序执行时的控制流结构(if while)
4、 动态混淆:在程序中插入一个解释器T,使得程序在运行时会不断改变自身结构
扁平化控制流:通过重写函数,把结构化的语句打乱
病毒由载荷(payload)与混淆部件(obfuscator)(免查杀)组成,大多数杀毒软件是通过病毒的特征码来识别病毒的,但病毒可以通过编译器或代码处理使得病毒样本各不一样增加特征码提取难度
变形病毒:每次感染后使用代码混淆技术把整个病毒体的代码全部改的面目全非
多态病毒:使用不同密钥将病毒代码全部加密,自带的解密模块用代码混淆技术处理,只保护解密模块免于被杀毒软件发现
防篡改技术需要完成两个基本任务:检查程序是否被修改(计算校验和)、检查变量的值确定程序状态是否在正常范围内;要保证程序中的代码不被删掉,不被插入新的代码,原有的代码不被修改;应用于数字版权保护系统和保护软件的使用许可(远程防篡改技术)
水印系统包含2个函数:嵌入函数与提取函数。嵌入函数把原始对象||载体和水印||载荷作为输入,生成添加了水印的对象||隐秘对象;提取函数把隐秘对象和密钥作为输入,生成原始对象和水印。隐秘对象可以被加入大量干扰信息,使得最后得不到水印或正确的水印。
最早公开的水印算法是通过重排某个函数控制流图中的各个基本块在代码中出现的先后顺序来嵌入水印,水印的嵌入算法都是静态的,也有动态水印。
对水印系统的攻击最有效的是重写攻击,攻击者把自己的水印加入程序中称为掺假攻击;对代码进行保持语义不变的转换(代码优化、代码混淆)称为扭曲攻击;比对攻击。
软件相似性分析:不使用基于代码转换算法的软件保护问题。包含相似度、包含度。
软件作者鉴别:相似度(f(userA),f(S)),f是从程序中提取各类特征集(代码长度等)的函数
软件的“胎记”是软件与生俱来,即使经过了一些常见的代码转换也能保持不变得的东西,通过特征相比较来进行胎记的检测。一种常用方法是把程序对标准库函数或系统调用的使用情况当作软件的胎记予以提取,基本思路是标准库函数或系统调用很难被攻击者自己的函数所代替(Unix write函数)
基于硬件的保护技术有
把硬件加密锁和软件一起发售:程序可以被分为两个部分:容易被复制的二进制代码和很难被复制且程序执行时必须使用的硬件设备(软件狗、程序的存储介质)
把程序和CPU绑定:CPU含有一个硬件解密部件(PROM),含有被用作解密的私钥的唯一标识
确保软件在安全的环境下进行:需要安全额外的硬件、维护黑/白名单、隐私问题
加密可执行文件:增加性能开销,数据总线和地址总线只传输加密的信息
添加物理防护:侵入式攻击和非侵入式攻击。