结合Atomic Red测试与Falco实现Kubernetes实时威胁检测

本文详细介绍了如何在Kubernetes环境中使用开源工具Falco实时检测Atomic Red Team模拟的攻击测试,涵盖部署步骤、测试场景执行及自定义规则创建,提升云原生安全防护能力。

结合Atomic Red测试与Falco实现Kubernetes实时威胁检测

| Nigel Douglas

作为Project Falco的开发者倡导者,Nigel Douglas在Sysdig负责推动云原生安全中开源检测与响应(D&R)领域的教育。他通过撰写文章、博客和演讲,帮助提高人们对云安全需求变化的认识。

在云原生环境中,应用程序的伸缩速度远快于传统的单体应用架构,因此实时主动识别和响应威胁的能力至关重要。随着更多组织采用云原生架构进行应用交付,需要引入更强大的安全措施。本文探讨了Kubernetes威胁检测的动态领域,探索开源Falco如何在Kubernetes环境中无缝实时检测Atomic Red Team测试。

Atomic Red Team是一个强大的框架,旨在模拟真实世界攻击,为组织提供受控环境以验证其安全措施的有效性。我们通过贡献一个Kubernetes部署清单进一步推进,通过单一命令加速在Kubernetes集群中部署和测试Atomic Red测试,模拟有用的攻击场景以测试现有开源云原生入侵检测系统(如Falco)的响应能力。

我们的旅程从轻松部署Atomic Red到Kubernetes开始,展示在容器化环境中编排安全测试的简单性和效率。部署后,我们调用特定的Atomic Red Team测试,模拟一系列威胁场景。真正的测试在于Falco根据MITRE ATT&CK框架检测这些威胁的能力,这是一个全球认可的将对手技术映射到防御策略的矩阵。

这次探索不仅仅是识别威胁;这是一项协作努力,旨在增强Kubernetes的安全覆盖范围。如果发现Falco检测能力中的任何差距,我们可以深入修改执行的技术并制定自定义规则。这个迭代过程旨在扩展MITRE ATT&CK覆盖范围,将Atomic Red测试与行业最佳的Kubernetes威胁检测和缓解实践对齐。

部署Atomic Red Team

为避免生产环境中的潜在服务中断,我们建议在测试实验室环境或至少Kubernetes的暂存环境中安装Atomic Red。我们有一个逐步视频,用于在Kubernetes中安装Atomic Red:https://www.youtube.com/watch?v=5QjGnHGnxxo

在开始部署之前,请记住创建atomic-red网络命名空间。

1
kubectl create ns atomic-red

将部署一个特权设置为true的单一pod。Atomic Red需要管理员级别的securityContext来执行某些需要提升权限的操作。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: atomicred
  namespace: atomic-red
  labels:
    app: atomicred
spec:
  replicas: 1
  selector:
    matchLabels:
      app: atomicred
  template:
    metadata:
      labels:
        app: atomicred
    spec:
      containers:
      - name: atomicred
        image: issif/atomic-red:latest
        imagePullPolicy: "IfNotPresent"
        command: ["sleep", "3560d"]
        securityContext:
          privileged: true
      nodeSelector:
        kubernetes.io/os: linux
EOF

注意:这将在‘atomic-red‘网络命名空间中创建一个名为‘atomicred‘的pod。

您可以使用以下命令检查安装状态:

1
kubectl get pods -n atomic-red

如果您想从Kubernetes集群中移除Atomic Red项目,只需运行:

1
kubectl delete deployment atomicred -n atomic-red

熟悉Atomic Red测试

部署后,您需要shell到Atomic Red pod中执行以下测试场景。

这可能有点令人困惑,但Atomic Red是考虑到PowerShell开发的,因此以下说明要求用户shell到一个容器中,一旦进入运行的pod,他们必须运行PowerShell来导入和调用各种Atomic测试场景。

一旦熟悉了这个逻辑,您会发现Atomic Red是一个真正简单的安全模拟工具。

1
kubectl exec -it -n atomic-red deploy/atomicred -- bash

如前所述,您需要在Atomic Red pod中运行PowerShell:

