
Um coletor BloodHound para o Microsoft Configuration Manager
SCCMHound é um coletor BloodHound em C# para o Microsoft Configuration Manager (MCM). Se você está procurando uma maneira de coletar informações de sessão do BloodHound a partir dos usuários e computadores do Configuration Manager, esta é a ferramenta certa para você!
É altamente recomendável importar os dados coletados junto com os dados de outro coletor (SharpHound, SOAPHound, etc.). Não importa se a importação for feita antes ou depois de outro conjunto de dados. Isso resulta em uma visão ampla dos relacionamentos do Active Directory da organização alvo, complementada por informações coletadas do Configuration Manager.
O SCCMHound é um projeto de código aberto, não um produto da CrowdStrike. Como tal, não possui suporte formal, expresso ou implícito.
O SCCMHound tem como alvo o .NET 4.6.2 para garantir compatibilidade com o Windows 10 versões 1607 e superiores.
É necessária uma conta de administrador do MCM com acesso suficiente para consultar informações de usuários e computadores. Dependendo do método de coleta, também é necessária a capacidade de executar consultas CMPivot. Esta ferramenta foi testada com um usuário com a função "Full Administrator" do MCM.
O servidor e o código do site podem ser obtidos no console do MCM, ou usando outra ferramenta como o SharpSCCM.

Primeiro, você precisará clonar o repositório. --recursive deve ser especificado, pois o SCCMHound usa o SharpHoundCommon como submódulo.
ex.: git clone [email protected]:CrowdStrike/sccmhound.git --recursive
Depois de ter uma cópia local, abra SCCMHound.sln no Visual Studio e compile!
Para usar o método de coleta padrão, basta informar os argumentos de servidor e código do site. O SCCMHound usará o contexto de execução no qual é invocado para autenticar no MCM. Por exemplo:
SCCMHound.exe --server <server> --sitecode <sitecode>
Para executar o SCCMHound a partir do contexto de outro usuário ou de uma máquina não ingressada no domínio, os argumentos -u (--username), -p (--password) e -d (--domain) são necessários. Por exemplo:
SCCMHound.exe --server <server> --sitecode <sitecode> -u <username> -p <password> -d <domain>
Alternativamente, o comando runas /netonly pode ser usado antes de invocar o SCCMHound:
runas /netonly /user:[email protected] cmd.exe
cd C:\path\to\SCCMHound
SCCMHound.exe --server <server> --sitecode <sitecode>
Lembra quando os dados de sessão do BloodHound eram fáceis de coletar? Bem...

Gráficos bonitos de roubo de credenciais e movimento lateral!!!

Por favor, seja gentil enquanto o(s) mantenedor(es) expande(m) as fontes de dados coletadas e corrige(m) quaisquer bugs :)
Ok, ok... Isso invocará todos os métodos de coleta (incluindo os métodos de coleta via CMPivot):
SCCMHound.exe --server <server> --sitecode <sitecode> -c All
--server Required. SCCM server hostname/IP address.
--sitecode Required. SCCM sitecode.
-c, --collectionmethods (Default: Default) (LocalAdmins, CurrentSessions, All)
--loop (Default: false) Enable loop collection.
--loopduration (Default: 00:30:00) Loop Duration.
--loopsleep (Default: 60) Sleep time between loops in seconds.
--hc (Default: false) Health check. Simply tests authentication and exits.
-u, --username SCCM administrator username.
-p, --password SCCM administrator password.
-d, --domain SCCM administrator domain.
-v, --verbose (Default: false) Print verbose information to help with troubleshooting.
--help Display this help screen.
--version Display version information.
O método de coleta padrão (sem argumento -c especificado/necessário) constrói um conjunto de dados do BloodHound usando apenas conexões WMI com o servidor do site MCM especificado. Este método de coleta coletará:
Este método de coleta coleta informações do usuário atualmente logado para cada objeto Computador no MCM. Isso tem a limitação de coletar apenas o usuário logado informado pelo MCM, independentemente de vários usuários estarem autenticados.
O SCCMHound preenche automaticamente a associação a grupos SOMENTE para Usuários. Os objetos de Grupo no ConfigMgr não parecem conter informações de grupo filho ou grupo pai, portanto os grupos no BloodHound mostrarão apenas membros Usuários. Isso requer investigação adicional e não é um problema se a importação for feita junto com outro conjunto de dados (SharpHound, SOAPHound, etc).
Para obter uma cobertura maior de sessões usando este método de coleta, o argumento --loop pode ser usado para coletar informações de sessão regularmente.
Este método de coleta (-c LocalAdmins) executa o comportamento do método de coleta "Padrão" e também consulta a coleção "All Systems" para coletar o conteúdo do grupo Administrators local de cada computador gerenciado pelo MCM.
Nota (1): Este método de coleta consulta apenas dispositivos que estão online. Ele pode ser usado com o argumento --loop para obter melhor cobertura.
Nota (2): Este método de coleta usa CMPivot para executar a consulta em todos os membros.
Este método de coleta (-c CurrentSessions) executa o comportamento do método de coleta "Padrão" e também consulta a coleção "All Systems" para coletar informações de sessão em tempo real de cada computador gerenciado pelo MCM.
Este método de coleta consulta apenas dispositivos que estão atualmente online. Ele pode ser usado com o argumento --loop para obter melhor cobertura.
Nota (1): Este método de coleta consulta apenas dispositivos que estão online. Ele pode ser usado com o argumento --loop para obter melhor cobertura.
Nota (2): Este método de coleta usa CMPivot para executar a consulta em todos os membros.
Para executar todos os métodos de coleta de uma só vez, basta especificar All (-c All) como método de coleta
Recomendo ler a seguinte documentação da Microsoft para entender melhor como o CMPivot funciona: https://learn.microsoft.com/en-us/mem/configmgr/core/servers/manage/cmpivot
tl;dr - Os métodos de coleta por CMPivot foram testados pela Microsoft em ambientes com até 50.000 clientes, o que gerou <50MB de tráfego na rede. Os métodos de coleta do SCCMHound foram testados em ambientes com ~1000 máquinas, sem problemas identificados ou degradação de serviço.
Sinta-se à vontade para reportar qualquer feedback sobre esses métodos de coleta em ambientes de grande porte para que possa ser incorporado aqui.
Além da excelente cobertura de sessões e administradores locais, o SCCMHound preenche os objetos coletados com propriedades adicionais. Elas podem ser observadas na aba "Node Info" do Bloodhound, prefixadas com "sccm". Por exemplo: sccmADSiteName.
As propriedades coletadas incluem:
customqueries.json fornece consultas Cypher que podem ser executadas com um conjunto de dados SCCMHound importado. Isso será expandido conforme funcionalidades adicionais forem adicionadas ao SCCMHound.
Para usar, basta copiar customqueries.json para ~/.config/bloodhound/customqueries.json e reiniciar o BloodHound. As consultas aparecerão então na aba "Analysis" do BloodHound.