AI는 판정을 제안하고 사람이 승인한다: beenuar/AiSOC v21.0.0의 ‘실행 증명’ 탐지 게이트·LangGraph 트리아지·Investigation Ledger·3중 스위치 응답 심층 해부

한 줄 요약: beenuar/AiSOC는 보안 텔레메트리를 받아 탐지·상관·AI 트리아지·대응 제안까지 한 저장소에서 처리하는 셀프 호스팅 AI 보안관제센터(SOC)입니다. ‘AI가 알아서 막아 준다’를 내세우는 프로젝트는 아닙니다. 에이전트가 한 판단을 전부 Investigation Ledger에 남기고, 규칙은 실제로 발화하는 걸 확인해야 실행 대상에 넣으며, 응답은 사람 승인 없이는 벤더에 닿지 않게 묶어 둔 보수적인 설계가 특징입니다. 이 글에서는 v21.0.0(2026-11-01 14:05 KST 릴리스, MIT) 기준으로 구조와 동작 원리, 실행 방법, 그리고 Docker가 없는 박스에서 직접 돌려 본 결과를 정리합니다.

AiSOC의 이벤트 척추: 커넥터 91종 → Go ingest(OCSF 정규화·활동 투영) → Kafka → fusion(실행 규칙 2,538개) → Postgres 알림·상관 → LangGraph 에이전트 트리아지(LiteLLM→Ollama llama3.2:3b) → Investigation Ledger, 응답은 3중 스위치·승인 일시정지·벤더 재확인을 거친다
AiSOC의 이벤트 척추: 커넥터 91종 → Go ingest(OCSF 정규화·활동 투영) → Kafka → fusion(실행 규칙 2,538개) → Postgres 알림·상관 → LangGraph 에이전트 트리아지(LiteLLM→Ollama llama3.2:3b) → Investigation Ledger, 응답은 3중 스위치·승인 일시정지·벤더 재확인을 거친다

1. 한눈에 보기

항목 내용 (2026-11-02 16:5x KST 확인)
저장소 github.com/beenuar/AiSOC (2026-05-02 생성)
최신 릴리스 v21.0.0 — 2026-11-01 14:05 KST, 첨부: 소스 tarball·SPDX SBOM·checksums.txt
직전 릴리스 v20.4.0(10/31), v20.3.0(10/30), v20.2.1·v20.2.0(10/28) — 닷새 사이에 다섯 번
라이선스 MIT (개발 비용은 Cyble이 대며, README는 “Cyble 전용 기능·게이트 모듈·텔레메트리 없음”이라고 밝힘)
스타 / 포크 6,448★ / 660 포크, 오늘 하루 +446★ (GitHub Trending 전체 10위, Python 4위)
주 언어 Python(서비스 대부분) + Go(ingest·enrichment·osquery 확장) + TypeScript(realtime·MCP·Next.js 콘솔)
핵심 의존 Kafka, PostgreSQL, Redis, Qdrant, LiteLLM, Ollama(llama3.2:3b-instruct-q4_K_M), LangGraph / full 프로필: ClickHouse, Neo4j, OpenSearch
최소 요구 사양 Docker Compose v2, Docker VM 메모리 8GB·디스크 20GB, python3 3.9+, bash

2. 왜 이번 주에 떠올랐나

오늘 Trending에는 에이전트 메모리, 코딩 하네스, 음성 받아쓰기 프로젝트가 많이 올라왔습니다. 그 가운데 AiSOC는 “LLM 에이전트를 보안 운영의 실제 데이터 경로에 넣으면 무엇을 어떻게 감사할 것인가”라는 질문에 꽤 구체적인 답을 내놓은 드문 사례입니다. 관심을 끈 이유는 세 가지로 볼 수 있습니다.

