YAKIT-A Cyber Security ALL-IN-ONE Platform based on Yak language
白皮书 •
官方文档 •
问题反馈 •
官方网站 •
社区 •
架构
:book:语言: English •
中文
# 简介
安全融合是新常态下企业安全运营和管理的变革,也是新常态下企业的首要任务。
基于安全融合的理念,Yaklang.io 团队开发了安全领域的垂直语言 Yaklang。对于一些无法原生集成到 Yak 平台的产品/工具,可以使用 Yaklang 重写它们的“高质量替代品”。对于生态完整且被广泛认可的产品,Yaklang 可以直接编译并集成它们,并对源代码进行必要的修改,以更好地兼容 Yaklang 语言。对于不想编写代码的安全从业者,Yakit 为 Yaklang 中的所有功能提供了合适的 GUI。随着版本的迭代,GUI 将变得更加成熟。
为了让 Yaklang 的安全能力更贴近实际使用,我们为 Yak 开发了一个 gRPC server,并基于该 server 构建了名为 Yakit 的客户端。
## 架构
## 核心技术:CDSL
CDSL 的全称是 CyberSecurity Domain Specific Language,是网络安全领域的一门专用编程语言。我们开发了一个栈虚拟机来处理这种图灵完备语言的运行时状态。我们的目标是通过使用 CDSL 来整合安全能力,并实现统一的底层平台。
为了使我们自主研发的 CDSL 语言更符合实际使用场景,我们为 Yaklang 创建了一个 gRPC server。以这个 gRPC server 为基础,我们构建了 Yakit 客户端。
在实践中,Yakit 的图形用户界面 (GUI) 允许用户控制引擎的各种能力。Yakit 的 gRPC server 提供了便捷高效的部署选项。它是平台无关的,为用户提供了在远程部署或直接在本地机器上运行的灵活性。
1. 它可以完全替代 BurpSuite 作为 MITM 拦截平台。
2. 它为难以复现的 MITM 被动扫描提供了独特且用户友好的 GUI。
3. 它允许嵌入 Yaklang 脚本,对流量进行动态调试并实时执行代码。
4. 它是全球首个可视化 Web Fuzzer,是进行全面的 Web 漏洞测试的强大工具。
5. Yakit 插件商店:一个用户可以查找并安装各种 Yakit 插件的市场。
6. 它允许在渗透测试的任何步骤执行自定义的 Yaklang 脚本或插件。
... ...
安全能力概述:
## 专项技术
### MITM 交互式劫持。
Yakit 中的 MITM (Man-in-the-Middle) 控制台可以完全替代 BurpSuite 并执行所有操作,包括下载和安装证书、劫持请求和响应,以及编辑拦截到的数据包。它提供了顺畅的工作流程,包括劫持、历史记录跟踪以及使用 Repeater 和 Intruder 等工具。用户可以拦截数据,在历史记录部分查看历史数据,选择数据包进行进一步分析,并将其发送到 Web Fuzzer 进行 Repeater 或 Intruder 操作。除了这些典型的使用场景外,Yakit 的 MITM 模块还提供了更灵活的功能,例如基于插件的被动扫描、热重载、数据包替换和打标签。
Yakit MITM 模块的底层原理是启动一个自动转发流量的 HTTP 代理。当用户发起手动劫持时,自动转发将停止,请求被阻塞并弹出栈。然后,该模块会执行 Gzip 解码、chunk 处理和解码等任务,使请求变得易读,随后展示给用户。用户可以根据需要查看、修改或重放请求。在重放期间,Yakit 引擎会修复用户构造的 HTTP 请求以确保其有效性。Yak 的引擎有一个定制构建的 HTTP 库,允许用户自定义畸形的请求和响应,这在利用特定场景下的漏洞时非常有用。
### Web 应用交互式流量重放与 Fuzz 测试。
Web Fuzzer 模块支持发送用户自定义的 HTTP 原始请求。为了使其更加用户友好和直观,Yakit 的后端执行了多项任务。它确保修复并补全 HTTP 原始请求中用于数据传输和解析的必要信息。例如,Yakit 会修复 CRLF、补全 Content-Type、处理 chunked 传输编码、添加缺失的 boundary、更正 Content-Length 等。这使得用户可以专注于数据相关的信息,而无需担心 HTTP 协议底层的复杂性。
### Fuzztag
Web Fuzzer 模块通过 Fuzz 标签支持无缝集成 Host 碰撞、Intruder 和目录暴力破解等功能。例如,在单个参数暴力破解的场景中,以用户 ID 为例。你可以使用 `{{int(1-10)}}` 标签自动生成一个 ID 范围来进行暴力破解。在需要暴力破解多个参数的场景中,会使用参数的笛卡尔积来进行暴力破解。这省去了选择暴力破解方法和导入字典的需要,减少了用户操作步骤,与 BurpSuite 的 Intruder 模块相比更符合用户习惯。
除了使用标签生成参数外,Web Fuzzer 模块还支持导入外部字典。例如:`{{file(/tmp/username.txt)}}`。在更复杂的数据场景中,Web Fuzzer 模块允许插入热重载的标签。例如,如果你需要暴力破解特定地区的身份证号码,你可以直接在 Web Fuzzer 模块中插入 Yak 脚本来生成用于暴力破解的数据。相比之下,BurpSuite 的 Intruder 模块需要编写代码来生成字典,然后再将其导入到 Intruder 模块中。
您可以参考以下内容了解有关 Fuzztag 的更多信息: [Fuzztag ](https://yaklang.com/docs/newforyak/fuzztag)
### 反向连接技术与应用协议复用技术。
许多漏洞利用场景需要反向连接到不同协议的服务。传统的利用工具需要在公共服务器上为每个服务分别设置端口。例如,在基于 LDAP 的漏洞利用中,用户需要启动一个 HTTP 服务、一个 LDAP 服务,然后发送攻击请求以完成利用过程。传统的服务要求每个服务都有独立的端口。然而,Yaklang 的端口协议复用技术允许监听单个端口,并识别传入请求的协议以进行相应的响应。Yaklang 端口协议复用的优势不仅在于节省资源和方便手动测试,还在于能够通过手工制作协议头来手动实现各种协议。这允许灵活构建不同的协议数据包,包括创建畸形协议以利用漏洞,或通过 DNS 或 ICMP 等协议承载数据,这可用于后门持久化或绕过某些无法出网的基于 TCP 的漏洞。
同时,Yakit 基于端口协议复用技术实现了反向连接模块,该模块包括 Reverse Shell、反向连接利用和反向连接检测等功能。Reverse Shell 功能允许监听指定端口作为反向 shell 的接收端。一旦接收到反向 shell,就可以像 SSH 一样用于控制远程服务器。在传统的渗透测试场景中,通常使用 Nc 等工具监听端口,但可能会遇到退格键或方向键等某些按键的问题。Yakit 提供的 reverse shell 体验类似于原生 SSH,解决了这些局限性。反向连接利用功能允许基于监听端口为不同协议设置 payload。当接收到请求时,会自动识别协议,并返回相应的 payload 以实现漏洞利用。反向连接检测功能提供了对 TCP、DNSLog 和 ICMP 反向连接的检测,可用于命令执行检测。
## 如何使用
- 您可以访问 [官方网站](https://yaklang.com/) 下载并安装 Yakit。
- 您可以参考我们的 [官方文档](https://yaklang.io/products/intro/) 来学习和使用 Yakit。
如需了解更多技术内容,您可以查看:
[技术文章](https://yaklang.io/products/article/yakit-technical-study/methodology)
[白皮书](https://yaklang.oss-cn-beijing.aliyuncs.com/yakit-technical-white-paper.pdf)
## 开发设置
前置条件:
- Node.js 18.x(推荐)和 Yarn 1.x
- Git
- Windows、macOS 或 Linux
步骤:
1. 在仓库根目录安装依赖
yarn
2. 安装渲染进程依赖
yarn install-render
3. 启动开发(启动 React 渲染进程和 Electron)
yarn dev
实用脚本(来自 package.json):
- 仅构建渲染进程:`yarn build-render`
- 仅启动 Electron(在渲染进程运行于 3000 端口后):`yarn start-electron`
- 打包(Windows 示例):`yarn pack-win`
## 免责声明
1. 本工具仅用于合法授权的企业安全建设行为和个人学习行为。如果您需要测试本工具的可用性,请自行搭建虚拟环境。
2. 在使用本工具进行渗透测试时,您应确保该行为符合当地法律法规,并获得充分的授权。请勿扫描未授权的目标。
3. 禁止对本软件进行逆向工程、反编译、尝试破译源代码、植入后门以传播恶意软件等行为。
4. 如果您需要将 Yakit 用于商业目的,请确保您已获得官方授权;否则,我们将追究您任何相关的责任。
如果您在使用本工具有任何违法行为,您应自行承担相应的后果,我们不承担任何法律和连带责任。
在安装和使用本工具之前,请仔细阅读并充分理解本条款
除非您已完全阅读、完全理解并接受本协议的所有条款,否则请不要安装和使用本工具。您的使用行为或您以任何其他明示或暗示的方式接受本协议,即视为已阅读并同意受本协议约束