跳到主要内容

功能发布:爆破与未授权检测

· 阅读需 6 分钟
Yak ProjectYak Project

不知道大家最近更新有没有发现我们悄悄上线了爆破与授权检测,近期收集了大家对于这个功能的意见反馈,进行了优化后,在满足预期的基础上跟大家讲一讲这个功能的使用与具体的技术逻辑

01

背景

“爆破与未授权检测” 虽然并不是一个难做的工作,属于脏活累活,但是又是基础工作。实际在做过这个工作和模块编写的同学们都非常清楚,里面有很多细节可以抠,实现基础功能和做 “好 / 精致” 是两个概念,这个功能可以发挥的空间其实非常大。

之前这篇文章如何使用 如何使用Yakit进行流量劫持 在进行功能对比时,我们有介绍在爆破的场景下burp和yakit是如何工作的,虽然yakit能通过web fuzzer的语句达到爆破的目的,但是通过web fuzzer来实现比界面化操作更复杂,而且在无法抓到包的情况下不能通过web fuzzer来达到爆破的目的,覆盖的场景也较少,在基于这些考虑下,我们给爆破套了件衣服,通过简单的操作达到爆破目的。

(yakit爆破与未授权检测)

02

服务决定合适的爆破方式

我们可以举一些典型的例子和处理方案来介绍 “爆破” 其实并没有那么简单。例如众多服务会自带防爆破的机制,在目标有了“特定反应(比如告诉你 not allowed)”的时候,就不应该继续执行任务了。

01

SSH 服务登陆检查

SSH 爆破分为好几个阶段:

  1. 判断 SSH 服务允许的认证方式( password / key / empty)
  2. 如果不允许密码认证,就无法爆破;
  3. 如果允许密码登陆,尝试一次 root 空密码,然后尝试其他密码。
  4. SSH 服务极度不适合针对同一个目标并发爆破,服务器会限制登录频率,出现大量 Connection Refused 或者 Timeout 造成资源浪费

SSH 用户名枚举漏洞 (CVE-2018-15473)可以极大缩短爆破的时长,也是大家经常忽略的一个问题。

02

Redis 服务登陆检查

  1. Redis 不需要用户名,所以要求通用爆破框架自动忽略用户名的处理。
  2. 出现 Redis 未授权访问的时候,就不应该进行爆破了。
  3. 如果出现大量 Connection Refused,将意味着 “防火墙机制” 启动了,这个时候暂停爆破或者说停止对这个目标的探测其实是最好的办法。

03

MySQL 服务登陆检查

  1. 如果 MySQL 开启了登陆 IP 白名单,将会出现 “is not allowed to connect” 的问题。这个时候应该停止对该目标的检测。

03

需要注意的“金色传说”细节

01

细节一:单目标并发与多目标并发

大量的实践都证明,一些不够“精致”的爆破手段喜欢增加并发,并发无脑加到了“单个目标”上,导致爆破很快遭到察觉和封禁。

比较合适的手段应该是可以同时爆破“多个目标”,每个目标低并发。这样在有多个目标的时候,并不会影响效率,而且单个目标也不会过快 “打草惊蛇”。

02

细节二:随机 Sleep 来规避 “反制爆破的策略”

在我们“多个目标并发”的爆破策略下,有时候还是难以解决被 Ban 的问题。虽然我们并有从根源上解决这个 “被 ban” 的问题。

但是以我作为一个 “研发” 的角度来讲,我如果要 ban 爆破行为的话,我会设置一个时间窗口,短时间时间窗口被打满我会认为发生了爆破事件

如果可以再 “放缓” 针对单个目标的测试强度,其实有可能可以缓解这个问题,所以我们可以通过这种设置参数来解决这个问题。

03

细节三:未授权应该放在爆破前做检查

很多时候,我们无脑在爆破的时候,未授权和指纹检查其实已经可以发现一些可用的信息。遇到这种情况,我们可以决定到底要不要爆破。

通过未授权检测其实已经 “成功进入” 系统了,哪还有必要进行额外爆破呢?

04

yak 中的爆破框架 schema

yaklang.io 的爆破框架其实解决了上面提到的大多数细节问题,在 yak 的 brute 模块中,我们定义了如下内容:

每个服务,我们会设置默认用户名和密码,同时为每一个模块编写 “UnAuthVerify”:

  1. 这个函数的意义是,进行 “预检查”,在这个模块中,可以检查 TCP 的状态,检查 banner
  2. 当然这个函数的精髓其实是每一个 “目标” 只会执行一次

我们以 MySQL 来举例:

很多时候,我们虽然同时支持 “多目标并发” 和 “单目标并发”,但是多目标并发仍然绕不开 “too many open sockets/files” 魔咒,当遇到这种情况,用户需要手动修改本机的配置,ulimit 等。

05

项目进展

在项目推进的过程中,我们制定了一个短期的计划,分三大块,也并不是“机密”:

  1. 初步替代 BP 的核心功能,仔细打磨各种细节和使用体验,让“替代”不只是口号;
  2. 基础安全工具提供 GUI,降低成本;
  3. MITM 插件系统完善,基于 yak 语言实现 GUI 形式带插件的被动扫描;

到现在两个月有余,我们承诺将会把常见的基础安全工具全部提供足够易用的 GUI,爆破与未授权检测是这个承诺的一部分。虽然 brute 模块中的爆破类型仍然有限,但是这并不是终点,而是一个起点,肉眼可见的,我们可以编写 yak 脚本热加载到程序中,作为 yak 爆破框架的用户自定义插件,在在线的插件商店完备之后,这类操作将会带来无限的想象力。

我们提到的上述内容,并不以营利为目的,初衷仍然是免费的“安全能力基座 + 安全单兵装备”。

近期github大佬们留下的issue,也在最新的版本中进行了修复

1、MITM模块的“发送到Web Fuzzer”不管用

2、使用插件被动扫描会受到手动劫持模式开关影响

以及群里各位提的bug和建议

1、爆破可使用自己的字典,可选择是否使用默认字典(@pytho1n,@TimWhite)

2、插件商店插件过多导致刷新出现问题(@Husky,@.)

大家在各个渠道留下的意见和建议我们都有在仔细记录和更新中~也期待收到大家更多的反馈


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