DaemonAgent 是用户态程序,主要是处理各个插桩发送的规则模板
采样数据,根据强大的Rule规则引擎,计算链路威胁度及收集清洗,通过远端下发的配置来控制其他插桩插件。
DaemonAgent 力争适用于生产环境的交互应用安全测试防护&主机及容器威胁风险监控防护于一体
功能蓝图
DaemonAgent 借鉴了开源的强大力量, 基本代码都靠借鉴了以下项目
项目及资料预览:
- https://github.com/bytedance/Elkeid [借鉴了Agent的雏形设计]
- https://github.com/falcosecurity/libs [偏Docker容器运行时 Kernel探针 - 到时候探针借鉴点]
- https://github.com/falcosecurity/falco [偏Docker容器运行规则引擎 Falco RuleEngine规则引擎 - 到时候规则引擎借鉴点]
- https://www.wangan.com/articles/1270 [主机响应防护想借鉴点Edr的设计,入侵事后进行响应防护]
- https://github.com/ComodoSecurity/openedr [偏Windows主机端的插桩]
- https://github.com/ysrc/yulong-hids-archived [偏Linux主机端的插桩 + 入侵检测 - 同程网开源的]
- https://github.com/DGuco/shmqueue [基于共享内存设计的信号量,实现多进程读写, 可以借鉴]
- https://attack.mitre.org/matrices/enterprise/containers/ [ATT&CK 容器矩阵, 容器侧运行时 检测插桩和Rule 覆盖面]
- https://attack.mitre.org/matrices/enterprise/network/ [ATT&CK 网络矩阵, 容器&主机侧-网络方向[CNI&eBPF&NDIS] 检测插桩和Rule 覆盖面]
Collector组件
基础设施
- Nacos注册发现
- gRpc/Http接口开设
自身搜集能力
系统支撑情况
现支持: Linux(CentOS 6及以上、Debian 9及以上、Ubuntu 16及以上)、其他操作系统(suse、银河麒麟、统信uos)
后续支持: Windows(Win10[1507\1511\1703\1709\1803\1809\1903\19h2\20h2\21h1\21h2]、win11[22h2\21h2]、Win7[08R2\SP1]、Server08\Server08R2、Server12、Server16、Server19、Server22)、Macos
系统基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
CPU信息 | 1 | 1 | 0 |
内存信息 | 1 | 1 | 1 |
磁盘加载 | 0 | 1 | 0 |
磁盘使用 | 1 | 1 | 0 |
内核信息 | 1 | 1 | 1 |
发行版信息 | 1 | 1 | 1 |
系统限制 | 0 | 1 | 0 |
系统信息(主机名之类) | 1 | 1 | 1 |
系统控制配置 | 1 | 1 | 0 |
系统负载 | 0 | 1 | 0 |
供应链基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
APT | 0 | 1 | 0 |
yum | 0 | 1 | 0 |
pip | 0 | 0 | 0 |
npm | 0 | 0 | 0 |
软件基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
deb包 | 1 | 1 | 0 |
rpm包 | 1 | 1 | 0 |
emerge包(gentoo) | 0 | 1 | 0 |
python包 | 0 | 1 | 0 |
npm包 | 0 | 0 | 0 |
配置基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
主机列表 | 0 | 1 | 0 |
协议列表 | 0 | 1 | 0 |
服务端口列表 | 0 | 1 | 0 |
ld配置 | 0 | 0 | 0 |
登录配置 | 0 | 0 | 0 |
shell配置 | 0 | 0 | 0 |
fstab配置 | 0 | 0 | 0 |
web配置 | 0 | 0 | 0 |
DB配置 | 0 | 0 | 0 |
MQ配置 | 0 | 0 | 0 |
用户基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
ssh配置 | 0 | 1 | 0 |
用户信息 | 1 | 1 | 0 |
组信息 | 0 | 1 | 0 |
当前登录用户 | 0 | 1 | 0 |
命令历史 | 0 | 1 | 1 |
sudo配置 | 0 | 1 | 0 |
网络基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
网卡信息 | 1 | 1 | 0 |
地址信息 | 1 | 1 | 0 |
ARP信息 | 0 | 1 | 0 |
路由信息 | 1 | 1 | 0 |
DNS信息 | 0 | 1 | 0 |
防火墙信息 | 0 | 1 | 0 |
服务基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
/etc/init.d | 0 | 0 | 0 |
systemd | 0 | 0 | 0 |
crontab | 0 | 1 | 0 |
/etc/xdg/autostart/ | 0 | 0 | 0 |
容器基线
基线能力 | 业务需要 | 能力具备 | 优先级 |
---|---|---|---|
docker信息 | 0 | 1 | 0 |
docker镜像 | 0 | 1 | 0 |
docker卷 | 0 | 1 | 0 |
docker网络 | 0 | 1 | 0 |
docker容器 | 0 | 1 | 0 |
docker进程列表 | 0 | 1 | 1 |
docker容器文件变动 | 0 | 1 | 1 |
自身能力集成
账号
账号名、组名、状态(启用/禁用)、登录方式(key/密码)、最后登录时间、描述
端口
端口号、类型(对内/对外)、协议(tcp/tcp6/udp)、进程(进程名)、进程Id、进程路径、服务(是否有服务)、本地地址、远程地址
进程
进程名、Pid、进程分类(系统/非系统)、状态(僵尸、不可中断睡眠进程、运行、暂停、退出、睡眠)、进程版本(官方软件带版本)、进程路径、进程参数、进程用户、启动时间、父进程名、父进程Pid、父进程用户, 所属容器Id, 所属容器名称
服务
服务名、可执行文件路径、启动类型(手动/自动/禁用/自动延迟)、模块文件路径、状态(启动、停止、暂停)、描述
OsPackage(涛哥去实施)
软件名称、版本、大小、安装路径、安装时间、服务状态(启用/禁用/无服务关联)、漏洞情况、修复意见
内核模块
模块名称、模块描述、模块版本、模块路径、模块大小、被依赖模块数量(顺便展示依赖的模块)
计划任务
任务名称、用户名、执行周期、文件路径、命令行
启动项
启动项名称、用户、启动状态(启用/禁用)、命令行、描述
容器
容器名称、容器Id、镜像名、状态(开始/创建/暂停/运行/停止/删除)、镜像id、运行进程Pid(容器内外Pid)
用量
Node机器节点用量、容器用量
k8s集群业务侧
Pod、Service、Endpoint、Role、ClusterRole、Secrets、ServiceAccount
K8s集群设施侧
Kubelet配置合规、CNI配置情况、Docker配置情况
Scanner组件
基础设施
- Nacos注册发现
- gRpc/Http接口开设
端上检测能力
AV
可疑静态文件
OsPkg
扩展系统软件生态
操作系统 | 支撑版本 | 目标软件包 | 漏洞检测情况 |
---|---|---|---|
Alpine Linux | 2.2 - 2.7, 3.0 - 3.17, edge | Installed by apk | NO |
Wolfi Linux | (n/a) | Installed by apk | NO |
Red Hat Universal Base Image1 | 7, 8, 9 | Installed by yum/rpm | NO |
Red Hat Enterprise Linux | 6, 7, 8 | Installed by yum/rpm | NO |
CentOS | 6, 7, 8 | Installed by yum/rpm | NO |
AlmaLinux | 8 | Installed by yum/rpm | NO |
Rocky Linux | 8 | Installed by yum/rpm | NO |
Oracle Linux | 5, 6, 7, 8 | Installed by yum/rpm | NO |
CBL-Mariner | 1.0, 2.0 | Installed by yum/rpm | NO |
Amazon Linux | 1, 2, 2022 | Installed by yum/rpm | NO |
openSUSE Leap | 42, 15 | Installed by zypper/rpm | NO |
SUSE Enterprise Linux | 11, 12, 15 | Installed by zypper/rpm | NO |
Photon OS | 1.0, 2.0, 3.0, 4.0 | Installed by tdnf/yum/rpm | NO |
Debian GNU/Linux | wheezy, jessie, stretch, buster, bullseye | Installed by apt/apt-get/dpkg | NO |
Ubuntu | All versions supported by Canonical | Installed by apt/apt-get/dpkg | NO |
Distroless2 | Any | Installed by apt/apt-get/dpkg | NO |
LanguagePkg
扩展软件供应链生态
CIS
端上搜集能力
Container/Image
WalkDir/Filesystem
Repository(仓库)
Armor组件
基础设施
- Nacos注册发现
- gRpc/Http接口开设
监控维度
Audit审计
Linux系统层级
事件类型 | 解释 | 业务解析 | 业务优先级 |
---|---|---|---|
ADD_GROUP | 添加用户空间组时触发。 | 0 | 0 |
ADD_USER | 添加用户空间用户帐户时触发。 | 0 | 0 |
ANOM_ABEND | 当进程异常结束时触发(带有可能导致核心转储的信号,如果启用)。 | 0 | 0 |
ANOM_ACCESS_FS | 当文件或目录访问异常结束时触发。 | 0 | 0 |
ANOM_ADD_ACCT | 当用户空间帐户添加异常结束时触发。 | 0 | 0 |
ANOM_AMTU_FAIL | 当检测到抽象机器测试实用程序 (AMTU) 失败时触发。 | 0 | 0 |
ANOM_CRYPTO_FAIL | 当检测到密码系统出现故障时触发。 | 0 | 0 |
ANOM_DEL_ACCT | 当用户空间帐户删除异常结束时触发。 | 0 | 0 |
ANOM_EXEC | 当文件的执行异常结束时触发。 | 0 | 0 |
ANOM_LOGIN_ACCT | 当帐户登录尝试异常结束时触发。 | 0 | 0 |
ANOM_LOGIN_FAILURES | 当达到失败登录尝试的限制时触发。 | 0 | 0 |
ANOM_LOGIN_LOCATION | 当从禁止位置进行登录尝试时触发。 | 0 | 0 |
ANOM_LOGIN_SESSIONS | 当登录尝试达到最大并发会话数时触发。 | 0 | 0 |
ANOM_LOGIN_TIME | 当登录尝试被阻止时触发,例如pam_time. | 0 | 0 |
ANOM_MAX_DAC | 当达到最大自主访问控制 (DAC) 失败次数时触发。 | 0 | 0 |
ANOM_MAX_MAC | 当达到最大强制访问控制 (MAC) 失败次数时触发。 | 0 | 0 |
ANOM_MK_EXEC | 当文件可执行时触发。 | 0 | 0 |
ANOM_MOD_ACCT | 当用户空间账户修改异常结束时触发。 | 0 | 0 |
ANOM_PROMISCUOUS | 当设备启用或禁用混杂模式时触发。 | 0 | 0 |
ANOM_RBAC_FAIL | 当检测到基于角色的访问控制 (RBAC) 自检失败时触发。 | 0 | 0 |
ANOM_RBAC_INTEGRITY_FAIL | 当检测到基于角色的访问控制 (RBAC) 文件完整性测试失败时触发。 | 0 | 0 |
ANOM_ROOT_TRANS | 当用户成为 root 用户时触发。 | 0 | 0 |
AVC | 触发以记录 SELinux 权限检查。 | 0 | 0 |
AVC_PATH | 当发生 SELinux 权限检查时触发以记录dentry和vfsmount配对。 | 0 | 0 |
BPRM_FCAPS | 当用户执行具有文件系统功能的程序时触发。 | 0 | 0 |
CAPSET | 触发以记录基于流程的功能的任何更改。 | 0 | 0 |
CHGRP_ID | 当用户空间组 ID 更改时触发。 | 0 | 0 |
CHUSER_ID | 当用户空间用户 ID 更改时触发。 | 0 | 0 |
CONFIG_CHANGE | 修改审计系统配置时触发。 | 0 | 0 |
CRED_ACQ | 当用户获取用户空间凭证时触发。 | 0 | 0 |
CRED_DISP | 当用户处理用户空间凭据时触发。 | 0 | 0 |
CRED_REFR | 当用户刷新他们的用户空间凭证时触发。 | 0 | 0 |
CRYPTO_FAILURE_USER | 当解密、加密或随机化加密操作失败时触发。 | 0 | 0 |
CRYPTO_KEY_USER | 触发以记录用于加密目的的加密密钥标识符。 | 0 | 0 |
CRYPTO_LOGIN | 当检测到密码官登录尝试时触发。 | 0 | 0 |
CRYPTO_LOGOUT | 当检测到密码官注销尝试时触发。 | 0 | 0 |
CRYPTO_PARAM_CHANGE_USER | 当检测到密码参数发生变化时触发。 | 0 | 0 |
CRYPTO_REPLAY_USER | 当检测到重放攻击时触发。 | 0 | 0 |
CRYPTO_SESSION | 触发以记录 TLS 会话建立期间设置的参数。 | 0 | 0 |
CRYPTO_TEST_USER | 根据 FIPS-140 标准的要求,触发以记录加密测试结果。 | 0 | 0 |
CWD | 触发记录当前工作目录。 | 0 | 0 |
DAC_CHECK | 触发记录 DAC 检查结果。 | 0 | 0 |
DAEMON_ABORT | 当守护进程因错误而停止时触发。 | 0 | 0 |
DAEMON_ACCEPT | auditd当守护进程接受远程连接时触发。 | 0 | 0 |
DAEMON_CLOSE | auditd当守护程序关闭远程连接时触发。 | 0 | 0 |
DAEMON_CONFIG | 当检测到守护程序配置更改时触发。 | 0 | 0 |
DAEMON_END | 当守护进程成功停止时触发。 | 0 | 0 |
DAEMON_RESUME | auditd当守护进程恢复日志记录时触发。 | 0 | 0 |
DAEMON_ROTATE | auditd当守护程序轮换审计日志文件时触发。 | 0 | 0 |
DAEMON_START | auditd守护进程启动时触发。 | 0 | 0 |
DEL_GROUP | 删除用户空间组时触发 | 0 | 0 |
DEL_USER | 删除用户空间用户时触发 | 0 | 0 |
DEV_ALLOC | 分配设备时触发。 | 0 | 0 |
DEV_DEALLOC | 当设备被解除分配时触发。 | 0 | 0 |
EOE | 触发以记录多记录事件的结束。 | 0 | 0 |
EXECVE | 触发以记录execve(2)系统调用的参数。 | 0 | 0 |
FD_PAIR | 触发记录pipe和socketpair系统调用的使用。 | 0 | 0 |
FS_RELABEL | 当检测到文件系统重新标记操作时触发。 | 0 | 0 |
GRP_AUTH | 当使用组密码对用户空间组进行身份验证时触发。 | 0 | 0 |
INTEGRITY_DATA | 触发以记录内核运行的数据完整性验证事件。 | 0 | 0 |
INTEGRITY_HASH | 触发记录内核运行的哈希类型完整性验证事件。 | 0 | 0 |
INTEGRITY_METADATA | 触发以记录内核运行的元数据完整性验证事件。 | 0 | 0 |
INTEGRITY_PCR | 触发以记录平台配置注册 (PCR) 失效消息。 | 0 | 0 |
INTEGRITY_RULE | 触发记录策略规则。 | 0 | 0 |
INTEGRITY_STATUS | 被触发以记录完整性验证的状态。 | 0 | 0 |
IPC | 被触发以记录有关系统调用引用的进程间通信对象的信息。 | 0 | 0 |
IPC_SET_PERM | 触发以记录有关由IPC_SETIPC 对象上的控制操作设置的新值的信息。 | 0 | 0 |
KERNEL | 触发记录审计系统的初始化。 | 0 | 0 |
KERNEL_OTHER | 被触发以记录来自第三方内核模块的信息。 | 0 | 0 |
LABEL_LEVEL_CHANGE | 当对象的级别标签被修改时触发。 | 0 | 0 |
LABEL_OVERRIDE | 当管理员覆盖对象的级别标签时触发。 | 0 | 0 |
LOGIN | 当用户登录访问系统时触发,记录相关登录信息。 | 0 | 0 |
MAC_CIPSOV4_ADD | 当商业互联网协议安全选项 (CIPSO) 用户添加新的解释域 (DOI) 时触发。添加 DOI 是 NetLabel 提供的内核包标记功能的一部分。 | 0 | 0 |
MAC_CIPSOV4_DEL | 当 CIPSO 用户删除现有的 DOI 时触发。添加 DOI 是 NetLabel 提供的内核包标记功能的一部分。 | 0 | 0 |
MAC_CONFIG_CHANGE | 当 SELinux 布尔值更改时触发。 | 0 | 0 |
MAC_IPSEC_EVENT | 当检测到 IPSec 事件或 IPSec 配置更改时触发以记录有关 IPSec 事件的信息。 | 0 | 0 |
MAC_MAP_ADD | 添加新的 Linux 安全模块 (LSM) 域映射时触发。LSM域映射是NetLabel提供的内核包标签功能的一部分。 | 0 | 0 |
MAC_MAP_DEL | 添加现有 LSM 域映射时触发。LSM域映射是NetLabel提供的内核包标签功能的一部分。 | 0 | 0 |
MAC_POLICY_LOAD | 加载 SELinux 策略文件时触发。 | 0 | 0 |
MAC_STATUS | 当 SELinux 模式(强制、许可、关闭)更改时触发。 | 0 | 0 |
MAC_UNLBL_ALLOW | 当使用 NetLabel 提供的内核的数据包标记功能时允许未标记的流量时触发。 | 0 | 0 |
MAC_UNLBL_STCADD | 当使用 NetLabel 提供的内核的数据包标签功能时添加静态标签时触发。 | 0 | 0 |
MAC_UNLBL_STCDEL | 当使用 NetLabel 提供的内核的数据包标记功能时删除静态标签时触发。 | 0 | 0 |
MMAP | mmap(2)触发以记录系统调用的文件描述符和标志。 | 0 | 0 |
MQ_GETSETATTR | 触发记录mq_getattr(3)和mq_setattr(3)消息队列属性。 | 0 | 0 |
MQ_NOTIFY | 触发以记录mq_notify(3)系统调用的参数。 | 0 | 0 |
MQ_OPEN | 触发以记录mq_open(3)系统调用的参数。 | 0 | 0 |
MQ_SENDRECV | 触发以记录mq_send(3)和mq_receive(3)系统调用的参数。 | 0 | 0 |
NETFILTER_CFG | 当检测到 Netfilter 链修改时触发。 | 0 | 0 |
NETFILTER_PKT | 触发以记录穿越 Netfilter 链的数据包。 | 0 | 0 |
OBJ_PID | 被触发以记录有关信号发送到的进程的信息。 | 0 | 0 |
PATH | 触发记录文件名路径信息。 | 0 | 0 |
RESP_ACCT_LOCK | 当用户帐户被锁定时触发。 | 0 | 0 |
RESP_ACCT_LOCK_TIMED | 当用户帐户被锁定指定时间段时触发。 | 0 | 0 |
RESP_ACCT_REMOTE | 当用户帐户被远程会话锁定时触发。 | 0 | 0 |
RESP_ACCT_UNLOCK_TIMED | 在配置的时间段后解锁用户帐户时触发。 | 0 | 0 |
RESP_ALERT | 发送警报电子邮件时触发。 | 0 | 0 |
RESP_ANOMALY | 当未对异常采取行动时触发。 | 0 | 0 |
RESP_EXEC | 当入侵检测程序响应源自程序执行的威胁时触发。 | 0 | 0 |
RESP_HALT | 系统关闭时触发。 | 0 | 0 |
RESP_KILL_PROC | 当进程终止时触发。 | 0 | 0 |
RESP_SEBOOL | 设置 SELinux 布尔值时触发。 | 0 | 0 |
RESP_SINGLE | 当系统进入单用户模式时触发。 | 0 | 0 |
RESP_TERM_ACCESS | 会话终止时触发。 | 0 | 0 |
RESP_TERM_LOCK | 当终端被锁定时触发。 | 0 | 0 |
ROLE_ASSIGN | 当管理员将用户分配给 SELinux 角色时触发。 | 0 | 0 |
ROLE_MODIFY | 当管理员修改 SELinux 角色时触发。 | 0 | 0 |
ROLE_REMOVE | 当管理员从 SELinux 角色中删除用户时触发。 | 0 | 0 |
SELINUX_ERR | 当检测到内部 SELinux 错误时触发。 | 0 | 0 |
SERVICE_START | 服务启动时触发。 | 0 | 0 |
SERVICE_STOP | 当服务停止时触发。 | 0 | 0 |
SOCKADDR | 触发记录套接字地址。 | 0 | 0 |
SOCKETCALL | 触发以记录sys_socketcall系统调用的参数(用于多路复用许多与套接字相关的系统调用)。 | 0 | 0 |
SYSCALL | 触发以记录对内核的系统调用。 | 0 | 0 |
SYSTEM_BOOT | 系统启动时触发。 | 0 | 0 |
SYSTEM_RUNLEVEL | 当系统的运行级别更改时触发。 | 0 | 0 |
SYSTEM_SHUTDOWN | 系统关闭时触发。 | 0 | 0 |
TEST | 触发以记录测试消息的成功值。 | 0 | 0 |
TRUSTED_APP | 这种类型的记录可以被需要审计的第三方应用程序使用。 | 0 | 0 |
TTY | 当 TTY 输入发送到管理进程时触发。 | 0 | 0 |
USER_ACCT | 修改用户空间用户帐户时触发。 | 0 | 0 |
USER_AUTH | 当检测到用户空间身份验证尝试时触发。 | 0 | 0 |
USER_AVC | 当生成用户空间 AVC 消息时触发。 | 0 | 0 |
USER_CHAUTHTOK | 修改用户帐户属性时触发。 | 0 | 0 |
USER_CMD | 当执行用户空间 shell 命令时触发。 | 0 | 0 |
USER_END | 当用户空间会话终止时触发。 | 0 | 0 |
USER_ERR | 当检测到用户帐户状态错误时触发。 | 0 | 0 |
USER_LABELED_EXPORT | 当使用 SELinux 标签导出对象时触发。 | 0 | 0 |
USER_LOGIN | 当用户登录时触发。 | 0 | 0 |
USER_LOGOUT | 当用户注销时触发。 | 0 | 0 |
USER_MAC_POLICY_LOAD | 当用户空间守护进程加载 SELinux 策略时触发。 | 0 | 0 |
USER_MGMT | 触发记录用户空间管理数据。 | 0 | 0 |
USER_ROLE_CHANGE | 当用户的 SELinux 角色更改时触发。 | 0 | 0 |
USER_SELINUX_ERR | 当检测到用户空间 SELinux 错误时触发。 | 0 | 0 |
USER_START | 当用户空间会话开始时触发。 | 0 | 0 |
USER_TTY | 当从用户空间向管理进程发送有关 TTY 输入的解释性消息时触发。 | 0 | 0 |
USER_UNLABELED_EXPORT | 在没有 SELinux 标签的情况下导出对象时触发。 | 0 | 0 |
USYS_CONFIG | 当检测到用户空间系统配置更改时触发。 | 0 | 0 |
VIRT_CONTROL | 当虚拟机启动、暂停或停止时触发。 | 0 | 0 |
VIRT_MACHINE_ID | 被触发以记录标签与虚拟机的绑定。 | 0 | 0 |
VIRT_RESOURCE | 被触发以记录虚拟机的资源分配。 | 0 | 0 |
K8s集群层级
完成K8s的事件源源与字段提取功能
名称 | 类型 | 参数 | 描述 |
---|---|---|---|
ka.auditid | string | None | 审计事件的唯一标识 |
ka.stage | string | None | 请求的阶段(例如 RequestReceived、ResponseComplete 等) |
ka.auth.decision | string | None | 授权决定 |
ka.auth.reason | string | None | 授权理由 |
ka.user.name | string | None | 执行请求的用户名 |
ka.user.groups | string (list) | None | 用户所属的组 |
ka.impuser.name | string | None | 模拟的用户名 |
ka.verb | string | None | 正在执行的动作 |
ka.uri | string | None | 从客户端发送到服务器的请求 URI |
ka.uri.param | string | Key, Required | uri 中给定查询参数的值(例如,当 uri=/foo?key=val 时,ka.uri.param[key] 为 val)。 |
ka.target.name | string | None | 目标对象名称 |
ka.target.namespace | string | None | 目标对象命名空间 |
ka.target.resource | string | None | 目标对象资源 |
ka.target.subresource | string | None | 目标对象子资源 |
ka.req.binding.subjects | string (list) | None | 当请求对象引用集群角色绑定时,绑定链接的主题(例如帐户/用户) |
ka.req.binding.role | string | None | 当请求对象引用集群角色绑定时,角色被绑定链接 |
ka.req.binding.subject.has_name | string | Key, Required | 已弃用,始终返回“N/A”。仅为向后兼容而提供 |
ka.req.configmap.name | string | None | 如果请求对象引用 configmap,则 configmap 名称 |
ka.req.configmap.obj | string | None | 如果请求对象引用一个 configmap,则整个 configmap 对象 |
ka.req.pod.containers.image | string (list) | Index | 当请求对象引用 pod 时,容器的Image。 |
ka.req.container.image | string | None | 由 ka.req.pod.containers.image 弃用。仅返回第一个容器的Image |
ka.req.pod.containers.image.repository | string (list) | Index | 与 req.container.image 相同,但只有存储库部分(例如 falcosecurity/falco)。 |
ka.req.container.image.repository | string | None | 由 ka.req.pod.containers.image.repository 弃用。仅返回第一个容器的存储库 |
ka.req.pod.host_ipc | string | None | 当请求对象引用 pod 时,hostIPC 标志的值。 |
ka.req.pod.host_network | string | None | 当请求对象引用 pod 时,hostNetwork 标志的值。 |
ka.req.container.host_network | string | None | ka.req.pod.host_network 的弃用别名 |
ka.req.pod.host_pid | string | None | 当请求对象引用 pod 时,hostPID 标志的值。 |
ka.req.pod.containers.host_port | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 hostPort 值。 |
ka.req.pod.containers.privileged | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的特权标志的值。 |
ka.req.container.privileged | string | None | 由 ka.req.pod.containers.privileged 弃用。如果任何容器具有 privileged=true 则返回 true |
ka.req.pod.containers.allow_privilege_escalation | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 allowPrivilegeEscalation 标志的值 |
ka.req.pod.containers.read_only_fs | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 readOnlyRootFilesystem 标志的值 |
ka.req.pod.run_as_user | string | None | 当请求对象引用 pod 时,在 pod 的安全上下文中指定的 runAsUser uid。请参阅 ….containers.run_as_user 了解各个容器的 runAsUser |
ka.req.pod.containers.run_as_user | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 runAsUser uid |
ka.req.pod.containers.eff_run_as_user | string (list) | Index | 当请求对象引用 pod 时,将用于所有容器的初始 uid。这结合了来自 pod 和容器安全上下文的信息,如果未指定 uid,则使用 0 |
ka.req.pod.run_as_group | string | None | 当请求对象引用 pod 时,在 pod 的安全上下文中指定的 runAsGroup gid。请参阅 ….containers.run_as_group 了解各个容器的 runAsGroup |
ka.req.pod.containers.run_as_group | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 runAsGroup gid |
ka.req.pod.containers.eff_run_as_group | string (list) | Index | 当请求对象引用 pod 时,将用于所有容器的初始 gid。这结合了来自 pod 和容器安全上下文的信息,如果没有指定 gid,则使用 0 |
ka.req.pod.containers.proc_mount | string (list) | Index | 当请求对象引用一个 pod 时,所有容器的 procMount 类型 |
ka.req.role.rules | string (list) | None | 当请求对象引用角色/集群角色时,与角色关联的规则 |
ka.req.role.rules.apiGroups | string (list) | Index | 当请求对象引用角色/集群角色时,与角色规则关联的 api 组 |
ka.req.role.rules.nonResourceURLs | string (list) | Index | 当请求对象引用角色/集群角色时,与角色规则关联的非资源 url |
ka.req.role.rules.verbs | string (list) | Index | 当请求对象引用角色/集群角色时,与角色规则关联的动词 |
ka.req.role.rules.resources | string (list) | Index | 当请求对象引用角色/集群角色时,与角色规则关联的资源 |
ka.req.pod.fs_group | string | None | 当请求对象引用 pod 时,安全上下文指定的 fsGroup gid。 |
ka.req.pod.supplemental_groups | string (list) | None | 当请求对象引用 pod 时,由安全上下文指定的 supplementalGroup gid。 |
ka.req.pod.containers.add_capabilities | string (list) | Index | 当请求对象引用 pod 时,运行容器时添加的所有功能。 |
ka.req.service.type | string | None | 当请求对象引用服务时,服务类型 |
ka.req.service.ports | string (list) | Index | 当请求对象引用服务时,服务的端口 |
ka.req.pod.volumes.hostpath | string (list) | Index | 当请求对象引用一个 pod 时,为所有卷指定的所有 hostPath 路径 |
ka.req.volume.hostpath | string | Key, Required | 由 ka.req.pod.volumes.hostpath 弃用。如果提供的(主机)路径前缀被任何卷使用,则返回 true |
ka.req.pod.volumes.flexvolume_driver | string (list) | Index | 当请求对象引用一个 pod 时,为所有卷指定所有 flexvolume 驱动程序 |
ka.req.pod.volumes.volume_type | string (list) | Index | 当请求对象引用一个 pod 时,所有卷的所有卷类型 |
ka.resp.name | string | None | 响应对象名称 |
ka.response.code | string | None | 响应码 |
ka.response.reason | string | None | 响应原因(通常仅在失败时出现) |
ka.useragent | string | None | 向 apiserver 发出请求的客户端的用户代理 |
ka.sourceips | string (list) | Index | 向 apiserver 发出请求的客户端的 IP 地址 |
联动业务场景-事件监控
云工作负载维度
进程维度
谁启动进程:进程树,检测进程隐藏,so注入,提权行为, 监控进程启动
通过Audit监控进程启动及行为, 联动Collector插件进行进程树分析
某个进程退出:监控进程异常退出
通过Audit监控进程异常退出
哪个进程插入内核模块:检测rootkit/bootkit
通过Audit监控Syscall过滤loadmodule操作
哪个进程操作某个文件:检测恶意篡改,痕迹隐藏,恶意授权
通过Audit监控Syscall是否有篡改文件,Scanner检测静态威胁文件
哪个进程启动socket:检测高危端口和外连行为
通过Collector搜集资产态势感知是否现有高危端口外连, 通过Audit审计当前是否有高危端口外连创建
哪个进程操作某个进程:检测动态注入
通过Audit审计当前是否有shellcode注入及远程线程启动操作
是否恶意挖矿
Scanner的ClamAV组件会匹配静态程序的同时Collector组件搜集用量是否有恶意挖矿程序
云原生集群维度
创建了Deployment【常规监控】、删除了Deployment【常规监控】、创建了Service【常规监控】、删除了Service【常规监控】、创建了ConfigMap【常规监控】、删除了ConfigMap【常规监控】
忽略不计
……省略常规监控
禁止非审计k8s用户提交的请求
ka.user.name 隶属于 “minikube”, “minikube-user”, “kubelet”, “kops”, “admin”, “kube”, “kube-proxy”, “kube-apiserver-healthcheck”,”kubernetes-admin”,vertical_pod_autoscaler_users,cluster-autoscaler,”system:addon-manager”,”cloud-controller-manager”,”system:kube-controller-manager”
检测尝试使用主机网络启动 pod
检测当前stages已Complete 且 ka.req.pod.host_network存在网络
启动镜像仓库之外的Pod
检测ka.req.pod.containers.image.repository 是否是当前公司集群的百分之80%镜像前缀
检测是否创建了主机Pid的Pod
检测当前stages已Complete 且 ka.req.pod.host_pid 存在Pid
检测创建/修改 Configmap中包含私有凭证
通过Collector搜集到的secret + 固定list字符串匹配,access_key、password、passphrase
检测有匿名的用户发出请求
ka.user.name=system:anonymous 并且 ka.auth.decision=”allow”
检测有 Attach/Exec Pod行为
ka.target.subresource存在exec,attach行为列别 且 当前Pod还未放置忽略Attach/Exec列表
检测有临时容器创建
ka.target.subresource 存在 ephemeralcontainers
创建了写入权限的 ClusterRole
ka.req.role.rules.verbs 存在 (create, update, patch, delete, deletecollection)
创建特权容器Pod
ka.req.pod.containers.privileged 为true
有异常挂载
ka.req.pod.volumes.hostpath 存在以下挂在位置 (/proc, /var/run/docker.sock, /, /etc, /root, /var/run/crio/crio.sock, /run/containerd/containerd, /home/admin, /var/lib/kubelet, /var/lib/kubelet/pki, /etc/kubernetes, /etc/kubernetes/manifests)
恶意镜像匹配[恶意脚本、挖矿程序]
ka.req.pod.containers.image 当Audit审计组件拿到镜像, 联动Scanner扫描器查看当前镜像是否是恶意脚本或挖矿程序
国内查看评论需要代理~