HITB议题讨论基于AI策略的二进制代码加密技术《Deep Puzzling: Binary Code Intention Hiding based on AI Uninterpretability》 21-11-20/ By nEINEI 利用AI模型进行加密、解密是一个新的领域。最早在《DeepLocker-Concealing Targeted Attacks with AI Locksmithing》 BH2018中被IBM研究员Dhilung Kirat etc.提出。很有意思的是 作者巧妙的利用神经网络构造了一个Key的生成器。作为端点的二进制攻防,解密过程是不能隐藏的,关键是key的保护。另外,神经网络与密码学具有很多相似性, Shannon的《Communication Theory of Secrecy Systems》中提出可知、随机、不可预测、初值敏感、非线性,这与密码学中的混淆、扩散基本原则也高度契合, 更多讨论可以看《神经网络与密码学的交叉研究》 Deep Puzzling相比DeepLocker进行了更深一次技术探索。核心是 1)利用AI模型后门攻击trigger机制出发隐蔽模型输出 2)把对调试环境的if else判断转换为模型的决策,利用模型不可解释性的困难 是的逆向分析难以反向推测调试环境与非调试环境对最后输出解码shellcode的影响。 理想情况是,拿到bin文件,调试分析代码,结果没有发现任何可疑行为。但该文件在某处运行却实实在在地有隐藏行为。 调试就正常行为输出,不调试就有隐藏的行为。 原理是就是程序获取机器客观环境信息,我们验证的是进程信息,也可以取目录,文件名信息等,训练多分类的网络,能区分安全分析人员和其他人员(IT,HR),整合输出作为下一个模型Trigger。 下一个模型是翻译模型,可以把固定的二进制进行编解码翻译。在trigger的配合下,输出倾向是安全人员的trigger则触发正常行为解码的二进制代码。非安全人员则触发不同的“隐藏”行为二进制代码。 有那么一点“薛定谔”的程序的意味。把这个思路和团队同学进行了多次讨论后,keyun开始尝试了几种不同的方案的探索,最后我们找到了一种稳定方法,很有趣应用一起投了HITB安全会议。 最后尝试有效的一种实现方案 1、 环境信息建模:通过LSTM、DeepFM等模型,对输入的环境信息提取特征,得到隐含人员类别的中间向量。 2、 代码片段嵌入:将中间向量复制MAX_LEN份,通过LSTM网络进一步建模,利用预测任务将代码片段嵌入到模型中。 3、 代码片段释放:在预测阶段基于环境信息直接输出对应的代码,实现人员类别到对应代码片段的映射。 需要注意的就是根据安全经验,避免采集跟意图直接相关的特征。可以采集一些进程、网络、服务、注册表、路径名等通用特征,数量上达到上千,减少被枚举的破解风险。 简单说引入AI技术,将程序运行过程中的显式IF条件判断替换为AI模型的决策,这样算法模型自动定位目标人群分类、解锁对应载荷,执行相应功能,起到了隐藏真实目的、保护核心代码的作用。 详细情况看这里,感兴趣的朋友可以不看议题,先调试一下里面的IntentHiding.exe,看看可否在分析出里面的行为。 HITB: https://cyberweek.ae/2021/wp-content/uploads/sites/8/2021/10/COMMSEC-D2-Deep-Puzzling-Binary-Code-Intention-Hiding-Based-on-AI-Uninterpretability-Jifeng-Zhu-Keyun-Luo.pdf github: https://github.com/aisecstudent/DeepPuzzling 调试验证: http://www.vxjump.net/aisec/deeppuzzling-dbg.pdf