GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


rfc:rfc8727



Internet Engineering Task Force (IETF) T. Takahashi Request for Comments: 8727 NICT Category: Standards Track R. Danyliw ISSN: 2070-1721 CERT

                                                             M. Suzuki
                                                                  NICT
                                                           August 2020
  JSON Binding of the Incident Object Description Exchange Format

Abstract

 The Incident Object Description Exchange Format (IODEF) defined in
 RFC 7970 provides an information model and a corresponding XML data
 model for exchanging incident and indicator information.  This
 document gives implementers and operators an alternative format to
 exchange the same information by defining an alternative data model
 implementation in JSON and its encoding in Concise Binary Object
 Representation (CBOR).

Status of This Memo

 This is an Internet Standards Track document.
 This document is a product of the Internet Engineering Task Force
 (IETF).  It represents the consensus of the IETF community.  It has
 received public review and has been approved for publication by the
 Internet Engineering Steering Group (IESG).  Further information on
 Internet Standards is available in Section 2 of RFC 7841.
 Information about the current status of this document, any errata,
 and how to provide feedback on it may be obtained at
 https://www.rfc-editor.org/info/rfc8727.

Copyright Notice

 Copyright (c) 2020 IETF Trust and the persons identified as the
 document authors.  All rights reserved.
 This document is subject to BCP 78 and the IETF Trust's Legal
 Provisions Relating to IETF Documents
 (https://trustee.ietf.org/license-info) in effect on the date of
 publication of this document.  Please review these documents
 carefully, as they describe your rights and restrictions with respect
 to this document.  Code Components extracted from this document must
 include Simplified BSD License text as described in Section 4.e of
 the Trust Legal Provisions and are provided without warranty as
 described in the Simplified BSD License.

Table of Contents

 1.  Introduction
   1.1.  Requirements Language
 2.  IODEF Data Types
   2.1.  Abstract Data Type to JSON Data Type Mapping
   2.2.  Complex JSON Types
     2.2.1.  Integer
     2.2.2.  Multilingual Strings
     2.2.3.  Enum
     2.2.4.  Software and Software Reference
     2.2.5.  Structured Information
     2.2.6.  EXTENSION
 3.  IODEF JSON Data Model
   3.1.  Classes and Elements
   3.2.  Mapping between JSON and XML IODEF
 4.  Examples
   4.1.  Minimal Example
   4.2.  Indicators from a Campaign
 5.  Mapkeys
 6.  The IODEF Data Model (CDDL)
 7.  IANA Considerations
 8.  Security Considerations
 9.  References
   9.1.  Normative References
   9.2.  Informative References
 Appendix A.  Data Types Used in This Document
 Appendix B.  The IODEF Data Model (JSON Schema)
 Acknowledgments
 Authors' Addresses

1. Introduction

 The Incident Object Description Exchange Format (IODEF) [RFC7970]
 defines a data representation for security incident reports and
 indicators commonly exchanged by operational security teams.  It
 facilitates the automated exchange of this information to enable
 mitigation and watch-and-warning.  An information model using Unified
 Modeling Language (UML) is defined in Section 3 of [RFC7970] and a
 corresponding Extensible Markup Language (XML) schema data model is
 defined in Section 8 of [RFC7970].  This UML-based information model
 and XML-based data model are referred to as IODEF UML and IODEF XML,
 respectively, in this document.
 IODEF documents are structured and thus suitable for machine
 processing.  They will streamline incident response operations.
 Another well-used and structured format that is suitable for machine
 processing is JavaScript Object Notation (JSON) [RFC8259].  To
 facilitate the automation of incident response operations, IODEF
 documents and implementations should support JSON representation and
 its encoding in Concise Binary Object Representation (CBOR)
 [RFC7049].
 This document defines an alternate implementation of the IODEF UML
 information model by specifying a JSON data model using Concise Data
 Definition Language (CDDL) [RFC8610] and a JSON Schema [JSON-SCHEMA].
 This JSON data model is referred to as IODEF JSON in this document.
 IODEF JSON provides all of the expressivity of IODEF XML.  It gives
 implementers and operators an alternative format to exchange the same
 information.
 The normative IODEF JSON data model is found in Section 6.  Sections
 2 and 3 describe the data types and elements of this data model.
 Section 4 provides examples.

1.1. Requirements Language

 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
 "OPTIONAL" in this document are to be interpreted as described in
 BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
 capitals, as shown here.

2. IODEF Data Types

 IODEF JSON implements the abstract data types specified in Section 2
 of [RFC7970].

2.1. Abstract Data Type to JSON Data Type Mapping

 IODEF JSON uses native and derived JSON data types.  Table 1
 describes the mapping between the abstract data types in Section 2 of
 [RFC7970] and their corresponding implementations in IODEF JSON.
 +=================+==========================+================+
 | IODEF Data Type | Reference                | JSON Data Type |
 +=================+==========================+================+
 | INTEGER         | Section 2.1 of [RFC7970] | integer; see   |
 |                 |                          | Section 2.2.1  |
 +-----------------+--------------------------+----------------+
 | REAL            | Section 2.2 of [RFC7970] | "number" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | CHARACTER       | Section 2.3 of [RFC7970] | "string" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | STRING          | Section 2.3 of [RFC7970] | "string" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | ML_STRING       | Section 2.4 of [RFC7970] | see            |
 |                 |                          | Section 2.2.2  |
 +-----------------+--------------------------+----------------+
 | BYTE            | Section 2.5.1 of         | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | BYTE[]          | Section 2.5.1 of         | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | HEXBIN          | Section 2.5.2 of         | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | HEXBIN[]        | Section 2.5.2 of         | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | ENUM            | Section 2.6 of [RFC7970] | see            |
 |                 |                          | Section 2.2.3  |
 +-----------------+--------------------------+----------------+
 | DATETIME        | Section 2.7 of [RFC7970] | "string" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | TIMEZONE        | Section 2.8 of [RFC7970] | "string" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | PORTLIST        | Section 2.9 of [RFC7970] | "string" per   |
 |                 |                          | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | POSTAL          | Section 2.10 of          | ML_STRING; see |
 |                 | [RFC7970]                | Section 2.2.2  |
 +-----------------+--------------------------+----------------+
 | PHONE           | Section 2.11 of          | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | EMAIL           | Section 2.12 of          | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | URL             | Section 2.13 of          | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | ID              | Section 2.14 of          | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | IDREF           | Section 2.14 of          | "string" per   |
 |                 | [RFC7970]                | [RFC8259]      |
 +-----------------+--------------------------+----------------+
 | SOFTWARE        | Section 2.15 of          | see            |
 |                 | [RFC7970]                | Section 2.2.4  |
 +-----------------+--------------------------+----------------+
 | STRUCTUREDINFO  | Section 4.4 of [RFC7203] | see            |
 |                 |                          | Section 2.2.5  |
 +-----------------+--------------------------+----------------+
 | EXTENSION       | Section 2.16 of          | see            |
 |                 | [RFC7970]                | Section 2.2.6  |
 +-----------------+--------------------------+----------------+
                     Table 1: JSON Data Types
 +=================+================+=============================+
 | IODEF Data Type | CBOR Data Type | CDDL Prelude [RFC8610]      |
 +=================+================+=============================+
 | INTEGER         | 0, 1, 6 tag 2, | integer                     |
 |                 | 6 tag 3        |                             |
 +-----------------+----------------+-----------------------------+
 | REAL            | 7 bits 26      | float32                     |
 +-----------------+----------------+-----------------------------+
 | CHARACTER       | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | STRING          | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | ML_STRING       | 5              | Maps/Structs (Section 3.5.1 |
 |                 |                | of [RFC8610])               |
 +-----------------+----------------+-----------------------------+
 | BYTE            | 6 tag 22       | eb64legacy                  |
 +-----------------+----------------+-----------------------------+
 | BYTE[]          | 6 tag 22       | eb64legacy                  |
 +-----------------+----------------+-----------------------------+
 | HEXBIN          | 6 tag 23       | eb16                        |
 +-----------------+----------------+-----------------------------+
 | HEXBIN[]        | 6 tag 23       | eb16                        |
 +-----------------+----------------+-----------------------------+
 | ENUM            | -              | Choices (Section 2.2.2 of   |
 |                 |                | [RFC8610])                  |
 +-----------------+----------------+-----------------------------+
 | DATETIME        | 6 tag 0        | tdate                       |
 +-----------------+----------------+-----------------------------+
 | TIMEZONE        | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | PORTLIST        | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | POSTAL          | 3              | ML_STRING (Section 2.2.2)   |
 +-----------------+----------------+-----------------------------+
 | PHONE           | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | EMAIL           | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | URL             | 6 tag 32       | uri                         |
 +-----------------+----------------+-----------------------------+
 | ID              | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | IDREF           | 3              | text                        |
 +-----------------+----------------+-----------------------------+
 | SOFTWARE        | 5              | Maps/Structs (Section 3.5.1 |
 |                 |                | of [RFC8610])               |
 +-----------------+----------------+-----------------------------+
 | STRUCTUREDINFO  | 5              | Maps/Structs (Section 3.5.1 |
 |                 |                | of [RFC8610])               |
 +-----------------+----------------+-----------------------------+
 | EXTENSION       | 5              | Maps/Structs (Section 3.5.1 |
 |                 |                | of [RFC8610])               |
 +-----------------+----------------+-----------------------------+
                      Table 2: CBOR Data Types

2.2. Complex JSON Types

2.2.1. Integer

 An integer is a subset of the "number" type of JSON, which represents
 signed digits encoded in Base 10.  The definition of this integer is
 "[ minus ] int" per [RFC8259], Section 6.

2.2.2. Multilingual Strings

 A string that needs to be represented in a human-readable language
 different from the default encoding of the document is represented in
 the information model by the ML_STRING data type.  This data type is
 implemented as either an object with "value", "lang", and
 "translation-id" elements or a text string as defined in Section 6.
 An example is shown below.
 "MLStringType": {
   "value": "free-form text",                              # STRING
   "lang": "en",                                             # ENUM
   "translation-id": "jp2en0023"                           # STRING
 }
 Note that in figures throughout this document, some supplementary
 information follows "#", but these are not valid syntax in JSON;
 instead, they are intended to facilitate reader understanding.

2.2.3. Enum

 Enum is an ordered list of acceptable string values.  Each value has
 a representative keyword.  Within the data model, the enumerated type
 keywords are used as attribute values.

2.2.4. Software and Software Reference

 A particular version of software is represented in the information
 model by the SOFTWARE data type.  This software can be described by
 using a reference, a Uniform Resource Locator (URL) [RFC3986], or
 free-form text.  The SOFTWARE data type is implemented as an object
 with "SoftwareReference", "URL", and "Description" elements as
 defined in Section 6.  Examples are shown below.
 "SoftwareType": {
   "SoftwareReference": {...},                  # SoftwareReference
   "Description": ["MS Windows"]                           # STRING
 }
 SoftwareReference class is a reference to a particular version of
 software.  Examples are shown below.
 "SoftwareReference": {
   "value": "cpe:/a:google:chrome:59.0.3071.115",          # STRING
   "spec-name": "cpe",                                       # ENUM
   "dtype": "string"                                         # ENUM
 }

2.2.5. Structured Information

 Information provided in the form of a structured string, such as an
 ID, or structured information, such as XML documents, is represented
 in the information model by the STRUCTUREDINFO data type.  Note that
 this type was originally specified in Section 4.4 of [RFC7203] as a
 basic structure of its extension classes.  The STRUCTUREDINFO data
 type is implemented as an object with "SpecID", "ext-SpecID",
 "ContentID", "RawData", and "Reference" elements.  An example for
 embedding a structured ID is shown below.
 "STRUCTUREDINFO": {
   "SpecID": "urn:ietf:params:xml:ns:mile:cwe:3.3",          # ENUM
   "ContentID": "CWE-89"                                   # STRING
 }
 When embedding the raw data, it should be encoded as a BYTE type
 object, as shown below.
 "STRUCTUREDINFO": {
   "SpecID": "urn:ietf:params:xml:ns:mile:mmdef:1.2",        # ENUM
   "RawData": "<<< encoded structured data >>>"              # BYTE
 }
 When embedding the raw data, base64 encoding defined in Section 4 of
 [RFC4648] MUST be used for JSON IODEF while binary representation
 MUST be used for CBOR IODEF.

2.2.6. EXTENSION

 Information not otherwise represented in the IODEF can be added using
 the EXTENSION data type.  This data type is a generic extension
 mechanism.  The EXTENSION data type is implemented as an
 ExtensionType object with "value", "name", "dtype", "ext-dtype",
 "meaning", "formatid", "restriction", "ext-restriction", and
 "observable-id" elements.  An example for embedding a structured ID
 is shown below.
 "ExtensionType": {
   "value": "xxxxxxx",                                     # STRING
   "name": "Syslog",                                       # STRING
   "dtype": "string",                                        # ENUM
   "meaning": "Syslog from the security appliance X"       # STRING
 }
 Note that this data type is specified in [RFC7970] as its generic
 extension mechanism.  If a data item has internal structure that is
 intended to be processed outside of the IODEF framework, one may
 consider using the STRUCTUREDINFO data type mentioned in
 Section 2.2.5.

3. IODEF JSON Data Model

3.1. Classes and Elements

 The following table shows the list of IODEF classes and their
 elements and the corresponding sections in [RFC7970].  Note that the
 complete JSON schema is defined in Section 6 using CDDL.
 +===========================+============================+==========+
 | IODEF Class               | Class, Element, and        |Section in|
 |                           | Attribute                  |[RFC7970] |
 +===========================+============================+==========+
 | IODEF-Document            | version                    | 3.1      |
 |                           | lang?                      |          |
 |                           | format-id?                 |          |
 |                           | private-enum-name?         |          |
 |                           | private-enum-id?           |          |
 |                           | Incident+                  |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Incident                  | purpose                    | 3.2      |
 |                           | ext-purpose?               |          |
 |                           | status?                    |          |
 |                           | ext-status?                |          |
 |                           | lang?                      |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | IncidentID                 |          |
 |                           | AlternativeID?             |          |
 |                           | RelatedActivity*           |          |
 |                           | DetectTime?                |          |
 |                           | StartTime?                 |          |
 |                           | EndTime?                   |          |
 |                           | RecoveryTime?              |          |
 |                           | ReportTime?                |          |
 |                           | GenerationTime             |          |
 |                           | Description*               |          |
 |                           | Discovery*                 |          |
 |                           | Assessment*                |          |
 |                           | Method*                    |          |
 |                           | Contact+                   |          |
 |                           | EventData*                 |          |
 |                           | Indicator*                 |          |
 |                           | History?                   |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | IncidentID                | id                         | 3.4      |
 |                           | name                       |          |
 |                           | instance?                  |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 +---------------------------+----------------------------+----------+
 | AlternativeID             | restriction?               | 3.5      |
 |                           | ext-restriction?           |          |
 |                           | IncidentID+                |          |
 +---------------------------+----------------------------+----------+
 | RelatedActivity           | restriction?               | 3.6      |
 |                           | ext-restriction?           |          |
 |                           | IncidentID*                |          |
 |                           | URL*                       |          |
 |                           | ThreatActor*               |          |
 |                           | Campaign*                  |          |
 |                           | IndicatorID*               |          |
 |                           | Confidence?                |          |
 |                           | Description*               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | ThreatActor               | restriction?               | 3.7      |
 |                           | ext-restriction?           |          |
 |                           | ThreatActorID*             |          |
 |                           | URL*                       |          |
 |                           | Description*               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Campaign                  | restriction?               | 3.8      |
 |                           | ext-restriction?           |          |
 |                           | CampaignID*                |          |
 |                           | URL*                       |          |
 |                           | Description*               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Contact                   | role                       | 3.9      |
 |                           | ext-role?                  |          |
 |                           | type                       |          |
 |                           | ext-type?                  |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | ContactName*               |          |
 |                           | ContactTitle*              |          |
 |                           | Description*               |          |
 |                           | RegistryHandle*            |          |
 |                           | PostalAddress*             |          |
 |                           | Email*                     |          |
 |                           | Telephone*                 |          |
 |                           | Timezone?                  |          |
 |                           | Contact*                   |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | RegistryHandle            | handle                     | 3.9.1    |
 |                           | registry                   |          |
 |                           | ext-registry?              |          |
 +---------------------------+----------------------------+----------+
 | PostalAddress             | type?                      | 3.9.2    |
 |                           | ext-type?                  |          |
 |                           | PAddress                   |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | Email                     | type?                      | 3.9.3    |
 |                           | ext-type?                  |          |
 |                           | EmailTo                    |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | Telephone                 | type?                      | 3.9.4    |
 |                           | ext-type?                  |          |
 |                           | TelephoneNumber            |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | Discovery                 | source?                    | 3.10     |
 |                           | ext-source?                |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | Description*               |          |
 |                           | Contact*                   |          |
 |                           | DetectionPattern*          |          |
 +---------------------------+----------------------------+----------+
 | DetectionPattern          | restriction?               | 3.10.1   |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | Application                |          |
 |                           | Description*               |          |
 |                           | DetectionConfiguration*    |          |
 +---------------------------+----------------------------+----------+
 | Method                    | restriction?               | 3.11     |
 |                           | ext-restriction?           |          |
 |                           | Reference*                 |          |
 |                           | Description*               |          |
 |                           | AttackPattern*             |          |
 |                           | Vulnerability*             |          |
 |                           | Weakness*                  |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Weakness                  | restriction?               | 4.5.5 in |
 |                           | ext-restriction?           |[RFC7203] |
 +---------------------------+----------------------------+----------+
 | Reference                 | observable-id?             | 3.11.1   |
 |                           | ReferenceName?             |          |
 |                           | URL*                       |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | Assessment                | occurrence?                | 3.12     |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | IncidentCategory*          |          |
 |                           | SystemImpact*              |          |
 |                           | BusinessImpact*            |          |
 |                           | TimeImpact*                |          |
 |                           | MonetaryImpact*            |          |
 |                           | IntendedImpact*            |          |
 |                           | Counter*                   |          |
 |                           | MitigatingFactor*          |          |
 |                           | Cause*                     |          |
 |                           | Confidence?                |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | SystemImpact              | severity?                  | 3.12.1   |
 |                           | completion?                |          |
 |                           | type                       |          |
 |                           | ext-type?                  |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | BusinessImpact            | severity?                  | 3.12.2   |
 |                           | ext-severity?              |          |
 |                           | type                       |          |
 |                           | ext-type?                  |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | TimeImpact                | value                      | 3.12.3   |
 |                           | severity?                  |          |
 |                           | metric                     |          |
 |                           | ext-metric?                |          |
 |                           | duration?                  |          |
 |                           | ext-duration?              |          |
 +---------------------------+----------------------------+----------+
 | MonetaryImpact            | value                      | 3.12.4   |
 |                           | severity?                  |          |
 |                           | currency?                  |          |
 +---------------------------+----------------------------+----------+
 | Confidence                | value                      | 3.12.5   |
 |                           | rating                     |          |
 |                           | ext-rating?                |          |
 +---------------------------+----------------------------+----------+
 | History                   | restriction?               | 3.13     |
 |                           | ext-restriction?           |          |
 |                           | HistoryItem+               |          |
 +---------------------------+----------------------------+----------+
 | HistoryItem               | action                     | 3.13.1   |
 |                           | ext-action?                |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | DateTime                   |          |
 |                           | IncidentID?                |          |
 |                           | Contact?                   |          |
 |                           | Description*               |          |
 |                           | DefinedCOA*                |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | EventData                 | restriction?               | 3.14     |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | Description*               |          |
 |                           | DetectTime?                |          |
 |                           | StartTime?                 |          |
 |                           | EndTime?                   |          |
 |                           | RecoveryTime?              |          |
 |                           | ReportTime?                |          |
 |                           | Contact*                   |          |
 |                           | Discovery*                 |          |
 |                           | Assessment?                |          |
 |                           | Method*                    |          |
 |                           | System*                    |          |
 |                           | Expectation*               |          |
 |                           | RecordData*                |          |
 |                           | EventData*                 |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Expectation               | action?                    | 3.15     |
 |                           | ext-action?                |          |
 |                           | severity?                  |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | Description*               |          |
 |                           | DefinedCOA*                |          |
 |                           | StartTime?                 |          |
 |                           | EndTime?                   |          |
 |                           | Contact?                   |          |
 +---------------------------+----------------------------+----------+
 | System                    | category?                  | 3.17     |
 |                           | ext-category?              |          |
 |                           | interface?                 |          |
 |                           | spoofed?                   |          |
 |                           | virtual?                   |          |
 |                           | ownership?                 |          |
 |                           | ext-ownership?             |          |
 |                           | restriction?               |          |
 |                           | ext-restriction?           |          |
 |                           | Node                       |          |
 |                           | NodeRole*                  |          |
 |                           | Service*                   |          |
 |                           | OperatingSystem*           |          |
 |                           | Counter*                   |          |
 |                           | AssetID*                   |          |
 |                           | Description*               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Node                      | DomainData*                | 3.18     |
 |                           | Address*                   |          |
 |                           | PostalAddress?             |          |
 |                           | Location*                  |          |
 |                           | Counter*                   |          |
 +---------------------------+----------------------------+----------+
 | Address                   | value                      | 3.18.1   |
 |                           | category                   |          |
 |                           | ext-category?              |          |
 |                           | vlan-name?                 |          |
 |                           | vlan-num?                  |          |
 |                           | observable-id?             |          |
 +---------------------------+----------------------------+----------+
 | NodeRole                  | category                   | 3.18.2   |
 |                           | ext-category?              |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | Counter                   | value                      | 3.18.3   |
 |                           | type                       |          |
 |                           | ext-type?                  |          |
 |                           | unit                       |          |
 |                           | ext-unit?                  |          |
 |                           | meaning?                   |          |
 |                           | duration?                  |          |
 |                           | ext-duration?              |          |
 +---------------------------+----------------------------+----------+
 | DomainData                | system-status              | 3.19     |
 |                           | ext-system-status?         |          |
 |                           | domain-status              |          |
 |                           | ext-domain-status?         |          |
 |                           | observable-id?             |          |
 |                           | Name                       |          |
 |                           | DateDomainWasChecked?      |          |
 |                           | RegistrationDate?          |          |
 |                           | ExpirationDate?            |          |
 |                           | RelatedDNS*                |          |
 |                           | Nameservers*               |          |
 |                           | DomainContacts?            |          |
 +---------------------------+----------------------------+----------+
 | Nameservers               | Server                     | 3.19.1   |
 |                           | Address*                   |          |
 +---------------------------+----------------------------+----------+
 | DomainContacts            | SameDomainContact?         | 3.19.2   |
 |                           | Contact+                   |          |
 +---------------------------+----------------------------+----------+
 | Service                   | ip-protocol?               | 3.20     |
 |                           | observable-id?             |          |
 |                           | ServiceName?               |          |
 |                           | Port?                      |          |
 |                           | Portlist?                  |          |
 |                           | ProtoCode?                 |          |
 |                           | ProtoType?                 |          |
 |                           | ProtoField?                |          |
 |                           | ApplicationHeaderField*    |          |
 |                           | EmailData?                 |          |
 |                           | Application?               |          |
 +---------------------------+----------------------------+----------+
 | ServiceName               | IANAService?               | 3.20.1   |
 |                           | URL*                       |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | EmailData                 | observable-id?             | 3.21     |
 |                           | EmailTo*                   |          |
 |                           | EmailFrom?                 |          |
 |                           | EmailSubject?              |          |
 |                           | EmailX-Mailer?             |          |
 |                           | EmailHeaderField*          |          |
 |                           | EmailHeaders?              |          |
 |                           | EmailBody?                 |          |
 |                           | EmailMessage?              |          |
 |                           | HashData*                  |          |
 |                           | Signature*                 |          |
 +---------------------------+----------------------------+----------+
 | RecordData                | restriction?               | 3.22.1   |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | DateTime?                  |          |
 |                           | Description*               |          |
 |                           | Application?               |          |
 |                           | RecordPattern*             |          |
 |                           | RecordItem*                |          |
 |                           | URL*                       |          |
 |                           | FileData*                  |          |
 |                           |WindowsRegistryKeysModified*|          |
 |                           | CertificateData*           |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | RecordPattern             | type                       | 3.22.2   |
 |                           | ext-type?                  |          |
 |                           | offset?                    |          |
 |                           | offsetunit?                |          |
 |                           | ext-offsetunit?            |          |
 |                           | instance?                  |          |
 |                           | value                      |          |
 +---------------------------+----------------------------+----------+
 |WindowsRegistryKeysModified| observable-id?             | 3.23     |
 |                           | Key+                       |          |
 +---------------------------+----------------------------+----------+
 | Key                       | registryaction?            | 3.23.1   |
 |                           | ext-registryaction?        |          |
 |                           | observable-id?             |          |
 |                           | KeyName                    |          |
 |                           | KeyValue?                  |          |
 +---------------------------+----------------------------+----------+
 | CertificateData           | restriction?               | 3.24     |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | Certificate+               |          |
 +---------------------------+----------------------------+----------+
 | Certificate               | observable-id?             | 3.24.1   |
 |                           | X509Data                   |          |
 |                           | Description*               |          |
 +---------------------------+----------------------------+----------+
 | FileData                  | restriction?               | 3.25     |
 |                           | ext-restriction?           |          |
 |                           | observable-id?             |          |
 |                           | File+                      |          |
 +---------------------------+----------------------------+----------+
 | File                      | observable-id?             | 3.25.1   |
 |                           | FileName?                  |          |
 |                           | FileSize?                  |          |
 |                           | FileType?                  |          |
 |                           | URL*                       |          |
 |                           | HashData?                  |          |
 |                           | Signature*                 |          |
 |                           | AssociatedSoftware?        |          |
 |                           | FileProperties*            |          |
 +---------------------------+----------------------------+----------+
 | HashData                  | scope                      | 3.26     |
 |                           | HashTargetID?              |          |
 |                           | Hash*                      |          |
 |                           | FuzzyHash*                 |          |
 +---------------------------+----------------------------+----------+
 | Hash                      | DigestMethod               | 3.26.1   |
 |                           | DigestValue                |          |
 |                           | CanonicalizationMethod?    |          |
 |                           | Application?               |          |
 +---------------------------+----------------------------+----------+
 | FuzzyHash                 | FuzzyHashValue+            | 3.26.2   |
 |                           | Application?               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | Indicator                 | restriction?               | 3.29     |
 |                           | ext-restriction?           |          |
 |                           | IndicatorID                |          |
 |                           | AlternativeIndicatorID*    |          |
 |                           | Description*               |          |
 |                           | StartTime?                 |          |
 |                           | EndTime?                   |          |
 |                           | Confidence?                |          |
 |                           | Contact*                   |          |
 |                           | Observable?                |          |
 |                           | uid-ref?                   |          |
 |                           | IndicatorExpression?       |          |
 |                           | IndicatorReference?        |          |
 |                           | NodeRole*                  |          |
 |                           | AttackPhase*               |          |
 |                           | Reference*                 |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | IndicatorID               | id                         | 3.29.1   |
 |                           | name                       |          |
 |                           | version                    |          |
 +---------------------------+----------------------------+----------+
 | AlternativeIndicatorID    | restriction?               | 3.29.2   |
 |                           | ext-restriction?           |          |
 |                           | IndicatorID+               |          |
 +---------------------------+----------------------------+----------+
 | Observable                | restriction?               | 3.29.3   |
 |                           | ext-restriction?           |          |
 |                           | System?                    |          |
 |                           | Address?                   |          |
 |                           | DomainData?                |          |
 |                           | Service?                   |          |
 |                           | EmailData?                 |          |
 |                           |WindowsRegistryKeysModified?|          |
 |                           | FileData?                  |          |
 |                           | CertificateData?           |          |
 |                           | RegistryHandle?            |          |
 |                           | RecordData?                |          |
 |                           | EventData?                 |          |
 |                           | Incident?                  |          |
 |                           | Expectation?               |          |
 |                           | Reference?                 |          |
 |                           | Assessment?                |          |
 |                           | DetectionPattern?          |          |
 |                           | HistoryItem?               |          |
 |                           | BulkObservable?            |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | BulkObservable            | type?                      | 3.29.3.1 |
 |                           | ext-type?                  |          |
 |                           | BulkObservableFormat?      |          |
 |                           | BulkObservableList         |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | BulkObservableFormat      | Hash?                      |3.29.3.1.1|
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | IndicatorExpression       | operator?                  | 3.29.4   |
 |                           | ext-operator?              |          |
 |                           | IndicatorExpression*       |          |
 |                           | Observable*                |          |
 |                           | uid-ref*                   |          |
 |                           | IndicatorReference*        |          |
 |                           | Confidence?                |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
 | IndicatorReference        | uid-ref?                   | 3.29.7   |
 |                           | euid-ref?                  |          |
 |                           | version?                   |          |
 +---------------------------+----------------------------+----------+
 | AttackPhase               | AttackPhaseID*             | 3.29.8   |
 |                           | URL*                       |          |
 |                           | Description*               |          |
 |                           | AdditionalData*            |          |
 +---------------------------+----------------------------+----------+
                         Table 3: IODEF Classes

3.2. Mapping between JSON and XML IODEF

  • Attributes and elements of each class in the XML IODEF document

are both presented as JSON attributes in the JSON IODEF document,

    and the order of their appearances is ignored.
  • Flow class is deleted, and classes with its instances now directly

have instances of the EventData class that used to belong to the

    Flow class.
  • ApplicationHeader class is deleted, and classes with its instances

now directly have instances of the ApplicationHeaderField class

    that used to belong to the ApplicationHeader class.
  • SignatureData class is deleted, and classes with its instances now

directly have instances of the Signature class that used to belong

    to the SignatureData class.
  • IndicatorData class is deleted, and classes with its instances now

directly have instances of the Indicator class that used to belong

    to the IndicatorData class.
  • ObservableReference class is deleted, and classes with its

instances now directly have uid-ref as an element.

  • Record class is deleted, and classes with its instances now

directly have instances of the RecordData class that used to

    belong to the Record class.
  • The MLStringType was modified to support simple string by allowing

the type to have not only a predefined object type but also a text

    type, in order to allow simple descriptions of elements of the
    type.  Implementations need to be capable of parsing an
    MLStringType that could take the form of both text and an object.
  • The elements of the ML_STRING type in the XML IODEF document are

presented as either STRING type or ML_STRING type in the JSON

    IODEF document.  When converting from the XML IODEF document to
    the JSON IODEF document, or vice versa, the information contained
    in the original data of the ML_STRING type must be preserved.
    When STRING is used instead of ML_STRING, parsers can assume that
    its "xml:lang" is set to "en".
  • Data models of the extension classes defined by [RFC7203] and

referenced by [RFC7970] are represented by the STRUCTUREDINFO

    class defined in this document.
  • Signature, X509Data, and RawData are encoded using base64 encoding

for JSON IODEF and binary representation for CBOR IODEF to

    represent them as BYTE objects.
  • EmailBody represents a whole message body including MIME structure

in the same manner defined in [RFC7970]. In case of an email

    composed of a MIME multipart, the EmailBody contains multiple body
    parts separated by boundary strings.
  • The "ipv6-net-mask" type attribute of the BulkObservable class

remains available for the purpose of backward compatibility, but

    the use of this attribute is not recommended because IPv6 does not
    use netmask any more.
  • ENUM values in this document are extensible and managed by IANA,

which is also the case in [RFC7970]. The values in the table are

    used both by [RFC7970] implementations and by their JSON (and
    CBOR) bindings as specified by this document.
  • This document uses JSON's "number" type to represent integers that

only have full precision for integer values between -2^(53) and

    2^(53).  When dealing with integers outside the range, this issue
    needs to be considered.
  • Binaries are encoded in bytes. Note that XML IODEF in [RFC7970]

uses HEXBIN due to the incapability of XML for embedding binaries

    as they are.

4. Examples

 This section provides examples of IODEF documents.  These examples do
 not represent the full capabilities of the data model or the only way
 to encode particular information.

4.1. Minimal Example

 A document containing only the mandatory elements and attributes is
 shown below in JSON and CBOR, respectively.
 {
   "version": "2.0",
   "lang": "en",
   "Incident": [{
       "purpose": "reporting",
       "restriction": "private",
       "IncidentID": {
         "id": "492382",
         "name": "csirt.example.com"
       },
       "GenerationTime": "2015-07-18T09:00:00-05:00",
       "Contact": [{
           "type": "organization",
           "role": "creator",
           "Email": [{"EmailTo": "contact@csirt.example.com"}]
       }]
   }]
 }
                  Figure 1: A Minimal Example in JSON
 A3                                    # map(3)
    37                                 # negative(23)
    63                                 # text(3)
       322E30                          # "2.0"
    36                                 # negative(22)
    62                                 # text(2)
       656E                            # "en"
    32                                 # negative(18)
    81                                 # array(1)
       A5                              # map(5)
          21                           # negative(1)
          69                           # text(9)
             7265706F7274696E67        # "reporting"
          29                           # negative(9)
          67                           # text(7)
             70726976617465            # "private"
          02                           # unsigned(2)
          A2                           # map(2)
             12                        # unsigned(18)
             66                        # text(6)
                343932333832           # "492382"
             2E                        # negative(14)
             71                        # text(17)
                63736972742E6578616D706C652E636F6D
                                       # "csirt.example.com"
          0A                           # unsigned(10)
          78 19                        # text(25)
             323031352D30372D31385430393A30303A30302D30353A3030
                                       # "2015-07-18T09:00:00
                                       # -05:00"
          0E                           # unsigned(14)
          81                           # array(1)
             A3                        # map(3)
                18 1C                  # unsigned(28)
                6C                     # text(12)
                   6F7267616E697A6174696F6E # "organization"
                18 1A                  # unsigned(26)
                67                     # text(7)
                   63726561746F72      # "creator"
                18 22                  # unsigned(34)
                81                     # array(1)
                   A1                  # map(1)
                      18 29            # unsigned(41)
                      78 19            # text(25)
                         636F6E746163744063736972742E6578616D70
                         6C652E636F6D
                                       # "contact@csirt.example.com"
                  Figure 2: A Minimal Example in CBOR

4.2. Indicators from a Campaign

 An example of C2 domains from a given campaign is shown below in JSON
 and CBOR, respectively.
 {
   "version": "2.0",
   "lang": "en",
   "Incident": [{
     "purpose": "watch",
     "restriction": "green",
     "IncidentID": {
       "id": "897923",
       "name": "csirt.example.com"
     },
     "RelatedActivity": [{
       "ThreatActor": [{
         "ThreatActorID": ["TA-12-AGGRESSIVE-BUTTERFLY"],
         "Description": ["Aggressive Butterfly"]}],
       "Campaign": [{
         "CampaignID": ["C-2015-59405"],
         "Description": ["Orange Giraffe"]
       }]
     }],
     "GenerationTime": "2015-10-02T11:18:00-05:00",
     "Description": ["Summarizes the Indicators of Compromise for the
       Orange Giraffe campaign of the Aggressive Butterfly crime
       gang."],
     "Assessment": [{
       "Impact": [{"BusinessImpact": {"type": "breach-proprietary"}}]
     }],
     "Contact": [{
       "type": "organization",
       "role": "creator",
       "ContactName": ["CSIRT for example.com"],
       "Email": [{
         "EmailTo": "contact@csirt.example.com"
       }]
     }],
     "Indicator": [{
       "IndicatorID": {
         "id": "G90823490",
         "name": "csirt.example.com",
         "version": "1"
       },
       "Description": ["C2 domains"],
       "StartTime": "2014-12-02T11:18:00-05:00",
       "Observable": {
         "BulkObservable": {
           "type": "domain-name",
           "BulkObservableList": "kj290023j09r34.example.com"}
       }
     }]
   }]
 }
              Figure 3: Indicators from a Campaign in JSON
 A3                                      # map(3)
    37                                   # negative(23)
    63                                   # text(3)
       322E30                            # "2.0"
    36                                   # negative(22)
    62                                   # text(2)
       656E                              # "en"
    32                                   # negative(18)
    81                                   # array(1)
       A9                                # map(9)
          21                             # negative(1)
          65                             # text(5)
             7761746368                  # "watch"
          29                             # negative(9)
          65                             # text(5)
             677265656E                  # "green"
          02                             # unsigned(2)
          A2                             # map(2)
             12                          # unsigned(18)
             66                          # text(6)
                383937393233             # "897923"
             2E                          # negative(14)
             71                          # text(17)
                63736972742E6578616D706C652E636F6D
                                         # "csirt.example.com"
          04                             # unsigned(4)
          81                             # array(1)
             A2                          # map(2)
                14                       # unsigned(20)
                81                       # array(1)
                   A2                    # map(2)
                      18 18              # unsigned(24)
                      81                 # array(1)
                         78 1A           # text(26)
                            54412D31322D414747524553534956452D4
                            25554544552464C59
                                         # "TA-12-AGGRESSIVE
                                         # -BUTTERFLY"
                      24                 # negative(4)
                      81                 # array(1)
                         74              # text(20)
                            41676772657373697665204275747465726
                            66C79
                                         # "Aggressive Butterfly"
                15                       # unsigned(21)
                81                       # array(1)
                   A2                    # map(2)
                      18 19              # unsigned(25)
                      81                 # array(1)
                         6C              # text(12)
                            432D323031352D3539343035
                                         # "C-2015-59405"
                      24                 # negative(4)
                      81                 # array(1)
                         6E              # text(14)
                            4F72616E67652047697261666665
  # "Orange Giraffe"
          0A                             # unsigned(10)
          78 19                          # text(25)
             323031352D31302D30325431313A31383A30302D30353A3030
                                        # "2015-10-02T11:18:00-05:00"
          24                             # negative(4)
          81                             # array(1)
             78 6F                       # text(111)
                53756D6D6172697A65732074686520496E64696361746F7
                273206F6620436F6D70726F6D69736520666F7220746865
                204F72616E676520476972616666652063616D706169676
                E206F662074686520416767726573736976652042757474
                6572666C79206372696D652067616E672E
                                         # "Summarizes the Indicators
                                         # of Compromise for the
                                         # Orange Giraffe campaign
                                         # of the Aggressive
                                         # Butterfly crime gang."
          0C                             # unsigned(12)
          81                             # array(1)
             A1                          # map(1)
                18 3F                    # unsigned(63)
                81                       # array(1)
                   A1                    # map(1)
                      18 41              # unsigned(65)
                      A1                 # map(1)
                         18 1C           # unsigned(28)
                         72              # text(18)
                            6272656163682D70726F7072696574617279
                                         # "breach-proprietary"
          0E                             # unsigned(14)
          81                             # array(1)
             A4                          # map(4)
                18 1C                    # unsigned(28)
                6C                       # text(12)
                   6F7267616E697A6174696F6E
                                         # "organization"
                18 1A                    # unsigned(26)
                67                       # text(7)
                   63726561746F72        # "creator"
                18 1E                    # unsigned(30)
                81                       # array(1)
                   75                    # text(21)
                      435349525420666F72206578616D706C652E636F6D
                                         # "CSIRT for example.com"
                18 22                    # unsigned(34)
                81                       # array(1)
                   A1                    # map(1)
                      18 29              # unsigned(41)
                      78 19              # text(25)
                         636F6E746163744063736972742E6578616D70
                         6C652E636F6D
                                        # "contact@csirt.example.com"
          10                             # unsigned(16)
          81                             # array(1)
             A4                          # map(4)
                16                       # unsigned(22)
                A3                       # map(3)
                   12                    # unsigned(18)
                   69                    # text(9)
                      473930383233343930 # "G90823490"
                   2E                    # negative(14)
                   71                    # text(17)
                      63736972742E6578616D706C652E636F6D
                                         # "csirt.example.com"
                   37                    # negative(23)
                   61                    # text(1)
                      31                 # "1"
                24                       # negative(4)
                81                       # array(1)
                   6A                    # text(10)
                      433220646F6D61696E73 # "C2 domains"
                06                       # unsigned(6)
                78 19                    # text(25)
                   323031342D31322D30325431313A31383A30302D30353A3030
                                        # "2014-12-02T11:18:00-05:00"
                18 AB                    # unsigned(171)
                A1                       # map(1)
                   18 B0                 # unsigned(176)
                   A2                    # map(2)
                      18 1C              # unsigned(28)
                      6B                 # text(11)
                         646F6D61696E2D6E616D65
                                         # "domain-name"
                      18 B2              # unsigned(178)
                      78 1A              # text(26)
                         6B6A3239303032336A30397233342E6578616D
                         706C652E636F6D
                                       # "kj290023j09r34.example.com"
              Figure 4: Indicators from a Campaign in CBOR

5. Mapkeys

 The mapkeys are provided in Table 4 for minimizing the CBOR size.
 +===================================+=========+
 | mapkey                            | cborkey |
 +===================================+=========+
 | iodef-version                     | -24     |
 +-----------------------------------+---------+
 | iodef-lang                        | -23     |
 +-----------------------------------+---------+
 | iodef-format-id                   | -22     |
 +-----------------------------------+---------+
 | iodef-private-enum-name           | -21     |
 +-----------------------------------+---------+
 | iodef-private-enum-id             | -20     |
 +-----------------------------------+---------+
 | iodef-Incident                    | -19     |
 +-----------------------------------+---------+
 | iodef-AdditionalData              | -18     |
 +-----------------------------------+---------+
 | iodef-value                       | -17     |
 +-----------------------------------+---------+
 | iodef-translation-id              | -16     |
 +-----------------------------------+---------+
 | iodef-name                        | -15     |
 +-----------------------------------+---------+
 | iodef-dtype                       | -14     |
 +-----------------------------------+---------+
 | iodef-ext-dtype                   | -13     |
 +-----------------------------------+---------+
 | iodef-meaning                     | -12     |
 +-----------------------------------+---------+
 | iodef-formatid                    | -11     |
 +-----------------------------------+---------+
 | iodef-restriction                 | -10     |
 +-----------------------------------+---------+
 | iodef-ext-restriction             | -9      |
 +-----------------------------------+---------+
 | iodef-observable-id               | -8      |
 +-----------------------------------+---------+
 | iodef-SoftwareReference           | -7      |
 +-----------------------------------+---------+
 | iodef-URL                         | -6      |
 +-----------------------------------+---------+
 | iodef-Description                 | -5      |
 +-----------------------------------+---------+
 | iodef-spec-name                   | -4      |
 +-----------------------------------+---------+
 | iodef-ext-spec-name               | -3      |
 +-----------------------------------+---------+
 | iodef-purpose                     | -2      |
 +-----------------------------------+---------+
 | iodef-ext-purpose                 | -1      |
 +-----------------------------------+---------+
 | iodef-status                      | 0       |
 +-----------------------------------+---------+
 | iodef-ext-status                  | 1       |
 +-----------------------------------+---------+
 | iodef-IncidentID                  | 2       |
 +-----------------------------------+---------+
 | iodef-AlternativeID               | 3       |
 +-----------------------------------+---------+
 | iodef-RelatedActivity             | 4       |
 +-----------------------------------+---------+
 | iodef-DetectTime                  | 5       |
 +-----------------------------------+---------+
 | iodef-StartTime                   | 6       |
 +-----------------------------------+---------+
 | iodef-EndTime                     | 7       |
 +-----------------------------------+---------+
 | iodef-RecoveryTime                | 8       |
 +-----------------------------------+---------+
 | iodef-ReportTime                  | 9       |
 +-----------------------------------+---------+
 | iodef-GenerationTime              | 10      |
 +-----------------------------------+---------+
 | iodef-Discovery                   | 11      |
 +-----------------------------------+---------+
 | iodef-Assessment                  | 12      |
 +-----------------------------------+---------+
 | iodef-Method                      | 13      |
 +-----------------------------------+---------+
 | iodef-Contact                     | 14      |
 +-----------------------------------+---------+
 | iodef-EventData                   | 15      |
 +-----------------------------------+---------+
 | iodef-Indicator                   | 16      |
 +-----------------------------------+---------+
 | iodef-History                     | 17      |
 +-----------------------------------+---------+
 | iodef-id                          | 18      |
 +-----------------------------------+---------+
 | iodef-instance                    | 19      |
 +-----------------------------------+---------+
 | iodef-ThreatActor                 | 20      |
 +-----------------------------------+---------+
 | iodef-Campaign                    | 21      |
 +-----------------------------------+---------+
 | iodef-IndicatorID                 | 22      |
 +-----------------------------------+---------+
 | iodef-Confidence                  | 23      |
 +-----------------------------------+---------+
 | iodef-ThreatActorID               | 24      |
 +-----------------------------------+---------+
 | iodef-CampaignID                  | 25      |
 +-----------------------------------+---------+
 | iodef-role                        | 26      |
 +-----------------------------------+---------+
 | iodef-ext-role                    | 27      |
 +-----------------------------------+---------+
 | iodef-type                        | 28      |
 +-----------------------------------+---------+
 | iodef-ext-type                    | 29      |
 +-----------------------------------+---------+
 | iodef-ContactName                 | 30      |
 +-----------------------------------+---------+
 | iodef-ContactTitle                | 31      |
 +-----------------------------------+---------+
 | iodef-RegistryHandle              | 32      |
 +-----------------------------------+---------+
 | iodef-PostalAddress               | 33      |
 +-----------------------------------+---------+
 | iodef-Email                       | 34      |
 +-----------------------------------+---------+
 | iodef-Telephone                   | 35      |
 +-----------------------------------+---------+
 | iodef-Timezone                    | 36      |
 +-----------------------------------+---------+
 | iodef-handle                      | 37      |
 +-----------------------------------+---------+
 | iodef-registry                    | 38      |
 +-----------------------------------+---------+
 | iodef-ext-registry                | 39      |
 +-----------------------------------+---------+
 | iodef-PAddress                    | 40      |
 +-----------------------------------+---------+
 | iodef-EmailTo                     | 41      |
 +-----------------------------------+---------+
 | iodef-TelephoneNumber             | 42      |
 +-----------------------------------+---------+
 | iodef-source                      | 43      |
 +-----------------------------------+---------+
 | iodef-ext-source                  | 44      |
 +-----------------------------------+---------+
 | iodef-DetectionPattern            | 45      |
 +-----------------------------------+---------+
 | iodef-DetectionConfiguration      | 46      |
 +-----------------------------------+---------+
 | iodef-Application                 | 47      |
 +-----------------------------------+---------+
 | iodef-Reference                   | 48      |
 +-----------------------------------+---------+
 | iodef-AttackPattern               | 49      |
 +-----------------------------------+---------+
 | iodef-Vulnerability               | 50      |
 +-----------------------------------+---------+
 | iodef-Weakness                    | 51      |
 +-----------------------------------+---------+
 | iodef-SpecID                      | 52      |
 +-----------------------------------+---------+
 | iodef-ext-SpecID                  | 53      |
 +-----------------------------------+---------+
 | iodef-ContentID                   | 54      |
 +-----------------------------------+---------+
 | iodef-RawData                     | 55      |
 +-----------------------------------+---------+
 | iodef-Platform                    | 56      |
 +-----------------------------------+---------+
 | iodef-Scoring                     | 57      |
 +-----------------------------------+---------+
 | iodef-ReferenceName               | 58      |
 +-----------------------------------+---------+
 | iodef-specIndex                   | 59      |
 +-----------------------------------+---------+
 | iodef-ID                          | 60      |
 +-----------------------------------+---------+
 | iodef-occurrence                  | 61      |
 +-----------------------------------+---------+
 | iodef-IncidentCategory            | 62      |
 +-----------------------------------+---------+
 | iodef-Impact                      | 63      |
 +-----------------------------------+---------+
 | iodef-SystemImpact                | 64      |
 +-----------------------------------+---------+
 | iodef-BusinessImpact              | 65      |
 +-----------------------------------+---------+
 | iodef-TimeImpact                  | 66      |
 +-----------------------------------+---------+
 | iodef-MonetaryImpact              | 67      |
 +-----------------------------------+---------+
 | iodef-IntendedImpact              | 68      |
 +-----------------------------------+---------+
 | iodef-Counter                     | 69      |
 +-----------------------------------+---------+
 | iodef-MitigatingFactor            | 70      |
 +-----------------------------------+---------+
 | iodef-Cause                       | 71      |
 +-----------------------------------+---------+
 | iodef-severity                    | 72      |
 +-----------------------------------+---------+
 | iodef-completion                  | 73      |
 +-----------------------------------+---------+
 | iodef-ext-severity                | 74      |
 +-----------------------------------+---------+
 | iodef-metric                      | 75      |
 +-----------------------------------+---------+
 | iodef-ext-metric                  | 76      |
 +-----------------------------------+---------+
 | iodef-duration                    | 77      |
 +-----------------------------------+---------+
 | iodef-ext-duration                | 78      |
 +-----------------------------------+---------+
 | iodef-currency                    | 79      |
 +-----------------------------------+---------+
 | iodef-rating                      | 80      |
 +-----------------------------------+---------+
 | iodef-ext-rating                  | 81      |
 +-----------------------------------+---------+
 | iodef-HistoryItem                 | 82      |
 +-----------------------------------+---------+
 | iodef-action                      | 83      |
 +-----------------------------------+---------+
 | iodef-ext-action                  | 84      |
 +-----------------------------------+---------+
 | iodef-DateTime                    | 85      |
 +-----------------------------------+---------+
 | iodef-DefinedCOA                  | 86      |
 +-----------------------------------+---------+
 | iodef-System                      | 87      |
 +-----------------------------------+---------+
 | iodef-Expectation                 | 88      |
 +-----------------------------------+---------+
 | iodef-RecordData                  | 89      |
 +-----------------------------------+---------+
 | iodef-category                    | 90      |
 +-----------------------------------+---------+
 | iodef-ext-category                | 91      |
 +-----------------------------------+---------+
 | iodef-interface                   | 92      |
 +-----------------------------------+---------+
 | iodef-spoofed                     | 93      |
 +-----------------------------------+---------+
 | iodef-virtual                     | 94      |
 +-----------------------------------+---------+
 | iodef-ownership                   | 95      |
 +-----------------------------------+---------+
 | iodef-ext-ownership               | 96      |
 +-----------------------------------+---------+
 | iodef-Node                        | 97      |
 +-----------------------------------+---------+
 | iodef-NodeRole                    | 98      |
 +-----------------------------------+---------+
 | iodef-Service                     | 99      |
 +-----------------------------------+---------+
 | iodef-OperatingSystem             | 100     |
 +-----------------------------------+---------+
 | iodef-AssetID                     | 101     |
 +-----------------------------------+---------+
 | iodef-DomainData                  | 102     |
 +-----------------------------------+---------+
 | iodef-Address                     | 103     |
 +-----------------------------------+---------+
 | iodef-Location                    | 104     |
 +-----------------------------------+---------+
 | iodef-vlan-name                   | 105     |
 +-----------------------------------+---------+
 | iodef-vlan-num                    | 106     |
 +-----------------------------------+---------+
 | iodef-unit                        | 107     |
 +-----------------------------------+---------+
 | iodef-ext-unit                    | 108     |
 +-----------------------------------+---------+
 | iodef-system-status               | 109     |
 +-----------------------------------+---------+
 | iodef-ext-system-status           | 110     |
 +-----------------------------------+---------+
 | iodef-domain-status               | 111     |
 +-----------------------------------+---------+
 | iodef-ext-domain-status           | 112     |
 +-----------------------------------+---------+
 | iodef-Name                        | 113     |
 +-----------------------------------+---------+
 | iodef-DateDomainWasChecked        | 114     |
 +-----------------------------------+---------+
 | iodef-RegistrationDate            | 115     |
 +-----------------------------------+---------+
 | iodef-ExpirationDate              | 116     |
 +-----------------------------------+---------+
 | iodef-RelatedDNS                  | 117     |
 +-----------------------------------+---------+
 | iodef-NameServers                 | 118     |
 +-----------------------------------+---------+
 | iodef-DomainContacts              | 119     |
 +-----------------------------------+---------+
 | iodef-Server                      | 120     |
 +-----------------------------------+---------+
 | iodef-SameDomainContact           | 121     |
 +-----------------------------------+---------+
 | iodef-ip-protocol                 | 122     |
 +-----------------------------------+---------+
 | iodef-ServiceName                 | 123     |
 +-----------------------------------+---------+
 | iodef-Port                        | 124     |
 +-----------------------------------+---------+
 | iodef-Portlist                    | 125     |
 +-----------------------------------+---------+
 | iodef-ProtoCode                   | 126     |
 +-----------------------------------+---------+
 | iodef-ProtoType                   | 127     |
 +-----------------------------------+---------+
 | iodef-ProtoField                  | 128     |
 +-----------------------------------+---------+
 | iodef-ApplicationHeaderField      | 129     |
 +-----------------------------------+---------+
 | iodef-EmailData                   | 130     |
 +-----------------------------------+---------+
 | iodef-IANAService                 | 131     |
 +-----------------------------------+---------+
 | iodef-EmailFrom                   | 132     |
 +-----------------------------------+---------+
 | iodef-EmailSubject                | 133     |
 +-----------------------------------+---------+
 | iodef-EmailX-Mailer               | 134     |
 +-----------------------------------+---------+
 | iodef-EmailHeaderField            | 135     |
 +-----------------------------------+---------+
 | iodef-EmailHeaders                | 136     |
 +-----------------------------------+---------+
 | iodef-EmailBody                   | 137     |
 +-----------------------------------+---------+
 | iodef-EmailMessage                | 138     |
 +-----------------------------------+---------+
 | iodef-HashData                    | 139     |
 +-----------------------------------+---------+
 | iodef-Signature                   | 140     |
 +-----------------------------------+---------+
 | iodef-RecordPattern               | 141     |
 +-----------------------------------+---------+
 | iodef-RecordItem                  | 142     |
 +-----------------------------------+---------+
 | iodef-FileData                    | 143     |
 +-----------------------------------+---------+
 | iodef-WindowsRegistryKeysModified | 144     |
 +-----------------------------------+---------+
 | iodef-CertificateData             | 145     |
 +-----------------------------------+---------+
 | iodef-offset                      | 146     |
 +-----------------------------------+---------+
 | iodef-offsetunit                  | 147     |
 +-----------------------------------+---------+
 | iodef-ext-offsetunit              | 148     |
 +-----------------------------------+---------+
 | iodef-Key                         | 149     |
 +-----------------------------------+---------+
 | iodef-registryaction              | 150     |
 +-----------------------------------+---------+
 | iodef-ext-registryaction          | 151     |
 +-----------------------------------+---------+
 | iodef-KeyName                     | 152     |
 +-----------------------------------+---------+
 | iodef-KeyValue                    | 153     |
 +-----------------------------------+---------+
 | iodef-Certificate                 | 154     |
 +-----------------------------------+---------+
 | iodef-X509Data                    | 155     |
 +-----------------------------------+---------+
 | iodef-File                        | 156     |
 +-----------------------------------+---------+
 | iodef-FileName                    | 157     |
 +-----------------------------------+---------+
 | iodef-FileSize                    | 158     |
 +-----------------------------------+---------+
 | iodef-FileType                    | 159     |
 +-----------------------------------+---------+
 | iodef-AssociatedSoftware          | 160     |
 +-----------------------------------+---------+
 | iodef-FileProperties              | 161     |
 +-----------------------------------+---------+
 | iodef-scope                       | 162     |
 +-----------------------------------+---------+
 | iodef-HashTargetID                | 163     |
 +-----------------------------------+---------+
 | iodef-Hash                        | 164     |
 +-----------------------------------+---------+
 | iodef-FuzzyHash                   | 165     |
 +-----------------------------------+---------+
 | iodef-DigestMethod                | 166     |
 +-----------------------------------+---------+
 | iodef-DigestValue                 | 167     |
 +-----------------------------------+---------+
 | iodef-CanonicalizationMethod      | 168     |
 +-----------------------------------+---------+
 | iodef-FuzzyHashValue              | 169     |
 +-----------------------------------+---------+
 | iodef-AlternativeIndicatorID      | 170     |
 +-----------------------------------+---------+
 | iodef-Observable                  | 171     |
 +-----------------------------------+---------+
 | iodef-uid-ref                     | 172     |
 +-----------------------------------+---------+
 | iodef-IndicatorExpression         | 173     |
 +-----------------------------------+---------+
 | iodef-IndicatorReference          | 174     |
 +-----------------------------------+---------+
 | iodef-AttackPhase                 | 175     |
 +-----------------------------------+---------+
 | iodef-BulkObservable              | 176     |
 +-----------------------------------+---------+
 | iodef-BulkObservableFormat        | 177     |
 +-----------------------------------+---------+
 | iodef-BulkObservableList          | 178     |
 +-----------------------------------+---------+
 | iodef-operator                    | 179     |
 +-----------------------------------+---------+
 | iodef-ext-operator                | 180     |
 +-----------------------------------+---------+
 | iodef-euid-ref                    | 181     |
 +-----------------------------------+---------+
 | iodef-AttackPhaseID               | 182     |
 +-----------------------------------+---------+
                 Table 4: Mapkeys

6. The IODEF Data Model (CDDL)

 This section provides the IODEF data model.  Note that mapkeys are
 described at the beginning of the CDDL data model for better
 readability.
 start = iodef
 ;;; iodef.json: IODEF-Document
 iodef-version = -24
 iodef-lang = -23
 iodef-format-id = -22
 iodef-private-enum-name = -21
 iodef-private-enum-id = -20
 iodef-Incident = -19
 iodef-AdditionalData = -18
 iodef-value = -17
 iodef-translation-id = -16
 iodef-name = -15
 iodef-dtype = -14
 iodef-ext-dtype = -13
 iodef-meaning = -12
 iodef-formatid = -11
 iodef-restriction = -10
 iodef-ext-restriction = -9
 iodef-observable-id = -8
 iodef-SoftwareReference = -7
 iodef-URL = -6
 iodef-Description = -5
 iodef-spec-name = -4
 iodef-ext-spec-name = -3
 iodef-purpose = -2
 iodef-ext-purpose = -1
 iodef-status = 0
 iodef-ext-status = 1
 iodef-IncidentID = 2
 iodef-AlternativeID = 3
 iodef-RelatedActivity = 4
 iodef-DetectTime = 5
 iodef-StartTime = 6
 iodef-EndTime = 7
 iodef-RecoveryTime = 8
 iodef-ReportTime = 9
 iodef-GenerationTime = 10
 iodef-Discovery = 11
 iodef-Assessment = 12
 iodef-Method = 13
 iodef-Contact = 14
 iodef-EventData = 15
 iodef-Indicator = 16
 iodef-History = 17
 iodef-id = 18
 iodef-instance = 19
 iodef-ThreatActor = 20
 iodef-Campaign = 21
 iodef-IndicatorID = 22
 iodef-Confidence = 23
 iodef-ThreatActorID = 24
 iodef-CampaignID = 25
 iodef-role = 26
 iodef-ext-role = 27
 iodef-type = 28
 iodef-ext-type = 29
 iodef-ContactName = 30
 iodef-ContactTitle = 31
 iodef-RegistryHandle = 32
 iodef-PostalAddress = 33
 iodef-Email = 34
 iodef-Telephone = 35
 iodef-Timezone = 36
 iodef-handle = 37
 iodef-registry = 38
 iodef-ext-registry = 39
 iodef-PAddress = 40
 iodef-EmailTo = 41
 iodef-TelephoneNumber = 42
 iodef-source = 43
 iodef-ext-source = 44
 iodef-DetectionPattern = 45
 iodef-DetectionConfiguration = 46
 iodef-Application = 47
 iodef-Reference = 48
 iodef-AttackPattern = 49
 iodef-Vulnerability = 50
 iodef-Weakness = 51
 iodef-SpecID = 52
 iodef-ext-SpecID = 53
 iodef-ContentID = 54
 iodef-RawData = 55
 iodef-Platform = 56
 iodef-Scoring = 57
 iodef-ReferenceName = 58
 iodef-specIndex = 59
 iodef-ID = 60
 iodef-occurrence = 61
 iodef-IncidentCategory = 62
 iodef-Impact = 63
 iodef-SystemImpact = 64
 iodef-BusinessImpact = 65
 iodef-TimeImpact = 66
 iodef-MonetaryImpact = 67
 iodef-IntendedImpact = 68
 iodef-Counter = 69
 iodef-MitigatingFactor = 70
 iodef-Cause = 71
 iodef-severity = 72
 iodef-completion = 73
 iodef-ext-severity = 74
 iodef-metric = 75
 iodef-ext-metric = 76
 iodef-duration = 77
 iodef-ext-duration = 78
 iodef-currency = 79
 iodef-rating = 80
 iodef-ext-rating = 81
 iodef-HistoryItem = 82
 iodef-action = 83
 iodef-ext-action = 84
 iodef-DateTime = 85
 iodef-DefinedCOA = 86
 iodef-System = 87
 iodef-Expectation = 88
 iodef-RecordData = 89
 iodef-category = 90
 iodef-ext-category = 91
 iodef-interface = 92
 iodef-spoofed = 93
 iodef-virtual = 94
 iodef-ownership = 95
 iodef-ext-ownership = 96
 iodef-Node = 97
 iodef-NodeRole = 98
 iodef-Service = 99
 iodef-OperatingSystem = 100
 iodef-AssetID = 101
 iodef-DomainData = 102
 iodef-Address = 103
 iodef-Location = 104
 iodef-vlan-name = 105
 iodef-vlan-num = 106
 iodef-unit = 107
 iodef-ext-unit = 108
 iodef-system-status = 109
 iodef-ext-system-status = 110
 iodef-domain-status = 111
 iodef-ext-domain-status = 112
 iodef-Name = 113
 iodef-DateDomainWasChecked = 114
 iodef-RegistrationDate = 115
 iodef-ExpirationDate = 116
 iodef-RelatedDNS = 117
 iodef-NameServers = 118
 iodef-DomainContacts = 119
 iodef-Server = 120
 iodef-SameDomainContact = 121
 iodef-ip-protocol = 122
 iodef-ServiceName = 123
 iodef-Port = 124
 iodef-Portlist = 125
 iodef-ProtoCode = 126
 iodef-ProtoType = 127
 iodef-ProtoField = 128
 iodef-ApplicationHeaderField = 129
 iodef-EmailData = 130
 iodef-IANAService = 131
 iodef-EmailFrom = 132
 iodef-EmailSubject = 133
 iodef-EmailX-Mailer = 134
 iodef-EmailHeaderField = 135
 iodef-EmailHeaders = 136
 iodef-EmailBody = 137
 iodef-EmailMessage = 138
 iodef-HashData = 139
 iodef-Signature = 140
 iodef-RecordPattern = 141
 iodef-RecordItem = 142
 iodef-FileData = 143
 iodef-WindowsRegistryKeysModified = 144
 iodef-CertificateData = 145
 iodef-offset = 146
 iodef-offsetunit = 147
 iodef-ext-offsetunit = 148
 iodef-Key = 149
 iodef-registryaction = 150
 iodef-ext-registryaction = 151
 iodef-KeyName = 152
 iodef-KeyValue = 153
 iodef-Certificate = 154
 iodef-X509Data = 155
 iodef-File = 156
 iodef-FileName = 157
 iodef-FileSize = 158
 iodef-FileType = 159
 iodef-AssociatedSoftware = 160
 iodef-FileProperties = 161
 iodef-scope = 162
 iodef-HashTargetID = 163
 iodef-Hash = 164
 iodef-FuzzyHash = 165
 iodef-DigestMethod = 166
 iodef-DigestValue = 167
 iodef-CanonicalizationMethod = 168
 iodef-FuzzyHashValue = 169
 iodef-AlternativeIndicatorID = 170
 iodef-Observable = 171
 iodef-uid-ref = 172
 iodef-IndicatorExpression = 173
 iodef-IndicatorReference = 174
 iodef-AttackPhase = 175
 iodef-BulkObservable = 176
 iodef-BulkObservableFormat = 177
 iodef-BulkObservableList = 178
 iodef-operator = 179
 iodef-ext-operator = 180
 iodef-euid-ref = 181
 iodef-AttackPhaseID = 182
 iodef = {
  iodef-version => text,
  ? iodef-lang => lang,
  ? iodef-format-id => text
  ? iodef-private-enum-name => text,
  ? iodef-private-enum-id => text,
  iodef-Incident => [+ Incident],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 duration = "second" / "minute" / "hour" / "day" / "month" /
 "quarter" / "year" / "ext-value"
 lang = "" / text .regexp "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"
 restriction = "public" / "partner" / "need-to-know" / "private" /
 "default" / "white" / "green" / "amber" / "red" /
 "ext-value"
 SpecID = "urn:ietf:params:xml:ns:mile:mmdef:1.2" /  "private"
 IDtype = text .regexp "[a-zA-Z_][a-zA-Z0-9_.-]*"
 IDREFType = IDtype
 URLtype = uri
 TimeZonetype = text .regexp "Z|[\\+\\-](0[0-9]|1[0-4]):[0-5][0-9]"
 PortlistType = text .regexp
                         "[0-9]+(\\-[0-9]+)?(,[0-9]+(\\-[0-9]+)?)*"
 action = "nothing" / "contact-source-site" / "contact-target-site" /
 "contact-sender" / "investigate" / "block-host" /
 "block-network" / "block-port" / "rate-limit-host" /
 "rate-limit-network" / "rate-limit-port" / "redirect-traffic" /
 "honeypot" / "upgrade-software" / "rebuild-asset" /
 "harden-asset" / "remediate-other" / "status-triage" /
 "status-new-info" / "watch-and-report" / "training" /
 "defined-coa" / "other" / "ext-value"
 DATETIME = tdate
 BYTE = eb64legacy
 MLStringType = {
     iodef-value => text,
     ? iodef-lang => lang,
     ? iodef-translation-id => text
 } / text
 PositiveFloatType = float32 .gt 0
 PAddressType = MLStringType
 ExtensionType  = {
  iodef-value => text,
  ? iodef-name => text,
  iodef-dtype => "boolean" / "byte" / "bytes" / "character" /
 "date-time" / "ntpstamp" / "integer" / "portlist" / "real" /
 "string" / "file" / "path" / "frame" / "packet" / "ipv4-packet" /
 "json" / "ipv6-packet" / "url" / "csv" / "winreg" / "xml" /
 "ext-value"
 .default "string"
  ? iodef-ext-dtype => text,
  ? iodef-meaning => text,
  ? iodef-formatid => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
 }
 SoftwareType = {
  ? iodef-SoftwareReference => SoftwareReference,
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType]
 }
 SoftwareReference = {
  ? iodef-value => text,
  iodef-spec-name => "custom" / "cpe" / "swid" / "ext-value",
  ? iodef-ext-spec-name => text,
  ? iodef-dtype => "bytes" / "integer" / "real" / "string" / "xml" /
 "ext-value" .default "string",
  ? iodef-ext-dtype => text
 }
 Incident = {
  iodef-purpose => "traceback" / "mitigation" / "reporting" /
 "watch" / "other" / "ext-value",
  ? iodef-ext-purpose => text,
  ? iodef-status => "new" / "in-progress"/ "forwarded" / "resolved" /
 "future" / "ext-value",
  ? iodef-ext-status => text,
  ? iodef-lang => lang,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  iodef-IncidentID => IncidentID,
  ? iodef-AlternativeID => AlternativeID,
  ? iodef-RelatedActivity => [+ RelatedActivity],
  ? iodef-DetectTime => DATETIME,
  ? iodef-StartTime => DATETIME,
  ? iodef-EndTime => DATETIME,
  ? iodef-RecoveryTime => DATETIME,
  ? iodef-ReportTime => DATETIME,
  iodef-GenerationTime => DATETIME,
  ? iodef-Description => [+ MLStringType],
  ? iodef-Discovery => [+ Discovery],
  ? iodef-Assessment => [+ Assessment],
  ? iodef-Method => [+ Method],
  iodef-Contact => [+ Contact],
  ? iodef-EventData => [+ EventData],
  ? iodef-Indicator => [+ Indicator],
  ? iodef-History => History,
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 IncidentID = {
  iodef-id => text,
  iodef-name => text,
  ? iodef-instance => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text
 }
 AlternativeID = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  iodef-IncidentID => [+ IncidentID]
 }
 RelatedActivity = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-IncidentID => [+ IncidentID],
  ? iodef-URL => [+ URLtype],
  ? iodef-ThreatActor => [+ ThreatActor],
  ? iodef-Campaign => [+ Campaign],
  ? iodef-IndicatorID => [+ IndicatorID],
  ? iodef-Confidence => Confidence,
  ? iodef-Description => [+ text],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 ThreatActor = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-ThreatActorID => [+ text],
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 Campaign  = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-CampaignID => [+ text],
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 Contact = {
  iodef-role => "creator" / "reporter" / "admin" / "tech" /
 "provider" / "user" / "billing" / "legal" / "irt" / "abuse" /
 "cc" / "cc-irt" / "leo" / "vendor" / "vendor-support" /
 "victim" / "victim-notified" / "ext-value",
  ? iodef-ext-role => text,
  iodef-type => "person" / "organization" / "ext-value",
  ? iodef-ext-type => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-ContactName => [+ MLStringType],
  ? iodef-ContactTitle => [+ MLStringType],
  ? iodef-Description => [+ MLStringType],
  ? iodef-RegistryHandle => [+ RegistryHandle],
  ? iodef-PostalAddress => [+ PostalAddress],
  ? iodef-Email => [+ Email],
  ? iodef-Telephone => [+ Telephone],
  ? iodef-Timezone => TimeZonetype,
  ? iodef-Contact => [+ Contact],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 RegistryHandle = {
  iodef-handle => text,
  iodef-registry => "internic" / "apnic" / "arin" / "lacnic" /
 "ripe" / "afrinic" / "local" / "ext-value",
  ? iodef-ext-registry => text
 }
 PostalAddress = {
  ? iodef-type => "street" / "mailing" / "ext-value",
  ? iodef-ext-type => text,
  iodef-PAddress => PAddressType,
  ? iodef-Description => [+ MLStringType]
 }
 Email = {
  ? iodef-type => "direct" / "hotline" / "ext-value",
  ? iodef-ext-type => text,
  iodef-EmailTo => text,
  ? iodef-Description => [+ MLStringType]
 }
 Telephone = {
  ? iodef-type => "wired" / "mobile" / "fax" / "hotline" /
  "ext-value",
  ? iodef-ext-type => text,
  iodef-TelephoneNumber => text,
  ? iodef-Description => [+ MLStringType]
 }
 Discovery = {
  ? iodef-source => "nidps" / "hips" / "siem" / "av" /
 "third-party-monitoring" / "incident" / "os-log" /
 "application-log" / "device-log" / "network-flow" /
 "passive-dns" / "investigation" / "audit" /
 "internal-notification" / "external-notification" /
 "leo" / "partner" / "actor" / "unknown" / "ext-value",
  ? iodef-ext-source => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-Description => [+ MLStringType],
  ? iodef-Contact => [+ Contact],
  ? iodef-DetectionPattern => [+ DetectionPattern]
 }
 DetectionPattern = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  (iodef-Description => [+ MLStringType] //
                iodef-DetectionConfiguration => [+ text]),
  iodef-Application => SoftwareType
 }
 Method = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-Reference => [+ Reference],
  ? iodef-Description => [+ MLStringType],
  ? iodef-AttackPattern => [+ STRUCTUREDINFO],
  ? iodef-Vulnerability => [+ STRUCTUREDINFO],
  ? iodef-Weakness => [+ STRUCTUREDINFO],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 STRUCTUREDINFO = {
  iodef-SpecID => SpecID,
  ? iodef-ext-SpecID => text,
  ? iodef-ContentID => text,
  ? (iodef-RawData => [+ BYTE] // iodef-Reference => [+ Reference]),
  ? iodef-Platform => [+ Platform],
  ? iodef-Scoring => [+ Scoring]
 }
 Platform = {
     iodef-SpecID => SpecID,
     ? iodef-ext-SpecID => text,
     ? iodef-ContentID => text,
     ? iodef-RawData => [+ BYTE],
     ? iodef-Reference => [+ Reference]
 }
 Scoring = {
     iodef-SpecID => SpecID,
     ? iodef-ext-SpecID => text,
     ? iodef-ContentID => text,
     ? iodef-RawData => [+ BYTE],
     ? iodef-Reference => [+ Reference]
 }
 Reference = {
  ? iodef-observable-id => IDtype,
  ? iodef-ReferenceName => ReferenceName,
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType]
 }
 ReferenceName = {
  iodef-specIndex => integer,
  iodef-ID => IDtype
 }
 Assessment = {
  ? iodef-occurrence => "actual" / "potential",
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  ? iodef-IncidentCategory => [+ MLStringType],
  iodef-Impact => [+ {iodef-SystemImpact => SystemImpact} /
           {iodef-BusinessImpact => BusinessImpact /
           {iodef-TimeImpact => TimeImpact} /
           {iodef-MonetaryImpact => MonetaryImpact} /
           {iodef-IntendedImpact => BusinessImpact}],
  ? iodef-Counter => [+ Counter],
  ? iodef-MitigatingFactor => [+ MLStringType],
  ? iodef-Cause => [+ MLStringType],
  ? iodef-Confidence => Confidence,
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 SystemImpact = {
  ? iodef-severity => "low" / "medium" / "high",
  ? iodef-completion => "failed" / "succeeded",
  iodef-type => "takeover-account" / "takeover-service" /
 "takeover-system" / "cps-manipulation" / "cps-damage" /
 "availability-data" / "availability-account" /
 "availability-service" / "availability-system" / "damaged-system" /
 "damaged-data" / "breach-proprietary" / "breach-privacy" /
 "breach-credential" / "breach-configuration" / "integrity-data" /
 "integrity-configuration" / "integrity-hardware" /
 "traffic-redirection" / "monitoring-traffic" / "monitoring-host" /
 "policy" / "unknown" / "ext-value" .default "unknown",
  ? iodef-ext-type => text,
  ? iodef-Description => [+ MLStringType]
 }
 BusinessImpact = {
 ? iodef-severity => "none" / "low" / "medium" / "high" / "unknown" /
 "ext-value" .default "unknown",
  ? iodef-ext-severity => text,
  iodef-type => "breach-proprietary" / "breach-privacy" /
 "breach-credential" / "loss-of-integrity" / "loss-of-service" /
 "theft-financial" / "theft-service" / "degraded-reputation" /
 "asset-damage" / "asset-manipulation" / "legal" / "extortion" /
 "unknown" / "ext-value" .default "unknown",
  ? iodef-ext-type => text,
  ? iodef-Description => [+ MLStringType]
 }
 TimeImpact = {
  iodef-value => PositiveFloatType,
  ? iodef-severity => "low" / "medium" / "high",
  iodef-metric => "labor" / "elapsed" / "downtime" / "ext-value",
  ? iodef-ext-metric => text,
  ? iodef-duration => duration .default "hour",
  ? iodef-ext-duration => text
 }
 MonetaryImpact = {
  iodef-value => PositiveFloatType,
  ? iodef-severity => "low" / "medium" / "high",
  ? iodef-currency => text
 }
 Confidence = {
  iodef-value => float32,
  iodef-rating => "low" / "medium" / "high" / "numeric" / "unknown" /
 "ext-value",
  ? iodef-ext-rating => text
 }
 History = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  iodef-HistoryItem => [+ HistoryItem]
 }
 HistoryItem = {
  iodef-action => action .default "other",
  ? iodef-ext-action => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  iodef-DateTime => DATETIME,
  ? iodef-IncidentID => IncidentID,
  ? iodef-Contact => Contact,
  ? iodef-Description => [+ MLStringType],
  ? iodef-DefinedCOA => [+ text],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 EventData = {
  ? iodef-restriction => restriction .default "default",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  ? iodef-Description => [+ MLStringType],
  ? iodef-DetectTime => DATETIME,
  ? iodef-StartTime => DATETIME,
  ? iodef-EndTime => DATETIME,
  ? iodef-RecoveryTime => DATETIME,
  ? iodef-ReportTime => DATETIME,
  ? iodef-Contact => [+ Contact],
  ? iodef-Discovery => [+ Discovery],
  ? iodef-Assessment => Assessment,
  ? iodef-Method => [+ Method],
  ? iodef-System => [+ System],
  ? iodef-Expectation => [+ Expectation],
  ? iodef-RecordData => [+ RecordData],
  ? iodef-EventData => [+ EventData],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 Expectation = {
  ? iodef-action => action .default "other",
  ? iodef-ext-action => text,
  ? iodef-severity => "low" / "medium" / "high",
  ? iodef-restriction => restriction .default "default",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  ? iodef-Description => [+ MLStringType],
  ? iodef-DefinedCOA => [+ text],
  ? iodef-StartTime => DATETIME,
  ? iodef-EndTime => DATETIME,
  ? iodef-Contact => Contact
 }
 System = {
  ? iodef-category => "source" / "target" / "intermediate" /
 "sensor" / "infrastructure" / "ext-value",
  ? iodef-ext-category => text,
  ? iodef-interface => text,
  ? iodef-spoofed => "unknown" / "yes" / "no" .default "unknown",
  ? iodef-virtual => "yes" / "no" / "unknown" .default "unknown",
  ? iodef-ownership => "organization" / "personal" / "partner" /
 "customer" / "no-relationship" / "unknown" / "ext-value",
  ? iodef-ext-ownership => text,
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  iodef-Node => Node,
  ? iodef-NodeRole => [+ NodeRole],
  ? iodef-Service => [+ Service],
  ? iodef-OperatingSystem => [+ SoftwareType],
  ? iodef-Counter => [+ Counter],
  ? iodef-AssetID => [+ text],
  ? iodef-Description => [+ MLStringType],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 Node = {
  (iodef-DomainData => [+ DomainData] //
                                iodef-Address => [+ Address]),
  ? iodef-PostalAddress => PostalAddress,
  ? iodef-Location => [+ MLStringType],
  ? iodef-Counter => [+ Counter]
 }
 Address = {
  iodef-value => text,
  iodef-category => "asn" / "atm" / "e-mail" / "ipv4-addr" /
 "ipv4-net" / "ipv4-net-masked" / "ipv4-net-mask" / "ipv6-addr" /
 "ipv6-net" / "ipv6-net-masked" / "mac" / "site-uri" /
 "ext-value" .default "ipv6-addr",
  ? iodef-ext-category => text,
  ? iodef-vlan-name => text,
  ? iodef-vlan-num => integer,
  ? iodef-observable-id => IDtype
 }
 NodeRole = {
  iodef-category => "client" / "client-enterprise" /
 "client-partner" / "client-remote" / "client-kiosk" /
 "client-mobile" / "server-internal" / "server-public" /
 "www" / "mail" / "webmail" / "messaging" / "streaming" /
 "voice" / "file" / "ftp" / "p2p" / "name" / "directory" /
 "credential" / "print" / "application" / "database" /
 "backup" / "dhcp" / "assessment" / "source-control" /
 "config-management" / "monitoring" / "infra" / "infra-firewall" /
 "infra-router" / "infra-switch" / "camera" / "proxy" /
 "remote-access" / "log" / "virtualization" / "pos" /  "scada" /
 "scada-supervisory" / "sinkhole" / "honeypot" /
 "anomyzation" / "c2-server" / "malware-distribution" /
 "drop-server" / "hop-point" / "reflector" /
 "phishing-site" / "spear-phishing-site" / "recruiting-site" /
 "fraudulent-site" / "ext-value",
  ? iodef-ext-category => text,
  ? iodef-Description => [+ MLStringType]
 }
 Counter = {
  iodef-value => float32,
  iodef-type => "count" / "peak" / "average" / "ext-value",
  ? iodef-ext-type => text,
  iodef-unit => "byte" / "mbit" / "packet" / "flow" / "session" /
 "alert" / "message" / "event" / "host" / "site" / "organization" /
 "ext-value",
  ? iodef-ext-unit => text,
  ? iodef-meaning => text,
  ? iodef-duration => duration .default "hour",
  ? iodef-ext-duration => text
 }
 DomainData = {
  iodef-system-status => "spoofed" / "fraudulent" /
 "innocent-hacked" / "innocent-hijacked" / "unknown" / "ext-value",
  ? iodef-ext-system-status => text,
  iodef-domain-status => "reservedDelegation" / "assignedAndActive" /
 "assignedAndInactive" / "assignedAndOnHold" /
 "revoked" / "transferPending" / "registryLock" /
 "registrarLock" / "other" / "unknown" / "ext-value",
  ? iodef-ext-domain-status => text,
  ? iodef-observable-id => IDtype,
  iodef-Name => text,
  ? iodef-DateDomainWasChecked => DATETIME,
  ? iodef-RegistrationDate => DATETIME,
  ? iodef-ExpirationDate => DATETIME,
  ? iodef-RelatedDNS => [+ ExtensionType],
  ? iodef-NameServers => [+ NameServers],
  ? iodef-DomainContacts => DomainContacts
 }
 NameServers = {
  iodef-Server => text,
  iodef-Address => [+ Address]
 }
 DomainContacts = {
  (iodef-SameDomainContact => text // iodef-Contact => [+ Contact])
 }
 Service = {
  ? iodef-ip-protocol => integer,
  ? iodef-observable-id => IDtype,
  ? iodef-ServiceName => ServiceName,
  ? iodef-Port => integer,
  ? iodef-Portlist => PortlistType,
  ? iodef-ProtoCode => integer,
  ? iodef-ProtoType => integer,
  ? iodef-ProtoField => integer,
  ? iodef-ApplicationHeaderField => [+ ExtensionType],
  ? iodef-EmailData => EmailData,
  ? iodef-Application => SoftwareType
 }
 ServiceName = {
  ? iodef-IANAService => text,
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType]
 }
 EmailData = {
  ? iodef-observable-id => IDtype,
  ? iodef-EmailTo => [+ text],
  ? iodef-EmailFrom => text,
  ? iodef-EmailSubject => text,
  ? iodef-EmailX-Mailer => text,
  ? iodef-EmailHeaderField => [+ ExtensionType],
  ? iodef-EmailHeaders => text,
  ? iodef-EmailBody => text,
  ? iodef-EmailMessage => text,
  ? iodef-HashData => [+ HashData],
  ? iodef-Signature => [+ BYTE]
 }
 RecordData = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  ? iodef-DateTime => DATETIME,
  ? iodef-Description => [+ MLStringType],
  ? iodef-Application => SoftwareType,
  ? iodef-RecordPattern => [+ RecordPattern],
  ? iodef-RecordItem => [+ ExtensionType],
  ? iodef-URL => [+ URLtype],
  ? iodef-FileData => [+ FileData],
  ? iodef-WindowsRegistryKeysModified =>
                                 [+ WindowsRegistryKeysModified],
  ? iodef-CertificateData => [+ CertificateData],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 RecordPattern = {
  iodef-value => text,
  iodef-type => "regex" / "binary" / "xpath" /
 "ext-value"  .default "regex",
  ? iodef-ext-type => text,
  ? iodef-offset => integer,
  ? iodef-offsetunit => "line" / "byte" /
 "ext-value" .default "line",
  ? iodef-ext-offsetunit => text,
  ? iodef-instance => integer
 }
 WindowsRegistryKeysModified = {
  ? iodef-observable-id => IDtype,
  iodef-Key => [+ Key]
 }
 Key = {
  ? iodef-registryaction => "add-key" / "add-value" / "delete-key" /
 "delete-value" / "modify-key" / "modify-value" /
 "ext-value",
  ? iodef-ext-registryaction => text,
  ? iodef-observable-id => IDtype,
  iodef-KeyName => text,
  ? iodef-KeyValue => text
 }
 CertificateData = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  iodef-Certificate => [+ Certificate]
 }
 Certificate = {
  ? iodef-observable-id => IDtype,
  iodef-X509Data => BYTE,
  ? iodef-Description => [+ MLStringType]
 }
 FileData = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? iodef-observable-id => IDtype,
  iodef-File => [+ File]
 }
 File = {
  ? iodef-observable-id => IDtype,
  ? iodef-FileName => text,
  ? iodef-FileSize => integer,
  ? iodef-FileType => text,
  ? iodef-URL => [+ URLtype],
  ? iodef-HashData => HashData,
  ? iodef-Signature => [+ BYTE],
  ? iodef-AssociatedSoftware => SoftwareType,
  ? iodef-FileProperties => [+ ExtensionType]
 }
 HashData = {
  iodef-scope => "file-contents" / "file-pe-section" /
 "file-pe-iat" / "file-pe-resource" / "file-pdf-object" /
 "email-hash" / "email-headers-hash" / "email-body-hash" /
 "ext-value",
  ? iodef-HashTargetID => text,
  ? iodef-Hash => [+ Hash],
  ? iodef-FuzzyHash => [+ FuzzyHash]
 }
 Hash = {
  iodef-DigestMethod => BYTE,
  iodef-DigestValue => BYTE,
  ? iodef-CanonicalizationMethod => BYTE,
  ? iodef-Application => SoftwareType
 }
 FuzzyHash = {
  iodef-FuzzyHashValue => [+ ExtensionType],
  ? iodef-Application => SoftwareType,
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 Indicator = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  iodef-IndicatorID => IndicatorID,
  ? iodef-AlternativeIndicatorID => [+ AlternativeIndicatorID],
  ? iodef-Description => [+ MLStringType],
  ? iodef-StartTime => DATETIME,
  ? iodef-EndTime => DATETIME,
  ? iodef-Confidence => Confidence,
  ? iodef-Contact => [+ Contact],
  (iodef-Observable => Observable // iodef-uid-ref => IDREFType //
   iodef-IndicatorExpression => IndicatorExpression //
   iodef-IndicatorReference => IndicatorReference),
  ? iodef-NodeRole => [+ NodeRole],
  ? iodef-AttackPhase => [+ AttackPhase],
  ? iodef-Reference => [+ Reference],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 IndicatorID = {
  iodef-id => IDtype,
  iodef-name => text,
  iodef-version => text
 }
 AlternativeIndicatorID = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  iodef-IndicatorID => [+ IndicatorID]
 }
 Observable = {
  ? iodef-restriction => restriction .default "private",
  ? iodef-ext-restriction => text,
  ? (iodef-System => System // iodef-Address => Address //
     iodef-DomainData => DomainData //
     iodef-EmailData => EmailData //
     iodef-Service => Service //
     iodef-WindowsRegistryKeysModified =>
                                   WindowsRegistryKeysModified //
     iodef-FileData => FileData //iodef-CertificateData =>
                                               CertificateData //
     iodef-RegistryHandle =>RegistryHandle// iodef-RecordData =>
                                                   RecordData //
     iodef-EventData => EventData // iodef-Incident => Incident //
     iodef-Expectation => Expectation // iodef-Reference =>
                                                     Reference //
     iodef-Assessment => Assessment //
     iodef-DetectionPattern => DetectionPattern //
     iodef-HistoryItem => HistoryItem //
     iodef-BulkObservable => BulkObservable //
     iodef-AdditionalData => [+ ExtensionType])
 }
 BulkObservable = {
  ? iodef-type => "asn" / "atm" / "e-mail" / "ipv4-addr" /
 "ipv4-net" / "ipv4-net-mask" / "ipv6-addr" / "ipv6-net" /
 "ipv6-net-mask" / "mac" / "site-uri" / "domain-name" /
 "domain-to-ipv4" / "domain-to-ipv6" /
 "domain-to-ipv4-timestamp" / "domain-to-ipv6-timestamp" /
 "ipv4-port" / "ipv6-port" / "windows-reg-key" / "file-hash" /
 "email-x-mailer" / "email-subject" / "http-user-agent" /
 "http-request-uri" / "mutex" / "file-path" / "user-name" /
 "ext-value",
  ? iodef-ext-type => text,
  ? iodef-BulkObservableFormat => BulkObservableFormat,
  iodef-BulkObservableList => text,
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 BulkObservableFormat = {
  (iodef-Hash => Hash // iodef-AdditionalData => [+ ExtensionType])
 }
 IndicatorExpression = {
  ? iodef-operator => "not" / "and" / "or" / "xor" .default "and",
  ? iodef-ext-operator => text,
  ? iodef-IndicatorExpression => [+ IndicatorExpression],
  ? iodef-Observable => [+ Observable],
  ? iodef-uid-ref => [+ IDREFType],
  ? iodef-IndicatorReference => [+ IndicatorReference],
  ? iodef-Confidence => Confidence,
  ? iodef-AdditionalData => [+ ExtensionType]
 }
 IndicatorReference = {
  (iodef-uid-ref => IDREFType // iodef-euid-ref => text),
  ? iodef-version => text
 }
 AttackPhase = {
  ? iodef-AttackPhaseID => [+ text],
  ? iodef-URL => [+ URLtype],
  ? iodef-Description => [+ MLStringType],
  ? iodef-AdditionalData => [+ ExtensionType]
 }
                      Figure 5: Data Model in CDDL

7. IANA Considerations

 This document has no IANA actions.

8. Security Considerations

 This document provides a mapping from XML IODEF defined in [RFC7970]
 to JSON, and Section 3.2 describes several issues that arise when
 converting XML IODEF and JSON IODEF.  Though it does not provide any
 further security considerations other than the one described in
 [RFC7970], implementers of this document should be aware of those
 issues to avoid any unintended outcome.

9. References

9.1. Normative References

 [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
            Requirement Levels", BCP 14, RFC 2119,
            DOI 10.17487/RFC2119, March 1997,
            <https://www.rfc-editor.org/info/rfc2119>.
 [RFC3986]  Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
            Resource Identifier (URI): Generic Syntax", STD 66,
            RFC 3986, DOI 10.17487/RFC3986, January 2005,
            <https://www.rfc-editor.org/info/rfc3986>.
 [RFC4648]  Josefsson, S., "The Base16, Base32, and Base64 Data
            Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006,
            <https://www.rfc-editor.org/info/rfc4648>.
 [RFC7049]  Bormann, C. and P. Hoffman, "Concise Binary Object
            Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049,
            October 2013, <https://www.rfc-editor.org/info/rfc7049>.
 [RFC7203]  Takahashi, T., Landfield, K., and Y. Kadobayashi, "An
            Incident Object Description Exchange Format (IODEF)
            Extension for Structured Cybersecurity Information",
            RFC 7203, DOI 10.17487/RFC7203, April 2014,
            <https://www.rfc-editor.org/info/rfc7203>.
 [RFC7970]  Danyliw, R., "The Incident Object Description Exchange
            Format Version 2", RFC 7970, DOI 10.17487/RFC7970,
            November 2016, <https://www.rfc-editor.org/info/rfc7970>.
 [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
            2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
            May 2017, <https://www.rfc-editor.org/info/rfc8174>.
 [RFC8259]  Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
            Interchange Format", STD 90, RFC 8259,
            DOI 10.17487/RFC8259, December 2017,
            <https://www.rfc-editor.org/info/rfc8259>.
 [RFC8610]  Birkholz, H., Vigano, C., and C. Bormann, "Concise Data
            Definition Language (CDDL): A Notational Convention to
            Express Concise Binary Object Representation (CBOR) and
            JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610,
            June 2019, <https://www.rfc-editor.org/info/rfc8610>.

9.2. Informative References

 [JSON-SCHEMA]
            Wright, A., Andrews, H., and B. Hutton, "JSON Schema
            Validation: A Vocabulary for Structural Validation of
            JSON", Work in Progress, Internet-Draft, draft-handrews-
            json-schema-validation-02, 17 September 2019,
            <https://tools.ietf.org/html/draft-handrews-json-schema-
            validation-02>.

Appendix A. Data Types Used in This Document

 The CDDL prelude used in this document is mapped to JSON as shown in
 the table below.
 +==============+=========+==========+=============================+
 | CDDL Prelude | Use of  | Instance | Validation                  |
 |              | JSON    |          |                             |
 +==============+=========+==========+=============================+
 | bytes        | n/a     | string   | tool available              |
 +--------------+---------+----------+-----------------------------+
 | text         | string  | string   | unnecessary                 |
 +--------------+---------+----------+-----------------------------+
 | tdate        | n/a     | string   | date-time per Section 7.3.1 |
 |              |         |          | of [JSON-SCHEMA]            |
 +--------------+---------+----------+-----------------------------+
 | integer      | n/a     | number   | integer                     |
 +--------------+---------+----------+-----------------------------+
 | eb64legacy   | n/a     | string   | tool available              |
 +--------------+---------+----------+-----------------------------+
 | uri          | n/a     | string   | uri per Section 7.3.6 of    |
 |              |         |          | [JSON-SCHEMA]               |
 +--------------+---------+----------+-----------------------------+
 | float32      | float32 | number   | unnecessary                 |
 +--------------+---------+----------+-----------------------------+
                Table 5: CDDL Prelude Mapping in JSON

Appendix B. The IODEF Data Model (JSON Schema)

 This section provides a JSON schema [JSON-SCHEMA] that defines the
 IODEF data model defined in this document.  Note that this section is
 informative.
 { "$schema": "https://json-schema.org/draft-04/schema#",
   "definitions": {
     "action": {"enum": ["nothing", "contact-source-site",
        "contact-target-site", "contact-sender", "investigate",
        "block-host", "block-network", "block-port",
        "rate-limit-host", "rate-limit-network",
        "rate-limit-port", "redirect-traffic", "honeypot",
        "upgrade-software", "rebuild-asset", "harden-asset",
        "remediate-other", "status-triage", "status-new-info",
        "watch-and-report", "training", "defined-coa", "other",
        "ext-value"]},
     "duration":{"enum":["second", "minute", "hour", "day",
       "month", "quarter", "year", "ext-value"]},
     "SpecID":{
       "enum":["urn:ietf:params:xml:ns:mile:mmdef:1.2",
        "private"]},
     "lang": {
       "type":"string", "pattern":
         "^$|[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"},
     "purpose": {"enum": ["traceback", "mitigation",
       "reporting", "watch", "other", "ext-value"]},
     "restriction":{"enum": ["public", "partner",
       "need-to-know", "private", "default", "white", "green",
       "amber", "red", "ext-value"]},
     "status": {"enum": ["new", "in-progress", "forwarded",
       "resolved", "future", "ext-value"]},
     "DATETIME": {"type": "string", "format": "date-time"},
     "BYTE": {"type": "string"},
     "PortlistType": {
       "type": "string", "pattern":
         "[0-9]+(\\-[0-9]+)?(,[0-9]+(\\-[0-9]+)?)*"},
     "TimeZonetype": {
       "type":"string", "pattern":
         "Z|[\\+\\-](0[0-9]|1[0-4]):[0-5][0-9]"},
     "URLtype": {
       "type": "string",
       "pattern":
         "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))
           ?(#(.*))?"},
     "IDtype": {"type": "string", "pattern":
       "[a-zA-Z_][a-zA-Z0-9_.-]*"},
     "IDREFType": {"$ref": "#/definitions/IDtype"},
     "MLStringType": {
       "oneOf": [{"type": "string"},
                 {"type": "object",
                   "properties": {
                     "value": {"type": "string"},
                     "lang": {"$ref": "#/definitions/lang"},
                     "translation-id": {"type": "string"}},
                    "required": ["value"],
                    "additionalProperties":false}]},
     "PositiveFloatType": {"type": "number", "minimum": 0},
     "PAddressType": {"$ref": "#/definitions/MLStringType"},
     "ExtensionType": {
       "type": "object",
       "properties": {
         "value": {"type": "string"},
         "name": {"type": "string"},
         "dtype":{"enum":["boolean", "byte", "bytes",
           "character", "json", "date-time", "ntpstamp",
           "integer", "portlist", "real", "string", "file",
           "path", "frame", "packet", "ipv4-packet",
           "ipv6-packet", "url", "csv", "winreg",
           "xml", "ext-value"], "default": "string"},
         "ext-dtype": {"type": "string"},
         "meaning": {"type": "string"},
         "formatid": {"type": "string"},
         "restriction": {
           "$ref": "#/definitions/restriction", "default":
             "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"}},
       "required": ["value", "dtype"],
       "additionalProperties":false},
     "ExtensionTypeList": {
       "type": "array",
       "items": {"$ref": "#/definitions/ExtensionType"},
       "minItems": 1},
     "SoftwareType": {
       "type": "object",
       "properties": {
         "SoftwareReference":{
           "$ref":"#/definitions/SoftwareReference"},
         "URL": {
           "type": "array",
           "items": {"$ref": "#/definitions/URLtype",
           "minItems": 1}},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1 }},
       "required": [],
       "additionalProperties": false},
     "SoftwareReference": {
       "type": "object",
       "properties": {
         "value": {"type": "string"},
         "spec-name": {"enum": ["custom", "cpe", "swid",
           "ext-value"]},
         "ext-spec-name": {"type": "string"},
         "dtype": {"enum": ["bytes", "integer", "real", "string",
           "xml", "ext-value"], "default": "string"},
         "ext-dtype": {"type": "string"}},
       "required": ["spec-name"],
       "additionalProperties": false},
     "STRUCTUREDINFO": {
       "type": "object",
       "properties": {
         "SpecID": {"$ref":"#/definitions/SpecID"},
         "ext-SpecID": {"type": "string"},
         "ContentID": {"type": "string"},
         "RawData": {
            "type": "array",
            "items": {"$ref":"#/definitions/BYTE"},
            "minItems": 1
         },
         "Reference": {
           "type": "array",
           "items": {"$ref": "#/definitions/Reference"},
           "minItems": 1
         },
         "Platform": {
           "type": "array",
           "items": {"$ref": "#/definitions/Platform"},
           "minItems": 1
         },
         "Scoring": {
           "type": "array",
           "items": {"$ref": "#/definitions/Scoring"},
           "minItems": 1}},
       "allOf": [
          {"required": ["SpecID"]},
          {"anyOf": [
            {"oneOf": [
              {"required":["Reference"]},
              {"required":["RawData"]}]},
            { "not" : {"required":["Reference", "RawData"]}}]}],
       "additionalProperties": false},
     "Platform": {
       "type": "object",
       "properties": {
         "SpecID": {"$ref":"#/definitions/SpecID"},
         "ext-SpecID": {"type": "string"},
         "ContentID": {"type": "string"},
         "RawData": {
            "type": "array",
            "items": {"$ref":"#/definitions/BYTE"},
            "minItems": 1
         },
         "Reference": {
           "type": "array",
           "items": {"$ref": "#/definitions/Reference"},
           "minItems": 1}},
       "required": ["SpecID"],
       "additionalProperties": false},
     "Scoring": {
       "type": "object",
       "properties": {
         "SpecID": {"$ref":"#/definitions/SpecID"},
         "ext-SpecID": {"type": "string"},
         "ContentID": {"type": "string"},
         "RawData": {
            "type": "array",
            "items": {"$ref":"#/definitions/BYTE"},
            "minItems": 1
         },
         "Reference": {
           "type": "array",
           "items": {"$ref": "#/definitions/Reference"},
           "minItems": 1}},
       "required": ["SpecID"],
       "additionalProperties": false},
     "Incident": {
       "title": "Incident",
       "description": "JSON schema for Incident class",
       "type": "object",
       "properties": {
         "purpose": {"$ref": "#/definitions/purpose"},
         "ext-purpose": {"type": "string"},
         "status": {"$ref": "#/definitions/status"},
         "ext-status": {"type": "string"},
         "lang": {"$ref": "#/definitions/lang"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "IncidentID": {"$ref": "#/definitions/IncidentID"},
         "AlternativeID": {
           "$ref":"#/definitions/AlternativeID"},
         "RelatedActivity": {
           "type": "array",
           "items": {"$ref": "#/definitions/RelatedActivity"},
           "minItems": 1},
         "DetectTime": {"$ref": "#/definitions/DATETIME"},
         "StartTime": {"$ref": "#/definitions/DATETIME"},
         "EndTime": {"$ref": "#/definitions/DATETIME"},
         "RecoveryTime": {"$ref": "#/definitions/DATETIME"},
         "ReportTime": {"$ref": "#/definitions/DATETIME"},
         "GenerationTime": {"$ref": "#/definitions/DATETIME"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Discovery": {
           "type": "array",
           "items": {"$ref": "#/definitions/Discovery"},
           "minItems": 1},
         "Assessment": {
           "type": "array",
           "items": {"$ref": "#/definitions/Assessment"},
           "minItems": 1},
         "Method": {
           "type": "array",
           "items": {"$ref": "#/definitions/Method"},
           "minItems": 1},
         "Contact": {
           "type": "array",
           "items": {"$ref": "#/definitions/Contact"},
           "minItems": 1},
         "EventData": {
           "type": "array",
           "items": {"$ref": "#/definitions/EventData"},
           "minItems": 1},
         "Indicator": {
           "type": "array",
           "items": {"$ref": "#/definitions/Indicator"},
           "minItems": 1},
         "History": {"$ref": "#/definitions/History"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["IncidentID", "GenerationTime", "Contact",
         "purpose"],
       "additionalProperties": false},
     "IncidentID": {
       "title": "IncidentID",
       "description": "JSON schema for IncidentID class",
       "type": "object",
       "properties": {
         "id": {"type": "string"},
         "name": {"type": "string"},
         "instance": {"type": "string"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"}},
       "required": ["id", "name"],
       "additionalProperties": false},
     "AlternativeID": {
       "title": "AlternativeID",
       "description": "JSON schema for AlternativeID class",
       "type": "object",
       "properties": {
         "IncidentID": {
           "type": "array",
           "items":{"$ref": "#/definitions/IncidentID"},
           "minItems": 1},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"}},
       "required": ["IncidentID"],
       "additionalProperties": false},
     "RelatedActivity": {
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "IncidentID": {
           "type": "array",
           "items": {"$ref": "#/definitions/IncidentID"},
           "minItems": 1},
         "URL": {
           "type": "array",
           "items": {"$ref": "#/definitions/URLtype"},
           "minItems": 1},
         "ThreatActor": {
           "type": "array",
           "items": {"$ref": "#/definitions/ThreatActor"},
           "minItems": 1},
         "Campaign": {
           "type": "array",
           "items": {"$ref": "#/definitions/Campaign"},
           "minItems": 1},
         "IndicatorID": {
           "type": "array",
           "items": {"$ref": "#/definitions/IndicatorID"},
           "minItems": 1},
         "Confidence": {"$ref": "#/definitions/Confidence"},
         "Description": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "AdditionalData": {
           "$ref": "#/definitions/ExtensionTypeList"}},
       "additionalProperties": false},
     "ThreatActor": {
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "ThreatActorID": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "URL": {
           "type":"array",
           "items":{"$ref":"#/definitions/URLtype"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "additionalProperties": false},
     "Campaign": {
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "CampaignID": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "URL": {
           "type":"array",
           "items":{"$ref":"#/definitions/URLtype"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}}},
     "Contact": {
       "type": "object",
       "properties": {
         "role": {
           "enum":["creator", "reporter", "admin", "tech",
                   "provider", "user", "billing", "legal",
                   "irt", "abuse", "cc", "cc-irt", "leo",
                   "vendor", "vendor-support", "victim",
                   "victim-notified", "ext-value"]},
         "ext-role": {"type": "string"},
         "type": {
           "enum": ["person", "organization", "ext-value"]},
         "ext-type": {"type": "string"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "ContactName": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "ContactTitle": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "RegistryHandle": {
           "type":"array",
           "items":{"$ref":"#/definitions/RegistryHandle"},
           "minItems": 1},
         "PostalAddress": {
           "type":"array",
           "items":{"$ref":"#/definitions/PostalAddress"},
           "minItems": 1},
         "Email": {
           "type": "array",
           "items": {"$ref": "#/definitions/Email"},
           "minItems": 1},
         "Telephone": {
           "type": "array",
           "items": {"$ref": "#/definitions/Telephone"},
           "minItems": 1},
         "Timezone": {"$ref": "#/definitions/TimeZonetype"},
         "Contact": {
           "type": "array",
           "items": {"$ref": "#/definitions/Contact"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["role", "type"],
       "additionalProperties": false},
     "RegistryHandle": {
       "type": "object",
       "properties": {
         "handle": {"type": "string"},
         "registry": {
           "enum": ["internic", "apnic", "arin", "lacnic",
             "ripe", "afrinic", "local", "ext-value"]},
         "ext-registry": {"type": "string"}},
       "required": ["handle", "registry"],
       "additionalProperties": false},
     "PostalAddress": {
       "type": "object",
       "properties": {
         "type": {
           "enum": ["street", "mailing", "ext-value"]},
         "ext-type": {"type": "string"},
         "PAddress": {"$ref": "#/definitions/PAddressType"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["PAddress"],
       "additionalProperties": false},
     "Email": {
       "type": "object",
       "properties": {
         "type": {
           "enum":["direct", "hotline", "ext-value"]},
         "ext-type": {"type": "string"},
         "EmailTo": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["EmailTo"],
       "additionalProperties": false},
     "Telephone": {
       "type": "object",
       "properties": {
         "type": {
           "enum":["wired", "mobile", "fax", "hotline",
             "ext-value"]},
         "ext-type": {"type": "string"},
         "TelephoneNumber": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["TelephoneNumber"],
       "additionalProperties": false},
     "Discovery": {
       "type": "object",
       "properties": {
         "source": {
           "enum":["nidps", "hips", "siem", "av",
             "third-party-monitoring", "incident", "os-log",
             "application-log", "device-log", "network-flow",
             "passive-dns", "investigation", "audit",
             "internal-notification", "external-notification",
             "leo", "partner", "actor", "unknown", "ext-value"]},
         "ext-source": {"type": "string"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Contact": {
           "type": "array",
           "items": {"$ref": "#/definitions/Contact"},
           "minItems": 1},
         "DetectionPattern": {
           "type":"array",
           "items":{"$ref":"#/definitions/DetectionPattern"},
           "minItems": 1}},
       "required": [],
       "additionalProperties": false},
     "DetectionPattern": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Application": {"$ref": "#/definitions/SoftwareType"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "DetectionConfiguration": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1}},
       "allOf": [
         {"required": ["Application"]},
         {"oneOf": [
           {"required":["Description"]},
           {"required":["DetectionConfiguration"]}]}],
       "additionalProperties": false},
     "Method": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "Reference": {
           "type": "array",
           "items": {"$ref": "#/definitions/Reference"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "AttackPattern": {
           "type":"array",
           "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
           "minItems": 1},
         "Vulnerability": {
           "type":"array",
           "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
           "minItems": 1},
         "Weakness": {
           "type":"array",
           "items":{"$ref":"#/definitions/STRUCTUREDINFO"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": [],
       "additionalProperties": false},
     "Reference": {
       "type": "object",
       "properties": {
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "ReferenceName": {
           "$ref":"#/definitions/ReferenceName"},
         "URL":{
           "type":"array",
           "items":{"$ref":"#/definitions/URLtype"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": [],
       "additionalProperties": false},
     "ReferenceName" : {
       "type": "object",
       "properties": {
         "specIndex": {"type": "number"},
         "ID": {"$ref":"#/definitions/IDtype"}},
       "required": ["specIndex", "ID"],
       "additionalProperties": false},
     "Assessment": {
       "type": "object",
       "properties": {
         "occurrence": {"enum":["actual", "potential"]},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "IncidentCategory": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Impact": {
          "type": "array",
          "items": {
            "properties": {
              "SystemImpact":{
                "$ref":"#/definitions/SystemImpact"},
              "BusinessImpact":{
                "$ref":"#/definitions/BusinessImpact"},
              "TimeImpact":{"$ref":"#/definitions/TimeImpact"},
              "MonetaryImpact":{
                "$ref":"#/definitions/MonetaryImpact"},
              "IntendedImpact":{
                "$ref":"#/definitions/BusinessImpact"}},
            "additionalProperties":false},
          "minItems" : 1
         },
         "Counter": {
           "type": "array",
           "items": {"$ref": "#/definitions/Counter"},
           "minItems": 1},
         "MitigatingFactor": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Cause": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Confidence": {"$ref": "#/definitions/Confidence"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["Impact"],
       "additionalProperties": false},
     "SystemImpact": {
       "type": "object",
       "properties": {
         "severity": {"enum":["low", "medium", "high"]},
         "completion": {"enum":["failed", "succeeded"]},
         "type": {
           "enum":["takeover-account", "takeover-service",
             "takeover-system", "cps-manipulation", "cps-damage",
             "availability-data", "availability-account",
             "availability-service", "availability-system",
             "damaged-system", "damaged-data",
             "breach-proprietary", "breach-privacy",
             "breach-credential", "breach-configuration",
             "integrity-data", "integrity-configuration",
             "integrity-hardware", "traffic-redirection",
             "monitoring-traffic", "monitoring-host",
             "policy", "unknown", "ext-value"]},
         "ext-type": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["type"],
       "additionalProperties": false},
     "BusinessImpact": {
       "type": "object",
       "properties": {
         "severity": {"enum":["none", "low", "medium", "high",
           "unknown", "ext-value"], "default": "unknown"},
         "ext-severity": {"type":"string"},
         "type": {"enum":["breach-proprietary",
           "breach-privacy", "breach-credential",
           "loss-of-integrity", "loss-of-service",
           "theft-financial", "theft-service",
           "degraded-reputation", "asset-damage",
           "asset-manipulation", "legal", "extortion",
           "unknown", "ext-value"]},
         "ext-type": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["type"],
       "additionalProperties": false},
     "TimeImpact": {
       "type": "object",
       "properties": {
         "value": {"$ref": "#/definitions/PositiveFloatType"},
         "severity": {"enum": ["low", "medium", "high"]},
         "metric": {"enum": ["labor", "elapsed", "downtime",
           "ext-value"]},
         "ext-metric": {"type": "string"},
         "duration": {
           "$ref":"#/definitions/duration", "default": "hour"},
         "ext-duration": {"type": "string"}},
       "required": ["value", "metric"],
       "additionalProperties": false},
     "MonetaryImpact": {
       "type": "object",
       "properties": {
         "value": {"$ref": "#/definitions/PositiveFloatType"},
         "severity": {"enum":["low", "medium", "high"]},
         "currency": {"type": "string"}},
       "required": ["value"],
       "additionalProperties": false},
     "Confidence": {
       "type": "object",
       "properties": {
         "value": {"type": "number"},
         "rating": {"enum": ["low", "medium", "high", "numeric",
                    "unknown", "ext-value"]},
         "ext-rating": {"type":"string"}},
       "required": ["value", "rating"],
       "additionalProperties": false},
     "History": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "HistoryItem": {
           "type": "array",
           "items": {"$ref": "#/definitions/HistoryItem"},
           "minItems": 1}},
       "required": ["HistoryItem"],
       "additionalProperties": false},
     "HistoryItem": {
       "type": "object",
       "properties": {
         "action": {
           "$ref": "#/definitions/action", "default": "other"},
         "ext-action": {"type": "string"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "DateTime": {"$ref": "#/definitions/DATETIME"},
         "IncidentID": {"$ref": "#/definitions/IncidentID"},
         "Contact": {"$ref": "#/definitions/Contact"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "DefinedCOA": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["DateTime", "action"],
       "additionalProperties": false},
     "EventData": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Description": {"type": "array",
           "items": { "$ref":"#/definitions/MLStringType"}},
         "DetectTime": {"$ref": "#/definitions/DATETIME"},
         "StartTime": {"$ref": "#/definitions/DATETIME"},
         "EndTime": {"$ref": "#/definitions/DATETIME"},
         "RecoveryTime": {"$ref": "#/definitions/DATETIME"},
         "ReportTime": {"$ref": "#/definitions/DATETIME"},
         "Contact": {
           "type": "array",
           "items": {"$ref": "#/definitions/Contact"},
           "minItems": 1},
         "Discovery": {
           "type": "array",
           "items": {"$ref": "#/definitions/Discovery"},
           "minItems": 1},
         "Assessment": {"$ref": "#/definitions/Assessment"},
         "Method": {
           "type": "array",
           "items": {"$ref": "#/definitions/Method"},
           "minItems": 1},
         "System": {
           "type": "array",
           "items": {"$ref": "#/definitions/System"},
           "minItems": 1},
         "Expectation": {
           "type": "array",
           "items": {"$ref": "#/definitions/Expectation"},
           "minItems": 1},
         "RecordData": {
           "type": "array",
           "items": {"$ref": "#/definitions/RecordData"},
           "minItems": 1},
         "EventData": {
           "type": "array",
           "items": {"$ref": "#/definitions/EventData"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": [],
       "additionalProperties": false},
     "Expectation": {
       "type": "object",
       "properties": {
         "action": {
           "$ref":"#/definitions/action", "default": "other"},
         "ext-action": {"type": "string"},
         "severity": {"enum": ["low", "medium", "high"]},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "default"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "DefinedCOA": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "StartTime": {"$ref": "#/definitions/DATETIME"},
         "EndTime": {"$ref": "#/definitions/DATETIME"},
         "Contact": {"$ref": "#/definitions/Contact"}},
       "required": [],
       "additionalProperties": false},
     "System": {
       "type": "object",
       "properties": {
         "category": {
           "enum": ["source", "target", "intermediate", "sensor",
                    "infrastructure", "ext-value"]},
         "ext-category": {"type": "string"},
         "interface": {"type": "string"},
         "spoofed": {
           "enum": ["unknown", "yes", "no"], "default":"unknown"},
         "virtual": {
           "enum": ["yes", "no", "unknown"], "default":"unknown"},
         "ownership": {
           "enum":["organization", "personal", "partner",
                   "customer", "no-relationship", "unknown",
                   "ext-value"]},
         "ext-ownership": {"type": "string"},
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Node": {"$ref": "#/definitions/Node"},
         "NodeRole": {
           "type": "array",
           "items": {"$ref": "#/definitions/NodeRole"},
           "minItems": 1},
         "Service": {
           "type": "array",
           "items": {"$ref": "#/definitions/Service"},
           "minItems": 1},
         "OperatingSystem": {
           "type": "array",
           "items": {"$ref": "#/definitions/SoftwareType"},
           "minItems": 1},
         "Counter": {
           "type": "array",
           "items": {"$ref": "#/definitions/Counter"},
           "minItems": 1},
         "AssetID": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["Node"],
       "additionalProperties": false},
     "Node": {
       "type": "object",
       "properties": {
         "DomainData": {
           "type": "array",
           "items": {"$ref": "#/definitions/DomainData"},
           "minItems": 1},
         "Address": {
           "type": "array",
           "items": {"$ref": "#/definitions/Address"},
           "minItems": 1},
         "PostalAddress": {
           "$ref": "#/definitions/PostalAddress"},
         "Location": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Counter": {
           "type":"array",
           "items":{"$ref":"#/definitions/Counter"},
           "minItems": 1}},
       "anyOf": [
          {"required": ["DomainData"]},
          {"required": ["Address"]}
       ],
       "additionalProperties": false},
     "Address": {
       "type": "object",
       "properties": {
         "value": {"type": "string"},
         "category": {
           "enum":["asn", "atm", "e-mail", "ipv4-addr", "ipv4-net",
             "ipv4-net-masked", "ipv4-net-mask", "ipv6-addr",
             "ipv6-net", "ipv6-net-masked", "mac", "site-uri",
             "ext-value"], "default": "ipv6-addr"},
         "ext-category": {"type": "string"},
         "vlan-name": {"type": "string"},
         "vlan-num": {"type": "number"},
         "observable-id": {"$ref": "#/definitions/IDtype"}},
       "required": ["value", "category"],
       "additionalProperties": false},
     "NodeRole": {
       "type": "object",
       "properties": {
         "category": {
           "enum":["client", "client-enterprise",
             "client-partner", "client-remote", "client-kiosk",
             "client-mobile", "server-internal", "server-public",
             "www", "mail", "webmail", "messaging", "streaming",
             "voice", "file", "ftp", "p2p", "name", "directory",
             "credential", "print", "application", "database",
             "backup", "dhcp", "assessment", "source-control",
             "config-management", "monitoring", "infra",
             "infra-firewall", "infra-router", "infra-switch",
             "camera", "proxy", "remote-access", "log",
             "virtualization", "pos", "scada",
             "scada-supervisory", "sinkhole", "honeypot",
             "anomyzation", "c2-server", "malware-distribution",
             "drop-server", "hop-point", "reflector",
             "phishing-site", "spear-phishing-site",
             "recruiting-site", "fraudulent-site",
             "ext-value"]},
         "ext-category": {"type": "string"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["category"],
       "additionalProperties": false},
     "Counter": {
       "type": "object",
       "properties": {
         "value": {"type": "number"},
         "type": {
           "enum": ["count", "peak", "average", "ext-value"]},
         "ext-type": {"type": "string"},
         "unit":{"enum":["byte", "mbit", "packet", "flow",
           "session", "alert", "message", "event", "host",
           "site", "organization", "ext-value"]},
         "ext-unit": {"type": "string"},
         "meaning": {"type": "string"},
         "duration": {
           "$ref":"#/definitions/duration", "default": "hour"},
         "ext-duration": {"type": "string"}},
       "required": ["value", "type", "unit"],
       "additionalProperties": false},
     "DomainData": {
       "type": "object",
       "properties": {
         "system-status": {
           "enum": ["spoofed", "fraudulent", "innocent-hacked",
             "innocent-hijacked", "unknown", "ext-value"]},
         "ext-system-status": {"type": "string"},
         "domain-status": {
           "enum": [ "reservedDelegation", "assignedAndActive",
                     "assignedAndInactive", "assignedAndOnHold",
                     "revoked", "transferPending",
                     "registryLock", "registrarLock",
                     "other", "unknown", "ext-value"]},
         "ext-domain-status": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Name": {"type": "string"},
         "DateDomainWasChecked": {
           "$ref": "#/definitions/DATETIME"},
         "RegistrationDate": {
           "$ref": "#/definitions/DATETIME"},
         "ExpirationDate": {"$ref": "#/definitions/DATETIME"},
         "RelatedDNS": {
           "type": "array",
           "items": {"$ref": "#/definitions/ExtensionType"},
           "minItems": 1},
         "NameServers": {
           "type": "array",
           "items": {"$ref": "#/definitions/NameServers"},
           "minItems": 1},
         "DomainContacts": {
           "$ref": "#/definitions/DomainContacts"}},
       "required": ["Name", "system-status", "domain-status"],
       "additionalProperties": false},
     "NameServers": {
       "type": "object",
       "properties": {
         "Server": {"type": "string"},
         "Address": {
           "type":"array",
           "items":{"$ref":"#/definitions/Address"},
           "minItems": 1}},
       "required": ["Server", "Address"],
       "additionalProperties": false},
     "DomainContacts": {
       "type": "object",
       "properties": {
         "SameDomainContact": {"type": "string"},
         "Contact": {
           "type":"array",
           "items":{"$ref":"#/definitions/Contact"},
           "minItems": 1}},
       "oneOf": [
          {"required": ["SameDomainContact"]},
          {"required": ["Contact"]}],
       "additionalProperties": false},
     "Service": {
       "type": "object",
       "properties": {
         "ip-protocol": {"type": "number"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "ServiceName": {"$ref": "#/definitions/ServiceName"},
         "Port": {"type": "number"},
         "Portlist": {"$ref": "#/definitions/PortlistType"},
         "ProtoCode": {"type": "number"},
         "ProtoType": {"type": "number"},
         "ProtoField": {"type": "number"},
         "ApplicationHeaderField":{
           "$ref":"#/definitions/ExtensionTypeList"},
         "EmailData": {"$ref": "#/definitions/EmailData"},
         "Application": {
           "$ref": "#/definitions/SoftwareType"}},
       "required": [],
       "additionalProperties": false},
     "ServiceName": {
       "type": "object",
       "properties": {
         "IANAService": {"type": "string"},
         "URL": {
           "type": "array", "items": {
             "$ref": "#/definitions/URLtype"}},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": [],
       "additionalProperties": false},
     "EmailData": {
       "type": "object",
       "properties": {
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "EmailTo": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "EmailFrom": {"type": "string"},
         "EmailSubject": {"type": "string"},
         "EmailX-Mailer": {"type": "string"},
         "EmailHeaderField": {
           "type": "array",
           "items": {"$ref": "#/definitions/ExtensionType"},
           "minItems": 1},
         "EmailHeaders": {"type": "string"},
         "EmailBody": {"type": "string"},
         "EmailMessage": {"type": "string"},
         "HashData": {
           "type": "array",
           "items": {"$ref": "#/definitions/HashData"},
           "minItems": 1},
         "Signature": {
           "type": "array",
           "items": {"$ref": "#/definitions/BYTE"},
           "minItems": 1}},
       "required": [],
       "additionalProperties": false},
     "RecordData": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "DateTime": {"$ref": "#/definitions/DATETIME"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "Application": {"$ref": "#/definitions/SoftwareType"},
         "RecordPattern": {
           "type": "array",
           "items": {"$ref": "#/definitions/RecordPattern"},
           "minItems": 1},
         "RecordItem": {
           "type": "array",
           "items": {"$ref": "#/definitions/ExtensionType"},
           "minItems": 1},
         "URL": {
           "type": "array",
           "items": {"$ref": "#/definitions/URLtype"},
           "minItems": 1},
         "FileData": {
           "type": "array",
           "items": {"$ref": "#/definitions/FileData"},
           "minItems": 1},
         "WindowsRegistryKeysModified": {
           "type": "array",
           "items": {
             "$ref":"#/definitions/WindowsRegistryKeysModified"},
           "minItems": 1},
         "CertificateData": {
           "type":"array",
           "items":{"$ref":"#/definitions/CertificateData"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": [],
       "additionalProperties": false},
     "RecordPattern": {
       "type": "object",
       "properties": {
         "value": {"type": "string"},
         "type": {
           "enum": ["regex", "binary", "xpath", "ext-value"],
           "default": "regex"},
         "ext-type": {"type": "string"},
         "offset": {"type": "number"},
         "offsetunit": {"enum":["line", "byte", "ext-value"] ,
                        "default": "line"},
         "ext-offsetunit": {"type": "string"},
         "instance": {"type": "number"}},
       "required": ["value", "type"],
       "additionalProperties": false},
     "WindowsRegistryKeysModified": {
       "type": "object",
       "properties": {
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Key": {
           "type": "array",
           "items": {"$ref": "#/definitions/Key"},
           "minItems": 1}},
       "required": ["Key"],
       "additionalProperties": false},
     "Key": {
       "type": "object",
       "properties": {
         "registryaction": {"enum": ["add-key", "add-value",
                           "delete-key", "delete-value",
                           "modify-key", "modify-value",
                           "ext-value"]},
         "ext-registryaction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "KeyName": {"type":"string"},
         "KeyValue": {"type": "string"}},
       "required": ["KeyName"],
       "additionalProperties": false},
     "CertificateData": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "Certificate": {
           "type": "array",
           "items": {"$ref": "#/definitions/Certificate"},
           "minItems": 1}},
       "required": ["Certificate"],
       "additionalProperties": false},
     "Certificate": {
       "type": "object",
       "properties": {
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "X509Data": {"$ref": "#/definitions/BYTE"},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1}},
       "required": ["X509Data"],
       "additionalProperties": false},
     "FileData": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction"},
         "ext-restriction": {"type": "string"},
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "File": {
           "type": "array",
           "items": {"$ref": "#/definitions/File"},
           "minItems": 1}},
       "required": ["File"],
       "additionalProperties": false},
     "File": {
       "type": "object",
       "properties": {
         "observable-id": {"$ref": "#/definitions/IDtype"},
         "FileName": {"type": "string"},
         "FileSize": {"type": "number"},
         "FileType": {"type": "string"},
         "URL": {
           "type": "array",
           "items": {"$ref": "#/definitions/URLtype"},
           "minItems": 1},
         "HashData": {"$ref": "#/definitions/HashData"},
         "Signature": {
           "type": "array",
           "items": {"$ref": "#/definitions/BYTE"},
           "minItems": 1},
         "AssociatedSoftware": {
           "$ref": "#/definitions/SoftwareType"},
         "FileProperties": {
           "type":"array",
           "items":{"$ref":"#/definitions/ExtensionType"},
           "minItems": 1}},
       "required": [],
       "additionalProperties": false},
     "HashData": {
       "type": "object",
       "properties": {
         "scope": {"enum": ["file-contents", "file-pe-section",
           "file-pe-iat", "file-pe-resource", "file-pdf-object",
           "email-hash", "email-headers-hash", "email-body-hash",
           "ext-value"]},
         "HashTargetID": {"type": "string"},
         "Hash": {
           "type": "array",
           "items": {"$ref": "#/definitions/Hash"},
           "minItems": 1},
         "FuzzyHash": {
           "type": "array",
           "items": {"$ref": "#/definitions/FuzzyHash"},
           "minItems": 1}},
       "required": ["scope"],
       "additionalProperties": false},
     "Hash": {
       "type": "object",
       "properties": {
         "DigestMethod": {"$ref": "#/definitions/BYTE"},
         "DigestValue": {"$ref": "#/definitions/BYTE"},
         "CanonicalizationMethod": {
           "$ref": "#/definitions/BYTE"},
         "Application": {
           "$ref": "#/definitions/SoftwareType"}},
       "required": ["DigestMethod", "DigestValue"],
       "additionalProperties": false},
     "FuzzyHash": {
       "type": "object",
       "properties": {
         "FuzzyHashValue": {
           "type": "array",
           "items": {"$ref": "#/definitions/ExtensionType"},
           "minItems": 1},
         "Application": {"$ref": "#/definitions/SoftwareType"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["FuzzyHashValue"],
       "additionalProperties": false},
     "Indicator": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "IndicatorID": {"$ref": "#/definitions/IndicatorID"},
         "AlternativeIndicatorID": {
           "type": "array",
           "items": {
             "$ref": "#/definitions/AlternativeIndicatorID"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "StartTime": {"$ref": "#/definitions/DATETIME"},
         "EndTime": {"$ref": "#/definitions/DATETIME"},
         "Confidence": {"$ref": "#/definitions/Confidence"},
         "Contact": {
           "type": "array",
           "items": {"$ref": "#/definitions/Contact"},
           "minItems": 1},
         "Observable": {"$ref": "#/definitions/Observable"},
         "uid-ref": {"$ref": "#/definitions/IDREFType"},
         "IndicatorExpression":{
          "$ref":"#/definitions/IndicatorExpression"},
         "IndicatorReference":{
          "$ref": "#/definitions/IndicatorReference"},
         "NodeRole": {
           "type": "array",
           "items": {"$ref": "#/definitions/NodeRole"},
           "minItems": 1},
         "AttackPhase": {
           "type": "array",
           "items": {"$ref": "#/definitions/AttackPhase"},
           "minItems": 1},
         "Reference": {
           "type": "array",
           "items": {"$ref": "#/definitions/Reference"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "allOf": [
         {"required": ["IndicatorID"]},
         {"oneOf": [
           {"required":["Observable"]},
           {"required":["uid-ref"]},
           {"required":["IndicatorExpression"]},
           {"required":["IndicatorReference"]}]}],
       "additionalProperties": false},
     "IndicatorID": {
       "type": "object",
       "properties": {
         "id": {"type": "string"},
         "name": {"type": "string"},
         "version": {"type": "string"}},
       "required": ["id", "name", "version"],
       "additionalProperties": false},
     "AlternativeIndicatorID": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
           "default": "private"},
         "ext-restriction": {"type": "string"},
         "IndicatorID": {
           "type": "array",
           "items": {"$ref": "#/definitions/IndicatorID"},
           "minItems": 1}},
       "required": ["IndicatorID"],
       "additionalProperties": false},
     "Observable": {
       "type": "object",
       "properties": {
         "restriction": {"$ref": "#/definitions/restriction",
                         "default": "private"},
         "ext-restriction": {"type": "string"},
         "System": {"$ref": "#/definitions/System"},
         "Address": {"$ref": "#/definitions/Address"},
         "DomainData": {"$ref": "#/definitions/DomainData"},
         "EmailData": {"$ref": "#/definitions/EmailData"},
         "Service": {"$ref": "#/definitions/Service"},
         "WindowsRegistryKeysModified": {
           "$ref": "#/definitions/WindowsRegistryKeysModified"},
         "FileData": {"$ref": "#/definitions/FileData"},
         "CertificateData": {
           "$ref": "#/definitions/CertificateData"},
         "RegistryHandle": {
           "$ref": "#/definitions/RegistryHandle"},
         "RecordData":  {"$ref": "#/definitions/RecordData"},
         "EventData": {"$ref": "#/definitions/EventData"},
         "Incident": {"$ref": "#/definitions/Incident"},
         "Expectation": {"$ref": "#/definitions/Expectation"},
         "Reference": {"$ref": "#/definitions/Reference"},
         "Assessment": {"$ref": "#/definitions/Assessment"},
         "DetectionPattern": {
           "$ref": "#/definitions/DetectionPattern"},
         "HistoryItem": {"$ref": "#/definitions/HistoryItem"},
         "BulkObservable": {
           "$ref": "#/definitions/BulkObservable"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
         "oneOf": [
           {"required":["System"]},
           {"required":["Address"]},
           {"required":["DomainData"]},
           {"required":["EmailData"]},
           {"required":["Service"]},
           {"required":["WindowsRegistryKeysModified"]},
           {"required":["FileData"]},
           {"required":["CertificateData"]},
           {"required":["RegistryHandle"]},
           {"required":["RecordData"]},
           {"required":["EventData"]},
           {"required":["Incident"]},
           {"required":["Expectation"]},
           {"required":["Reference"]},
           {"required":["Assessment"]},
           {"required":["DetectionPattern"]},
           {"required":["HistoryItem"]},
           {"required":["BulkObservable"]},
           {"required":["AdditionalData"]}],
       "additionalProperties": false},
     "BulkObservable": {
       "type": "object",
       "properties": {
         "type": {"enum": ["asn", "atm", "e-mail", "ipv4-addr",
           "ipv4-net", "ipv4-net-mask", "ipv6-addr", "ipv6-net",
           "ipv6-net-mask", "mac", "site-uri", "domain-name",
           "domain-to-ipv4", "domain-to-ipv6",
           "domain-to-ipv4-timestamp",
           "domain-to-ipv6-timestamp", "ipv4-port", "ipv6-port",
           "windows-reg-key", "file-hash", "email-x-mailer",
           "email-subject", "http-user-agent",
           "http-request-url", "mutex", "file-path", "user-name",
           "ext-value"]},
         "ext-type": {"type": "string"},
         "BulkObservableFormat":{
           "$ref": "#/definitions/BulkObservableFormat"},
         "BulkObservableList": {"type": "string"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": ["BulkObservableList"],
       "additionalProperties": false},
     "BulkObservableFormat": {
       "type": "object",
       "properties": {
         "Hash": {"$ref": "#/definitions/Hash"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "oneOf": [
          {"required": ["Hash"]},
          {"required": ["AdditionalData"]}
       ],
       "additionalProperties": false},
     "IndicatorExpression": {
       "type": "object",
       "properties": {
         "operator": {
           "enum": ["not", "and", "or", "xor"], "default": "and"},
         "ext-operator": {"type": "string"},
         "IndicatorExpression": {
           "type": "array",
           "items": {
             "$ref": "#/definitions/IndicatorExpression"},
           "minItems": 1},
         "Observable": {
           "type": "array",
           "items": {"$ref": "#/definitions/Observable"},
           "minItems": 1},
         "uid-ref": {
           "type": "array",
           "items": {"$ref": "#/definitions/IDREFType"},
           "minItems": 1},
         "IndicatorReference": {
           "type": "array",
           "items": {
             "$ref": "#/definitions/IndicatorReference"},
           "minItems": 1},
         "Confidence": {"$ref":"#/definitions/Confidence"},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": [],
       "additionalProperties": false},
     "IndicatorReference": {
       "type": "object",
       "properties": {
         "uid-ref": {"$ref":"#/definitions/IDREFType"},
         "euid-ref": {"type": "string"},
         "version": {"type": "string"}},
       "oneOf": [
          {"required": ["uid-ref"]},
          {"required": ["euid-ref"]}
       ],
       "additionalProperties": false},
     "AttackPhase": {
       "type": "object",
       "properties": {
         "AttackPhaseID": {
           "type": "array",
           "items": {"type": "string"},
           "minItems": 1},
         "URL": {
           "type": "array",
           "items": {"$ref": "#/definitions/URLtype"},
           "minItems": 1},
         "Description": {
           "type": "array",
           "items": {"$ref": "#/definitions/MLStringType"},
           "minItems": 1},
         "AdditionalData": {
           "$ref":"#/definitions/ExtensionTypeList"}},
       "required": [],
       "additionalProperties": false}},
   "title": "IODEF-Document",
   "description": "JSON schema for IODEF-Document class",
   "type": "object",
   "properties": {
     "version": {"type": "string"},
     "lang": {"$ref": "#/definitions/lang"},
     "format-id": {"type": "string"},
     "private-enum-name": {"type": "string"},
     "private-enum-id": {"type": "string"},
     "Incident": {
       "type": "array",
       "items": {"$ref": "#/definitions/Incident"},
       "minItems": 1},
     "AdditionalData": {
       "$ref":"#/definitions/ExtensionTypeList"}},
   "required": ["version", "Incident"],
   "additionalProperties": false}
                         Figure 6: JSON Schema

Acknowledgments

 We would like to thank Henk Birkholz, Carsten Bormann, Benjamin
 Kaduk, Alexey Melnikov, Yasuaki Morita, and Takahiko Nagata for their
 insightful comments on this document and CDDL.

Authors' Addresses

 Takeshi Takahashi
 National Institute of Information and Communications Technology
 4-2-1 Nukui-Kitamachi, Koganei, Tokyo
 184-8795
 Japan
 Phone: +81 42 327 5862
 Email: takeshi_takahashi@nict.go.jp
 Roman Danyliw
 CERT, Software Engineering Institute, Carnegie Mellon University
 4500 Fifth Avenue
 Pittsburgh, PA
 United States of America
 Email: rdd@cert.org
 Mio Suzuki
 National Institute of Information and Communications Technology
 4-2-1 Nukui-Kitamachi, Koganei, Tokyo
 184-8795
 Japan
 Email: mio@nict.go.jp
/home/gen.uk/domains/wiki.gen.uk/public_html/data/pages/rfc/rfc8727.txt · Last modified: 2020/08/05 23:42 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki