
라이브 Microsoft Sentinel + Defender XDR 환경(컨트롤 플레인, 엔드포인트, 아이덴티티)에서 MITRE ATT&CK에 매핑된 9개의 KQL 탐지 항목과 PR 게이트 방식의 Detection-as-Code 파이프라인(GitHub Actions, OIDC), SOAR 플레이북, SOC 2 컨트롤 매핑을 제공합니다.
제가 운영하는 실시간 Microsoft Sentinel 및 Defender XDR 환경에서의 탐지 엔지니어링입니다. 9개의 맞춤형 분석 규칙이 세 가지 플레인에 걸쳐 있으며, 각각 MITRE ATT&CK에 매핑되어 엔드투엔드로 검증되었습니다: 통제된 작업이 규칙을 트리거하고, 규칙이 인시던트를 생성하며, 인시던트가 조사·문서화됩니다. 7개는 Azure 컨트롤 플레인(AzureActivity)을 모니터링하며, 다단계 상관관계 규칙과 ARG 기반 콘텐츠 규칙을 포함합니다. 1개는 엔드포인트(Defender for Endpoint)를 모니터링하며 Defender Vulnerability Management가 헌팅 라이브러리에 데이터를 공급합니다. 1개는 ID(Entra ID SigninLogs)를 모니터링합니다. 모두 동일한 PR 게이트 파이프라인으로 배포됩니다.

제가 엔드투엔드로 운영하는 실시간 단일 테넌트 환경입니다. 모든 스크린샷에서 테넌트 및 구독 식별자와 모든 PII(개인 식별 정보)는 편집 처리되었습니다.
수치는 추적 가능합니다: 적용 범위는 ATT&CK 레이어, 검증은 RESULTS.md를 참조하세요. 의도적으로 오탐률 배지가 없습니다: 단일 테넌트 환경에서는 의미 있는 FP 비율을 산출할 수 없으므로, 이 저장소는 조작된 백분율 대신 실제 정상 배치에 대한 측정된 오탐 발생 건수를 보고합니다 (metrics.yaml에 전체 내용이 명시되어 있습니다).
포크에서 탐지 단위 테스트를 실행하세요. Azure가 필요 없습니다. 각 규칙의 실제 KQL은 로컬 Kusto 에뮬레이터의 합성 픽스처에 대해 실행되므로 제 테넌트 없이도 탐지 로직을 검증할 수 있습니다:
git clone https://github.com/ibondarenko1/azure-sentinel-detection-engineering
cd azure-sentinel-detection-engineering
docker run -d --rm -p 8080:8080 -e ACCEPT_EULA=Y mcr.microsoft.com/azuredataexplorer/kustainer-linux:latest
pip install pyyaml
python tests/run-detection-tests.py
이것은 CI가 모든 풀 리퀘스트에서 실행하는 바로 그 검사입니다 (detection-tests): 각 규칙이 악성 픽스처에서는 탐지되고 정상 픽스처에서는 침묵을 유지하는지 검증합니다. validation/의 라이브 하네스는 더 나아가 테넌트에서 실제 정상 및 공격 배치를 구동하여 탐지 성공(TP)과 오탐 발생을 측정하지만, 여기에는 자체 Azure 구독과 az login이 필요하므로 (validation/README 참조) "로컬"이 아닙니다. 배포 파이프라인: docs/03. 규칙 기여: CONTRIBUTING.
탐지는 실제로 작동하는 모습을 보여줄 수 있을 때만 신뢰할 수 있습니다. 이 저장소는 Azure 컨트롤 플레인, 엔드포인트, ID라는 세 가지 플레인에서 그 루프를 완성합니다: 규칙 로직, 통제된 트리거, 생성된 인시던트, 조사, MITRE 매핑까지. 단일 이벤트 규칙을 넘어 다단계 상관관계(권한 부여 후 배포)와 Azure Resource Graph 포스처를 변경 이벤트에 결합하는 콘텐츠 인지 규칙을 제공합니다. 합성 샘플이 아닌 실제 텔레메트리를 대상으로 하는 Sentinel 분석 규칙, KQL, 인시던트 대응입니다.
규칙은 포털에서 클릭으로 생성되는 방식이 아닙니다. 이 규칙들은 PR 게이트 파이프라인으로 배포되는 버전 관리된 YAML입니다. 탐지 규칙을 편집한다는 것은 풀 리퀘스트를 연다는 뜻입니다. CI가 검증하고, 리뷰어가 승인하며, main으로의 병합이 OIDC(저장된 비밀 없음) 를 통해 Sentinel에 규칙 GUID별로 멱등하게 배포합니다 (API 2025-09-01).
flowchart LR
D[Edit rule YAML] --> PR[Pull request] --> V[CI validate] -->|review| M[Merge main] --> CD[OIDC deploy] --> S[Sentinel sc200-ws]
detections/rules/*.yaml · 파이프라인: .github/workflows/deploy-detections.yml · 배포자/검증기: cicd/ · 상세: docs/03-cicd.md
실제 변경 사항이 이 파이프라인을 통과했습니다: PR #1은 DET-001 임계값을 조정했습니다(10 → 8). CI가 검증했고, 병합이 라이브 sc200-ws 규칙에 배포했습니다. 리뷰된 PR을 통해 규칙이 git에서 자동으로 배포되는 이 단계가 바로 탐지 엔지니어를 교육 과정을 수료한 애널리스트와 구분 짓는 요소입니다.
flowchart LR
subgraph Sources
A[Microsoft Defender XDR<br/>Email · Endpoint]
B[Azure subscription<br/>Activity Log]
C[Entra ID<br/>sign-ins]
end
A --> W[Log Analytics workspace<br/>sc200-ws]
B --> W
C --> W
W --> R[9 scheduled<br/>analytics rules]
R --> I[Incidents]
I --> V[Investigation<br/>+ MITRE mapping]

| ID | 탐지 | 심각도 | MITRE 전술 | 기법 |
|---|---|---|---|---|
| DET-001 | 실패한 Activity Log 작업 급증 | 중간 | 탐색 | T1087 계정 탐색 |
| DET-002 | 네트워크 보안 그룹(NSG) 규칙 수정됨 | 중간 | 방어 회피 | T1562 방어 기능 손상 |
| DET-003 | RBAC 역할 할당 변경 | 중간 | 권한 상승 / 지속 | T1098 계정 조작 |
| DET-004 | 대량 리소스 삭제 | 높음 | 영향 | T1485 데이터 파괴 |
| DET-005 | 비소유자에 의한 의심스러운 리소스 배포 | 중간 | 지속 | T1098 계정 조작 |
| DET-006 | LSASS 자격 증명 액세스 (엔드포인트) | 높음 | 자격 증명 액세스 | T1003.001 LSASS 메모리 |
| DET-007 | 권한 부여 후 배포 (상관관계) | 높음 | 권한 상승 / 지속 | T1098 계정 조작 |
| DET-008 | 반복된 실패 후 성공적인 로그인 (ID) | 중간 | 자격 증명 액세스 / 초기 액세스 | T1110 무차별 대입, T1078 유효한 계정 |
| DET-009 | NSG 규칙 변경으로 Any에서 인바운드 노출 (ARG 콘텐츠) | 높음 | 방어 회피 | T1562.007 클라우드 방화벽 비활성화/수정 |

각 탐지 규칙은 통제된 관리 작업(수행 후 자동으로 원상 복구되는)으로 트리거되어 실제 인시던트를 생성했습니다:
