跳到主要内容

功能发布:Yakit 流量分析功能详解

· 阅读需 6 分钟
Yak ProjectYak Project

本期分享文章分享的是 Yakit 最近上线的流量分析功能。

在 Web 安全测试中,我们经常面临下面两大核心诉求:

01 如何快速定位关键流量数据?

02 如何深度挖掘历史流量价值?

而流量分析功能则补全了这块拼图,让用户能够二次利用历史数据,挖掘出有价值的流量。

为什么需要流量分析

为什么需要流量分析功能呢?

在以往,我们一般通过 History 页面来处理已经存进数据库的流量,通过关键词、网站树等方法筛选出我们想要的流量。

一般情况下这是足够用的,但是如果需要符合筛选就比较难了。比如:筛选出请求包中包括"baidu",返回包包含"helloworld"的流量,那么单纯关键字搜索框就无法满足我们的需求了。

这个时候,有使用 Yaklang 编程经验的用户,可能会通过 YAK 代码完成这项需求。通过 db.QueryHTTPFlowsAll() 的遍历数据库的所有流量数据,拿出所有合适的内容。

这是一种很好的解决思路。事实上,流量分析也正是通过遍历数据库的流量、分析,拿到最终的结果。不过,流量分析能够完成的工作不止这些,它还支持使用 MITM 提取器规则进行分析,这意味着在有新规则的时候,能够对旧的流量数据再次进行分析。

功能介绍

我们先大体介绍一下 Yakit 流量分析的功能分布以及运行流程。

功能分布

流量分析功能页面的入口在History右边的小图标上面:

如上图,流量分析功能大概分为三大部分:

  1. 筛选页面。这个页面和History一样,你可以通过网站树关键字协议类型等各种方式筛选你想要进行分析的流量,避免将所有数据库的流量都进行分析,造成性能负担。
  2. 分析方式。分析方式分为规则热加载规则就是MITM匹配器的规则,而热加载则赋予使用代码处理流量的能力。这两种分析方式是并存的,也就是如果同时配置规则与热加载,他们都会运行。
  3. 配置页面。这个页面是一些流量分析功能一些配置信息,包括数据类型、并发以及单条记录的去重等。

流量分析是个简单的输入输出模型,运行流程图如下:

接下来,文章会对 Yakit 的数据输入、流量分析、结果处理模块做个详细的介绍。

具体功能讲解

数据输入

选择数据的输入可以通过配置页面进行配置:

在配置页面中,有数据类型设置,分别为筛选流量数据包。这两个设置其实代表着想要分析的流量的来源。

  • 筛选流量:设置以后会通过筛选页面设置的条件,从数据库中遍历每个符合条件的流量进行分析。
  • 数据包:由用户手动输入数据请求包、返回包,流量分析器会解析成 HTTPFlow 进行分析然后存入数据库。

默认使用的是筛选流量,只有设置了筛选流量后筛选页面才能生效。

如果设置数据包,那么需要手动填入要分析的流量:

规则与热加载

流量分析分为规则分析和热加载分析,他们可以同时运行。

(一)规则

流量分析可以直接使用 MITM 的规则。值得注意的是,MITM 中的规则又分为匹配规则替换规则。因为流量分析只是分析已经存在的流量,所以只会执行匹配规则,对内容进行匹配、染色等操作,而不会对数据包的内容进行替换(实际上也替换不了)。

(二)热加载

我们为流量分析器提供了一个热加载函数 analyzeHTTPFlow。它有两个参数:flowextract

  • flow:从数据源来的流量。
  • extract:用来提取分析完成的流量。extract 方法有两个参数,第一个参数为提取的规则名,第二个参数为提取的流量。

我们使用热加载来实现上面我们提到的需求:筛选出请求包中包括“baidu”,返回包包含“helloworld”的流量,同时我们还可以将其标记为绿色。

热加载代码:

analyzeHTTPFlow = func(flow /* *yakit.HTTPFlow */ ,extract /*func(ruleName string, flow *yakit.HTTPFlow)*/){
if str.Contains(flow.Request, "baidu") && str.Contains(flow.Response, "helloworld"){
flow.Green()
extract("提取helloworld",flow)
}
}

结果如下:

结果处理_

在流量分析完以后,可以查看匹配到的内容。如上图,可以看到两个“导出”的按钮:上面的导出为将本次所有提取的规则数据进行导出,下面的导出则针对单条数据匹配到的规则。

Tip:WebFuzzer+流量分析

在使用 WebFuzzer 的时候,如果产生数据包过多,可以跳转到流量分析里面进行流量分析。

此时流量分析器的筛选页面就会默认筛选出刚才 WebFuzzer 产生的流量,从而可以进一步分析。这个方式在 WebFuzzer 产生大量数据包的时候,对于想要查找有价值的数据十分有用。

总结

Yakit 流量分析功能突破传统流量筛选限制,通过 MITM 规则复用与热加载自定义代码,支持历史数据重分析及多源数据实时处理,实现复杂条件精准匹配与高效特征提取,结合结果标记与灵活导出,全面优化安全测试效率,推动工具生态闭环与深度数据价值挖掘。


本文首发于 Yak Project 公众号,阅读原文