Skip to content

tonydeng/openc2-java

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenC2-Java

Travis CI Build Status Sonarcloud Status
SonarCloud Coverage Lines of code SonarCloud Bugs SonarCloud vulnerabilities

OpenC2介绍

目标

OpenC2语言规范的目标是提供一种在网络防御系统的function elements(功能元素)之间进行互操作的语言。 该语言与OpenC2执行器配置文件和OpenC2传输规范结合使用,允许与供应商无关的网络攻击响应。

综合自适应网络防御(IACD)框架基于传统的OODA (Observe(观察)–Orient(定位)–Decide(决定)–Act(行动))循环IACD定义了一系列活动:

  • Sensing(感知):收集有关系统活动的数据
  • Sense Making(意图理解):对数据进行分析和评估,以了解正在发生的事情
  • Decision Making(决策):确定响应系统事件的行动方案
  • Acting(行动):执行行动过程

OpenC2的目标是在执行网络防御功能的解耦块之间实现网络相关时间的协调防御。

OpenC2侧重于IACD框架的acting(执行)部分; 作为OpenC2设计基础的假设是已经提供了sensing/analytics(传感/分析)并且已经做出了采取行动的决策。 这个目标和这些假设指导OpenC2的设计:

  • Technology Agnostic(技术无关性): OpenC2语言以平台和实现无关的方式定义了一组抽象的原子网络防御行为
  • Concise(简洁性):命令旨在仅传达描述所需操作所需的基本信息,并且可以以非常紧凑的形式表示,以适应通信受限的环境
  • Abstract(抽象性):命令和响应是抽象定义的,可以根据不同实现环境的需要通过多种方案进行编码和传输
  • Extensible(可扩展性):虽然OpenC2定义了一套用于网络防御的核心动作和目标,但该语言有望随着网络防御技术的发展而发展,并允许扩展以适应新的网络防御技术。

OpenC2 基础组件

  1. 生产者 :生产者是一个实体,它创建命令以向一个或多个系统提供指令,以根据命令的内容进行操作。 生产者可以与命令一起接收和处理响应。
  2. 消费者 :消费者是接收并可能对命令采取行动的实体。 消费者可以创建响应,提供捕获或发送回制作人所需的任何信息。

OpenC2基础组件

OpenC2消息交换

OpenC2是生产者和消费者的一套规范,用于指挥和执行网络防御功能。 这些规范包括OpenC2语言规范,执行器配置文件和传输规范。

OpenC2语言规范和执行器配置文件规范侧重于命令和响应的生产者和消费者的语言内容和含义,而转移规范侧重于交换协议。

  • OpenC2语言规范:提供了语言基本元素的语义,命令和响应的结构,以及定义表示命令或响应的语言元素的正确语法的模式。
  • OpenC2执行器配置文件:指定在特定执行器功能的上下文中相关的OpenC2语言的子集。 网络防御组件,设备,系统和/或实例可能(实际上可能)实现多个执行器配置文件。 执行器配置文件通过定义将执行器标识为所需精度级别的说明符来扩展语言。 执行器配置文件可以定义与这些执行器功能相关和/或唯一的命令参数和目标。
  • OpenC2传输规范:利用现有协议和标准在特定环境中实现OpenC2。 这些标准用于超出语言范围的通信和安全功能,例如消息传输编码,身份验证和OpenC2消息的端到端传输。

OpenC2语言规范基本结构

OpenC2语言规范定义了一种语言,用于组成用于命令和控制网络防御系统和组件的消息。

消息由HeaderPayload组成(在OpenC2语言规范版本1.0中定义为消息主体,并在一个或多个执行器配置文件中指定 )。

该语言规范定义了两个Payload结构

  • 命令(Command) :从一个系统(称为生产者)到一个或多个系统(消费者)的指令,用于对命令的内容进行操作。
  • 响应 (Response):由命令返回生产者的任何信息。

OpenC2协议分层

OpenC2实现将上述相关的OpenC2规范与相关的行业规范,协议和标准集成在一起。

下图描述了OpenC2规范之间的关系,以及它们与其他行业标准和OpenC2的特定于环境的实现之间的关系。

OpenC2协议分层

注意,图中的实现方面的分层是概念性的,并不旨在排除实现所需功能的任何特定方法

(例如,使用应用层消息签名功能来提供消息源认证和完整性)。

OpenC2协议层

协议层 例子
Function-Specific Content 执行器配置文件
([OpenC2-SLPF-v1.0],...)
Common Content Language Specification
Message Transfer Specifications
([OpenC2-HTTPS-v1.0], OpenC2-over-CoAP, ...)
Secure Transport HTTPS, CoAP, MQTT, OpenDXL, ...
  • Secure Transport层提供ProducerConsumer之间的通信路径。 OpenC2可以通过任何标准传输协议进行分层。
  • Message层提供传输和内容无关的机制来传递消息。 传输规范将特定于传输的协议元素映射到由内容和相关元数据组成的与传输无关的消息元素集。
  • Common Content层定义了CommandsResponses的结构以及用于构造它们的一组公共语言元素。
  • Function-Specific Content层定义用于支持特定网络防御功能的语言元素。 Actuator配置文件定义了该功能的实现一致性要求。 生产者和消费者将支持一个或多个配置文件。

OpenC2 Command和Response

OpenC2 Command

Command是由Action(要做什么),Target(正在执行的操作),可选的Actuator(执行命令的是什么)和Command Arguments这几部分组成,它们影响命令的执行方式。

Target(目标)与Action(动作)结合足以描述完整的Command

虽然ActuatorCommand Arguments是可选的,但是可以为Command提供额外的精度。

OpenC2 Response

Response由数字格式的StatusCode(状态码),以及可选的字符串格式的status text(状态文本)和可选results(结果)组成。 results的格式取决于要返回的响应的数据类型。

OpenC2-Java模型

整体抽象模型

OpenC2-Java抽象模型

Target模型

Target模型

Actuators模型

Actuators模型

JSON序列化模型

JSON序列化模型

实际类图

实际类图