Udostępnij przez


Przykładowe zestawy danych i przykłady programu Graph

Na tej stronie wymieniono istniejące wykresy w naszym klastrze https://help.kusto.windows.net pomocy w bazie danych Samples i pokazano, jak wykonywać zapytania za pomocą języka Kusto Query Language (KQL). W tych przykładach pokazano wykonywanie zapytań dotyczących wstępnie utworzonych modeli grafów bez konieczności tworzenia ani konfigurowania kroków.

Prosty graf edukacyjny na potrzeby nauki podstaw

Użycie: graph("Simple")

Cel: Podstawowe operacje grafu i uczenie się podstawowych wzorców zapytań grafów.

Opis: Mały wykres edukacyjny zawierający osoby, firmy i miasta z różnymi relacjami. Idealny do nauki przechodzenia grafu i rozumienia podstawowych wzorców. Ten kompaktowy zestaw danych obejmuje 11 węzłów (5 osób, 3 firmy i 3 miasta) połączonych przez 20 relacji, dzięki czemu idealnie nadaje się do zrozumienia podstaw grafów bez złożoności większych zestawów danych. Wykres przedstawia typowe scenariusze w świecie rzeczywistym, takie jak relacje zatrudnienia, lokalizacje geograficzne, połączenia społecznościowe i osobiste preferencje.

Przypadki użycia:

  • Podstawy zapytań grafów szkoleniowych
  • Testowanie algorytmów grafu
  • Opis wzorców relacji
  • Przykłady edukacyjne pojęć związanych z grafami

Relacje schematu:

Schemat grafu zawierającego osoby, firmy i miasta z różnymi relacjami.

Schemat i liczby:

  • Typy węzłów:

    • Person - Pojedyncze osoby (5 węzłów)
    • Company - Organizacje biznesowe (3 węzły)
    • City - Lokalizacje geograficzne (3 węzły)
  • Typy relacji:

    • works_at - Relacje zatrudnienia (5 krawędzi)
    • located_at - Przypisania lokalizacji geograficznej (8 krawędzi)
    • knows - Połączenia społecznościowe między osobami (4 krawędzie)
    • likes - Osobiste preferencje i zainteresowania (3 krawędzie)

Przykład wystąpienia programu Graph:

W tym przykładzie przedstawiono podstawowe relacje grafów w małej, łatwej do zrozumienia sieci pokazującej, jak ludzie łączą się z firmami i miastami za pośrednictwem różnych typów relacji.

Wykres zawierający wystąpienia osób, firm i miast z różnymi relacjami.

Przykładowe zapytania:

Znajdź wszystkich pracowników określonej firmy:

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
Alicja 25
Robert 30
Emma 26

Znajdź współpracowników (osoby pracujące w tej samej firmie):

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
współpracownik1 współpracownik2 firma
Alicja Robert TechCorp

Interakcyjne snb protokołu LDBC

Użycie: graph("LDBC_SNB_Interactive")

Cel: Przechodzenie do sieci społecznościowych i przyjaciel-of-friend eksploracji.

Uwaga / Notatka

Ten zestaw danych jest udostępniany w ramach licencji Apache License 2.0. Zestawy danych testów porównawczych sieci społecznościowych LDBC są tworzone przez połączoną radę testów porównawczych danych (LDBC).

Opis: Połączony zestaw danych Benchmark Council (LDBC) Social Network Benchmark Interactive obciążenia przedstawia kompleksowe modelowanie sieci społecznościowych na rzeczywistych platformach mediów społecznościowych. Ten test porównawczy obejmuje złożoność nowoczesnych sieci społecznościowych z ponad 327 000 węzłami i wieloma typami relacji, w tym hierarchicznymi danymi geograficznymi, strukturami organizacyjnymi wielo poziomów i rozbudowanymi interakcjami z zawartością. Zestaw danych modeluje realistyczne ekosystemy mediów społecznościowych z osobami tworzącymi wpisy i komentarze, uczestnicząc w forach, pracując w organizacjach i mieszkając w lokalizacjach geograficznych w szczegółowej hierarchii z kontynentów do miast.

