尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OneUptime 威胁情报(STIX/TAXII)接入实战:Feed 订阅、指标轮询与事件匹配全解析

OneUptime 威胁情报(STIX/TAXII)接入实战:Feed 订阅、指标轮询与事件匹配全解析 可观测性后端运维前端云原生微服务AI Agent【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址https://gitcode.com/GitHub_Trending/on/oneuptime点击查看免费下载本指南以 OneUptime 的Threat Intelligence威胁情报功能为主线系统讲解如何通过标准协议TAXII 2.1传输与STIX 2.1指标对象订阅外部威胁情报源MISP、OpenCTI、OpenTAXII 或商业 TAXII 服务并利用其中的 IOC 指标对安全事件进行摄取时富化与定时匹配最终驱动告警、事件Incident与安全监控。读完本文你将掌握 OneUptime 中威胁情报 Feed 的完整生命周期——从创建订阅、理解轮询语义到掌握 STIX 模式支持边界、指标有效性窗口再到基于匹配结果构建 Sigma 规则与监控器。一、Threat Intelligence 在 OneUptime 中的定位与数据流OneUptime 的威胁情报功能属于其 SIEM安全信息与事件管理能力的一部分它把你订阅的威胁情报源中的indicator指标对象与流入平台的安全事件进行关联从而识别出与已知恶意 IP、域名、URL、邮箱或文件哈希相关的活动。整体数据流分为四条互相衔接的链路订阅通过Security Events → Threat Intel → Create页面登记一个 TAXII 2.1 集合Collection配置认证、轮询间隔与置信度门槛。对应的数据模型是 ThreatIntelFeedREST 端点GET/POST /threat-intel-feed由CrudApiEndpoint(new Route(/threat-intel-feed))声明。轮询与解析后台 Workers 按pollIntervalInMinutes周期性抓取集合中的 STIXindicator对象解析成规范化的 IOC 行写入 ClickHouse 表 ThreatIntelIndicator。摄取时富化新安全事件入库前先与已知指标比对命中则在事件上打上threat.*扁平属性见 ThreatIntelEnricher。定时匹配匹配器每分钟将各 Feed 的有效指标与最近窗口内的安全事件关联产出 Threat Intel 发现Finding、去重告警以及可选的 Incident见 ThreatIntelMatcher。从权限模型看Threat Intel 属于安全层级而非遥测层级创建、读取、更新权限分别为SecurityAdmin/SecurityMember/SecurityViewer等见ThreatIntelFeed.ts中的createPermissions/readPermissions/updatePermissions并支持CreateProjectThreatIntelFeed、ReadProjectThreatIntelFeed等细粒度权限位。二、订阅一个威胁情报源字段与认证创建 Feed 的核心表单字段如下字段含义TAXII API Root URLTAXII 2.1 API 根地址例如https://taxii.example.com/api1/。集合Collection在该根地址之下寻址。Collection ID要轮询的 TAXII 集合 ID该集合中包含需要提取的indicator对象。API Token / Basic Auth可选。为需要认证的集合提供 Bearer Token 或 Basic 用户名/密码匿名集合留空即可。Poll Interval (Minutes)每隔多少分钟抓取一次新指标。必须为整数分钟范围11440默认60。Minimum Confidence丢弃 STIXconfidence低于该值的指标0100。0表示接收全部不带置信度评分的指标始终通过因此设置门槛不会让未评分的 Feed 静默变空。这些字段在数据模型中均有对应列apiRootUrl、collectionId、apiToken、basicAuthUsername、basicAuthPassword、pollIntervalInMinutes、minimumConfidence并附带isEnabled是否启用轮询与匹配默认true、shouldCreateAlert是否打开告警默认true、shouldWriteDetectionFinding是否写回发现事件默认true、shouldCreateIncident是否创建 Incident默认false以及可选的alertSeverityId/incidentSeverityId覆盖项。几个值得注意的实现细节凭据加密且不可回读apiToken与basicAuthPassword两列声明为encrypted: true且读取权限为空数组read: []意味着 API 永远不会把这些字段返回给客户端。需要更换凭据时使用该 Feed 行的Update Credentials操作进行轮换。参数边界由常量统一约束pollIntervalInMinutes的合法范围1–1440与默认值60、minimumConfidence的范围0–100在 ThreatIntelConstants.ts 中集中定义服务端校验器、轮询器回退值与前端表单共用同一来源避免三处范围漂移。认证支持面支持匿名anonymous、Bearer Token 与 HTTP Basic 三种认证方式需要双向 TLSmTLS客户端证书的源如 CISA AIS不在支持范围内。MITRE ATTCK 公共 TAXII 服务器注意它承载的是 ATTCK 知识库攻击模式、组织而非 IOC 指标订阅它只会得到一个空 Feed。不捆绑任何 Feed 内容集合需要自行提供正如 Sigma 规则需要自行编写一样。三、轮询机制光标、分页与 Last Poll Summary轮询器Poller在 Workers 中以配置的间隔运行其增量同步与故障可见性设计如下User-Agent 标识轮询请求以User-Agent: OneUptime/version (https://oneuptime.com)自报家门。若提供方 WAF 按未知 HTTP 库 UA拦截许多 WAF 的默认规则会在请求到达 TAXII API 之前直接返回403需要将该字符串加入白名单。added_after光标每个 Feed 以服务器提供的added_after时间戳对应响应头X-TAXII-Date-Added-Last记录已消费位置字段cursor即已摄取的最新 TAXII added_after 时间ISO 字符串。首次同步会从头拉取。分页与节流单次轮询最多抓取十页一次大规模初始同步会在连续的轮询周期中推进周期之间相隔一个pollIntervalInMinutes。Feed 行上的Last Poll Summary会显示同步进度。加速排空如果想快速排空一个大型集合可把轮询间隔临时调短最低 1 分钟直到同步追上为止。断点续传若服务器不发送X-TAXII-Date-Added-Last头导致轮询中途停在分页中段nextPageToken字段会保存续传令牌TAXII 的 next 令牌是不透明字符串某些服务器会把整个查询状态编码进去因此该列使用无界文本类型VeryLongText一旦集合排空或光标前进该令牌即被清空。可观测性字段lastPolledAt上次轮询时间、lastPollSummary最近一次成功轮询的结果抓取对象数、摄入指标数、跳过的未支持模式数、lastError最近一次轮询错误下次成功时清除。lastError使用无界文本类型因为 TAXII 服务器失败会回显最长 500 字符的响应体varchar(500)会溢出。四、接收哪些指标STIX 模式的支持边界并非所有 STIX 指标都会入库。系统只接收STIXindicator对象中模式为简单 IOC 相等比较的表达式例如[ipv4-addr:value 198.51.100.7] [domain-name:value evil.example OR domain-name:value evil2.example] [file:hashes.SHA-256 aa...ff] OR [url:value http://evil.example/x]支持的 observable 路径可单独出现也可用OR组合包括跨多个[...]观察表达式ipv4-addr:valueipv6-addr:valuedomain-name:valueurl:valueemail-addr:valuefile:hashes哈希算法限定为SHA-256、SHA-1、MD5这些路径对应常量文件中的规范化指标类型枚举 ThreatIntelIndicatorTypeipv4-addr、ipv6-addr、domain-name、url、email-addr、file-hash-sha256、file-hash-sha1、file-hash-md5。该枚举值既是ThreatIntelIndicator.indicatorType的存储值也会被写入threat.indicator_type属性属于对外契约改名必须走数据迁移。支持范围之外的模式会被刻意整段拒绝并在 Last Poll Summary 中计为不支持的 pattern。被拒绝的类型包括AND、FOLLOWEDBY、时间约束、取反NOT、LIKE/MATCHES以及其他对象路径。文档特别强调了一个危险案例对AND模式做半翻译会造成远多于作者本意的匹配对检测型 Feed 而言风险极高因此宁可整段丢弃也不做有损近似。每个受支持的 pattern 会按 IOC 值拆成一行指标行上携带 STIX 标识、置信度、标签与有效性窗口。五、指标生命周期valid_from、valid_until 与版本化指标的生效与失效由 STIX 对象上的时间字段控制valid_from/valid_until界定匹配区间。不带valid_until的指标自valid_from起默认有效365 天常量THREAT_INTEL_DEFAULT_VALID_DAYS 365见 ThreatIntelConstants.ts。该窗口锚定在对象自身的valid_from上重复轮询不会延长它——因为added_after光标会让未变化的对象不再被抓取更新过的对象则保留其valid_from只有生产者把valid_from前移或设置了valid_until才会改变过期时间。摄入时已过窗口的对象会被跳过。过期在查询时强制执行每次匹配与检索都会应用过期条件过期行不会参与匹配。撤销与更新是新版本revoked: true撤销、过期更新valid_until已落入过去即 STIX 术语中的 deactivation/停用、以及对象更新都会作为更新的版本到达并取代旧行——因此重复轮询是幂等的。若一次更新从 pattern 中删除了某个值例如修正了拼写该值会随一个墓碑tombstone版本一并撤回立即从匹配集合中消失而不是一直存活到原valid_until。底层存储印证了这一语义ThreatIntelIndicator表使用ReplacingMergeTree以(projectId, feedId, indicatorValue, stixId)为主键version取 STIX 对象的modified时间戳。同一指标被重新轮询或更新后合并时收敛到最新版本而非重复撤销不过是revokedtrue的更新版本。由于合并是异步的读取必须版本感知argMax(column, version)GROUP BY身份键由ThreatIntelIndicatorService封装正确语句否则通用查询路径可能瞬时看到新旧两个版本。六、摄取时富化给事件盖上 threat.* 戳记每条进入平台的安全事件——无论来自 HTTP 摄取还是任何受管接口——在入库之前都会与当前活跃指标比对。当事件中的任一 observableIP、主机、域名、哈希、用户命中指标时事件被盖上以下扁平属性属性值threat.matched被标记的事件上恒为字面量truethreat.indicator_id指标的 STIX 标识threat.indicator_typeipv4-addr、domain-name、url、email-addr、file-hash-sha256等threat.indicator_value命中的 IOC 值规范化后的小写形式threat.feed/threat.feed_id指标来自哪个 Feedthreat.confidence指标的 STIX 置信度threat.match_count事件中有多少个 observable 与指标命中这些属性名在 ThreatIntelConstants.ts 中集中定义ENRICHMENT_*系列并被强调为匹配引擎与所有观察方之间的契约——事件上使用短键threat.*便于 Sigma 规则与监控器过滤发现行上使用oneuptime.threat.*长键见下一节。多指标同时命中同一事件时置信度最高者胜出写入标量标记。由于这些是普通扁平属性凡是属性已能生效的地方都能直接使用无需学习新查询语言Sigma 规则可以写threat.matched: true或threat.confidence|gte: 80安全事件监控器可以直接按这些属性过滤它们会出现在事件浏览器Explorer的属性列选择器中。富化存在两个不可回避的边界不可追溯标记富化只能标记摄取时已经知道的指标ClickHouse 行不可变事件永远不会被追认标记。成本模型严格富化位于热摄取路径上ThreatIntelEnricher 的注释明确了设计约束——每个项目一个是否存在任何指标的探针进程内 TTL 缓存 60 秒轮询器摄入新指标后主动失效按摄取批次做一次批量 ClickHouse 查询对批次内去重后的 observable 做分块IN查询MAX_VALUES_PER_LOOKUP_QUERY 5000绝不对单事件逐条查询任何失败只记录日志并让批次保持未富化状态——富化绝不能以牺牲事件入库为代价。七、定时匹配从指标到发现、告警与 Incident除摄取时富化外匹配器Matcher还以每分钟一次的频率把每个活跃 Feed 的活跃指标与安全事件关联关联的事件时间必须落在上次评估时间以来的窗口内回看上限24 小时常量THREAT_INTEL_MATCH_MAX_LOOKBACK_IN_MINUTES 1440首次评估窗口为 15 分钟。窗口语义值得精确理解每个窗口在关闭那一刻用当时已知的指标集合进行评定。因此富化器看到事件之后、窗口关闭之前到达的情报会被匹配器补上匹配器确定后下一次评估最多再延迟 24 小时而更晚到达的情报不会与已评估的历史事件回溯关联。窗口基于事件自身的time字段源时间戳而非到达时间——一个迟到到达、源时间戳早于当前窗口的事件不会被匹配器拾取它仍会在摄取时用当下已知指标富化。匹配行为与 Sigma 规则匹配完全一致分为三档写一条 Threat Intel 发现Finding到事件表OCSF 类2004Detection Findingproduct为OneUptime Threat Intel归属到同名遥测服务OneUptime Threat Intel常量THREAT_INTEL_PRODUCT_NAME/THREAT_INTEL_SERVICE_NAME见 ThreatIntelConstants.ts。每次评估中每个命中指标值一条 Finding且每个 Feed 每次评估最多输出100个最热门的指标值按匹配次数排序常量THREAT_INTEL_MAX_INDICATORS_PER_EVALUATION 100超出上限的值会在后续窗口再次命中时被拾取。打开去重告警每个(Feed, 指标值)组合只保留一个未关闭告警。持续命中的指标不会堆积告警已解决的告警可以以新告警身份再次打开。可选地创建 Incident默认关闭——Incident 会驱动 on-call、SLA 与状态页因此需要按 Feed 显式开启shouldCreateIncident默认false。告警严重度沿用检测规则的优先级若 Feed 显式配置了严重度alertSeverityId则直接采用否则将指标置信度映射到项目严重度体系——≥90 为严重Critical≥70 为高High≥40 为中等Medium其余为低Low无置信度评分按中等处理。该映射在 ocsfSeverityForConfidence 中实现非有限值或 ≤0 的置信度返回Medium——一个 Feed 未打分的指标仍是有人策展过的指标。每条 Finding 携带oneuptime.threat.*属性块是 Sigma 引擎oneuptime.detection.*的姊妹块属性值oneuptime.threat.feed_id/oneuptime.threat.feed_name来源 Feedoneuptime.threat.indicator_id指标的 STIX 标识oneuptime.threat.indicator_type/oneuptime.threat.indicator_value命中内容oneuptime.threat.confidence指标置信度oneuptime.threat.match_count该 Finding 背后关联了多少事件这些常量同样定义在 ThreatIntelConstants.ts 中与仪表盘的从 Feed 创建监控器流程共用同一来源避免属性改名后静默孤立掉所有依赖它的监控器与 Sigma 规则。最后Finding 会从匹配输入中排除由其 OCSF 类决定重写流程永远不可能以自身为食避免无限自我放大的循环。八、监控你的匹配结果Create Monitor由于 Threat Intel Finding 就是普通安全事件所有能与检测 Finding 组合的能力在这里同样适用。Feed 行上的Create Monitor操作会预填一个监控器构建器类为Detection Finding过滤器基于该 Feed 的oneuptime.threat.feed_id。注意过滤器用的是 Feed 的标识ID而不是名称——Finding 携带的是 Feed 的当前名称改名后按名称过滤的监控器会静默失效沦为孤儿监控器。典型用法监控匹配风暴某个 Feed 突然大量命中跟踪每个 Feed 的匹配速率变化在某个平时很吵的 Feed 突然安静时发出告警安静可能意味着源端停止更新或事件流中断。九、保留策略与计费口径指标是配置不是遥测ThreatIntelIndicator行按配置处理不按摄取量计费不会被计量。Finding 行按事件保留匹配时写入的 Finding 行是普通安全事件遵循事件表securityEvents的保留列设置。指标行的 TTLThreatIntelIndicator行携带 ClickHouse TTL为valid_until之后1 天retentionDateTTL 配合ttl_only_drop_parts。但过期行每次按整个月度分区成批丢弃因此一行可能在过期后仍在磁盘以及 Indicators 表中可见停留约一个月。这只是存储清理过期与撤销永远在查询时强制执行陈旧行永远不会参与匹配。十、结语从订阅到响应的完整闭环OneUptime 的威胁情报功能把标准 TAXII/STIX 生态无缝接入 SIEM 工作流订阅一个 TAXII 2.1 集合规范化 STIX 指标在摄取时富化事件、在分钟级调度中补齐匹配最终产出与 Sigma 检测同构的 Finding、去重告警与 Incident。关键设计——严格的模式支持边界、版本感知的幂等摄入、以valid_from锚定的有效性窗口、属性常量的单一来源——都保证了该系统在公有源与自建源上都能安全、可预测地运行。想要深入验证这些行为可以直接阅读仓库中的测试用例例如 ThreatIntelFeedPoller.test.ts、ThreatIntelMatcher.test.ts 与 ThreatIntelEnricher.test.ts它们完整覆盖了轮询、匹配与富化的边界行为。赞分享可观测性后端运维前端云原生微服务AI Agent【免费下载链接】oneuptimeComplete open-source monitoring and observability platform.项目地址https://gitcode.com/GitHub_Trending/on/oneuptime点击查看免费下载相关推荐OneUptime 威胁情报STIX/TAXII从订阅 Feed、解析 Indicator 到匹配安全事件的完整链路OneUptime 威胁情报STIX/TAXII从订阅 Feed、解析 Indicator 到匹配安全事件的完整链路 本文围绕 OneUptime 的威胁可观测性后端运维前端云原生微服务AI AgentAnthropic-Cybersecurity-Skills 实战构建自动化威胁情报 Feed 集成管线STIX/TAXII → SIEMAnthropic Cybersecurity Skills 实战构建自动化威胁情报 Feed 集成管线STIX/TAXII → SIEM 导读 本篇指南网络安全AI 技能/插件渗透测试红蓝对抗Anthropic-Cybersecurity-Skills 威胁情报源集成代理 API 参考STIX/TAXII 与开源威胁源的自动化接入实战Anthropic Cybersecurity Skills 威胁情报源集成代理 API 参考STIX/TAXII 与开源威胁源的自动化接入实战 导读 本文是网络安全AI 技能/插件渗透测试红蓝对抗上一篇object-fit-images 源码剖析从浏览器检测到属性劫持的完整实现下一篇LubeLogger维修记录管理完整记录车辆维修历史建立健康档案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表