kube-tarian/tarian

GitHub: kube-tarian/tarian

Tarian 是一款 Kubernetes 运行时安全防护工具,通过预注册可信进程和文件签名来检测异常变更,并支持自动销毁受感染 Pod 以阻断威胁扩散。

Stars: 58 | Forks: 15

# 塔里安 通过预注册受信任的进程和受信任的文件签名,保护您在 Kubernetes 上运行的应用程序免受恶意攻击。Tarian 将检测未知进程和已注册文件的变更,然后发送警报并采取自动化行动。将您的 K8s 环境从勒索软件手中拯救出来! 我们希望将其作为一个开源项目来维护,以对抗针对我们喜爱的 Kubernetes 生态系统的攻击。通过持续的贡献,我们可以作为一个社区共同对抗威胁。 [![构建状态](https://img.shields.io/github/workflow/status/kube-tarian/tarian/CI?style=flat)](https://github.com/kube-tarian/tarian/actions) [![Go 报告卡](https://goreportcard.com/badge/github.com/kube-tarian/tarian)](https://goreportcard.com/report/github.com/kube-tarian/tarian) [![codecov](https://codecov.io/gh/kube-tarian/tarian/graph/badge.svg?token=PH8E9ZOVR4)](https://codecov.io/gh/kube-tarian/tarian) **Tarian 是如何工作的?** Tarian 集群代理 运行在 Kubernetes 集群中,检测未知进程和未知的文件变更,将其报告给 Tarian 服务器,并可选择采取行动:删除违规的 Pod。它使用 eBPF 来检测新进程。对于文件变更检测,Tarian 集群代理会在您主应用程序的 Pod 中注入一个边车 容器,该容器将检查配置路径中的文件校验和,并将它们与 Tarian 服务器中注册的校验和进行比较。从开发环境到生产环境,Tarian 都将成为您应用程序 Pod 的一部分,因此您可以在 Tarian 数据库中注册容器中应该发生和运行的内容、要监视的文件签名、可以通知的内容以及检测到变更时要采取的行动(自毁 Pod)。将您的检测机制左移! **如果容器内发生了 Tarian 注册数据库中未包含的未知变更,Tarian 会作何反应?** 如果发生未知变更,Tarian 可以简单地将观察到的分析结果通知您的安全团队。然后,您的安全工程师可以在 Tarian 数据库中注册该变更,无论其是否被视为威胁。此外,根据他们的分析,他们可以配置当该变更再次发生时要采取的行动。 **社区的贡献如何通过 Tarian 帮助对抗威胁?** 任何经您的安全专家分析并标记为威胁的新检测,如果他们愿意,都可以共享到开源 Tarian 社区数据库,包含所有日志、要查找的字符串、观察结果、透明度、要配置的行动……基本上是专家想要警告并与社区共享的任何内容。作为 Tarian 用户,您可以使用该信息并在您环境中使用的 Tarian 应用程序中配置行动。这基本上是一种共享威胁信息及应对措施的机制。这有助于每个使用 Tarian 的人通过共享知识和经验,在各自的 K8s 环境中共同采取行动。 **基于已知威胁,Tarian 会采取什么样的行动?** Tarian 会简单地自毁其运行所在的 Pod。如果恶意软件/病毒扩散到环境的其余部分,嗯,您知道会发生什么。因此,Tarian 的设计初衷是通过销毁 Pod 来尽可能降低风险。新 Pod 的配置将由 K8s 部署负责处理。只有当您指示 Tarian 这样做时,它才会销毁 Pod。如果您不希望发生任何行动,则不必配置或触发任何行动;您可以简单地指示 Tarian 仅通知您。Tarian 基本上会执行您希望执行的操作以降低风险。 **既然已经有了许多可用的安全工具,如 Falco、Kube-Hunter、Kube-Bench、Calico Enterprise Security 以及更多(开源和商业)能够在网络、基础设施和应用层面检测和预防威胁的安全工具,为什么还需要另一个新的安全工具?为什么选择 Tarian?** Tarian 诞生的主要原因是为了作为一个社区共同对抗 Kubernetes 中的威胁。另一个原因是,如果仍然存在某种复杂的攻击,能够穿透您的每一层安全防护,能够到达您的运行时应用程序(远程代码执行)和您的存储卷,并能够扩散以破坏或锁定您的基础设施和数据,那该怎么办?!您想对这种攻击,尤其是演变成勒索软件的攻击做些什么?Tarian 旨在通过采取行动来降低此类风险。我们知道 Tarian 不是终极解决方案,但我们相信它可以帮助降低风险,特别是当社区持续共享知识时。从技术角度来看,Tarian 可以通过销毁受感染的资源来帮助降低风险。 ## 架构图 ![架构图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/cafb4f796a220513.png) ## 需求 - 支持的 Kubernetes 版本(目前为 1.22+) - 内核版本 >= 5.8 - 内核需包含 [BTF](https://www.kernel.org/doc/html/latest/bpf/btf.html) 信息以支持 eBPF CO-RE。 一些主要的 Linux 发行版随附的内核已内置 BTF。如果您的内核未内置 BTF, 您需要构建自定义内核。请参阅 [BPF CO-RE](https://github.com/libbpf/libbpf#bpf-co-re-compile-once--run-everywhere)。 ### 在流行的 Kubernetes 环境/服务上测试: | 环境 | 工作状态 | 备注 | |----------------------------------------------|--------------------|--------------------------------------------------------------------| | Kind v0.14.0 | :heavy_check_mark: | | | Minikube v1.26.0 | :heavy_check_mark: | | | Linode Kubernetes Engine (LKE) 1.22 | :heavy_check_mark: | | | Digital Ocean Kubernetes Engine (DOKS) 1.22 | :heavy_check_mark: | | | Google Kubernetes Engine (GKE) 1.22 | :heavy_check_mark: | | | Amazon Elastic Kubernetes Engine (EKS) | :heavy_minus_sign: | [内核 < 5.8](https://github.com/awslabs/amazon-eks-ami/pull/862) | | Azure Kubernetes Service (AKS) | :heavy_minus_sign: | [内核 < 5.8](https://github.com/Azure/AKS/issues/2883) | ### 准备命名空间 ``` kubectl create namespace tarian-system ``` ### 设置 Dgraph 数据库 您可以使用任何 [Dgraph 安装](https://dgraph.io/docs/deploy/kubernetes/) 选项,只要可以从 tarian 服务器访问即可。 ### 安装 tarian 1. 使用 Helm 安装 tarian ``` helm repo add tarian https://kube-tarian.github.io/helm-charts helm repo update helm upgrade -i tarian-server tarian/tarian-server --devel -n tarian-system --set server.dgraph.address=DGRAPH_ADDRESS:PORT helm upgrade -i tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system ``` 2. 等待所有 Pod 就绪 ``` kubectl wait --for=condition=ready pod --all -n tarian-system ``` 3. 应用 Dgraph schema ``` kubectl exec -ti deploy/tarian-server -n tarian-system -- ./tarian-server dgraph apply-schema ``` ### 使用 tarianctl cli 安装 tarian 从 github 发布页面下载 tarianctl 二进制文件。 运行: ``` tarianctl install ``` 您可以使用以下标志自定义您的安装。 ``` Install Tarian on Kubernetes. Usage: tarianctl install [flags] Flags: --agents-values strings Path to the helm values file for Tarian Cluster Agent and Node agent . --charts string Path to the tarian helm charts directory. --dgraph-values strings Path to the helm values file for DGraph. -h, --help help for install -n, --namespace string Namespace to install Tarian. (default "tarian-system") --nats-values strings Path to the helm values file for Nats. --server-values strings Path to the helm values file for Tarian Server. Global Flags: -k, --kubeconfig string path to the kubeconfig file to use -e, --log-formatter string valid log formatters: json, text(default) (default "text") -l, --log-level string valid log levels: debug, info(default), warn/warning, error, fatal (default "info") -s, --server-address string tarian server address to communicate with (default "localhost:50051") -c, --server-tls-ca-file string ca file that server uses for TLS connection -t, --server-tls-enabled if enabled, it will communicate with the server using TLS -i, --server-tls-insecure-skip-verify if set to true, it will skip server's certificate chain and hostname verification (default true) ``` ## 配置 请参阅 helm chart 值以了解 - [tarian-server](https://github.com/kube-tarian/tarian/blob/main/charts/tarian-server/values.yaml) - [tarian-cluster-agent](https://github.com/kube-tarian/tarian/blob/main/charts/tarian-cluster-agent/values.yaml) ## 云 / 供应商特定配置 ### 私有 GKE 集群 私有 GKE 集群默认创建防火墙规则,仅限制主节点到节点的通信端口为 `443` 和 `10250`。 为了注入 tarian-pod-agent 容器,tarian 使用变更准入 webhook。Webhook 服务器运行在端口 `9443` 上。所以,我们需要 创建一个新的防火墙规则,以允许来自主节点 IP 地址范围的入站流量到达节点上的 TCP 端口 **9443**。 有关更多详细信息,请参阅关于此主题的 GKE 文档:[https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#add_firewall_rules](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#add_firewall_rules)。 ## 用法 ### 使用 tarianctl 控制 tarian-server 1. 从 Github [发布页面](https://github.com/kube-tarian/tarian/releases)下载 2. 解压文件并将 tarianctl 复制到您的 PATH 目录 3. 通过 Ingress 或 port-forward 将 tarian-server 暴露给您的机器。在此示例中,我们将使用 port-forward: ``` kubectl port-forward svc/tarian-server -n tarian-system 41051:80 ``` 4. 使用环境变量配置服务器地址 ``` export TARIAN_SERVER_ADDRESS=localhost:41051 ``` ### 查看违规事件 ``` tarianctl get events ``` ### 添加进程约束 ``` tarianctl add constraint --name nginx --namespace default \ --match-labels run=nginx \ --allowed-processes=pause,tarian-pod-agent,nginx ``` ``` tarianctl get constraints ``` ### 添加文件约束 ``` tarianctl add constraint --name nginx-files --namespace default \ --match-labels run=nginx \ --allowed-file-sha256sums=/usr/share/nginx/html/index.html=38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521 ``` ``` tarianctl get constraints ``` ### 在 Pod 中运行 tarian agent 创建约束后,我们通过添加注解 将 tarian-pod-agent 注入到 Pod 中: ``` metadata: annotations: pod-agent.k8s.tarian.dev/threat-scan: "true" ``` 带有此注解的 Pod 将注入一个额外的容器。tarian-pod-agent 容器将 根据注册的约束持续验证运行时环境。任何违规行为都会被报告,并且可以通过 `tarianctl get events` 访问。 ### 演示:尝试一个违反约束的 Pod ``` kubectl apply -f https://raw.githubusercontent.com/kube-tarian/tarian/main/dev/config/monitored-pod/configmap.yaml kubectl apply -f https://raw.githubusercontent.com/kube-tarian/tarian/main/dev/config/monitored-pod/pod.yaml # 等待其就绪 kubectl wait --for=condition=ready pod nginx # 模拟未知进程运行 kubectl exec -ti nginx -c nginx -- sleep 15 # 您应该能在塔里安中看到它被报告 tarianctl get events ``` ## 告警管理器集成 Tarian 默认随附 Prometheus Alert Manager。如果您想使用另一个告警管理器实例: ``` helm install tarian-server tarian/tarian-server --devel \ --set server.alert.alertManagerAddress=http://alertmanager.monitoring.svc:9093 \ --set alertManager.install=false \ -n tarian-system ``` 要禁用它,您可以将 alertManagerAddress 值设置为空。 ## 故障排除 请参阅 [docs/troubleshooting.md](docs/troubleshooting.md) ## 自动约束注册 当 tarian-pod-agent 以注册模式运行时,它不会将未知进程和文件报告为违规,而是自动将其注册为新约束。这有助于节省手动注册的时间。 要启用约束注册,需要配置 cluster-agent。 ``` helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \ --set clusterAgent.enableAddConstraint=true ``` ``` metadata: annotations: # register both processes and file checksums pod-agent.k8s.tarian.dev/register: "processes,files" # ignore specific paths from automatic registration pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt" ``` 自动约束注册也可以在开发/暂存集群中完成,这样生产环境中的变更就会更少。 ## 其他支持的注解 ``` metadata: annotations: # specify how often tarian-pod-agent should verify file checksum pod-agent.k8s.tarian.dev/file-validation-interval: "1m" ``` ## 使用 TLS 保护 tarian-server 要使用 TLS 保护 tarian-server,请创建一个包含 TLS 证书的密钥。您可以手动创建密钥, 或使用 [Cert Manager](https://cert-manager.io/)。一旦您拥有了密钥,您可以将其名称传递给 helm chart 值: ``` helm upgrade -i tarian-server tarian/tarian-server --devel -n tarian-system \ --set server.tlsSecretName=tarian-server-tls ``` ## 贡献 请参阅 [docs/contributing.md](docs/contributing.md) ## 行为准则 请参阅 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) ## CodeOwners 与维护者名单 请参阅 [MAINTAINERS.md](MAINTAINERS.md) ## 加入我们的 Slack 频道 " tarian " [Kube-Tarian-Slack](https://join.slack.com/t/kube-tarian/shared_invite/zt-118iqu4g6-wopEIyjqD_uy5uXRDChaLA)
标签:AMSI绕过, Burp项目解析, Docker镜像, EVTX分析, EVTX分析, Go 语言, Kubernetes 安全, Python工具, Shift-Left 安全, Sidecar 模式, Web截图, 勒索软件防护, 威胁检测, 子域名突变, 容器安全, 开源安全工具, 异常检测, 日志审计, 模型鲁棒性, 私有化部署, 自动化响应, 自定义请求头, 逆向工程平台, 防御规避, 集群代理