workingDog/SwiftSTIX

GitHub: workingDog/SwiftSTIX

一个 Swift 包,提供 STIX 2.1 对象的原生 Codable 模型和轻量级 TAXII 2.1 客户端,用于在 Swift 应用中解析与消费网络威胁情报数据。

Stars: 0 | Forks: 0

# SwiftSTIX `SwiftSTIX` 是一个用于处理 STIX 2.1 对象和 TAXII 2.1 订阅源的 Swift 包。 它适用于: - 将 STIX 2.1 JSON 解码和编码为原生 Swift 类型 - 在 Swift 应用和服务中使用 TAXII 2.1 集合 - 针对真实世界的订阅源(如 Pulsedive)测试 TAXII 客户端 该包作为单个模块 `STIX2` 提供。 这是一次使用 **Codex AI** 生成代码,然后进行一些微调的实验。 ## STIX 和 TAXII [[1]](https://oasis-open.github.io/cti-documentation/) “结构化威胁信息表达式 [STIX™] 是一种语言和序列化格式, 用于交换[网络威胁情报 (CTI)](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=cti)。STIX 使组织能够以一致且机器可读的方式相互共享 CTI,从而使安全 社区能够更好地了解他们最有可能遇到的计算机攻击, 并更快、更有效地预测和/或响应这些攻击。 STIX 旨在改善多种不同的能力,例如协作 威胁分析、自动化威胁交换、自动化检测和响应等。” ## 功能 - 包含 `Codable` STIX 2.1 模型的 Swift 6 包 - 通过 `STIXObject` 和 `STIXObservable` 实现多态解码 - 支持自定义 STIX 对象和自定义 observables - 通过 `STIXJSON` 实现对 STIX 友好的 JSON 日期处理 - 用于发现、集合和对象检索的轻量级 TAXII 2.1 客户端 - 容错的 TAXII 信封解码,适用于将 `next` 作为字符串或整数返回的服务器 ## 状态 目前仅进行了极少的测试。 该包应该可用于 STIX 2.1 解码和 TAXII 2.1 客户端集成,但仍处于早期阶段: - 目前的重点是 STIX 2.1 - 为标准 SDO、SRO 和 SCO 类型提供了基于 schema 的模型 - TAXII 支持面向读取,目前涵盖发现、集合和对象端点 ## 安装说明 ### Swift Package Manager ``` dependencies: [ .package(url: "https://github.com/workingDog/SwiftSTIX.git", branch: "main") ] ``` 然后添加该产品: ``` targets: [ .target( name: "YourTarget", dependencies: [ .product(name: "SwiftSTIX", package: "SwiftSTIX") ] ) ] ``` 如果您更喜欢该产品名称,也可以将其作为 `STIX2` 导入。 ## 快速入门 ### 解码 STIX bundle ``` import Foundation import STIX2 let data: Data = ... let decoder = STIXJSON.makeDecoder() let bundle = try decoder.decode(Bundle.self, from: data) for obj in bundle.objects ?? [] { switch obj.object { case .indicator(let indicator): print("Indicator:", indicator.name ?? "") case .relationship(let relationship): print("Relationship:", relationship.relationshipType) default: break } } ``` ### 解码 TAXII 信封 ``` import Foundation import STIX2 let data: Data = ... let envelope = try STIXJSON.makeDecoder().decode(TAXIIEnvelope.self, from: data) print("More pages:", envelope.more ?? false) print("Objects:", envelope.objects.count) print("Next cursor:", envelope.next ?? "") ``` ### 从 Pulsedive 的测试集合中读取 Pulsedive 目前提供了一个免费的测试集合,这对于客户端集成工作非常有用。 ``` import STIX2 let client = TAXIIClient(configuration: .pulsediveTest(apiKey: "")) let envelope = try await client.objects( collectionID: TAXIIClientConfiguration.pulsediveTestCollectionID, query: TAXIIObjectQuery(limit: 10, matchType: "indicator") ) for obj in envelope.objects { if case let .indicator(indicator) = obj.object { print(indicator.name ?? "") } } ``` ## 公共 API 亮点 - `Bundle` - `STIXObject` - `STIXObservable` - `STIXValue` - `STIXJSON` - `TAXIIClient` - `TAXIIClientConfiguration` - `TAXIIEnvelope` - `TAXIIObjectQuery` ## 包结构 - [`Sources/STIX2/Models/STIXModels.swift`](Sources/STIX2/Models/STIXModels.swift) 核心 STIX 2.1 模型类型 - [`Sources/STIX2/Support/STIXCore.swift`](Sources/STIX2/Support/STIXCore.swift) 共享原语、动态值和 JSON 辅助工具 - [`Sources/STIX2/Support/TAXIIClient.swift`](Sources/STIX2/Support/TAXIIClient.swift) TAXII 2.1 客户端支持 - [`Tests/STIX2Tests/STIX2Tests.swift`](Tests/STIX2Tests/STIX2Tests.swift) 解码和请求构建覆盖范围 ## 参考资料 模型层最初源自: - [`oasis-open/cti-python-stix2`](https://github.com/oasis-open/cti-python-stix2) - [`oasis-open/cti-stix2-json-schemas`](https://github.com/oasis-open/cti-stix2-json-schemas) - [STIX 2.0 规范](https://oasis-open.github.io/cti-documentation/) - [TAXII 2.1 规范](https://oasis-open.github.io/cti-documentation/) ## 开发 使用以下命令运行测试: ``` swift test ``` ## 注意事项 - TAXII 2.1 规范将信封的 `next` 字段定义为字符串。该包在解码时接受 `String` 或 `Int`,因为某些真实世界的服务器会返回数字游标。 - 该包旨在首先满足互操作性工作的实用性,同时仍密切关注相关标准。
标签:STIX, Swift, TAXII, 威胁情报, 开发组件, 开发者工具, 数据解析, 网络安全, 隐私保护