1
pwsh

现在,您终于可以加载Atomic Red Team模块:

1
Import-Module "~/AtomicRedTeam/invoke-atomicredteam/Invoke-AtomicRedTeam.psd1" -Force

检查TTP的详细信息:

1
Invoke-AtomicTest T1070.004 -ShowDetails

检查先决条件以确保测试条件正确:

1
Invoke-AtomicTest T1070.004 -GetPreReqs

您可以在下面的屏幕截图中看到,执行这些测试不需要先决条件。因此,我们可以调用批量文件删除测试场景。

移除功能标志以执行测试模拟。

1
Invoke-AtomicTest T1070.004

此测试将尝试删除单个文件或单个目录。当我们安装Falco时,此Atomic测试应默认触发‘Warning bulk data removed from disk‘规则。接下来,我们讨论Falco的安装。

恭喜!现在我们知道Atomic Red如何工作,让我们安装Falco并与其并行运行以证明它实时检测这些测试。我们将需要打开两个终端窗口以查看实时响应检测。

安装和测试Falco

对于本实验室指南,我们可以通过Helm在固定版本上安装Falco,在将规则分离到不同规则源(如‘incubating’、‘sandbox’和‘stable’)之前。我们这样做是为了确保所有Falco规则在我们的实验室场景中可访问。要使用最新版本的Falco,只需从Helm安装脚本中移除‘–version’功能标志。

1
2
3
4
helm install falco falcosecurity/falco --namespace falco \
  --create-namespace \
  --set tty=true \
  --version 3.3.0

就像Atomic Red部署一样,我们需要监控Falco安装的进度。pod在安装过程中会几次改变状态,但应在大约一分钟后全部处于‘RUNNING‘状态。请使用以下命令检查Falco pod的状态变化:

1
kubectl get pods -n falco -w

一旦Falco安装完成,我们可以在第二个终端窗口中使用以下命令跟踪生成的事件。

1
kubectl logs -f --tail=0 -n falco -c falco -l app.kubernetes.io/name=falco

跳回第一个终端窗口并重新运行批量文件删除Atomic测试 – ‘T1070.004‘:

1
Invoke-AtomicTest T1070.004

您将识别检测规则中的某些噪音。例如,所有Atomic测试都在‘Root’用户下运行,因此,我们总是会检测到在root下运行的脚本。要忽略此噪音,让我们改为仅检查我们想要检测的特定Falco规则:

1
kubectl logs -f --tail=0 -n falco -c falco -l app.kubernetes.io/name=falco | grep 'Bulk data has been removed from disk'

万岁!我们看到与Atomic Red测试场景上下文完全匹配的检测。

让我们继续调用下一个Atomic测试。今天有许多Linux测试场景可以测试。

查看官方Atomic Red Team Github项目上的列表。

T1556.003 修改认证过程

在此场景中,Atomic Red生成三个可插拔认证模块(PAM):两个用于Linux和FreeBSD的恶意PAM规则,以及一个用于Linux的恶意PAM模块。这些程序可用于打开和读取敏感文件内容,我们可以同意它们是非信任程序。再次,我们有一个开箱即用的规则用于这些活动:

1
kubectl logs -f --tail=0 -n falco -c falco -l app.kubernetes.io/name=falco | grep 'Sensitive file opened for reading by non-trusted program'

现在,是时候模拟我们的威胁了:

1
Invoke-AtomicTest T1556.003

T1036.005 伪装:匹配合法名称或位置

此测试场景从伪装为当前父目录的目录执行进程。

1
kubectl logs -f --tail=0 -n falco -c falco -l app.kubernetes.io/name=falco | grep 'Executing binary not part of base'

现在,是时候模拟我们的威胁了。

1
Invoke-AtomicTest T1036.005

您可以在左侧终端窗口中看到,终端中有一条回显消息说‘”Hello from the Atomic Red Team.”‘ 命令行中的任何字符串输出也可以在Falco的输出中检测到。

T1070.002 主机上的指标移除

对手可能清除系统日志以隐藏入侵证据。macOS和Linux都通过系统日志跟踪系统或用

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计