이 페이지는 https://help.kusto.windows.net 데이터베이스의 도움말 클러스터 에 있는 기존 그래프를 나열하고 KQL(Kusto 쿼리 언어)을 사용하여 쿼리하는 방법을 보여 줍니다. 이러한 예제에서는 생성 또는 설정 단계 없이 미리 빌드된 그래프 모델을 쿼리하는 방법을 보여 줍니다.
학습 기본 사항에 대한 간단한 교육 그래프
사용법: graph("Simple")
목적: 기본 그래프 작업 및 학습 기본 그래프 쿼리 패턴
설명: 다양한 관계를 가진 사람, 회사 및 도시를 포함하는 작은 교육 그래프입니다. 그래프 순회 학습 및 기본 패턴 이해에 적합합니다. 이 압축 데이터 세트에는 20개의 관계를 통해 연결된 11개의 노드(5명, 3개 회사 및 3개 도시)가 포함되어 있으므로 더 큰 데이터 세트의 복잡성 없이 그래프 기본 사항을 이해하는 데 적합합니다. 그래프는 고용 관계, 지리적 위치, 소셜 연결 및 개인 기본 설정과 같은 일반적인 실제 시나리오를 보여 줍니다.
사용 사례:
- 그래프 쿼리 기본 사항 학습
- 그래프 알고리즘 테스트
- 관계 패턴 이해
- 그래프 개념에 대한 교육 예제
스키마 관계:
스키마 및 개수:
노드 형식:
-
Person- 개별 사용자(5개 노드) -
Company- 비즈니스 조직(노드 3개) -
City- 지리적 위치(노드 3개)
-
관계 유형:
-
works_at- 고용 관계(5개 에지) -
located_at- 지리적 위치 할당(8개 에지) -
knows- 사람 간 소셜 연결(4개 가장자리) -
likes- 개인 기본 설정 및 관심사(3개 가장자리)
-
그래프 인스턴스 예제:
이 예제에서는 사람들이 다양한 관계 유형을 통해 회사와 도시에 연결하는 방법을 보여 주는 작고 이해하기 쉬운 네트워크의 기본 그래프 관계를 보여 줍니다.
예제 쿼리:
특정 회사의 모든 직원을 찾습니다.
graph("Simple")
| graph-match (person)-[works_at]->(company)
where company.name == "TechCorp"
project employee_name = person.name, employee_age = person.properties.age
| employee_name | employee_age |
|---|---|
| 앨리스 | 이십오 (25) |
| 밥 | 30 |
| 엠마 | 26 |
동료(같은 회사에서 일하는 사람)를 찾습니다.
graph("Simple")
| graph-match (person1)-->(company)<--(person2)
where person1.id != person2.id and labels(company) has "Company"
project colleague1 = person1.name, colleague2 = person2.name, company = company.name
| take 1
| colleague1 | colleague2 | 회사 |
|---|---|---|
| 앨리스 | 밥 | TechCorp |
LDBC SNB 대화형
사용법: graph("LDBC_SNB_Interactive")
목적: 소셜 네트워크 순회 및 친구의 친구 탐색.
비고
이 데이터 세트는 Apache 라이선스 2.0에서 제공됩니다. LDBC 소셜 네트워크 벤치마크 데이터 세트는 LDBC(연결된 데이터 벤치마크 위원회)에서 만듭니다.
설명: LDBC(연결된 데이터 벤치마크 위원회) 소셜 네트워크 벤치마크 대화형 워크로드 데이터 세트는 포괄적인 소셜 네트워크 모델링 실제 소셜 미디어 플랫폼을 나타냅니다. 이 벤치마크는 계층적 지리적 데이터, 다단계 조직 구조 및 풍부한 콘텐츠 상호 작용을 포함하여 327,000개가 넘는 노드와 여러 관계 유형을 포함하는 최신 소셜 네트워크의 복잡성을 캡처합니다. 데이터 세트는 사람들이 게시물과 댓글을 만들고, 포럼에 참여하고, 조직에서 일하고, 대륙에서 도시에 이르는 상세한 계층 구조에 걸쳐 지리적 위치에 거주하는 현실적인 소셜 미디어 에코시스템을 모델링합니다.
사용 사례:
- 소셜 네트워크 분석 및 권장 사항 시스템
- 커뮤니티 검색 알고리즘
- 전파 연구에 영향
- 소셜 연결을 기반으로 하는 콘텐츠 권장 사항
- 친구의 친구 검색
- 소셜 그래프 마이닝 연구
그래프 스키마 개요:
스키마 및 개수:
핵심 소셜 엔터티 형식:
-
PERSON- 소셜 네트워크 사용자(1,528개 노드) -
POST- 사용자 게시물(135,701개 노드) -
COMMENT- 게시물에 대한 댓글(노드 151,043개) -
FORUM- 토론 포럼(13,750개 노드)
-
조직 및 지리적 유형:
-
ORGANISATION- 대학 및 회사(7,955개 노드) -
PLACE- 지리적 위치: 대륙(6개), 국가(111개), 도시(1,343개) - 총 1,460개 노드
-
콘텐츠 분류 유형:
-
TAG- 콘텐츠 태그(16,080개 노드) -
TAGCLASS- 태그 범주(71개 노드)
-
키 관계 유형:
-
KNOWS- 친구 관계(가장자리 14,073개) -
LIKES- 콘텐츠 좋아요: 게시물(47,215개) + 댓글(62,225개) = 총 가장자리 109,440개 -
HAS_CREATOR- 콘텐츠 작성: 게시물 (135,701) + 의견 (151,043) = 286,744 가장자리 -
HAS_MEMBER- 포럼 멤버십(에지 123,268개) -
HAS_TAG- 콘텐츠 태그 지정: 게시물 (51,118) + 의견 (191,303) + 포럼 (47,697) = 290,118 가장자리 -
IS_LOCATED_IN- 위치 관계: 사람 (1,528) + 조직 (7,955) + 게시물 (135,701) + 의견 (151,043) = 296,227 가장자리 -
REPLY_OF- 주석 스레딩: 주석-주석(76,787) + 댓글 게시(74,256) = 151,043 가장자리 -
WORK_AT/STUDY_AT- 전문/교육 기록(4,522개 가장자리) -
HAS_INTEREST- 개인 관심사(35,475 에지) - 기타 관계:
HAS_MODERATOR,IS_PART_OF,CONTAINER_OF,HAS_TYPEIS_SUBCLASS_OF
-
그래프 인스턴스 예제:
이 예제에서는 실제 소셜 미디어 환경에서 복잡한 소셜 네트워크 상호 작용을 보여 줍니다. 사용자가 콘텐츠에 참여하고, 포럼에 참여하고, 소셜 연결을 형성하는 방법을 보여 줍니다.
이 예제에서는 다음을 보여 줍니다.
- 소셜 참여: 마힌다는 압둘라의 게시물과 그 게시물에 대한 댓글을 모두 좋아합니다.
- 콘텐츠 스레딩: 코멘트 (글로리아 Macapagal-Arroyo대 한) 게시물에 회신 (Aurangzeb에 대 한)
- 콘텐츠 제작: 압둘라가 자신의 포럼 벽에 게시물을 만듭니다.
- 커뮤니티 참여: Mahinda는 콘텐츠가 표시되는 압둘라 포럼의 회원입니다.
- 콘텐츠 분류: 게시물과 댓글 모두 콘텐츠의 관련 항목으로 태그가 지정됩니다.
- 지리적 컨텍스트: 모든 엔터티에는 지리적 분석을 위한 위치 관계가 있습니다.
사용 사례:
- 소셜 네트워크 분석 및 권장 사항 시스템
- 커뮤니티 검색 알고리즘
- 전파 연구에 영향
- 소셜 연결을 기반으로 하는 콘텐츠 권장 사항
- 친구의 친구 검색
- 소셜 그래프 마이닝 연구
예제 쿼리:
비슷한 연령대의 직접적인 우정을 찾습니다.
이 쿼리는 "KNOWS" 관계를 통해 직접 연결되고 나이가 비슷한 사람 쌍(서로 30일 이내에 생일)을 식별합니다. LDBC 소셜 네트워크 그래프를 트래버스하여 비슷한 연령대의 사람들 사이의 기존 우정을 찾습니다. 이 쿼리는 네트워크에서 이러한 연령과 유사한 우정 쌍의 총 수를 반환하며, 이는 연령 기반 소셜 패턴을 분석하거나 친구 추천 알고리즘의 유효성을 검사하는 데 유용할 수 있습니다.
graph("LDBC_SNB_Interactive")
| graph-match (person1)-[knows]->(person2)
where labels(person1) has "PERSON" and labels(person2) has "PERSON" and
labels(knows) has "KNOWS"and abs(person1.birthday - person2.birthday) < 30d
project person_name = person1.firstName, friend_name = person2.firstName
| count
| 수량 |
|---|
| 225 |
좋아요로 인기 있는 게시물 찾기:
이 쿼리는 게시물을 좋아한 고유 사용자 수에 따라 가장 인기 있는 콘텐츠 작성자를 식별하여 소셜 참여를 분석합니다. 소셜 네트워크 그래프는 경로를 통해 트래버스합니다. → 사람이 → 게시 → has_creator → 작성자를 좋아합니다. 쿼리는 데이터를 집계하여 각 작성자의 고유 좋아요 및 고유 게시물의 총 수를 표시한 다음, 가장 많은 좋아요를 가진 상위 3명의 작성자를 반환합니다. 이는 영향력 있는 콘텐츠 작성자를 식별하고, 참여 패턴을 이해하고, 소셜 네트워크에서 바이러스 성 콘텐츠를 검색하는 데 유용합니다.
graph("LDBC_SNB_Interactive")
| graph-match (person)-[likes]->(post)-[has_creator]->(creator)
where labels(person) has "Person" and labels( post) has "POST" and labels(has_creator) has "HAS_CREATOR" and isnotempty(creator.lastName)
project personId = person.id, postId = post.id, creator = creator.lastName
| summarize Likes = dcount(personId), posts = dcount(postId) by creator
| top 3 by Likes desc
| 창조자 | 좋아하는 | 게시물 |
|---|---|---|
| 장 | 371 | 207 |
| 호프 만 | 340 | 9 |
| 싱 | 338 | 268 |
LDBC 재무
사용법: graph("LDBC_Financial")
목적: 금융 거래 분석 및 사기 감지 패턴.
비고
이 데이터 세트는 Apache 라이선스 2.0에서 제공됩니다. LDBC 재무 벤치마크 데이터 세트는 LDBC(연결된 데이터 벤치마크 위원회)에서 만듭니다.
설명: 회사, 개인, 계좌, 대출 및 다양한 금융 거래와 함께 포괄적인 금융 네트워크를 나타내는 LDBC 금융 벤치마크 데이터 세트입니다. 이 데이터 세트는 총 5,580개의 노드와 31,000개 이상의 금융 거래 및 관계를 가진 현실적인 금융 에코시스템을 모델로 합니다. 사기 감지, AML(자금 세탁 방지) 분석 및 금융 범죄 조사 시나리오를 위해 특별히 설계된 이 기능은 금융 범죄 시나리오에서 흔히 볼 수 있는 계정 소유권, 대출 신청, 보증 및 다단계 거래 체인을 포함한 복잡한 패턴을 캡처합니다.
사용 사례:
- 금융 사기 감지
- AML(자금 세탁 방지) 분석
- 트랜잭션 패턴 분석
- 위험 평가 및 신용 점수 매기기
- 의심스러운 활동 모니터링
- 재무 네트워크 분석
그래프 스키마 개요:
스키마 및 개수:
노드 형식:
-
COMPANY- 비즈니스 엔터티(386개 노드) -
PERSON- 개별 고객(785개 노드) -
ACCOUNT- 재무 계정(2,055개 노드) -
LOAN- 대출 상품(1,376개 노드) -
MEDIUM- 트랜잭션 매체/채널(978개 노드)
-
관계 유형:
-
TRANSFER- 계좌 간 송금(8,132개 에지) -
WITHDRAW- 계좌에서 현금 인출(9,182 에지) -
DEPOSIT- 계좌로 예금 (2,758 에지) -
OWN- 계정 소유권 관계(2,055 에지) -
APPLY- 대출 신청(1,376 에지) -
GUARANTEE- 대출 보증(579 에지) -
INVEST- 투자 거래(1,983 에지) -
REPAY- 대출 상환(2,747 에지) -
SIGN_IN- 인증 이벤트(2,489개 에지)
-
그래프 인스턴스 예제:
이 예제에서는 여러 엔터티 유형 및 거래 패턴이 있는 복잡한 금융 네트워크를 보여 줍니다. 금융 기관이 사기 탐지 및 위험 평가를 위해 고객, 계좌, 대출 및 거래 흐름 간의 관계를 모델링하는 방법을 보여 줍니다.
예제 쿼리:
순환 송금을 통해 잠재적 자금 세탁을 감지합니다.
이 쿼리는 자금 세탁 활동을 나타낼 수 있는 의심스러운 순환 트랜잭션 패턴을 식별합니다. 다른 계정으로 돈을 보낸 다음 1~3개의 전송 체인을 통해 다시 수신하는 계정을 검색하여 순환 흐름을 만듭니다. 쿼리는 특히 큰 초기 전송(10,000개 이상)을 찾고 전송 금액 및 순환 체인의 길이를 포함하여 의심스러운 계정에 대한 세부 정보를 반환합니다. 이 패턴 검색은 AML(자금 세탁 방지) 시스템 및 금융 사기 조사에 유용합니다.
graph("LDBC_Financial")
| graph-match (account1)-[t1]->(account2)-[t2*1..3]->(account1)
where labels(t1) has "TRANSFER" and t1.amount > 10000 // Large initial transfer
project suspicious_account = account1.node_id,
amount = t1.amount,
transfer_chain_length = array_length(t2) + 1
| take 10
| suspicious_account | 분량 | transfer_chain_length |
|---|---|---|
| 계정::4818007176356300028 | 5035377,73 | 2 |
| 계정::4818007176356300028 | 5035377,73 | 2 |
| 계정::4845310249097233848 | 359062,45 | 2 |
| 계정::4818007176356300028 | 5035377,73 | 3 |
| 계정::4818007176356300028 | 5035377,73 | 4 |
| 계정::4840243699516440940 | 5753668,55 | 4 |
| 계정::4818007176356300028 | 5035377,73 | 4 |
| 계정::180143985094820389 | 465338,26 | 4 |
| 계정::4814910951612482356 | 1684581,62 | 4 |
| 계정::4816599801472746629 | 963626,42 | 4 |
고위험 대출 보증인을 찾습니다.
이 쿼리는 재무 위험 노출을 나타낼 수 있는 총 상당한 금액의 여러 대출을 보장하는 개인 또는 회사를 식별합니다. 보증인 → 보증인은 대출자가 → 대출을 적용할 → → 금융 네트워크 그래프를 트래버스합니다. 쿼리는 각 보증인에 대한 총 보증 금액 및 대출 수를 집계한 다음, 총 100,000개가 넘는 보증을 필터링하고 총 보장 금액으로 상위 5위를 반환합니다. 이 분석은 위험 평가, 과도하게 활용된 보증인 식별 및 대출 네트워크의 시스템 재무 위험 평가에 유용합니다.
graph("LDBC_Financial")
| graph-match (guarantor)-[guarantee]->(borrower)-[apply]->(loan)
where labels(guarantee) has "GUARANTEE" and labels(apply) has "APPLY"
project guarantor_id = guarantor.node_id,
borrower_id = borrower.node_id,
loan_amount = loan.loanAmount
| summarize total_guaranteed = sum(loan_amount), loan_count = count() by guarantor_id
| where total_guaranteed > 100000
| top 5 by total_guaranteed desc
| guarantor_id | total_guaranteed | loan_count |
|---|---|---|
| 사람::44 | 439802195 | 8 |
| 사람::15393162789155 | 411111642 | 8 |
| 회사::12094627905931 | 404538891 | 6 |
| 회사::4398046511208 | 366243272 | 8 |
| Person::19791209300551 | 338838223 | 6 |
BloodHound Entra 데이터 세트
사용법: graph("BloodHound_Entra")
목적: Microsoft Entra 권한 에스컬레이션 및 공격 경로 분석
비고
이 데이터 세트는 Apache 라이선스 2.0에서 제공됩니다. BloodHound 데이터 세트는 BloodHound 프로젝트에 의해 생성됩니다.
설명: Microsoft Entra 환경에 대한 BloodHound 데이터 세트입니다. 이 포괄적인 보안 데이터 세트에는 사용자, 그룹, 애플리케이션, 서비스 주체, 디바이스 및 다양한 클라우드 리소스를 포함한 13,526개의 Microsoft Entra 개체가 포함됩니다. 800,000개 이상의 권한 관계 및 보안 에지를 사용하여 엔터프라이즈 조직의 일반적인 복잡한 Microsoft Entra 환경을 모델로 합니다. 데이터 세트는 클라우드 환경에서 권한 에스컬레이션 경로 및 공격 벡터를 식별하는 데 필수적인 자세한 Microsoft Entra 권한, 역할 할당, 그룹 멤버 자격 및 리소스 소유권 패턴을 캡처합니다.
사용 사례:
- Entra ID 보안 평가
- 권한 에스컬레이션 경로 검색
- 공격 경로 시각화
- ID 거버넌스 분석
- 위험 기반 보안 제어
- 클라우드 환경에 대한 규정 준수 감사
그래프 스키마 개요:
스키마 및 개수:
비고
이 데이터 세트는 Apache 라이선스 2.0에서 제공됩니다. BloodHound 데이터 세트는 BloodHound Community Edition 프로젝트에 의해 생성됩니다.
설명: Microsoft Entra 환경에 대한 BloodHound Community Edition 데이터 세트입니다. 이 포괄적인 보안 데이터 세트에는 사용자, 그룹, 애플리케이션, 서비스 주체, 디바이스 및 다양한 클라우드 리소스를 포함한 13,526개의 Microsoft Entra 개체가 포함됩니다. 800,000개 이상의 권한 관계 및 보안 에지를 사용하여 엔터프라이즈 조직의 일반적인 복잡한 Microsoft Entra 환경을 모델로 합니다. 데이터 세트는 클라우드 환경에서 권한 에스컬레이션 경로 및 공격 벡터를 식별하는 데 필수적인 자세한 Microsoft Entra 권한, 역할 할당, 그룹 멤버 자격 및 리소스 소유권 패턴을 캡처합니다.
스키마 및 개수:
주 노드 형식:
-
AZUser- Microsoft Entra 사용자(230개 노드) -
AZServicePrincipal- 서비스 주체 및 애플리케이션(6,270개 노드) -
AZApp- Azure 애플리케이션(6,648개 노드) -
AZGroup- Microsoft Entra 그룹(58개 노드) -
AZDevice- 관리되는 디바이스(47개 노드)
-
Azure 리소스 종류:
-
AZResourceGroup- 리소스 그룹(59개 노드) -
AZVM- 가상 머신(66개 노드) -
AZRole- Azure 역할(116개 노드) -
AZSubscription- Azure 구독(노드 3개) -
AZTenant- Azure 테넌트(노드 1개)
-
키 관계 유형 (볼륨별 상위 권한):
-
AZMGAddOwner- 관리 그룹 소유자 권한(403,412 에지) -
AZMGAddSecret- 비밀 관리 권한(에지 345,324개) -
AZAddSecret- 애플리케이션 비밀 권한(24,666개 에지) -
AZContains- 리소스 포함 관계(12,924개 에지) -
AZRunsAs- 서비스 실행 권한(6,269개 에지) -
AZMemberOf- 그룹 멤버 관계(4,439 에지) -
AZOwns- 리소스 소유권(2,870 에지)
-
그래프 인스턴스 예제:
이 예제에서는 클라우드 환경에서 복잡한 권한 구조 및 잠재적 공격 경로를 사용하는 Microsoft Entra 및 Entra ID 관계를 보여 줍니다.
사용 사례:
- Entra ID 보안 평가
- 권한 에스컬레이션 경로 검색
- 공격 경로 시각화
- ID 거버넌스 분석
- 위험 기반 보안 제어
- 클라우드 환경에 대한 규정 준수 감사
예제 쿼리:
관리 권한에 대한 경로를 찾습니다.
이 쿼리는 일반 사용자에서 Microsoft Entra 환경의 관리 그룹으로 권한 상승 경로를 식별합니다. 1-3 관계 홉을 통해 관리 그룹(예: Microsoft Entra DC 관리자, DnsAdmins 등)에 연결할 수 있는 사용자를 검색하여 보안 팀이 잠재적인 공격 경로 및 권한 상승 위험을 이해할 수 있도록 지원합니다.
graph("BloodHound_Entra")
| graph-match (user)-[path*1..3]->(admingroup)
where labels(user) has_any ("User", "AZUser")
and labels(admingroup) has_any ("Group", "AZGroup")
and (admingroup.name contains "ADMIN" or admingroup.displayname contains "ADMIN")
project source_user = user.name,
path_length = array_length(path),
admin_group = coalesce(admingroup.displayname, admingroup.name)
| take 10
| source_user | path_length | admin_group |
|---|---|---|
| THISUSERHASINTUNEADMINROLE@PHANTOMCORP.ONMICROSOFT.COM | 1 | ADSyncAdmins |
| 097EF6C2-GROUPSADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM | 1 | AAD DC 관리자 |
| USERBELONGSTOGAGROUP@PHANTOMCORP.ONMICROSOFT.COM | 1 | ADSyncAdmins |
| THISUSERHASINTUNEADMINROLE@PHANTOMCORP.ONMICROSOFT.COM | 1 | DnsAdmins |
| RHADMIN@PHANTOMCORP.ONMICROSOFT.COM | 1 | DnsAdmins |
| CJACKSON@PHANTOMCORP.ONMICROSOFT.COM | 1 | Azure ATP 가상 관리자 |
| 097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM | 1 | AAD DC 관리자 |
| RHADMIN_PHANTOMCORP.ONMICROSOFT.COM#EXT#@PHANTOMCORP.ONMICROSOFT.COM | 1 | 리소스 그룹 관리자 |
| THISUSERHASKNOWLEDGEMANAGERROLE@PHANTOMCORP.ONMICROSOFT.COM | 1 | DnsAdmins |
| 097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM | 1 | DnsAdmins |
고부가가치 대상 식별(계층 0 자산):
이 쿼리는 환경에서 "admin_tier_0"로 표시된 중요한 관리 자산을 식별합니다. 가장 중요하고 강력한 계정, 서비스 주체 및 리소스는 손상될 경우 가장 높은 위험을 초래합니다. 이러한 자산을 이해하면 보안 모니터링 및 보호 작업의 우선 순위를 지정하는 데 도움이 됩니다.
graph("BloodHound_Entra")
| graph-match (asset)
where asset.properties.system_tags contains "admin_tier_0"
project asset_name = asset.name,
asset_type = tostring(labels(asset)[1]), // Get primary type (AZUser, AZServicePrincipal, etc.)
system_tags = asset.properties.system_tags
| take 10
| asset_name | asset_type | system_tags |
|---|---|---|
| JJACOB@PHANTOMCORP.ONMICROSOFT.COM | AZUser | admin_tier_0 |
| PLEWIS@PHANTOMCORP.ONMICROSOFT.COM | AZUser | admin_tier_0 |
| JMILLER@PHANTOMCORP.ONMICROSOFT.COM | AZUser | admin_tier_0 |
| CJACKSON@PHANTOMCORP.ONMICROSOFT.COM | AZUser | admin_tier_0 |
| RHALL@PHANTOMCORP.ONMICROSOFT.COM | AZUser | admin_tier_0 |
| THISAPPHASGLOBALADMIN@PHANTOMCORP | AZServicePrincipal | admin_tier_0 |
| MYCOOLAUTOMATIONACCOUNT@PHANTOMCORP | AZServicePrincipal | admin_tier_0 |
| SERVICEPRINCIPALE@PHANTOMCORP | AZServicePrincipal | admin_tier_0 |
| 31E3B75F 권한 인증 ADMINISTRATOR@PHANTOMCORP | AZServicePrincipal | admin_tier_0 |
| 31E3B75F 권한 있는 역할 ADMINISTRATOR@PHANTOMCORP | AZServicePrincipal | admin_tier_0 |
BloodHound Active Directory 데이터 세트
사용법: graph("BloodHound_AD")
목적: 온-프레미스 Active Directory 보안 분석 및 권한 매핑
비고
이 데이터 세트는 Apache 라이선스 2.0에서 제공됩니다. BloodHound 데이터 세트는 BloodHound 프로젝트에 의해 생성됩니다.
설명: 온-프레미스 Active Directory 환경에 대한 BloodHound Community Edition 데이터 세트입니다. 이 데이터 세트에는 복잡한 권한 구조와 공격 경로가 있는 일반적인 엔터프라이즈 AD 배포를 나타내는 1,495개의 Active Directory 개체가 포함되어 있습니다. 데이터 세트에는 여러 도메인의 사용자, 컴퓨터, 그룹, 조직 구성 요소, 그룹 정책 개체 및 인증 기관 구성 요소가 포함됩니다. 18,000개가 넘는 권한 관계 및 보안 에지를 사용하여 Windows 도메인 환경에서 흔히 발생하는 권한 에스컬레이션 경로, ACL 기반 권한, 그룹 멤버 자격 및 인증서 기반 인증 취약성을 비롯한 현실적인 AD 공격 시나리오를 캡처합니다.
사용 사례:
- Active Directory 보안 평가
- 공격 경로 분석 및 침투 테스트
- 도메인 권한 매핑
- 그룹 정책 보안 분석
- Kerberoasting 및 ASREPRoasting 대상 식별
- 보안 제어 간격 분석
그래프 스키마 개요:
핵심 AD 개체 유형:
-
User- 도메인 사용자(99개 노드) -
Computer- 도메인 컴퓨터(34개 노드) -
Group- 보안 및 배포 그룹(219개 노드) -
ADLocalGroup- 컴퓨터의 로컬 그룹(28개 노드) -
GPO- 그룹 정책 개체(32개 노드)
-
AD 인프라 유형:
-
Domain- Active Directory 도메인(노드 5개) -
OU- 조직 구성 단위(20개 노드) -
Container- AD 컨테이너(939개 노드) -
CertTemplate- 인증서 템플릿(106개 노드) -
EnterpriseCA- 인증 기관(4개 노드) -
RootCA- 루트 인증 기관(노드 5개)
-
주요 권한 유형 (상위 공격 벡터):
-
GenericAll- 모든 권한(3,292개 에지) -
WriteDacl- 권한 수정(2,221개 에지) -
WriteOwner- 소유권 변경(에지 2,187개) -
Owns- 개체 소유권(1,439개 가장자리) -
Contains- 포함 관계(1,416개 가장자리) -
GenericWrite- 쓰기 권한(579개 에지) -
MemberOf- 그룹 멤버 자격(301 에지)
-
그래프 스키마 개요:
그래프 인스턴스 예제:
이 예제에서는 기존 Windows 도메인 환경에서 온-프레미스 Active Directory 공격 경로 및 잠재적인 보안 취약성을 보여 줍니다.
사용 사례:
- Active Directory 보안 평가
- 공격 경로 분석 및 침투 테스트
- 도메인 권한 매핑
- 그룹 정책 보안 분석
- Kerberoasting 및 ASREPRoasting 대상 식별
- 보안 제어 간격 분석
예제 쿼리:
잠재적인 권한 상승 찾기:
이 쿼리는 관리자가 아닌 사용자가 Microsoft Entra에서 관리자에게 에스컬레이션할 수 있는 수를 계산합니다. 각 사용자에서 관리 사용자(admincount=true)를 통해 위험한 권한(GenericAll, WriteDacl, WriteOwner, ForceChangePassword)을 부여하는 그룹으로 최대 10개의 MemberOf 그룹 홉(주기 없음)을 트래버스한 다음, 이러한 "잠재적 공격자" 사용자의 고유 수를 반환합니다.
graph("BloodHound_AD")
| graph-match cycles=none (user)-[memberof*0..10]->(group)-[permission]->(target)
where labels(user) has "User"
and labels(group) has "Group"
and all(memberof, labels() has "MemberOf")
and user.properties.admincount == false
and (labels(permission) has_any ("GenericAll", "WriteDacl", "WriteOwner", "ForceChangePassword"))
and (labels(target) has "User" and target.properties.admincount == true)
project attack_user = user.name
| summarize ['Potential attackers'] = dcount(attack_user)
| 잠재적인 공격자 |
|---|
| 2 |
골든 인증서 공격 경로 찾기:
이 쿼리는 공격자가 도메인의 모든 사용자로 인증서를 위조할 수 있도록 골든 인증서 공격을 수행할 수 있는 엔터티를 식별합니다. 이러한 취약성은 공격자가 위조된 인증서를 통해 도메인 관리자를 포함한 모든 사용자를 가장할 수 있도록 하여 완전한 도메인 손상이 가능하기 때문에 중요한 취약성입니다.
graph("BloodHound_AD")
| graph-match (attacker)-[goldencert]->(target)
where labels(goldencert) has "GoldenCert"
project
Attacker = attacker.name,
AttackerType = case(
attacker.name has "DC", "Domain Controller",
attacker.name has "CA", "Certificate Authority",
attacker.name has "SRV", "Server",
"Unknown System"
),
Target = target.name,
RiskLevel = "CRITICAL",
AttackCapability = case(
attacker.name has "DC", "Primary domain controller with certificate services",
attacker.name has "EXTCA", "External Certificate Authority with root access",
attacker.name has "SRV", "Compromised server with certificate generation rights",
"System with certificate forging capabilities"
)
| 공격자 | AttackerType | 목표/타겟 | RiskLevel | AttackCapability |
|---|---|---|---|---|
| DC01. 유령. 공사 | 알 수 없는 시스템 | 유령. 공사 | 비판적인 | 인증서 위조 기능이 있는 시스템 |
| SRV-SHARPHOUND. 유령. 공사 | 서버 | 유령. 공사 | 비판적인 | 인증서 생성 권한이 있는 손상된 서버 |
| EXTCA01. 레이스. 공사 | 알 수 없는 시스템 | 레이스. 공사 | 비판적인 | 인증서 위조 기능이 있는 시스템 |
| EXTCA02. 레이스. 공사 | 알 수 없는 시스템 | 레이스. 공사 | 비판적인 | 인증서 위조 기능이 있는 시스템 |