Przypadki użycia:

  • Systemy analizy sieci społecznościowych i rekomendacji
  • Algorytmy wykrywania społeczności
  • Badania propagacji wpływu
  • Rekomendacja dotycząca zawartości oparta na połączeniach społecznościowych
  • Przyjaciel przyjaciela odkrycia
  • Badania wyszukiwania grafu społecznego

Omówienie schematu programu Graph:

Schemat grafu zawierającego węzły i relacje z zestawu danych SNB LDBC.

Schemat i liczby:

  • Podstawowe typy jednostek społecznościowych:

    • PERSON — Użytkownicy sieci społecznościowej (1528 węzłów)
    • POST - Wpisy użytkownika (135 701 węzłów)
    • COMMENT — Komentarze dotyczące wpisów (151 043 węzły)
    • FORUM - Fora dyskusyjne (13 750 węzłów)
  • Typy organizacyjne i geograficzne:

    • ORGANISATION - Uniwersytety i firmy (7955 węzłów)
    • PLACE - Lokalizacje geograficzne: kontynenty (6), kraje (111), miasta (1343) — łącznie 1460 węzłów
  • Typy klasyfikacji zawartości:

    • TAG — Tagi zawartości (16 080 węzłów)
    • TAGCLASS - Kategorie tagów (71 węzłów)
  • Kluczowe typy relacji:

    • KNOWS - Relacje przyjacielskie (14 073 krawędzie)
    • LIKES - Zawartość lubi: wpisy (47,215) + komentarze (62,225) = 109,440 całkowite krawędzie
    • HAS_CREATOR - Tworzenie zawartości: wpisy (135,701) + komentarze (151,043) = 286,744 krawędzie
    • HAS_MEMBER - Członkostwo forum (123,268 krawędzi)
    • HAS_TAG - Tagowanie zawartości: wpisy (51,118) + komentarze (191,303) + fora (47,697) = 290,118 krawędzi
    • IS_LOCATED_IN - Relacje lokalizacji: osoby (1528) + organizacje (7955) + posty (135 701) + komentarze (151 043) = 296,227 krawędzi
    • REPLY_OF - Wątkowanie komentarzy: komentarz do komentarza (76,787) + komentarz do postu (74,256) = 151,043 krawędzie
    • WORK_AT / STUDY_AT - Historia zawodowa/edukacyjna (4522 krawędzie)
    • HAS_INTEREST - Interesy osobiste (35 475 krawędzi)
    • Inne relacje: HAS_MODERATOR, , IS_PART_OFCONTAINER_OF, , HAS_TYPEIS_SUBCLASS_OF

Przykład wystąpienia programu Graph:

W tym przykładzie pokazano złożone interakcje z sieciami społecznościowymi w realistycznym środowisku mediów społecznościowych, pokazując, jak użytkownicy angażują się w zawartość, uczestniczą w forach i tworzą połączenia społecznościowe.

Wykres zawierający przykładowy podgraf zestawu danych SNB LDBC.

W tym przykładzie pokazano:

  • Social Engagement: Mahinda lubi zarówno post Abdullaha, jak i komentarz na ten post
  • Content Threading: Komentarz (o Gloria Macapagal-Arroyo) odpowiada na post (o Aurangzeb)
  • Tworzenie zawartości: Abdullah tworzy posty na własnym forum ściany
  • Uczestnictwo społeczności: Mahinda jest członkiem forum Abdullaha, na którym pojawia się treść
  • Klasyfikacja zawartości: wpisy i komentarze są oznaczone odpowiednimi tematami z ich zawartości
  • Kontekst geograficzny: Wszystkie jednostki mają relacje lokalizacji na potrzeby analizy geograficznej

Przypadki użycia:

  • Systemy analizy sieci społecznościowych i rekomendacji
  • Algorytmy wykrywania społeczności
  • Badania propagacji wpływu
  • Rekomendacja dotycząca zawartości oparta na połączeniach społecznościowych
  • Przyjaciel przyjaciela odkrycia
  • Badania wyszukiwania grafu społecznego

