Jump to content

基于ESPRIMA解析器的JavaScript的属性图的开源,原型实现以及Estree spidermonkey规范。 JAW可用于分析Web应用程序和基于JavaScript的程序的客户端。

该项目已根据GNU AFFERO通用公共许可证v3.0许可。请参阅此处以获取更多信息。

Jaw在https://soheilkhodayari.github.io/jaw/上提供了一个GitHub页面网站。

发行说明:

2023年10月,JAW-V3(警长): JAW已更新以检测客户端请求劫持漏洞。 2022年7月,JAW-V2(Thetthing): JAW更新到其下一个主要版本,能够检测DOM CLOBBerbering漏洞。请参阅JAW-V2分支。 2020年12月,JAW-V1 :第一个原型版本。请参阅JAW-V1分支。

jaw

的概述

下颌的体系结构如下所示。

JAW_6_architecture_v3.png

测试输入

可以以两种不同的方式使用:

任意JavaScript Analysis:通过指定程序的文件系统路径来建模和分析任何JavaScript程序。

Web应用程序分析3:通过提供单个种子URL来分析Web应用程序。

数据收集

JAW具有几个启用JavaScript的Web爬网机,用于大规模收集Web资源。

HPG构造

使用收集的Web资源创建混合程序图(HPG),该图将导入到NEO4J数据库中。

可选地,为HPG构造模块提供语义类型的映射到自定义JavaScript语言令牌,从而根据其目的促进JavaScript函数的类别(例如,HTTP请求函数)。

分析和输出

查询构建的NEO4J图数据库,以进行各种分析。 JAW为数据流分析,控制流分析,可及性分析和模式匹配提供实用程序遍历。这些遍历可用于开发自定义安全分析。

下巴还包括用于检测客户端CSRF的内置遍历,DOM CLOBBERing和请求劫持漏洞。

输出将存储在与输入的文件夹中。

设置

安装脚本依赖于以下先决条件:-最新版本的NPM软件包管理器(Node JS) - python 3.x的任何稳定版本3.x -Python Pip Package Manager

之后,安装必要的依赖项Via:

$ ./install.sh,有关详细的安装说明,请参阅此处。

快速启动

运行管道

您可以在背景屏幕Via:中运行管道实例

$ python3 -m run_pipeline -conf=config.yaml CLI提供以下选项:

$ python3 -m run_pipeline -h

USAGE: run_pipeline.py [-h] [ - conf file] [ - site site] [ - 列表列表] [ - from from]

该脚本运行工具管道。

可选参数:

-h, - 赫尔普显示此帮助消息和退出

-conf文件,-c文件管道配置文件。 (Default: config.yaml)

- 网站,-s网站网站进行测试;覆盖配置文件(Default:无)

- 列表列表,-l列表网站列表要测试;覆盖配置文件(Default:无)

- 从第一个条目中,从第一个条目中考虑提供站点列表何时;覆盖配置文件(Default: -1)

- to,-t到最后一个条目,请考虑何时提供站点列表;覆盖配置文件(Default: -1)输入config: jaw期望.yaml配置文件作为输入。有关示例,请参见Config.yaml。

暗示。配置文件指定不同的通行证(例如,爬网,静态分析等),可以为每个漏洞类启用或禁用。这允许单独或以不同的顺序运行工具构建块(例如,首先爬网,然后进行安全分析)。

快速示例

用于运行快速示例,演示如何构建属性图并在其上运行Cypher查询,DO:

$ python3 -M andarys.example.example_analysis-输入=$(pwd)/data/test_program/test.js

爬行和数据收集

此模块收集数据(即测试的JavaScript代码和状态值)。如果要测试文件系统上已经有的特定JavaScript文件,则可以跳过此步骤。

Jaw具有基于硒(JAW-V1),Puppeteer(JAW-V2,V3)和剧作家(JAW-V3)的爬虫。对于大多数最新功能,建议使用uppeteer或基于剧作的版本。

剧作家CLI与Foxhound

这款Web Crawler员工Foxhound是Firefox的乐器版本,在通过网页导航时执行动态污染跟踪。要启动爬行者,DO:

$ CD爬网

