Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
tarian — 基于eBPF的Kubernetes运行时安全代理,可检测未知进程和文件变更,强制执行预注册的约束,并自动删除Pod或发出告警,以缓解勒索软件和其他攻击。 | Kitploit
工具/GitHubGitHub/kube-tarian/tarian
容器安全恶意软件分析云安全DevSecOps威胁情报入侵检测
GitHubkube-tarian/tarian

tarian

基于eBPF的Kubernetes运行时安全代理,可检测未知进程和文件变更,强制执行预注册的约束,并自动删除Pod或发出告警,以缓解勒索软件和其他攻击。

查看仓库
581552年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Tarian

通过预先注册受信任的进程和受信任的文件签名,保护运行在 Kubernetes 上的应用程序免受恶意攻击。Tarian 会检测未知进程和对已注册文件的更改,然后发送告警并采取自动化操作。保护您的 K8s 环境免受勒索软件侵害!

我们希望将此项目作为开源项目维护,以对抗针对我们最喜爱的 Kubernetes 生态系统的攻击。通过持续贡献,我们可以作为社区共同应对威胁。

Build status Go Report Card codecov


Tarian 是如何工作的?

Tarian 集群代理运行在 Kubernetes 集群中,检测未知进程和对文件的未知更改,将其报告给 Tarian 服务器,并可选择采取操作:删除违规的 Pod。它使用 eBPF 检测新进程。对于文件更改检测,Tarian 集群代理会在主应用程序的 Pod 中注入一个 sidecar 容器,该容器会检查配置路径中的文件校验和,并与 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 可以通过销毁受感染的资源来帮助降低风险。

架构图

架构图

要求

  • 支持的 Kubernetes 版本(目前为 1.22+)
  • 内核版本 >= 5.8
  • 包含 BTF 信息的内核,以支持 eBPF CO-RE。 一些主流 Linux 发行版已内置内核 BTF。如果您的内核没有内置 BTF,您需要构建自定义内核。请参阅 BPF CO-RE。

在流行的 Kubernetes 环境/服务上测试:

准备命名空间

root@kitploit:~
kubectl create namespace tarian-system

设置 Dgraph 数据库

您可以使用任何 Dgraph 安装选项,只要能够从 tarian 服务器访问即可。

安装 tarian

  1. 使用 Helm 安装 tarian
root@kitploit:~
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
  1. 等待所有 Pod 就绪
root@kitploit:~
kubectl wait --for=condition=ready pod --all -n tarian-system
  1. 应用 Dgraph 模式
root@kitploit:~
kubectl exec -ti deploy/tarian-server -n tarian-system -- ./tarian-server dgraph apply-schema

使用 tarianctl cli 安装 tarian

从 github 发布页面下载 tarianctl 二进制文件。

运行:

root@kitploit:~
tarianctl install

您可以使用以下标志自定义安装。

root@kitploit:~
在 Kubernetes 上安装 Tarian。

用法:
  tarianctl install [flags]

标志:
      --agents-values strings   指定 Tarian 集群代理和节点代理的 Helm values 文件路径。
      --charts string           指定 Tarian Helm chart 目录路径。
      --dgraph-values strings   指定 DGraph 的 Helm values 文件路径。
  -h, --help                    install 的帮助信息
  -n, --namespace string        安装 Tarian 的命名空间。(默认 "tarian-system")
      --nats-values strings     指定 Nats 的 Helm values 文件路径。
      --server-values strings   指定 Tarian 服务器的 Helm values 文件路径。

全局标志:
  -k, --kubeconfig string                 指定要使用的 kubeconfig 文件路径
  -e, --log-formatter string              有效的日志格式化程序:json, text(默认 "text")
  -l, --log-level string                  有效的日志级别:debug, info(默认), warn/warning, error, fatal(默认 "info")
  -s, --server-address string             要通信的 tarian 服务器地址(默认 "localhost:50051")
  -c, --server-tls-ca-file string         服务器用于 TLS 连接的 CA 证书文件
  -t, --server-tls-enabled                如果启用,将使用 TLS 与服务器通信
  -i, --server-tls-insecure-skip-verify   如果设置为 true,将跳过服务器的证书链和主机名验证(默认 true)

