Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
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.
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:
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.
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:
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.
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:
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.
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:
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.
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 |