本仓库包含了重现 log4j 漏洞所需的 docker 和 k8s YAML 配置文件(详见下方)。
关注 这篇博客 来了解这一切是如何串联起来的。
如果你需要定制 Docker 镜像:
cd <Git-Repo>/web-server
make build push
cd <Git-Repo>/marshalsec
make build push
cd <Git-Repo>/attack-server
make build push
在推送之前,请确保将 DockerHub 更新为你的用户 ID。
对于 POC,你不需要定制 Docker 镜像。
你可以将 k8s 文件夹下的 YAML 文件部署到任何 Kubernetes 集群。
cd <Git-Repo>/k8s
kubectl create -f .
这将在集群上部署 3 个 Pod,每个代表一个“角色”,各自扮演其部分,帮助我们理解 log4j 漏洞的工作原理。
除了这里包含的 YAML 文件外,你还需要在 Kubernetes 集群上部署一个 Ingress,以便从公共端点测试漏洞 Web 应用。
以下是一个适用于 Nginx-Ingress 的示例。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: log4j-ingress
labels:
app: log4j
env: dev
namespace: log4j
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
#nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- <YOUR-DOMAIN-NAME-HERE>
#secretName: tls-java-secret
rules:
- host: <YOUR-DOMAIN-NAME-HERE>
http:
paths:
- path: /
backend:
serviceName: log4j-webserver
servicePort: 8080