$ Node crawler-taint.js -seedurl=https://google.com -maxurls=100 -headless=true-true-foxhoundpath=optional-foxhound-path-foxhound-path foxHoundPath默认设置为以下Directory: Crawler/Firfox,其中包含一个名为Binary Firefox。

Note:您需要使用此版本的Foxhound构建。 JAW-V3版本中包含Ubuntu构建。

木偶cli

启动爬行者,do:

$ CD爬网

$ node crawler.js - seedurl=https://google.com -maxurls=100 -browser=chrome -headless -headless=true,请参阅此处。有关更多信息。

硒cli

启动爬行者,do:

$ CD爬行者/HPG_CRAWLER

$ vim docker-compose.yaml#设置要在此处爬网的网站并保存

$ docker-compose构建

$ docker -compose -D请参阅此处的HPG_CRAWLER的文档以获取更多信息。

图形结构

HPG构造CLI

用于生成给定(一组)JavaScript文件的HPG,DO:

$ node Engine/cli.js -lang=js -graphid=graph1 -input=/in/file1.js -input=/in/file2.js -output=$(pwd)/data/data/out/-mode=csv

可选参数:

-lang:输入程序的语言

-graphid:生成的HPG的标识符

-Input:输入程序的路径

- 输出:输出hpg的路径必须为i

-mode:确定输出格式(CSV或GraphMl)

HPG导入CLI

以在Neo4J Graph数据库(Docker实例)内导入HPG,DO:

$ python3 -m hpg_neo4j.hpg_import -rpath=to to to to to-the-folder-the-csv-files -id=xyz -nodes=nodes.csv-eDges=rels.csv=rels.csv

$ python3 -m hpg_neo4j.hpg_import -h

USAGE: HPG_IMPORT.PY [-H] [ - -RPATH P] [-ID I] [ - NODES N] [ - EDGES E]

该脚本将属性图的CSV导入到Neo4J Docker数据库中。

可选参数:

-h, - 赫尔普显示此帮助消息和退出

- 吊车P的相对路径与包含`data`目录中的图形CSV文件的文件夹相对路径

- ID i图形或Docker容器的标识符

- 节点n节点CSV文件的名称(default: nodes.csv)

- edges e关系CSV文件的名称(Default: Rels.CSV)

HPG构造和导入CLI(V1)

,以创建HPG_Crawler输出的混合属性图并在本地NEO4J实例中导入它,您也可以do: do:

$ python3 -m engine.api path --js=program.js --import=bool --hybrid=bool --reqs=requests.out --evts=events.out --cookies=cookies.pkl --html=html_snapshot.html Specification of Parameters: path: absolute path to the folder containing the program files for analysis (must be under引擎/输出文件夹)。 -js=program.js:用于分析的JavaScript程序的名称(DEFAULT: JS_PROGRAME.JS)。 -import=boo:是否应将构造的属性图导入到活动的neo4j数据库(Default: True)。 -HYBRID=BOOL:是否启用了混合模式(Default: False)。这意味着测试仪希望通过输入文件来丰富属性图,该文件的任何HTML快照,触发事件,HTTP请求和cookie(如Jaw Crawler收集)。 - reqs=requests.out:仅用于混合模式,包含观察到的网络请求序列的文件的名称,将字符串false传递以排除(default: request_logs_short.out.out)。 -evts=Events.out:仅用于混合模式,包含射击事件序列的文件的名称,将字符串false传递以排除(default: Events.out)。 -html=html_snapshot.html:仅用于混合模式,包含cookie的文件的名称,将字符串false传递以排除(default: cookies.pkl)。 -html=html_snapshot.html:仅用于混合模式,包含DOM树快照的文件的名称,将字符串false传递到dublate(default: html_rendered.html)。有关更多信息,您可以使用Graph Construction API:提供的帮助CLI

$ Python3 -m Engine.API -H

安全分析

可以使用Cypher或NeoModel ORM查询构造的HPG。

运行自定义图形遍历

您应该在分析/Analysis_name中放置并运行查询。

选项1:使用NeoModel Orm(已弃用)

您可以使用NeoModel Orm查询HPG。写一个query:

