Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
log-horizon — Microsoft Sentinel SIEM 로그 소스 분석기 | Kitploit
도구/GitHubGitHub/lnfernux/log-horizon
Cloud Infrastructure SecurityConfiguration AuditingCloud SecurityDevSecOpsThreat IntelligenceIncident ResponseLog Analysis
GitHublnfernux/log-horizon

log-horizon

Microsoft Sentinel SIEM 로그 소스 분석기

저장소 보기
28319시간 7분 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Microsoft Sentinel SIEM 로그 소스 분석기

PowerShell 7+ Module Version


"이 로그들에서 실제로 무엇을 얻고 있는가?" 또는 "Microsoft Sentinel에 권장되는 로그는 무엇인가?" 라는 질문을 셀 수 없이 많이 받아왔습니다. 답은 항상 많은 요소에 따라 달라지지만, 일반적인 기준을 제시할 수는 있습니다. 그래서 바로 여기 이 도구를 만들었습니다.

Log Horizon은 Microsoft Sentinel 작업 영역(선택적으로 Defender XDR 포함)에 연결하여, 수집 중인 모든 로그 테이블을 검토하고 보안 가치가 있는지 아니면 단순히 비용만 낭비하고 있는지 알려줍니다. 테이블을 분류하고, 탐지 규칙과 대조하여 점수를 매기며, 비용 절감 추정치와 함께 구체적인 권장 사항을 제공합니다.

중요: 이는 일반적인 접근 방식입니다. 특정 로그 소스가 환경에 중요하다는 것을 알고 있다면, 그 맥락이 항상 이 도구가 알려주는 내용보다 우선합니다. 분류는 출발점일 뿐, 절대적인 기준이 아닙니다.

더 읽어보시겠어요? 제 블로그에 Log Horizon에 관한 게시물이 있습니다:

  1. 도구 출시: Log Horizon
  2. 업데이트: Log Horizon v0.5.0
  3. 실용적인 로그 기준선 구축과 Log Horizon이 이를 돕는 방법
  4. Log Horizon 사용 방법

기능

기능설명
분류 엔진240개 이상의 커넥터, 22개 범주를 포함하는 481개 항목 지식 베이스, 수명 주기 상태(더 이상 사용되지 않음/레거시 및 대체 테이블 포함), 알 수 없는 테이블에 대한 자동 휴리스틱 대체
비용-가치 점수테이블별 비용 등급 대 탐지 등급 매트릭스와 결합 평가(높은 가치~낮은 가치), 관찰된 플랜(Analytics, Basic, Data Lake)별 가격 책정
권장 사항13가지 우선순위 조치 유형: 데이터 레이크 또는 Basic 후보, 탐지 제로 테이블, XDR 스트리밍 낭비, 수집 시 필터링, 분할 후보, 플랜 사용, 더 이상 사용되지 않는 소스, 보존 부족, XDR Checker 및 Detection Analyzer 결과(각각 비용 절감 추정치 포함)
탐지 매핑분석 규칙, 헌팅 쿼리 및 XDR 탐지를 각 테이블에 매핑하여 적용 범위 공백 식별
상관 관계 태그규칙 설명에서 #DONT_CORR# / #INC_CORR# 태그를 감지하고 Defender 상관 관계에서 제외된 규칙 플래그 지정
보존 규정 준수업계 표준 및 보안 모범 사례를 기반으로 권장 최소값과 실제 보존 기간 비교
SOC 최적화Security Insights API에서 Microsoft 자체 SOC 개선 권장 사항 가져오기
키워드 격차 분석공급업체/제품 키워드를 기반으로 수집해야 하지만 수집하지 않는 테이블 플래그 지정
변환 검색작업 영역을 대상으로 하는 DCR(데이터 수집 규칙) 검색(대상으로 필터링된 구독 목록, 작업 영역 변환 DCR 및 작업 영역 연결), 인라인 및 다단계 변환 구문 분석, 모든 작업에 레이블 지정(필터, 프로젝션, 열 제거, 보강, 집계)
분할 테이블 감지_SPLT_CL 분할 테이블 식별 및 분류 엔진의 상위 테이블에 연결
분할 KQL 생성기큐레이팅된 지식 베이스, 실시간 규칙 분석 및 커뮤니티 필드 빈도 통계에서 포털 준비 분할 KQL 생성 -- Sentinel 분할 규칙 편집기에 바로 붙여넣을 수 있는 조건 전용 형식. 필드 목록은 테이블의 실시간 스키마와 교차되며, 존재하지 않는 항목은 누락으로 보고됨
탐지 분석기인시던트 결과(자동 종료 비율, 오탐 비율 및 인시던트 볼륨 백분위수)를 사용하여 분석 규칙의 잠재적 노이즈 수준 점수화
XDR CheckerXDR 중심 자문 계층 추가: XDR 관련 원격 분석에 대한 스트리밍 적용 범위 확인 및 1년 Data Lake 보존 지침
사용자 지정 분류자체 JSON을 제공하여 기본 제공 분류 데이터베이스에 추가 또는 재정의
수집 캐시수집된 작업 영역 데이터는 로컬에 캐시(기본 60분)되어 재실행 및 재내보내기가 몇 초 만에 완료됨. -NoCache로 옵트아웃 가능
소버린 클라우드ARM, Log Analytics 및 Graph 엔드포인트는 로그인한 Azure 환경(퍼블릭, US Government, China)을 따름
대화형 TUI메뉴, 색상 코드 테이블, 드릴다운, 보존 마법사 및 ASCII 아트가 포함된 Spectre.Console 대시보드
내보내기팀과 공유하기 위한 JSON, Markdown 또는 정적 HTML 보고서

고지 사항

[!CAUTION] 고지 사항

이 도구는 AI의 도움으로 개발 및 유지 관리됩니다. 이 솔루션을 사용할 때는 주의를 기울이고, 프로덕션 환경에서 실행하기 전에 항상 실행 중인 내용을 이해하시기 바랍니다. 개발자는 취약점이나 문제에 대해 어떠한 책임도 지지 않습니다.

이 도구를 다운로드, 설치 또는 사용함으로써 귀하는 본 조건을 읽고 이해했으며 동의함을 인정합니다.

사전 요구 사항

필요한 항목버전
PowerShell7.0+

엔드포인트는 현재 Connect-AzAccount 세션의 Azure 환경을 따르므로 Azure Government 및 Azure China 작업 영역은 추가 매개변수 없이 작동합니다. 사용 가능한 환경이 없으면 퍼블릭 클라우드 값이 사용됩니다.

Azure에 아직 로그인하지 않은 경우 모듈이 Connect-AzAccount를 자동으로 실행합니다. 이미 로그인되어 있다면 그대로 계속 진행됩니다.

권한: 작업 영역에 대한 Log Analytics Reader 및 Microsoft Sentinel Reader면 분석에 충분합니다. 변환 검색에는 구독 또는 리소스 그룹에 대한 Microsoft.Insights/dataCollectionRules/read(Monitoring Reader)도 필요합니다. 이 권한이 없으면 실행이 계속되고 누락된 권한을 명시하는 경고가 출력됩니다. -IncludeDefenderXDR은 CustomDetection.Read.All과 함께 Microsoft Graph를 사용하며, 로그인한 사용자의 경우 선택적 Microsoft.Graph.Authentication 모듈이 필요합니다.

시작하기