신호 구체적 내용 실무 관점의 의미
키 없이 바로 동작 make up만으로 로컬 Ollama 모델이 실제 판정을 내고, 그 토큰 수가 Ledger에 기록됨. CISA KEV 피드도 키 없이 받아 옴 PoC 비용이 거의 0이고, 외부로 프롬프트가 나가지 않음
v21.0.0 메이저 릴리스 상관 그룹핑 축소(BREAKING), 서빙 모델 출처 증명, 전체 코호트 분모 공개, 리트로헌트 리허설 모드 평가 수치를 ‘좋게 보이도록’ 만들 여지를 스스로 줄인 릴리스
MCP 서버 동봉 Claude·Cursor·Continue·Cody에서 알림·케이스·Ledger 재생을 도구로 호출 코딩 에이전트 사용자층이 같은 도구 체계로 보안 데이터를 조회할 수 있음

3. 저장소 구조: 모노레포 안의 20개 서비스

Turborepo + pnpm 워크스페이스(turbo.json, pnpm-workspace.yaml)에 Python 서비스는 각자 Poetry로, Go 서비스는 각자 go.mod로 묶여 있습니다. 디렉터리를 기능별로 나누면 다음과 같습니다.

경로 내용
services/ ingest(Go), fusion, agents, api, actions, connectors, threatintel, ueba, honeytokens, purple-team, escalations, mesh, slack-bot, teams-bot, osquery-tls(Python), enrichment·demo-producer·osquery-extensions(Go), realtime·mcp(TS) — 총 20개
detections/ endpoint·cloud·identity·network·data-exfil 등 네이티브 규칙과 sigma/splunk/chronicle/car import, rule-ids.lock.json
hunts/, playbooks/ YAML 헌트 68개, 플레이북 YAML 50개
packages/ aisoc-sandbox·aisoc-migrate·aisoc-benchmark·aisoc-cli, SDK(py/go/ts), plugin-sdk, OCSF 타입, UI
apps/ web(Next.js 콘솔), docs(Docusaurus), mobile
schemas/, docs/ 이벤트 카탈로그(10개 소스·44개 이벤트 타입), ADR(docs/decisions), 감사 문서(docs/audit/REPOSITORY_REALITY.md)
scripts/ project_stats.py, check_*.py 패리티 게이트 — README에 적힌 수치를 트리에서 다시 세어 보고, 다르면 CI가 실패함

4. 이벤트 하나의 경로: 11단계

아키텍처 문서(docs/architecture/README.md)는 이벤트 하나를 따라가며 시스템 전체를 설명합니다. 요점만 정리하면 다음과 같습니다.

  • ① 수집: 커넥터 91종이 스케줄에 맞춰 폴링하거나, POST /v1/ingest/batch로 직접 푸시됩니다. 테넌트는 헤더가 아니라 자격 증명에서 결정됩니다. X-Tenant-ID 헤더는 자격 증명이 허용하는 범위와 교집합을 낼 때만 쓰이고, 자격 증명을 검증할 수 없으면 503을 돌려줍니다. 클라우드 쪽은 REST 폴링 대신 S3+SQS(CloudTrail 조직 트레일), GCP Pub/Sub, Azure Event Hubs, syslog/CEF 수집기를 쓰고, 각 수집기는 재개 가능한 커서와 폴링당 예산을 갖고 있어 밀린 데이터가 한꺼번에 쏟아지지 않습니다.
  • ② 정규화: Go ingest가 커넥터별 프로필로 페이로드를 OCSF 형태의 봉투에 맞춥니다. 이때 모든 이벤트에 활동 투영(actor·action·resource·location·outcome)을 붙입니다. actor.kind는 7종(human, service_account, workload, api_token, oauth_app, ai_agent, unknown)이며, 사용자 이름 모양으로 추측하지 않고 벤더가 문서화한 필드에서만 읽습니다(27가지 경우).
  • ③ 이벤트 척추: Kafka 토픽 aisoc.raw_events로 발행됩니다.
  • ④ 탐지: fusion이 실행 규칙을 평가하고, OCSF 카테고리 2(벤더 탐지 결과)이거나 심각도가 high 이상인 이벤트만 알림으로 승격합니다.
  • ⑤ 상관: {tenant}:{entity}:{tactic} 키로 기존 인시던트에 붙이거나 새 인시던트를 엽니다.
  • ⑥~⑧ 기록·푸시·트리아지: Postgres에 기록하고 aisoc.alerts.fused로 발행합니다. realtime은 이를 WebSocket으로 콘솔에 밀어 주고, agents는 LLM으로 자동 트리아지한 뒤 프롬프트·도구 호출·인용을 Ledger에 남깁니다.
  • ⑨~⑪ 플레이북·승인·검증: 플레이북이 트리아지 뒤에 매칭되고, 승인 단계에서 멈췄다가 사람이 승인하면 실행합니다. 실행 결과는 HTTP 200을 성공으로 간주하지 않고 벤더 측 상태를 다시 읽어 검증합니다.
