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结构)来替换良性部分,并且调整其余良性数据依赖关系。
文章结构
- intro
- javascript obfuscation
- obfuscation techniques
- static detection system
- malicious transformation of ASTs
- Mthodology
- Conceptual Overview
- Program dependency graph analysis
- slicing-based clone detection
- malicious code with a benign ast
- comprehensive evaluation
- experimental setup
- evasive samples generation
- validity test
- evaluation against real-world systems
- run-time performance
- discussion
- related work
- 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

三部分构成:
- 抽象代码表示,使用控制流和数据流来增强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;}

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


在 JavaScript 中,作用域定义了变量的可访问性。在 JavaScript 中,作用域定义了变量的可访问性。如果变量是在任何函数之外定义的,或者没有使用 var、let 或 const 关键字,或者使用了 window 对象,那么它就属于全局作用域,而只能在代码的特定部分(如块语句)中使用的变量则属于局部作用域。
目标是从恶意文件中检测出也可以在良性文件中找到的子AST。将这种常见结构称为克隆。
为了检测克隆,作者采用了 Komondooret 等人[45]的算法,该算法结合了 PDGs 和程序切片的变体[78]。
- 创建等价类(第 3.3.1 节),根据其抽象语法意义重新组合常见的良性和恶意 PDG 语句节点。
- 对于同一类别中具有相同语句依赖性(即切分标准)的良性和恶意对,我们将它们添加到当前克隆列表中,并沿着它们的控制和数据依赖性向后切分。
- 当且仅当它们匹配(语法相同)时,我们才会将这些前代节点添加到当前克隆列表中,只要找到匹配的语句节点,我们就会进行迭代(第 3.3.2 节)。
Example
恶意js样本
wscript = WScript . CreateObject ('WScript . Shell ');
wscript . run (" cmd . exe /c \"< malicious powershell >;\" ", "0");

