Compartilhar via


Exemplos e conjuntos de dados de exemplo do Graph

Esta página lista grafos existentes em nosso cluster de ajuda no https://help.kusto.windows.net banco de dados De exemplos e mostra como consultá-los usando a KQL (Linguagem de Consulta Kusto). Esses exemplos demonstram a consulta de modelos de grafo predefinidos sem a necessidade de nenhuma etapa de criação ou instalação.

Grafo educacional simples para conceitos básicos de aprendizagem

Uso: graph("Simple")

Finalidade: operações básicas de grafo e padrões fundamentais de consulta de grafo.

Descrição: um pequeno grafo educacional que contém pessoas, empresas e cidades com várias relações. Perfeito para aprender as passagens de grafo e entender padrões básicos. Esse conjunto de dados compacto inclui 11 nós (5 pessoas, 3 empresas e 3 cidades) conectados por meio de 20 relações, tornando-o ideal para entender os conceitos básicos do grafo sem a complexidade de conjuntos de dados maiores. O grafo demonstra cenários comuns do mundo real, como relações de emprego, localizações geográficas, conexões sociais e preferências pessoais.

Casos de uso:

  • Conceitos básicos da consulta do grafo de aprendizagem
  • Testando algoritmos de grafo
  • Noções básicas sobre padrões de relação
  • Exemplos educacionais para conceitos de grafo

Relações de esquema:

Um esquema de um grafo que contém pessoas, empresas e cidades com várias relações.

Esquema e contagens:

  • Tipos de nó:

    • Person - Pessoas individuais (5 nós)
    • Company - Organizações empresariais (3 nós)
    • City - Localizações geográficas (3 nós)
  • Tipos de relação:

    • works_at - Relações de emprego (5 bordas)
    • located_at - Atribuições de localização geográfica (8 bordas)
    • knows - Conexões sociais entre pessoas (4 bordas)
    • likes - Preferências e interesses pessoais (3 bordas)

Exemplo da instância do Graph:

Este exemplo demonstra relações de grafo básicas em uma rede pequena e fácil de entender mostrando como as pessoas se conectam a empresas e cidades por meio de vários tipos de relacionamento.

Um grafo que contém instâncias de pessoas, empresas e cidades com várias relações.

Consultas de exemplo:

Encontre todos os funcionários de uma empresa específica:

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
Alice vinte e cinco
Bob 30
Emma 26

Encontre colegas (pessoas trabalhando na mesma empresa):

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
colega1 colega2 companhia
Alice Bob TechCorp

LDBC SNB interativo

Uso: graph("LDBC_SNB_Interactive")

Finalidade: travessias de rede social e exploração amigável.

Observação

Esse conjunto de dados é fornecido no Apache License 2.0. Os conjuntos de dados LDBC Social Network Benchmark são criados pelo LDBC (Linked Data Benchmark Council).

Descrição: O conjunto de dados de carga de trabalho interativo do LDBC (Linked Data Benchmark Council) representa uma ampla modelagem de rede social em plataformas de mídia social do mundo real. Esse parâmetro de comparação captura a complexidade das redes sociais modernas com mais de 327.000 nós e vários tipos de relacionamento, incluindo dados geográficos hierárquicos, estruturas organizacionais de vários níveis e interações de conteúdo avançado. O conjunto de dados modela ecossistemas realistas de mídia social com pessoas criando postagens e comentários, participando de fóruns, trabalhando em organizações e vivendo em locais geográficos em uma hierarquia detalhada de continentes para cidades.

Casos de uso:

  • Sistemas de análise e recomendação de rede social
  • Algoritmos de detecção de comunidade
  • Influenciar estudos de propagação
  • Recomendação de conteúdo com base em conexões sociais
  • Descoberta de amigo-de-amigo
  • Pesquisa de mineração de grafo social

Visão geral do esquema do Graph:

Um esquema de um grafo que contém nós e relações do conjunto de dados LDBC SNB.