서비스(core) 언어 · 포트 역할
services/ingest Go · :8080 인증된 수집, OCSF 클래스 17종 매핑, 활동 투영
services/fusion Python · :8003 규칙 평가, 슬라이딩 윈도 엔진, 테넌트 튜닝 오버레이, 상관
services/agents Python · :8084 LangGraph 기반 트리아지·조사·플레이북 엔진, Ledger 기록
litellm / ollama :4000 / :11434 LLM 게이트웨이(ADR-0006: core에 포함)와 번들 로컬 모델
services/api · realtime · apps/web Python :8000 · TS :8086 · Next.js :3000 REST API(OpenAPI 스펙 동봉), WebSocket 푸시, 콘솔
threatintel · connectors · actions Python CISA KEV 폴링·Qdrant 벡터, 커넥터 스케줄러, 거버넌스가 걸린 응답 실행기

5. 핵심 메커니즘 ①: 실행 가능하다는 것은 증명으로만 인정

이 프로젝트를 다른 오픈소스 SOC 스택과 가장 뚜렷하게 구분하는 부분입니다. 규칙 디렉터리에 YAML이 있다거나 enabled: true로 되어 있다는 이유만으로는 실행 규칙에 들어가지 못합니다. 벤더 형식의 이벤트를 실제 커넥터와 엔진에 재생해서, 그 규칙이 실제로 발화하는 것을 확인해야 컴파일된 룰셋에 들어갑니다. 그래서 디스크에 있는 7,023개 가운데 엔진이 로드하는 것은 2,538개뿐입니다. 이 숫자는 오히려 줄어드는 방향으로 관리됩니다. 아무 소스도 내보내지 않는 카운터를 참조하던 규칙은 윈도 규칙으로 다시 쓰거나, 이유를 기록하고 제외했습니다(아키텍처 문서는 2,603개에서 줄었다고 기록).

'실행 가능'은 증명으로만 인정된다: 디스크의 규칙 7,023개 중 실제 커넥터·엔진 재생으로 발화가 확인된 2,538개만 로드되고, 윈도 규칙 76개는 따로 세며, 발화 불가 규칙은 119개에서 2개로 줄었다. --prove-gate는 Windows 규칙 1,687개가 전부 침묵해야 통과한다
‘실행 가능’은 증명으로만 인정된다: 디스크의 규칙 7,023개 중 실제 커넥터·엔진 재생으로 발화가 확인된 2,538개만 로드되고, 윈도 규칙 76개는 따로 세며, 발화 불가 규칙은 119개에서 2개로 줄었다. –prove-gate는 Windows 규칙 1,687개가 전부 침묵해야 통과한다
  • 음성 대조군(negative control): --prove-gate는 Windows 커넥터를 되돌린 상태에서 Windows 규칙 1,687개가 전부 발화하지 않아야 통과합니다. 게이트가 실제로 무언가를 걸러 내는지를 증명하는 장치입니다.
  • 발화할 수 없는 규칙의 래칫: 119개에서 2개로 줄었고, 남은 2개는 행동 기준선이 쌓이기를 기다리는 중입니다. check_detection_fields.py가 이 숫자는 내려가기만 하도록 강제합니다.
  • 윈도 규칙은 따로 셈: 76개(카운트 73, 순서 시퀀스 3)는 실행 규칙 수에 더하지 않습니다. 임계값 기반 규칙과 단일 이벤트 매칭은 서로 비교할 수 없는 숫자라서입니다. Sigma correlation 문서(event_count, value_count, temporal, temporal_ordered)도 엔진이 표현할 수 없는 형태라면 근사하지 않고 거부합니다.
  • 테넌트 튜닝 오버레이: 규칙을 테넌트마다 복사하지 않고, 공유 코퍼스 위에 차이(비활성·심각도 하한·억제)만 얹습니다. 억제는 매치가 끝난 뒤 적용하므로, 누가 어떤 이유로 억제했는지 로그가 남습니다. 오버레이를 다시 불러오다 실패하면 튜닝이 사라진 상태로 돌아가지 않고 이전 오버레이를 유지합니다.

