使用 Apache APISIX serverless 能力快速拦截 Apache Log4j2 的高危漏洞
近日网络上曝光了 Apache Log4j2 的远程代码执行漏洞。该漏洞在 Apache Log4j2 的开发团队完全修复之前提前曝光,导致在野利用,使用 Log4j2 的 2.x 至 2.14.1 的版本的项目均有被攻击风险。
漏洞利用分析
从该漏洞复现过程我们可以分析出,利用该漏洞的关键步骤是构造恶意的 payload,类似于
在官方发布完全修复版本以及当前环境升至修复版本之前,需要一种临时措施来拦截携带改恶意负载的请求,保护服务不受该漏洞的在野攻击。
Apache APISIX 应对措施
我们可以在 Apache APISIX 上过滤请求负载,用正则匹配恶意的 payload 的关键词,并对其进行拦截。
假设 payload 的关键字为 "xxxxx",可以用 serverless 插件执行自定义拦截脚本,配置示例如下:
注意:上述配置中 serverless-pre-function
相关的配置是自定义脚本部分。其他配置为 Apache APISIX 常规配置,请根据实际情况调整。
上述 functions 字段对应的脚本中主要做了以下事情
提取请求负载(包括 GET 请求的 URL 传参方式和 POST/PUT 请求体传参方式)
正则匹配恶意负载
拦截携带恶意负载的请求
该脚本提供了处理此类恶意负载请求的实现思路,主要是进行捕获攻击特征,比如 jndi
关键字等。大家可以根据自己的需求,对该脚本进行完善或者优化。
验证
拦截在 GET 请求参数中携带恶意负载:
拦截在 POST 请求体 (application/json) 中携带恶意负载:
拦截在 POST 请求体 (text/plain) 中携带恶意负载:
拦截在 POST 请求体 (application/x-www-form-urlencoded,不对请求体进行 URL 编码) 中携带恶意负载:
关于 Apache APISIX
Apache APISIX 是一个动态、实时、高性能的开源 API 网关,提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,包括网关、Kubernetes Ingress 和服务网格等。
Apache APISIX 落地用户(仅部分)
Apache APISIX GitHub:https://github.com/apache/apisix
Apache APISIX 官网:https://apisix.apache.org/
Apache APISIX 文档:https://apisix.apache.org/zh/docs/apisix/getting-started
评论