Web安全研究(六)

文章目录

  • HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs
    • 文章结构
    • Intro
    • js obfuscation
    • methodology
      • Example

HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs

CCS 2019
CISPA

恶意软件领域,基于学习的系统已经非常流行,并且可以检测新的恶意变种。然而,掌握目标系统特定内部知识的攻击者可能会生成被错误分类的输入样本。在实践中,强攻击者的假设并不现实,因为这意味着可以获取内部信息。

作者提出HideNoSeek这种工具,无需任何目标系统的信息,可以规避整个基于语法特征的检测器类别;这种攻击包括改变恶意js样本的结构以重新生产良性语法。

具体来说,HideNoSeek需要恶意种子样本来搜索恶意种子样本和良性样本之间的同构子图,然后使用恶意等价物(相同的AST结构)来替换良性部分,并且调整其余良性数据依赖关系。

文章结构

  1. intro
  2. javascript obfuscation
    1. obfuscation techniques
    2. static detection system
    3. malicious transformation of ASTs
  3. Mthodology
    1. Conceptual Overview
    2. Program dependency graph analysis
    3. slicing-based clone detection
    4. malicious code with a benign ast
  4. comprehensive evaluation
    1. experimental setup
    2. evasive samples generation
    3. validity test
    4. evaluation against real-world systems
    5. run-time performance
  5. discussion
  6. related work
  7. conclusion

Intro

Javascript是一种浏览器语言,最初是为了增强网站与用户的交互性和提高用户友好性创建的,但其是在用户浏览器上工作,因此也可用于从事恶意活动,如加密货币挖掘,偷渡式下载,重定向托管网站等。利用js的词法和语法可以为捕捉代码的显著属性提供有价值的洞察力。且与机器学习相结合时,可以准确的检测出新的混淆变体。

攻击者越来越多的使用混淆技术来逃避检测,给人工分析带来更多的障碍。因此恶意\混淆会在样本的语法中留下痕迹。因此,改变恶意样本的结构以重现现有良性语法的设计会挫败任何基于语法或词汇结构的分类器。例如作者可以在更大的良性软件中插入恶意软件,以通过在统计上增加良性特征来逃避检测。

作者提出一种在AST层检测、替换和调整良性文件与恶意文件之间所谓克隆的方法:
通过语法分析将js代码转为AST,而后用来构建程序依赖图;program dependecy graph,PDG

  • 基于后向切片的克隆检测;
  • 良性AST替换;

js obfuscation

作者在野外发现的几种类型的混淆规避技术:

  • 随机化混淆,在不改变语义的情况下,随机插入或改变脚本元素,如添加空白字符,变量名随机化,从而挫败依赖于内容匹配的技术
  • 数据混淆,重新组合字符串的操作技术,如字符串拆分/合并,字符替换
  • 编码混淆,使用标准编码或自定义编码,以及加密解密功能,米遍特定字符串以文本形式出现
  • 逻辑结构混淆,在脚本中添加无关指令,如大量条件分支
  • 环境交互,将语句拆分并分散到HTML文档中的多个脚本标签中,有效载荷包存在DOM中,然后再提取出来;

Still, obfuscation should not be confused with maliciousness: benign obfuscation can protect intellectual property, while malicious obfuscation hides the malicious intent of the sample.

混淆和恶意不能混为一谈,良性混淆可以保护知识产权,恶意混淆则用于隐藏样本的恶意意图。

HideNoSeek并不试图将样本的恶意性隐藏在传统的混淆层后面,而是先通过JSDetox,box-js进行解混淆,然后改变恶意样本的结构,重写为现有的良性语法,这一隐藏形式可视为一种新的混淆形式。

methodology

image.png
三部分构成:

  • 抽象代码表示,使用控制流和数据流来增强ast,并将数据存储在pdg中
  • 同构子图查询,查找benign和malware的相同子图,然后后向切片,使用恶意克隆代替良性克隆,并遵循原有的良性数据依赖关系
  • 将AST转换回代码

语法分析由 JavaScript 解析器 Esprima [28] 进行,它以有效的 JavaScriptsample 作为输入,生成描述程序句法结构的有序树(AST)。

总的来说,Esprima 可以生成 69 个不同的语法单元,称为节点。

内节点代表操作符,如变量声明(VariableDeclaration)、赋值表达式(AssignmentExpression)或 If 语句(IfStatement),而叶节点则代表操作数,如标识符(Identifier)或文字(Literal)(ContinueStatement 和 BreakStatement 除外)。

var x = 1;
var y = 1;
if (x == 1) {d = y;}

image.png

如图所示,AST 仅保留了程序构造如何嵌套以形成源代码的信息,但不包含任何语义信息,如控制流或数据流,而这正是我们进行克隆检测所需要的。

image.png

image.png

在 JavaScript 中,作用域定义了变量的可访问性。在 JavaScript 中,作用域定义了变量的可访问性。如果变量是在任何函数之外定义的,或者没有使用 var、let 或 const 关键字,或者使用了 window 对象,那么它就属于全局作用域,而只能在代码的特定部分(如块语句)中使用的变量则属于局部作用域。

目标是从恶意文件中检测出也可以在良性文件中找到的子AST。将这种常见结构称为克隆。

为了检测克隆,作者采用了 Komondooret 等人[45]的算法,该算法结合了 PDGs 和程序切片的变体[78]。

  1. 创建等价类(第 3.3.1 节),根据其抽象语法意义重新组合常见的良性和恶意 PDG 语句节点。
  2. 对于同一类别中具有相同语句依赖性(即切分标准)的良性和恶意对,我们将它们添加到当前克隆列表中,并沿着它们的控制和数据依赖性向后切分。
  3. 当且仅当它们匹配(语法相同)时,我们才会将这些前代节点添加到当前克隆列表中,只要找到匹配的语句节点,我们就会进行迭代(第 3.3.2 节)。