단, README는 이 게이트가 “도달 가능(reachable)”하다는 증명일 뿐, 공격을 탐지한다는 증명은 아니라고 명시합니다. 규칙의 품질, 즉 정탐률과 오탐률은 여전히 운영 데이터로 검증해야 할 몫입니다.

6. 핵심 메커니즘 ②: 에이전트의 권한 경계와 Investigation Ledger

agents 서비스의 pyproject.toml에는 스스로를 “LangGraph-based autonomous investigation and response”라고 소개하고 있지만, 실제 권한 설계는 매우 보수적입니다. LLM은 판정을 제안할 수 있을 뿐이고, 무엇을 실행할 수 있는지는 계약(capability contract)과 정책이 정합니다.

에이전트는 타입 도구만 호출하고, 근거 없는 인용은 사람 검토로 강등되며, 원시 로그·비밀값 모양 프롬프트는 거부된다. 번들 3B 모델은 50건 중 JSON 제약 전 44건·후 50건 사용 가능 출력, v21.0.0은 상관 그룹핑을 좁혀 탐지형 코호트 감소율이 42.6%에서 24.5%로 내려갔다
에이전트는 타입 도구만 호출하고, 근거 없는 인용은 사람 검토로 강등되며, 원시 로그·비밀값 모양 프롬프트는 거부된다. 번들 3B 모델은 50건 중 JSON 제약 전 44건·후 50건 사용 가능 출력, v21.0.0은 상관 그룹핑을 좁혀 탐지형 코호트 감소율이 42.6%에서 24.5%로 내려갔다
층위 허용 차단·강등 조건
컨텍스트 알림, 상관된 형제 알림, 엔티티 문맥, 같은 시그니처의 과거 판정을 읽음 연결하지 않은 텔레메트리는 볼 수 없음(탐색 기능 없음)
도구 레이크 질의, 그래프 탐색, 보강 조회 같은 타입이 정해진 도구 호출 모델이 SQL을 직접 쓰지 않음. 가설로 헌트를 만들 때도 닫힌 스키마를 채우고 값은 파라미터로 바인딩됨
근거 검사 판정마다 인용을 붙여야 함 증거에 없던 지표를 인용한 판정은 자동 종결 대신 사람 검토로 강등
프롬프트 사전 검증 정규화된 요약을 전송 원시 로그, OCSF 페이로드, 비밀값처럼 보이는 문자열은 사후 마스킹이 아니라 전송 거부
응답 제안, 프리뷰, 승인 후 실행 배포·테넌트·플레이북 세 스위치가 모두 켜져야 하고(기본값은 전부 OFF), 단계마다 계약을 다시 확인. 요청자와 승인자는 같은 사람일 수 없음