Przykładowe zapytania:

Znajdź bezpośrednie przyjaźnie w podobnym wieku:

To zapytanie identyfikuje pary osób, które są bezpośrednio połączone za pośrednictwem relacji "WIE" i mają podobne urodziny (urodziny w ciągu 30 dni od siebie). Przechodzi przez graf sieci społecznościowej LDBC, aby znaleźć istniejące przyjaźnie między ludźmi podobnych grup wiekowych. Zapytanie zwraca łączną liczbę takich par przyjaźni podobnych do wieku w sieci, co może być przydatne do analizowania wzorców społecznych opartych na wieku lub weryfikowania algorytmów rekomendacji przyjaciela.

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 
Liczba
225

Znajdź popularne posty według polubień:

To zapytanie analizuje zaangażowanie społeczne, identyfikując najpopularniejszych twórców zawartości w oparciu o liczbę unikatowych osób, które polubiły swoje posty. Przechodzi on przez graf sieci społecznościowej przez ścieżkę: osoba → lubi → post → has_creator → twórca. Zapytanie agreguje dane, aby wyświetlić całkowitą liczbę unikatowych polubień i unikatowych wpisów każdego twórcy, a następnie zwraca 3 pierwszych twórców z największą liczbą polubień. Jest to przydatne do identyfikowania wpływowych twórców zawartości, zrozumienia wzorców zaangażowania i odnajdywania wirusowej zawartości w sieci społecznościowej.

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
autor Lubi Posty
Zhang 371 207
Hoffmann 340 9
Singh 338 268

LDBC Financial

Użycie: graph("LDBC_Financial")

Cel: Wzorce analizy transakcji finansowych i wykrywania oszustw.

Uwaga / Notatka

Ten zestaw danych jest udostępniany w ramach licencji Apache License 2.0. Zestawy danych testu porównawczego finansowego LDBC są tworzone przez połączoną radę testów porównawczych danych (LDBC).

Opis: zestaw danych LDBC Financial Benchmark reprezentujący kompleksową sieć finansową z firmami, osobami, kontami, pożyczkami i różnymi transakcjami finansowymi. Ten zestaw danych modeluje realistyczne ekosystemy finansowe z 5580 łącznymi węzłami i ponad 31 000 transakcji finansowych i relacji. Zaprojektowana specjalnie na potrzeby wykrywania oszustw, analizy anty-prania pieniędzy (AML) i scenariuszy badania przestępczości finansowej, obejmuje złożone wzorce, w tym własność konta, wnioski o pożyczki, gwarancje i wieloetapowe łańcuchy transakcji, które są powszechne w scenariuszach przestępczości finansowej.

Przypadki użycia:

  • Wykrywanie oszustw finansowych
  • Analiza ochrony przed praniem pieniędzy (AML)
  • Analiza wzorca transakcji
  • Ocena ryzyka i ocena kredytowa
  • Monitorowanie podejrzanych działań
  • Analiza sieci finansowej

Omówienie schematu programu Graph:

Schemat grafu zawierającego węzły i relacje z zestawu danych finansowych LDBC.

Schemat i liczby:

  • Typy węzłów:

    • COMPANY - Jednostki biznesowe (386 węzłów)
    • PERSON - Klienci indywidualni (785 węzłów)
    • ACCOUNT - Konta finansowe (2055 węzłów)
    • LOAN - Produkty pożyczkowe (1376 węzłów)
    • MEDIUM - Medium transakcji/kanały (978 węzłów)
  • Typy relacji:

    • TRANSFER - Przelewy pieniężne między kontami (8132 krawędzie)
    • WITHDRAW - Wypłaty gotówkowe z kont (9182 krawędzie)
    • DEPOSIT - Depozyty pieniężne na konta (2758 krawędzi)
    • OWN — Relacje własności konta (2055 krawędzi)
    • APPLY - Wnioski o pożyczkę (1376 krawędzi)
    • GUARANTEE - Gwarancje pożyczki (579 krawędzi)
    • INVEST - Transakcje inwestycyjne (1983 krawędzie)
    • REPAY - Spłaty pożyczki (2747 krawędzi)
    • SIGN_IN - Zdarzenia uwierzytelniania (2489 krawędzi)

