
Ferramentas de Reconhecimento de Ataque Direcionado em C#
Este é um assembly .NET personalizado que realiza uma série de atividades de consciência situacional. Existem vários conjuntos de funcionalidades atuais:
Eu não sabia que o GhostPack estava sendo desenvolvido quando escrevi isso; acabamos lançando nossas ferramentas praticamente ao mesmo tempo. A realidade é que o GhostPack agora tem muito mais funcionalidades. Estou removendo a função PrivescCheck porque o SharpUp cobre toda a sua funcionalidade e muito mais.
O ponto principal sobre isso é que tudo é implementado em .NET puro – então, sem powershell.
É configurado e controlado por parâmetros de linha de comando, tornando-o adequado para uso com a diretiva execute-assembly do Beacon.
Isso obtém várias informações do host. Fique avisado que pode haver MUITA saída. Será exibido:
O verbo 'basic' precisa ser passado na linha de comando, seguido pela verificação específica necessária. Se a palavra 'all' for passada como segundo parâmetro, todas as verificações serão executadas.
Observe que se 'all' for usado, um 'proxycheck http://www.google.com' é incluído automaticamente. Consulte a seção proxycheck para detalhes.
Executar todas as verificações básicas: beacon> execute-assembly /tmp/Reconerator.exe ou beacon> execute-assembly /tmp/Reconerator.exe basic all
Executar apenas a enumeração mru: beacon> execute-assembly /tmp/Reconerator.exe basic mru
Listar apenas as unidades mapeadas: beacon> execute-assembly /tmp/Reconerator.exe basic mappeddrives
Razoavelmente seguro. Isso está consultando o registro do sistema; é improvável que seja monitorado.
Isso permite realizar uma consulta LDAP. A maneira mais fácil de demonstrar isso é com um exemplo.
Isso mostrará todos os usuários no domínio 'dc=stufus,dc=lan' com W2K8DC como controlador de domínio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 0
Isso mostrará no máximo 5 usuários no domínio 'dc=stufus,dc=lan' com W2K8DC como controlador de domínio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "objectClass=user" 5
Isso mostrará todos os membros do grupo de administradores do domínio no domínio 'dc=stufus,dc=lan' com W2K8DC como controlador de domínio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2K8DC/dc=stufus,dc=lan" "(&(objectClass=group)(cn=Domain Admins))" 0
Isso mostrará todos os membros dos grupos de administradores do domínio ou administradores empresariais no domínio 'dc=stufus,dc=lan' com W2012DC como controlador de domínio:
beacon> execute-assembly /tmp/Reconerator.exe ldap "LDAP://W2012DC/dc=stufus,dc=lan" "(&(objectClass=group)(|(cn=Enterprise Admins)(cn=Domain Admins)))" 0
Isso gerará tráfego de rede para o controlador de domínio que você especificar. Para evitar dúvidas, usa LDAP (em vez de RPC ou similar).
Isso realiza uma consulta DNS usando o servidor DNS do host.
Resolver www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe resolvehost www.google.com
Isso gerará uma consulta DNS para o controlador de domínio, mas é improvável que algo levante isso como um alerta devido ao grande volume de solicitações DNS legítimas.
Isso permite interagir com o Windows Search (anteriormente Serviço de Indexação do Windows), que permitirá pesquisar rapidamente arquivos e pastas interessantes (e seus conteúdos). E-mails geralmente são indexados, mas pastas de rede não, então pode não ser perfeito para pesquisar diretórios pessoais dos usuários se estiverem armazenados remotamente. No entanto, é muito rápido.
A interface do Windows Search é semelhante a SQL; esta implementação permite que você, efetivamente, especifique o conteúdo da cláusula 'WHERE'. É mais fácil explicar com exemplos, mas você precisará ler o MSDN se quiser conhecer todos os critérios possíveis.
Encontrar tudo que foi indexado e que contenha a palavra 'password' em algum lugar (ou seja, pesquisa o conteúdo de arquivos e e-mails):
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "CONTAINS('password')"
Encontrar tudo que foi indexado e que tenha a palavra 'stufus' no caminho ou nome do arquivo em algum lugar:
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemPathDisplay LIKE '%stufus%'"
Encontrar tudo que foi indexado e que tenha a palavra 'stufus' no nome do arquivo OU contenha a palavra 'secret':
beacon> execute-assembly /tmp/Reconerator.exe indexsearch "System.ItemName LIKE '%stufus%' OR CONTAINS('secret')"
Não tenho conhecimento de nada que levantaria isso como suspeito.
Isso retorna o servidor proxy que seria usado para visitar uma determinada URL. Isso é para lidar com a situação onde podem haver proxies diferentes para URLs diferentes, ou várias exclusões complexas em vigor. A URL de interesse é passada como parâmetro.
Observe que se 'basic all' for especificado (veja acima), ele inclui automaticamente um proxycheck para http://www.google.com, na suposição de que a maioria das organizações tem um proxy de saída para todo acesso à internet não interno.
Exibir o servidor proxy que será usado ao visitar www.google.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck www.google.com
Exibir o servidor proxy que será usado ao visitar https://www.mwrinfosecurity.com:
beacon> execute-assembly /tmp/Reconerator.exe proxycheck https://www.mwrinfosecurity.com
Esta é uma atividade local e legítima; não tenho conhecimento de nada que levantaria isso como suspeito.
Isso explorará vários vetores de escalonamento de privilégio e relatará se são possíveis ou não. Atualmente, esse número é 1.
Assim como no módulo BÁSICO acima, privesccheck all pode ser especificado na linha de comando para tentar todas as verificações, ou uma verificação específica pode ser especificada se necessário.
O verbo 'basic' precisa ser passado na linha de comando, seguido pela verificação específica necessária. Se a palavra 'all' for passada como segundo parâmetro, todas as verificações serão executadas.
| Verificação | Descrição |
|---|---|
| alwaysinstallelevated | Determinar se a chave 'AlwaysInstallElevated' está definida como 1 ou não. Se estiver definida, isso executará qualquer arquivo MSI como administrador local. |
| Verificação | Notas |
|---|---|
| alwaysinstallelevated | Esta é uma consulta de registro local; é improvável que algo sinalize isso como malicioso. |
Tentar todas as verificações de escalonamento de privilégio:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck all
Verificar apenas se a chave de registro AlwaysInstallElevated está definida:
beacon> execute-assembly /tmp/Reconerator.exe privesccheck alwaysinstallelevated
Compile isso no Visual Studio 2019. Atualmente, ele tem como alvo .NET v4. Você pode alterar isso nas preferências de compilação, se desejar.
| Verificação | Descrição |
|---|
| env | Exibe todas as variáveis de ambiente. |
| info | Exibe o endereço IP do host e o identificador de versão do SO principal/secundário. |
| mru | Pesquisa várias listas de "usados mais recentemente". Atualmente, essas listas incluem o histórico da caixa Executar e o MRU de arquivos e caminhos do Office para todas as versões do Word, Excel, PowerPoint, Access, Publisher e Visio. Também exibe a localização da pasta "Recent" especial. |
| favourites | Exibe as URLs armazenadas na pasta de favoritos (que são basicamente os bookmarks do usuário). Atualmente não suporta subpastas; preciso corrigir isso. |
| mappeddrives | Exibe as unidades de rede mapeadas da sessão do usuário. Útil para encontrar rapidamente compartilhamentos de arquivos centrais e diretórios pessoais. Se está mapeado, provavelmente contém dados úteis. |
| installedapplications | Lista os aplicativos que foram instalados. Isso inclui aplicativos que foram instalados como administrador (na máquina local) E aplicativos que foram instalados pelo usuário atual. Eles estão listados em lugares diferentes no registro. |
| onedrive | Exibe informações sobre o OneDrive (incluindo sites/tenants do Teams que estão sincronizados). |