Ledger에는 프롬프트, 도구 호출, 인용, 판정, 토큰 비용이 모두 기록되고, 서명된 증거 번들로 내보낼 수 있습니다. 문서에 따르면 번들은 바이트 단위로 동일하게 재현되고, 프롬프트는 다이제스트로 담기며, OCSF 1.9.0 형식입니다. 플레이북 단계 어휘는 25종인데, 이 가운데 16종은 실행 시점에 계약으로 다시 검사받는 ‘거버넌스 동사’입니다. notify나 osquery_live_query도 여기에 속합니다. 채널에 메시지를 보내거나 전체 장비에 실시간 쿼리를 날리는 일도 운영자가 막을 수 있어야 한다는 판단입니다. v21 계열 CHANGELOG에는 ask_model 단계가 추가되었는데, 플레이북 작성자가 정해 둔 닫힌 선택지 안에서만 모델이 답하므로, 모델의 답변이 곧바로 어떤 행동으로 이어질 수는 없습니다.

번들 모델의 실제 수준

기본 모델은 CPU 추론을 고려해 고른 약 2GB짜리 llama3.2:3b-instruct-q4_K_M입니다. README가 공개한 측정치는 알림 50개 중 JSON 제약 전 44개, 제약 후 50개에서 사용 가능한 출력을 냈다는 것입니다. 정확도가 아니라 형식 신뢰성을 잰 숫자라는 점에 유의해야 합니다. 그리고 호스팅 모델(OpenAI, Anthropic 등)은 한 번도 측정된 적이 없어서 모델별 행에는 0이 아니라 “not measured”가 적혀 있습니다. 실서비스에서 쓰려면 make up-gpu, make up-host-llm 또는 콘솔에서 호스팅 공급자를 연결하는 쪽이 현실적인 선택입니다.

7. v21.0.0에서 바뀐 것: 평가 지표를 정직하게 세는 장치

변경 내용 왜 중요한가
BREAKING: 상관 그룹 축소 tactic이 없는 알림은 엔티티 단위가 아니라 규칙 단위로 묶고, 식별자가 하나도 없는 알림은 다른 규칙과 병합하지 않음. 탐지 형태 코호트 기준 감소율이 42.6%에서 24.5%로 내려감 관련 없는 알림까지 묶어 ‘감소율’을 부풀리던 효과를 제거. API 변경은 없고 기존 인시던트는 그대로 유지
서빙 모델 출처 증명 provenance_status 5종(verified, self_reported, unattributed, serving_mismatch, no_calls) 도입. 요청한 모델과 실제로 응답한 모델이 다르면 해당 모델의 성적으로 인정하지 않음 이전 평가 행은 resolved_models: [], 즉 72번의 호출이 어떤 모델에서 나왔는지 알 수 없었음. 과거 5개 행은 “unverified”로 표시
전체 코호트 분모 재현율 계산에서 기권·오류 케이스를 분모에서 빼지 않음. 종결 오염률과 요청 신뢰성(5개 카운트)을 함께 공개 선택적 재현율로 성능을 부풀리는 일을 방지
리플렉스 경로 관측 큐 지연부터 승인·writeback까지 9단계 타이밍과 결정 계약(지지 증거, 반대 증거, 빠진 전제, 에스컬레이션 사유) 기록 ‘왜 사람에게 넘겼나’를 구조화된 데이터로 감사 가능
리트로헌트 리허설 RETRO_HUNT_DRY_RUN: 스윕은 실제와 똑같이 돌리되(스윕 예산도 소비) 쓰기 경계에서 모든 변경을 보류 새 위협 인텔리전스를 과거 데이터에 안전하게 대 볼 수 있음
판정 모델 매트릭스 결정론적 기준선(균형 정확도 정확히 0.250, 악성 36건 중 0건 탐지)을 표에 나란히 표시 모델 성적을 어떤 하한선과 비교해 읽어야 하는지 명확해짐

알림 감소율도 하나로 합치지 않고 레거시 그룹핑 75.3%, 프로덕션 키 33.3%, 탐지 형태 코호트 24.5%의 세 수치를 이름을 붙여 따로 공개합니다. ‘AI SOC가 알림을 몇 % 줄인다’는 마케팅 숫자를 읽을 때 무엇을 확인해야 하는지 보여 주는 좋은 예입니다.

8. 설치와 실행

전체 스택(core)