良性样本:
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 );
相关文章:
Web安全研究(六)
文章目录 HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs文章结构Introjs obfuscationmethodologyExample HideNoSeek: Camouflaging(隐藏) Malicious JavaScript in Benign ASTs CCS 2019 CISPA 恶意软件领域,基于学习的系统已经非常流行&am…...
python3 中try 异常调试 raise 异常抛出
一、什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。 当Python脚本发生异常时我…...
Java中的序列化是什么?如何实现对象的序列化和反序列化?请解释Serializable接口的作用是什么?请解释transient关键字的作用是什么?为什么会使用它?
Java中的序列化是指将对象转换为字节序列的过程,以便可以在网络上传输或将其保存到持久存储介质中。反序列化则是将字节序列重新转换回对象的过程。Java提供了一种称为序列化(Serialization)的机制来实现对象的序列化和反序列化。 要实现对象…...
二维差分---三维差分算法笔记
文章目录 一.二维差分构造差分二维数组二维差分算法状态dp求b[i][j]数组的二维前缀和图解 二.三维前缀和与差分三维前缀和图解:三维差分核心公式图解:模板题 一.二维差分 给定一个原二维数组a[i][j],若要给a[i][j]中以(x1,y1)和(x2,y2)为对角线的子矩阵中每个数都加上一个常数…...
D. Divisible Pairs
思路:我们预处理出每个数分别摸上xy的值,用map存一下,然后遍历每个数,如果a b是x的倍数的话,那么他们模x的值相加为x,如果a - b是y的倍数的话,那么他们的模y的值相等。 代码: voi…...
【教程】Kotlin语言学习笔记(二)——数据类型(持续更新)
写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 文章目录 【Kotlin语言学习】系列文章一、基本数据…...
react 插槽
问题开发当中会经常出现组件十分相似的组件,只有一部分是不同的 解决: 父组件:在引用的时候 import { Component } from "react"; import Me from "../me";const name <div>名称</div> class Shoop extends Compone…...
Linux运用fork函数创建进程
fork函数: 函数原型: pid_t fork(void); 父进程调用fork函数创建一个子进程,子进程的用户区父进程的用户区完全一样,但是内核区不完全一样;如父进程的PID和子进程的PID不一样。 返回值: RETURN VALUEO…...
Pytest测试技巧之Fixture:模块化管理测试数据
在 Pytest 测试中,有效管理测试数据是提高测试质量和可维护性的关键。本文将深入探讨 Pytest 中的 Fixture,特别是如何利用 Fixture 实现测试数据的模块化管理,以提高测试用例的清晰度和可复用性。 什么是Fixture? 在 Pytest 中&a…...
设计模式-职责链模式Chain of Responsibility
职责链模式 一、原理和实现二、实现方式1) 使用链表实现2) 使用数组实现3) 扩展 作用:复用和扩展,在实际的项目开发中比较常用。在框架开发中,我们也可以利用它们来提供框架的扩展点,能够让框架的使用者在不修改框架源码的情况下&…...
书生浦语大模型实战营-课程作业(3)
下载sentence_transformer的代码运行情况。sentence_transformer用于embedding(转向量) 本地构建持久化向量数据库。就是把txt和md文件抽取出纯文本,分割成定长(500)后转换成向量,保存到本地,称…...
考研英语单词25
Day 25 bench n.长凳 elastic n.橡皮圈,松紧带 a.灵活的 “e-last 延伸出去” disaster n.灾难,灾祸【disastrous a.灾难性的,极坏的】 deadly a.致命的,极端的,势不两立的 hike n.徒步旅行&…...
计算机网络——08应用层原理
应用层原理 创建一个新的网络 编程 在不同的端系统上运行通过网络基础设施提供的服务,应用进程批次通信如Web Web服务器软件与浏览器软件通信 网络核心中没有应用层软件 网络核心没有应用层功能网络应用只能在端系统上存在 快速网络应用开发和部署 网络应用…...
面试计算机网络框架八股文十问十答第五期
面试计算机网络框架八股文十问十答第五期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)与缓存相关的HTTP请…...
拟合案例1:matlab积分函数拟合详细步骤及源码
本文介绍一下基于matlab实现积分函数拟合的过程。采用的工具是lsqcurvefit和nlinfit两个函数工具。关于包含积分运算的函数,这里可以分为两大类啊。我们用具体的案例来展示:一种是积分运算中不包含这个自变量,如下图的第一个公式,也就是说它这个积分运算只有R和Q这两个待定…...
嵌入式软件设计入门:从零开始学习嵌入式软件设计
(本文为简单介绍,个人观点仅供参考) 首先,让我们了解一下嵌入式软件的定义。嵌入式软件是指运行在嵌入式系统中的特定用途软件,它通常被用来控制硬件设备、处理实时数据和实现特定功能。与桌面应用程序相比,嵌入式软件需要具备更高的实时性、…...
Educational Codeforces Round 135 (Rated for Div. 2)C. Digital Logarithm(思维)
文章目录 题目链接题意题解代码 题目链接 C. Digital Logarithm 题意 给两个长度位 n n n的数组 a a a、 b b b,一个操作 f f f 定义操作 f f f为, a [ i ] f ( a [ i ] ) a [ i ] a[i]f(a[i])a[i] a[i]f(a[i])a[i]的位数 求最少多少次操作可以使 …...
微信小程序介绍、账号申请、开发者工具目录结构详解及小程序配置
目录 一、微信小程序介绍 1.什么是小程序? 2.小程序可以干什么? 3.微信小程序特点 二、账号申请 1.账号注册 2.测试号申请 三、安装开发工具 四、开发小程序 五、目录结构 JSON 配置 小程序配置 app.json 工具配置 project.config.json 页…...
数字的魅力之情有独钟的素数
情有独钟的素数 什么是素数 素数(Prime number)也称为质数,是指在非0自然数中,除了1与其本身之外不拥有其他因数的自然数。也就是说,素数需要满足两个条件: 大于1的整数;只拥有1和其自身两个…...
Vue2源码梳理:render函数的实现
render 在 $mount 时,会调用 render 方法在写 template 时,最终也会转换成 render 方法Vue 的 _render 方法是实例的一个私有方法,它用来把实例渲染成一个虚拟 Node它的定义在 src/core/instance/render.js 文件中,它返回的是一个…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
