开源工具
wechat ·
@极客之家
藏不住了,这个 70 万装机的国产开源神器,这几天彻底火了
未提供
正文
这几天安全圈的漏洞通告就没停过。
先是 PHP,一次修了两个远程代码执行漏洞,9.2 分,不用登录就能打,PHP 5 到 PHP 8 都在影响范围里,安全社区发的通告里直接写了"在野利用已发现"。Java 那边也没消停,同一天追加了一个 9.1 分的紧急警报。
漏洞出来这几天,动得最快的是雷池,一款国产开源软件,10 月 21 号,漏洞细节刚扩散开,他们团队就把这两个 PHP 漏洞的已知利用链和 HTTP 攻击特征拆完了,在自家规则广场发了专项规则。
用户在控制台一键启用就能挂上,官方建议先开观察模式,发现疑似攻击只记录不拦,确认来源没问题再切拦截,不会影响正常业务。社区里已经有人晒出命中截图了,规则启用当天就拦到了十几条。
所以我群里这几天聊得最多的反而不是漏洞本身,好几个人问的都是同一句话,这东西怎么装。
PHP 这次的漏洞细节是在保密期里泄露出去的,官方没办法,只能把补丁提前发出来。补丁出来之前,已经有人拿着利用方法在外面扫了。就算补丁发出来了,从发布到你把服务升完、重启完,中间这段时间网站就是裸奔。
所以这几天群里不少人都在干同一件事,给网站前面加一层 WAF。我也跟着装了雷池,过程记下来了,还没装的人可以看看。
雷池是什么
第一次听说这个名字的,看这段就够了。
雷池是长亭科技做的 Web 应用防火墙,英文名叫 SafeLine。长亭是国内的安全厂商,语义分析这条技术路线最早就是他们搞出来的。WAF 的作用说起来也不复杂,放在网站前面,访问请求先到它这里过一遍,SQL 注入、XSS、命令执行、恶意爬虫这类攻击在半路上就被拦掉了,到不了你的网站。
我装的是社区版。免费,代码全部放在 GitHub 上,在 WAF 这个分类里是热度最高的项目。它跟传统 WAF 最大的不一样在检测方式上,传统做法是拿请求去对已知的漏洞签名,雷池是去看这个请求想干什么,所以就算规则还没来得及更新,新出来的 0day 攻击也有机会拦下来。接入用的是反向代理,等于在网站前面加了个中间层,网站自己的代码一行都不用动。
目前全球 70 多万装机,护着 200 多万个网站,普通用户用社区版就够了,企业有更重的需求可以去看专业版。
环境和安装
我这次的测试环境:一台 2 核 2G 的 Ubuntu 22.04 云服务器,Docker 24,上面跑着一个测试站点。官方说最低 1 核 1G 就能跑。
安装一条命令:
bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)"
命令跑起来就不用管了,依赖它自己装,镜像自己拉,拉完服务自己就起来了。我这台机器前后花了四分多钟,大部分时间都在等镜像下载。装完之后终端里会打出管理后台的地址,是 https://服务器IP:9443,还有一组初始密码。
此处链接、账号、密码要存下
这个密码最好当场复制走,真忘了也有办法,在服务器上跑一句 docker exec safeline-mgt resetadmin 就能重置。打开管理后台,登录后显示这个页面就对了:
部署后的管理端页面
把站点接进来
接入也不麻烦,就是让流量先进雷池,检查完了再转给你真正的服务器。我在控制台里把要防护的站点加进去,填了域名和回源地址,再把 DNS 解析切到这台机器上,流量就走雷池了。
此处添加站点
中间碰到一个端口冲突。我原来的 Nginx 占着 80 和 443,雷池要接管这两个端口,所以我把站点挪到 127.0.0.1:8080,只监听本地,外面全部交给雷池。改完配置检查一遍再重载,前后十来分钟。
应用已处于防护模式
动手打一下试试
测试只在我自己的环境里做。
先试最经典的 SQL 注入。浏览器里访问 ?id=1 AND 1=1,页面直接变成了雷池的拦截提示,换成 ?id=1' OR '1'='1,结果一样。
SQL 注入成功拦截
再试 XSS,?a=alert(1),还是被拦。
XSS拦截成功
然后拿 sqlmap 对着站点跑了一轮,跑完看日志,请求基本全被拦下来了。
攻击日志这个页面我觉得做得不错,每条记录里来源 IP、攻击类型、命中的 payload 都有,事后想复盘很方便。
攻击列表攻击详情
最后拿 nikto 模拟扫描器,我把人机验证和频率限制都打开了,扫描器直接撞在验证码和限速上,没跑出东西。
身份、人机验证
我比较放心的一点是它不靠规则库硬匹配。规则库型的 WAF 短板很直接,规则没跟上,新漏洞就防不住。雷池那套语义分析看的是请求本身想干什么,像这次 PHP 的洞,攻击流量想打进网站,总得带着注入或者命令执行的动作,这些动作它认得出来。
语义分析模块
官方仓库里有一组 33669 个样本的对比测试,雷池平衡模式检出率 71.65%,误报率 0.07%,综合准确率 99.45%。对照组是 ModSecurity 的一级规则,检出率 69.74%,误报率 17.58%。数字是官方仓库里的,测试方法也在仓库里,我没改数。
性能和日常表现
我挂了三天。正常访问感觉不到变慢,官方说检测延迟在毫秒级,我自己的体感差不多。容器加起来的内存占用几百 MB,我这台 2G 的机器没什么压力,这三天业务也没出过问题。
统计报表
用下来怎么样
顺手的地方:免费开源,代码自己能看到;一条命令装完,不用翻几十页文档;控制台是中文的,界面清楚;GitHub 上 issue 回复和更新都挺勤快。
不顺手的地方也有两个。一个是接入要动 DNS 和端口,没碰过运维的人第一次弄估计要折腾半小时。另一个是管理后台的 9443 端口,装完记得在安全组里只放行自己的 IP,官方文档提了一嘴,但容易漏。还有社区版没有数据大屏这类功能,日常够用,想要更细的报表就得看专业版。
写在最后
这周连着两个漏洞,我的实际感受是,光等补丁不够,网站前面得有个东西先挡着。手里有自己的网站、博客或者小产品,又不想裸奔的,可以拿社区版试十几分钟,免费,试错成本低。官网搜"雷池 WAF"就能找到,代码在 GitHub 搜 SafeLine。
版本怎么选,我说下这几天用下来的感受。像我这样挂个人站、博客、小产品的,社区版就够用了,核心的语义分析防护是完整开放的,这次针对 PHP 漏洞的专项规则也没分版本,社区用户一样能用。
但如果是拿它护正式业务,尤其是挂掉了损失比较大的上线产品,我的建议是别省,直接看专业版。专业版给的是商业级的威胁情报库和补充规则包,新漏洞出来跟得更快;高级流量统计和实时大屏也都有,攻击来了实时能看见,不用事后翻日志;自定义拦截页面可以换成自己品牌的样式;真出了问题,有官方 1v1 的售后能找到人。
再往上还有商业版,网页防篡改、等保合规、日志审计、防护报告导出这些都有,适合公司有合规要求、要给客户或监管交差的情况。拿不准就先装社区版,业务跑重了再升,官网可以申请试用。
部署踩坑、攻防实战都可以在群里聊,官方团队也在,我部署时候加了,大家感兴趣的也可以扫码进雷池社区版交流群。
点击下方阅读原文,申请试用的链接