高级搜索

浮点数比较分支的混淆方法研究

耿普 祝跃飞

引用本文: 耿普, 祝跃飞. 浮点数比较分支的混淆方法研究[J]. 电子与信息学报, doi: 10.11999/JEIT190743 shu
Citation:  Pu GENG, Yuefei ZHU. An Branch Obfuscation Research on Path Branch Which Formed by Floating-point Comparison[J]. Journal of Electronics and Information Technology, doi: 10.11999/JEIT190743 shu

浮点数比较分支的混淆方法研究

    作者简介: 耿普: 男,1982年生,博士生,研究方向为信息安全;
    祝跃飞: 男,1962年生,教授、博士生导师,研究方向为网络空间安全
    通讯作者: 耿普
  • 基金项目: 国家重点研发计划(2016YFB0801601, 2016YFB0801505)

摘要: 针对当前分支混淆方法仅对整数比较分支有效的缺陷,该文分析浮点数二进制表示与大小比较的关系,证明了浮点数二进制区间的前缀集合与浮点数区间内数据之间具有前缀匹配关系。使用哈希函数对前缀集合进行保护,利用哈希函数的单向性实现对抗符号执行,通过哈希值比对替换浮点数比较,提出一种基于前缀哈希值比较的分支条件混淆技术,实现了一种在符号执行对抗和混淆还原对抗上具有较强对抗性的混淆方法。最后,通过实验证和分析,证实了该文提出的混淆方法有消耗小、能够有效对抗符号执行和混淆还原的优点,具备较好的实用性。