git clone https://github.com/beenuar/AiSOC && cd AiSOC
make doctor          # 호스트 도구·메모리·디스크·포트 점검
make up              # .env와 비밀값 15개 생성, 관리자 계정 생성(비밀번호는 한 번만 출력)
make smoke           # 이벤트 1건을 ingest→Kafka→탐지→상관→Postgres→API까지 10단계 PASS/FAIL로 추적
make ingest-token    # 푸시용 자격 증명 발급
make bootstrap ARGS=--reset-password   # 관리자 비밀번호를 잃어버렸을 때

처음 실행할 때 약 2GB 모델을 볼륨으로 내려받으며, 이 볼륨은 make clean으로만 지워집니다. 포트가 이미 사용 중이면 설치를 멈추지 않고 빈 포트로 옮긴 뒤, 그 포트를 누가 쓰고 있었는지 알려 줍니다. 대화형 API 문서는 꺼져 있으므로 docs/openapi.yaml을 직접 봐야 합니다.

프로필 명령 서비스 수 RAM 구성
core make up 16 ~8GB 수집→탐지→상관→알림→트리아지→콘솔, LLM 게이트웨이, 로컬 모델, CISA KEV, 커넥터·응답 서비스
full make up-full 22 ~12GB core + 이벤트 레이크(ClickHouse), 엔티티 그래프(Neo4j), 전문 검색, 보강
demo make up && make demo 16 ~8GB core + is_synthetic = true로 표시된 합성 데이터

데이터 푸시와 MCP 연결

curl -X POST http://localhost:8081/v1/ingest/batch \
  -H 'Content-Type: application/json' -H "Authorization: Bearer $AISOC_INGEST_TOKEN" \
  -d '{"connector_id":"edr-1","connector_type":"crowdstrike","events":[{"severity":"high",
       "title":"Encoded PowerShell from Office","host":"WIN-FIN-01"}]}'

cd services/mcp && pnpm install && pnpm build
node dist/index.js install --host cursor --aisoc-url https://aisoc.example.com --api-key aisoc_pat_xxx

@aisoc/mcp는 패키지 준비는 끝났지만 npm에 아직 올라가지 않아서 npx -y @aisoc/mcp는 지금 동작하지 않습니다. 소스를 직접 빌드해야 합니다. 도구별로 필요한 스코프가 나뉘어 있으니(예: aisoc_lake_query는 lake:query, aisoc_preview_action은 actions:execute이지만 dry-run 전용), PAT는 읽기 스코프 위주로 최소 권한만 주는 것이 좋습니다. cases:write는 채팅에서 조사를 시작하게 할 때만 필요합니다.

9. 박스 스모크 테스트 (CPU 8코어, Docker 없음)

박스에는 Docker가 없어서 make up 전체 스택은 돌리지 않았습니다. 대신 오프라인으로 실행할 수 있는 세 가지를 2026-11-02 16:5x KST에 HEAD bd3313b(2026-11-02 16:22 KST 커밋) 기준으로 확인했습니다.