Przykład wystąpienia programu Graph:

W tym przykładzie przedstawiono złożoną sieć finansową z wieloma typami jednostek i wzorcami transakcji, pokazując, w jaki sposób instytucje finansowe mogą modelować relacje między klientami, kontami, pożyczkami i przepływami transakcji na potrzeby wykrywania oszustw i oceny ryzyka.

Wykres zawierający przykładowy podgraf zestawu danych finansowych LDBC.

Przykładowe zapytania:

Wykrywanie potencjalnego prania pieniędzy za pośrednictwem cyklicznych transferów:

To zapytanie identyfikuje podejrzane wzorce transakcji cyklicznych, które mogą wskazywać na działania związane z praniem pieniędzy. Wyszukuje konta, które wysyłają pieniądze na inne konto, a następnie odbierają je z powrotem za pośrednictwem łańcucha od 1 do 3 transferów, tworząc przepływ cykliczny. Zapytanie szuka w szczególności dużych transferów początkowych (ponad 10 000) i zwraca szczegóły dotyczące podejrzanych kont, w tym kwotę transferu i długość łańcucha cyklicznego. To wykrywanie wzorców jest przydatne w przypadku systemów ochrony przed praniem pieniędzy (AML) i dochodzeniami dotyczącymi oszustw finansowych.

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 kwota transfer_chain_length
Account::4818007176356300028 5035377,73 2
Account::4818007176356300028 5035377,73 2
Account::4845310249097233848 359062,45 2
Account::4818007176356300028 5035377,73 3
Account::4818007176356300028 5035377,73 4
Konto::4840243699516440940 5753668,55 4
Account::4818007176356300028 5035377,73 4
Konto::180143985094820389 465338,26 4
Account::4814910951612482356 1684581,62 4
Account::4816599801472746629 963626,42 4

Znajdź gwarancji pożyczki o wysokim ryzyku:

To zapytanie identyfikuje osoby fizyczne lub firmy, które gwarantują wiele pożyczek w sumie znacznej kwoty, co może wskazywać na ekspozycję na ryzyko finansowe. Przechodzi przez wykres sieci finansowej po ścieżce: gwarant → gwarancja → kredytobiorcy → stosować → pożyczki. Zapytanie agreguje łączną kwotę gwarantowaną i liczbę pożyczek dla każdego gwaranta, a następnie filtruje te, które gwarantują ponad 100 000 w sumie i zwraca 5 pierwszych o łączną gwarantowaną kwotę. Ta analiza jest przydatna w przypadku oceny ryzyka, identyfikowania nadmiernie dźwigni finansowej i oceny systemowych zagrożeń finansowych w sieciach kredytowych.

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
Person::44 439802195 8
Person::15393162789155 411111642 8
Firma::12094627905931 404538891 6
Firma::4398046511208 366243272 8
Person::19791209300551 338838223 6

Zestaw danych BloodHound Entra

Użycie: graph("BloodHound_Entra")

Cel: Eskalacja uprawnień firmy Microsoft i analiza ścieżki ataku.

Uwaga / Notatka

Ten zestaw danych jest udostępniany w ramach licencji Apache License 2.0. Zestawy danych BloodHound są tworzone przez projekt BloodHound.

Opis: Zestaw danych BloodHound dla środowisk Firmy Microsoft Entra. Ten kompleksowy zestaw danych zabezpieczeń zawiera 13 526 obiektów firmy Microsoft Entra, w tym użytkowników, grup, aplikacji, jednostek usługi, urządzeń i różnych zasobów w chmurze. Dzięki ponad 800 000 relacjom uprawnień i krawędziom zabezpieczeń modeluje złożone środowiska firmy Microsoft Entra typowe dla organizacji korporacyjnych. Zestaw danych przechwytuje szczegółowe uprawnienia firmy Microsoft, przypisania ról, członkostwa w grupach i wzorce własności zasobów niezbędne do identyfikowania ścieżek eskalacji uprawnień i wektorów ataków w środowiskach chmury.

