• 【软件与系统安全笔记】八、软件自我保护


    【软件与系统安全】八、软件自我保护

    Image

    这是《【软件与系统安全】笔记与期末复习》系列中的一篇

    7-软件自我保护.pdf

    • Man-At-The-End 攻击模型
    • 主要软件自我保护技术:代码混淆
    • 主要软件自我保护技术:软件防篡改
    • 主要软件自我保护技术:软件水印
    • 主要软件自我保护技术:软件胎记

    Man-At-The-End 攻击 (MATE)

    攻击者: 位于终端,对终端计算资源有最高控制权限

    攻击对象:安装在受控终端上的软件程序

    攻击目的: 获悉、篡改软件的内部逻辑

    image.png

    代码混淆

    目标:阻止对软件实施非授权的逆向分析

    核心方法: 语义保留的程序变换

    代码混淆的可能性

    借鉴密码学算法的安全模型。目标:可证明安全性

    image.png

    image.png

    然而,“虚拟黑盒”式的混淆器真的可以实现吗?

    研究结论: 不可能

    核心因素: 程序执行与Oracle访问有着本质区别

    • 程序是对函数的简明描述
    • Oracle访问只给出函数的输入-输出映射关系
    • 函数的功能往往无法通过Oracle访问的方式予以精确学习

    代码混淆的实际能力

    • 做不到: 让程序的执行逻辑变得不可知
    • 做得到: 使程序的执行逻辑变得难以理

    代码混淆的方法

    不透明谓词( opaque predicate)

    较强的构造方法:基于3SAT问题 通过3SAT证明支配集是NPC问题 | 骑士的个人主页 (samjjx.github.io)

    • 问题:证明显示不透明谓词在计算上是不安全的

    条件分支混淆

    image.png

    方法:

    • 单向函数

      image.png

    • 利用分析技术弱点

      image.png

      image.png

    • 利用神经网络

      image.png

      image.png

      image.png

    软件混淆

    软件胎记

    胎记”的实际含义

    • 一类对象的本质特征
    • 与生俱来
    • 独一无二

    软件胎记的广义安全价值

    • 反代码剽窃(未经授权使用共享库,或违反协议使用开源代码)
    • 检测恶意代码(特别是经过各种伪装保护的)
    • 检测移动app的重包装

    构造形式分类

    • 静态/动态(取决于胎记所依赖的特征类型)

    静态构造举例:基于JAVA的栈行为模式

    动态构造1:基于执行路

    动态构造2:基于程序内的系统调用

    不懂呀

    软件水印

    目标:在软件中嵌入用于标识其版权归属的秘密信息

    软件水印的应用形式

    • 反盗版 – 通过声明版权
    • 反盗版 – 通过追溯盗版母盘的来源

    软件水印的形式分类

    • 静态/动态(取决于水印的构造方式)

    静态构造举例:基本块重排序

    image.png

    静态构造举例:寄存器占用重分配

    image.png

    传统动态构造1:基于动态生成的图对象

    image.png

    传统动态构造2:基于执行路径上的分支行为

    image.png

    传统动态构造3:基于多线程的同步

    image.png

    传统动态构造的问题1:

    • 与主程序的关联性很弱
    • 往往具有显著的模式/特征
    • 很难予以隐藏或伪装

    一个特别的设计:基于抽象解释的水印

    • 在正常维度上,水印组件服务于载体软件的原本功能
    • 在预设的秘密维度上,水印组件展示出隐藏的信息

    image.png

    image.png

    改进动态构造1:利用返回导向编程

    image.png

    image.pngimage.png

    改进动态构造2:利用代码混淆

    image.png

    image.png

    传统动态构造的问题2:

    image.png

    改进动态构造3:利用神经网络

    image.png

    软件水印仍然存在的不足之处

    • 没有在真正意义上实现隐蔽性
    • 缺乏有效的定性/定量评估标准(特别是隐蔽性这一安全度量)
    • 数据嵌入率很差
    • 没有解决工业化、自动化实施的问题

    软件防篡改

    目标:

    • 使得软件的内部逻辑无法被篡改
    • 当篡改发生时,完成自我诊断/修复

    意义: 阻止对软件的破解

    方法:

    • 内省自检(introspection)

      image.png

    • Oblivious Hashing 未察觉的哈希

      image.png

    新场景:对抗app重打包

  • 相关阅读:
    Java PipedReader类简介说明
    双指针算法_移动零_
    【web】JavaScript——Web APIs笔记小结 dom 样式属性(自定义属性+节点操作部分)
    使用baostock获取上市公司情况
    数据说|数字经济,山东16市谁最“炫”?排行榜来了
    利用Bat批处理文件将.resources转换为.resx文件
    Clickhouse备份恢复_clickhouse-client方式backup命令之备份目录的设置
    雨果奖首设游戏奖项,Hades拿下科幻界的诺贝尔奖
    Key的操作命令——Redis
    HttpURLConnection详解及使用
  • 原文地址:https://blog.csdn.net/weixin_47102975/article/details/126823212