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 文件中,它返回的是一个…...
vLLM-v0.17.1效果展示:多模型并发下99%请求延迟<500ms
vLLM-v0.17.1效果展示:多模型并发下99%请求延迟<500ms 1. vLLM框架核心能力 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,其最新版本v0.17.1在多模型并发场景下实现了99%请求延迟低于500ms的惊人表现。这个最初由加州大学伯克利分校天…...
单片机电子产品开发全流程指南
基于单片机的电子产品开发全流程解析1. 项目概述现代电子产品设计中,单片机已成为实现复杂功能的核心器件。从智能家居设备到健康监测仪器,各类产品都依赖单片机实现可编程控制功能。本文将系统介绍基于单片机的电子产品开发全流程,涵盖从需求…...
达摩院StructBERT中文相似度模型部署教程:Prometheus监控指标接入
达摩院StructBERT中文相似度模型部署教程:Prometheus监控指标接入 1. 项目概述 StructBERT中文相似度模型是阿里达摩院基于StructBERT大规模预训练模型开发的专业语义匹配工具。该模型通过强化语言结构理解能力,能够将中文句子转化为高质量的特征向量&…...
TSL2561光传感器Arduino库原理与低功耗工程实践
1. TSL2561光强传感器Arduino库深度解析与工程实践1.1 传感器原理与硬件特性TSL2561是由TAOS(现为AMS)推出的高精度数字环境光传感器,采用CMOS工艺集成双通道光电二极管阵列,分别对可见光(VIS)和红外光&…...
Spring AI 实战系列(二):ChatClient封装,告别大模型开发样板代码
系列栏目:Spring AI Spring AI 实战教程(一)入门示例 Spring AI 实战系列(二):ChatClient封装,告别大模型开发样板代码 Spring AI 实战系列(三)&…...
ssm+java2026年毕设唐山铂悦山养老院护理管理【源码+论文】
本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于养老院医护管理问题的研究,现有研究主要以医院信息管理系统(HIS)或综合性养老服务平台…...
OpenClaw多账户管理:ollama-QwQ-32B模型服务同时支持多个飞书机器人
OpenClaw多账户管理:ollama-QwQ-32B模型服务同时支持多个飞书机器人 1. 为什么需要多账户管理? 去年我们团队在尝试用OpenClaw实现自动化办公时,遇到了一个典型问题:市场部和研发部都需要使用同一个ollama-QwQ-32B模型服务&…...
PyTorch 3.0静态图分布式训练:如何用3行torch.compile + 2行DTensor替代自研调度器?一线大厂已全面切换
第一章:PyTorch 3.0静态图分布式训练概览 PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 后端实现高效图捕获与跨设备编译,为大规模分布式训练提供低开销、高一致性的执行基础。静态图模…...
霍尔电流传感器原理与应用全解析
霍尔电流传感器测量原理深度解析 1. 霍尔效应电流测量基础 1.1 霍尔效应原理 霍尔效应是电流测量的基础物理现象,当导体或半导体薄片置于磁场中,并在其两端施加控制电流时,垂直于电流和磁场方向的两侧会产生电势差,这种现象称为…...
嵌入式软件三大代码架构设计方法详解
嵌入式软件常用的几种代码架构设计方法1. 项目概述在嵌入式软件开发领域,合理的代码架构设计对系统稳定性、可维护性和实时性至关重要。本文系统介绍三种典型的嵌入式软件架构设计方案,分析其适用场景与实现要点。2. 时间片轮询法2.1 架构特点时间片轮询…...