아주 간단합니다:```powershell

Grab the dependencies

Install-Module -Name Az.Accounts -Scope CurrentUser Install-Module -Name PwshSpectreConsole -Scope CurrentUser

Clone and import

git clone https://github.com/lnfernux/log-horizon Import-Module ./log-horizon/LogHorizon.psd1

root@kitploit:~
## 사용 방법

### 기본 사항

먼저 Azure에 연결하고 올바른 계정과 구독을 선택했는지 확인하세요:```powershell
Connect-AzAccount

그런 다음 도구를 호출할 수 있습니다:```powershell Invoke-LogHorizon -SubscriptionId '00000000-0000-0000-0000-000000000000' -ResourceGroup 'rg-sentinel' -WorkspaceName 'my-sentinel-ws'

root@kitploit:~
<img width="860" height="842" alt="{F4FFA929-B24F-490C-BD3D-F75E214BCD93}" src="https://assets.kitploit.com/production/public/readmes/13110/ff9d1da85043d02a216df72913ecf63520310b8d820b1bd1278b8e4aca718494.png" />

또한 다른 출력을 더 자세히 살펴볼 수 있는 메뉴도 있습니다:

<img width="395" height="223" alt="{83CE9E6E-F373-49CD-BE05-182DB69F36BE}" src="https://assets.kitploit.com/production/public/readmes/13110/0606a575b10640bd13ebb87b930f74b2438167b5578cb843b412b4fcf273fc26.png" />


### 키워드 격차 + Defender XDR

특정 벤더와 관련된 테이블이 누락되었는지 알고 싶으신가요? 몇 가지 키워드를 입력해 보세요. XDR 분석도 원한다면 `-IncludeDefenderXDR`를 추가하세요.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Keywords 'CrowdStrike','AWS','Okta' -IncludeDefenderXDR

Detection Analyzer

인시던트 및 자동화 규칙을 기반으로 규칙 품질/노이즈 분석을 활성화합니다:```powershell Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -IncludeDetectionAnalyzer -DetectionLookbackDays 90

root@kitploit:~
### 보고서 내보내기```powershell
# JSON
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output json -OutputPath ./report.json

# Markdown
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output markdown -OutputPath ./report.md

# Static HTML (self-contained, no JS, works offline)
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./report.html

# Auto-generate timestamped filename by pointing at a directory
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -Output html -OutputPath ./reports/

테이블 보존 기간 및 유형 관리

이제 대화형 TUI에서 직접 테이블 보존 기간과 테이블 유형을 업데이트할 수 있습니다:

  • Invoke-LogHorizon을 정상적으로 연 다음, 메인 메뉴에서 테이블 보존 기간 및 유형 관리를 선택하여 대량 보존 기간 또는 유형 업데이트를 수행합니다.
  • 로그 튜닝 / 변환 > 특정 테이블 평가를 열고 이 테이블의 보존 기간/유형 관리를 선택하여 단일 테이블 변경을 수행합니다.

스크립팅 또는 자동화를 위해 전용 공개 명령을 사용하십시오:```powershell

Preview a single-table change (prints a Table / Plan / Interactive / Total / Status / Reason table, applies nothing)

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -TotalRetentionInDays 365 -WhatIf

Switch tables to Basic and set total retention

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'AzureDiagnostics','VMConnection' -TargetPlan Basic -TotalRetentionInDays 730

Use -1 for inherit/default semantics

RetentionInDays = inherit workspace default

TotalRetentionInDays = remove long-term retention

Set-LogHorizonTableRetention -SubscriptionId '...' -ResourceGroupName 'rg' -WorkspaceName 'ws' ` -TableName 'SigninLogs' -RetentionInDays -1 -TotalRetentionInDays -1

root@kitploit:~
### 비대화형 / CI 모드

대화형 TUI를 건너뛰고 파일로 직접 내보냅니다. 파이프라인이나 예약 실행에 유용합니다:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NonInteractive -Output json -OutputPath ./reports/

-Output를 생략하면 분석 개체가 파이프라인으로 반환되어 자체 로직에 연결할 수 있습니다.

컬렉션 캐시

데이터 수집 단계(사용량, 규칙, 인시던트, 테이블, DCR)는 기본적으로 캐시되므로 동일한 작업 영역에 대해 다시 실행할 때(예: 두 번째 형식으로 내보내거나 TUI를 다시 열 때) 몇 분이 아닌 몇 초가 걸립니다. 캐시는 $env:LOCALAPPDATA\LogHorizon\cache 아래에 저장되며(-CachePath로 재정의 가능), 구독, 리소스 그룹, 작업 영역, -DaysBack, -DetectionLookbackDays, -IncludeDefenderXDR, -IncludeDetectionAnalyzer, 세 가지 가격 매개변수 및 모듈 버전의 조합마다 파일 하나씩 생성됩니다. -CacheMaxAgeMinutes(기본값 60)보다 오래된 항목은 무시되며, 저장할 때마다 만료된 항목이 삭제되어 폴더에 다른 매개변수 집합이나 이전 버전의 파일이 누적되지 않습니다. 토큰은 캐시에 기록되지 않습니다. 인증은 모든 호출에서 실행되므로 보존 마법사는 항상 활성 자격 증명을 보유합니다.

캐시 파일은 일반 텍스트 Clixml입니다. -IncludeDetectionAnalyzer를 사용하면 작업 영역의 인시던트 제목, 번호, 상태 및 분류가 포함됩니다. 인시던트 소유자, 규칙 작성자 및 할당된 소유자 ID는 수집되지 않습니다. 공유 머신에서는 -NoCache를 사용하거나 -CachePath를 필요한 액세스 제어가 있는 위치로 지정하세요.```powershell

Force a fresh collection and refresh the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -RefreshCache

Never read or write the cache

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -NoCache

Accept cached data for up to a day

Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -CacheMaxAgeMinutes 1440

root@kitploit:~
### 로그 튜닝 및 분할 KQL

대화형 TUI에는 **로그 튜닝 / 변환** 메뉴가 포함되어 있으며, 실시간 튜닝 제안(배포된 규칙 및 헌팅 쿼리의 필드 사용량), 지식 베이스 분할 KQL, 테이블별 평가기가 제공됩니다. 모든 KQL 블록은 조건 전용이며 Sentinel 분할 규칙 편집기에 바로 붙여넣을 수 있으며, 출처 속성(지식 베이스, 규칙 분석 또는 결합)이 포함됩니다.

### 사용자 지정 가격

기본 가격은 서유럽 단순화 PAYG(USD) 기준입니다: Analytics 5.59 $/GB, Basic 1.15 $/GB, Data Lake 0.20 $/GB(수집 0.07 + 처리 0.13). 각 테이블은 `Usage` 테이블에서 관찰된 요금제에 따라 가격이 책정되며, 무료 상태는 `Usage.IsBillable`에서 확인됩니다. 볼륨은 청구 GB(1000 MB)를 사용합니다. 커밋 티어가 다른 경우:```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' -PricePerGB 4.61 -BasicPricePerGB 1.15 -LakePricePerGB 0.20

모든 매개변수


내부 동작 방식

따라서 네 단계로 구성됩니다.

1. 데이터 수집

모듈은 Azure에 연결하여 Log Analytics, Security Insights, Azure Monitor 및 Microsoft Graph API에서 데이터를 가져옵니다. 모든 호출은 재시도 래퍼(429, 5xx 및 전송 오류)를 거치며, -NoCache가 설정되지 않은 한 수집된 데이터는 다음 실행을 위해 로컬에 캐시됩니다.

2. 분류

모든 테이블은 두 단계를 거쳐 분류됩니다.