Docker 없는 박스 실측(2026-11-02 KST): aisoc-sandbox 0.1.0 demo는 합성 4단계 ledger를 0.048초에 출력, project_stats.py 재집계는 README 수치와 일치, aisoc-migrate 번역기는 SPL·KQL은 high/good, stats는 partial, transaction은 거부했다
Docker 없는 박스 실측(2026-11-02 KST): aisoc-sandbox 0.1.0 demo는 합성 4단계 ledger를 0.048초에 출력, project_stats.py 재집계는 README 수치와 일치, aisoc-migrate 번역기는 SPL·KQL은 high/good, stats는 partial, transaction은 거부했다
테스트 명령 결과 해석
오프라인 샌드박스 pip install aisoc-sandbox && aisoc-sandbox demo v0.1.0. lateral-movement 시나리오(Okta 불가능한 이동, T1078·T1078.004)가 DETECT→TRIAGE(83/100)→HUNT→RESPOND 4단계 ledger로 출력됨. 전체 실행 0.048초 “synthetic offline run (no LLM, no Docker)”이라고 표시됨. 미리 짜인 흐름을 보여 주는 데모이고, rule_count: "800+"는 현재 수치(2,538)와 맞지 않는 예전 값
시나리오 목록 aisoc-sandbox scenarios aws-credential-exfil, github-token-theft, kubernetes-privesc, lateral-movement, phishing-payload 5종. --json 출력 지원 교육용이나 데모용으로는 충분하지만 성능을 판단하는 근거가 될 수는 없음
수치 재집계 python3 scripts/project_stats.py 커넥터 91, 실행 규칙 2,538, 디스크 규칙 7,023, YAML 7,048, 서비스 20, executor 167개(66개 동사·38개 벤더), compose 16 core + 18 optional = 34, 클레임-게이트 매트릭스 352행(347개 게이트, 5개 부분 적용) README 수치와 일치. 0.25초. CHANGELOG Unreleased에 적힌 “151 over 60 verbs across 34 vendors”보다 HEAD가 더 앞서 있음
탐지 마이그레이션 python3 packages/aisoc-migrate/inbound.py --self-test “self-test OK — 3 dialects” PyPI에 aisoc-migrate 패키지는 없음(설치 실패). 저장소 안의 스크립트로 실행

마이그레이션 번역기는 “근사하느니 거부한다”는 원칙을 실제로 지키는지 쿼리 네 개로 확인해 봤습니다.

입력 confidence 출력 match_when / 비고
SPL index=windows EventCode=4688 Image="*\powershell.exe" CommandLine="*-enc*" high EventCode·Image·CommandLine 세 필드를 그대로 옮김. index는 Splunk 라우팅 필드라서 제외한다고 노트에 명시
KQL SecurityEvent | where EventID == 4625 and Account == "admin" good EventID·Account 옮김
SPL ... | stats count by user | where count > 10 partial “임계값은 옮겨지지 않았으니 윈도 엔진으로 다시 검토하라”는 경고가 붙음. 다만 match_when에 count_gt: 10 키가 남아 있어서, 그대로 활성화하면 오해할 수 있음
SPL ... | transaction user maxspan=5m none 규칙을 만들지 않음. “엔진에 세션 개념이 없다”는 거부 사유를 기록

10. 공식 콘솔: 트리아지 판정 화면

아래는 저장소의 apps/web/public/screenshots/에 있는 공식 화면입니다. README에 따르면 v20.1.0 실행 화면이며, 번들 로컬 모델이 낸 판정·신뢰도·근거를 가공하지 않고 그대로 보여 줍니다.

공식 저장소 스크린샷: Investigation Rail의 AI 트리아지 판정 화면. 번들 로컬 모델의 판정·신뢰도·근거를 그대로 보여 준다(README 기준 v20.1.0 실행 화면)
공식 저장소 스크린샷: Investigation Rail의 AI 트리아지 판정 화면. 번들 로컬 모델의 판정·신뢰도·근거를 그대로 보여 준다(README 기준 v20.1.0 실행 화면)

11. 비슷한 도구와 비교

도구 중심 역할 AiSOC와의 관계
AiSOC 수집·탐지·상관·LLM 트리아지·거버넌스 응답을 한 스택에, Ledger로 감사 —
Wazuh 엔드포인트 에이전트 기반 SIEM/XDR, 규칙·디코더 중심 AiSOC는 스스로 장기 보존·컴플라이언스 검색을 대체하지 않는다고 밝힘(ADR-0015, 상태 proposed). Wazuh를 상위 수집원으로 두고 AiSOC를 트리아지·조사 층으로 쓰는 구성이 자연스러움
Security Onion 네트워크 보안 모니터링 + 로그 관리 배포판 NSM 쪽 데이터 원천. AiSOC에는 Zeek/Suricata 커넥터가 있음
Shuffle / Tines류 SOAR 워크플로 자동화 AiSOC 플레이북은 기본값이 프리뷰이고 단계마다 계약을 검사함. 자동화 범위는 더 좁지만 감사성은 높음
TheHive + Cortex 케이스 관리, 관측값 분석 AiSOC는 케이스와 Ledger를 함께 제공. 이미 TheHive를 쓰는 팀이라면 겹치는 부분이 큼
Splunk·Sentinel·Elastic의 AI 기능 상용 SIEM 위의 코파일럿 AiSOC는 이들을 커넥터로 받고, aisoc-migrate로 SPL/KQL/EQL 규칙을 가져오며, 반대로 연합 검색용 쿼리를 내보냄

