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, 威胁情报, 开发组件, 开发者工具, 数据解析, 网络安全, 隐私保护