Esquema e contagens:

  • Principais tipos de entidade social:

    • PERSON - Usuários de rede social (1.528 nós)
    • POST - Postagens de usuário (135.701 nós)
    • COMMENT - Comentários sobre postagens (151.043 nós)
    • FORUM - Fóruns de discussão (13.750 nós)
  • Tipos organizacionais e geográficos:

    • ORGANISATION - Universidades e empresas (7.955 nós)
    • PLACE - Localizações geográficas: continentes (6), países (111), cidades (1.343) – total de 1.460 nós
  • Tipos de classificação de conteúdo:

    • TAG - Marcas de conteúdo (16.080 nós)
    • TAGCLASS - Categorias de marca (71 nós)
  • Tipos de relação chave:

    • KNOWS - Relações de amigos (14.073 bordas)
    • LIKES – Conteúdo gosta: postagens (47.215) + comentários (62.225) = 109.440 bordas totais
    • HAS_CREATOR - Autoria de conteúdo: postagens (135.701) + comentários (151.043) = 286.744 bordas
    • HAS_MEMBER – Associações de fórum (123.268 bordas)
    • HAS_TAG - Marcação de conteúdo: postagens (51.118) + comentários (191.303) + fóruns (47.697) = 290.118 bordas
    • IS_LOCATED_IN - Relações de localização: pessoas (1.528) + organizações (7.955) + postagens (135.701) + comentários (151.043) = 296.227 bordas
    • REPLY_OF - Threading de comentário: comentário a comentário (76.787) + comentário a postagem (74.256) = 151.043 bordas
    • WORK_AT / STUDY_AT - Histórico profissional/educacional (4.522 bordas)
    • HAS_INTEREST - Interesses pessoais (35.475 bordas)
    • Outras relações: HAS_MODERATOR, , IS_PART_OF, CONTAINER_OF, HAS_TYPEIS_SUBCLASS_OF

Exemplo da instância do Graph:

Este exemplo demonstra interações complexas da rede social em um ambiente realista de mídia social, mostrando como os usuários se envolvem com conteúdo, participam de fóruns e formam conexões sociais.

Um grafo que contém um subgrafo de exemplo do conjunto de dados LDBC SNB.

Este exemplo demonstra:

  • Social Engagement: Mahinda gosta tanto do post de Abdullah quanto de um comentário sobre esse post
  • Threading de Conteúdo: O comentário (sobre Gloria Macapagal-Arroyo) responde à postagem (sobre a Aurangzeb)
  • Criação de conteúdo: Abdullah cria postagens em sua própria parede do fórum
  • Participação da comunidade: Mahinda é membro do fórum de Abdullah onde o conteúdo aparece
  • Classificação de conteúdo: as postagens e os comentários são marcados com tópicos relevantes de seu conteúdo
  • Contexto Geográfico: todas as entidades têm relações de localização para análise geográfica

Casos de uso:

  • Sistemas de análise e recomendação de rede social
  • Algoritmos de detecção de comunidade
  • Influenciar estudos de propagação
  • Recomendação de conteúdo com base em conexões sociais
  • Descoberta de amigo-de-amigo
  • Pesquisa de mineração de grafo social

Consultas de exemplo:

Encontre amizades diretas com idades semelhantes:

Essa consulta identifica pares de pessoas que estão diretamente conectadas por meio de uma relação "SABE" e têm idades semelhantes (aniversários dentro de 30 dias umas das outras). Ele atravessa o grafo da rede social LDBC para encontrar amizades existentes entre pessoas de faixas etárias semelhantes. A consulta retorna a contagem total desses pares de amizade semelhantes à idade na rede, o que pode ser útil para analisar padrões sociais baseados na idade ou validar algoritmos de recomendação de amigos.

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

Encontre postagens populares por curtidas:

