PyCTI – OpenCTI Python库
PyCTI是OpenCTI平台的Python库,它允许开发者和安全研究人员与OpenCTI API进行交互。
https://opencti-client-for-python.readthedocs.io/en/latest/pycti/pycti.html
安装
要安装PyCTI,你可以使用pip:
pip install pycti
函数
classpycti.Indicator(opencti)
参数:opencti——实例OpenCTIApiClient
1. add_stix_cyber_observable(**kwargs)
向 Indicator 对象添加一个 Stix-Cyber-Observable 对象(基于)
参数
- id – 指标的 id
- 指示器——指示器对象
- stix_cyber_observable_id – Stix-Observable 的 id
退货:Boolean 如果没有导入错误则为真
2. create(**kwargs)
创建一个指标对象
- 参数
-
- name ( str ) – 指标的名称
- pattern ( str ) – 固定指标模式
- x_opencti_main_observable_type ( str ) – 可观察对象的类型
- 退货: 指标对象
- 返回类型: 指标
3. import_from_stix2( **kwargs)
从 STIX2 对象导入 Indicator 对象
- 参数
-
- stixObject – Stix 对象指标
- extras – 额外的字典
- update ( bool ) – 在导入时设置更新标志
- 退货: 指标对象
- 返回类型: 指标
4. list( **kwargs)
列出指标对象
list 方法接受以下 kwargs:
- 参数
-
- filters ( list ) –(可选)要应用的过滤器
- search ( str ) – (可选)申请列表的搜索关键字
- first ( int ) – (可选)返回后ID或开头的前 n 行(如果未设置)
- after ( str ) – (可选)用于分页的第一行的 OpenCTI 对象 ID
- orderBy ( str ) –(可选)要对响应进行排序的字段
- orderMode ( bool ) –(可选)“ asc ”或“ desc ”
- customAttributes ( list ) –(可选)要返回的属性键列表
- getAll ( bool ) –(可选)切换以返回所有条目(小心在没有任何其他过滤器的情况下使用它)
- withPagination ( bool ) – (可选)切换到使用分页
- 退货: 指标清单
- 返回类型: 列表
5. read( **kwargs)
读取 Indicator 对象
read 可以与已知的 OpenCTI 实体id一起使用,也可以使用有效的过滤器来搜索并返回单个 Indicator 实体或 None。
list 方法接受以下 kwargs。
注意:id或filters是必需的。
- 参数
-
- id ( str ) – 威胁演员的 ID
- filters ( list ) – 如果没有提供 id 则应用的过滤器
- 退货: 指标对象
- 返回类型: 指标
classpycti.Infrastructure(opencti)
OpenCTI 的主要基础设施类
参数: opencti——实例OpenCTIApiClient
- 1. list( **kwargs)
列出基础设施对象 - 参数
- filters ( list ) –(可选)要应用的过滤器
- search ( str ) – (可选)申请列表的搜索关键字
first ( int ) – (可选)返回后ID或开头的前 n 行(如果未设置)
after ( str ) – (可选)用于分页的第一行的 OpenCTI 对象 ID
orderBy ( str ) –(可选)要对响应进行排序的字段
orderMode ( bool ) –(可选)“ asc ”或“ desc ”
customAttributes ( list ) –(可选)要返回的属性键列表
getAll ( bool ) –(可选)切换以返回所有条目(小心在没有任何其他过滤器的情况下使用它)
withPagination ( bool ) – (可选)切换到使用分页
2. read(( **kwargs)
读取基础设施对象
read 可以与已知的 OpenCTI 实体id一起使用,也可以使用有效的过滤器来搜索并返回单个基础设施实体或无。
注意:id或filters是必需的。
参数
-
-
- id ( str ) – 威胁演员的 ID
- filters ( list ) – 如果没有提供 id 则应用的过滤器
-
classpycti.OpenCTIApiClient(url, token, log_level=’info’, ssl_verify=False, proxies=None, json_logging=False, cert=None)
OpenCTI 的主要 API 客户端
- 参数
-
- url (str) – OpenCTI API url
- token (str) – OpenCTI API token
- log_level (str, optional) – log level for the client
- ssl_verify (bool, optional) –
- proxies –
- json_logging (bool, optional) – format the logs as json if set to True
1. fetch_opencti_file( fetch_uri , binary = False , serialize = False )
从 OpenCTI API 获取文件
- 参数
-
- fetch_uri ( str ) – 下载要使用的 URI
- binary ( bool , optional ) – [描述], 默认为 False
- Returns:返回文件内容作为文本或基于二进制的字节
pycti.OpenCTIApiConnector(api)
1. list( )
列出可用的连接器
- return:返回带有连接器的字典
- 返回类型:dict
2. ping( connector_id , connector_state )
通过 id 和状态 ping 一个连接器
参数
- connector_id ( str ) – 连接器 ID
- connector_state (
Any
) – 连接器的状态
退货:响应 pingConnector 数据字典
返回类型:字典
3. register(connector)
向 OpenCTI 注册连接器
参数:连接器( OpenCTIConnector ) – OpenCTIConnector连接器对象
退货:响应 registerConnector 数据字典
返回类型:字典
4. unregister( _id )
使用 OpenCTI 注销连接器
- 参数:_id ( string ) – OpenCTIConnector连接器 ID
- 退货:响应 registerConnector 数据字典
- 返回类型:字典
pycti.OpenCTIConnector( connector_id , connector_name , connector_type , scope , auto , only_contextual )
OpenCTI 连接器的主类
参数
- connector_id ( str ) – 连接器的 ID(有效的 uuid4)
- connector_name ( str ) – 连接器的名称
- connector_type ( str ) – 有效的 OpenCTI 连接器类型(参见ConnectorType)
- 范围( str ) – 连接器范围
Raises: ValueError – 如果连接器类型无效
1. to_input( )
在 API 查询中使用的连接器输入
- 退货:带有连接器数据的字典
- 返回类型:字典
class pycti.OpenCTIConnectorHelper(config)
用于 OpenCTI 连接器的 Python API
参数: config ( Dict ) – 字典标准配置
使用
要使用PyCTI,你需要首先导入它:from pycti import OpenCTIApiClient
然后,你需要创建一个OpenCTIApiClient实例,该实例需要OpenCTI的URL和API密钥:
api_url = "https://your-opencti-url"
api_token = "your-api-token"
opencti_api_client= OpenCTIApiClient(api_url, api_token)
功能
连接测试
你可以使用ping()
方法来测试你的连接,如果连接成功,它将返回{"status": "success"}
。
client.ping()
获取信息
你可以使用OpenCTIApiClient来获取OpenCTI中的各种信息。例如,获取所有的组织:
organizations = opencti_api_client.identity.list(types=['Organization'])
for organization in organizations:
print(organization['name'])
创建实体
你可以使用OpenCTIApiClient来创建各种实体,例如威胁演员、入侵集、恶意软件等。每种实体都有其对应的方法,例如create_threat_actor()
、create_intrusion_set()
、create_malware()
等。
例如,要创建一个威胁演员,你可以这样做:
threat_actor = client.create_threat_actor(
name="Threat Actor Name",
description="Description of the threat actor",
alias=["alias1", "alias2"],
goal="Goal of the threat actor",
sophistication="Sophistication of the threat actor",
resource_level="Resource level of the threat actor",
primary_motivation="Primary motivation of the threat actor",
secondary_motivation="Secondary motivation of the threat actor",
personal_motivation="Personal motivation of the threat actor",
)
查询实体
你可以使用OpenCTIApiClient来查询各种实体。每种实体都有其对应的查询方法,例如get_threat_actor()
、get_intrusion_set()
、get_malware()
等。
例如,要查询一个威胁演员,你可以这样做:
threat_actor = client.get_threat_actor("Threat Actor Name")
更新实体
你可以使用OpenCTIApiClient来更新各种实体。每种实体都有其对应的更新方法,例如update_threat_actor()
、update_intrusion_set()
、update_malware()
等。
例如,要更新一个威胁演员,你可以这样做:
updated_threat_actor = client.update_threat_actor(
id=threat_actor["id"],
name="New Threat Actor Name",
description="New description of the threat actor",
)
删除实体
你可以使用OpenCTIApiClient来删除各种实体。每种实体都有其对应的删除方法,例如delete_threat_actor()
、delete_intrusion_set()
、delete_malware()
等。
例如,要删除一个威胁演员,你可以这样做:
client.delete_th