첫째, Data/log-classifications.json의 481개 항목 지식 베이스에 대한 직접 조회입니다. 각 항목에는 커넥터 이름, 기본/보조 분류, 보안 범주, MITRE 데이터 소스 매핑, 권장 가격 계층 및 보존, 선택적 수명 주기 플래그(대체 테이블이 있는 더 이상 사용되지 않음/레거시, XDR 스트리밍 가능 여부, 플랫폼)가 포함됩니다.

일치 항목이 없으면 휴리스틱 규칙이 다음 순서로 적용됩니다.

  • 이름에 Alert, Incident, Threat, Signin, Logon, Audit, Risk, Detection과 같은 보안 토큰이 포함됨(PascalCase 단어 시작 부분에서 일치) -> 기본
  • 이름이 인프라 원격 분석처럼 보임: Flow, Metric, Diagnostic, Perf, Heartbeat, Health, Inventory, Usage ->

3. 비용-가치 점수 산정

각 테이블은 몇 가지 차원에서 점수가 매겨집니다.

  • 비용 계층: 무료 / 낮음(<1GB) / 중간(1-10GB) / 높음(10-50GB) / 매우 높음(>50GB)
  • 탐지 계층: 없음 / 낮음(1-2개 규칙) / 중간(3-9개 규칙) / 높음(10개 이상 규칙)
  • 평가: 높은 가치 / 좋은 가치 / 커버리지 누락 / 최적화 / 낮은 가치 / 과소 활용 / 무료 계층 / 플랫폼
  • 커버리지 %: 하나 이상의 분석 규칙 또는 헌팅 쿼리가 참조하는 테이블의 비율로, tablesWithRules / totalTables * 100로 계산됩니다. 테이블별 커버리지는 KQL을 파싱하여 테이블 이름을 찾은 분석 규칙 + 헌팅 쿼리를 합산합니다.
  • 암시적 커버리지: KQL이 없는 규칙 종류도 테이블을 소비합니다. Data/implicit-consumers.json이 이를 매핑합니다(Threat Intelligence 매칭 -> ThreatIntelIndicators/ThreatIntelObjects, Fusion -> SecurityAlert/Anomalies, UEBA -> BehaviorAnalytics/UserPeerAnalytics/IdentityInfo, Microsoft 인시던트 생성 -> SecurityAlert). 해당 종류의 활성화된 규칙은 유효 커버리지에 포함되며, 각 테이블은 kql, xdr, , 또는 의 를 보고합니다. Sentinel이 자체적으로 작성하는 플랫폼 테이블(, , , ...)은 커버리지 누락으로 표시되지 않으며 평가를 받습니다.

그런 다음 모듈은 권장 사항(13가지 유형)을 생성합니다.

권장 사항은 높음 > 중간 > 낮음 순으로 한 번 정렬된 후 예상 절감액 순으로 정렬되며, 모든 출력(JSON, Markdown, HTML, TUI)은 해당 순서를 유지합니다.

4. 탐지 분석기(노이즈 점수 산정)

-IncludeDetectionAnalyzer를 전달하면 모듈이 최근 인시던트와 자동화 규칙을 가져온 다음 모든 활성화된 분석 규칙에 잠재적 노이즈 점수를 매깁니다.

규칙별 지표(인시던트 데이터에서 계산):

지표계산 방법
총 인시던트 수규칙에 연결된 인시던트 수
자동 종료 비율자동화 규칙으로 종료된 인시던트 ÷ 총 인시던트. 기본 소스: SentinelHealth 테이블(인시던트 번호로 일치하는 활성화된 인시던트 종료 또는 플레이북 규칙의 자동화 규칙 실행). 대체: 자동화 규칙 조건 일치(분석 규칙 ID, 제목 및 심각도 조건, Sentinel과 동일하게 AND 처리). 조건이 상태/전술/엔터티만 있는 규칙은 모든 인시던트에 적용되는 것으로 처리됩니다.
오탐 비율오탐으로 분류된 인시던트 ÷ 총 인시던트

노이즈 점수 공식:

