[论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典)

2023-11-04

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行,加油。

前一篇总结了Powershell恶意代码检测相关研究,并结合开源工具分享抽象语法树提取过程。这篇文章将详细讲解CCS2019的Powershell去混淆工作,这篇文章质量非常高,来自于浙江大学的李振源老师。我将从他在InforSec分享的视频和论文原文阅读两个方面进行讲解。希望这篇文章对您有所帮助,深知自己很菜,通过这种最笨分享来提升和记录,欢迎大家批评指正。这些大佬是真的值得我们去学习,献上小弟的膝盖~fighting!

在这里插入图片描述

原文作者:Zhenyuan Li, Qi Alfred Chen, Chunlin Xiong, Yan Chen, et al.
原文标题:Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for PowerShell Scripts
中文翻译:针对PowerShell脚本的有效轻量级去混淆和语义感知攻击检测
原文链接https://dl.acm.org/doi/pdf/10.1145/3319535.3363187
发表会议:CCS2019
参考文献: 感谢老师们的论文以及InforSec的分享

在这里插入图片描述

前文赏析:


一.InforSec作者分享的学习笔记

InforSec(网络安全研究国际学术论文)内容简介:
越来越多的报道显示,PowerShell被广泛的用于各种网络攻击。这些攻击包括高级持续性威胁、勒索病毒、网络钓鱼邮件等等。基于PowerShell的攻击,利用了PowerShell的动态性,构造了复杂的混淆模式,绕过检测。为了克服这一难题,我们提出来第一个轻量且有效的解混淆方案,并基于解混淆后的脚本构造了基于攻击语义的检测系统。实验显示,通过解混淆,我们可以将混淆后脚本和原始脚本之间的相似度从仅0.5%提高到了近80%。同时解混淆过程有效的改善了已有系统的检测效率,Windows Defender和VirusTotal的攻击检测率分别从0.3%和2.65%大幅增加到75.0%和90.0%。


嘉宾介绍:
李振源,浙江大学在读博士,研究兴趣包括终端安全,入侵检测,威胁分析等。

在这里插入图片描述

接下来,我们将从研究动机、相关工作比较、结合案例的具体技术、实验结果和结论五个方面讲解。

1.研究动机

Powershell越来越多出现在各种攻击事件中,根据Mcafee和Symantec报告显示,在2016年至2019年期间,基于Powershell的攻击发生的频率逐年上升,占所有攻击中的45%。

在这里插入图片描述

为什么Powershell这么受攻击者欢迎呢?
主要是Powershell符合现代攻击的需求,包括三点内容:

  • Live-off-the-Land
    攻击者倾向于使用系统中已有的工具开展攻击,从而避免使用自制的可执行文件及检测。并且,Powershell作为管理员工具,很容易访问和利用Windows组件。
  • Fileless Attack(无文件攻击)
    Powershell可以直接从内存中执行而不需要涉及文件。攻击者可以直接从网络上下载攻击脚本,整个过程不涉及文件读写而在内存中执行,可以避免基于文件的杀毒引擎查杀。
  • Obufscation
    Powershell作为一种动态语言,灵活性很强,容易被混淆。

在这里插入图片描述

那么,针对前两个问题,微软近几年也提出了 ScriptBlock 的记录方案,可以将执行的大多数脚本块记录下来。这种方法具有先天解混淆的能力,因为它可以记录最后执行的 ScriptBlock ,通常混淆后的代码需要解混淆后执行,因此该方法可以解混淆。

但是,混淆并不一定需要从 ScriptBlock 中完成,它也可以在更小的代码片段或token中混淆。此时,该方法就无能为力。基于此,提出了我们的工作,弥补该不足。

混淆是阻碍反病毒引擎查杀包括Powershell在内的恶意程序的最大元凶。

在这里插入图片描述

