0x01 概要
现在很多企业单位开始重视零信任网络安全的建设,基于代理流量和外部准入认证,对于外部可见的请求进行安全性的确认。
对于业务来说,在7层网络操作和控制需求集中,基于流量代理网关应用很常见,做转发、限流、认证都是普通的应用场景,包括WAF这些常见的利用反向代理的方式都基于HTTP请求的安全检查,基于流量的复制镜像和串行反向代理,都是将7层协议的数据做了一份“复制”,然后地“复制”的数据进行取关键信息鉴权、输入内容的安全性检查。
0x02 API应用安全
我们用代理网关对应用进行保护,对业务的API进行保护、对请求资源的保护等等, 这种类似需求被集中在网关中实现,在保护别的业务的安全性之前也确保网关自己本身的安全。
确保网关的安全,就要确保构成网关软件的安全, 基于7层HTTP的流量代理,最常见的软件就是Nginx/Openresty。
(引用“一图看懂API安全”配图:李老师)
基于7层构建零信任网络,大概率会使用这种软件服务,软件的业界接受程度,软件生态丰富,软件服务稳定,是构建零信任网络安全建设的基石。
经过这些年的发展,大家对开源解决方案的接受度高,从国人将Lua加入Nginx中使用以后的几年发展,已经在是最初的在原生Nginx上打拼的原始状态,从基于Nginx的基础WEB框架,到各种网关产品,经过几年的发展,开始进入社区发展快速路,可以与开源界更多的相关产品,一样进入人们的视界,同时表现不俗。
0x03 网关
类似网关产品, 要么自己原生动手写直接Nginx Lua,或者基于社区版本,在社区有相对充份的使用和测试的基础上,增加自己的功能。
当确认了使用Nginx、Openresty构建零信任方案的前提下,面临的问题:1.系统的操作用户体验,2系统的本身的安全性。3.系统的速度性能。
3.1 系统的操作用户体验
从简单的命令行到图形化用户体验,本身对于人机交互来说,可操作的伸缩性是很强的。
无论用户体验上是否更好,背后的业务逻辑是相同,用户体验可变。
3.2 系统本身的安全性
如果您的零信任系统也是Nginx Lua写的,是否对代码做过白盒代码审计,是否做过充分的黑盒测试,对网关本身的输入输出做过检查。现在真的有Lua的白盒检查审计工具吗?
3.3 系统的速度性能
如果安全检查系统本身的安全检查消耗时间很长,整体会造成用户体验的下降,各家自己实现的系统性能是有差异的,有的网关之间处理能力相差很大。
(引用“一图看懂API安全”配图:李老师)
以上几种网关系统,有3三种都是基于Openresty Lua实现。
0x04 关键指标:性能
对于安全代理来说,基于正则匹配是最常见,也是最关键的核心应用场景,我们这有一组对比数据。
通过这组数据可以看到不同网关实现方案之间存在的性能差异,企业自己原生写的Nginx Lua,不一定比优化后的开源网关产品性能更快。
性能是需要特定优化的,这种性能优势是根本源设计思想和实现细节的不同。
(引用“一图看懂API安全”配图:李老师)
网关作为零信任场景下的可选构成组件,在实现基础功能的同时,需要强劲的性能保障。用于零信任的安全系统构建,不单纯的只是WAF功能,扩展增加很多功能。
基于一种数模式,可以延伸在各种应用场景下使用。
0x05 网关的自身安全性
网关来保证业务的安全,那谁来保证网关的安全吗?
企业有多种手段来监控企业的安全:网络流量分析、HIDS主机监控代理、蜜罐系统等,通过这些系统之间的互相协助和补充,联合保证网络的安全性。
5.1 网络流量分析
通过流量镜像技术,对流量数据文本日志化后进行日志数据分析,分析网络中的异常联系安全隐患。对IP与IP间的关联,恶意端口访问、网络协议的分析、威胁情报关联等等应用场景。
5.2 HIDS主机监控代理
HIDS同样可以通过netstat来取得网络的通信数据,HIDS占了几乎一半的数据收集比例是网络数据,这些网络数据和网流复制数据分析,有交集或是重合的,HIDS更主动,区别在于HIDS获取这些网络流量不是简单的流量汇聚,需要在大量的服务器上部署Agent,需要覆盖率、对网络流量分析互补充。流量聚合成本和Agent覆盖成本那个高,看具体情况。
5.3 蜜罐系统
通过交换机的端口聚合技术,将网络蜜罐部署到各个网络网段进行流量交互监听。发现攻击事件通过数据的关联进行对攻击者的溯源。
0x06 动态跟踪技术
某些场景下,我们可以通过传统手段进行流量交互数据的取得,查看系统进程在整个存活周期间的各种数据,但成本是有时要进行复杂的处理流程,这种形式下,动态跟踪技术的出现。可以让某些问题的处理更的容易的被解决。
案例A: 找不到是那个进程是通过那个端口发出的请求!
另一个李老师在生产当中, 发现Gearman总是在一个特定时间发出一个请求,但本身Geraman做为一个请求代理,没有提供更多的日志数据让用户去跟踪分析问题,这请求是通过那临时端口发送出去的, 所有端口查看命令 ,SS都不好用后, 李老师最后采用了SystemTap采样查到谁在什么时间通过啥端口发出的这个请求。
01 * * * /bin/bash /root/systemtap/run.sh
probe syscall.open{result=isinstr(filename,".php") if (result == 1){ printf("pid(%d) include:%d filename:%s execname(%s)n",pid(),result, filename,execname()) cmd=sprintf("grep XXXXXX %s -RHn",filename) system(cmd) }}
probe timer.s(300){ exit()}
其实Nginx本身也有安全问题,比如之前的输入参数造成的内存泄漏问题。
location~ /memleak { rewrite^.*$"^@asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdasdf";}
并且SystemTap还能参与分析性能问题,配合热力图。
案例B:判断SSL证书是否过期。
之前发生的一个事件,特斯拉汽车因为域名或证书过期的问题,造成了汽车使用的问题。那我们有没有一种手段,可以实时的监控证书是否过期呢?
实际上社区提供了基于SystemTap技术监控证书是否过期的方法:openssl握手诊断。
https://github.com/openresty/stapxx#openssl-handshake-diagnosis
0x07 总结
对于API安全与零信任安全建设,网关产品作为一个整体的基础设施,对于方案的落地实际有着很好的促进作用,网关提供了很多现实存在的功能,并且经过优化的网关性能,比一般原生系统未优化的性能高很多,不简单只是完成了需求的功能,背后有社区的支持和测试。
传统HIDS和网络分析对于一般性网络安全问题,有很强的追溯源功能,随着更精细的安全细节发现SystemTap动态跟踪,在某些场景下, 可以更高效的取得安全相关的数据凭证。进行更多场景的安全分析。
这篇我们对Nginx、Openresty作为构建7层零信任网络安全的基础部件进行了一些描述,对于SystemTap动态跟踪技术进行了简介,安全业务的发展离不开底层技术支持,持续关注底层的技术,对于安全业务场景的发展提供各种实现上的新可能性。