각 지표는 인시던트가 하나 이상 있는 모든 규칙에 걸쳐 백분위 순위로 변환됩니다. 복합 점수는 가중 혼합입니다.``` Score = (Volume_percentile × 0.35) + (AutoClose_percentile × 0.40) + (FalsePositive_percentile × 0.25)

root@kitploit:~
- **볼륨 백분위수(35%)**: 규칙이 다른 규칙과 비교하여 생성하는 인시던트 수입니다.
- **자동 종료 백분위수(40%)**: 자동화 규칙에 의해 인시던트가 자동 종료되는 빈도입니다(자동 종료는 저가치 알림의 가장 강력한 신호이므로 가장 높은 가중치를 가집니다).
- **오탐 백분위수(25%)**: 분석가가 결과를 오탐으로 분류하는 빈도입니다.

**점수 임계값**:

| 점수 | 라벨 | 의미 |
|---|---|---|
| ≥ 70 | 시끄러움 | 규칙에 튜닝 또는 비활성화가 필요할 가능성이 있음 |
| ≥ 50 | 주시 | 규칙이 시끄러움의 초기 징후를 보임 |
| < 50 | 정상 | 규칙이 정상 범위 내에 있음 |
| 해당 없음 | - | 규칙에 연관된 인시던트가 없거나, 인시던트가 있는 규칙이 3개 미만이어서 순위를 매길 대상이 없음 |

인시던트는 분석 규칙 ID(규칙 이름, 그다음 제목으로 대체)별로 버킷화되므로, 표시 이름을 공유하는 두 규칙은 별도로 점수가 매겨집니다.

점수가 ≥ 70이고 인시던트가 5개 이상인 규칙은 권장 사항 보기에서 **우선순위가 높은 권장 사항**으로 자동 표시됩니다.

### 5. 대화형 대시보드

주 메뉴에서 다음 보기를 제공합니다:

- **대시보드**: 개요 통계, 비용 상위 10개 테이블(더 이상 사용되지 않음 및 레거시 소스는 배지 표시), 적용 범위 막대, 보존 규정 준수 요약, 상관 관계 제외 알림
- **권장 사항 보기**: 예상 월간 절감액이 포함된 우선순위 조치, 10개 이상일 때 전체 목록을 표시하도록 확장 가능
- **탐지 평가 보기**: 비용-가치 매트릭스 요약, 테이블별 규칙 및 헌팅 쿼리 적용 범위, 기본/보조 드릴다운, 상관 관계 제외 규칙 목록
- **탐지 분석기 보기**: 종료 품질 지표가 포함된 백분위수 기반 시끄러운 규칙 순위(`-IncludeDetectionAnalyzer` 사용 시), 검색 가능한 규칙 브라우저
- **SOC 최적화 보기**: 드릴다운이 포함된 Microsoft 자체 개선 제안
- **보존 평가 보기**: 권장 최소값 미만의 테이블과 현재 대 권장 보존 기간, 플랜 유형, 부족분 및 XDR 권고 행 표시
- **데이터 변환 보기**: 변환 유형 분류 및 테이블별 전체 KQL이 포함된 DCR 변환 인벤토리
- **로그 튜닝 / 변환**: 실시간 튜닝 제안, 지식 베이스 분할 KQL, 단일 테이블 보존/유형 변경이 가능한 테이블별 평가기
- **모든 테이블 보기**: 분류, 플랜, 비용, 규칙, 보존 기간(색상 코드), 평가가 포함된 전체 목록; 세부 패널을 위해 테이블 선택(적용 범위 소스, 플랜 지원, 보존 기간, 상태, 해당 권장 사항)
- **테이블 보존 기간 및 유형 관리**: 미리 보기 및 적용이 포함된 대량 보존 기간 및 플랜 마법사
- **사전**: 도구가 사용하는 모든 용어(분류, 비용 및 탐지 계층, 평가, 적용 범위 소스, 13가지 권장 사항 유형, 탐지 분석기 메트릭 및 점수 라벨, 테이블 플랜, 수명 주기 상태, XDR 상태, 변환 유형)를 이 README와 동일한 정의로 제공하며, `Data/dictionary.json`에서 제공됨
- **보고서 내보내기**: 형식을 선택한 다음 경로(타임스탬프 파일의 디렉터리 또는 파일 이름, Enter는 현재 디렉터리 유지)를 선택하고 메뉴에서 바로 JSON, Markdown 또는 HTML 작성
- **XDR 분석**: `-IncludeDefenderXDR` 사용 시 대시보드에 표시됨

---

## 분류 데이터베이스

`Data/log-classifications.json`에 위치. **481개 항목**, **243개 커넥터**, **22개 카테고리**.

### 각 항목의 내용

| 필드 | 내용 |
|---|---|
| `tableName` | Log Analytics 테이블 이름(`SecurityEvent`, `SigninLogs` 등) |
| `connector` | 이 테이블을 생성하는 데이터 커넥터 |
| `classification` | `primary`(보안 가치) 또는 `secondary`(지원 원격 분석) |
| `category` | 보안 카테고리: ID 및 액세스, 네트워크 보안 등 |
| `description` | 테이블 내용의 일반 언어 요약 |
| `keywords` | 키워드 격차 분석 매칭용 용어 |
| `mitreSources` | MITRE ATT&CK 데이터 소스 매핑 |
| `recommendedTier` | `analytics`(핫 계층) 또는 `datalake`(보조 후보) |
| `recommendedRetentionDays` | 권장 최소 총 보존 기간(일)(규제 지침) |
| `isFree` | Microsoft가 이 항목을 무료로 수집하는지 여부(런타임은 먼저 `Usage.IsBillable` 사용) |
| `status` | 선택 사항. `deprecated`(커넥터 폐기 또는 수집 중단) 또는 `legacy`(문서화된 후속 항목이 있는 이전 수집 경로) |
| `replacedBy` | 선택 사항. 마이그레이션할 테이블 이름; `status`가 설정될 때마다 표시됨(비어 있을 수 있음) |
| `xdrStreamable` | 선택 사항, Defender 테이블 전용. Defender XDR 커넥터가 스트리밍하는 21개 테이블의 경우 `true`, 포털 전용 및 TVM 테이블의 경우 `false` |
| `platform` | 선택 사항. Sentinel 자체가 소비하는 테이블(`SecurityIncident`, `Usage`, `Watchlist`, ...)의 경우 `true`이며, 이러한 테이블은 분석 규칙이 필요하지 않음 |

`status`가 있는 테이블은 TUI 및 보고서에 배지를 표시하며, 여전히 수집되는 테이블은 대체 항목을 지정하는 `DeprecatedSource` 권장 사항을 발생시킵니다. `xdrStreamable: false`인 테이블은 XDR 검사기에서 XDR 스트리밍 후보로 처리되지 않습니다.

### 기본 vs 보조 보안 데이터

**기본**(278개 항목): 실제로 탐지를 구축하는 테이블. 로그인 로그, 보안 알림, 위협 인텔리전스, 감사 추적, 취약점 발견, 방화벽 히트, EDR 원격 분석.

**보조**(203개 항목): 지원 자료. 성능 메트릭, 인프라 진단, 네트워크 흐름 볼륨, 인벤토리 스냅샷, 구성 기준, 상태 점검.

### 카테고리 한눈에 보기

| 카테고리 | 수 | 예시 |
|---|---|---|
| ID 및 액세스 | 51 | `SigninLogs`, `MicrosoftServicePrincipalSignInLogs`, `OktaSSO` |
| 네트워크 보안 | 49 | `AZFWNetworkRule`, `NSPAccessLogs`, `DarktraceModelAlerts_CL` |
| 클라우드 제어 평면 | 37 | `AzureActivity`, `AZKVAuditLogs`, `GoogleWorkspaceReports` |
| 네트워크 흐름 | 36 | `NTANetAnalytics`, `CommonSecurityLog`, `AZFWFatFlow` |
| 엔드포인트 탐지 | 33 | `DeviceProcessEvents`, `CrowdStrikeAuditEvents`, `SentinelOneAlertsV2_CL` |
| 애플리케이션 로그 | 32 | `AppServiceHTTPLogs`, `AppServiceAuditLogs`, `DynatraceAttacksV2_CL` |
| 이메일 보안 | 29 | `EmailEvents`, `CampaignInfo`, `Ttp_Url_CL` |
| 보안 알림 | 29 | `SecurityAlert`, `SentinelBehaviorInfo`, `DisruptionAndResponseEvents` |
| 취약점 관리 | 23 | `DeviceTvmSoftwareVulnerabilities`, `Rapid7InsightVMCloudVulnerabilities` |
| 클라우드 보안 | 20 | `EnrichedMicrosoft365AuditLogs`, `OAuthAppInfo`, `PowerAppsActivity` |
| 엔드포인트 원격 분석 | 18 | `DeviceInfo`, `Windows365NetworkLogs`, `SentinelOneAgents_CL` |
| 포스처 관리 | 17 | `ExposureGraphNodes`, `SecurityNestedRecommendation`, `ZTSMetadata` |
| 데이터 보안 | 16 | `PurviewDataSensitivityLogs`, `DataSecurityEvents`, `PowerPlatformDlpActivity` |
| 데이터 플랫폼 | 16 | `SQLSecurityAuditEvents`, `CDBControlPlaneRequests`, `SnowflakeLogin_CL` |
| 플랫폼 상태 | 14 | `SentinelHealth`, `Usage`, `SecurityCaseEvent` |
| 컨테이너 및 K8s | 13 | `AKSAudit`, `CloudProcessEvents`, `GKEAudit` |
| 인프라 진단 | 13 | `AzureMetrics`, `AGWPerformanceLogs`, `ContainerAppSystemLogs` |
| 위협 인텔리전스 | 10 | `ThreatIntelIndicators`, `ThreatIntelObjects`, `CybleVisionAlerts_CL` |
| 구성 관리 | 8 | `ConfigurationData`, `AVNMRuleCollectionChange` |
| SAP 보안 | 7 | `ABAPAuditLog`, `SAPBTPAuditLog_CL`, `Onapsis_Defend_CL` |
| 스토리지 액세스 | 6 | `StorageBlobLogs`, `CloudStorageAggregatedEvents`, `AWSS3ServerAccess` |
| IoT/OT 보안 | 4 | `RadiflowEvent`, `DragosAlerts_CL`, `Phosphorus_CL` |

### 테이블 플랜 지원

`Data/basic-plan-tables.json` 및 `Data/auxiliary-plan-tables.json`은 [Azure Monitor 테이블 기능 매트릭스](https://learn.microsoft.com/en-us/azure/azure-monitor/reference/tables-features)가 Basic 및 Auxiliary(Data Lake) 플랜을 지원하는 것으로 표시하는 기본 제공 테이블을 나열합니다. 보존 마법사는 Basic 목록을 사용하여 플랜 전환을 검증하고, `DataLake` 권장 사항은 이를 지원하는 테이블에 대해서만 레이크 계층을 제안하며, 지원되는 가장 낮은 계층이 Basic인 경우 Basic 플랜 제안으로 대체합니다. DCR 기반 사용자 지정 테이블은 두 플랜을 모두 지원하며, Classic 사용자 지정 테이블은 둘 다 지원하지 않습니다. 두 파일 모두 각 릴리스마다 해당 매트릭스에서 다시 생성됩니다.

### 사용자 지정 분류

자체 분류 파일을 제공하여 기본 제공 데이터베이스에 없는 테이블에 대한 항목을 **추가**하거나, 기본값이 환경과 일치하지 않을 때 기존 항목을 **재정의**할 수 있습니다. 동일한 `tableName`이 둘 다에 나타나면 사용자 지정 항목이 기본 제공 항목보다 우선합니다.```powershell
Invoke-LogHorizon -SubscriptionId '...' -ResourceGroup 'rg' -WorkspaceName 'ws' `
    -CustomClassificationPath './my-classifications.json'

The custom file uses the same schema as Data/log-classifications.json, an array of objects:```json [ { "tableName": "MyCustomApp_CL", "connector": "Custom Logs (DCR)", "classification": "primary", "category": "Application Logs", "description": "Security-relevant audit events from an internal application", "keywords": ["custom", "internal", "audit"], "mitreSources": [], "recommendedTier": "analytics", "isFree": false }, { "tableName": "AzureMetrics", "connector": "Azure Monitor", "classification": "primary", "category": "Infrastructure Diag", "description": "Override: promoted to primary because we detect on Azure resource metrics in this environment", "keywords": ["metrics", "azure", "infrastructure", "monitoring"], "mitreSources": [], "recommendedTier": "analytics", "isFree": false } ]