Przypadki użycia:

  • Oceny zabezpieczeń identyfikatora entra
  • Odnajdywanie ścieżki eskalacji uprawnień
  • Wizualizacja ścieżki ataku
  • Analiza ładu tożsamości
  • Mechanizmy kontroli zabezpieczeń oparte na ryzyku
  • Inspekcja zgodności dla środowisk w chmurze

Omówienie schematu programu Graph:

Schemat grafu zawierającego węzły i relacje z zestawu danych BloodHound Entra.

Schemat i liczby:

Uwaga / Notatka

Ten zestaw danych jest udostępniany w ramach licencji Apache License 2.0. Zestawy danych BloodHound są tworzone przez projekt BloodHound Community Edition.

Opis: Zestaw danych BloodHound Community Edition dla środowisk firmy Microsoft Entra. Ten kompleksowy zestaw danych zabezpieczeń zawiera 13 526 obiektów firmy Microsoft Entra, w tym użytkowników, grup, aplikacji, jednostek usługi, urządzeń i różnych zasobów w chmurze. Dzięki ponad 800 000 relacjom uprawnień i krawędziom zabezpieczeń modeluje złożone środowiska firmy Microsoft Entra typowe dla organizacji korporacyjnych. Zestaw danych przechwytuje szczegółowe uprawnienia firmy Microsoft, przypisania ról, członkostwa w grupach i wzorce własności zasobów niezbędne do identyfikowania ścieżek eskalacji uprawnień i wektorów ataków w środowiskach chmury.

Schemat i liczby:

  • Podstawowe typy węzłów:

    • AZUser — Użytkownicy firmy Microsoft Entra (230 węzłów)
    • AZServicePrincipal - Jednostki usługi i aplikacje (6270 węzłów)
    • AZApp — Aplikacje platformy Azure (6648 węzłów)
    • AZGroup — Grupy entra firmy Microsoft (58 węzłów)
    • AZDevice - Urządzenia zarządzane (47 węzłów)
  • Typy zasobów platformy Azure:

    • AZResourceGroup - Grupy zasobów (59 węzłów)
    • AZVM — Maszyny wirtualne (66 węzłów)
    • AZRole — Role platformy Azure (116 węzłów)
    • AZSubscription — Subskrypcje platformy Azure (3 węzły)
    • AZTenant — Dzierżawa platformy Azure (1 węzeł)
  • Typy relacji klucza (najważniejsze uprawnienia według woluminu):

    • AZMGAddOwner - Uprawnienia właściciela grupy zarządzania (403,412 krawędzie)
    • AZMGAddSecret - Uprawnienia do zarządzania wpisami tajnymi (345 324 krawędzie)
    • AZAddSecret — Uprawnienia wpisu tajnego aplikacji (24 666 krawędzi)
    • AZContains — Relacje zawierające zasoby (12 924 krawędzie)
    • AZRunsAs — Uprawnienia wykonywania usługi (6269 krawędzi)
    • AZMemberOf - Relacje członkostwa w grupach (4439 krawędzi)
    • AZOwns — Własność zasobów (2870 krawędzi)

Przykład wystąpienia programu Graph:

W tym przykładzie pokazano relacje tożsamości Firmy Microsoft Entra i Entra ze złożonymi strukturami uprawnień i potencjalnymi ścieżkami ataków w środowisku chmury.

Wykres zawierający przykładowy podgraf zestawu danych BloodHound Entra

Przypadki użycia:

  • Oceny zabezpieczeń identyfikatora entra
  • Odnajdywanie ścieżki eskalacji uprawnień
  • Wizualizacja ścieżki ataku
  • Analiza ładu tożsamości
  • Mechanizmy kontroli zabezpieczeń oparte na ryzyku
  • Inspekcja zgodności dla środowisk w chmurze

