Skip to main content

개요

Microsoft Defender XDR 통합(INT-021)은 Microsoft Defender for Endpoint(MDE)Microsoft Defender XDR를 포함한 Microsoft의 확장 탐지 및 대응 플랫폼과 CaseBender 간에 양방향 동기화를 제공합니다.

인바운드 수집

Defender 알림 및 인시던트가 CaseBender로 수집되어 정규화되고, 관찰 가능 항목과 MITRE ATT&CK 기법으로 보강되어 알림/케이스로 변환됩니다.

아웃바운드 동기화

CaseBender 케이스가 종료되면 연결된 Defender 알림/인시던트가 Microsoft Graph를 통해 상태, 분류 및 감사 코멘트와 함께 업데이트됩니다.
이 통합은 Microsoft Graph 보안 API(https://graph.microsoft.com/v1.0/security)를 사용합니다. OAuth2 클라이언트 자격 증명 흐름을 사용하여 Azure AD(Entra ID) 애플리케이션으로 인증합니다.

기능

사전 요구 사항

1

Microsoft Defender / Entra ID 액세스

Microsoft Defender XDR 또는 Microsoft Defender for Endpoint가 라이선스되고 활성화된 Microsoft Entra ID(Azure AD) 테넌트. 애플리케이션을 등록하고 관리자 동의를 부여할 권한이 필요합니다.
2

네트워크 송신

CaseBender 배포는 다음에 연결할 수 있어야 합니다:
  • https://login.microsoftonline.com(OAuth2 토큰 엔드포인트)
  • https://graph.microsoft.com(Graph 보안 API)
3

CaseBender 관리자 역할

설정 → 통합에서 통합을 생성하고 관리할 수 있어야 합니다.

파트 A — Azure AD 애플리케이션 등록

1

앱 등록 생성

Microsoft Entra 관리 센터에서 ID → 애플리케이션 → 앱 등록 → 새 등록으로 이동합니다. 이름(예: CaseBender Defender Integration)을 지정하고 등록합니다.
2

식별자 기록

애플리케이션 개요에서 애플리케이션(클라이언트) ID디렉터리(테넌트) ID를 복사합니다. 이를 CaseBender에 입력합니다.
3

클라이언트 비밀 생성

인증서 및 비밀 → 새 클라이언트 비밀에서 비밀을 만들고 그 을 즉시 복사합니다 (한 번만 표시됨).
4

Graph 보안 API 권한 부여

API 권한 → 권한 추가 → Microsoft Graph → 애플리케이션 권한에서 필요한 방향에 맞는 범위를 추가한 후 관리자 동의 부여를 클릭합니다:
폴링에는 읽기 전용으로 충분합니다. 인시던트/알림을 CaseBender로 가져오기만 한다면 두 개의 Read.All 범위를 부여하십시오. ReadWrite.All 범위는 선택적 아웃바운드 종료 역동기화(syncCaseClose) — CaseBender에서 Defender 알림/인시던트를 종료하는 경우 — 에 필요합니다. ReadWrite.All은 읽기 액세스도 포함하므로 두 개의 ReadWrite.All 범위만 부여해도 양방향을 모두 포함합니다.
애플리케이션 권한(위임 아님)을 사용하십시오. 통합은 클라이언트 자격 증명 흐름으로 헤드리스 실행되며 테넌트 관리자 동의가 필요합니다.

파트 B — CaseBender에서 통합 구성

1

통합 카탈로그 열기

설정 → 통합 → 생성으로 이동한 다음 EDR/XDR 범주에서 Microsoft Defender XDR를 선택합니다.
2

Azure AD 자격 증명 입력

파트 A에서 캡처한 값을 입력합니다:
3

자동 폴링 활성화(권장)

자동 폴링 카드에서 자동 폴링 활성화를 켜고 다음을 설정합니다:작동 방식은 자동 폴링을 참조하세요.
4

동기화 옵션 구성

필요한 동작을 활성화합니다:
syncCaseClose가 켜져 있고 두 close…OnCaseClose 스위치가 모두 꺼져 있어도 CaseBender는 분류와 감사 코멘트를 Defender에 기록합니다. 다만 Defender 엔터티를 resolved로 변경하지는 않습니다.
5

연결 테스트

연결 테스트를 사용하여 검증합니다. CaseBender는 OAuth2 토큰을 요청하고 GET /security/alerts_v2?$top=1을 호출합니다.
테스트 중 403 응답은 성공으로 처리됩니다. 앱이 해당 특정 엔드포인트에 대한 읽기 범위를 아직 부여받지 못한 경우에도 인증이 작동했음을 확인합니다.

인바운드(자동 폴링, 권장)

자동 폴링을 활성화하면(통합의 자동 폴링 카드에서) CaseBender가 주기적으로 Graph 보안 API를 호출하여 새 인시던트를 스스로 수집합니다. Microsoft 측에서 Logic App, Sentinel 자동화 규칙, 웹훅 전달자가 필요하지 않으며, 파트 A에서 만든 Azure AD 앱 등록만 있으면 됩니다.
  • 예약된 풀링pollingIntervalMinutes마다 CaseBender는 lastUpdateDateTime gt <cursor>$expand=alerts로 인시던트를 오래된 순서대로 가져옵니다. 첫 실행에서는 pollingInitialLookbackHours 범위 내에서 업데이트된 인시던트를 가져옵니다.
  • 커서 및 중복 제거 — 통합별 커서가 확인한 최신 인시던트까지 진행되며, 인시던트는 Defender 인시던트 ID로 중복 제거되므로 동일한 항목이 두 번 수집되지 않습니다.
  • 정규화 — 각 인시던트와 하위 알림은 관찰 가능 항목, 자산, MITRE TTP를 포함한 CaseBender 알림이 됩니다. Defender 인시던트 ID가 알림에 기록되어 아웃바운드 종료 동기화가 이를 찾을 수 있습니다.
SecurityIncident.Read.All(SecurityIncident.ReadWrite.All에 포함)이 필요합니다. autoCreateCases를 활성화하면 폴링으로 수집된 각 인시던트가 자동으로 케이스가 됩니다 (인시던트 ID로 중복 제거). 비활성화하면 인시던트는 알림 받은 편지함에 표시되어 수동으로 승격합니다. 두 경우 모두 Defender 링크가 유지되므로 케이스를 종료하면 Defender로 다시 동기화할 수 있습니다.

인바운드(웹훅 / 푸시)

엔드포인트

Defender(또는 Logic Apps, Sentinel, 웹훅 전달자와 같은 중개자)는 알림/인시던트 페이로드를 CaseBender 수집 엔드포인트로 전송합니다:
요청은 x-api-key 헤더의 통합 API 키로 인증됩니다(authorization: Bearer <key> 헤더도 허용됨). Defender 웹훅 API 키에는 cbr_defender_ 접두사가 붙습니다.

페이로드 형식

배치 형식(Graph value[] 배열)과 단일 알림 개체가 모두 지원됩니다.
성공한 요청은 HTTP 202 Accepted를 반환합니다:

처리 파이프라인

1

수집 프록시

/api/v1/ingest/defender는 소스를 검증하고 요청을 수집 서비스 (POST /v1/sources/defender)로 전달합니다.
2

큐 게시

수집 서비스는 API 키를 인증하고 페이로드를 검증한 후 각 알림을 처리 큐에 게시합니다.
3

정규화

Defender 프로세서는 각 레코드를 CaseBender 알림으로 정규화합니다. 심각도 매핑, 제목/설명 구성, 관찰 가능 항목 및 디바이스 자산 추출, MITRE TTP 생성을 수행합니다.

데이터 매핑 참조

심각도 매핑(Defender → CaseBender 1–4): 관찰 가능 항목 추출(evidence[]에서): 수집 시 적용되는 태그에는 defender, xdr, service:<serviceSource>, category:<category>, incident(인시던트의 경우), 그리고 각 MITRE 기법당 하나의 mitre:<technique> 태그가 포함됩니다. 수집된 레코드는 기본적으로 TLP:2PAP:2를 사용합니다.

아웃바운드: 케이스 처리 결과를 Defender로 동기화

CaseBender에서 케이스가 종료되면 case_closed 이벤트가 Defender 핸들러로 디스패치됩니다. 케이스가 Defender 알림 또는 인시던트에 연결되어 있으면 CaseBender는 Graph 보안 API를 통해 해결 결과를 전송합니다.

연결된 Defender 엔터티가 해결되는 방식

핸들러는 다음 순서로 Defender 식별자를 찾습니다:
  1. 케이스의 extraData.defenderAlertId / extraData.defenderIncidentId
  2. extraData.source === "defender"일 때 sourceRef
  3. 케이스에 연결된 Defender 알림 — 수집 파이프라인이 각 알림의 customFields에 Defender 인시던트/알림 ID를 기록하므로, Defender 알림(폴링 또는 웹훅 유래)에서 승격된 케이스는 생성 방식과 관계없이 자동으로 해결됩니다.
알림 또는 인시던트 ID를 찾을 수 없으면 이 통합에서 케이스 종료를 건너뜁니다.

해결 → 분류 매핑

종료 시 CaseBender는 매핑된 classification을 적용하고 다음과 같은 코멘트를 추가합니다:
또한 해당 스위치(알림은 closeAlertsOnCaseClose, 인시던트는 closeIncidentsOnCaseClose)가 활성화된 경우 Defender 엔터티 statusresolved로 설정합니다. 결과는 케이스 타임라인에 기록되어 분석가가 동기화를 확인할 수 있습니다.
syncCaseClose는 아웃바운드 동기화의 마스터 스위치입니다(기본값 켜짐). 꺼져 있으면 아웃바운드 호출이 이루어지지 않습니다. 알림 업데이트는 최신 /security/alerts_v2/{id} 엔드포인트를, 인시던트 업데이트는 /security/incidents/{id}를 사용합니다.

보안 고려 사항

  • 비밀 처리 — 클라이언트 비밀은 통합 설정에 저장됩니다. 조직에서 요구하는 일정에 따라 교체하고 교체 시 통합을 업데이트하십시오.
  • 최소 권한 — 인바운드 전용 배포에서는 SecurityAlert.Read.AllSecurityIncident.Read.All만 부여하십시오. 아웃바운드 종료 역동기화를 활성화하는 경우에만 해당하는 ReadWrite.All 범위를 추가하십시오. 더 광범위한 Graph 범위를 추가하지 마십시오.
  • 토큰 캐싱 — 액세스 토큰은 통합별로 메모리에 캐시되고 만료 1분 전에 갱신됩니다. 토큰은 디스크에 유지되지 않습니다.
  • 웹훅 키cbr_defender_ API 키를 비밀로 취급하십시오. 노출되면 교체하고 발신자 구성을 업데이트하십시오.
  • 네트워크 — 송신을 login.microsoftonline.comgraph.microsoft.com으로 제한하십시오.

문제 해결

tenantId, clientId, clientSecret을 확인하십시오. 클라이언트 비밀이 만료되지 않았고 Graph 애플리케이션 권한에 대해 관리자 동의가 부여되었는지 확인하십시오.
x-api-key 헤더가 없거나 유효하지 않습니다. 통합의 구성된 웹훅 API 키와 일치하는 cbr_defender_ 키를 보내고 있는지 확인하십시오.
페이로드에 value[] 배열이나 최상위 id가 없습니다. Graph 배치 개체 또는 단일 알림 개체를 보내십시오.
자동 폴링 활성화가 켜져 있고 연결 테스트가 통과하는지 확인하십시오. 앱에 SecurityIncident.Read.All(또는 ReadWrite.All)이 관리자 동의와 함께 부여되어 있고, 폴링 서비스가 graph.microsoft.com(및 프록시가 있는 경우 프록시)에 도달할 수 있으며, 커서보다 최신인 인시던트가 있는지 확인하십시오. 첫 실행 시에는 pollingInitialLookbackHours 내의 인시던트만 가져옵니다. 폴링으로 가져온 인시던트는 알림 받은 편지함에 표시됩니다.모든 CaseBender 서비스가 실행 중인지 확인하십시오. 인시던트는 백그라운드 프로세서가 가져오고 백그라운드 워커가 알림(및 선택적으로 케이스)으로 변환합니다. 워커가 실행되고 있지 않으면 인시던트를 가져오더라도 표시되지 않습니다. Docker에서는 docker compose ps를 실행하여 workermisp-processor 서비스가 Up 상태인지 확인하고, 그렇지 않으면 docker compose up -d를 실행하십시오. 표준 설치 관리자와 빠른 시작은 모든 것을 자동으로 설정하므로 큐나 Redis 설정을 직접 구성할 필요가 없습니다.
syncCaseClose가 켜져 있는지 확인하십시오(마스터 스위치입니다). Defender 엔터티도 resolved로 표시하려면 closeAlertsOnCaseClose / closeIncidentsOnCaseClose를 활성화 하십시오. 케이스는 Defender 알림/인시던트에 연결되어 있어야 합니다. Defender 알림(폴링 또는 웹훅 유래)에서 승격된 케이스를 종료하면 연결이 자동으로 해결됩니다. 결과는 케이스 타임라인에서 확인하십시오.
403은 Azure AD 앱에 쓰기 권한이 없음을 의미합니다. SecurityAlert.ReadWrite.AllSecurityIncident.ReadWrite.All이 관리자 동의와 함께 부여되었는지 확인하십시오. 알림 업데이트의 404는 일반적으로 레거시 엔드포인트를 의미합니다. CaseBender는 최신 Defender XDR 알림에 대해 /security/alerts_v2/{id}를 사용합니다.

관련 문서