0xPersist/Avery

GitHub: 0xPersist/Avery

面向威胁猎人的自主APT检测平台,通过多层遥测采集和行为关联分析检测主动规避的高级持续性威胁。

Stars: 0 | Forks: 0

image

# AVERY **用于侦察与产出的自主警戒引擎** *APT 检测基础设施。为威胁猎人构建,而非仪表盘。*
[![平台](https://img.shields.io/badge/AlmaLinux-9.7-0d597f?style=flat-square&logo=redhat&logoColor=white)](https://almalinux.org) [![网络](https://img.shields.io/badge/Tailscale-Zero%20Trust%20Mesh-3b82f6?style=flat-square)](https://tailscale.com) [![状态](https://img.shields.io/badge/status-active%20development-22c55e?style=flat-square)]()

## 概述 AVERY 是一个自建的安全运营平台,旨在检测处于主动规避状态下的高级持续性威胁 (APT)。该平台同时获取网络、主机和被动传感器层的全保真度遥测数据,实时应用行为关联分析,并将威胁情报置于检测层而非下游的富化步骤。所有服务间通信均通过经认证的零信任覆盖网络进行。没有任何服务监听公共接口。 本代码库是构建并当前运行该生产部署的自动化层。 ## 背景 大多数组织检测高级对手的方式问题不在于单个工具的质量,而在于这些工具是如何连接的,或者更准确地说,其架构中嵌入的假设如何限制了它们的发现能力。 围绕签名匹配构建的检测堆栈假设对手的行为方式与先前编录的操作一致。基于阈值的异常检测假设恶意活动在统计上与基线不同,且这种差异既是可测量的,也能与合法变化区分开来。这些假设在面对非复杂威胁时相当有效。但面对一个资源充足且正在进行针对性操作的行为者时,这些假设代表了对手被设计用来超越的底线。 APT 攻击活动的定义在于其刻意的操作安全,这是专门针对防御者能力进行校准的。基础设施的轮换速度快于指标源。TTP(战术、技术和程序)经过选择和修改,以避开已知的行为签名。驻留时间被管理在异常检测系统的噪声底限之内。横向移动的节奏经过调整,以避免产生触发警报的统计方差。对手并不是试图避开被你的工具发现。他们是在试图避开被你的分析师发现,这种区别很重要,因为大多数工具呈现的是它们被设计去寻找的东西,而不是实际存在的东西。 结果是传统检测架构所能发现的内容与一个耐心、资源充足的对手所能隐藏的内容之间存在结构性差距。这种差距不是配置问题。它不能通过添加更多数据源或调整现有规则来解决。它反映了大多数平台实施的检测模型与高级对手实际代表的威胁模型之间的类别差异。 AVERY 围绕一种不同的检测模型构建。其操作假设是对手已经阅读了相关的威胁情报文献,了解常见的检测方法,并已明确决定抑制哪些信号类别。在该假设下,检测需要寻找即使在对手刻意规避、且无法轻易抑制(除非改变其操作的根本性质)的情况下仍然存在的行为模式。这些模式是什么,以及如何识别它们,在此不作记录。 ## 平台架构 四个功能层。每一层的具体实现未公开记录。 ``` +------------------------------------------------------------------+ | TELEMETRY COLLECTION | | | | Network Edge . Host-Based Agents . Passive Sensors | | | | Simultaneous ingestion across all visibility layers. No | | single telemetry source is required for detection coverage. | | Suppressing or losing any individual source degrades | | fidelity but does not eliminate detection capability. | | Telemetry is normalized and timestamped at collection. | +------------------------------+-----------------------------------+ | +------------------------------v-----------------------------------+ | | | BEHAVIORAL CORRELATION ENGINE | | | | Real-time analysis across the full telemetry stream. | | Detections are confidence-weighted and mapped to MITRE | | ATT&CK. The correlation model is tuned for behavioral | | patterns consistent with known APT operational profiles. | | Signatures and static thresholds are not the primary | | detection mechanism. | | | +------------+---------------------------+--------------------------+ | | +------------v-----------+ +----------v-----------+ | | | | | THREAT INTELLIGENCE | | ORCHESTRATION & | | INTEGRATION | | RESPONSE | | | | | | Structured CTI with | | Workflow engine | | full indicator | | with configurable | | lifecycle management.| | autonomy spectrum. | | Correlation runs | | Alert delivery | | against live | | with ATT&CK | | telemetry — not | | context and | | queued alerts. | | confidence | | Campaign tracking | | scoring. Response | | and infrastructure | | from assisted to | | attribution across | | fully automated | | the full indicator | | per environment | | lifecycle. | | and policy. | +------------------------+ +----------------------+ All communication runs over an authenticated zero-trust overlay. No public listeners. No host-network firewall rules protecting inter-service communication — the network path does not exist without explicit overlay provisioning. The attack surface is bounded by mesh membership, not access control list accuracy. ``` ## 检测方法 **关于行为信号与指标** 失陷指标 (IoC) 是遗留产物。它们描述了特定工具或操作在特定时间点留下的痕迹。一个轮换基础设施、修改工具并意识到公开指标生态系统的对手,可以以相对较低的操作成本抑制大多数基于指标的检测。指标变得陈旧的速度快于威胁行为者改变行为的速度。 行为检测在不同的基础上运行。感兴趣的模式不是特定工具的遗留产物,而是操作本身的属性——植入物如何相对于周围流量基线进行通信,被入侵主机的进程树如何随时间演变,由持久访问机制发起的网络会话与合法用户做类似事情时发起的会话有何不同。这些模式更难抑制,因为抑制它们需要改变操作的基本机制,而不仅仅是交换二进制文件或轮换 IP。 实际意义在于,行为检测比指标匹配需要更深的遥测深度和更复杂的关联模型。这种权衡是值得的。指标匹配告诉你曾有某物存在。行为检测告诉你某事正在发生。 **关于遥测覆盖** 单一来源的遥测会产生单一来源的盲点。识别出收集机制并在其可见范围之外操作的对手,实际上在不触发任何警报的情况下使检测能力失效。AVERAGE 同时收集网络元数据、完整会话数据、主机遥测和被动传感器源。每一层提供的特定覆盖范围是互补而非重复的,关联引擎设计为跨所有层同时运行。明确避免依赖任何单一层的检测逻辑。 这对检测质量之外也有操作意义。当一个遥测源不可用时——无论是由于基础设施问题、刻意抑制还是对手行动——检测能力会优雅降级,而不是完全失败。关联模型考虑了数据源缺失的情况,而不是假设所有源始终存在。 **关于情报集成** 在警报触发后对其进行富化的威胁情报,与首先决定检测内容的威胁情报之间存在重大的架构区别。大多数平台实施的是前者。当生成警报时查询情报源,附加额外的上下文,分析师收到更丰富的通知。这对分流和调查很有用。它不会改变检测到了什么或是否被检测到。 AVERY 实施的是后者。情报上下文——当前的威胁行为者基础设施、活动攻击指标、从已报告操作中得出的行为概况——被持续维护,并在做出检测决策之前集成到关联过程中。警报生成时已包含其情报上下文,而非事后附加。这种区别在入侵的早期阶段最为重要,此时信号最弱,事后富化模型的帮助最小。 **关于响应自主性** 安全运营中的自动响应不是一种二元能力。适当的自动化水平取决于环境、检测的置信度、响应操作的可逆性以及组织的操作风险承受能力。适用于隔离测试环境中高置信度检测的响应操作,可能完全不适合生产金融系统中的中等置信度检测。 AVERY 的编排层旨在支持完整的自主性谱系,而不偏向其中的任何特定点。辅助响应和自动响应之间的阈值是一个策略参数,而非架构约束。该平台不假设自动化总是更好,也不假设人工审查总是必要的。它假设正确答案取决于上下文,并为该决策提供上下文。 ## 运营基础设施 生产部署在正常条件下无需人工干预即可持续运行。健康监控层每五分钟检查一次每个服务,跟踪状态转换,并在故障和恢复时发送 Slack 通知,带有冷却逻辑以在长时间中断期间抑制冗余警报。无论冷却状态如何,首次故障事件和每次恢复总是会被通知。 容器资源管理由每分钟的看门狗处理,它评估整个服务堆栈的内存利用率。当利用率达到容器配置限制的 80% 时,看门狗会在任何硬资源上限生效之前触发优雅重启和通知。这种方法避免了容器触及硬限制时发生的突然进程终止,这在有状态服务中可能导致数据丢失并需要人工恢复。选择 80% 阈值是为了提供有意义的提前预警,同时仍允许正常的利用峰值在无需干预的情况下清除。 基于主机的扫描每天以最低可用的 CPU 和 IO 调度优先级运行,使用 `nice -n 19` 和 `ionice -c 3`。扫描范围明确限于根据 CISA 指南与利用后活动具有记录的历史相关性的文件系统位置。容器卷、软件包仓库和高吞吐量数据目录被排除在外。所有匹配事件均结构化为 JSONL 并通过标准警报管道路由。在正常情况下,扫描器不会影响检测堆栈性能。 此代码库中的每个自动化脚本都是幂等的且具备回滚能力。没有任何理论上的东西。一切都在生产部署上运行。 ## 代码库结构 ``` AVERY/ | +-- wazuh/ | +-- setup-syslog-listener.sh # Overlay-scoped syslog ingestion setup | +-- install-rules.sh # Idempotent detection rule installer | +-- integrations/ | +-- custom-slack.py # ATT&CK-enriched structured alert delivery | +-- agents/ | +-- avery-telemetry.sh # Network edge telemetry agent (POSIX sh) | +-- monitor/ | +-- soc_monitor.sh # Stack health monitor with state tracking | +-- shuffle_watchdog.sh # Container memory watchdog | +-- avery_yara_scan.sh # Scheduled host scanner | +-- config/ | +-- .env.example # Required environment variables | +-- docs/ +-- VISION.md # Research direction +-- assets/ +-- avery-banner.svg ``` ## 脚本 ### `wazuh/setup-syslog-listener.sh` 在运行时检测覆盖网络接口和分配的地址。将作用域限定的 `` 块注入检测引擎配置,将 syslog 监听器限制在覆盖网络地址空间内。重启服务并在重启后验证监听器状态。标记字符串防止重新运行时的重复注入。 ``` sudo bash wazuh/setup-syslog-listener.sh ``` ### `wazuh/install-rules.sh` 针对实时 Wazuh 部署安装自定义的 MITRE ATT&CK 映射检测规则。在触碰任何文件之前,生成带有时间戳的回滚脚本。`trap ERR` 在任何失败时自动调用回滚,检测引擎无需人工干预即可恢复到先前状态。幂等性标记防止跨重新运行的重复规则注入。现有配置状态被保留;没有任何内容被覆盖。 ``` sudo bash wazuh/install-rules.sh ``` ### `wazuh/integrations/custom-slack.py` 自定义 Wazuh 集成,用结构化的 Slack Block Kit 消息取代扁平文本的默认通知。每个通知包含:带有视觉编码的严重性级别、规则描述、Agent 身份、UTC 时间戳,以及在触发规则提供时的 MITRE ATT&CK 战术和技术标识符。Webhook URL 和最低严重性阈值由环境变量驱动——代码中无凭证。 ### `agents/avery-telemetry.sh` POSIX sh,除 `nc` 外无其他依赖。为包括 OpenWRT 在内的受限环境设计。在可配置的间隔内通过覆盖网络将结构化的 syslog 遥测数据发送到检测引擎。该 Agent 故意极简——任何可能失败、崩溃或需要在网络边缘设备上维护的东西都已被移除。 ``` scp agents/avery-telemetry.sh YOUR_USER@:YOUR_DEPLOY_PATH/avery-telemetry.sh ssh YOUR_USER@ 'echo "*/5 * * * * YOUR_DEPLOY_PATH/avery-telemetry.sh" >> /etc/crontabs/root' ``` ### `monitor/soc_monitor.sh` 跨完整堆栈的每服务状态机跟踪。五分钟检查间隔。在状态转换和所有恢复事件时触发。冷却逻辑防止在长时间中断期间的通知风暴,同时保留首次事件和所有恢复通知保证。服务列表和冷却间隔由操作员配置。 ### `monitor/shuffle_watchdog.sh` 分钟级容器内存监控器。根据可配置阈值评估利用率。在任何硬 Docker 内存限制生效之前,触发带有 Slack 通知的 `docker restart`。防止在硬限制时发生的突然进程终止,这在有状态服务中会导致数据丢失而非干净恢复。容器列表和阈值由操作员配置。 ### `monitor/avery_yara_scan.sh` 每日计划的主机扫描器,具有 JSONL 输出和匹配时的 Slack 警报。根据 CISA 指南限于高风险文件系统位置。以最低 CPU 和 IO 调度优先级运行。明确排除容器卷、软件包存储和高吞吐量目录。匹配事件通过标准警报管道路由。 ## 配置 此代码库的任何文件中均未出现网络地址、凭证或基础设施标识符。所有操作参数均由环境变量驱动。 ``` cp config/.env.example .env ``` | Variable | Description | |---|---| | `WAZUH_TAILSCALE_IP` | 检测引擎的覆盖地址 | | `WAZUH_SYSLOG_PORT` | UDP syslog 接收端口 | | `SLACK_WEBHOOK_URL` | 通知发送端点 | | `ALERT_LEVEL_THRESHOLD` | 用于通知的最低检测严重性 | | `MAXMIND_DB_PATH` | GeoIP 数据库路径 | | `AGENT_TARGET_IP` | 边缘 Agent 覆盖目标地址 | | `AGENT_TARGET_PORT` | 边缘 Agent 目标端口 | | `AVERY_HOSTNAME` | 用于警报上下文的平台标识符 | | `WAZUH_DASHBOARD_PORT` | 检测引擎仪表盘端口 | | `MISP_PORT` | 威胁情报平台端口 | | `VELOCIRAPTOR_PORT` | DFIR 平台端口 | | `SHUFFLE_PORT` | 编排平台端口 | | `OPENCTI_PORT` | CTI 平台端口 | | `ARKIME_PORT` | 数据包捕获平台端口 | ## 实现说明 **为什么选择 AlmaLinux 9** 与此部署相关的工具生态系统对 RHEL 兼容发行版拥有深厚且维护良好的支持。更实际地说:生产稳定性是检测平台不可协商的要求。在主动操作期间需要维护或离线的平台提供负面的运营价值——检测的缺失与成功的规避无法区分。AlmaLinux 的长期支持承诺和与 RHEL 生态系统的二进制兼容性同时满足了生态系统要求和稳定性要求,毫不妥协。 **为什么所有服务间通信都使用零信任覆盖** 传统的替代方案是将服务绑定到特定的主机网络接口,并通过访问控制列表 (ACL) 强制执行服务间隔离。这种方法在此有两个相关的失效模式。首先,ACL 准确性在操作压力下会下降——规则累积,添加例外,实际执行姿态与预期姿态发生偏移,且方式并不总是立即可见。其次,任何将服务端口暴露给非预期网段的配置错误都会创建原始设计中不存在的攻击面。 覆盖方法消除了这两种失效模式。服务没有主机网络监听器,接口不存在。服务间通信路径由覆盖网格配置定义,这是版本控制且可审计的。安全属性不依赖于 ACL 准确性,因为没有 ACL 会变得不准确。配置错误无法创建非预期的暴露路径,因为暴露路径需要显式配置才能存在。 **为什么选择精细配置注入而非文件重写** 运行中检测平台上的生产配置文件不是静态产物。它们随着时间累积操作状态——针对特定事件模式做出的检测调整决策、根据观察到的流量验证的阈值调整、反映特定环境特征的本地修改。这种状态均未在部署脚本中体现。每次运行时覆盖配置文件的自动化会悄无声息地破坏它,直到下一次该调整决策变得重要时,系统才会显现出这种损失。 本代码库中的所有自动化都通过基于标记的精细编辑注入更改。现有文件状态被保留。每次自动更改的确切范围在版本控制中可见。如果更改已应用,重新运行自动化不会产生副作用。这是一种比文件覆盖自动化更保守的方法,对于意外的配置更改具有直接操作后果的生产检测系统来说,这种保守是适当的。 **为什么选择自定义警报通知集成** 大多数安全工具生成的默认通知格式被设计为可解析,而非可操作。包含正确信息的一大段扁平文本对于在高压下处理大量警报队列的分析师毫无用处。花在解析通知格式上的每一秒,都是未花在分流决策上的一秒。 自定义集成将每个通知格式化为结构化的 Block Kit 消息,具有视觉严重性编码、即时可读的 MITRE ATT&CK 上下文以及为快速人工消费优化的布局。设计目标是将通知接收到分流决策之间的时间减少到可用信息支持的最小值。在持续的压力下,这种减少具有可衡量的操作影响。 ## 研究方向 此代码库中的检测基础设施是一个研究项目的底层基板,其问题未在此记录。 这项工作需要运营规模下的生产保真度遥测。合成环境和模拟对手行为对于正在研究的问题类别是不够的——感兴趣的信号仅在真实操作条件下出现,正在开发的模型需要真实数据来构建和验证。当前的部署提供了这种基板。 研究方向、框架和开放问题记录在 [docs/VISION.md](docs/VISION.md) 中。它是为从业者编写的。先阅读当前代码库再阅读 VISION.md 是预期的顺序。 ## 协作 AVERY 不是一个社区项目,不接受一般性贡献。 如果研究人员或从业者正在积极研究与 [docs/VISION.md]() 中的研究方向直接交叉的问题,并且能为该交叉点带来具体的东西,则会考虑合作。如果这描述了您的情况,请开一个 Issue 并描述您正在研究的问题。对话由此开始。 MIT License
标签:AlmaLinux, APT检测, Beacon Object File, Cutter, DNS 反向解析, DNS 解析, IP 地址批量处理, Tailscale, 主动规避, 全保真遥测, 威胁情报, 子域名变形, 安全运营平台, 实时关联, 开发者工具, 异常检测, 红队对抗, 结构化查询, 网络传感器, 自主防御, 自动化安全, 请求拦截, 逆向工具, 隐蔽攻击, 零信任架构, 高级持续性威胁