乐趣区

关于serverless:使用-Apache-APISIX-serverless-能力快速拦截-Apache-Log4j2-的高危漏洞

近日网络上曝光了 Apache Log4j2 的近程代码执行破绽。该破绽在 Apache Log4j2 的开发团队齐全修复之前提前曝光,导致在朝利用,应用 Log4j2 的 2.x 至 2.14.1 的版本的我的项目均有被攻打危险。

破绽利用剖析

从该破绽复现过程咱们能够剖析出,利用该破绽的关键步骤是结构歹意的 payload,相似于

{xxxxx//attacker.com/a}

在官网公布齐全修复版本以及以后环境升至修复版本之前,须要一种长期措施来拦挡携带改歹意负载的申请,爱护服务不受该破绽的在朝攻打。

Apache APISIX 应答措施

咱们能够在 Apache APISIX 上过滤申请负载,用正则匹配歹意的 payload 的关键词,并对其进行拦挡。

假如 payload 的关键字为 “xxxxx”,能够用 serverless 插件执行自定义拦挡脚本,配置示例如下:

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '{"uri":"/*","plugins":{"serverless-pre-function":{"phase":"rewrite","functions":["return function(conf, ctx) local core = require(\"apisix.core\"); local payload, err = core.request.get_body(); if not payload then local uri_args, err = core.request.get_uri_args(ctx)\n if uri_args then payload = core.json.encode(uri_args, true) end; end; local m = ngx.re.match(payload, \"xxxxx\", \"jo\"); if m then ngx.exit(403) end; end"
            ]
        }
    },
    "upstream": {
        "type": "roundrobin",
        "nodes": {"127.0.0.1:1980": 1}
    }
}'

留神:上述配置中 serverless-pre-function 相干的配置是自定义脚本局部。其余配置为 Apache APISIX 惯例配置,请依据理论状况调整。

上述 functions 字段对应的脚本中次要做了以下事件

  1. 提取申请负载(包含 GET 申请的 URL 传参形式和 POST/PUT 申请体传参形式)
  2. 正则匹配歹意负载
  3. 拦挡携带歹意负载的申请

该脚本提供了解决此类歹意负载申请的实现思路,次要是进行捕捉攻打特色,比方 jndi 关键字等。大家能够依据本人的需要,对该脚本进行欠缺或者优化。

验证

拦挡在 GET 申请参数中携带歹意负载

curl -I 'http://127.0.0.1:9080/hello?foo=${xxxxx//attacker.com/a}'
HTTP/1.1 403 Forbidden
……

拦挡在 POST 申请体 (application/json) 中携带歹意负载

curl -i 'http://127.0.0.1:9080/hello' -H 'Content-Type: application/json' -X POST -d '{"foo":"${xxxxx//attacker.com/a}"}'
HTTP/1.1 403 Forbidden
……

拦挡在 POST 申请体 (text/plain) 中携带歹意负载

curl -i 'http://127.0.0.1:9080/hello' -H 'Content-Type: text/plain' -X POST -d '{xxxxx//attacker.com/a}'
HTTP/1.1 403 Forbidden
……

拦挡在 POST 申请体 (application/x-www-form-urlencoded,不对申请体进行 URL 编码) 中携带歹意负载

curl -i 'http://127.0.0.1:9080/hello' -H 'Content-Type: application/x-www-form-urlencoded' -X POST -d 'foo=${xxxxx//attacker.com/a}'
HTTP/1.1 403 Forbidden
……

对于 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/…
退出移动版