我们可以看看混淆对反病毒引擎的影响。该实验通过40多个样本,在 VirusTotal 上的56个杀毒引擎检测的结果,分为Malicious和Benign两部分,每部分都包括五组数据,对应原始脚本和四种混淆方法加密的结果。

在这里插入图片描述

其中,S1和S2是基于字符串操作的,S3和S4是基于编码的。

在这里插入图片描述

由图可知,对于恶意样本来说,原始样本平均被13个引擎所查杀,但进行混淆后,检测率大幅度下降。这里有2至3个可以固定将编码混淆找出,但存在一个问题,它其实检测的是编码混淆方法,而不是恶意性,从而带来误报。

在这里插入图片描述

经过解混淆后,整体的检测率会大幅提升,将近87%。

在这里插入图片描述


2.相关工作比较

传统的解混淆方法分为三个阶段:

  • 检测阶段:脚本是否混淆
  • 解混淆阶段:动态和静态解混淆
  • 验证阶段

这类方法存在如下问题:

  • 粗粒度的混淆检测
    不能处理局部混淆,比如恶意程序只对关键逻辑混淆,它整体代码仍符合为混淆恶意代码的特征。或者,整个逻辑都应用到脚本上解混淆,未混淆代码会受解混淆的影响,导致漏报和误报
  • 解混淆逻辑需手工
    需要大量手工工作,无法处理未知混淆,鲁棒性较差
  • 各阶段逻辑未整合
    每个阶段的逻辑需要独立实现,大大增加人工处理工作

在这里插入图片描述


3.整体方案

基于上述动机和问题,我们提出了一种细粒度的,且将各个步骤整合得比较好的系统。此外,我们利用恶意代码或混淆代码自身带有的逻辑来开展解混淆工作。

在这里插入图片描述

从直觉上来讲,一个混淆后的代码或脚本想要在机器上正确执行,它肯定是要包含一个解混淆的逻辑,在它们执行之前将内容解析出来。我们提出了比较核心的部分——基于模拟器的解混淆。

在《网络安全系列》,我的博客中也有Powershell解混淆的分享。这里举个简单例子,下图是一段字符混淆Powershell脚本,代码的最后就是自带的解混淆逻辑,当它会调用IEX在内存中执行解析,再实施真实的攻击。
在这里插入图片描述

本文系统的核心框架包括五个步骤,后续详细讲解。

  • (1) 提取子树
  • (2) 基于子树的混淆检测
  • (3) 基于模拟器的解混淆
  • (4) 更新抽象语法树
  • (5) 后处理

在这里插入图片描述

该方案的具体实现过程如下:

  • 首先,我们会把混淆后的代码使用AST(抽象语法树)解析,根据一定的规则提取部分子树。判断哪些子树包含混淆代码,取出子树并量化。

  • 然后,基于子树的混淆检测,我们会通过基于token、字符串和AST三层特性的分类器来判断子树是否存在混淆。

  • 其次,如果子树存在混淆,则基于模拟器开展解混淆,将原始代码片段还原。

  • 再次,更新抽象语法树。接着进行解析,并将新生成的抽象语法树合并到原有抽象语法树中(子树栈),更新分类器的特征值。

  • 最后,当没有剩余的混淆子树,整个解混淆工作基本完成,开展善后处理,使得混淆代码更具可读性。

相对于之前工作,本文具有第三个优点。

  • 第一点:抽象语法子树级的细粒度分析
    有效实现局部解混淆,将混淆片段准确找到

  • 第二点:利用混淆代码自带逻辑解混淆
    覆盖面更广,不需要自己去写解混淆的逻辑

  • 第三点:解混淆的三个阶段紧密联系
    形成一个循环,可以将多层混淆问题解决,具体详见论文

在这里插入图片描述


4.结合例子介绍具体技术

为了更好地理解,我们结合例子具体介绍。Powershell是一种高层次、富含语义的语义,假设存在如下代码,可以看到几个明显的特性。

  • Invoke-Expression:调用命令的操作
  • Net.WebClient:网络命名空间
  • .DownloadString():下载函数
  • “Invoke-Shellcode.ps1”:恶意脚本