Essa consulta analisa o engajamento social identificando os criadores de conteúdo mais populares com base em quantas pessoas exclusivas gostaram de suas postagens. Ele percorre o grafo da rede social pelo caminho: a pessoa → gosta → postagem → has_creator → criador. A consulta agrega os dados para mostrar o número total de likers exclusivos e postagens distintas de cada criador e retorna os três principais criadores com mais curtidas. Isso é útil para identificar criadores de conteúdo influentes, entender padrões de engajamento e descobrir conteúdo viral na rede social.

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
criador Gosta Posts
Zhang 371 207
Hoffmann 340 9
Singh 338 268

LDBC Financial

Uso: graph("LDBC_Financial")

Finalidade: análise de transações financeiras e padrões de detecção de fraude.

Observação

Esse conjunto de dados é fornecido no Apache License 2.0. Os conjuntos de dados do LDBC Financial Benchmark são criados pelo LDBC (Linked Data Benchmark Council).

Descrição: conjunto de dados LDBC Financial Benchmark que representa uma rede financeira abrangente com empresas, pessoas, contas, empréstimos e várias transações financeiras. Esse conjunto de dados modela ecossistemas financeiros realistas com 5.580 nós totais e mais de 31.000 transações financeiras e relações. Projetado especificamente para detecção de fraudes, análise antilavagem de dinheiro (AML) e cenários de investigação de crimes financeiros, captura padrões complexos, incluindo propriedade da conta, pedidos de empréstimos, garantias e cadeias de transações de várias etapas que são comuns em cenários de crimes financeiros.

Casos de uso:

  • Detecção de fraude financeira
  • Análise de AML (antilavagem de dinheiro)
  • Análise de padrão de transação
  • Avaliação de risco e pontuação de crédito
  • Monitoramento de atividades suspeitas
  • Análise de rede financeira

Visão geral do esquema do Graph:

Um esquema de um grafo que contém nós e relações do conjunto de dados LDBC Financial.

Esquema e contagens:

  • Tipos de nó:

    • COMPANY – Entidades comerciais (386 nós)
    • PERSON – Clientes individuais (785 nós)
    • ACCOUNT - Contas financeiras (2.055 nós)
    • LOAN - Produtos de empréstimo (1.376 nós)
    • MEDIUM - Meios/canais de transação (978 nós)
  • Tipos de relação:

    • TRANSFER - Transferências de dinheiro entre contas (8.132 bordas)
    • WITHDRAW – Saques em dinheiro de contas (9.182 bordas)
    • DEPOSIT - Depósitos em contas (2.758 bordas)
    • OWN - Relações de propriedade da conta (2.055 bordas)
    • APPLY - Pedidos de empréstimo (1.376 bordas)
    • GUARANTEE - Garantias de empréstimo (579 bordas)
    • INVEST - Transações de investimento (1.983 bordas)
    • REPAY - Reembolsos de empréstimos (2.747 bordas)
    • SIGN_IN - Eventos de autenticação (2.489 bordas)

Exemplo da instância do Graph:

Este exemplo ilustra uma rede financeira complexa com vários tipos de entidade e padrões de transação, demonstrando como as instituições financeiras podem modelar relações entre clientes, contas, empréstimos e fluxos de transação para detecção de fraudes e avaliação de risco.

Um grafo que contém um subgrafo de exemplo do conjunto de dados LDBC Financial.

Consultas de exemplo:

Detectar possível lavagem de dinheiro por meio de transferências circulares:

Essa consulta identifica padrões de transação circular suspeitos que podem indicar atividades de lavagem de dinheiro. Ele procura contas que enviam dinheiro para outra conta e depois a recebem de volta por meio de uma cadeia de transferências de 1 a 3, criando um fluxo circular. A consulta procura especificamente grandes transferências iniciais (mais de 10.000) e retorna detalhes sobre as contas suspeitas, incluindo o valor da transferência e o comprimento da cadeia circular. Essa detecção de padrões é útil para sistemas AML (antilavagem de dinheiro) e investigações de fraude financeira.

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