Example

恶意js样本

wscript = WScript . CreateObject ('WScript . Shell ');
wscript . run (" cmd . exe /c \"< malicious powershell >;\" ", "0");

image.png

良性样本:

obj = document . createElement (" object ");
obj . setAttribute ("id", this . internal . flash .id);
obj . setAttribute (" type ", " application /x- shockwave - flash ");
obj . setAttribute (" tabindex ", " -1");
createParam (obj , " flashvars ", flashVars );

良性AST形势下的恶意语义样本:

wscript = WScript . CreateObject ('WScript . Shell ');
wscript . toString ('id ', this . internal . flash .id);
wscript . run ('cmd . exe /c "< malicious powershell >;" ', "0");
wscript . hasOwnProperty ('tabindex ', ' -1');
parseFloat ( wscript , 'flashvars ', flashVars );

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468672.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI论文速读 | 2024【综述】图神经网络在智能交通系统中的应用

论文标题&#xff1a;A Survey on Graph Neural Networks in Intelligent Transportation Systems 链接&#xff1a;https://arxiv.org/abs/2401.00713 作者&#xff1a;Hourun Li, Yusheng Zhao, Zhengyang Mao, Yifang Qin, Zhiping Xiao, Jiaqi Feng, Yiyang Gu, Wei Ju, …

Linux命令行全景指南:从入门到实践,掌握命令行的力量

目录 知识梳理思维导图&#xff1a; linux命令入门 为什么要学Linux命令 什么是终端 什么是命令 关于Linux命令的语法 tab键补全 关于命令提示符 特殊目录 常见重要目录 /opt /home /root /etc /var/log/ man命令 shutdown命令 history命令 which命令 bash…

Web前端开发

一、概述 1.1 什么是HTML、CSS&#xff1f; 二、HTML 2.1 HTML快速入门 2.2 基础标签和样式 2.2.1 标题 &#xff08;1&#xff09;标题排版 输入&#xff01;加回车&#xff0c;直接生成HTML基本结构标签 。 <!-- 声明当前文档类型 --> <!DOCTYPE html> &l…

遇到太多的Windows问题怎么办?这里提供几个修复工具

“部署映像服务和管理”工具(DISM)是一个有用且高级的工具,用于扫描、更改和修复任何Windows系统问题。许多操作系统问题,如性能差、启动问题或特定崩溃,都可以归结为损坏的系统文件,而此命令工具能够解决这些问题。 如何检查文件系统 在运行DISM修复之前,重要的是运行…

Mac 版 Excel 和 Windows 版 Excel的区别

Excel是一款由微软公司开发的电子表格程序&#xff0c;广泛应用于数据处理、分析和可视化等领域。它提供了丰富的功能和工具&#xff0c;包括公式、函数、图表和数据透视表等&#xff0c;帮助用户高效地处理和管理大量数据。同时&#xff0c;Excel还支持与其他Office应用程序的…

算法讲解之字符串

前言&#xff1a; 本文主要讲解算法中和字符串结合的题目&#xff0c;跟字符串结合的算法题种类丰富&#xff0c;主要是跟别的算法结合&#xff0c;下面介绍几道比较经典的题目~ 第一道&#xff1a;14. 最长公共前缀 题目描述&#xff1a; 编写一个函数来查找字符串数组中的…

使用Vue.js输出一个hello world

导入vue.js <script src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.js"></script> 创建一个标签 <div id"app">{{message}}</div> 接管标签内容&#xff0c;创建vue实例 <script type"text/javascript">va…

掌握Pandas.to_datetime函数:时间序列数据处理的利器【第78篇—Pandas.to_datetime函数】

掌握Pandas.to_datetime函数&#xff1a;时间序列数据处理的利器 在数据处理和分析中&#xff0c;时间序列数据的处理是一个重要的环节。Pandas库中的to_datetime函数为我们提供了一个方便而强大的工具&#xff0c;用于将字符串或数字等格式的日期转换为Pandas中的datetime对象…

一探Lepton Search究竟

2024年1月25日&#xff0c;阿里巴巴原技术副总裁在 Twitter 上称用不到 500 行 Python 代码实现了 AI 对话搜索引擎&#xff0c;并在27日附上了开源地址&#xff1a;https://github.com/leptonai/search_with_lepton&#xff0c;截止春节期间已经5.8K的Star。 Twitter截图 Comm…

three.js 细一万倍教程 从入门到精通(三)

目录 五、详解PBR材质纹理 5.1、详解PBR物理渲染 5.2、标准网格材质与光照物理效果 5.3、置换贴图与顶点细分设置 5.4、设置粗糙度与粗糙度贴图 5.5、设置金属度与金属贴图 5.6、法线贴图应用 5.7、如何获取各种类型纹理贴图 5.8、纹理加载进度情况 单张图片加载 多…

[Java][算法 滑动窗口]Day 02---LeetCode 热题 100---08~09

第一题 无重复字符串的最长子串 思路 其实就是在字符串S中 找到没有重复的最长子串的长度 这道题的难点就是在于如何判断最长并且无重复 首先 最长长度 可以使用变量max记录保存 再者 判断有无重复 最简单的方法就是 暴力遍历法 即对于每次找的子串都再次寻找遍历…

【JAVA WEB】JavaScript--函数 作用域 对象

目录 函数 语法格式 示例 定义没有参数列表&#xff0c;也没有返回值的一个函数 定义一个有参数列表 &#xff0c;有返回值的函数 关于参数个数 函数表达式 作用域 作用域链 对象 基本概念 创建对象 1.使用 字面量 创建对象 2.使用new Object()创建对象 3.使…