它会建立一个Web服务,然后下载文件并执行,这是一个典型的恶意行为。

在这里插入图片描述

如果不经过混淆,很容易就能检测出其恶意性。

在这里插入图片描述

接下来使用主流的Invoke-Obfuscation进行混淆,将之前的检测特征进行字符串重组混淆。

需要注意:这些操作本身就是混淆后的代码,又是一个解混淆的逻辑。当然,对于更复杂的情况,解混淆逻辑和解混淆内容会分开,也会提出一些基于AST重组的方法解混淆。

在这里插入图片描述

在第一层混淆之后,紧接着进行第二层混淆。这次使用编码的方法,即 Convertto-securestring。

在这里插入图片描述

该混淆的本质是一个AES加密,根据信息论的观点来说,加密后的密文和明文信息熵的关系非常弱。那么,我们想利用混淆后的脚本检测原始脚本基本不可能,所以我们需要做一个解混淆的操作。

在这里插入图片描述

那么,解混淆怎么做呢?
刚才提到,混淆的过程就是把每个片段或整块代码进行一一重组或编码操作,解混淆的过程也会将这些节点找出来。首先,将其解析成一个抽象语法树,我们经过一些裁剪,将有可能参与混淆节点的识别出来。

在这里插入图片描述

接着会利用一个分类器来判断哪些是真正含有混淆的,完成之后就可以得到这五棵子树。其实,我们需要解混淆的是标红的四棵。

在这里插入图片描述

总之,解混淆大概逻辑是一个自底向上的遍历。 为什么自底向上呢?因为解混淆的最下面两棵树,每个节点下面都有一个子树。

在这里插入图片描述

解混淆完成之后,我们对抽象语法树进行更新。重组后,可以看到新的节点不具备混淆特征,就不再处理黑色节点。

在这里插入图片描述

接着处理其他红色节点并进行重组。

在这里插入图片描述

完成解混淆的过程后,整个节点中不再含有混淆的子树。

在这里插入图片描述

最终生成如下图所示的Powershell代码。

在这里插入图片描述


5.实验结果

我们第一个实验是比较解混淆对代码相似度的提升。与经典的PSDEM方法进行比较,相对于混淆代码提升79.2%,比PSDEM提升42.2%。需要注意,传统方法对很多未知混淆方案无法解混淆,所以说它的鲁棒性较差,攻击者可以较好地针对,并绕过传统的解混淆方法。

在这里插入图片描述

第二个实验比较解混淆对检测的提升。我们比较 Windows DefenderVirusTotal 对解混淆的效果。VirusTotal 是56个的平均结果。由图可知, Windows Defender 可以提升74.7%,VirusTotal 可以提升87.3%。

在这里插入图片描述

此外,解混淆的效率很高。对于平均5.4Kb大小的脚本,解混淆只需要0.5秒,而且用的是普通家用电脑。

在这里插入图片描述

解混淆完成之后,我们也提供了一个检测系统。关键是训练、检测之前,进行解混淆操作,我们使用比较基础的OOA方法,通过挖掘平凡子集,提取一些可以用于检测的规则。

在这里插入图片描述

可以看到,解混淆之后的规则都比较清晰,包括各种典型的恶意行为函数等。所以,解混淆后的脚本不但能较好地进行恶意性检测,其本身逻辑和语义分析也比较清晰,从而能进行针对性保护。

在这里插入图片描述


6.结论

最后总结,我们针对攻击者常用工具PowerShell的混淆难题。

  • (1) 通过对抽象语法子树细粒度的分析,准确定位混淆片段;
  • (2) 利用混淆脚本自身逻辑进行解混淆,减少了手工分析的工作,可以处理未知混淆,提高了鲁棒性;
  • (3) 最后将混淆检测、解混淆逻辑、验证三个阶段有机的结合在一起,可以处理多层混淆。

