老E在浏览查询华为云服务产品的过程中,无意关注到了国内一家安全实验室的开源项目SCFProxy,在协议层面支持http(https)和socks,都是标准化协议,而其反向shell的应用,对vps也有所保护,socks也是老E经常使用并推荐的标准化协议,不滥用即可。随便找了一台vps用aws lambda部署了一下,总体来看,值得记录并推荐。如果匹配AWS Lambda,SCFProxy部署最佳实践在vps的选择上,应该是AWS国区的vps或ec2主机,可以确保vps和函数部署区域主机的连接稳定性。我们无从了解其他云服务的客户情况,但很明确的是,AWS、Azure有大量的国内企事业单位乃至机关在其上有业务和生产环境的部署,这样的应用部署状况是非滥用连接稳定的基石。近期通过function部署自定义协议是connect api发布之后的事,“自定义”本身就是最大的特征,清理已部署应用乃至封禁账户都是有可能发生的。
pre SCFProxy简介
SCFProxy 是一个基于多个云服务商提供的云函数及 API 网关实现 HTTP 代理、SOCKS 代理、反向代理的工具。至2023年,SCFProxy仍保持维护状态,并由原先的python使用 Go 重构项目,整合各个板块,支持腾讯云、阿里云、华为云和AWS。本文以AWS为例,演示使用SCFPoxy构建AWS LAMBDA(Serverless Function)并实现多IP出口(IP池)的方式。
SCFProxy项目的github地址如下:
https://github.com/shimmeris/SCFProxy/
1.配置AWS IAM
配置AWS IAM的目的是创建访问密钥、创建角色,并获取角色ARN和访问密钥,作为Lambda API正常运作的证书使用。基本内容如下:
AccessKeyId:
A******************* (一般为20个字符长度)
AccessKeySecret:
*************************** (一般为40个字符长度)
RoleARN:
arn:aws:iam::$account_id:role/$Role_name
2.下载安装SCFProxy
(1)linux amd64版本scfproxy对应下载地址
https://github.com/shimmeris/SCFProxy/releases/download/v0.2.1/SCFProxy_0.2.1_linux_amd64.zip
(2)下载、解压
#apt install unzip -y cd && curl -sS -L https://github.com/shimmeris/SCFProxy/releases/download/v0.2.1/SCFProxy_0.2.1_linux_amd64.zip -o scfproxy.zip && unzip scfproxy -d ./ && alias scfproxy='~/scfproxy'
3.部署
(1)生成toml配置文件
scfproxy && cd ./.config/scfproxy/
(2)编辑配置文件,将AWS Lambda访问角色id和密钥、ARN填入对应位置
#vim sdk.toml nano sdk.toml
(3)部署云函数
AWS LAMBDA可部署区域代码可参考LAMBDA控制台面板可用区域列表,国际区域与国内区域不通用、相互独立。
华为云Functiongragh可部署区域代码参考:
https://developer.huaweicloud.com/endpoint?FunctionGraph
本次测试将AWS LAMBDA函数应用部署至"加拿大-中部",区域代码为ca-central-1,“亚太地区-首尔”区域,对应代码为ap-northeast-2,“亚太地区-新加坡”区域为ap-southeast-1。SCFProxy -p、-r均支持多参数,-r支持使用通配符。
如使用scfproxy自动生成的目录和配置文件(sdk.toml),可不使用-c参数指定配置文件路径(下同)。
scfproxy deploy socks -p aws -r ca-central-1,ap-northeast-2
4.运行
运行协议参数和部署协议参数保持一致,-l指定vps接受客户端连接的监听端口,-s指定接受云函数部署服务器连接的监听端口。
scfproxy socks -l 3001 -s 3000 -h $vps_ip
各项参数说明搬运如下:
-l socks_port 监听 socks_port,等待用户的 socks5 连接
-s scf_port 监听 scf_port,等待来自云函数的连接
-h address 用于指定云函数回连(反弹shell)的 vps 地址
--auth [user:pass] 用于指定 socks 认证信息,默认无认证
https协议的支持须在http基础上,首次运行后将生成的证书导入系统、追加信任以支持https。
#scfproxy http -l 0.0.0.0:3001 #cp ~/.config/scfproxy/cert/scfproxy.cer /usr/local/share/ca-certificates/scfproxy.crt && update-ca-certificates #scfproxy http -l 0.0.0.0:3001 -k .config/scfproxy/cert/scfproxy.key
完成测试和学习后,不再使用scfproxy LAMBDA云函数,可用如下命令清理:
scfproxy clear socks -p aws -r ca-central-1,ap-northeast-2 #scfproxy clear http -p aws -r ca-central-1,ap-northeast-2 -e && rm -f /usr/local/share/ca-certificates/scfproxy.crt && update-ca-certificates
5.本地客户端
本地客户端可以使用switchyOmega,设置http、https或socks代理ip地址指向vps地址和监听端口。
这种方式不应被滥用,否则很快会出现AWS尚可解锁ChatGPT的区域也会被封禁(Block),甚至取消或限制国内用户的Lambda部署权限/区域。
文章评论
你好 有办法让链接保持吗 我不需要他每次链接IP都会变动 我想每个客户端链接他的时候 IP都保持这 除非我自己重启应用中断这些链接
@梅茶茶 scf不行的 固定不了 需要自己写脚本
SCFproxy 的socks代理,保持不了长时间连接。会经常断流。bug一直没修复。
@nico 很长不更新了 lab可能已经关了 静下来从事安全研究的快绝迹了