(1)查看HPG数据模型和语法树。 (2)查看HPGS的ORM模型(3)请参阅提供的示例查询文件; example_query_orm.py在分析/示例文件夹中。 $ python3 -m analyzes.example.example_query_orm有关更多信息,请参阅此处。

选项2:使用Cypher查询

您可以使用Cypher编写自定义查询。对于此:

(1)查看HPG数据模型和语法树。 (2)请参见提供的示例查询文件; example_query_cypher.py在分析/示例文件夹中。 $ python3 -m andarys.example.example_query_cypher有关更多信息,请参阅此处。

漏洞检测

本节介绍了如何配置和使用下颌进行漏洞检测以及如何解释输出。下颌包含用于检测客户端CSRF和DOM CLOBBERING的独立查询

步骤1。在输入config.yaml文件:中启用漏洞类的分析组件

request_hijacking:

启用: True

#[.]

Domclobbering:

启用: false

#[.]

CS_CSRF:

启用: false

#[.]步骤2。使用:运行管道实例

$ python3 -m run_pipeline -conf=config.yaml提示。您可以在不同的屏幕下运行多个管道的实例:

$ screen -dms s1 bash -c'python3 -m run_pipeline -conf=conf1.yaml; exec sh'

$ screen -dms s2 bash -c'python3 -m run_pipeline -conf=conf2.yaml; exec sh'

$#[.]要自动生成并行配置文件,您可以使用generate_config.py脚本。

如何解释分析的输出?

输出将存储在一个名为sink.flows.out的文件中,以在与输入的文件夹中。例如,对于客户端的CSRF,对于每个检测到的HTTP请求,下颌输出标记与构造请求(即程序切片)元素相关的语义类型集(又称语义标签或标签)的条目。例如,通过窗口。LocationIndection Point可以原谅具有语义类型['win.loc']的HTTP请求。但是,标记为['非范围']的请求是不可原谅的。

示例输出条目在:下显示

[*] tags: ['win.loc']

[*] nodeid: {'topexpression':'86','callexpression':'87','gright':'94'}

[*]位置: 29

[*]功能: AJAX

[*] template: ajaxloc +'/bearer1234/'

[*] top Expression: $ .ajax({Xhrfields: {withCredentials:'true'},url: ajaxloc +'/bearer1234/'})

1: ['win.loc']变量=ajaxloc

0 (loc:6)- var ajaxloc=window.location.href This entry shows that on line 29, there is a $.ajax call expression, and this call expression triggers an ajax request with the url template value of ajaxloc + '/bearer1234/, where the parameter ajaxloc is a program slice reading its value at line 6 from window.location.href, thus forgetable through ['win.loc']。

测试Web应用程序

为了简化下颌的测试过程并确保您的设置准确,我们提供了一个简单的node.js Web应用程序,您可以使用该应用程序测试JAW。

首先,安装依赖项VIA:

$ CD测试/测试Webapp

然后安装$ npm,然后在新的屏幕:中运行该应用程序

$ screen -dms jawwebapp bash -c'端口=6789 npm run devstart; Exec SH'

详细的文档。

有关更多信息,请访问我们的Wiki页面。以下是用于快速访问的目录。

jaw

的网络爬网

Web Crawlers 010-10属性图节点语法和语法树属性图

混合属性图(HPGS)的数据模型

图形结构

使用jaw with Neo4j docker容器

图形遍历

构建属性图3010-10在属性图3

贡献和行为准则

拉的属性图3

学术出版物

拉动请求。该项目旨在是一个安全,受欢迎的空间,预计贡献者将遵守《贡献者的行为守则》。

确认

如果您使用下巴进行学术研究,我们建议您引用以下论文:

@inproceedings {jaw,

title={JAW:使用混合属性图和声明性遍历研究客户端CSRF,

作者={Soheil Khodayari和Giancarlo Pellegrino},

BookTitle={30th {USENIX}安全研讨会({USENIX} SECURION 21)},

年={2021},

地址={Vancouver,B.C。},

publisher={{usenix}协会},

} 010-1010颌骨已经走了很长一段路,我们想在这里给贡献者一个当之无愧的喊叫!

@tmbrbr, @c01gide,@jndre和sepehr mirzaei。

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...