12. 트레이드오프와 주의할 점

항목 내용 대응
릴리스 속도 닷새 동안 v20.2.0부터 v21.0.0까지 다섯 번 릴리스. 메이저 번호가 평가 의미 재정의 같은 변경에도 올라감 태그를 고정해 운영하고, BREAKING 항목(상관 그룹핑)은 스테이징에서 감소율이 어떻게 바뀌는지 먼저 확인
문서 수치 드리프트 아키텍처 문서는 실행 규칙 2,535개(네이티브 765 + Sigma 1,770), README와 재집계는 2,538개. 윈도 규칙도 72+3과 76으로 다르게 적혀 있고, 샌드박스는 “800+”로 표시 수치는 project_stats.py로 직접 다시 세서 확인
저장소 위생 11/01 커밋(PR #1590)에서 저장소 루트에 macOS arm64용 .whl 파일 66개(semgrep, cryptography 등)가 함께 커밋됨 보안 제품 저장소인 만큼 클론 크기와 공급망 관점에서 거슬리는 부분. 이 파일들을 설치 경로에서 쓰지 않는지 확인 권장
모델 품질 기본 3B 모델은 형식 신뢰성만 측정됨. 호스팅 모델은 미측정 자체 종결 데이터로 replay 평가와 run_model_matrix.py --task verdict를 돌린 뒤 모델 선택
범위 SIEM을 대체하지 않음. 연결하지 않은 데이터는 볼 수 없음. 기본 설정은 자율 대응이 아님 기존 SIEM/EDR 위의 트리아지·조사 층으로 배치
패키징 npm 패키지 3종(MCP 포함)은 업로드 전이고, PyPI는 aisoc-sandbox 등 5종만 있음(aisoc-migrate는 없음) 소스 빌드를 전제로 계획
기여자 집중 최근 50개 커밋 가운데 40개가 메인테이너 한 명(Beenu Arora)의 커밋 Cyble의 후원과 GOVERNANCE.md를 보고 장기 유지 가능성을 따로 판단

13. 정리: 누가 써 볼 만한가

  • 써 볼 만한 팀: LLM 트리아지를 도입하고 싶지만 “AI가 왜 이 알림을 종결했나”를 감사할 수 있어야 하는 소규모 SOC나 MSSP. 탐지 엔지니어링 팀이라면 실행 증명 게이트와 마이그레이션 번역기의 ‘거부’ 설계만 따로 참고해도 얻을 것이 있습니다.
  • 아직 이른 팀: 수만 EPS 규모에서 장기 보존과 컴플라이언스 검색까지 한 제품으로 해결하려는 조직, 그리고 버전을 고정하고 업그레이드를 검증할 여력이 없는 조직.
  • 첫 주 체크리스트: make doctor로 환경 점검 → make up → make smoke 10/10 확인 → 위저드의 Load sample data → 실제 커넥터 하나(예: Okta) 연결 → Ledger에서 판정 근거와 토큰 비용 확인 → 플레이북은 프리뷰 상태로 1주 관찰.

AiSOC에서 가장 눈여겨볼 점은 기능 목록보다 숫자를 세는 방식입니다. 측정하지 않은 값은 0이 아니라 “측정 안 됨”으로 적고, 분모에서 불리한 케이스를 빼지 않으며, 게이트가 정말로 걸러 내는지는 일부러 망가뜨려서 확인합니다. AI SOC 제품을 평가할 때 그대로 가져다 쓸 수 있는 기준입니다.