Encontre fiadores de empréstimos de alto risco:

Essa consulta identifica pessoas físicas ou empresas que garantem vários empréstimos totalizando valores significativos, o que pode indicar exposição ao risco financeiro. Ele percorre o grafo de rede financeira seguindo o caminho: o garantidor → garantir → mutuário → aplicar → empréstimo. A consulta agrega o valor total garantido e o número de empréstimos para cada garantidor, depois filtra para aqueles que garantem mais de 100.000 no total e retorna os 5 primeiros pelo valor total garantido. Essa análise é útil para avaliação de risco, identificação de garantidores superutilizados e avaliação de riscos financeiros sistêmicos em redes de empréstimos.

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

Conjunto de dados do BloodHound Entra

Uso: graph("BloodHound_Entra")

Finalidade: análise de escalonamento de privilégios e caminho de ataque do Microsoft Entra.

Observação

Esse conjunto de dados é fornecido no Apache License 2.0. Os conjuntos de dados do BloodHound são criados pelo projeto BloodHound.

Descrição: conjunto de dados BloodHound para ambientes do Microsoft Entra. Esse conjunto de dados de segurança abrangente contém 13.526 objetos do Microsoft Entra, incluindo usuários, grupos, aplicativos, entidades de serviço, dispositivos e vários recursos de nuvem. Com mais de 800.000 relações de permissão e bordas de segurança, ele modela ambientes complexos do Microsoft Entra típicos de organizações empresariais. O conjunto de dados captura permissões detalhadas do Microsoft Entra, atribuições de função, associações de grupo e padrões de propriedade de recursos essenciais para identificar caminhos de escalonamento de privilégios e vetores de ataque em ambientes de nuvem.

Casos de uso:

  • Avaliações de segurança do Entra ID
  • Descoberta de caminho de escalonamento de privilégios
  • Visualização do caminho de ataque
  • Análise de governança de identidade
  • Controles de segurança baseados em risco
  • Auditoria de conformidade para ambientes de nuvem

Visão geral do esquema do Graph:

Um esquema de um grafo que contém nós e relações do conjunto de dados BloodHound Entra.

Esquema e contagens:

Observação

Esse conjunto de dados é fornecido no Apache License 2.0. Os conjuntos de dados BloodHound são criados pelo projeto BloodHound Community Edition.

Descrição: conjunto de dados do BloodHound Community Edition para ambientes do Microsoft Entra. Esse conjunto de dados de segurança abrangente contém 13.526 objetos do Microsoft Entra, incluindo usuários, grupos, aplicativos, entidades de serviço, dispositivos e vários recursos de nuvem. Com mais de 800.000 relações de permissão e bordas de segurança, ele modela ambientes complexos do Microsoft Entra típicos de organizações empresariais. O conjunto de dados captura permissões detalhadas do Microsoft Entra, atribuições de função, associações de grupo e padrões de propriedade de recursos essenciais para identificar caminhos de escalonamento de privilégios e vetores de ataque em ambientes de nuvem.

Esquema e contagens:

  • Tipos de nó primários:

    • AZUser - Usuários do Microsoft Entra (230 nós)
    • AZServicePrincipal - Entidades de serviço e aplicativos (6.270 nós)
    • AZApp – Aplicativos do Azure (6.648 nós)
    • AZGroup - Grupos do Microsoft Entra (58 nós)
    • AZDevice - Dispositivos gerenciados (47 nós)
  • Tipos de recursos do Azure:

    • AZResourceGroup - Grupos de recursos (59 nós)
    • AZVM - Máquinas virtuais (66 nós)
    • AZRole - Funções do Azure (116 nós)
    • AZSubscription – Assinaturas do Azure (3 nós)
    • AZTenant - Locatário do Azure (1 nó)
  • Tipos de relação de chave (permissões principais por volume):

    • AZMGAddOwner - Permissões de proprietário do grupo de gerenciamento (403.412 bordas)
    • AZMGAddSecret - Permissões de gerenciamento de segredo (345.324 bordas)
    • AZAddSecret - Permissões de segredo do aplicativo (24.666 bordas)
    • AZContains - Relações de contenção de recursos (12.924 bordas)
    • AZRunsAs - Permissões de execução de serviço (6.269 bordas)
    • AZMemberOf - Relações de associação de grupo (4.439 bordas)
    • AZOwns - Propriedade do recurso (2.870 bordas)