root@kitploit:~
`Data/custom-classifications-example.json`에서 바로 사용할 수 있는 템플릿을 확인하세요.

### 분류 체계가 만들어진 방식

1차/2차 등급 분류는 저자가 일부 수행한 뒤, Microsoft의 데이터 커넥터와 테이블 정의를 AI에 입력하고 인간의 등급 기준을 기준선으로 삼아, Microsoft 모범 사례와 업계 표준을 분류 기준으로 사용하여 완성되었습니다.사용자 환경에 맞지 않는 부분이 있다면 도구보다는 자신의 맥락을 신뢰하세요. AI는 실수할 수 있으며, 맥락이 가장 중요합니다.

분류 기준은 다음 출처에서 도출되었습니다:

**ACSC (호주 사이버 보안 센터, Australian Signals Directorate)**
- [ACSC: 이벤트 로깅 및 위협 탐지 모범 사례 (2024년 8월)](https://www.cyber.gov.au/sites/default/files/2024-08/best-practices-for-event-logging-and-threat-detection.pdf)
- [ACSC: SIEM 수집을 위한 우선 로그 - 실무자 가이드 (2025년 5월)](https://www.cyber.gov.au/business-government/detecting-responding-to-threats/event-logging/implementing-siem-soar-platforms/priority-logs-for-siem-ingestion-practitioner-guidance)

**CISA (사이버보안 및 인프라 보안국)**
- [CISA: M-21-31 이행 지침: 연방 정부의 조사 및 복구 역량 개선](https://www.cisa.gov/sites/default/files/2023-02/TLP%20CLEAR%20-%20Guidance%20for%20Implementing%20M-21-31_Improving%20the%20Federal%20Governments%20Investigative%20and%20Remediation%20Capabilities_.pdf)
- [CISA: Microsoft 확장 클라우드 로그 이행 플레이북 (2025)](https://www.cisa.gov/sites/default/files/2025-01/microsoft-expanded-cloud-logs-implementation-playbook-508c.pdf)

**Microsoft**
- [Microsoft Sentinel 데이터 커넥터 참조](https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference)
- [Microsoft Sentinel 테이블 및 커넥터 참조](https://learn.microsoft.com/en-us/azure/sentinel/sentinel-tables-connectors-reference)
- [Azure-Sentinel GitHub 저장소](https://github.com/Azure/Azure-Sentinel) (커뮤니티 분석 규칙, 커넥터 정의, 솔루션 템플릿)
- [Microsoft Sentinel 청구](https://learn.microsoft.com/azure/sentinel/billing)
- [Microsoft Sentinel 데이터 계층 관리](https://learn.microsoft.com/azure/sentinel/manage-data-overview)

**MITRE**
- [MITRE ATT&CK 데이터 소스](https://attack.mitre.org/datasources/)

**NIST (미국 국립표준기술연구소)**
- [NIST SP 800-92: 컴퓨터 보안 로그 관리 가이드](https://csrc.nist.gov/pubs/sp/800/92/final)

**NSA (미국 국가안보국)**
- NSA 사이버 이벤트 전달 지침

**NCSC-UK (영국 국가사이버보안센터)**
- NCSC-UK의 "정확히 무엇을 로깅해야 하는가?"

**Google Cloud**
- [Google Cloud 감사 로그 개요](https://docs.cloud.google.com/logging/docs/audit)
- [Google Cloud 감사 로그 모범 사례](https://docs.cloud.google.com/logging/docs/audit/best-practices)


다른 출처도 사용되었으며, 저자의 "전문성"도 그렇게 분류할 수 있다면 함께 활용되었습니다.
---

## 프로젝트 구조```
LogHorizon.psd1              Module manifest (v0.9.0)
LogHorizon.psm1              Module loader
Public/
  Invoke-LogHorizon.ps1              Entry point, the main orchestrator
  Set-LogHorizonTableRetention.ps1   Scriptable table retention and plan changes
Private/
  Connect-Sentinel.ps1       Azure auth + workspace resolution
  Get-TableUsage.ps1         KQL query for ingestion volumes
  Get-AnalyticsRules.ps1     Analytics rules + table/field extraction + correlation tags
  Get-HuntingQueries.ps1     Hunting queries + table extraction
  Get-DataConnectors.ps1     Data connector inventory
  Get-DataTransforms.ps1     DCR transform discovery, split KQL generation
  Get-DefenderXDR.ps1        Defender XDR analysis (optional)
  Get-Incidents.ps1          Incident fetch + SentinelHealth auto-close attribution
  Get-AutomationRules.ps1    Automation rule inventory + close-logic attribution
  Get-SocOptimization.ps1    SOC improvement recommendations
  Get-TableRetention.ps1     Per-table retention, archive, and plan type
  Get-CollectionCache.ps1    Collection cache (key, path, read, write)
  Get-LogHorizonEndpoint.ps1 ARM / Log Analytics / Graph endpoints for the signed-in Azure environment
  Get-LogHorizonDictionary.ps1 Loads the term dictionary shown by the Dictionary menu
  Invoke-AzRestWithRetry.ps1 REST wrapper: retry on 429/5xx/transport errors, async operation polling
  Invoke-Classification.ps1  Static DB + heuristic classification + _SPLT_CL detection + custom file validation
  Invoke-Analysis.ps1        Cost-value matrix + recommendations + Detection Analyzer + XDR Checker + split suggestions
  Set-TableRetention.ps1     Retention change set, preview, Tables API apply engine, plan support lookups
  Write-Report.ps1           Spectre.Console TUI rendering
  Export-Report.ps1          JSON / Markdown / static HTML export with shared section renderer
Data/
  log-classifications.json              481-entry classification knowledge base
  basic-plan-tables.json                Built-in tables that support the Basic plan (from the Azure Monitor feature matrix)
  auxiliary-plan-tables.json            Built-in tables that support the Auxiliary / Data Lake plan
  implicit-consumers.json               Non-KQL rule kinds to tables, plus platform tables
  dictionary.json                       Term definitions for the Dictionary menu (kept 1:1 with this README, enforced by tests)
  high-value-fields.json                Split KQL knowledge base: 165 tables with curated fields and split hints
  field-frequency-stats.json            Community field frequency stats mined from the Azure-Sentinel rule corpus
  custom-classifications-example.json   Example custom classification override file
  ReportTemplate.html                   Static HTML report template (pure-CSS tabs, zero JS, CSP meta)
Tests/
  LogHorizon.Tests.ps1       437 Pester v5 unit tests

지식 베이스 생성 방식

분할된 KQL 지식 베이스인 high-value-fields.json과 field-frequency-stats.json은 공개된 Azure/Azure-Sentinel 저장소(Solutions/, Detections/, Hunting Queries/, 약 3,800개의 YAML 규칙 파일)에서 오프라인으로 구축됩니다. 각 쿼리는 모듈이 런타임에 사용하는 동일한 Get-TablesFromKql 및 Get-FieldsFromKql을 통해 실행되어 테이블별 필드 빈도 수를 생성하며, 여기서 세 단계의 폴백 필드가 파생됩니다:

  • 범용 필드: 전체 테이블의 50% 이상에 나타나는 필드(예: TimeGenerated)
  • 분류 기본값: 분류 범주 내 테이블의 40% 이상에 나타나는 필드
  • 테이블별 통계: 최소 3개의 참조 규칙이 있는 테이블에 대한 원시 필드 빈도 수

발굴된 필드는 큐레이션된 high-value-fields.json에 병합됩니다(큐레이션 항목은 유지되며, 최소 3개의 규칙과 3개의 의미 있는 필드가 있는 새로 발견된 테이블이 추가됩니다).

런타임에 Get-SplitKql은 폴백 계층 구조를 사용합니다: 큐레이션된 KB 항목 -> 실시간 규칙/헌팅 필드 분석 -> 커뮤니티 테이블별 통계 -> 범주 기본값 -> 범용 필드. 필드 빈도는 완벽한 방법은 아니지만, 알아두면 유용합니다.

테스트

437개의 Pester v5 테스트로, Azure 연결이 필요 없습니다. VS Code 통합 터미널이 아닌 일반 PowerShell 세션에서 실행하세요:```powershell Invoke-Pester ./Tests/LogHorizon.Tests.ps1 -Output Detailed

root@kitploit:~
## 라이선스

GPL-3.0. [LICENSE](https://github.com/lnfernux/log-horizon/blob/main/LICENSE) 참조.

## 버전 기록

| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| 0.9.0 | 2026-09-06 | 전체 코드 및 데이터 검토를 기반으로 한 수정 릴리스. 정확성: `Usage.Plan` 및 `Usage.IsBillable` 기반 플랜 인지 가격 책정(Basic 및 Data Lake 요금, 청구 GB(1000MB) 적용), Detection Analyzer 자동 종료 귀속이 활성화된 종료/플레이북 규칙(`triggeringLogic.isEnabled`)으로 제한, `2025-09-01` 및 `$top=1000`을 사용한 인시던트 조회, 비-KQL 규칙 종류 및 플랫폼 테이블에 대한 암시적 적용 범위(`implicit-consumers.json`), 대화형 보존 기준선 검사, 단일 권장 사항 정렬. 변환: 대상 작업 영역으로 필터링된 구독 범위의 DCR 검색과 작업 영역 변환 DCR 및 연결, 권한 누락 시 표시되는 상태 및 경고 포함; 작업 영역 및 다단계 변환 파싱; 라이브 테이블 스키마와 교차된 분할 KQL. 견고성: 수집 캐시 기본 활성화(`-NoCache`, `-RefreshCache`, `-CacheMaxAgeMinutes`, `-CachePath`), 스피너 전 인증 및 이후 경고 출력, 이스케이프된 TUI 및 Markdown 출력, 디렉터리를 생성하고 기록된 경로를 반환하는 내보내기 경로 해석, HTML의 CSP 메타, 전송 오류 및 Location 스타일 비동기 완료에 대한 REST 재시도, REST를 통한 작업 영역 해석(`Az.Resources` 제거), 사용자 지정 분류 검증, Microsoft 자사 폴백이 포함된 PascalCase 인지 휴리스틱, 정규식 시간 제한. 엔드포인트는 로그인한 Azure 환경(Government, China)을 따르며 API 버전은 SecurityInsights `2025-09-01`, OperationalInsights `2025-07-01`, 권장 사항 `2025-10-01-preview`로 이동. 데이터: 분류 데이터베이스 345 -> 481개 항목으로 `status`/`replacedBy`/`xdrStreamable`/`platform` 키 추가, 80개 이상의 자사 및 35개 후속 테이블, 커넥터 라벨 수정, `isFree` 수정; Azure Monitor 테이블 기능 매트릭스에서 `basic-plan-tables.json` 재생성 및 새 `auxiliary-plan-tables.json` 생성; `DeprecatedSource` 권장 사항, Basic 폴백이 포함된 플랜 인지 Data Lake 권장 사항, XDR Checker가 스트리밍 가능 여부 반영, TUI 및 내보내기의 수명 주기 배지. 검토 패스: 캐시 키가 가격 책정 및 모듈 버전을 포함, 사용자 지정 분류 부울 및 계층이 캐스트가 아닌 파싱으로 처리, 심각도 인지 자동 종료 귀속, 분할 KQL 조건이 라이브 스키마에 대해 검사, XDR 가져오기 상태가 조용한 `$null` 대신 표면화, 확장자가 없는 출력 경로는 파일로 처리, 인시던트 소유자 ID 더 이상 수집 안 함. 도구가 사용하는 모든 용어를 포함하는 TUI의 사전 메뉴(`Data/dictionary.json` 기반, 테스트로 코드에 고정). Automation 규칙 및 Defender 사용자 지정 탐지 개체는 사용된 필드로 투영되므로 작성자 ID(createdBy, lastModifiedBy, 할당된 소유자)가 캐시나 내보내기에 도달하지 않음. GPL-3.0 라이선스. 테스트 437개 |
| 0.8.0 | 2026-05-26 | 대화형 테이블 보존 관리 추가(새 대량 TUI 흐름 및 단일 테이블 업데이트 진입점 포함), 공개 `Set-LogHorizonTableRetention` 명령 추가. 검증, Azure 비동기 작업 폴링, 2단계 폴백(결합 PATCH 후 플랜 전용 및 보존 전용)이 포함된 Tables API PATCH 적용 엔진 추가로 탄력적인 보존 업데이트 지원. 검증, 페이로드 형태, 폴백 및 공개 명령 매핑에 대한 Pester 테스트 집중 추가. 또한 Sentinel에 분석 데이터가 아직 있는 경우 데이터 레이크 테이블을 데이터 레이크 계층으로 변경하라는 권장 사항이 표시되는 엣지 케이스/버그 수정 |
| 0.7.1 | 2026-05-15 | 구성된 테이블 플랜을 대체하지 않고 `Usage.Plan` 기반 플랜 인지 기능 추가: 분석이 이제 관찰된 플랜 기록을 추적하고, 다중 플랜 사용 및 구성-관찰 불일치를 플래그하며, 대시보드, 테이블 드릴다운, 전체 테이블 보기, 보존 평가 및 내보내기에 플랜 데이터를 표시. 활성화된 자동화 규칙이 없을 때만 타이밍 휴리스틱이 적용되도록 Detection Analyzer 자동 종료 귀속 수정. 테스트 203개 통과 |
| 0.7.0 | 2026-04-16 | 탐지 평가에 비용-가치 매트릭스 요약 테이블(기본/보조 x7 평가 범주, 색상 코딩 포함), 기본/보조 테이블용 드릴다운 하위 메뉴(비용/탐지 계층 열 포함) 추가. Detection Analyzer에 GB 가중 볼륨 적용 범위 막대(탐지/헌팅/결합 GB를 총 수집량 대비 백분율로, 기존 테이블 수 막대와 함께) 추가. Detection Analyzer의 적응형 표시 개선(동적 막대 너비, 규칙 이름 잘림, 콘솔 너비 기반 조건부 열 숨김). 테스트 193개 통과 |
| 0.6.3 | 2026-04-11 | PSGallery용 사소한 업데이트 |
| 0.6.2 | 2026-04-11 | 로그 튜닝/변환 메뉴: 라이브 데이터 튜닝 분석(배포된 규칙/헌팅 쿼리의 테이블별 필드 사용, 필터/프로젝트/결합 KQL 생성, 절감 추정), Tables API의 스키마 열 추출, `Get-SplitKql` 폴백 계층(커뮤니티 통계 → 범주 기본값 → 범용 필드), 필드 사용 매트릭스가 포함된 종합 테이블 평가기, 통합 KB + 라이브 튜닝 내보내기 섹션, Azure-Sentinel GitHub 규칙 말뭉치용 `Build-FieldKnowledgeBase.ps1` 마이닝 스크립트. Detection Analyzer: SentinelHealth 기반 자동 종료 귀속(기본)과 운영자 인지 규칙 매칭 폴백, Boolean 조건 래퍼 파싱, Resolved 상태 감지, ARM 리소스 ID의 GUID-꼬리 매칭. 적용 범위는 이제 모든 테이블(무료 계층 포함)에서 테이블 수 기반. TUI 및 내보내기에 점수 책정 고지 추가. 테스트 174개 |
| 0.6.1 | 2026-04-10 | 버그 수정: `$kqlKeywords` 필터링이 이제 파일 범위에서 공유됨(`Get-TablesFromKql`에서 정의되지 않았음), 모든 헬퍼 함수에 `[CmdletBinding()]` 추가, Defender 통합 검사 단순화, 고스트 `-RuleCount` 테스트 매개변수 제거. 견고성: `Get-HuntingQueries` 페이지네이션, 429/5xx에 대한 지수 백오프가 포함된 `Invoke-AzRestWithRetry` 재시도 래퍼, `PricePerGB` 검증, 주요 함수의 `Write-Verbose`. 문서: 버전 배지, DB 수, 매니페스트와 정렬된 사전 요구 사항 |
| 0.6.0 | 2026-04-10 | 21개 `KnownXDRTables`(하드코딩 18개에서 변경)로 동적 XDR 스트리밍 감지, 테이블별 `XDRState`(`NotStreaming`/`Analytics`/`Basic`/`Auxiliary`), Auxiliary를 데이터 레이크 계층으로 인식, 스트리밍되지 않은 XDR 테이블을 `NotStreamedCount`와 함께 Information/Low 권장 사항으로 표면화, 보존 분석기가 스트리밍되지 않은 XDR 테이블을 "XDR 전용(30일)"로 표시, 개요 계층 분류(analytics/basic/data lake + 스트리밍 안 됨), Export-Report Auxiliary→"data lake" 라벨, 분류 DB를 345개 항목으로 업데이트(+`DeviceNetworkInfo`, `DeviceInfo`→secondary/datalake, `DeviceImageLoadEvents` 및 `IdentityQueryEvents`→datalake 계층), Pester 테스트 15개 신규(총 121개) |
| 0.5.0 | 2026-04-03 | 순수 CSS 탭이 있는 정적 HTML 내보내기(JS 0개, CDN 없음, 완전 자체 포함), 통합 MD/HTML 섹션 렌더러, 완전한 JSON 데이터 캡처(dataTransforms, correlationExcluded/Included, streamingTables), CI/파이프라인 사용을 위한 `-NonInteractive` 스위치, `md` 형식 별칭, 날짜-시간 스탬프 자동 파일 이름, DCR 변환의 전체 KQL 표시(잘림 없음), markdown 테이블의 다중 라인 KQL 처리, HTML 토큰 교체의 정규식 `$`-역참조 손상 수정, PowerShell 별칭 충돌을 피하기 위한 내부 헬퍼 이름 변경(`h`→`hEnc`, `md`→`mdEsc`), Pester 테스트 33개 신규(총 106개) |
| 0.4.1 | 2026-04-03 | 보안 및 안정성 수정 - 토큰 메모리 삭제, 출력 경로 검증 및 XSS 보호, REST API 페이지네이션 제한, 모듈 로더 오류 마스킹 수정, PSScriptAnalyzer 경고 해결 |
| 0.4.0 | 2026-04-02 | 변환 검색(DCR 목록 + 변환 유형 분류), 분할 테이블 감지(`_SPLT_CL`), 15개 테이블 지식 베이스(`high-value-fields.json`) + 규칙 분석 폴백이 포함된 분할 KQL 헬퍼, 포털 준비 조건 전용 KQL 출력, 확장 가능한 권장 사항 목록, 분할 KQL 제안 TUI 메뉴 |
| 0.3.0 | 2026-04-02 | 로그 보존 규정 준수 분석(CISA M-21-31, NIST SP 800-92, NCSC-UK, ASD ACSC, NSA), 상관 태그 감지(`#DONT_CORR#`/`#INC_CORR#`), 보존 평가 메뉴 보기, 전체 테이블의 보존 열, 분류 스키마의 `recommendedRetentionDays` |
| 0.2.2 | 2026-04-02 | SOC 최적화 테이블이 좁은 콘솔에서 Detail 열 숨김 |
| 0.2.1 | 2026-04-02 | 사용자 지정 분류 지원(`-CustomClassificationPath`), API 제안/드릴다운으로 SOC 최적화 권장 사항 강화, 활성 전용 기본 보기, UTF-8 인코딩 경고 억제 |
| 0.2.0 | - | 분류 엔진, 비용-가치 점수, Spectre.Console TUI, JSON/Markdown 내보내기가 포함된 최초 공개 릴리스 |
| 0.1.0 | - | 개발용 내부 버전 |

## 알려진 문제

### PwshSpectreConsole UTF-8 인코딩 경고

터미널에서 UTF-8 출력을 활성화하려면 PowerShell `$PROFILE` 파일 상단에 다음 줄을 추가하고 터미널을 다시 시작하세요.```powershell
$OutputEncoding = [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new()

모듈은 가져올 때 이를 자동으로 설정하지만, 세션에 따라 경고가 계속 표시될 수 있습니다. 이는 표면적인 문제일 뿐이며 기능에는 영향을 미치지 않습니다.

기여

문제가 있거나 기여하고 싶다면 PR을 생성하세요.

도구가 마음에 드시나요?


Buy Me a Coffee at ko-fi.com
도구 다운로드
Az 모듈Az.Accounts
기타 모듈PwshSpectreConsole 2.6.3+
선택 사항Microsoft.Graph.Authentication (로그인한 사용자로 -IncludeDefenderXDR 사용 시)
매개변수유형필수기본값설명
-SubscriptionIdstring예-Azure 구독 ID
-ResourceGroupstring예-Sentinel 작업 영역이 포함된 리소스 그룹
-WorkspaceNamestring예-Log Analytics 작업 영역 이름
-WorkspaceIdstring아니요-작업 영역 ID(생략 시 자동 확인)
-Outputstring아니요-내보내기 형식: json, markdown / md 또는 html(별칭 -o)
-OutputPathstring아니요-내보내기용 파일 또는 디렉터리 경로. 기존 디렉터리 또는 끝에 구분 기호가 있으면 타임스탬프가 포함된 파일 이름이 생성되고, 확장자가 없는 파일 이름에는 해당 형식의 확장자가 추가되며, 없는 디렉터리는 생성됩니다
-Keywordsstring[]아니요-격차 분석용 키워드(예: 'AWS','CrowdStrike', 별칭 -kw)
-IncludeDefenderXDRswitch아니요-Defender XDR 사용자 지정 탐지 분석 포함
-IncludeDetectionAnalyzerswitch아니요-인시던트 및 자동화 규칙을 사용한 규칙별 노이즈 탐지 분석 포함
-DetectionLookbackDaysint아니요90인시던트/자동화 기반 탐지 분석용 쿼리 기간(1-365일)
-DaysBackint아니요90사용량 데이터용 쿼리 기간(1-365일)
-PricePerGBdecimal아니요5.59Sentinel Analytics 계층 수집 GB당 가격(별칭 -ppgb)
-BasicPricePerGBdecimal아니요1.15Basic Logs GB당 가격
-LakePricePerGBdecimal아니요0.20Auxiliary / Data Lake 계층 GB당 가격(수집 + 처리)
-NonInteractiveswitch아니요-TUI 대시보드를 건너뛰고 직접 내보내기(-Output 생략 시 파이프라인에 데이터 반환)
-CustomClassificationPathstring아니요-분류를 추가하거나 재정의할 사용자 지정 JSON 파일 경로(별칭 -clf)
-NoCacheswitch아니요-수집 캐시를 읽거나 쓰지 않음
-RefreshCacheswitch아니요-새 데이터를 수집하고 캐시 항목을 덮어씀
-CacheMaxAgeMinutesint아니요60재사용할 캐시 항목의 최대 수명(1-10080)
-CachePathstring아니요$env:LOCALAPPDATA\LogHorizon\cache캐시 파일용 디렉터리
데이터 소스API가져오는 항목
테이블 사용량Usage 테이블(KQL)쿼리 기간 동안 테이블별 수집 볼륨, 요금제 및 청구 가능 플래그
분석 규칙Security Insights REST활성 탐지 규칙 + 규칙이 사용하는 테이블 + 상관관계 태그, 비-KQL 규칙 종류에 대한 암시적 테이블 소비자
헌팅 쿼리Log Analytics 저장된 검색 REST저장된 헌팅 쿼리 + 참조된 테이블
데이터 커넥터Security Insights REST설치된 커넥터 인벤토리
SOC 최적화Security Insights REST(미리 보기)Microsoft의 기본 제공 SOC 권장 사항
테이블 보존Log Analytics Tables REST테이블별 보존, 보관, 요금제(Analytics/Basic/Auxiliary), 상속 기본값 플래그 및 스키마 열
데이터 수집 규칙Azure Monitor REST작업 영역을 대상으로 하는 DCR(구독 목록, 작업 영역 변환 DCR, 연결) 및 해당 변환
Defender XDRMicrosoft GraphXDR 사용자 지정 탐지 규칙(선택 사항, 위임된 CustomDetection.Read.All 또는 Az Graph 토큰)
인시던트Security Insights REST인시던트 결과(상태/분류), 시점 및 규칙 품질 점수 산정을 위한 규칙 연결 힌트
자동화 규칙Security Insights REST규칙 수준 인시던트 종료 작업 및 자동 종료 귀속을 위한 제목 일치 조건
SentinelHealthLog Analytics KQL인시던트 번호가 포함된 자동화 규칙 실행 이벤트로 확정적인 자동 종료 귀속 제공(선택 사항, 상태 모니터링 필요)
보조
  • 해당 테이블을 가리키는 활성 분석 규칙이 있음 -> 기본
  • Microsoft 접두사(AAD, Microsoft, Azure, Defender, Purview, Entra, Sentinel, Office, Intune, Windows ...)가 있는 기본 제공 테이블 -> 기본, 검토 및 데이터베이스 추가 대상으로 표시
  • 일반적인 *Log/*Logs 이름 -> 보조
  • 높은 볼륨(월 10GB 초과)이면서 탐지 규칙이 없음 -> 보조
  • 위 항목에 해당하지 않음 -> 알 수 없음
  • implicit
    platform
    none
    CoverageSource
    SecurityIncident
    SentinelHealth
    Watchlist
    Usage
    Platform
  • 활성화된 분석 규칙과 활성화된 Defender 사용자 지정 탐지만 커버리지에 포함됩니다.
  • 유형발생 조건수행할 작업
    Data Lake보조 + 높은 비용 + 탐지 규칙 거의 없음, 테이블이 Auxiliary 요금제를 지원함(Basic만 지원되는 경우 Basic 요금제 제안으로 대체)Auxiliary/Data Lake 계층으로 이동, 절감액은 현재 비용에서 동일 볼륨을 lake(또는 Basic) 요율로 계산한 비용을 뺀 값
    낮은 가치높은 비용 + 탐지 규칙 0개규칙 추가, 필터링 또는 데이터 레이크로 이동
    XDR 최적화XDR 스트리밍 + Sentinel 규칙 0개 + XDR 규칙 존재스트리밍 중단, 통합 XDR 포털 사용
    커버리지 누락기본 + 탐지 규칙 0개(플랫폼 테이블 제외)데이터에서 가치를 얻기 위해 분석 규칙 작성
    수집 시 필터기본 + 20GB 초과 + 탐지 규칙 3개 이하볼륨을 줄이기 위해 수집 시 변환 적용
    분할 후보기본 + 높은 볼륨 + 탐지 규칙 있음 + 기존 변환 없음높은 가치 행은 Analytics에 유지하고 나머지는 Data Lake로 보내도록 테이블 분할
    요금제 사용량Usage 행에 둘 이상의 요금제가 표시되거나 구성된 요금제가 Usage에서 관찰된 것과 다름요금제 전환이 예상된 것인지 검토
    더 이상 사용되지 않는 소스데이터베이스에서 더 이상 사용되지 않거나 레거시로 표시된 테이블이 여전히 수집 중탐지 규칙을 대체 테이블로 마이그레이션한 후 이전 커넥터 폐기. 정보 제공용: 수집이 사라지는 것이 아니라 이동하므로 절감액은 주장되지 않음
    보존 부족작업 영역 또는 테이블 보존이 90일 기준선 미만규제 지침을 충족하도록 전체/보관 보존 기간 늘리기
    보존 개선유료 비플랫폼 테이블이 90일을 충족하지만 범주 권장 사항 미만더 긴 전체 보존 기간 고려
    대화형 기준선 미만대화형(핫) 보존이 90일 미만인 Analytics 테이블짧은 핫 기간이 의도적이지 않은 한 대화형 보존을 Sentinel에 포함된 90일로 상향
    XDR 검사기알려진 Defender XDR 테이블이 스트리밍되지 않거나, 커버리지 없이 스트리밍되거나, Data Lake로 전달되지 않거나, 1년 권고 미만XDR 원격 분석에 대한 스트리밍 및 보존 검토
    탐지 분석기규칙 점수가 70 이상이고 인시던트가 5개 이상(-IncludeDetectionAnalyzer 사용 시)노이즈가 많은 규칙 튜닝 또는 비활성화