实现了第一个轻量且有效的PowerShell解混淆系统。有效的提升了解混淆后脚本的检测精度。

在这里插入图片描述


二.论文阅读分享

通过上面李老师的分享后,我们再来阅读这篇论文,就会发现文章很多美妙的地方。在该部分,我将站在读者的第一视角,介绍这篇论文很多值得我们学习的地方和亮点。

1.摘要学习

首先,我们来看这篇文章的摘要。前面的博客我们说过,一篇论文的摘要和引言非常重要。如何写好摘要和引言,写高质量摘要,写引人入胜的引言很关键。

在这里插入图片描述

近年来,PowerShell 越来越多地出现在各种网络攻击中,从高级持续威胁、勒索软件、网络钓鱼电子邮件、加密劫持、金融威胁到无文件攻击。但是,由于 PowerShell 语言在设计上是动态的,并且可以在不同级别构建脚本片段,因此基于最新静态分析的 PowerShell 攻击检测方法本质上容易受到混淆。

为了克服这一挑战,本文为 PowerShell 脚本设计了第一个有效且轻量级的反混淆方法。为了解决精确识别可恢复脚本片段的挑战,设计了一种新颖的基于子树的反混淆方法。该方法在 PowerShell 脚本的抽象语法树(Abstract Syntax Tree)中的子树级别执行混淆检测和基于仿真的恢复。

基于新的反混淆方法,我们进一步设计了第一个语义感知的 PowerShell 攻击检测系统。为了实现基于语义的检测,我们利用了经典的面向目标的关联挖掘算法,并为 PowerShell 攻击新识别了 31 个语义签名。我们对 2342 个良性样本和 4141 个恶意样本的集合进行了评估,发现我们的去混淆方法平均耗时不到 0.5 秒,同时将混淆后的脚本与原始脚本之间的相似度从仅 0.5% 提高到 80% 左右,这既有效又轻便。

此外,应用我们的去混淆处理后,Windows Defender 和 VirusTotal 的攻击检测率分别从 0.3% 和 2.65% 大幅提高到 75.0% 和 90.0%。同时,当应用我们的去混淆处理时,我们的语义感知攻击检测系统以 92.3% 的平均真阳性率和 0% 的假阳性率优于 Windows Defender 和 VirusTotal。


2.引言和背景及动机

这篇论文的引言写得非常棒,有效突出了Powershell在网络攻击中的重要性,以及现有方法的诸多缺陷,进一步体现本文研究的必要性和贡献。

在这里插入图片描述

紧接着是方法对比,体现解混淆、恢复质量和轻量级的优点。

在这里插入图片描述

接下来简要介绍本文工作如何解决现有挑战,提出的方法。主要包括解混淆和攻击检测两块。

在这里插入图片描述

最后是本文的贡献,分别从解混淆、语义感知攻击检测两个工作,以及实验性能提升方面介绍,很多顶会论文也都采取这种方式介绍贡献。

在这里插入图片描述


3.总体框架

接下来是论文的总体概述。

在这里插入图片描述

论文整体框架分为三部分:

  • Deobfuscation phase(去混淆):子树+AST+三层机制结合
  • Training and detection phases(训练和检测):OOA挖掘算法
  • Application scenarios(应用)
    – Real-time attack detection
    – Large-scale automated malware analysis

在这里插入图片描述

在应用场景中,突出本文方法比现有方法更好,同时介绍两种经典的安全应用场景。

在这里插入图片描述


4. POWERSHELL DEOBFUSCATION

第四部分是详细的解混淆工作,该部分推荐读者阅读原文。

在这里插入图片描述

作者从整个解混淆框架的五个核心步骤,依次讲解,具体包括:

  • 4.1 Subtree-based Deobfuscation Approach Overview
  • 4.2 Extract Suspicious Subtrees
  • 4.3 Subtree-based Obfuscation Detection
  • 4.4 Emulation-based Recovery
  • 4.5 AST Update
  • 4.6 Post processing

