乌鸦- CI/CD安全分析仪

taibeihacker

Moderator
AVvXsEgyRJD1KzNj4g6TZU4paIfRlwntEhlE-1TTejSMgWUFloDHdFdiDkH20xf7Ao3Ukd_hYOhcAiDjnOQPKfNEhxkdCOp50oF6ILXtwOZ3ER6ydyZqo8L40HmFkhwFJFpcwmYcZ9HUppDQdEe1lTXpZ9a3Cizx4vdH8BodDisKTzncOM_tqg0SEv0gTojpIbqE=w640-h256

RAVEN (Risk Analysis and Vulnerability Enumeration for CI/CD)是一种强大的安全工具,旨在对GitHub操作进行大规模扫描CI工作流,并将发现的数据消耗到NEO4J数据库中。由Cycode研究团队开发和维护。
使用Raven,我们能够在GitHub上托管的一些最受欢迎的存储库中识别和报告安全漏洞,包括:
FreecodeCamp(Github上最受欢迎的项目)Storybook(最受欢迎的前端框架之一)流利的UI撰写的UI,更多的是,我们列出了在工具名人堂中使用Raven发现的所有漏洞。

What is Raven​

该工具提供了以下功能来扫描和分析潜在的CI/CD漏洞:
Downloader:您可以下载分析所需的工作流程和操作。可以为指定的组织或所有存储库下载工作流程,并按星数排序。执行此步骤是分析工作流程的先决条件。Indexer:将下载的数据消耗到基于图的NEO4J数据库中。该过程涉及建立工作流程,行动,工作,步骤等之间的关系。Query Library:我们根据社区进行的研究创建了一个预定的查询库。Reporter:Raven有一种简单的报告可疑发现的方法。例如,它可以将其纳入CI过程中以进行拉动请求并在此处运行。 RAVEN:的可能用途
用于漏洞赏金目的的扫描仪为您自己组织的安全扫描指定的组织扫描所有内容,并报告了为保存Internet研究和学习目的而发现的问题。该工具为CI/CD安全性分析提供了可靠且可扩展的解决方案,使用户能够查询不良配置并获得对其CodeBase的安全性posture的宝贵洞察力。

Why Raven​

在过去一年中,Cycode Labs就CI/CD系统的基本安全问题进行了广泛的研究。我们检查了许多系统,数千个项目和几种配置的深度。结论是明确的- 将安全性委派给开发人员的模型失败了。这已经在我们以前的content3360中已经证明了多次
一个简单的注入场景暴露了数十个公共存储库,包括流行的开源项目。我们发现,最受欢迎的前端框架之一很容易受到分支注射攻击的创新方法。我们详细介绍了完全不同的攻击向量,第三方集成风险,Github上最受欢迎的项目,数千个项目。最后,Microsoft 365 UI框架拥有超过3亿用户,容易受到新的威胁- 一种人工制品中毒攻击。此外,我们发现,报告并私下披露了数百个其他漏洞。上面的每个漏洞都有独特的特征,这使开发人员几乎不可能与最新的安全趋势保持最新状态。不幸的是,每个漏洞都有一个共同点- 每个剥削都会影响数百万受害者。
正是由于这些原因,创建了Raven,这是CI/CD安全分析工作流程的框架(将GITHUB动作作为第一种用例)。在我们的重点中,我们研究了每个问题本身并不是威胁的复杂场景,但是合并后,它们构成了严重的威胁。

Setup Run​

要开始使用Raven,请按照以下安装说明:
Step 1:安装乌鸦包
pip3安装raven-cycodeStep 2:设置本地redis服务器和neo4j数据库
docker run -d --name raven-neo4j -p7474:7474 -p7687:7687 --env NEO4J_AUTH=neo4j/123456789 --volume raven-neo4j:/data neo4j:5.12
docker run -d -name raven -redis -p6379:6379 -VOLUME RAVEN -REDIS:/DATA REDIS:7.2.1
git克隆https://github.com/cycodelabs/raven.git
CD乌鸦
制作设置Step 3:运行乌鸦下载器
org模式:
乌鸦下载org- token $ github_token -org-name ravendemo爬网模式:
乌鸦下载爬网- token $ github_token-米明星1000Step 4:运行raven索引器
乌鸦指数Step 5:通过记者检查结果
Raven报告- 在这一点上,Format Raw可以通过连接http://localhost:7474/browser/来检查Neo4J数据库中的数据。

Prerequisites​

Python 3.9+ Docker组成v2.1.0+ Docker Engine V1.13.0+

Infrastructure​

Raven使用两个主要Docker容器: REDIS和NEO4J。制作设置将运行Docker组成的命令来准备该环境。
AVvXsEgv_E2iPqCpHZH80qzyKIybdhk9fzasZeCDuZoBvVh_WrSE_ay29fW2MW_YB0FlUqy9EbSuscREU2CCla6QH27DM8Bdu8rOx4Fe_vwLw6xsx2FanSmAW0MbLH_jWo2FsN3SqX7oguQJXroWLWl2050DeZr6ZhK5el-hictfnNaqugcJSIJxiPtfmV_ksMWc=w640-h378

Usage​

该工具包含三个主要功能:下载和索引和报告。

Download​

Download Organization Repositories​

用法: raven下载org [-h] - token令牌[-debug] [ - redis-host redis_host] [-REDIS-PORT REDIS_PORT]
Options:
-h, - 赫尔普显示此帮助消息和退出
- token doken github_token从github api下载数据(有效限制速率)
- debug是否要打印调试语句,default: false
- REDIS REDIS_HOST
REDIS主机,Default: Localhost
- REDIS-PORT REDIS_PORT
redis端口,默认: 6379
-Clean-redis,-cr是否清洁redis中的缓存,default: false
-org-name org_name组织名称要下载工作流