Exemplo da instância do Graph:

Este exemplo demonstra as relações de identidade do Microsoft Entra e do Entra com estruturas de privilégios complexas e possíveis caminhos de ataque em um ambiente de nuvem.

Um grafo que contém um subgrafo de exemplo do conjunto de dados BloodHound Entra

Casos de uso:

  • Avaliações de segurança do Entra ID
  • Descoberta de caminho de escalonamento de privilégios
  • Visualização do caminho de ataque
  • Análise de governança de identidade
  • Controles de segurança baseados em risco
  • Auditoria de conformidade para ambientes de nuvem

Consultas de exemplo:

Encontre caminhos para privilégios administrativos:

Essa consulta identifica caminhos de escalonamento de privilégios de usuários regulares para grupos administrativos em ambientes do Microsoft Entra. Ele pesquisa usuários que podem alcançar grupos de administradores (como Administradores do Microsoft Entra DC, DnsAdmins etc.) por meio de 1 a 3 saltos de relacionamento, ajudando as equipes de segurança a entender possíveis caminhos de ataque e riscos de escalonamento de privilégios.

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 Administradores do 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 Administradores fantasmas do ATP do Azure
097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM 1 Administradores do AAD DC
RHADMIN_PHANTOMCORP.ONMICROSOFT.COM#EXT#@PHANTOMCORP.ONMICROSOFT.COM 1 Administradores do Grupo de Recursos
THISUSERHASKNOWLEDGEMANAGERROLE@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins
097EF6C2-INTUNEADMINISTRATOR@PHANTOMCORP.ONMICROSOFT.COM 1 DnsAdmins

Identificar destinos de alto valor (ativos de camada 0):

Essa consulta identifica ativos administrativos críticos marcados como "admin_tier_0" no ambiente. Essas são as contas mais confidenciais e poderosas, entidades de serviço e recursos que representam o maior risco se comprometidos. Entender esses ativos ajuda a priorizar os esforços de monitoramento e proteção de segurança.

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
AUTENTICAÇÃO COM PRIVILÉGIOS 31E3B75F ADMINISTRATOR@PHANTOMCORP AzServicePrincipal admin_tier_0
31E3B75F-ADMINISTRADOR DE PAPEL PRIVILEGIADO@PHANTOMCORP AzServicePrincipal admin_tier_0

Conjunto de dados do BloodHound Active Directory

Uso: graph("BloodHound_AD")

Finalidade: análise de segurança e mapeamento de privilégios do Active Directory local.

Observação

Esse conjunto de dados é fornecido no Apache License 2.0. Os conjuntos de dados do BloodHound são criados pelo projeto BloodHound.

Descrição: conjunto de dados do BloodHound Community Edition para ambientes do Active Directory local. Esse conjunto de dados contém 1.495 objetos do Active Directory que representam uma implantação típica do AD empresarial com estruturas de permissão complexas e caminhos de ataque. O conjunto de dados inclui usuários, computadores, grupos, unidades organizacionais, objetos de política de grupo e componentes de autoridade de certificação em vários domínios. Com mais de 18.000 relações de permissão e bordas de segurança, ele captura cenários de ataque realistas do AD, incluindo caminhos de escalonamento de privilégios, permissões baseadas em ACL, associações de grupo e vulnerabilidades de autenticação baseadas em certificado comuns em ambientes de domínio do Windows.