在这里插入图片描述

包括子树提取、更新AST等步骤。

在这里插入图片描述

在这里插入图片描述

一个恶意脚本混淆和去混淆后和AST效果图如下所示:

在这里插入图片描述

此外,第五部分详细介绍了语义感知攻击检测工作。

个人感受:
本文的重点是解混淆,解混淆后的代码其实语义比较丰富,其恶意检测也相对容易,所以仅选择了OOA。该部分应该是为了丰富整体的工作,让论文更加的充实和完整,或许也是审稿老师的修改意见。不过,确实很多顶会论文,包括攻防攻系列,漏洞挖掘防御系列,都会采用这种方式,从而让论文更加完美,值得我学习。

在这里插入图片描述


5.对比实验

实验主要包括学术界(PSDEM)和工业界(Defender、VT)的对比,恶意代码分析相关论文都可以尝试这种对比实验。总体而言,本文方法的TP更高,性能更好,解混淆速度较快,再次建议读者阅读原文。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


三.总结

此外,作者在讨论部分补充了下表,通过这种画龙点睛,回头点题,进一步突出论文的贡献和工作量。这篇文章确实是Powershell领域的顶级论文,写得非常棒,真心值得大家学习,也感谢李老师的分享。

在这里插入图片描述

此外,由于去混淆做得非常好,Powershell源码有丰富的语义,因此关于Powershell的恶意检测文章很少。最后,我们读论文,也需要看看未解决的问题、存在的困难或者下一步工作,作者说到了逃逸攻击,包括反调试、高价值攻击无法检测等,以及逻辑混淆。具体参见下图:

在这里插入图片描述

在这里插入图片描述

这篇文章就写到这里,希望对您有所帮助。由于作者英语实在太差,论文的水平也很低,写得不好的地方还请海涵和批评。同时,也欢迎大家讨论,继续加油!感恩遇见,且看且珍惜。

在这里插入图片描述