Przykładowe zapytania:

Znajdź ścieżki do uprawnień administracyjnych:

To zapytanie identyfikuje ścieżki eskalacji uprawnień od zwykłych użytkowników do grup administracyjnych w środowiskach Firmy Microsoft Entra. Wyszukuje użytkowników, którzy mogą uzyskiwać dostęp do grup administratorów (takich jak Administratorzy dc firmy Microsoft, DnsAdmins itp.) do 1–3 przeskoków relacji, pomagając zespołom ds. zabezpieczeń zrozumieć potencjalne ścieżki ataków i zagrożenia eskalacji uprawnień.

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 Administratorzy kontrolera domeny usługi AAD
USERBELONGSTOGAGROUP@PHANTOMCORP.ONMICROSOFT.COM 1 ADSyncAdmins
THISUSERHASINTUNEADMINROLE@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins
RHADMIN@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins
CJACKSON@PHANTOMCORP.ONMICROSOFT.COM 1 Administratorzy phantom usługi Azure ATP
097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM 1 Administratorzy kontrolera domeny usługi AAD
RHADMIN_PHANTOMCORP.ONMICROSOFT.COM#EXT#@PHANTOMCORP.ONMICROSOFT.COM 1 Administratorzy grupy zasobów
THISUSERHASKNOWLEDGEMANAGERROLE@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins
097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins

Identyfikowanie obiektów docelowych o wysokiej wartości (zasoby warstwy 0):

To zapytanie identyfikuje krytyczne zasoby administracyjne oznaczone jako "admin_tier_0" w środowisku. Są to najbardziej wrażliwe i zaawansowane konta, jednostki usług i zasoby, które stanowią największe ryzyko w przypadku naruszenia zabezpieczeń. Zrozumienie tych zasobów pomaga określić priorytety działań związanych z monitorowaniem zabezpieczeń i ochroną.

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-PRIVILEGED AUTHENTICATION ADMINISTRATOR@PHANTOMCORP AZServicePrincipal admin_tier_0
Rola UPRZYWILEJOWANA 31E3B75F ADMINISTRATOR@PHANTOMCORP AZServicePrincipal admin_tier_0

Zestaw danych usługi BloodHound Active Directory

Użycie: graph("BloodHound_AD")

Cel: lokalne mapowanie zabezpieczeń i uprawnień usługi Active Directory.

Uwaga / Notatka

Ten zestaw danych jest udostępniany w ramach licencji Apache License 2.0. Zestawy danych BloodHound są tworzone przez projekt BloodHound.

Opis: Zestaw danych BloodHound Community Edition dla lokalnych środowisk usługi Active Directory. Ten zestaw danych zawiera 1495 obiektów usługi Active Directory reprezentujących typowe wdrożenie usługi AD w przedsiębiorstwie ze złożonymi strukturami uprawnień i ścieżkami ataków. Zestaw danych obejmuje użytkowników, komputery, grupy, jednostki organizacyjne, obiekty zasad grupy i składniki urzędu certyfikacji w wielu domenach. Dzięki ponad 18 000 relacjom uprawnień i krawędziom zabezpieczeń przechwytuje realistyczne scenariusze ataku w usłudze AD, w tym ścieżki eskalacji uprawnień, uprawnienia oparte na listach ACL, członkostwo w grupach i luki w zabezpieczeniach uwierzytelniania oparte na certyfikatach typowe w środowiskach domeny systemu Windows.

Przypadki użycia:

  • Oceny zabezpieczeń usługi Active Directory
  • Analiza ścieżki ataku i testowanie penetracyjne
  • Mapowanie uprawnień domeny
  • Analiza zabezpieczeń zasad grupy
  • Kerberoasting i ASREPRoasting identyfikacji docelowej
  • Analiza luk w zabezpieczeniach

