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 文件中,它返回的是一个…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...