浪潮
在不到一年的时间,我们使用新的语言(DSL)构建了一整套的基础的 “安全能力生态”,并且实现了一套 “可用” 的 BurpSuite 替代方案,并且在 MITM 被动扫描 / Web Fuzzer 各种地方开辟了属于自己的新的技术路径。但是这些仅仅是项目的起点,除了对 “打破 BurpSuite 垄断” 这件几乎不可能的事情的尝试,也会面临很多新的挑战和新形态的探索问题。
私有云适配和 SaaS 化是现今产品发展和商业化的热点,甚至可以说必经之路,那么一个 DSL,或者说一个嵌入式语言能在私有云适配 / SaaS 化层面做那些 Amazing 的操作呢?、
DSL vs 低代码
A: 当 “内部系统” 越来越多的时候,如何让各种已经封装好的能力和系统之间彼此协调互相连接?
B: 产品功能完备,如何把产品本身的能力低成本的提供给用户?
C: 各厂商,各平台安全产品众多,他们之间如何协调(SoC/SOAR)?
其实这些工作内容可能大家并不陌生,市面上不管是 RPA 也好,还是 FaaS 或者说流程平台,Soar Palybook 也好;他们都能理论上很好的实现上述需求。
但是归结到更底层的技术点,我们以 FaaS 平台为例,引入特定 SDK 的 Python 脚本可以作为 FaaS 平台的 Function 运行,并进行编排;特定 SDK 的 JavaScript 也是 FaaS 平台常客;除此之外,要编写特定的 Palybook (Splunk Soar 为例) 需要 Splunk Search Language 支持;
In a Nutshell
当我们总结上述案例,发现一个普遍规律:不论流程的任意编排,还是能力的支持和实现,基本都需要依赖一门 “语言(GPL 或者 DSL)” 提供基础的图灵完备能力(Turing-Complete)。
分布式系统 + Yaklang = ?
当我们 “把事情想简单并且抽象一点”,一个特定领域内 DSL + 一个靠谱的分布式系统是不是可以综合两者的优势构建一个 1+1>2 的系统呢?
我们主观一点叫他 “图灵完备的分布式低代码系统”;这非常好的契合了我们的标题:“Low Code, Full Turing”
那么,这样的系统,我们能拿来做什么呢?
- 当一个新的漏洞出现,我们可以非常简单地在 Yakit 上编写一段代码,把它运行在我们的分布式 Yaklang 系统中,对成千上万的目标进行检测
- 如果我们并不想扫描漏洞,那么我们的 Yaklang 可以是仅扫描端口指纹的,那我们编写完 Yaklang 插件的时候,就已经具备了 “无限算力的端口扫描能力”;那么有没有可能快速构建第二个 Shodan 之类的空间搜索引擎?
- 同样的,如果指纹扫描的深度不够,需要对 Web 应用做更深度的 “启发式检测” 应该怎么办?Yaklang Chromedp 的实现可以实现一个高任务吞吐的 RPA
- 当然,我们上述的所有内容,都可以放在一段 Yaklang 脚本中,分发到成千上万的节点中执行
- 我们需要定期生成一个任务,监控某一些系统的指标?是不是也能做?
- 如果我们可以用 Yaklang 来定期生成报告,那也还不错?
要做?不,已有
上述描述的各种能力,很多内容都是大家 “梦寐以求” 并且大家一直努力都在做的;虽然系统和理念各有差别,但是上述描述的 “Low Code Full Turing” 系统其实描述的是一种上层建筑的框架结构,整体形状或者说技术基石。
其实更直观地对大家来说
- Yaklang 就是这套系统的 “执行节点”;
- 同时 Yakit 能很好的作为 “执行节点” 能力的证明,同时为个人用户日常工作提供极大地便利;
- 分布式引擎将作为 Yaklang 在低代码平台和商业产品中发挥作用的基石;
分布式任务控制与调度
在 “分布式的扫描”,最关键的一步一般来说是 “任务分发”,如何让自己的任务灵活分发到 N 多个节点中?
Web Fuzzer 中的 FuzzTag 是一个非常好的实现方式,事实上,我们就是这样做的
控制粒度
如果你想要分发一个大的 IP 段,这个 IP 段扫描 100 个端口,那么我们可以编写
{{net(192.168.1.1/24)}}:{{port(22,23,25,443,445,3389,80,8080-8083)}}
上述代码使用一行可以下发一个 IP 对应一个端口的分布式任务填满任务队列
{{net(192.168.1.1/24)}}:22,23,25,443,445,3389,80,8080-8083
下面代码可以以主机为单位分发任务,生成任务队列。
控制周期
控制分布式节点
定位:仍然是基础设施
正如本身开头给大家介绍的内容,我们希望分布式的 Yaklang 应该能作为一些 “简单可运营” 系统的承载基础,可以辅助用户 “快速灵活低成本” 地构建基于 Yaklang 的低代码平台;
- 届时我们将迁移 Yakit 中编辑器中所有 “自动补全” 到改引擎中
- 我们将把基础分布式引擎中的所有分布式调度相关功能打磨到 “稳定且所见即所得”
诚然,分布式的 Yaklang 引擎的用户将不会是 “C端个人用户”,而是一个完全面向 toB 的产品线;这个基础设施的用户并不限定甲乙方;目的也并不是解决安全能力的问题,应该解决的安全能力快速 “工程化与产品化” 的问题。借助 Yaklang 引擎本身提供的能力,快速做到可 “持续,交付,运营” 的基础设施。
Yak官方资源
Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