{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://security.blueai.jp/data/cases.schema.json",
  "title": "サイバー攻撃の被害事例データ",
  "description": "BlueAI セキュリティ (https://security.blueai.jp) の事例のデータ。ライセンスは CC BY 4.0。",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "publisher": {
      "type": "string"
    },
    "page": {
      "type": "string"
    },
    "license": {
      "type": "string"
    },
    "license_url": {
      "type": "string"
    },
    "version": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "count": {
      "type": "integer"
    },
    "cases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "事例の ID。事例ページの URL の末尾"
          },
          "url": {
            "type": "string",
            "description": "事例ページの URL"
          },
          "name": {
            "type": "string",
            "description": "事例の名前"
          },
          "name_en": {
            "type": "string",
            "description": "事例の英語の名前"
          },
          "year": {
            "type": "integer",
            "description": "事例の年"
          },
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "一覧で並べるときの日。公表の日か発生の日で、どちらかは事例による。日数の計算には使わない"
          },
          "industry": {
            "enum": [
              "manufacturing",
              "energy",
              "construction",
              "ict",
              "transport",
              "retail",
              "finance",
              "healthcare",
              "education",
              "services",
              "public",
              "cross"
            ],
            "description": "業種のコード。manufacturing、energy、construction、ict、transport、retail、finance、healthcare、education、services、public、cross のどれか。cross は 1 つの製品の脆弱性で多くの業種が被害を受けた事例"
          },
          "industry_label": {
            "type": "string",
            "description": "業種の名前"
          },
          "sector": {
            "type": "string",
            "description": "被害を受けた組織の事業の説明"
          },
          "failure_tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "決定的な失敗の種類。CSV では「 | 」で区切る"
          },
          "entry": {
            "type": "string",
            "description": "侵入口。出典をもとにした当サイトの要約"
          },
          "decisive_failure": {
            "type": "string",
            "description": "決定的な失敗。出典をもとにした当サイトの要約"
          },
          "impact": {
            "type": "string",
            "description": "被害。出典をもとにした当サイトの要約"
          },
          "would_prevent": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "同じ被害を防げた手立て。当サイトのまとめで、出典の記載ではない。CSV では「 | 」で区切る"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ],
            "description": "経過のうち、発生の日。分からなければ空"
          },
          "detect_date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ],
            "description": "経過のうち、組織が発見した日。分からなければ空"
          },
          "disclose_date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ],
            "description": "経過のうち、最初に公表した日。分からなければ空"
          },
          "recover_date": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
              },
              {
                "type": "null"
              }
            ],
            "description": "経過のうち、主な業務やサービスが全面的に戻ったと公表した日。一部の再開は含まない。分からなければ空"
          },
          "days_from": {
            "anyOf": [
              {
                "enum": [
                  "detect",
                  "start"
                ]
              },
              {
                "type": "null"
              }
            ],
            "description": "日数の起点。detect (発見の日) か、発見の日が分からないときは start (発生の日)"
          },
          "days_to_disclose": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "起点から disclose_date までの日数"
          },
          "days_to_recover": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "起点から recover_date までの日数"
          },
          "actors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "relation": {
                  "enum": [
                    "attributed",
                    "claimed"
                  ]
                }
              },
              "required": [
                "id",
                "name",
                "relation"
              ],
              "additionalProperties": false
            },
            "description": "つながるグループ。relation が attributed なら公表資料がそのグループを攻撃者として名指しした、claimed ならグループの犯行声明が報じられただけで帰属ではない。CSV では「ID:relation」を「 | 」で区切る"
          },
          "fact_sources": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "enum": [
                    "entry",
                    "count",
                    "leaked",
                    "ransom",
                    "recovery",
                    "actor"
                  ]
                },
                "url": {
                  "type": "string"
                },
                "checked": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                }
              },
              "required": [
                "question",
                "url",
                "checked"
              ],
              "additionalProperties": false
            },
            "description": "事例ページの「この事例への問い」に出典の原文で答えた問いと、その出典の URL と確認した日。question は entry、count、leaked、ransom、recovery、actor のどれか。原文の引用は出典の著作物なので入れていない。CSV では問いのコードを「 | 」で区切る"
          },
          "timeline": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
                },
                "kinds": {
                  "type": "array",
                  "items": {
                    "enum": [
                      "start",
                      "detect",
                      "disclose",
                      "leak",
                      "resume",
                      "recover",
                      "report",
                      "authority"
                    ]
                  }
                },
                "event": {
                  "type": "string"
                }
              },
              "required": [
                "date",
                "kinds",
                "event"
              ],
              "additionalProperties": false
            },
            "description": "経過の出来事。kinds は start、detect、disclose、leak、resume、recover、report、authority の種類で、付いていない出来事もある。JSON だけ"
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "date": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "label",
                "url",
                "publisher",
                "date"
              ],
              "additionalProperties": false
            },
            "description": "出典。CSV では URL を「 | 」で区切る"
          },
          "last_reviewed": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "description": "当サイトがこの事例を最後に見直した日"
          }
        },
        "required": [
          "id",
          "url",
          "name",
          "name_en",
          "year",
          "date",
          "industry",
          "industry_label",
          "sector",
          "failure_tags",
          "entry",
          "decisive_failure",
          "impact",
          "would_prevent",
          "start_date",
          "detect_date",
          "disclose_date",
          "recover_date",
          "days_from",
          "days_to_disclose",
          "days_to_recover",
          "actors",
          "fact_sources",
          "timeline",
          "sources",
          "last_reviewed"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "$schema",
    "name",
    "publisher",
    "page",
    "license",
    "license_url",
    "version",
    "count",
    "cases"
  ],
  "additionalProperties": false
}
