freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

如何使用js-x-ray检测JavaScript和Node.js中的常见恶意行为
Alpha_h4ck 2021-01-21 18:00:35 337400

js-x-ray

js-x-ray是一款功能强大的开源SAST扫描工具,其本质上是一个静态分析工具,可以帮助广大研究人员检测JavaScript和Node.js中的常见恶意行为&模式。

该工具可以执行JavaScript AST分析,其目的是导出Node-Secure AST Analysis以实现更好的代码演化,并允许开发人员和研究人员更好地访问。该工具的主要目标是为了帮助开发人员和安全研究人员快速识别危险的代码和模式。不过,想要完全解析该工具的输出结果,还是要求我们具备一定的安全知识。

该项目的目标是成功检测所有可疑的JavaScript代码,即那些显然是出于恶意目的添加或注入的代码。大多数时候,网络攻击者会尽量隐藏他们代码的行为,以避免触发检测引擎或增加分析人员的分析难度。而js-x-ray的任务就是理解和分析这些模式,以帮助我们检测到恶意代码。

功能介绍

  • 检索js所需的依赖项和文件;
  • 检测不安全的正则表达式;
  • 当AST分析出现问题或无法遵循语句时获取警告;
  • 突出显示常见的攻击模式和API调用;
  • 能够跟踪并分析危险的js全局使用;
  • 检测经过混淆处理的代码,并在可能的情况下检测已使用的工具;

工具安装

js-x-ray包可以直接从Node包代码库中直接获取,或者使用npm或yarn来进行在线安装:

$ npm i js-x-ray

# or

$ yarn add js-x-ray

工具使用

使用下列内容创建一个本地.js文件:

try  {
    require("http");
}
catch (err) {
    // do nothing
}
const lib = "crypto";
require(lib);
require("util");
require(Buffer.from("6673", "hex").toString());

接下来,使用“js-x-ray”命令来对目标JavaScript代码进行分析:

const { runASTAnalysis } = require("js-x-ray");
const { readFileSync } = require("fs");
const str = readFileSync("./file.js", "utf-8");
const { warnings, dependencies } = runASTAnalysis(str);
const dependenciesName = [...dependencies];
const inTryDeps = [...dependencies.getDependenciesInTryStatement()];
console.log(dependenciesName);
console.log(inTryDeps);
console.log(warnings);

分析将返回http、crypto、util和fs。

在该项目的cases目录下还提供了很多可以分析的可疑代码示例,感兴趣的同学可以使用js-x-ray来对它们进行分析。

返回的警告

名称

描述

parsing-error

使用meriyah解析JavaScript代码时出错。这意味着从string到AST的转换失败了。

unsafe-import

无法跟踪导入 (require, require.resolve) statement/expr。

unsafe-regex

正则表达式已被检测为不安全,可能被用于ReDoS攻击。

unsafe-stmt

使用了危险的语句,例如 eval()或Function("")。

unsafe-assign

分配了一个受保护的全局进程。

encoded-literal

检测到已编码的文本(可以是六进制值、unicode序列、Base64字符串等)。

short-identifiers

这意味着所有标识符的平均长度都低于1.5。仅当文件包含5个以上标识符时才可能返回。

suspicious-literal

这意味着所有文字的可疑分数之和大于3。

obfuscated-code (experimental)

代码可能经过了混淆处理。

API

runASTAnalysis

interface RuntimeOptions {

    module?: boolean;

    isMinified?: boolean;

}

该方法接收的第一个参数就是我们需要分析的代码,它将返回一个Report对象:

interface Report {

    dependencies: ASTDeps;

    warnings: Warning<BaseWarning>[];

    idsLengthAvg: number;

    stringScore: number;

    isOneLineRequire: boolean;

}

generateWarning

interface WarningOptions {

    location: Location;

    file?: string;

    value?: string;

}

rootLocation()

返回一个默认的SourceLocation,并包含下列内容:

{ start: { line: 0, column: 0 }, end: { line: 0, column: 0 } }

许可证协议

本项目的开发与发布遵循MIT开源许可证协议。

项目地址

js-x-ray:【GitHub传送门

# javascript # 代码审计 # Node.js # 代码安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Alpha_h4ck 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
渗透实战优质工具
Alpha_h4ck LV.10
好好学习,天天向上
  • 2359 文章数
  • 1021 关注者
Tetragon:一款基于eBPF的运行时环境安全监控工具
2025-01-21
DroneXtract:一款针对无人机的网络安全数字取证工具
2025-01-21
CNAPPgoat:一款针对云环境的安全实践靶场
2025-01-21
文章目录