Omówienie schematu programu Graph:

  • Podstawowe typy obiektów usługi AD:

    • User — Użytkownicy domeny (99 węzłów)
    • Computer - Komputery domeny (34 węzły)
    • Group - Grupy zabezpieczeń i dystrybucji (219 węzłów)
    • ADLocalGroup - Grupy lokalne na komputerach (28 węzłów)
    • GPO - Obiekty zasad grupy (32 węzły)
  • Typy infrastruktury usługi AD:

    • Domain - Domeny usługi Active Directory (5 węzłów)
    • OU - Jednostki organizacyjne (20 węzłów)
    • Container — Kontenery usługi AD (939 węzłów)
    • CertTemplate - Szablony certyfikatów (106 węzłów)
    • EnterpriseCA - Urzędy certyfikacji (4 węzły)
    • RootCA - Główne urzędy certyfikacji (5 węzłów)
  • Typy uprawnień klucza (najważniejsze wektory ataków):

    • GenericAll - Uprawnienia pełnej kontroli (3292 krawędzie)
    • WriteDacl - Modyfikowanie uprawnień (2221 krawędzi)
    • WriteOwner - Zmiana własności (2187 krawędzi)
    • Owns - Własność obiektu (1439 krawędzi)
    • Contains - Relacje zawierania (1416 krawędzi)
    • GenericWrite - Uprawnienia do zapisu (579 krawędzi)
    • MemberOf - Członkostwa w grupach (301 krawędzie)

Omówienie schematu programu Graph:

Schemat grafu zawierającego węzły i relacje z zestawu danych BloodHound AD.

Przykład wystąpienia programu Graph:

W tym przykładzie przedstawiono lokalne ścieżki ataków usługi Active Directory i potencjalne luki w zabezpieczeniach w tradycyjnym środowisku domeny systemu Windows.

Wykres zawierający przykładowy podgraf zestawu danych BloodHound AD.

Przypadki użycia:

  • Oceny zabezpieczeń usługi Active Directory
  • Analiza ścieżki ataku i testowanie penetracyjne
  • Mapowanie uprawnień domeny
  • Analiza zabezpieczeń zasad grupy
  • Kerberoasting i ASREPRoasting identyfikacji docelowej
  • Analiza luk w zabezpieczeniach

Przykładowe zapytania:

Znajdź potencjalną eskalację uprawnień:

To zapytanie zlicza liczbę użytkowników niebędących administratorami, którzy mogą potencjalnie eskalować do administratora w firmie Microsoft Entra. Przechodzi do 10 przeskoków grupy MemberOf (bez cykli) od każdego użytkownika do grup, które udzielają niebezpiecznych uprawnień (GenericAll, WriteDacl, WriteOwner, ForceChangePassword) nad użytkownikami administratora (admincount=true), a następnie zwraca odrębną liczbę takich "potencjalnych użytkowników atakujących".

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)
Potencjalni atakujący
2

Znajdź ścieżki ataku złotego certyfikatu:

To zapytanie identyfikuje jednostki, które mogą wykonywać ataki na złoty certyfikat, co umożliwia osobom atakującym tworzenie certyfikatów jako dowolnego użytkownika w domenie. Są to krytyczne luki w zabezpieczeniach, ponieważ umożliwiają one pełne naruszenie domeny, umożliwiając atakującemu personifikację dowolnego użytkownika, w tym administratorów domeny, za pośrednictwem sfałszowanych certyfikatów.

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"
        )
Napastnik Typ osoby atakującej Target Poziom ryzyka AttackCapability (Możliwość ataku)
DC01. FANTOM. CORP Nieznany system FANTOM. CORP KRYTYCZNY System z możliwościami tworzenia certyfikatów
SRV-SHARPHOUND. FANTOM. CORP Serwer FANTOM. CORP KRYTYCZNY Naruszony serwer z prawami generowania certyfikatów
EXTCA01. WRAITH. CORP Nieznany system WRAITH. CORP KRYTYCZNY System z możliwościami tworzenia certyfikatów
EXTCA02. WRAITH. CORP Nieznany system WRAITH. CORP KRYTYCZNY System z możliwościami tworzenia certyfikatów