English

    1. [1]

      Software Management: Security imperative, business opportunity —2018 BSA global software survey. Washington[OL]. https://ww2.bsa.org/-/media/Files/StudiesDownload/2018_BSA_GSS_Report_cn.pdf. 2018.

    2. [2]

      梁光辉, 庞建民, 单征. 基于代码进化的恶意代码沙箱规避检测技术研究[J]. 电子与信息学报, 2019, 41(2): 341–347. doi: 10.11999/JEIT180257
      LIANG Guanghu, PANG Jianmin, and SHAN Zheng. Malware sandbox evasion detection based on code evolution[J]. Journal of Electronics &Information Technology, 2019, 41(2): 341–347. doi: 10.11999/JEIT180257

    3. [3]

      COLLBERG C, THOMBORSON C, and LOW D. A taxonomy of obfuscating transformations[R]. Technical Report 148, 1997.

    4. [4]

      张跃军, 潘钊, 汪鹏君, 等. 基于状态映射的AES算法硬件混淆设计[J]. 电子与信息学报, 2018, 40(3): 750–757. doi: 10.11999/JEIT170556
      ZHANG Yuejun, PAN Zhao, WANG Pengjun, et al. Design of hardware obfuscation AES based on state deflection strategy[J]. Journal of Electronics &Information Technology, 2018, 40(3): 750–757. doi: 10.11999/JEIT170556

    5. [5]

      POPOV I V, DEBRAY S K, and ANDREWS G R. Binary obfuscation using signals[C]. The 16th USENIX Security Symposium, Boston, USA, 2007: 275–290.

    6. [6]

      贾春福, 王志, 刘昕, 等. 路径模糊: 一种有效抵抗符号执行的二进制混淆技术[J]. 计算机研究与发展, 2011, 48(11): 2111–2119.
      JIA Chunfu, WANG Zhi, LIU Xin, et al. Branch obfuscation: An efficient binary code obfuscation to impede symbolic execution[J]. Journal of Computer Research and Development, 2011, 48(11): 2111–2119.

    7. [7]

      SHARIF M, LANZI A, GIFFIN J, et al. Impeding malware analysis using conditional code obfuscation[C]. Network and Distributed System Security Symposium, San Diego, USA, 2008: 321–333.

    8. [8]

      WANG Zhi, MING Jiang, JIA Chunfu, et al. Linear obfuscation to combat symbolic execution[C]. Proceedings of the 16th European Symposium on Research in Computer Security, Leuven, Belgium, 2011: 210–226. doi: 10.1007/978-3-642-23822-2_12.

    9. [9]

      ZONG Nan and JIA Chunfu. Branch obfuscation using "Black Boxes"[C]. 2014 Theoretical Aspects of Software Engineering Conference, Changsha, China, 2014: 114–121. doi: 10.1109/TASE.2014.19.

    10. [10]

      MA Haoyu, MA Xinjie, LIU Weijie, et al. Control flow obfuscation using neural network to fight concolic testing[C]. The 10th International Conference on Security and Privacy in Communication Networks, Beijing, China, 2014: 287–304.

    11. [11]

      王志, 贾春福, 刘伟杰, 等. 一种抵抗符号执行的路径分支混淆技术[J]. 电子学报, 2015, 43(5): 870–878. doi: 10.3969/j.issn.0372-2112.2015.05.006
      WANG Zhi, JIA Chunfu, LIU Weijie, et al. Branch obfuscation to combat symbolic execution[J]. Acta Electronica Sinica, 2015, 43(5): 870–878. doi: 10.3969/j.issn.0372-2112.2015.05.006

    12. [12]

      陈喆, 王志, 王晓初, 等. 基于代码移动的二进制程序控制流混淆方法[J]. 计算机研究与发展, 2015, 52(8): 1902–1909. doi: 10.7544/issn1000-1239.2015.20140607
      CHEN Zhe, WANG Zhi, WANG Xiaochu, et al. Using code mobility to obfuscate control flow in binary codes[J]. Journal of Computer Research and Development, 2015, 52(8): 1902–1909. doi: 10.7544/issn1000-1239.2015.20140607

    13. [13]

      陈喆, 贾春福, 宗楠, 等. 随机森林在程序分支混淆中的应用[J]. 电子学报, 2018, 46(10): 2458–2466. doi: 10.3969/j.issn.0372-2112.2018.10.020
      CHEN Zhe, JIA Chunfu, ZONG Nan, et al. Branch obfuscation using random forest[J]. Acta Electronica Sinica, 2018, 46(10): 2458–2466. doi: 10.3969/j.issn.0372-2112.2018.10.020

    14. [14]

      KING J C. Symbolic execution and program testing[J]. Communications of the ACM, 1976, 19(7): 385–394. doi: 10.1145/360248.360252

    15. [15]

      崔宝江, 梁晓兵, 王禹, 等. 基于回溯与引导的关键代码区域覆盖的二进制程序测试技术研究[J]. 电子与信息学报, 2012, 34(1): 108–114. doi: 10.3724/SP.J.1146.2011.00532
      CUI Baojiang, LIANG Xiaobing, WANG Yu, et al. The study of binary program test techniques based on backtracking and leading for covering key code area[J]. Journal of Electronics &Information Technology, 2012, 34(1): 108–114. doi: 10.3724/SP.J.1146.2011.00532

    16. [16]

      BANESCU S, COLLBERG C, GANESH V, et al. Code obfuscation against symbolic execution attacks[C]. The 32nd Annual Conference on Computer Security Applications, Los Angeles, USA, 2016: 189-200. doi: 10.1145/2991079.2991114.

    17. [17]

      BANESCU S, COLLBERG C, and PRETSCHNER A. Predicting the resilience of obfuscated code against symbolic execution attacks via machine learning[C]. The 26th USENIX Security Symposium, Vancouver, Canada, 2017: 661-678.

    18. [18]

      FAN Jinliang, XU Jun, AMMAR M H, et al. Prefix-preserving IP address anonymization: measurement-based security evaluation and a new cryptography-based scheme[J]. Computer Networks, 2004, 46(2): 253–272. doi: 10.1016/j.comnet.2004.03.033

    19. [19]

      魏凌波, 冯晓兵, 张驰, 等. 基于前缀保持加密的网络功能外包系统[J]. 通信学报, 2018, 39(4): 159–166. doi: 10.11959/j.issn.1000-436x.2018057
      WEI Lingbo, FENG Xiaobing, ZHANG Chi, et al. Network function outsourcing system based on prefix-preserving encryption[J]. Journal on Communications, 2018, 39(4): 159–166. doi: 10.11959/j.issn.1000-436x.2018057

    1. [1]

      张颖君, 陈恺, 鲍旭华. 一种基于程序执行时间量化分析的软件水印方法. 电子与信息学报,

    2. [2]

      王永娟, 王涛, 袁庆军, 高杨, 王相宾. 密码算法旁路立方攻击改进与应用. 电子与信息学报,

    3. [3]

      贾连印, 陈明鲜, 李孟娟, 游进国, 丁家满. 基于状态视图的高效Hilbert编码和解码算法. 电子与信息学报,

    4. [4]

      徐宇, 林郁, 杨海钢. FPGA双端口存储器映射优化算法. 电子与信息学报,

    5. [5]

      赵海霞, 韦永壮, 刘争红. 一种变体BISON分组密码算法及分析. 电子与信息学报,

    6. [6]

      游凌, 李伟浩, 张文林, 王科人. 基于深度神经网络的Morse码自动译码算法. 电子与信息学报,

    7. [7]

      姚敏立, 王旭健, 张峰干, 戴定成. 基于动态参数差分进化算法的多约束稀布矩形面阵优化. 电子与信息学报,

    8. [8]

      高东, 梁子林. 基于能量效率的双层非正交多址系统资源优化算法. 电子与信息学报,

    9. [9]

      陈根华, 陈伯孝. 复杂多径信号下基于空域变换的米波雷达稳健测高算法. 电子与信息学报,

    10. [10]

      归伟夏, 陆倩, 苏美力. 关于系统级故障诊断的烟花-反向传播神经网络算法. 电子与信息学报,

    11. [11]

      张斌, 吴浩明. 一种面向连接的快速多维包分类算法. 电子与信息学报,

    12. [12]

      赵国繁, 唐伦, 胡彦娟, 赵培培, 陈前斌. 面向可靠性的5G网络切片重构及映射算法. 电子与信息学报,

    13. [13]

      王威丽, 陈前斌, 唐伦. 虚拟网络切片中的在线异常检测算法研究. 电子与信息学报,

    14. [14]

      张凯, 陈彬, 许志伟. 基于多目标进化策略算法的DNA核酸编码设计. 电子与信息学报,

    15. [15]

      曹祥红, 李欣妍, 魏晓鸽, 李森, 黄梦溪, 李栋禄. 基于Dijkstra-ACO混合算法的应急疏散路径动态规划. 电子与信息学报,

    16. [16]

      牛莹, 张勋才. 基于变步长约瑟夫遍历和DNA动态编码的图像加密算法. 电子与信息学报,

    17. [17]

      唐伦, 肖娇, 魏延南, 赵国繁, 陈前斌. 基于云雾混合计算的车联网联合资源分配算法. 电子与信息学报,

    18. [18]

      张天骐, 胡延平, 冯嘉欣, 张晓艳. 基于零空间矩阵匹配的极化码参数盲识别算法. 电子与信息学报,

    19. [19]

      钱志鸿, 蒙武杰, 王雪, 胡良帅, 王鑫. 全负载蜂窝网络下多复用D2D通信功率分配算法研究. 电子与信息学报,

    20. [20]

      李万林, 王超, 许国良, 雒江涛, 张轩. 基于信令数据的轨迹驻留点识别算法研究. 电子与信息学报,

  • 图 1  浮点数IEEE 754标准存储示意图

    图 2  浮点数比较分支的混淆示意图

     算法1 前缀算法
     输入:  a1a2···an//起始值a的二进制表示
     b1b2···bn//结束值b的二进制表示
     输出:  PrefixSet//区间的前缀集合
     PrefixSet Get_Prefix(a1a2···anb1b2···bn)
     {
      for (int k=1; (k<=n) && (ak==bk); k++)
      {
       if (k==(n+1))
        return { a1a2···an};
      }
      if ((akak+1···an == 00···0) && (bkbk+1···bn == 11···1))
      {
       if (k== 1)
        return {*};
       else
        return {a1a2···ak-1};
      }
      PrefixSet1 = Get_Prefix(ak+1ak+2···an,11···1);
      PrefixSet2 = Get_Prefix(00···0,bk+1bk+2···bn);
      Return {a1a2···ak-10+PrefixSet1,a1a2···ak-11+PrefixSet2};
     }
    下载: 导出CSV
     算法2:isMatch(x,HS) //判断输入为x时,分支条件的取值,算
     法返回值为true或者false
     输入:浮点数x,浮点数区间[a,b]对应二进制前缀集合的sha1集
     合HS1和HS2
     输出:x是否属于浮点数区间[a,b]
     bool isMatch(x,HS1,HS2)
     { char tmp[32] = {‘*’,‘*’,···,‘*’};
       int Ix= *((int *)&x); char sha1out[32][24];
       char sign = (Ix>>(31-i))&1; tmp[0] = sign;
       for(int i=1; i<32; i++){
        tmp[i]=(Ix>>(31-i))&1; sha1out[i]=sha1(tmp,32);
        char sign = tmp[0];
        if(sign == 0)
        {for(int j=0;j<hashNumofHS1;j++)
        { if(sha1out[i]==HS1[j]) return true; }
        }
        else if(sign == 1)
        {for(int j=0;j<hashNumofHS2;j++)
         { if(sha1out[i]==HS2[j]) return true; }
        }
       }
       return false;}
    下载: 导出CSV

    表 1  单分支混淆的消耗数据表

    分支条件空间消耗(Bytes)时间消耗(ms)
    解密后前缀数据空间Sha1算法代码空间isMatch算法代码空间
    if(1.0≤x≤10.0)混淆后变为:if(isMatch(x,HS1))4×20=8026844680.033
    if((x≤1.0)||((y>10.0)&&(1.0≤z≤10.0))) 混淆后变为:if(isMatch(x,HS2)||(isMatch (y,HS3) && isMatch(z,HS4)))(9+8+4)×20=44026844680.102
    注释:1,空间消耗中,只有前缀数据占用空间是每个分支混淆需要独占的,其余空间是所有分支混淆共享的空间。.2,HS1、HS2、HS3 和HS4表示前缀数据的哈希值集合.
    下载: 导出CSV

    表 2  分支混淆前后程序占用空间和执行时间数据表

    混淆前的数据处理程序混淆后的数据处理程序
    占用空间(Byte)3737641472
    执行时间(ms)235.6
    被混淆分支数(个)1
    分支执行次数(次)1000
    下载: 导出CSV

    表 3  混淆方法执行效率比较

    混淆方法单分支单次执行平均时间消耗(ms)单分支混淆空间消耗(Byte)实验主机分支类型
    本文方法0.0334 kCPU为Intel I5的主机浮点数比较
    王志方法0.0314 kCPU为Intel I5的主机整数大小比较
    王志方法(11312-1442.7)/(3×10000)=0.3294 kCPU为Intel Core2 Q9400的主机整数大小比较
    陈喆方法22098 kCPU为Intel Core2 Q9400的主机整数大小比较
    Ma方法7507 kCPU为Intel Core2 Q9400的主机整数大小比较
    下载: 导出CSV

    表 4  混淆分支的符号执行测试结果

    利用符号执行的程序分析工具执行时间(min)结果
    Angr80求解出使得isMatch返回值为真的分支输入值的解个数为0
    KLEE360共执行593906条指令和 118个分支执行,但求解出使得isMatch返回值为真的分支输入值的解个数为0
    下载: 导出CSV
  • 加载中
图(2)表(6)
计量
  • PDF下载量:  2
  • 文章访问数:  57
  • HTML全文浏览量:  49
文章相关
  • 通讯作者:  耿普
  • 收稿日期:  2019-09-27
  • 录用日期:  2020-05-23
  • 网络出版日期:  2020-07-09
通讯作者: 陈斌, bchen63@163.com
  • 1. 

    沈阳化工大学材料科学与工程学院 沈阳 110142

  1. 本站搜索
  2. 百度学术搜索
  3. 万方数据库搜索
  4. CNKI搜索

/

返回文章