(By:Eastmount 2022-03-25 周五夜于武汉 http://blog.csdn.net/eastmount/ )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典) 的相关文章

随机推荐

  • 十条法则,让企业减少90%的勒索病毒攻击,勒索病毒解密,数据恢复

    建立完善的安全管理体系 企业应该建立完善的安全管理体系 包括安全策略 安全培训 应急响应等 确保每个员工都了解安全意识和操作规范 定期备份数据 企业需要建立定期备份机制 备份关键数据和系统 确保在发生勒索病毒攻击时 能够迅速恢复数据和系统
  • std::shared_ptr 与普通指针的转换

    shared ptr 是一个类 用模板支持很多类型 1 shared ptr到普通指针 shared ptr
  • Avalonia UI程序打包为deb安装包

    目录 相关依赖安装 打包前操作 进行打包 关于快捷方式的说明 相关依赖安装 全局安装打包工具 dotnet tool install global dotnet deb 向工程中安装相关打包依赖 将CMD命令行或PowerShell定位到工
  • jmeter常用插件介绍

    jmeter作为一个开源的接口性能测试工具 其本身的小巧和灵活性给了测试人员很大的帮助 但其本身作为一个开源工具 相比于一些商业工具 比如LoadRunner 在功能的全面性上就稍显不足 这篇博客 就介绍下jmeter的第三方插件jmete
  • C# 线程调用主线程中的控件

    由于项目的需要 最近几天一直在做串口和数据库 由于C 使用的时间不长 所以在编写代码和调试的过程中总是遇到意想不到的问题 比如在使用串口接收数据的时候 在接收数据事件中想把接收的数据放入一个textbox作显示 但是明明非常简单的代码 在编
  • 7-5 两个有序链表序列的交集 (20分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−

    7 5 两个有序链表序列的交集 20分 已知两个非降序链表序列S1与S2 设计函数构造出S1与S2的交集新链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔
  • Intellij IDE 安装Golang插件出现GO SDK报错

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 很多Java同学都是使用IDEA的 当然也可以直接使用 Gogland至少现在还是免费 谁也不知道什么时候又要收费了 所以我们选择了IDEA使用插件方式支持Golang的开
  • 规则引擎Drools使用 第十五篇 Spring Boot整合Drools

    在实际开发中 主要使用的还是以Spring Boot为主 所有下面介绍下Spring Boot整合Drools Spring Boot整合Drools 引入依赖
  • 数据结构-图

    目录 问题 A 邻接矩阵存储的图 节点的出度和入度计算 附加代码模式 问题 B 算法7 12 有向无环图的拓扑排序 问题 C 有向图是否存在环 问题 D 是否为有效的拓扑序列 问题 E 案例6 2 6 最短工期 问题 F 图 节点的最早发生
  • 生信技能树——GEO芯片数据的合并

    GSE83521和GSE89143数据合并 1 下载数据 rm list ls library GEOquery library stringr gse GSE83521 eSet1 lt getGEO GSE83521 destdir g
  • linux 中写汇编,Linux 中的汇编语言(一)

    在阅读Linux源代码时 你可能碰到一些汇编语言片段 有些汇编语言出现在以 S为扩展名的汇编文件中 在这种文件中 整个程序全部由汇编语言组成 有些汇编命令出现在以 c为扩展名的C文件中 在这种文件中 既有C语言 也有汇编语言 我们把出现在C
  • 对接微信公众号的流程

    前言 最近对接一个新的微信公众号 功能比较简单 但是不熟悉微信公众号对接流程的同学可能需要花些时间阅读官方文档和调试 笔者对接过程也是一波三折 于是把流程分享出来帮助没有对接过的同学 对接流程 首先 开发微信公众号的相关功能一般是公司新申请
  • tkmybatis自定义xml报错

    刚刚再写一个项目 然后项目使用的是tk mybatis 后面我有在项目中引入了mybatis plus 想使用公司的自动生成类的文件 当引入进来后 我以为一切都是水到渠成的 当一执行 它给我报个这个错 我一看这个先去配置文件看了下 配置的路
  • 常用C#代码

    常用C 代码 获取系统路径 1 获取电脑的路径 string dir Environment GetFolderPath Environment SpecialFolder DesktopDirectory 获取系统桌面目录路径 strin
  • sql注入基础

    0x01sql语句基础 1 select语句 格式 select from table 从table表中获取字段信息 select from table where 在满足where后的条件下查询字段信息 2 insert语句 格式 ins
  • STM32通过串口2使用ESP8266WIFI模块连接新大陆云平台

    目录 使用硬件 分步骤 配置TCP连接 连接WIFI 1 使用ESP8266的复位引脚进行复位 2 发送基本AT指令 3 连接新大陆 4 新大陆云平台显示在线及上传数据测试成功 5 串口显示 5 涉及的函数 发生AT检测WIFI模块错误 如
  • JetBrains设置inline hint的背景色、前景色

    如题 修改IDE的hint前景色和背景色 修改后结果
  • 元宇宙的价值究竟在哪 有哪些方向值得重点关注?关于元宇宙进行详细介绍

    1992年 第一次经济危机持续至此给全球带来了极大的打击 而在互联网行业 网络不再是政府和军队专属的使用品 Dephi开始为他们的客户提供在线网络服务 并逐渐的从电子邮件服务发展到了全方位的网络服务 这一年对于整个互联网而言具有里程碑的历史
  • 【Vue3】vite配置css 的sourceMap ,以及文件引用配置别名

    Vite 2 9配置浏览器加载 CSS 源映射 vite config ts 有一个devSourcemap属性css可以设置为true 这是vite config ts我目前正在使用的文件 export default defineCon
  • [论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测(经典)

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇总结了Powershe