整体思路:在扫描器的上层代理(使用proxify)做流量镜像储存到es,通过kb做可视化,方便做扫描器整体的流量回溯,敏感信息识别等(使用trufflehog)
1. 这是剥离出来,通用的方案。如果自己的扫描器需要缝合proxify和trufflehog的话,还有非常多的bug fix的活得干,当然也可以选择将结果输出至自己的系统即可。
2. 该方案一行代码也不需要写(bash不算.)
ES部署
密码根据自己的需求设置,版本需要选择7.x是因为proxify用的依赖也是7.x的版本,如果需要用更高版本的需要自己修改并重新编译下proxify
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=true" \
-e "ELASTIC_PASSWORD=jjfujj" \
docker.elastic.co/elasticsearch/elasticsearch:7.17.10
proxify配置
选择0.0.13版本,新版本bug挺多,选新版本需要自己fix下。
https://github.com/projectdiscovery/proxify/releases/tag/v0.0.13
配置proxify流量储存到es
❯ cat ~/.config/proxify/export-config.yaml
kafka:
addr:""
topic:""
elastic:
addr:"127.0.0.1:9200"
ssl:false
ssl-verification:false
username:"elastic"
password:"jjfujj"
index-name: "jj"
启动
./proxify -store-resposne=/tmp/proxify_logs/
trufflehog配置
下载最新版即可,他是支持直接扫描es的,支持的es是8.x,和上面冲突,且es扫描也有bug需要修,这也是上面为什么让proxify吐出来一份响应的原因。
https://github.com/trufflesecurity/truffleHog
敏感信息扫描以及通知
./trufflehog filesystem /tmp/proxify_logs/ --no-verification --json | jq -r -c '{rule_name:.DetectorName,data:.Raw,filepath:.SourceMetadata.Data.Filesystem.file}' | while read result; do curl -H "Content-Type: application/json" -d $'{"msgtype":"markdown", "markdown":{"content":"bingo:'"${result//\"/\\\"}"'"}}' 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXXXXXX'; done
定时通知扫描并清理proxify日志
*/2 * * * * /path/to/trufflehog.sh
*/2 * * * * find /tmp/proxify_logs/ -type f -mmin +5 -exec rm -f {} \;
可视化
docker run -d -p 5601:5601 -e "ELASTICSEARCH_USERNAME=elastic" \
-e "ELASTICSEARCH_PASSWORD=jjfujj" \
--link elasticsearch:elasticsearch \
docker.elastic.co/kibana/kibana:7.17.10
trufflehog提供了非常多敏感信息验证代码
`cd trufflehog/pkg/sources/ `
`python3 -m http.server 8889`
` `
`#测试浏览走proxify代理进行验证`
`curl -x 'http://127.0.0.1:8888' 'http://127.0.0.1:8889/git_test.go'`
后续所有接口重放/漏洞扫描的流量走proxify的代理即可
• 需要大量正则匹配(性能消耗)的工作放到端上做对日站的体验影响非常大,非常难受。
• 修别人的bug真难受,需求不复杂的话不如自己造轮子。
• 实际上开发/运维领域有很多现成的系统也可以完成该需求,不过对于这样一个小的需求来说,过于臃肿了,规则维护也比较麻烦。