Download Public Repositories​

用法: raven下载crawl [-h] - token token [-debug] [-debug] [-redis-host redis_host] [-redis-port redis_port]
Options:
-h, - 赫尔普显示此帮助消息和退出
- token doken github_token从github api下载数据(有效限制速率)
- debug是否要打印调试语句,default: false
- REDIS REDIS_HOST
REDIS主机,Default: Localhost
- REDIS-PORT REDIS_PORT
redis端口,默认: 6379
-Clean-redis,-cr是否清洁redis中的缓存,default: false
- Max-Stars max_stars
存储库的最大星星数量
- 明星Min_stars
存储库的最小星级,默认: 1000

Index​

用法: raven索引[-H] [-REDIS-HOST REDIS_HOST] [-REDIS-PORT REDIS_PORT] [-CLEAN-REDIS] [-CLEAN-REDIS] neo4j_pass]
[ - -CLEAN-NEO4J] [ - debug]
Options:
-h, - 赫尔普显示此帮助消息和退出
- REDIS REDIS_HOST
REDIS主机,Default: Localhost
- REDIS-PORT REDIS_PORT
redis端口,默认: 6379
-Clean-redis,-cr是否清洁redis中的缓存,default: false
-neo4j-uri neo4j_uri
neo4j uri端点,默认: neo4j: //localhost:7687
-neo4j-user neo4j_user
neo4j用户名,默认为: neo4j
-neo4j-pass neo4j_pass
neo4j密码,默认: 123456789
-CN-neo4j,-cn是否要清洁缓存和索引for scratch,默认为: false
- 删除是否打印调试声明,违约: false

Report​

用法: Raven Report [-H] [-REDIS-HOST REDIS_HOST] [-REDIS-PORT REDIS_PORT]
[-neo4j-user neo4j_user] [-neo4j-pass neo4j_pass] [-clean-neo4j]
[-tag {注射,未经身份验证,固定,Priv-esc,供应链}]]
[ - severity {info,低,中,高,高,关键}] [ - queries-path queries_path] [ - format {raw,json}]
{Slack} .
位置参数:
{松弛}
Slack将报告发送到Slack频道
Options:
-h, - 赫尔普显示此帮助消息和退出
- REDIS REDIS_HOST
REDIS主机,Default: Localhost
- REDIS-PORT REDIS_PORT
redis端口,默认: 6379
-Clean-redis,-cr是否清洁redis中的缓存,default: false
-neo4j-uri neo4j_uri
neo4j uri端点,默认: neo4j: //localhost:7687
-neo4j-user neo4j_user
neo4j用户名,默认为: neo4j
-neo4j-pass neo4j_pass
neo4j密码,默认: 123456789
-CLEAN-NEO4J,-CN是否要清洁缓存和从头开始索引,默认为: false
- 标签{注射,未经身份验证,固定,priv-esc,供应链}, -
带有特定标签的过滤查询
- severity {info,低,中,高,高,关键}, - {info,低,中,高,高,关键}
按严重性级别的过滤查询(Default:信息)
- Queries-Path Queries_path,-dp queries_path
查询文件夹(Default:库)
-Format {RAW,JSON},-f {RAW,JSON}
报告格式(Default: RAW)

Examples​

检索与组织相关的所有工作流程和操作。
Raven下载org -token $ github_token -org-name microsoft -org-name google- debug scrape scrape scrape asteral scrape asteral ost scrape as scrape as crape asully clible complion complion complion github存储库。
乌鸦下载爬网- token $ github_token-米恩星- 明星100-最大明星1000-完成下载过程后或使用ctrl+c中断后,继续将所有工作流程和操作索引到neo4j数据库中。
乌鸦索引- 现在,我们可以使用我们的查询库生成报告。
Raven报告- 高度高- 标签注入- 标签未经身份验证的

Rate Limiting​

,以限制有效的速率,您应该提供GitHub令牌。对于经过身份验证的用户,下一个限制应用程序:
代码搜索- 每分钟30个查询任何其他API -5000每小时

Research Knowledge Base​

发出的注射式注射请求注射工作流程运行codesee注射

Current Limitations​

可以通过引用使用Dockerfile的文件夹来引用外部操作,而无需使用Dockerfile(无动作)。目前,此行为不支持。可以通过通过Docker: //. URL引用Docker容器来运行外部操作。目前,此行为不支持。可以通过在本地引用该动作来执行动作。这会产生复杂的行为,因为它可能来自先前已检查的不同存储库。当前的行为试图在现有存储库中找到它。我们不是对整个工作流结构进行建模。如果需要其他字段,请根据贡献指南提交拉动请求。

Future Research Work​

污点分析实施。示例用例- 用户可以将拉请请求标题(该参数受控)传递给命名数据的操作参数。该操作参数可以在Run Command: -Run: echo $ {{inputs.data}}中使用,这为代码执行创建了路径。扩展研究结果,以发现有害滥用GitHub_env。这也可能利用先前的污点分析。研究动作/github-script是否具有有趣的威胁格局。如果是这样,可以在图中对其进行建模。

Want more of CI/CD Security, AppSec, and ASPM? Check out Cycode​

如果您喜欢Raven,您可能会喜欢我们的Cycode平台,该平台为可见性,优先级和修复整个软件交付的漏洞提供了更大的功能。
如果您对强大的,研究驱动的管道安全性,应用程序安全性或ASPM解决方案感兴趣,请随时与我们联系或使用表格3https://cycode.com/book-a-a-demo/请求演示。
 
返回
上方