配置

请参阅 Helm chart values:

  • tarian-server
  • tarian-cluster-agent

云/供应商特定配置

私有 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

使用

使用 tarianctl 控制 tarian-server

  1. 从 Github 发布页面 下载
  2. 解压文件并将 tarianctl 复制到您的 PATH 目录中
  3. 通过 Ingress 或端口转发暴露 tarian-server 到您的机器。此处示例使用端口转发:
root@kitploit:~
kubectl port-forward svc/tarian-server -n tarian-system 41051:80
  1. 使用环境变量配置服务器地址
root@kitploit:~
export TARIAN_SERVER_ADDRESS=localhost:41051

查看违规事件

root@kitploit:~
tarianctl get events

添加进程约束

root@kitploit:~
tarianctl add constraint --name nginx --namespace default \
  --match-labels run=nginx \
  --allowed-processes=pause,tarian-pod-agent,nginx 
root@kitploit:~
tarianctl get constraints

添加文件约束

root@kitploit:~
tarianctl add constraint --name nginx-files --namespace default \
  --match-labels run=nginx \
  --allowed-file-sha256sums=/usr/share/nginx/html/index.html=38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521
root@kitploit:~
tarianctl get constraints

在 Pod 中运行 tarian 代理

创建约束后,我们通过添加注解将 tarian-pod-agent 注入到 Pod 中:

root@kitploit:~
metadata:
  annotations:
    pod-agent.k8s.tarian.dev/threat-scan: "true"

带有此注解的 Pod 将注入一个额外的容器(tarian-pod-agent)。tarian-pod-agent 容器将持续根据已注册的约束验证运行时环境。任何违规都将被报告,可以通过 tarianctl get events 访问。

演示:尝试一个违反约束的 Pod

root@kitploit:~
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

# 您应该会在 tarian 中看到报告
tarianctl get events

Alert Manager 集成

Tarian 默认自带 Prometheus Alert Manager。如果您想使用其他 alert manager 实例:

root@kitploit:~
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

自动约束注册

当 tarian-pod-agent 以注册模式运行时,它不会将未知进程和文件报告为违规,而是自动将它们注册为新的约束。这可以节省手动注册的时间。

要启用约束注册,需要配置集群代理。

root@kitploit:~
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
  --set clusterAgent.enableAddConstraint=true
root@kitploit:~
metadata:
  annotations:
    # 同时注册进程和文件校验和
    pod-agent.k8s.tarian.dev/register: "processes,files"
    # 忽略自动注册中的特定路径
    pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"

自动约束注册也可以在开发/预发集群中完成,从而减少生产环境中的变更。

其他支持的注解

root@kitploit:~
metadata:
  annotations:
    # 指定 tarian-pod-agent 验证文件校验和的频率
    pod-agent.k8s.tarian.dev/file-validation-interval: "1m"

使用 TLS 保护 tarian-server

要使用 TLS 保护 tarian-server,请创建一个包含 TLS 证书的 Secret。您可以手动创建 Secret,或使用 Cert Manager。一旦拥有 Secret,您可以将其名称传递给 Helm chart value:

root@kitploit:~
helm upgrade -i tarian-server tarian/tarian-server --devel -n tarian-system \
  --set server.tlsSecretName=tarian-server-tls

贡献

请参阅 docs/contributing.md

行为准则

请参阅 CODE_OF_CONDUCT.md

代码拥有者与维护者列表

请参阅 MAINTAINERS.md

加入我们的 Slack 频道 “tarian”

Kube-Tarian-Slack

下载工具
环境工作状态备注
Kind v0.14.0✔️
Minikube v1.26.0✔️
Linode Kubernetes Engine (LKE) 1.22✔️
Digital Ocean Kubernetes Engine (DOKS) 1.22✔️
Google Kubernetes Engine (GKE) 1.22✔️
Amazon Elastic Kubernetes Engine (EKS)➖内核 < 5.8
Azure Kubernetes Service (AKS)➖内核 < 5.8