/* =============================================================================
   목업 데이터 — PRISM SOC 시안
   -----------------------------------------------------------------------------
   문서 매핑:
     kpis       → §8.1 메인 대시보드 요약 지표
     sources    → §2  컨소시엄 포지셔닝 + §3.1 수집 대상(NAC/SDP/AI-NDR/AI GW/DBMS/WORM)
     grades     → §3.1/§5.1 C/S/O 등급 분류 기준
     aiCalls    → §8.1 생성형 AI 호출 현황(허용/마스킹/차단)
     scenarios  → §6.2 상관분석 결과 구조 + §8.4 위협 시나리오 뷰
     events     → §8.2 이벤트 타임라인 (OCSF 정규화된 공통 이벤트 모델 §3.2)
     mitre      → §8.4 MITRE ATT&CK 전술·기술 매핑
     kb/rag     → §5  지식베이스 · RAG · Reranker
     pipeline   → §4  수집→전처리→정규화→저장→분석→상관→설명→시각화
============================================================================= */

const MOCK = {
  now: "2026-04-20 14:37:12 KST",
  kpis: [
    { label: "금일 수집 이벤트", value: "4,281,604", unit: "건", delta: "+8.4%", dir: "up", spark: [12,18,14,22,19,26,24,30,27,33,31,38] },
    { label: "LLM 분석 완료", value: "362,118", unit: "건", delta: "+12.1%", dir: "up", spark: [5,7,9,8,11,13,12,14,15,18,17,20] },
    { label: "활성 위협 시나리오", value: "7", unit: "건", delta: "+2", dir: "up", spark: [2,3,3,4,5,5,6,6,7,7,7,7] },
    { label: "정책 차단(AI Gateway)", value: "184", unit: "건", delta: "-3.2%", dir: "down", spark: [22,19,23,20,18,21,17,19,16,18,15,14] },
  ],
  // 연계 보안 솔루션 — 문서 §2 컨소시엄 포지셔닝 + §3.1 수집 대상
  //   NAC/SDP/NDR=엠엘소프트, AIGW=모놀리, DBMS=피앤피시큐어, WORM=나무소프트
  //   비티소프트는 이 소스들의 이벤트를 통합 수집·정규화(§3.2 OCSF)하여 상관분석의 기반으로 사용
  sources: [
    { key: "NAC",  label: "NAC",        vendor: "네트워크 접근통제",     role: "사용자·단말 인증",         events: 962184, status: "healthy", latency: 42, norm: 99.8 },
    { key: "SDP",  label: "SDP",        vendor: "Zero Trust 접근",       role: "Zero Trust 세션",         events: 418907, status: "healthy", latency: 38, norm: 99.6 },
    { key: "NDR",  label: "AI-NDR",     vendor: "네트워크 탐지",         role: "네트워크 이상행위 탐지",    events: 1284221, status: "degraded", latency: 128, norm: 97.2 },
    { key: "AIGW", label: "AI Gateway", vendor: "AI 서비스 통제",        role: "생성형 AI 입·출력 통제",   events: 214660, status: "healthy", latency: 22, norm: 99.9 },
    { key: "DBMS", label: "DB 보안",    vendor: "DB 접근 보안",          role: "쿼리·데이터 등급 판정",    events: 982450, status: "healthy", latency: 51, norm: 99.4 },
    { key: "WORM", label: "WORM 스토리지", vendor: "스토리지 보호",       role: "무결성·랜섬웨어 대응",   events: 420182, status: "healthy", latency: 67, norm: 99.9 },
  ],
  grades: { C: 62, S: 28, O: 10 },
  aiCalls: {
    total: 12840,
    allow: 10421,
    mask: 2235,
    block: 184,
    services: [
      { name: "Claude Enterprise", calls: 4820, block: 41 },
      { name: "GPT Corp", calls: 3214, block: 58 },
      { name: "Gemini Work", calls: 2102, block: 22 },
      { name: "Clova X Biz", calls: 1512, block: 34 },
      { name: "사내 LLM(MLX)",  calls: 1192, block: 29 },
    ],
  },
  // 시나리오 — 문서 §6.2 상관분석 결과 구조 + §8.4 위협 시나리오 뷰
  // 각 시나리오는 [ID·기간 / 관련 사용자·자산 / 핵심 이벤트 체인 /
  //   시나리오 요약 / 정책·등급 판단 / 대응 후보] 구조를 따르며,
  //   MITRE ATT&CK 전술·기술(§8.4 ※)을 함께 표시.
  scenarios: [
    {
      id: "SCN-26042014-017",
      title: "S등급 고객정보 조회 후 외부 생성형 AI 전송 시도",
      severity: "critical",
      started: "14:21:08",
      duration: "16분",
      user: { name: "정민재", id: "jm.jung", dept: "여신심사본부 / 심사2부", role: "심사역" },
      device: "WKS-0C41 (사내 단말)",
      assets: ["CUST_MAIN.T_CUSTOMER", "CUST_MAIN.T_LOAN", "prompt_log/ext"],
      tactics: ["Collection", "Exfiltration"],
      summary: "동일 세션 내 S등급 고객정보 7,421건 조회 후 외부 생성형 AI로 프롬프트 전송이 시도되었으며 AI Gateway가 정책 위반으로 차단했습니다. 이후 NDR에서 동일 세션의 비정상 도메인 통신 1건이 관측되어 연계 분석이 필요합니다.",
      chain: [
        { src: "NAC",  t: "14:21:08", title: "사용자 인증 성공", sub: "jm.jung / WKS-0C41 · 단말 무결성 OK", sev: "info" },
        { src: "SDP",  t: "14:21:14", title: "세션 생성 / 내부 DB망",   sub: "정책 match: P-INT-DB-03", sev: "info" },
        { src: "DBMS", t: "14:22:41", title: "S등급 고객정보 7,421건 조회", sub: "SELECT T_CUSTOMER → 주민·연락처 컬럼 포함", sev: "medium" },
        { src: "AIGW", t: "14:26:02", title: "외부 LLM 프롬프트 전송 차단", sub: "정책 P-GAI-S-01 / 민감등급 판정(0.94)", sev: "critical" },
        { src: "NDR",  t: "14:27:33", title: "비정상 외부 도메인 통신 탐지", sub: "C2 의심 스코어 0.72 · 단발성", sev: "high" },
        { src: "WORM", t: "14:28:10", title: "로컬 파일 저장 시도(차단)", sub: "WORM 정책 위반 시도 1건", sev: "medium" },
      ],
      policies: [
        { id: "N2SF-M2-D-07", name: "모델2 데이터 흐름 통제 기준", section: "§4.2 외부 서비스 전송 시 C/S/O 판정 의무" },
        { id: "INT-GAI-05", name: "내부 생성형 AI 활용 지침", section: "§3.3 S등급 데이터의 프롬프트 포함 금지" },
      ],
      xai: {
        what: "해당 이벤트는 동일 세션 내에서 S등급 고객정보가 포함된 쿼리 결과를 조회한 직후, 외부 생성형 AI 서비스로 프롬프트 전송이 시도된 사례입니다. AI Gateway가 C/S/O 분류기에서 민감등급으로 판정(0.94)하여 정책 P-GAI-S-01에 의거 차단하였습니다.",
        why: "쿼리 결과에는 주민·연락처 등 개인식별정보 컬럼이 포함되었으며, 프롬프트 원문에 해당 값이 그대로 포함된 것으로 판정되었습니다. 동일 세션은 SDP 인증을 통과한 상태였으나, 외부 전송 대상 데이터가 민감등급으로 판정되었고, NDR에서 직후 관측된 비정상 도메인 통신은 단발성이지만 C2 의심 스코어가 0.72로 상관분석 대상입니다.",
        policy: "N2SF 모델2 데이터 흐름 통제 기준(§4.2)과 기관 내부 생성형 AI 활용 지침(§3.3)에 따라, S등급 데이터는 외부 LLM 프롬프트에 포함될 수 없습니다. 본 차단은 동일 기준에 부합합니다.",
        check: "① 해당 세션의 이전 10분 쿼리 이력에서 추가 조회가 있었는지, ② 동일 사용자의 최근 3일 반복 시도 여부, ③ NDR이 탐지한 외부 도메인과의 과거 통신 이력, ④ 단말 WKS-0C41의 저장 영역에 해당 조회 결과물이 남아있는지 확인이 필요합니다.",
      },
    },
    {
      id: "SCN-26042013-013",
      title: "심야 반복 인증 실패 후 임시 우회 경로 세션 시도",
      severity: "high",
      started: "02:12:03",
      duration: "38분",
      user: { name: "(공용) ops-batch", id: "svc.ops", dept: "IT운영 / 공용계정", role: "시스템" },
      device: "JMP-07",
      assets: ["SDP/EX-PATH-02"],
      tactics: ["Credential Access", "Initial Access"],
      summary: "공용계정 대상 인증 실패 14회 이후 동일 IP에서 임시 예외경로로 세션 수립이 시도되었으며 SDP 정책이 차단했습니다.",
      chain: [
        { src: "NAC", t: "02:12:03", title: "반복 인증 실패 14회", sub: "svc.ops → JMP-07 · 동일 IP", sev: "high" },
        { src: "SDP", t: "02:24:41", title: "예외경로 세션 수립 시도 차단", sub: "정책 EX-PATH-02 거부", sev: "high" },
        { src: "NDR", t: "02:31:17", title: "동일 IP 내부 스캔성 트래픽", sub: "포트 스캔 유사 패턴", sev: "medium" },
      ],
      policies: [
        { id: "IAM-ACC-04", name: "공용계정 사용 통제", section: "§2.4 야간 시간대 사용 금지" },
      ],
      xai: {
        what: "공용계정 svc.ops에 대해 14회 인증 실패가 집중 발생하였고, 직후 동일 IP에서 예외경로 세션 수립이 시도되었습니다.",
        why: "야간 시간대(02:00~06:00) 공용계정 사용은 내부 정책에 의해 금지되어 있으며, 반복 인증 실패 + 예외경로 시도 조합은 계정 탈취 초기 단계로 해석됩니다.",
        policy: "IAM-ACC-04(§2.4)에 따라 야간 시간대 공용계정 사용은 금지되며, SDP 정책 EX-PATH-02에 의해 예외경로 세션도 거부됩니다.",
        check: "① 동일 IP의 최근 7일 인증 이력, ② JMP-07 단말의 소유자 확인, ③ 배치 일정에 해당 시각 실행 예정이 있었는지 확인이 필요합니다.",
      },
    },
    {
      id: "SCN-26042012-009",
      title: "WORM 스토리지 대량 파일 수정 시도(랜섬웨어 의심)",
      severity: "high",
      started: "12:04:55",
      duration: "4분",
      user: { name: "김한별", id: "hb.kim", dept: "디지털사업본부", role: "개발자" },
      device: "WKS-1B12",
      assets: ["nas://share/dept-digital/*"],
      tactics: ["Impact"],
      summary: "단일 단말에서 WORM 스토리지의 파일 128개에 대해 연속 수정 시도가 발생하여 정책 차단되었습니다.",
      chain: [
        { src: "WORM", t: "12:04:55", title: "대량 수정 시도 128건", sub: "암호화 확장자 패턴 일치", sev: "high" },
        { src: "NDR", t: "12:05:22", title: "단말 이상 내부 트래픽", sub: "SMB 다중 연결 급증", sev: "medium" },
      ],
      policies: [
        { id: "STG-WORM-01", name: "WORM 저장소 무결성 보호", section: "§1.2 대량 변경 자동 차단" },
      ],
      xai: {
        what: "단일 단말에서 128개 파일에 대해 짧은 시간 내 연속 수정 시도가 관측되었고, 변경 대상 확장자 패턴이 랜섬웨어 의심 패턴과 일치합니다.",
        why: "WORM 정책 STG-WORM-01에 의거, 대량 변경은 자동 차단 대상입니다. 단말에서 SMB 다중 연결이 동시 관측된 점은 횡적 이동 가능성도 시사합니다.",
        policy: "STG-WORM-01(§1.2)는 시간당 100건 이상 수정 시도를 자동 차단합니다.",
        check: "① WKS-1B12의 프로세스 목록, ② 동일 단말의 최근 외부 다운로드 이력, ③ 동일 부서 타 단말의 유사 패턴 여부를 확인해야 합니다.",
      },
    },
  ],
  // 이벤트 — 문서 §8.2 이벤트 타임라인
  // OCSF 기반 공통 이벤트 모델(§3.2)로 정규화된 이벤트:
  //   t(시간) / src(솔루션) / sev(severity) / user / title / asset / grade(C/S/O) / policy / scn
  events: [
    { t: "14:28:10", src: "WORM", sev: "medium", user: "jm.jung", title: "WORM 정책 위반 저장 시도", asset: "nas://personal/jm.jung/draft.txt", grade: "S", policy: "STG-WORM-01", scn: "SCN-26042014-017" },
    { t: "14:27:33", src: "NDR",  sev: "high",   user: "jm.jung", title: "비정상 외부 도메인 통신", asset: "ext:api-helper-cloud.top", grade: "-", policy: "-", scn: "SCN-26042014-017" },
    { t: "14:26:02", src: "AIGW", sev: "critical", user: "jm.jung", title: "외부 LLM 프롬프트 차단", asset: "Claude Enterprise", grade: "S", policy: "P-GAI-S-01", scn: "SCN-26042014-017" },
    { t: "14:22:41", src: "DBMS", sev: "medium", user: "jm.jung", title: "S등급 고객정보 7,421건 조회", asset: "CUST_MAIN.T_CUSTOMER", grade: "S", policy: "DB-QRY-02", scn: "SCN-26042014-017" },
    { t: "14:21:14", src: "SDP",  sev: "info",   user: "jm.jung", title: "세션 생성 · 내부 DB망", asset: "P-INT-DB-03", grade: "-", policy: "P-INT-DB-03", scn: "SCN-26042014-017" },
    { t: "14:21:08", src: "NAC",  sev: "info",   user: "jm.jung", title: "인증 성공 · 단말 무결성 OK", asset: "WKS-0C41", grade: "-", policy: "-", scn: "SCN-26042014-017" },
    { t: "14:18:47", src: "AIGW", sev: "low",    user: "sy.park", title: "프롬프트 내 C등급 정보 마스킹", asset: "GPT Corp", grade: "C", policy: "P-GAI-C-02", scn: null },
    { t: "14:16:02", src: "NDR",  sev: "medium", user: "-",        title: "이상 플로우: 외부 대용량 전송", asset: "ext:aws-s3-bucket-xxx", grade: "-", policy: "-", scn: null },
    { t: "14:15:11", src: "DBMS", sev: "info",   user: "hr.lee",   title: "O등급 마케팅 데이터 조회", asset: "MKT.T_CAMPAIGN",    grade: "O", policy: "-", scn: null },
    { t: "14:12:39", src: "NAC",  sev: "low",    user: "sj.choi",  title: "단말 무결성 경고(패치 누락)", asset: "WKS-2F88", grade: "-", policy: "EDR-PATCH-01", scn: null },
    { t: "14:10:20", src: "SDP",  sev: "info",   user: "ky.han",   title: "세션 정상 종료", asset: "-", grade: "-", policy: "-", scn: null },
    { t: "14:08:54", src: "AIGW", sev: "low",    user: "mj.oh",    title: "프롬프트 허용 · C/S/O=C(0.98)", asset: "Clova X Biz", grade: "C", policy: "P-GAI-ALLOW", scn: null },
  ],
  policies: [
    { id: "N2SF-M2-D-07", title: "모델2 데이터 흐름 통제 기준", org: "N2SF 가이드", category: "데이터 거버넌스", effective: "2025-09-01", rule: "외부 서비스 전송 시 C/S/O 판정 후 S등급 이상 원문 차단", tags: ["모델2","데이터흐름","C/S/O"], excerpt: "모델2 구간에서 외부 서비스로 전송되는 모든 데이터는 사전에 C/S/O 분류를 수행하고, S등급 이상은 원문 전송이 금지된다. 전송 직전의 프롬프트 텍스트에 대해서도 동일한 기준이 적용되며…" },
    { id: "INT-GAI-05",  title: "내부 생성형 AI 활용 지침", org: "기관 내부규정", category: "AI 거버넌스", effective: "2025-11-15", rule: "업무 외 생성형 AI 사용 금지 · S등급 마스킹 의무", tags: ["생성형AI","프롬프트","민감정보"], excerpt: "업무 목적 외 생성형 AI 서비스 호출은 허용되지 않으며, S등급 정보는 마스킹·치환 절차 없이 프롬프트에 포함될 수 없다…" },
    { id: "IAM-ACC-04",  title: "공용계정 사용 통제", org: "기관 내부규정", category: "계정·접근", effective: "2024-07-20", rule: "야간(02:00~06:00) 수동 로그인 차단 · 배치 외 공용계정 금지", tags: ["IAM","공용계정","야간"], excerpt: "공용계정은 승인된 배치 스케줄 외에는 사용이 금지되며, 야간 시간대(02:00~06:00)의 수동 로그인 시도는 자동 경보 대상이다…" },
    { id: "STG-WORM-01", title: "WORM 저장소 무결성 보호", org: "기관 내부규정", category: "스토리지", effective: "2025-03-10", rule: "시간당 100건 이상 변경 시도 자동 차단 · 세션 일시 격리", tags: ["WORM","무결성","랜섬웨어"], excerpt: "WORM 정책이 적용된 저장소는 시간당 100건 이상 수정 시도 발생 시 자동 차단되며, 해당 단말의 세션은 일시 격리된다…" },
    { id: "N2SF-PROC-05", title: "N2SF 5단계 절차 가이드", org: "N2SF 가이드", category: "거버넌스 절차", effective: "2025-06-01", rule: "5단계 절차 기반 운영 증적 수집 및 적절성 평가", tags: ["준비","등급분류","위협식별","보안대책","적절성평가"], excerpt: "수요기관은 준비·등급분류·위협식별·보안대책 수립·적절성 평가의 5단계 절차에 따라 보안 운영계획을 수립하고 운영 중 로그와 이벤트를 근거로 지속 갱신해야 한다…" },
    { id: "P-GAI-S-01",   title: "S등급 프롬프트 전송 차단 정책", org: "AI Gateway", category: "AI 거버넌스", effective: "2025-11-15", rule: "S등급 분류기 0.85 이상 → 차단 · 사유코드 S-BLK-01", tags: ["정책","S등급","차단"], excerpt: "프롬프트 텍스트에서 S등급 분류기가 0.85 이상 신뢰도로 민감으로 판정한 경우 전송을 차단하고 사유 코드 S-BLK-01을 부여한다…" },
    { id: "P-GAI-C-02",   title: "C등급 프롬프트 마스킹 정책", org: "AI Gateway", category: "AI 거버넌스", effective: "2025-11-15", rule: "C등급 PII 패턴 감지 시 토큰 치환 후 전달", tags: ["정책","C등급","마스킹"], excerpt: "프롬프트에 C등급 PII 패턴이 감지되면 원문 값을 토큰으로 치환한 뒤 외부 LLM에 전달하며, 원문은 로컬 감사 로그에만 기록된다…" },
    { id: "P-GAI-ALLOW",  title: "저위험 생성형 AI 허용", org: "AI Gateway", category: "AI 거버넌스", effective: "2025-11-15", rule: "C등급 이하 · 신뢰도 0.95 이상 요청 통과", tags: ["정책","허용"], excerpt: "C등급 이하로 판정된 프롬프트 중 분류 신뢰도 0.95 이상은 감사 로그만 남기고 그대로 전달된다…" },
    { id: "P-INT-DB-03",  title: "내부 DB망 세션 정책", org: "SDP", category: "네트워크·세션", effective: "2025-02-05", rule: "승인된 업무군만 내부 DB망 세션 허용", tags: ["SDP","세션"], excerpt: "내부 DB망 세션은 사전 승인된 업무군과 단말 무결성 조건을 충족한 경우에만 수립되며, 세션 중 신뢰도 저하 시 자동 격리된다…" },
    { id: "DB-QRY-02",    title: "S등급 대량 조회 감지", org: "DBMS 감사", category: "데이터 거버넌스", effective: "2025-04-12", rule: "S등급 컬럼 포함 쿼리 평균 대비 3σ 초과 시 경보", tags: ["DB","대량조회"], excerpt: "S등급 컬럼이 포함된 쿼리의 반환 건수가 사용자 평균 대비 3σ를 초과하면 medium 경보를 발생시킨다…" },
    { id: "EDR-PATCH-01", title: "단말 패치 무결성 정책", org: "EDR", category: "단말", effective: "2024-11-20", rule: "OS 보안 패치 30일 이상 누락 시 경고", tags: ["EDR","패치"], excerpt: "단말의 OS 보안 패치가 30일 이상 누락된 경우 low 등급 경고를 발생시키고, 90일 초과 시 네트워크 접근이 제한된다…" },
    { id: "EX-PATH-02",   title: "SDP 예외경로 차단", org: "SDP", category: "네트워크·세션", effective: "2025-02-05", rule: "승인되지 않은 예외경로 세션 수립 거부", tags: ["SDP","예외경로"], excerpt: "SDP 신뢰 평가를 우회하는 예외경로 세션 시도는 모두 거부되며, 관련 이벤트는 시나리오로 자동 연결된다…" },
  ],
  users: [
    { id: "jm.jung", name: "정민재", dept: "여신심사본부", risk: 82, events: 147, last: "14:28", flags: ["S등급 다수 조회","외부AI 시도"] },
    { id: "hb.kim",  name: "김한별", dept: "디지털사업본부", risk: 61, events: 92, last: "12:09", flags: ["WORM 위반"] },
    { id: "sy.park", name: "박서연", dept: "개인금융본부", risk: 24, events: 44, last: "14:22", flags: [] },
    { id: "hr.lee",  name: "이해린", dept: "마케팅본부", risk: 18, events: 38, last: "14:15", flags: [] },
    { id: "svc.ops", name: "(공용) ops-batch", dept: "IT운영", risk: 71, events: 61, last: "02:31", flags: ["야간 인증실패","예외경로 시도"] },
    { id: "mj.oh",   name: "오민재", dept: "기업금융본부", risk: 12, events: 21, last: "14:09", flags: [] },
    { id: "sj.choi", name: "최수진", dept: "디지털사업본부", risk: 34, events: 28, last: "14:12", flags: ["단말 패치누락"] },
    { id: "ky.han",  name: "한가윤", dept: "감사본부", risk: 8, events: 12, last: "14:10", flags: [] },
  ],
  aiHourly: [
    // 24h 생성형 AI 호출 시계열 (allow/mask/block)
    {h:"00", a:120, m:18, b:2}, {h:"01", a:82, m:10, b:1}, {h:"02", a:30, m:4, b:0},
    {h:"03", a:22, m:2, b:0}, {h:"04", a:18, m:2, b:0}, {h:"05", a:24, m:3, b:0},
    {h:"06", a:48, m:8, b:1}, {h:"07", a:110, m:24, b:3}, {h:"08", a:260, m:60, b:6},
    {h:"09", a:640, m:140, b:12}, {h:"10", a:920, m:210, b:18}, {h:"11", a:1020, m:230, b:22},
    {h:"12", a:720, m:160, b:15}, {h:"13", a:980, m:220, b:20}, {h:"14", a:1120, m:260, b:28},
    {h:"15", a:880, m:200, b:17}, {h:"16", a:740, m:170, b:13}, {h:"17", a:520, m:110, b:9},
    {h:"18", a:310, m:60, b:6}, {h:"19", a:220, m:40, b:3}, {h:"20", a:180, m:30, b:3},
    {h:"21", a:150, m:22, b:2}, {h:"22", a:130, m:18, b:2}, {h:"23", a:110, m:14, b:1},
  ],
};

window.MOCK = MOCK;
