leveryd-asm / asm

Scanner platform based on Kubernetes and Argo-Workflow 基于k8s和argo工作流的扫描器
https://leveryd-asm.github.io/asm-document
MIT License
106 stars 6 forks source link

版本计划 #8

Closed leveryd closed 1 year ago

leveryd commented 1 year ago

v0.0.2版本计划

用户场景

核心功能

功能模块 目标 为什么需要这个
信息收集-支持对全端口的web服务探测 可以发现更多的web服务
信息收集-网站接口 支持katana在扫描时带上身份信息 带上身份信息后,可以收集更多接口
漏洞扫描-带外辅助模块 支持xray、nuclei使用dnslog 部分命令执行、反序列化漏洞需要
leveryd commented 1 year ago

背景

向集群外提供被动代理扫描服务,有以下两种方式,该选用哪个?

作为代理服务,目前可选方案是 xray、 proxify基于Nodejs的代理服务,该选用哪个?

该选用nodeport service还是ingress?

考虑因素是用户体验,尽量不需要让用户记住多个服务地址。如果不可避免,就需要想其他办法优化,比如在控制台dashboard上做超链接、信息提示等。

如果使用ingress形式暴露服务,就无法代理https请求。

如果使用nodeport service,需要固定nodeport service暴露的端口,这样容易提示用户http/https代理地址是"console.com:nodeport"。

代理服务应该选哪个?

需要考虑的因素:

性能没测,目前感觉xray是最合适的。不过它只能支持指定一个upstream-server,流量镜像到多个后端的扫描服务或许需要看看其他的方案,或者变通实现。

TODO: 研究下istio的流量复制、apisix的流量复制,目前看起来似乎也只能镜像到一个后端服务

leveryd commented 1 year ago
image
leveryd commented 1 year ago

有两项没有做:

leveryd commented 1 year ago

当xray代理以ingress方式对外提供服务时,只能代理http请求、无法代理https

image
leveryd commented 1 year ago

nginx mirror指令很容易拷贝流量到多个代理

location / {
    mirror /mirror; # mirror 指令制定镜像 uri 为 /mirror
    mirror /mirror; # 每多加一份mirror,流量放大一倍
    proxy_pass http://service_a;
}

location = /mirror {
    # 判断请求方法,不是GET返回403
    if($request_method != GET) {
        return 403;
    }
    internal; # internal 指定此 location 只能被“内部的”请求调用,外部的调用请求会返回 ”Not found” (404)
    rewrite ^/mirror(.*)$ $1$request_uri break;
    proxy_pass http://service_b$request_uri;
}

参考 Nginx流量镜像(Mirror)

对于 https 流量呢?