Casos de uso:

  • Avaliações de segurança do Active Directory
  • Análise de caminho de ataque e teste de penetração
  • Mapeamento de privilégios de domínio
  • Análise de segurança de política de grupo
  • Identificação de destino kerberoasting e ASREPRoasting
  • Análise de lacuna de controle de segurança

Visão geral do esquema do Graph:

  • Principais tipos de objeto do AD:

    • User - Usuários de domínio (99 nós)
    • Computer - Computadores de domínio (34 nós)
    • Group - Grupos de segurança e distribuição (219 nós)
    • ADLocalGroup - Grupos locais em computadores (28 nós)
    • GPO - Objetos de Política de Grupo (32 nós)
  • Tipos de infraestrutura do AD:

    • Domain - Domínios do Active Directory (5 nós)
    • OU - Unidades organizacionais (20 nós)
    • Container - Contêineres do AD (939 nós)
    • CertTemplate - Modelos de certificado (106 nós)
    • EnterpriseCA - Autoridades de Certificação (4 nós)
    • RootCA - Autoridades de Certificação Raiz (5 nós)
  • Tipos de permissão de chave (principais vetores de ataque):

    • GenericAll - Permissões de controle total (3.292 bordas)
    • WriteDacl – Modificar permissões (2.221 bordas)
    • WriteOwner - Alterar a propriedade (2.187 bordas)
    • Owns - Propriedade do objeto (1.439 bordas)
    • Contains - Relações de contenção (1.416 bordas)
    • GenericWrite - Permissões de gravação (579 bordas)
    • MemberOf - Associações de grupo (301 bordas)

Visão geral do esquema do Graph:

Um esquema de um grafo que contém nós e relações do conjunto de dados do BloodHound AD.

Exemplo da instância do Graph:

Este exemplo demonstra caminhos de ataque do Active Directory local e possíveis vulnerabilidades de segurança em um ambiente de domínio tradicional do Windows.

Um grafo que contém um subgrafo de exemplo do conjunto de dados do BloodHound AD.

Casos de uso:

  • Avaliações de segurança do Active Directory
  • Análise de caminho de ataque e teste de penetração
  • Mapeamento de privilégios de domínio
  • Análise de segurança de política de grupo
  • Identificação de destino kerberoasting e ASREPRoasting
  • Análise de lacuna de controle de segurança

Consultas de exemplo:

Encontre um possível escalonamento de privilégios:

Essa consulta conta quantos usuários não administradores podem potencialmente escalonar para administrador no Microsoft Entra. Ele percorre até 10 saltos de grupo MemberOf (sem ciclos) de cada usuário para grupos que concedem permissões perigosas (GenericAll, WriteDacl, WriteOwner, ForceChangePassword) sobre usuários administradores (admincount=true) e retorna o número distinto desses usuários "potencial invasor".

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)
Possíveis invasores
2

Localizar caminhos de ataque do Golden Certificate:

Essa consulta identifica entidades que podem executar ataques do Golden Certificate, que permitem aos invasores falsificar certificados como qualquer usuário no domínio. Essas são vulnerabilidades críticas, pois permitem o comprometimento de domínio completo, permitindo que o invasor represente qualquer usuário, incluindo administradores de domínio, por meio de certificados forjados.

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"
        )
Agressor AttackerType Meta RiskLevel AttackCapability
DC01. FANTASMA. CORP Sistema Desconhecido FANTASMA. CORP CRÍTICO Sistema com recursos de forja de certificado
SRV-SHARPHOUND. FANTASMA. CORP Servidor FANTASMA. CORP CRÍTICO Servidor comprometido com direitos de geração de certificado
EXTCA01. WRAITH. CORP Sistema Desconhecido WRAITH. CORP CRÍTICO Sistema com recursos de forja de certificado
EXTCA02. WRAITH. CORP Sistema Desconhecido WRAITH. CORP CRÍTICO Sistema com recursos de forja de certificado