Escolar Documentos
Profissional Documentos
Cultura Documentos
www.cobaltstrike.com
Índice
Índice................................................. .................................................. .............................. 2
2
Machine Translated by Google
www.cobaltstrike.com
3
Machine Translated by Google
www.cobaltstrike.com
4
Machine Translated by Google
www.cobaltstrike.com
5
Machine Translated by Google
www.cobaltstrike.com
Um ataque direcionado bem planejado começa com o reconhecimento. O criador de perfil de sistema do Cobalt
Strike é um aplicativo da Web que mapeia a superfície de ataque do lado do cliente do seu alvo. As informações
obtidas no reconhecimento ajudarão você a entender quais opções têm a melhor chance de sucesso em seu alvo.
A armação está emparelhando uma carga útil pós-exploração com um documento ou exploração que a
executará no alvo. Cobalt Strike tem opções para transformar documentos comuns em artefatos armados. O
Cobalt Strike também tem opções para exportar sua carga útil pós-exploração, Beacon, em vários formatos
para emparelhar com artefatos fora desse conjunto de ferramentas.
Use a ferramenta de spear phishing do Cobalt Strike para entregar seu documento armado para uma ou mais
pessoas na rede do seu alvo. A ferramenta de phishing do Cobalt Strike transforma e-mails salvos em phishes
perfeitos em pixels.
Controle a rede do seu alvo com o Beacon do Cobalt Strike. Essa carga útil pós-exploração usa um padrão de
comunicação assíncrono “baixo e lento” que é comum com malware de ameaças avançadas. O Beacon telefonará
para casa por DNS, HTTP ou HTTPS. O Beacon percorre configurações comuns de proxy e chama vários hosts para
resistir ao bloqueio.
6
Machine Translated by Google
www.cobaltstrike.com
Exercite a atribuição de ataque do seu alvo e a capacidade de análise com a linguagem Maleable Command and Control
do Beacon. Reprograme o Beacon para usar indicadores de rede que se pareçam com malware conhecido ou se misturem
com o tráfego existente.
Pivote na rede comprometida, descubra hosts e mova-se lateralmente com a automação útil do Beacon e a comunicação ponto
a ponto sobre pipes nomeados e soquetes TCP. O Cobalt Strike é otimizado para capturar relacionamentos de confiança e permitir
movimento lateral com credenciais capturadas, hashes de senha, tokens de acesso e tíquetes Kerberos.
Demonstre o risco comercial significativo com as ferramentas de exploração do usuário da Cobalt Strike. Os fluxos de
trabalho do Cobalt Strike facilitam a implantação de registradores de pressionamento de tecla e ferramentas de captura de tela em
sistemas comprometidos. Use o navegador dinâmico para obter acesso a sites nos quais seu alvo comprometido está conectado
com o Internet Explorer. Essa técnica somente Cobalt Strike funciona com a maioria dos sites e ignora a autenticação de dois
fatores.
Os recursos de relatórios do Cobalt Strike reconstroem o engajamento do seu cliente. Forneça aos administradores de
rede um cronograma de atividades para que possam encontrar indicadores de ataque em seus sensores.
A Cobalt Strike gera relatórios de alta qualidade que você pode apresentar aos seus clientes como produtos independentes ou
usar como apêndices à sua narrativa escrita.
Ao longo de cada uma das etapas acima, você precisará entender o ambiente de destino, suas defesas e raciocinar sobre
a melhor maneira de atingir seus objetivos com o que está disponível para você.
Isso é evasão. Não é o objetivo da Cobalt Strike fornecer evasão pronta para uso. Em vez disso, o produto fornece
flexibilidade, tanto em suas configurações potenciais quanto em opções para executar ações de ofensa, para permitir que você
adapte o produto às suas circunstâncias e objetivos.
Requisitos de sistema
Cobalt Strike requer Oracle Java 1.8, Oracle Java 11 ou OpenJDK 11.
Se você tiver um produto antivírus em seu sistema, certifique-se de desativá-lo antes de instalar o Cobalt Strike.
7
Machine Translated by Google
www.cobaltstrike.com
Figura 2. O processo de atualização (boa tentativa, mas a chave da imagem não é mais válida)
Certifique-se de atualizar o software do servidor de equipe e do cliente com sua chave de licença. Cobalt Strike
é geralmente licenciado por usuário. O servidor de equipe não requer uma licença separada.
O servidor de equipe Cobalt Strike deve ser executado em um sistema Linux compatível. Para iniciar um
servidor de equipe Cobalt Strike, use o script teamserver incluído no pacote Cobalt Strike Linux.
O servidor de equipe tem dois parâmetros obrigatórios e dois parâmetros opcionais. O primeiro é o endereço
IP acessível externamente do servidor de equipe. Cobalt Strike usa esse valor como um host padrão para seus
recursos. A segunda é a senha que os membros da equipe usarão para conectar o cliente Cobalt Strike ao servidor
da equipe.
O terceiro parâmetro é opcional. Este parâmetro especifica um Perfil C2 Maleável. Os Capítulos 11 e 12 discutem
esse recurso.
O quarto parâmetro também é opcional. Este parâmetro especifica uma data de término no formato AAAA-MM-
DD. O servidor de equipe incorporará essa data de morte em cada estágio do Beacon que ele gerar. A carga
útil do Beacon se recusará a ser executada a partir dessa data. A carga útil do Beacon também será encerrada
se acordar nessa data ou após essa data.
8
Machine Translated by Google
www.cobaltstrike.com
Quando o servidor de equipe for iniciado, ele publicará o hash SHA256 do certificado SSL do servidor de equipe.
Distribua este hash para os membros da sua equipe. Quando os membros da sua equipe se conectarem, o cliente Cobalt
Strike perguntará se eles reconhecem esse hash antes de autenticar no servidor da equipe.
Esta é uma proteção importante contra ataques man-in-the-middle.
Você verá uma caixa de diálogo de conexão quando o cliente Cobalt Strike for iniciado.
Especifique o endereço do seu servidor de equipe no campo Host . A porta padrão para o servidor de equipe é 50050.
Raramente há um motivo para alterar isso. O campo Usuário é seu apelido no servidor de equipe. Altere isso para o seu
indicativo de chamada, identificador ou nome de fantasia de hacker inventado. A senha
campo é a senha compartilhada para o servidor de equipe.
Se esta for sua primeira conexão com este servidor de equipe, o Cobalt Strike perguntará se você reconhece o hash
SHA256 deste servidor de equipe. Se você fizer isso, pressione OK e o cliente Cobalt Strike se conectará ao servidor. O
Cobalt Strike também lembrará esse hash SHA256 para conexões futuras. Você pode gerenciar esses hashes através do
Cobalt Strike -> Preferences -> Fingerprints.
9
Machine Translated by Google
www.cobaltstrike.com
O Cobalt Strike acompanha os servidores da equipe aos quais você se conecta e lembra suas informações.
Selecione um desses perfis de servidor de equipe no lado esquerdo da caixa de diálogo de conexão para preencher a caixa
de diálogo de conexão com suas informações. Você também pode podar esta lista através do Cobalt Strike -> Preferences
-> Team Servers.
O cliente Cobalt Strike pode se conectar a vários servidores de equipe. Vá para Cobalt Strike -> New Connection para
iniciar uma nova conexão. Quando conectado a vários servidores, uma barra de comutação aparecerá na parte inferior da
janela do Cobalt Strike.
10
Machine Translated by Google
www.cobaltstrike.com
Essa barra de comutação permite alternar entre instâncias ativas do servidor Cobalt Strike. Cada servidor tem seu
próprio botão. Clique com o botão direito do mouse em um botão e selecione Renomear para que o texto do botão
reflita a função do servidor durante seu engajamento. Este nome de botão também identificará o servidor no Cobalt
Strike Activity Report.
Quando conectado a vários servidores, o Cobalt Strike agrega ouvintes de todos os servidores aos quais está
conectado. Essa agregação permite enviar um e-mail de phishing de um servidor que faz referência a um site malicioso
hospedado em outro servidor. No final do seu envolvimento, o recurso de relatórios do Cobalt Strike consultará todos
os servidores aos quais você está conectado e mesclará os dados para contar uma história.
Um script padrão dentro do Cobalt Strike define todos os menus pop-up do Cobalt Strike e formata as informações
exibidas nos consoles do Cobalt Strike. Por meio do mecanismo Aggressor Script, você pode substituir esses
padrões e personalizar o Cobalt Strike de acordo com suas preferências.
Você também pode usar o Aggressor Script para adicionar novos recursos ao Beacon do Cobalt Strike e
para automatizar certas tarefas.
Para saber mais sobre o Aggressor Script, consulte sua documentação em:
• https://www.cobaltstrike.com/aggressor-script/
11
Machine Translated by Google
www.cobaltstrike.com
2. Interface do usuário
A barra de ferramentas na parte superior do Cobalt Strike oferece acesso rápido às funções comuns do Cobalt Strike.
Conhecer os botões da barra de ferramentas acelerará consideravelmente o uso do Cobalt Strike.
12
Machine Translated by Google
www.cobaltstrike.com
Ver credenciais
Tabela de alvos
A Tabela de Destinos mostra os destinos no modelo de dados do Cobalt Strike. A tabela de destinos exibe o endereço IP de cada
destino, seu nome NetBIOS e uma nota que você ou um dos membros de sua equipe atribuiu ao destino. O ícone à esquerda de
um destino indica seu sistema operacional. Um ícone vermelho com relâmpagos indica que o alvo tem uma sessão Cobalt Strike
Beacon associada a ele.
13
Machine Translated by Google
www.cobaltstrike.com
Clique em qualquer um dos cabeçalhos da tabela para classificar os hosts. Realce uma linha e clique com o botão direito do mouse
para abrir um menu com opções para esse host. Pressione Ctrl e Alt e clique para selecionar e desmarcar hosts individuais.
A tabela do alvo é útil para o movimento lateral e para entender a rede do seu alvo.
Tabela de sessões
A tabela de sessões mostra quais Beacons estão chamando para esta instância Cobalt Strike. Beacon é a carga útil do Cobalt Strike
para emular agentes de ameaças avançados. Aqui, você verá o endereço IP externo de cada Beacon, o endereço IP interno, o listener
de saída para esse Beacon, quando o Beacon ligou pela última vez para casa e outras informações. Ao lado de cada linha há um
ícone que indica o sistema operacional do destino comprometido. Se o ícone estiver vermelho com relâmpagos, o Beacon está sendo
executado em um processo com privilégios de administrador. Um ícone desbotado indica que a sessão do Beacon foi solicitada a sair
e reconheceu este comando.
Se você usar um ouvinte DNS Beacon, esteja ciente de que o Cobalt Strike não saberá nada sobre um host até que ele faça o
check-in pela primeira vez. Se você vir uma entrada com um horário de última chamada e pronto, você precisará dar a esse Beacon
sua primeira tarefa para ver mais informações.
Clique com o botão direito do mouse em um ou mais Beacon's para ver suas opções de pós-exploração.
Gráfico dinâmico
Cobalt Strike tem a capacidade de ligar vários Beacons em uma cadeia. Esses Beacons vinculados recebem seus comandos e enviam
sua saída por meio do Beacon pai em sua cadeia. Esse tipo de encadeamento é útil para controlar quais sessões saem de uma rede
e para emular um ator disciplinado que restringe seus caminhos de comunicação dentro de uma rede a algo plausível. Esse
encadeamento de Beacons é um dos recursos mais poderosos do Cobalt Strike.
Os fluxos de trabalho do Cobalt Strike tornam esse encadeamento muito fácil. Não é incomum que os operadores do Cobalt Strike
encadeem Beacons com quatro ou cinco níveis de profundidade regularmente. Sem um auxílio visual é muito difícil acompanhar e
entender essas cadeias. É aqui que entra o gráfico dinâmico.
O Pivot Graph mostra suas cadeias de Beacon de maneira natural. Cada sessão do Beacon tem um ícone.
Assim como na tabela de sessões: o ícone de cada host indica seu sistema operacional. Se o ícone estiver vermelho com relâmpagos,
o Beacon está sendo executado em um processo com privilégios de administrador. Um mais escuro
ícone indica que a sessão Beacon foi solicitada a sair e reconheceu este comando.
14
Machine Translated by Google
www.cobaltstrike.com
O ícone do firewall representa o ponto de saída da carga útil do Beacon. Uma linha verde tracejada
indica o uso de conexões HTTP ou HTTPS de beacon para deixar a rede. Uma linha tracejada amarela
indica o uso do DNS para sair da rede.
Uma seta conectando uma sessão de Beacon a outra representa um link entre dois Beacons.
O Beacon do Cobalt Strike usa pipes nomeados do Windows e soquetes TCP para controlar Beacons dessa
maneira ponto a ponto. Uma seta laranja é um canal de tubulação nomeado. As sessões SSH também usam
uma seta laranja. Uma seta azul é um canal de soquete TCP. Um vermelho (pipe nomeado) ou roxo (TCP)
seta indica que um link Beacon está quebrado.
Clique em um Beacon para selecioná-lo. Você pode selecionar vários Beacons clicando e arrastando uma
caixa sobre os hosts desejados. Pressione Ctrl e Shift e clique para selecionar ou desmarcar um Beacon individual.
Clique com o botão direito do mouse em um Beacon para abrir um menu com as opções de pós-exploração disponíveis.
• Ctrl+Mais — zoom
• Ctrl+Menos — diminuir o zoom
• Ctrl+0 — redefinir o nível de zoom
• Ctrl+A — selecione todos os hosts
• Escape — limpar a seleção
• Ctrl+C — organiza hosts em círculo
• Ctrl+S — organiza hosts em uma pilha
15
Machine Translated by Google
www.cobaltstrike.com
Clique com o botão direito do mouse no gráfico dinâmico sem beacons selecionados para configurar o layout desse gráfico.
2.4 Abas
Cobalt Strike abre cada caixa de diálogo, console e tabela em uma guia. Clique no botão X para fechar uma guia.
Use Ctrl+D para fechar a guia ativa. Ctrl+Shift+D fechará todas as guias, exceto a ativa.
Você pode clicar com o botão direito do mouse no botão X para abrir uma guia em uma janela, fazer uma captura de tela de uma guia ou
fechar todas as guias com o mesmo nome.
Os atalhos de teclado também existem para essas funções. Use Ctrl+W para abrir a guia ativa em sua própria janela. Use
Ctrl+T para salvar rapidamente uma captura de tela da guia ativa.
Ctrl+B enviará a guia atual para a parte inferior da janela Cobalt Strike. Isso é útil para guias que você precisa assistir
constantemente. Ctrl+E irá desfazer esta ação e remover a guia na parte inferior da janela Cobalt Strike.
Segure shift e clique em X para fechar todas as guias com o mesmo nome. Segure shift + control e clique em X para abrir a guia
2.5 Consolas
Cobalt Strike fornece um console para interagir com sessões Beacon, scripts e bate-papo com seus
companheiros de equipe.
Os consoles rastreiam seu histórico de comandos. Use a seta para cima para percorrer os comandos digitados anteriormente. A
seta para baixo volta para o último comando que você digitou.
16
Machine Translated by Google
www.cobaltstrike.com
Use Ctrl+Plus para aumentar o tamanho da fonte do console, Ctrl+Menos para diminuir e Ctrl+0
para redefini-lo. Essa alteração é local apenas para o console atual. Visite Cobalt Strike -> Preferences para alterar
permanentemente a fonte.
Pressione Ctrl+F para mostrar um painel que permitirá pesquisar texto no console.
2.6 Tabelas
O Cobalt Strike usa tabelas para exibir sessões, credenciais, destinos e outras informações de engajamento.
A maioria das tabelas no Cobalt Strike tem a opção de atribuir um realce de cor às linhas realçadas.
Esses destaques são visíveis para outros clientes Cobalt Strike. Clique com o botão direito do mouse e procure a Cor
cardápio.
Pressione Ctrl+F em uma tabela para mostrar o painel de pesquisa de tabela. Esse recurso permite filtrar a tabela atual.
O campo de texto é onde você digita seus critérios de filtro. O formato dos critérios depende da coluna à qual você
escolhe aplicar o filtro. Use a notação CIDR (por exemplo, 192.168.1.0/24) e intervalos de host (192.168.1-192.169.200)
para filtrar colunas que contêm endereços. Use números ou intervalos de números para colunas que contêm números.
Use caracteres curinga (*, ?) para filtrar colunas que contêm strings.
O ! botão nega os critérios atuais. Pressione enter para aplicar os critérios especificados à tabela atual. Você pode
empilhar quantos critérios quiser. O botão Redefinir removerá os filtros aplicados à tabela atual.
17
Machine Translated by Google
www.cobaltstrike.com
3. Gerenciamento de dados
Se você deseja exportar os dados do Cobalt Strike, você pode fazê-lo através de Reporting -> Export Data.
Cobalt Strike oferece opções para exportar seus dados como arquivos TSV e XML. O recurso de exportação de dados
do cliente Cobalt Strike mesclará dados de todos os servidores de equipe aos quais você está conectado no momento.
3.2 Metas
Você pode interagir com as informações do alvo do Cobalt Strike através de View -> Targets. Esta guia exibe as mesmas
informações que a Visualização de Destinos.
Pressione Importar para importar um arquivo com informações de destino. Cobalt Strike aceita arquivos de texto simples com
um host por linha. Ele também aceita arquivos XML gerados pelo Nmap (a opção –oX).
Pressione Adicionar para adicionar novos alvos ao modelo de dados do Cobalt Strike.
Esta caixa de diálogo permite adicionar vários hosts ao banco de dados do Cobalt Strike. Especifique um intervalo de
endereços IP ou use a notação CIDR no campo Endereço para adicionar vários hosts ao mesmo tempo. Mantenha
pressionada a tecla shift ao clicar em Salvar para adicionar hosts ao modelo de dados e manter esta caixa de diálogo aberta.
Selecione um ou mais hosts e clique com o botão direito do mouse para abrir o menu de hosts. Este menu é onde você
altera a nota sobre os hosts, define suas informações de sistema operacional ou remove os hosts do modelo de dados.
18
Machine Translated by Google
www.cobaltstrike.com
3.3 Serviços
Em uma exibição de destino, clique com o botão direito do mouse em um host e selecione Serviços. Isso abrirá o
navegador de serviços do Cobalt Strike. Aqui você pode navegar pelos serviços, atribuir notas a diferentes serviços e
também remover entradas de serviço.
3.4 Credenciais
Vá para View -> Credentials para interagir com o modelo de credencial do Cobalt Strike. Pressione Adicionar para
adicionar uma entrada ao modelo de credencial. Novamente, você pode segurar shift e pressionar Salvar para manter a
caixa de diálogo aberta e facilitar a adição de novas credenciais ao modelo. Pressione Copiar para copiar as entradas
destacadas para a área de transferência. Use Exportar para exportar credenciais no formato PWDump.
3.5 Manutenção
O modelo de dados do Cobalt Strike mantém todos os seus metadados de estado e estado na pasta data/ . Esta pasta
existe na pasta da qual você executou o servidor de equipe Cobalt Strike.
Para limpar o modelo de dados do Cobalt Strike: pare o servidor de equipe, exclua a pasta data/ e seu conteúdo.
O Cobalt Strike recriará a pasta data/ quando você iniciar o servidor de equipe em seguida.
Se você quiser arquivar o modelo de dados, pare o servidor de equipe e use seu programa favorito para armazenar os
dados/ pasta e seus arquivos em outro lugar. Para restaurar o modelo de dados, pare o servidor de equipe e restaure o
conteúdo antigo na pasta data/ .
Relatório -> Redefinir dados redefine o modelo de dados do Cobalt Strike sem reiniciar o servidor de equipe.
19
Machine Translated by Google
www.cobaltstrike.com
Um listener é simultaneamente informações de configuração para uma carga útil e uma diretiva para Cobalt
Strike levantar um servidor para receber conexões dessa carga útil. Um ouvinte consiste em um nome definido
pelo usuário, o tipo de carga útil e várias opções específicas de carga útil.
Ao criar um ouvinte, certifique-se de dar a ele um nome memorável. Esse nome é como você se referirá a esse
ouvinte por meio dos comandos e fluxos de trabalho do Cobalt Strike.
20
Machine Translated by Google
www.cobaltstrike.com
Beacon é flexível e suporta comunicação assíncrona e interativa. A comunicação assíncrona é baixa e lenta.
O Beacon telefonará para casa, baixará suas tarefas e dormirá.
A comunicação interativa acontece em tempo real.
Os indicadores de rede do Beacon são maleáveis. Redefina a comunicação do Beacon com a linguagem
C2 maleável do Cobalt Strike. Isso permite ocultar a atividade do Beacon para se parecer com outro
malware ou se misturar como tráfego legítimo. O Capítulo 11 discute esse recurso.
O processo de encenação é necessário em algumas ações de ofensa. Muitos ataques têm limites rígidos sobre a
quantidade de dados que podem carregar na memória e executar após a exploração bem-sucedida. Isso limita
bastante suas opções de pós-exploração, a menos que você entregue sua carga de pós-exploração em etapas.
Cobalt Strike usa encenação em seus ataques dirigidos ao usuário. Estes são a maioria dos itens em
Ataques -> Pacotes e Ataques -> Web Drive-by. Os estágios usados nesses locais dependem da carga útil
emparelhada com o ataque. Por exemplo, o HTTP Beacon tem um stager HTTP. O DNS Beacon possui um estágio
de registro DNS TXT. Nem todas as cargas úteis têm opções de estágio. Cargas sem estágio não podem ser
entregues com essas opções de ataque.
Se você não precisar de teste de carga útil, poderá desativá-lo. Defina a opção host_stage em seu
perfil Malleable C2 como false. Isso impedirá que o Cobalt Strike hospede estágios de carga útil em seus
servidores web e DNS. Há um grande benefício OPSEC em fazer isso. Com o staging ativado, qualquer pessoa
pode se conectar ao seu servidor, solicitar uma carga útil e analisar seu conteúdo para encontrar informações de
sua configuração de carga útil.
No Cobalt Strike 4.0 e posterior, as ações de pós-exploração e movimento lateral evitam os estágios e optam por
fornecer uma carga útil completa sempre que possível. Se você desabilitar o teste de carga útil, não deverá notá-
lo quando estiver pronto para fazer a pós-exploração.
As tarefas de download dos beacons HTTP e HTTPS com uma solicitação HTTP GET. Esses beacons enviam
dados de volta com uma solicitação HTTP POST. Este é o padrão. Você tem um controle incrível sobre o
comportamento e os indicadores nesta carga através do Maleable C2.
Para levantar um ouvinte HTTP ou HTTPS Beacon, vá para Cobalt Strike -> Listeners. Pressione Adicionar.
Escolha Beacon HTTP como sua opção de carga útil.
21
Machine Translated by Google
www.cobaltstrike.com
Pressione [+] para adicionar um ou mais hosts para o HTTP Beacon chamar de home. Pressione [-] para remover um
ou mais hosts. Pressione [X] para limpar os hosts atuais. Se você tiver vários hosts, ainda poderá colar uma lista
separada por vírgulas de hosts de retorno de chamada nesta caixa de diálogo. Isso está ok. J
O campo HTTP Host (Stager) controla o host do HTTP Stager para o HTTP Beacon. Esse valor é usado apenas se
você emparelhar essa carga com um ataque que requer um stager explícito.
O campo Perfil é onde você seleciona uma variante de perfil Maleável C2. Uma variante é uma forma de
especificando várias variações de perfil em um arquivo. Com variantes, cada ouvinte HTTP ou HTTPS configurado
pode ter diferentes indicadores de rede.
O campo Porta HTTP (C2) define a porta para a qual seu HTTP Beacon ligará para casa. O campo HTTP Port
(Bind) especifica a porta à qual seu servidor web de carga útil HTTP Beacon será vinculado. Essas opções são úteis
se você deseja configurar redirecionadores de dobra de porta (por exemplo, um redirecionador que aceita conexões
na porta 80 ou 443, mas roteia a conexão para seu servidor de equipe em outra porta).
O valor HTTP Host Header , se especificado, é propagado para seus stagers HTTP e por meio de sua comunicação
HTTP. Esta opção facilita o aproveitamento do fronting de domínio
com Cobalt Strike.
Pressione … ao lado do campo HTTP Proxy para especificar uma configuração de proxy explícita para esta
carga.
22
Machine Translated by Google
www.cobaltstrike.com
O campo Tipo configura o tipo de proxy. Os campos Host e Port informam ao Beacon onde reside o proxy. Os campos Nome
de usuário e Senha são opcionais. Esses campos especificam as credenciais que o Beacon usa para autenticar no proxy.
Verifique as configurações de proxy Ignorar; use a caixa de conexão direta para forçar o Beacon a tentar suas solicitações HTTP
e HTTPS sem passar por um proxy.
Pressione Set para atualizar a caixa de diálogo Beacon com as configurações de proxy desejadas. Pressione Redefinir para
definir a configuração do proxy de volta ao comportamento padrão.
Nota: a configuração manual do proxy afeta apenas os estágios de carga útil HTTP e HTTPS Beacon.
Ele não se propaga para os estágios de carga útil.
Redirecionadores
Um redirecionador é um sistema que fica entre a rede do seu alvo e o seu servidor de equipe. Quaisquer conexões que
chegam ao redirecionador são encaminhadas ao seu servidor de equipe para serem processadas. Um redirecionador é
uma maneira de fornecer vários hosts para suas cargas úteis do Beacon chamarem de casa. Um redirecionador também
ajuda na segurança operacional, pois dificulta o rastreamento da verdadeira localização do seu
servidor da equipe.
Os recursos de gerenciamento de ouvintes do Cobalt Strike suportam o uso de redirecionadores. Basta especificar seus hosts
redirecionadores ao configurar um listener HTTP ou HTTPS Beacon. Cobalt Strike não valida esta informação. Se o host que você
fornece não é afiliado ao host atual, o Cobalt Strike assume que é um redirecionador. Uma maneira simples de transformar um
servidor em um redirecionador é usar socat.
23
Machine Translated by Google
www.cobaltstrike.com
Aqui está a sintaxe socat para encaminhar todas as conexões na porta 80 para o servidor de equipe
em 192.168.12.100 na porta 80:
No Cobalt Strike 4.0 e posterior, o DNS Beacon é uma carga útil somente DNS. Não há modo de comunicação
HTTP nesta carga. Esta é uma mudança em relação às versões anteriores do produto.
Canais de dados
Hoje, o DNS Beacon pode baixar tarefas em registros DNS TXT, registros DNS AAAA ou registros DNS A. Essa
carga útil tem a flexibilidade de alternar entre esses canais de dados enquanto está no destino. Use o comando mode
do Beacon para alterar o canal de dados do Beacon atual. modo dns
é o canal de dados de registro DNS A. o modo dns6 é o canal de registro DNS AAAA. E o modo dns-txt é o canal
de dados do registro DNS TXT. O padrão é o canal de dados do registro TXT do DNS.
Esteja ciente de que o DNS Beacon não faz check-in até que haja uma tarefa disponível. Use o check -in
comando para solicitar que o DNS Beacon faça check-in na próxima vez que ligar para casa.
24
Machine Translated by Google
www.cobaltstrike.com
Configuração do Ouvinte
Para criar um listener DNS Beacon: vá para Cobalt Strike -> Listeners, pressione Add e selecione Beacon
DNS como o tipo de carga útil.
Pressione [+] para adicionar um ou mais domínios para o beacon. Seu sistema de servidor de equipe Cobalt Strike
deve ser autoritário para os domínios que você especificar. Crie um registro DNS A e aponte-o para o servidor da
equipe Cobalt Strike. Use os registros DNS NS para delegar vários domínios ou subdomínios ao registro A do seu
servidor de equipe Cobalt Strike.
O campo DNS Host (Stager) configura o stager de registro TXT do DNS Beacon. Este stager é usado apenas
com recursos Cobalt Strike que exigem um stager explícito. Seu sistema de servidor de equipe Cobalt Strike
também deve ser autoritário para este domínio.
Para testar sua configuração de DNS, abra um terminal e digite nslookup jibberish.beacon domain.
Se você obtiver uma resposta de registro A de 0.0.0.0, seu DNS está configurado corretamente. Se você não
receber uma resposta, sua configuração de DNS não está correta e o DNS Beacon não se comunicará com você.
Certifique-se de que seus registros DNS façam referência ao endereço principal em sua interface de rede. O
servidor DNS da Cobalt Strike sempre enviará respostas do endereço primário da sua interface de rede.
Os resolvedores de DNS tendem a descartar respostas quando solicitam informações de um servidor, mas recebem
uma resposta de outro.
25
Machine Translated by Google
www.cobaltstrike.com
Se você estiver atrás de um dispositivo NAT, certifique-se de usar seu endereço IP público para o registro NS e configure
seu firewall para encaminhar tráfego UDP na porta 53 para seu sistema. Cobalt Strike inclui um servidor DNS para controlar
o Beacon.
Para configurar uma carga útil SMB Beacon, vá para Cobalt Strike -> Listeners. Pressione Adicionar. Escolha Beacon
SMB como sua opção de carga útil.
A única opção associada ao SMB Beacon é o nome do canal. Você pode definir um nome de canal explícito ou
aceitar a opção padrão.
O SMB Beacon é compatível com a maioria das ações no Cobalt Strike que geram uma carga útil. A exceção a isso são
os ataques dirigidos pelo usuário (por exemplo, Ataques -> Pacotes, Ataques -> Web Drive by) que exigem estágios
explícitos.
As ações de pós-exploração e movimento lateral do Cobalt Strike que geram uma carga útil tentarão assumir o controle
de (link) para a carga útil SMB Beacon para você. Se você executar o SMB Beacon manualmente, precisará vinculá-lo a
partir de um Beacon pai.
Vinculando e Desvinculando
No console do Beacon, use o link [host] [pipe] para vincular o Beacon atual a um Beacon SMB que está aguardando
uma conexão. Quando o Beacon atual fizer check-in, seus pares vinculados também farão check-in.
Para se misturar com o tráfego normal, os Beacons vinculados usam pipes nomeados do Windows para se comunicar. Este
tráfego é encapsulado no protocolo SMB. Existem algumas ressalvas para essa abordagem:
26
Machine Translated by Google
www.cobaltstrike.com
Se você receber um erro 5 (acesso negado) depois de tentar vincular a um Beacon: roube o token de um usuário
de domínio ou use make_token DOMAIN\user password para preencher seu token atual com credenciais válidas
para o destino. Tente se conectar ao Beacon novamente.
Para destruir um link Beacon use unlink [endereço IP] [session PID] no pai ou filho. O argumento [session
PID] é o ID do processo do Beacon a ser desvinculado. Esse valor é como você especifica um Beacon específico
para desvincular quando houver vários Beacons filhos.
Quando você desvincula um SMB Beacon, ele não sai nem desaparece. Em vez disso, ele entra em um
estado em que espera uma conexão de outro Beacon. Você pode usar o comando link para retomar o controle do
SMB Beacon de outro Beacon no futuro.
Para configurar uma carga útil TCP Beacon, vá para Cobalt Strike -> Listeners. Pressione Adicionar.
Escolha Beacon TCP como sua opção de carga útil.
O TCP Beacon configurado dessa maneira é uma carga útil de ligação. Uma carga útil de ligação é aquela que
aguarda uma conexão de seu controlador (neste caso, outra sessão de Beacon). A opção Port (C2) controla a
porta em que o TCP Beacon aguardará as conexões. Marque Bind to localhost apenas para que o TCP Beacon se
ligue a 127.0.0.1 quando escutar uma conexão. Essa é uma boa opção se você usar o TCP Beacon para ações
somente de host local.
O TCP Beacon é compatível com a maioria das ações no Cobalt Strike que geram uma carga útil. A exceção
a isso são, semelhantes ao SMB Beacon, os ataques dirigidos pelo usuário (por exemplo, Ataques ->
Pacotes, Ataques -> Web Drive-by) que requerem stagers explícitos.
As ações de pós-exploração e movimento lateral do Cobalt Strike que geram uma carga útil tentarão assumir o
controle de (conectar) à carga útil do TCP Beacon para você. Se você executar o TCP Beacon manualmente,
precisará se conectar a ele a partir de um Beacon pai.
27
Machine Translated by Google
www.cobaltstrike.com
Conectando e desvinculando
No console do Beacon, use connect [endereço IP] [porta] para conectar a sessão atual a um TCP
Beacon que está aguardando uma conexão. Quando a sessão atual fizer check-in, seus pares vinculados
também farão check-in.
Para destruir um link Beacon, use unlink [endereço IP] [session PID] no console de sessão pai ou filho.
Mais tarde, você pode se reconectar ao TCP Beacon do mesmo host (ou de um host diferente).
4.9 C2 Externo
C2 externo é uma especificação para permitir que programas de terceiros atuem como uma camada de
comunicação para a carga útil do Beacon do Cobalt Strike. Esses programas de terceiros se conectam ao
Cobalt Strike para ler quadros destinados e gravar quadros com saída de cargas controladas dessa maneira.
O servidor C2 externo é o que esses programas de terceiros usam para interagir com o seu Cobalt Strike
servidor da equipe.
Vá para Cobalt Strike -> Listeners, pressione Add e escolha External C2 como sua carga útil.
A interface C2 Externa tem duas opções. Port (Bind) especifica a porta em que o servidor C2 externo
aguarda conexões. Marque Bind to localhost only para tornar o servidor C2 externo somente localhost.
Os ouvintes C2 externos não são como outros ouvintes Cobalt Strike. Você não pode alvejá-los com as
ações pós-exploração do Cobalt Strike. Esta opção é apenas uma conveniência para levantar a própria
interface.
https://www.cobaltstrike.com/help-externalc2
28
Machine Translated by Google
www.cobaltstrike.com
Algumas fases de engajamento exigem várias opções de redirecionador e canal de comunicação. Cobalt Strike 4.0
é amigável para isso.
Você pode vincular vários ouvintes HTTP, HTTPS e DNS a um único servidor de equipe Cobalt Strike.
Essas cargas também oferecem suporte à dobra de porta em sua configuração. Isso permite que você use
a porta comum para seu canal (80, 443 ou 53) nas configurações do redirecionador e C2, mas vincule esses
ouvintes a portas diferentes para evitar conflitos de porta em seu sistema de servidor de equipe.
29
Machine Translated by Google
www.cobaltstrike.com
Para dar variedade aos seus indicadores de rede, os perfis Maleable C2 da Cobalt Strike podem conter várias variantes.
Uma variante é uma maneira de adicionar variações do perfil atual em um arquivo de perfil. Você pode especificar uma
variante de Perfil ao definir cada ouvinte HTTP ou HTTPS Beacon.
Além disso, você pode definir vários TCP e SMB Beacons em um servidor de equipe, cada um com diferentes configurações
de pipe e porta. Qualquer Beacon de saída, do mesmo servidor de equipe, pode controlar qualquer uma dessas cargas de
TCP ou SMB Beacon assim que forem implantados no ambiente de destino.
Quando você configura a carga útil do Beacon pela primeira vez, o Cobalt Strike gera um par de chaves
pública/privada exclusivo para o seu servidor de equipe. A chave pública do servidor de equipe é incorporada ao
estágio de carga útil do Beacon. O Beacon usa a chave pública do servidor de equipe para criptografar os metadados
da sessão que ele envia ao servidor de equipe.
O Beacon deve sempre enviar metadados de sessão antes que o servidor de equipe possa emitir tarefas e receber saída
da sessão do Beacon. Esses metadados contêm uma chave de sessão aleatória gerada por esse Beacon. O servidor de
equipe usa a chave de sessão de cada Beacon para criptografar tarefas e descriptografar a saída.
Cada implementação de Beacon e canal de dados usa esse mesmo esquema. Você tem a mesma segurança com
o canal de dados de registro A no HTTP Híbrido e o Sinalizador DNS que você tem com o Sinalizador HTTPS.
Esteja ciente de que o acima se aplica ao Beacon assim que for encenado. Os estágios de carga útil, devido ao seu
tamanho, não possuem recursos de segurança integrados.
30
Machine Translated by Google
www.cobaltstrike.com
Para iniciar o criador de perfil do sistema, vá para Ataques -> Web Drive-by -> Criador de perfil do sistema .
Para iniciar o criador de perfil, você deve especificar um URI para vincular e uma porta para iniciar o servidor web Cobalt Strike.
Se você especificar um URL de redirecionamento, o Cobalt Strike redirecionará os visitantes para esse URL assim que seu perfil
for obtido. Clique em Iniciar para iniciar o criador de perfil do sistema.
O System Profiler usa um Java Applet não assinado para revelar o endereço IP interno do destino e determinar qual versão do
Java o destino possui. Com o recurso de segurança clique para executar do Java, isso pode levantar suspeitas. Desmarque a
caixa Use Java Applet to get information para remover o Java Applet do System Profiler.
Marque a caixa Ativar SSL para servir o System Profiler sobre SSL. Esta caixa está desativada, a menos que você especifique
um certificado SSL válido com Malleable C2. O Capítulo 11 discute isso.
Para visualizar os resultados do criador de perfil do sistema, vá para Visualizar -> Aplicativos. O Cobalt Strike listará todos os
aplicativos descobertos durante o processo de criação de perfil do sistema.
Para gerenciar os serviços web do Cobalt Strike, vá para View -> Web Drive-by -> Manage. Aqui, você pode copiar qualquer
URL do Cobalt Strike para a área de transferência ou interromper um serviço web do Cobalt Strike.
Use View -> Web Log para monitorar as visitas aos seus serviços web Cobalt Strike.
Se o servidor web da Cobalt Strike vir uma solicitação do navegador Lynx, Wget ou Curl; Cobalt Strike retornará automaticamente
uma página 404. Cobalt Strike faz isso como proteção leve contra a espionagem da equipe azul.
31
Machine Translated by Google
www.cobaltstrike.com
Aplicativo HTML
Um aplicativo HTML é um programa do Windows escrito em HTML e uma linguagem de script com suporte
do Internet Explorer. Este pacote gera um aplicativo HTML que executa uma carga útil Cobalt Strike. Você pode
escolher a opção Executável para obter um aplicativo HTML que descarta um executável no disco e o executa.
Escolha a opção PowerShell para obter um aplicativo HTML que usa o PowerShell para executar uma carga útil.
Use a opção VBA para gerar silenciosamente uma instância do Microsoft Excel e executar uma macro maliciosa que
injeta uma carga útil na memória.
Macro do MS Office
Este pacote gera uma macro do Microsoft Office e apresenta instruções para incorporar a macro no Microsoft Word
ou no Microsoft Excel.
Executável do Windows
Este pacote gera um artefato executável do Windows que entrega um estágio de carga útil. Este pacote
oferece várias opções de saída.
O Windows Service EXE é um executável do Windows que responde aos comandos do Service Control
Manager. Você pode usar este executável para criar um serviço do Windows com sc ou como um executável
personalizado com os módulos PsExec do Metasploit Framework.
A DLL do Windows (64 bits) é uma DLL do Windows x64. Essa DLL gerará um processo de 32 bits e migrará
seu ouvinte para ele. Ambas as opções de DLL exportam uma função Iniciar compatível com rundll32.exe. Use
rundll32.exe para carregar sua DLL a partir da linha de comando.
rundll32 foo.dll,Iniciar
Marque a caixa Use x64 payload para gerar artefatos x64 que emparelham com um stager x64.
Marque a caixa Assinar arquivo executável para assinar um artefato EXE ou DLL com um certificado de
assinatura de código. Você deve especificar um certificado em um perfil Maleable C2.
Por padrão, essa caixa de diálogo exporta estágios de carga útil x86. Marque a caixa Use x64 payload para gerar
um estágio x64 com um artefato x64.
32
Machine Translated by Google
www.cobaltstrike.com
Marque a caixa Assinar arquivo executável para assinar um artefato EXE ou DLL com um certificado de
assinatura de código.
O servidor web do Cobalt Strike pode hospedar seus pacotes orientados pelo usuário para você. Vá para Attacks -> Web
Drive-by -> Host File para configurar isso. Escolha o arquivo para hospedar, selecione uma URL arbitrária e escolha o tipo
mime para o arquivo.
Por si só, a capacidade de hospedar um arquivo não é muito impressionante. No entanto, em um momento, você aprenderá
como incorporar URLs do Cobalt Strike em um e-mail de spear phishing. Quando você faz isso, o Cobalt Strike pode cruzar
os visitantes do seu arquivo com os e-mails enviados e incluir essas informações no relatório de engenharia social.
O Cobalt Strike disponibiliza várias ferramentas para configurar ataques drive-by da Web disponíveis para você. Para iniciar
um ataque rapidamente, vá para Ataques -> Web Drive-by e escolha uma opção:
Este ataque inicia um servidor web que hospeda um applet Java autoassinado. Os visitantes são solicitados a dar
permissão ao applet para ser executado. Quando um visitante concede essa permissão, você obtém acesso ao sistema dele.
O Java Signed Applet Attack usa o injetor Java do Cobalt Strike. No Windows, o injetor Java injetará o shellcode de um
ouvinte do Windows diretamente na memória para você.
Para obter o máximo de quilometragem deste ataque, você vai querer baixar o Applet Kit do arsenal Cobalt Strike e
assiná-lo com um certificado de assinatura de código.
O applet analisa seu ambiente e decide qual exploração Java usar. Se a versão do Java for vulnerável, o applet desabilitará
o sandbox de segurança e executará uma carga útil usando o injetor Java do Cobalt Strike.
A opção bitsadmin hospeda um executável e usa bitsadmin para baixá-lo. O método bitsadmin executa o executável
via cmd.exe. A opção powershell hospeda um script do PowerShell e usa powershell.exe para baixar o script e avaliá-lo.
A opção python hospeda um script Python e usa python.exe para baixar o script e executá-lo. Cada uma dessas opções
é uma maneira diferente de executar um ouvinte Cobalt Strike.
33
Machine Translated by Google
www.cobaltstrike.com
Você pode usar um exploit do Metasploit Framework para entregar um Cobalt Strike Beacon. O Beacon do Cobalt
Strike é compatível com o protocolo de teste do Metasploit Framework. Para entregar um Beacon com um exploit do
Metasploit Framework:
• Use windows/ meterpreter/ reverse_http[s] como seu PAYLOAD e defina LHOST e LPORT para apontar
para seu ouvinte CobaltStrikelister. Você não está realmente entregando o Meterpreter aqui, você está
dizendo ao Metasploit Framework para gerar o HTTP[s]
stager que baixa uma carga útil do LHOST/LPORT especificado.
• Defina DisablePayloadHandler como True. Isso informará ao Metasploit Framework para evitar ficar em cima
de um manipulador dentro do Metaploit Framework para atender sua conexão de carga útil.
• Defina PrependMigrate como True. Esta opção informa ao Metasploit Framework para anexar o código shell
que executa o estágio de carga útil em outro processo.
Aqui está uma captura de tela do msfconsole usada para suportar um Flash Exploit para entregar o Cobalt Strike
HTTP Beacon hospedado em 192.168.1.5 na porta 80:
Antes de enviar um exploit para um alvo, é útil prepará-lo. A ferramenta de clonagem de sites da Cobalt Strike pode
ajudar com isso. A ferramenta de clonagem de sites faz uma cópia local de um site com algum código adicionado para
corrigir links e imagens para que funcionem conforme o esperado.
Para clonar um site, vá para Ataques -> Web Drive-by -> Clonar Site.
34
Machine Translated by Google
www.cobaltstrike.com
É possível incorporar um ataque em um site clonado. Escreva o URL do seu ataque no campo Incorporar e o Cobalt
Strike irá adicioná-lo ao site clonado com um IFRAME. Clique no botão ... para selecionar uma das explorações do
lado do cliente em execução.
Sites clonados também podem capturar pressionamentos de tecla. Marque a caixa Registrar pressionamentos de tecla
no site clonado . Isso inserirá um keylogger JavaScript no site clonado.
Para ver os pressionamentos de tecla registrados ou ver os visitantes do seu site clonado, vá para Exibir -> Log da Web.
Alvos
Agora que você entende os ataques do lado do cliente, vamos falar sobre como levar o ataque ao usuário. A maneira
mais comum de entrar na rede de uma organização é por meio de spear phishing.
Antes de enviar uma mensagem de phishing, você deve montar uma lista de alvos. Cobalt Strike espera alvos em um
arquivo de texto. Cada linha do arquivo contém um destino. O destino pode ser um endereço de e-mail.
Você também pode usar um endereço de e-mail, uma guia e um nome. Se fornecido, um nome ajuda o Cobalt Strike a
personalizar cada phishing.
Modelos
Em seguida, você precisa de um modelo de phishing. O bom dos modelos é que você pode reutilizá-los entre os
compromissos. Cobalt Strike usa mensagens de e-mail salvas como seus modelos. O Cobalt Strike removerá anexos,
lidará com problemas de codificação e reescreverá cada modelo para cada ataque de phishing.
Se você quiser criar um modelo personalizado, escreva uma mensagem e envie para você mesmo. A maioria dos clientes
de e-mail tem uma maneira de obter a fonte original da mensagem. No Gmail, clique na seta para baixo ao lado de
Responder e selecione Mostrar original. Salve esta mensagem em um arquivo e parabenize-se—
você criou seu primeiro modelo de phishing Cobalt Strike.
35
Machine Translated by Google
www.cobaltstrike.com
Você pode personalizar seu modelo com os tokens do Cobalt Strike. Cobalt Strike substitui os seguintes tokens em seus
modelos:
Símbolo Descrição
%Para% O endereço de e-mail da pessoa para a qual a mensagem é enviada
%Nomear% O nome da pessoa para quem a mensagem é enviada.
%URL% O conteúdo do campo Incorporar URL na caixa de diálogo de spear phishing.
Enviando mensagens
Agora que você tem seus alvos e um modelo, está pronto para usar o phishing. Para iniciar a ferramenta de spear
phishing, vá para Attacks -> Spear Phish.
Para enviar uma mensagem de phishing, você deve primeiro importar seus alvos. Clique na pasta ao lado do
campo Destinos para importar seu arquivo de destino.
Em seguida, escolha seu arquivo de modelo. Clique na pasta ao lado do campo Modelo para escolher um.
Agora, você tem a opção de anexar um arquivo, se desejar. Este é um ótimo momento para usar um dos pacotes
de engenharia social discutidos anteriormente. O Cobalt Strike adicionará seu anexo à mensagem de phishing de
saída.
Você também pode pedir à Cobalt Strike para reescrever todos os URLs no modelo com um URL de sua
escolha. Cole a URL ou pressione ... para escolher uma das ferramentas hospedadas pelo Cobalt Strike. As ferramentas
do Cobalt Strike incluem sites clonados, o servidor de exploração automática e o criador de perfil do sistema.
Quando você incorpora um URL, o Cobalt Strike anexará ?id=%TOKEN% a ele. Cada mensagem enviada receberá seu
próprio token. O Cobalt Strike usa esse token para mapear os visitantes do site para e-mails enviados. Se você se
preocupa com relatórios, certifique-se de manter esse valor em vigor.
36
Machine Translated by Google
www.cobaltstrike.com
Defina o Mail Server para uma retransmissão aberta ou o registro de troca de e-mail para seu destino. Se necessário, você
também pode se autenticar em um servidor de e-mail para enviar suas mensagens de phishing.
Pressione … ao lado do campo Mail Server para configurar opções de servidor adicionais. Você pode especificar um nome de
usuário e senha para autenticar. A opção Random Delay diz ao Cobalt Strike para atrasar aleatoriamente cada mensagem por
um tempo aleatório, até o número de segundos que você especificar. Se esta opção não estiver definida, Cobalt Strike não
atrasará suas mensagens.
Defina Bounce To para um endereço de e-mail para onde as mensagens devolvidas devem ir. Esse valor não afetará a mensagem
que seus alvos veem. Pressione Visualizar para ver uma mensagem montada para um de seus destinatários. Se a visualização
estiver boa, pressione Enviar para entregar seu ataque.
37
Machine Translated by Google
www.cobaltstrike.com
Os artefatos padrão do Cobalt Strike provavelmente são capturados pela maioria das soluções de segurança de endpoint.
A evasão não é um objetivo do produto Cobalt Strike padrão. O Cobalt Strike oferece flexibilidade.
Você, o operador, pode alterar os executáveis, DLLs, applets e modelos de script que o Cobalt Strike usa em seus
fluxos de trabalho. Você também pode exportar a carga útil Beacon do Cobalt Strike em uma variedade de formatos
que funcionam com ferramentas de terceiros projetadas para ajudar na evasão.
Este capítulo destacará os recursos do Cobalt Strike que fornecem essa flexibilidade.
Para anular essa detecção, é comum que um invasor ofusque o shellcode de alguma forma e o coloque no binário.
Esse processo de ofuscação anula os produtos antivírus que usam uma pesquisa de string simples para identificar
códigos maliciosos.
Muitos produtos antivírus vão um passo além. Esses produtos antivírus simulam a execução de um executável
em um sandbox virtual. A cada etapa de execução emulada, o produto antivírus verifica se há problemas
conhecidos no espaço do processo emulado. Se um defeito conhecido aparecer, o produto antivírus sinalizará o
executável ou a DLL como mal-intencionado. Essa técnica derrota muitos codificadores e empacotadores que
tentam ocultar problemas conhecidos de produtos antivírus baseados em assinatura.
O contador de Cobalt Strike para isso é simples. A sandbox antivírus tem limitações. Não é uma máquina
virtual completa. Existem comportamentos do sistema que o sandbox antivírus não emula.
O Artifact Kit é uma coleção de modelos executáveis e DLL que dependem de algum comportamento que os
produtos antivírus não emulam para recuperar o shellcode localizado dentro do binário.
Uma das técnicas [veja: src-common/bypass-pipe.c no Artifact Kit] gera executáveis e DLLs que servem shellcode
para eles mesmos através de um pipe nomeado. Se um sandbox antivírus não emular pipes nomeados, ele não
encontrará o shellcode inválido conhecido.
38
Machine Translated by Google
www.cobaltstrike.com
Mesmo que não é suficiente embora. Alguns produtos antivírus têm como lar os servidores do fornecedor do
antivírus. Lá, o fornecedor determina se o executável ou DLL é conhecido como bom ou desconhecido, nunca
antes visto, executável ou DLL. Alguns desses produtos enviam automaticamente executáveis e DLLs
desconhecidos ao fornecedor para análise posterior e avisam os usuários. Outros tratam executáveis e DLLs
desconhecidos como maliciosos. Depende do produto e suas configurações.
O ponto: nenhuma quantidade de “ofuscação” vai ajudá-lo nessa situação. Você está enfrentando um tipo diferente
de defesa e precisará contorná-lo de acordo. Trate essas situações da mesma forma que você trataria a lista de
permissões de aplicativos. Tente encontrar um bom programa conhecido (por exemplo, powershell) que coloque
seu estágio de carga útil na memória.
https://www.cobaltstrike.com/scripts
A Strategic Cyber LLC distribui o Kit de Artefatos como um arquivo .tgz. Use o comando tar para extraí-lo.
O Artifact Kit inclui um script build.sh. Execute este script no Kali Linux, sem argumentos, para construir as técnicas
padrão do Artifact Kit com o Minimal GNU for Windows Cross Compiler.
O script de construção do Artifact Kit cria uma pasta com artefatos de modelo para cada técnica do Artifact
Kit. Para usar uma técnica com Cobalt Strike, vá para Cobalt Strike -> Script Manager e carregue o script
artifact.cna da pasta dessa técnica.
Você é encorajado a modificar o Kit de Artefatos e suas técnicas para que ele atenda às suas necessidades.
Embora programadores C habilidosos possam fazer mais com o Kit de Artefatos, é bastante viável para um
39
Machine Translated by Google
www.cobaltstrike.com
aventureiro não-programador para trabalhar com o Artifact Kit também. Por exemplo, um grande produto
antivírus gosta de escrever assinaturas para os executáveis no teste do Cobalt Strike cada vez que há um
lançamento. Até o Cobalt Strike 2.5, as versões de teste e licenciadas do Cobalt Strike usavam a técnica de
pipe nomeado em seus executáveis e DLLs. Esse fornecedor escreveria uma assinatura para a string de
pipe nomeada que o executável usou. Derrotar suas assinaturas, lançamento após lançamento, era tão
simples quanto mudar o nome do pipe no código-fonte da técnica do pipe.
Veil é uma estrutura popular para gerar executáveis que passam por alguns produtos antivírus. Você pode
usar o Veil para gerar executáveis para as cargas úteis do Cobalt Strike. Vá para Ataques -> Pacotes -
> Gerador de carga útil. Escolha o ouvinte para o qual deseja gerar um executável. Selecione Véu como o
tipo de saída. Pressione Gerar e salve o arquivo.
Inicie o Veil Evasion Framework e escolha a técnica que deseja usar. Veil eventualmente perguntará
sobre shellcode. Selecione a opção do Veil para fornecer shellcode personalizado. Cole o conteúdo do
arquivo que o gerador de carga útil do Cobalt Strike criou. Pressione enter e você terá um novo executável
feito pelo Veil.
A Strategic Cyber LLC distribui o código-fonte para os Applet Attacks da Cobalt Strike como o Applet Kit. Isso
também está disponível no arsenal Cobalt Strike. Vá em Ajuda -> Arsenal e baixe o Applet Kit.
Use o script build.sh incluído para construir o Applet Kit no Kali Linux. Muitos clientes da Cobalt Strike
usam essa flexibilidade para assinar os ataques Java Applet da Cobalt Strike com um certificado de
assinatura de código que eles compraram. Isso é altamente recomendado.
Para fazer com que o Cobalt Strike use seu Applet Kit sobre o interno, carregue o script applet.cna
incluído com o Applet Kit.
40
Machine Translated by Google
www.cobaltstrike.com
Na página Cobalt Strike Arsenal você também notará o Power Applet. Esta é uma implementação
alternativa dos ataques Java Applet do Cobalt Strike que usa o PowerShell para obter uma carga útil na
memória. O Power Applet demonstra a flexibilidade que você tem para recriar os ataques padrão do Cobalt
Strike de uma maneira completamente diferente e ainda usá-los com os fluxos de trabalho do Cobalt Strike.
Para fazer com que o Cobalt Strike use seu Applet Kit sobre o interno, carregue o script applet.cna
incluído com o Applet Kit.
O arquivo README.txt com o Resource Kit documenta os scripts incluídos e quais recursos os utilizam.
Para evitar um produto, considere alterar strings ou comportamentos nesses scripts.
Para fazer com que o Cobalt Strike use seus modelos de script sobre os modelos de script internos,
carregue o script resources.cna incluído no Resource Kit.
41
Machine Translated by Google
www.cobaltstrike.com
7. Pós-Exploração
7.1 O Console do Sinalizador
Clique com o botão direito do mouse em uma sessão do Beacon e selecione interagir para abrir o console
desse Beacon. O console é a principal interface do usuário para sua sessão Beacon. O console do Beacon
permite ver quais tarefas foram emitidas para um Beacon e ver quando ele as baixa. O console Beacon
também é onde a saída do comando e outras informações aparecerão.
Entre a entrada e a saída do console Beacon há uma barra de status. Esta barra de status contém
informações sobre a sessão atual. Em sua configuração padrão, a barra de status mostra o nome
NetBIOS do destino, o nome de usuário e o PID da sessão atual e o último horário de check-in do
Beacon.
Cada comando que é emitido para um Beacon, seja por meio da GUI ou do console, aparecerá nesta janela.
Se um companheiro de equipe emitir um comando, Cobalt Strike irá pré-fixar o comando com seu identificador.
Você provavelmente passará a maior parte do tempo com Cobalt Strike no console Beacon. Vale a pena
o seu tempo para se familiarizar com seus comandos. Digite help no console do Beacon para ver os
comandos disponíveis. Digite help seguido de um nome de comando para obter ajuda detalhada.
42
Machine Translated by Google
www.cobaltstrike.com
Algumas das visualizações do Cobalt Strike (o gráfico dinâmico e a tabela de sessões) permitem selecionar vários Beacons
ao mesmo tempo. A maioria das ações que acontecem por meio deste menu serão aplicadas a todas as sessões de Beacon
selecionadas.
Por padrão, os Beacons fazem check-in a cada sessenta segundos. Você pode mudar isso com o sono do Beacon
comando. Use sleep seguido por um tempo em segundos para especificar com que frequência o Beacon deve fazer check-in.
Você também pode especificar um segundo número entre 0 e 99. Esse número é um fator de jitter. O Beacon variará cada
um de seus tempos de check-in pela porcentagem aleatória que você especificar como um fator de jitter. Por exemplo, sleep
300 20, forçará o Beacon a dormir por 300 segundos com uma porcentagem de jitter de 20%.
Isso significa que o Beacon irá dormir por um valor aleatório entre 240s e 300s após cada check-in.
Para fazer um check-in de Beacon várias vezes a cada segundo, tente dormir 0. Este é o modo interativo. Neste modo, os
comandos serão executados imediatamente. Você deve tornar seu Beacon interativo antes de encapsular o tráfego através
dele. Alguns comandos do Beacon (por exemplo, browserpivot, desktop, etc.) colocarão automaticamente o Beacon no modo
interativo no próximo check-in.
Use o comando run para executar um comando sem cmd.exe. O comando run enviará a saída para você. O comando
execute executa um programa em segundo plano e não captura a saída.
43
Machine Translated by Google
www.cobaltstrike.com
Use o comando powershell para executar um comando com o PowerShell no host comprometido.
Use o comando powerpick para executar cmdlets do PowerShell sem powershell.exe. Este comando baseia-se na
técnica Unmanaged PowerShell desenvolvida por Lee Christensen. Os comandos powershell e powerpick usarão seu token
atual.
O comando psinject injetará o PowerShell não gerenciado em um processo específico e executará seu cmdlet a partir desse
local.
O comando powershell-import importará um script do PowerShell para o Beacon. Usos futuros dos comandos powershell,
powerpick e psinject terão cmdlets do script importado disponíveis para eles. O Beacon conterá apenas um script do PowerShell
por vez. Importe um arquivo vazio para limpar o script importado do Beacon.
O comando execute-assembly executará um executável .NET local como um trabalho de pós-exploração do Beacon. Você pode
passar argumentos para este assembly como se ele fosse executado a partir de uma interface de linha de comando do Windows.
Este comando também herdará seu token atual.
Se você quiser que o Beacon execute comandos de um diretório específico, use o comando cd no console do Beacon para
alternar o diretório de trabalho do processo do Beacon. O comando pwd lhe dirá de qual diretório você está trabalhando no
momento.
Use o comando spawn para gerar uma sessão para um ouvinte. O comando spawn aceita uma arquitetura (por exemplo,
x86, x64) e um ouvinte como seus argumentos.
Por padrão, o comando spawn gerará uma sessão em rundll32.exe. Um administrador de alerta pode achar estranho que o
rundll32.exe esteja periodicamente fazendo conexões com a Internet. Encontre um programa melhor (por exemplo, Internet
Explorer) e use o comando spawnto para indicar qual programa Beacon deve gerar para suas sessões.
O comando spawnto requer que você especifique uma arquitetura (x86 ou x64) e um caminho completo para um programa a
ser gerado, conforme necessário. Digite spawnto sozinho e pressione enter para instruir o Beacon a ir
de volta ao seu comportamento padrão.
Digite inject seguido por um ID de processo e um nome de ouvinte para injetar uma sessão em um processo específico.
Use ps para obter uma lista de processos no sistema atual. Use inject [pid] x64 para injetar um Beacon de 64 bits em um
processo x64.
Os comandos spawn e inject injetam um estágio de carga útil na memória. Se o estágio de carga útil for um HTTP, HTTPS ou
DNS Beacon e não puder alcançá-lo, você não verá uma sessão. Se o estágio de carga útil for um TCP ou SMB Beacon de
ligação, esses comandos tentarão automaticamente se conectar e assumir o controle dessas cargas.
44
Machine Translated by Google
www.cobaltstrike.com
Use o comando shinject [pid] [architecture] [/path/to/file.bin] para injetar shellcode, de um arquivo local, em um
processo no destino. Use shspawn [architecture] [/path/to/file.bin] para gerar o processo “spawn to” e injetar o arquivo
shellcode especificado nesse processo.
Use dllload [pid] [c:\path\to\file.dll] para carregar uma DLL em disco em outro processo.
O comando runu executará um comando com outro processo como pai. Este comando será executado com os direitos e
a sessão da área de trabalho de seu processo pai alternativo. A sessão Beacon atual deve ter direitos totais para o pai
alternativo. O comando spawnu gerará um processo temporário, como filho de um processo especificado, e injetará um
estágio de carga útil Beacon nele.
O valor spawnto controla qual programa é usado como um processo temporário.
O efeito é que a instrumentação do host que registra um lançamento de processo verá os argumentos falsos.
Isso ajuda a mascarar sua atividade real.
Use argument [comando] [argumentos falsos] para adicionar um comando a esta lista interna. A parte [comando] pode
conter uma variável de ambiente. Use argument [comando] para remover um comando desta lista interna. argument, por
si só, lista os comandos nesta lista interna.
A lógica de correspondência do processo é exata. Se o Beacon tentar iniciar “net.exe”, ele não corresponderá a
net, NET.EXE ou c:\windows\system32\net.exe de sua lista interna. Ele corresponderá apenas ao net.exe.
O x86 Beacon só pode falsificar argumentos em processos filho x86. Da mesma forma, o x64 Beacon só pode falsificar
argumentos em processos filho x64.
Os argumentos reais são gravados no espaço de memória que contém os argumentos falsos. Se os argumentos reais
forem mais longos que os argumentos falsos, a inicialização do comando falhará.
45
Machine Translated by Google
www.cobaltstrike.com
Digite downloads para ver uma lista de downloads de arquivos em andamento para o Beacon atual. Use o
comando cancelar , seguido de um nome de arquivo, para cancelar um download em andamento. Você pode usar
curingas com seu comando de cancelamento para cancelar vários downloads de arquivos de uma só vez.
Vá para Visualizar -> Downloads no Cobalt Strike para ver os arquivos que sua equipe baixou até agora.
Somente os downloads concluídos serão exibidos nesta guia. Os arquivos baixados são armazenados no servidor
de equipe. Para trazer os arquivos de volta ao seu sistema, destaque-os aqui e pressione Sincronizar Arquivos.
O Cobalt Strike fará o download dos arquivos selecionados para uma pasta de sua escolha em seu sistema.
Ao fazer upload de um arquivo, às vezes você desejará atualizar seus carimbos de data e hora para que ele se
misture com outros arquivos na mesma pasta. Use o comando timestomp para fazer isso. O comando timestomp
corresponderá aos horários Modificado, Acessado e Criado de um arquivo para outro arquivo.
O File Browser do Beacon é uma oportunidade de explorar os arquivos em um sistema comprometido. Vá para
[Beacon] -> Explore -> File Browser para abri-lo.
O navegador de arquivos solicitará uma listagem do diretório de trabalho atual do Beacon. Quando esse resultado
chegar, o navegador de arquivos será preenchido.
O lado esquerdo do navegador de arquivos é uma árvore que organiza as unidades e pastas conhecidas em uma
visualização. O lado direito do navegador de arquivos mostra o conteúdo da pasta atual.
46
Machine Translated by Google
www.cobaltstrike.com
Cada navegador de arquivos armazena em cache as listagens de pastas que recebe. Uma pasta colorida indica que o conteúdo
da pasta está no cache deste navegador de arquivos. Você pode navegar para pastas em cache sem gerar uma nova solicitação de
listagem de arquivos. Pressione Atualizar para solicitar ao Beacon que atualize o conteúdo da pasta atual.
Uma pasta cinza-escuro significa que o conteúdo da pasta não está no cache deste navegador de arquivos. Clique em uma pasta
na árvore para que o Beacon gere uma tarefa para listar o conteúdo dessa pasta (e atualizar seu cache). Clique duas vezes em uma
pasta cinza escuro na visualização da pasta atual do lado direito para fazer o
mesmo.
Para subir uma pasta, pressione o botão de pasta ao lado do caminho do arquivo acima da visualização de detalhes da pasta do
lado direito. Se a pasta pai estiver no cache deste navegador de arquivos, você verá os resultados imediatamente. Se a pasta pai
não estiver no cache do navegador de arquivos, o navegador gerará uma tarefa para listar o conteúdo da pasta pai.
47
Machine Translated by Google
www.cobaltstrike.com
Para iniciar o keylogger, use o keylogger pid para injetar em um processo x86. Usar keylogger pid
x64 para injetar em um processo x64. Explorer.exe é um bom candidato para esta ferramenta. Usar keylogger
por si só para injetar o keystroke logger em um processo temporário. O keystroke logger monitorará os pressionamentos de
tecla do processo injetado e os reportará ao Beacon até que o processo termine ou você elimine o trabalho de pós-exploração
do keystroke logger.
Esteja ciente de que vários registradores de pressionamento de tecla podem entrar em conflito entre si. Use apenas um keystroke
logger por sessão de desktop.
Para fazer uma captura de tela, use o pid de captura de tela para injetar a ferramenta de captura de tela em um processo x86. Use
a captura de tela pid x64 para injetar em um processo x64. Novamente, explorer.exe é um bom candidato para esta ferramenta. Esta
variante do comando screenshot fará uma captura de tela e sairá. A captura de tela, por si só, injetará a ferramenta de captura de tela
em um processo temporário. Use a arquitetura pid de captura de tela
é hora de solicitar que a ferramenta de captura de tela seja executada por alguns segundos e relatar uma captura de tela sempre que
o Beacon fizer check-in. Essa é uma maneira prática de observar a área de trabalho de um usuário.
Quando o Beacon receber novas capturas de tela ou pressionamentos de tecla, ele postará uma mensagem no console do
Beacon. As informações de captura de tela e pressionamento de tecla não estão disponíveis no console do Beacon. Vá para View ->
Keystrokes para ver os pressionamentos de tecla registrados em todas as suas sessões de Beacon.
Vá para Exibir -> Capturas de tela para navegar pelas capturas de tela de todas as suas sessões do Beacon.
Ambas as caixas de diálogo são atualizadas à medida que novas informações chegam. Essas caixas de diálogo facilitam para um
operador monitorar pressionamentos de tecla e capturas de tela em todas as suas sessões de Beacon.
O lado direito mostra os detalhes do processo. O Process Browser também é um local conveniente para representar um token de outro
processo, implantar a ferramenta de captura de tela ou implantar o keystroke logger. Realce um ou mais processos e pressione o botão
apropriado na parte inferior da guia.
48
Machine Translated by Google
www.cobaltstrike.com
Se você destacar vários Beacons e encarregá-los de mostrar processos, o Cobalt Strike mostrará um Process
Browser que também informa de qual host o processo vem. Essa variante do Process Browser é uma maneira
conveniente de implantar as ferramentas de pós-exploração do Beacon em vários sistemas de uma só vez. Basta
classificar por nome de processo, destacar os processos interessantes em seus sistemas de destino e pressionar o
botão Captura de tela ou Log de pressionamentos de tecla para implantar essas ferramentas em todos os sistemas
destacados.
Quando o servidor VNC estiver pronto, o Cobalt Strike abrirá uma guia chamada Desktop HOST@PID.
Você também pode usar o comando desktop do Beacon para injetar um servidor VNC em um processo específico.
Use a arquitetura pid de desktop low|high. O último parâmetro permite especificar uma qualidade para a sessão
VNC.
49
Machine Translated by Google
www.cobaltstrike.com
A parte inferior da guia da área de trabalho tem vários botões. Estes são:
Atualizar a tela
Somente visualização
Diminuir Zoom
Aumentar Zoom
Zoom para 100%
Enviar Ctrl+Escape
Bloqueie a tecla Ctrl
Bloqueie a tecla Alt
Se você não puder digitar em uma guia da área de trabalho, verifique o estado dos botões Ctrl e Alt . Quando um
dos botões é pressionado, todas as teclas pressionadas são enviadas com o modificador Ctrl ou Alt. Pressione o botão
Ctrl ou Alt para desativar esse comportamento. Certifique -se de que View only também não esteja pressionado. Para
evitar que você mova o mouse acidentalmente, apenas Exibir é pressionado por padrão.
50
Machine Translated by Google
www.cobaltstrike.com
Use runasadmin, por si só, para listar as explorações do elevador de comando registradas no Cobalt Strike. Execute
runasadmin [exploit] [command + args] para tentar executar o comando especificado em um ambiente elevado
contexto.
Cobalt Strike separa explorações de elevador de comando e explorações de rendimento de sessão porque alguns
ataques são uma oportunidade natural para gerar uma sessão. Outros ataques geram um “executar este comando”
primitivo. Gerar uma sessão a partir de uma primitiva “executar este comando” coloca muitas decisões de armamento
(nem sempre favoráveis) nas mãos de seu desenvolvedor de ferramentas. Com runasadmin, é sua escolha soltar um
executável no disco e executá-lo, executar um one-liner do PowerShell ou enfraquecer o destino de alguma forma.
Se você quiser usar um one-liner do PowerShell para gerar uma sessão, vá para [session] -> Access -> One liner.
Essa caixa de diálogo configurará um servidor da Web somente localhost em sua sessão do Beacon para hospedar
um estágio de carga útil e retornar um comando do PowerShell para baixar e executar esse estágio de carga útil.
Este servidor web é de uso único. Uma vez conectado a uma vez, ele se limpará e deixará de servir sua carga útil.
Se você executar um TCP ou SMB Beacon com esta ferramenta, precisará usar conectar ou link para assumir o
controle da carga manualmente. Além disso, esteja ciente de que, se você tentar usar uma carga x64, isso falhará
se o x86 PowerShell estiver em seu $PATH.
O Cobalt Strike não possui muitas opções de elevação integradas. O desenvolvimento de exploits não é o foco do
trabalho da Strategic Cyber LLC. No entanto, é fácil integrar explorações de escalonamento de privilégios por meio
da linguagem de programação Aggressor Script da Cobalt Strike. Para ver como é, baixe o Elevate Kit. O Elevate Kit
é um Script Agressor que integra várias explorações de escalonamento de privilégios de código aberto no Cobalt
Strike. https://github.com/rsmudge/ElevateKit
51
Machine Translated by Google
www.cobaltstrike.com
Use spawnas [DOMÍNIO\usuário] [senha] [ouvinte] para gerar uma sessão como outro usuário usando suas credenciais.
Este comando gera um processo temporário e injeta seu estágio de carga útil nele. Você também pode ir para [beacon] ->
Access -> Spawn As para executar este comando também.
Com esses dois comandos, esteja ciente de que as credenciais para uma conta não SID 500 gerarão uma carga útil em um
contexto de integridade média. Você precisará usar o Bypass UAC para elevar a um nível alto
contexto de integridade. Além disso, esteja ciente de que você deve executar esses comandos de uma pasta de trabalho
que a conta especificada possa ler.
Obter SISTEMA
Use getsystem para representar um token para a conta SYSTEM. Esse nível de acesso pode permitir que você execute
ações privilegiadas que não são possíveis como usuário Administrador.
Outra maneira de obter SYSTEM é criar um serviço que execute uma carga útil. O comando elevar svc-exe [ouvinte]
faz isso. Ele descartará um executável que executa uma carga útil, criará um serviço para executá-lo, assumirá o controle
da carga útil e limpará o serviço e o executável.
Bypass UAC
A Microsoft introduziu o Controle de Conta de Usuário (UAC) no Windows Vista e o refinou no Windows 7. O UAC funciona
muito como o sudo no UNIX. No dia-a-dia um usuário trabalha com privilégios normais. Quando o usuário precisa realizar uma
ação privilegiada, o sistema pergunta se ele gostaria de elevar seus direitos.
Cobalt Strike vem com alguns ataques de desvio do UAC. Esses ataques não funcionarão se o usuário atual não for um
administrador. Para verificar se o usuário atual está no grupo Administradores, use run
whoami /grupos.
elevar uac-token-duplication [ouvinte] gerará um processo temporário com direitos elevados e injetará um estágio de
carga útil nele. Esse ataque usa uma brecha do UAC que permite que um processo não elevado inicie um processo
arbitrário com um token roubado de um processo elevado. Essa brecha exige que o ataque remova vários direitos
atribuídos ao token elevado. As habilidades de sua nova sessão refletirão esses direitos restritos. Se Always Notify estiver
em sua configuração mais alta, esse ataque exigirá que um processo elevado já esteja em execução na sessão atual da área
de trabalho (como o mesmo usuário). Este ataque funciona no Windows 7 e no Windows 10 antes da atualização de novembro
de 2018.
runasadmin uac-token-duplication [command] é o mesmo ataque descrito acima, mas esta variante executa um
comando de sua escolha em um contexto elevado.
runasadmin uac-cmstplua [comando] tentará ignorar o UAC e executar um comando em um contexto elevado. Esse
ataque se baseia em um objeto COM que eleva automaticamente de determinados contextos de processo (assinado pela
Microsoft, reside em c:\windows\*).
52
Machine Translated by Google
www.cobaltstrike.com
Privilégios
Digite getprivs para habilitar os privilégios atribuídos ao seu token de acesso atual.
7.18 Mimicatz
Beacon integra mimikatz. Use o comando mimikatz para passar qualquer comando para o despachante de
comandos do mimikatz. Por exemplo, mimikatz standard::coffee lhe dará uma xícara de café.
O Beacon se encarregará de injetar uma instância mimikatz que corresponda à arquitetura nativa do seu destino.
Alguns comandos mimikatz devem ser executados como SYSTEM para funcionar. Prefixe um comando com um !
para forçar o mimikatz a elevar para SYSTEM antes de executar seu comando. Por exemplo, mimikatz !lsa::cache
recuperará hashes de senha salgada armazenados em cache pelo sistema.
De vez em quando, você pode precisar executar um comando mimikatz com o token de acesso atual do Beacon.
Prefixe um comando com um @ para forçar o mimikatz a representar o token de acesso atual do Beacon. Por
exemplo, mimikatz @lsadump::dcsync executará o comando dcsync em mimikatz com o token de acesso atual do
Beacon.
O comando logonpasswords usará mimikatz para recuperar senhas de texto simples e hashes para usuários
conectados ao sistema atual. O comando logonpasswords é o mesmo que [beacon] -> Access -> Run Mimikatz.
Use dcsync [DOMAIN.FQDN] para obter hashes de senha para todas as contas de um controlador de
domínio. Essa técnica usa APIs do Windows criadas para sincronizar informações entre controladores de
domínio. Requer uma relação de confiança de administrador de domínio. Beacon usa mimikatz para executar
esta técnica. Use dcsync [DOMAIN.FQDN] [DOMAIN\user], se desejar um hash de senha específico.
As credenciais despejadas com esses comandos são coletadas pelo Cobalt Strike e armazenadas no modelo
de dados de credenciais. Vá para Exibir -> Credenciais para obter as credenciais da equipe atual
servidor.
Existem três opções de descoberta de destino. O método arp usa uma solicitação ARP para descobrir se um host
está ativo ou não. O método icmp envia uma solicitação de eco ICMP para verificar se um alvo está ativo.
A opção none diz à ferramenta portscan para assumir que todos os hosts estão ativos.
53
Machine Translated by Google
www.cobaltstrike.com
O scanner de porta será executado, entre os check-ins do Beacon. Quando tiver resultados para relatar, ele os enviará
para o console do Beacon. O Cobalt Strike processará essas informações e atualizará o modelo de destino com os hosts
descobertos.
Os comandos no módulo net do Beacon são construídos sobre as APIs de Enumeração de Rede do Windows. A maioria
desses comandos são substituições diretas de muitos dos comandos net internos do Windows. Há também alguns recursos
exclusivos aqui também. Por exemplo, use net localgroup \\TARGET para listar os grupos em outro sistema. Use net
localgroup \\TARGET group name para listar os membros de um grupo em outro sistema. Esses comandos são ótimos
durante o movimento lateral quando você precisa descobrir quem é um administrador local em outro sistema.
Use help net para obter uma lista de todos os comandos no módulo net do Beacon. Use o comando help net para
obter ajuda para cada comando individual.
Use steal_token [id do processo] para representar um token de um processo existente. Se você quiser ver quais
processos estão sendo executados, use ps. O comando getuid imprimirá seu token atual. Use rev2self para voltar ao
seu token original.
Se você conhece as credenciais de um usuário; use make_token [DOMAIN\user] [password] para gerar um token que
passe essas credenciais. Este token é uma cópia do seu token atual com informações de logon único modificadas. Ele
mostrará seu nome de usuário atual. Este é o comportamento esperado.
Use mimikatz para passar o hash com Beacon. O comando Beacon pth [DOMAIN\user] [ntlm hash] criará e personificará
um token de acesso para passar o hash especificado.
A caixa de diálogo Make Token do Beacon ([beacon] -> Access -> Make Token) é um front-end para esses
comandos. Ele apresentará o conteúdo do modelo de credencial e usará o comando certo para transformar a entrada de
credencial selecionada em um token de acesso.
Ingressos Kerberos
Use kerberos_ticket_use [/path/to/ticket] para injetar um tíquete Kerberos na sessão atual.
Isso permitirá que o Beacon interaja com sistemas remotos usando os direitos deste ticket. Tente isso com um Golden
Ticket gerado pelo mimikatz 2.0.
54
Machine Translated by Google
www.cobaltstrike.com
Use kerberos_ticket_purge para limpar todos os tickets kerberos associados à sua sessão.
Digite jump para listar as opções de movimento lateral registradas com Cobalt Strike. Execute jump [module] [target]
[listener] para tentar executar uma carga útil em um destino remoto.
Execute remote-exec, por si só, para listar os módulos de execução remota registrados no Cobalt Strike. Use remote-
exec [module] [target] [command + args] para tentar executar o comando especificado em um destino remoto.
O movimento lateral é uma área, semelhante à escalada de privilégios, onde alguns ataques apresentam um conjunto
natural de primitivos para gerar uma sessão em um alvo remoto. Alguns ataques fornecem apenas uma execução primitiva.
A divisão entre salto e execução remota oferece flexibilidade para decidir como armar um primitivo somente de execução.
O Aggressor Script possui uma API para adicionar novos módulos para jump e remote-exec. Consulte a documentação
do Aggressor Script (o capítulo Beacon, especificamente) para obter mais informações.
55
Machine Translated by Google
www.cobaltstrike.com
Primeiro, decida qual confiança você deseja usar para o movimento lateral. Se você quiser usar o token em um de
seus Beacons, marque a caixa Usar token de acesso atual da sessão . Se você quiser usar credenciais ou hashes
para movimento lateral, tudo bem também. Selecione as credenciais do armazenamento de credenciais ou preencha os
campos Usuário, Senha e Domínio. O Beacon usará essas informações para gerar um token de acesso para você. Lembre-
se de que você precisa operar a partir de um contexto de alta integridade [administrador] para que isso funcione.
Em seguida, escolha o ouvinte a ser usado para o movimento lateral. O SMB Beacon geralmente é um bom
candidato aqui.
Por último, selecione de qual sessão você deseja realizar o ataque de movimento lateral. O modelo assíncrono de ataque
do Cobalt Strike exige que cada ataque seja executado a partir de um sistema comprometido.
Não há opção para realizar este ataque sem uma sessão de Beacon para atacar. Se você estiver em um compromisso
interno, considere conectar um sistema Windows que você controla e use-o como ponto de partida para atacar outros
sistemas com credenciais ou hashes.
Pressione Iniciar. Cobalt Strike ativará a guia para o Beacon selecionado e emitirá comandos para ele. O feedback do
ataque aparecerá no console do Beacon.
56
Machine Translated by Google
www.cobaltstrike.com
8. Navegador Pivotante
O malware Man-in-the-browser usa duas abordagens para roubar informações bancárias. Eles capturam dados de
formulário à medida que são enviados para um servidor. Por exemplo, malware pode prender PR_Write no Firefox para
interceptar dados HTTP POST enviados pelo Firefox. Ou injetam JavaScript em determinadas páginas da Web para
fazer o usuário pensar que o site está solicitando informações de que o invasor precisa.
Cobalt Strike oferece uma terceira abordagem para ataques man-in-the-browser. Ele permite que o invasor sequestre
sessões da Web autenticadas — todas elas. Depois que um usuário faz login em um site, um invasor pode solicitar
que o navegador do usuário faça solicitações em seu nome. Como o navegador do usuário está fazendo a solicitação,
ele se autenticará novamente automaticamente em qualquer site no qual o usuário já esteja conectado. Eu chamo isso
de pivô do navegador - porque o invasor está girando seu navegador por meio do navegador do usuário comprometido.
A implementação da Cobalt Strike de dinamização do navegador para o Internet Explorer injeta um servidor proxy HTTP
no navegador do usuário comprometido. Não confunda isso com a alteração das configurações de proxy do usuário.
Este servidor proxy não afeta como o usuário chega a um site. Em vez disso, esse servidor proxy está disponível para
o invasor. Todas as solicitações que chegam por ele são atendidas pelo navegador do usuário.
57
Machine Translated by Google
www.cobaltstrike.com
8.2 Configuração
Para configurar o pivô do navegador, vá para [beacon] -> Explore -> Browser Pivot. Escolha a instância do Internet
Explorer na qual você deseja injetar. Você também pode decidir a qual porta vincular o servidor proxy dinâmico do
navegador.
Esteja ciente de que o processo em que você injeta é muito importante. Injete no Internet Explorer para herdar as
sessões da Web autenticadas de um usuário. As versões modernas do Internet Explorer geram cada guia em seu próprio
processo. Se seu destino usa uma versão moderna do Internet Explorer, você deve injetar um processo associado a uma
guia aberta para herdar o estado da sessão. Qual processo de guia não importa (as guias filhas compartilham o estado da
sessão). Identifique os processos da guia do Internet Explorer examinando o valor PPID na caixa de diálogo de configuração
do Browser Pivoting. Se o PPID referenciar explorer.exe, o processo não está associado a uma guia. Se o PPID fizer
referência a iexplore.exe, o processo será associado a uma guia. O Cobalt Strike mostrará uma marca de seleção ao lado
dos processos nos quais acha que você deve injetar.
Depois que o Browser Pivot estiver configurado, configure seu navegador da Web para usar o servidor Browser Pivot Proxy.
Lembre-se, o servidor Browser Pivot da Cobalt Strike é um servidor proxy HTTP.
58
Machine Translated by Google
www.cobaltstrike.com
8.3 Uso
Você pode navegar na web como seu usuário de destino assim que a rotação do navegador for iniciada. Esteja ciente de
que o servidor proxy dinâmico do navegador apresentará seu certificado SSL para sites habilitados para SSL que você visitar.
Isso é necessário para que a tecnologia funcione.
O servidor proxy dinâmico do navegador solicitará que você adicione um host ao armazenamento confiável do navegador quando
detectar um erro de SSL. Adicione esses hosts ao armazenamento confiável e pressione atualizar para que os sites protegidos por SSL
sejam carregados corretamente.
Se o seu navegador fixar o certificado de um site de destino, você pode achar impossível fazer com que seu
navegador aceite o certificado SSL do servidor proxy dinâmico do navegador. Isso é uma dor. Uma opção é usar um
navegador diferente. O navegador Chromium de código aberto tem uma opção de linha de comando para ignorar todos os
erros de certificado. Isso é ideal para uso de pivotagem do navegador:
Para parar o servidor proxy Browser Pivot, digite browserpivot stop em seu console Beacon.
Você precisará reinjetar o servidor proxy dinâmico do navegador se o usuário fechar a guia na qual você está trabalhando. A
guia Browser Pivot irá avisá-lo quando não puder se conectar ao servidor proxy pivot do navegador no navegador.
59
Machine Translated by Google
www.cobaltstrike.com
9. Girando
9.1 O que é Pivoting
Pivotar, para fins deste manual, é transformar um sistema comprometido em um ponto de salto para outros ataques e
ferramentas. O Beacon da Cobalt Strike oferece várias opções de pivotamento. Para cada uma dessas opções, você
deve certificar-se de que seu Beacon esteja no modo interativo. O modo interativo é quando um Beacon faz check-in
várias vezes a cada segundo. Use o comando sleep 0 para colocar seu Beacon no modo interativo.
Todas as conexões que passam por esses servidores SOCKS se transformam em tarefas de conexão, leitura, gravação
e fechamento para que o Beacon associado seja executado. Você pode tunelar via SOCKS através de qualquer tipo
de Beacon (mesmo um SMB Beacon).
O canal de dados HTTP do Beacon é o mais responsivo para fins de pivotagem. Se você quiser dinamizar o tráfego pelo
DNS, use o modo de comunicação de registro DNS TXT.
Para ver os servidores SOCKS que estão atualmente configurados, vá para View -> Proxy Pivots.
Cadeias de proxy
A ferramenta proxychains forçará um programa externo a usar um servidor proxy SOCKS que você designar. Você
pode usar proxychains para forçar ferramentas de terceiros através do servidor SOCKS da Cobalt Strike. Para saber
mais sobre proxychains, visite:
• http://proxychains.sourceforge.net/
Metasploit
Você também pode encapsular exploits e módulos do Metasploit Framework por meio do Beacon. Crie um servidor
proxy Beacon SOCKS [conforme descrito acima] e cole o seguinte no console do Metasploit Framework:
Esses comandos instruirão o Metasploit Framework a aplicar sua opção Proxies a todos os módulos executados
deste ponto em diante. Assim que você terminar de dinamizar o Beacon dessa maneira, use unsetg Proxies para
interromper esse comportamento.
60
Machine Translated by Google
www.cobaltstrike.com
Se você achar difícil lembrar o que foi dito acima, vá para View -> Proxy Pivots. Realce o pivô de proxy que você
configurou e pressione Túnel. Este botão fornecerá a sintaxe setg Proxies necessária para encapsular o Metasploit
Framework através do seu Beacon.
Use rportfwd stop [bind port] para desabilitar o encaminhamento de porta reversa.
Para configurar um listener dinâmico, vá para [beacon] -> Pivoting -> Listener…. Isso abrirá uma caixa de
diálogo onde você pode definir um novo ouvinte de pivô.
Um ouvinte dinâmico será vinculado à porta de escuta na sessão especificada. O valor Listen Host
configura o endereço que sua carga TCP reversa usará para se conectar a este listener.
Os Pivot Listeners não alteram a configuração de firewall do host dinâmico. Se um host dinâmico tiver um firewall
baseado em host, isso poderá interferir no seu ouvinte. Você, o operador, é responsável por antecipar esta
situação e tomar as medidas corretas para isso.
Para remover um listener de pivô, vá para Cobalt Strike -> Listeners e remova o listener de lá.
O Cobalt Strike enviará uma tarefa para derrubar o soquete de escuta, se a sessão ainda estiver acessível.
61
Machine Translated by Google
www.cobaltstrike.com
Para ativar o Covert VPN, clique com o botão direito do mouse em um host comprometido, vá para [beacon] -> Pivoting ->
Deploy VPN. Selecione a interface remota à qual você deseja que o Covert VPN se vincule. Se nenhuma interface local estiver
presente, pressione Adicionar para criar uma.
Verifique o endereço MAC do host Clone para fazer com que sua interface local tenha o mesmo endereço MAC que a interface
remota. É mais seguro deixar esta opção marcada.
Pressione Deploy para iniciar o cliente Covert VPN no destino. Covert VPN requer acesso de administrador para implantação.
Assim que uma interface Covert VPN estiver ativa, você poderá usá-la como qualquer interface física em seu sistema.
Use ifconfig para configurar seu endereço IP. Se a sua rede de destino tiver um servidor DHCP, você poderá solicitar um
endereço IP dele usando as ferramentas integradas do seu sistema operacional.
Para gerenciar suas interfaces Covert VPN, vá para Cobalt Strike -> Interfaces. Aqui, o Cobalt Strike mostrará as interfaces
Covert VPN, como elas estão configuradas e quantos bytes foram transmitidos e recebidos através de cada interface.
Realce uma interface e pressione Remover para destruir a interface e fechar o cliente remoto Covert VPN. O Covert VPN
removerá seus arquivos temporários na reinicialização e desfará automaticamente todas as alterações do sistema
imediatamente.
62
Machine Translated by Google
www.cobaltstrike.com
As interfaces secretas de VPN consistem em um tap de rede e um canal para comunicar 63 quadros de
rede. Para configurar a interface, escolha um nome de interface (isto é o que você manipulará através do
ifconfig posteriormente) e um endereço MAC.
Você também deve configurar o canal de comunicação Covert VPN para sua interface. Covert VPN
pode comunicar quadros Ethernet através de uma conexão UDP, conexão TCP, ICMP ou usando o
protocolo HTTP. O canal TCP (Reverse) tem o destino conectado à sua instância Cobalt Strike. O canal
TCP (Bind) tem o túnel Cobalt Strike da VPN através do Beacon.
Cobalt Strike irá configurar e gerenciar a comunicação com o cliente Covert VPN com base na porta
local e no canal que você selecionar.
O canal HTTP Covert VPN faz uso do servidor web Cobalt Strike. Você pode hospedar outros aplicativos
da web Cobalt Strike e vários canais HTTP Covert VPN na mesma porta.
Para melhor desempenho, use o canal UDP. O canal UDP tem a menor quantidade de sobrecarga em
comparação com os canais TCP e HTTP. Use os canais ICMP, HTTP ou TCP (Bind) se precisar passar por
um firewall restritivo.
Embora o Covert VPN tenha uma vantagem de flexibilidade, o uso de um pivô VPN sobre um pivô proxy
dependerá da situação. Covert VPN requer acesso de administrador. Um pivô de proxy não.
Covert VPN cria um novo canal de comunicação. Um pivô de proxy não. Você deve usar um pivô de
proxy inicialmente e mudar para um pivô de VPN quando for necessário.
63
Machine Translated by Google
www.cobaltstrike.com
Use ssh [target] [user] [password] para iniciar uma sessão SSH de um Beacon. Você também pode usar ssh-key
[target] [user] [/path/to/key.pem] para autenticar com uma chave.
Esses comandos executam o cliente SSH do Cobalt Strike. O cliente relatará quaisquer problemas de
conexão ou autenticação ao Beacon pai. Se a conexão for bem-sucedida, você verá uma nova sessão na tela do
Cobalt Strike. Esta é uma sessão SSH. Clique com o botão direito do mouse nesta sessão e pressione Interagir
para abrir o console SSH.
Digite help para ver uma lista de comandos suportados pela sessão SSH. Digite help seguido por um nome
de comando para obter detalhes sobre esse comando.
Use sudo [senha] [comando + argumentos] para tentar executar um comando via sudo. Esse alias requer que
o sudo do destino aceite o sinalizador –S.
Vá para [sessão] -> Ouvintes -> Ouvinte Pivot… para configurar um ouvinte dinâmico vinculado a esta
sessão SSH. Isso permitirá que esse destino UNIX comprometido receba sessões reversas de TCP Beacon.
Essa opção requer que a opção GatewayPorts do daemon SSH seja definida como yes ou
ClientSpecified.
64
Machine Translated by Google
www.cobaltstrike.com
Há uma ressalva para o rportfwd: o comando rportfwd solicita que o daemon SSH se vincule a todas as
interfaces. É bem provável que o daemon SSH substitua isso e force a porta a se vincular ao localhost.
Você precisa alterar a opção GatewayPorts do daemon SSH para yes ou clientspecified.
65
Machine Translated by Google
www.cobaltstrike.com
Para usar um perfil personalizado, você deve iniciar um servidor de equipe Cobalt Strike e especificar seu perfil
naquele momento.
./c2lint [/path/to/my.profile]
• https://github.com/rsmudge/Malleable-C2-Profiles
# isso é um comentário
definir global_option "valor";
protocolo-transação {
definir local_option "valor";
cliente {
# personalize os indicadores do cliente
}
servidor {
# personaliza os indicadores do servidor
}
}
66
Machine Translated by Google
www.cobaltstrike.com
Os comentários começam com um # e vão até o final da linha. A instrução set é uma maneira de atribuir um valor a
uma opção. Os perfis usam { chaves } para agrupar instruções e informações.
As instruções sempre terminam com um ponto e vírgula.
Para ajudar tudo isso a fazer sentido, aqui está um perfil parcial:
http-get {
set uri "/foobar";
cliente {
metadados {
base64;
prefixe "usuário=";
cabeçalho "Cookie";
}
}
Este perfil parcial define indicadores para uma transação HTTP GET. A primeira instrução, set uri, atribui o URI que
o cliente e o servidor farão referência durante essa transação. Essa instrução set ocorre fora dos blocos de código
do cliente e do servidor porque se aplica a ambos.
O bloco cliente define indicadores para o cliente que executa um HTTP GET. O cliente, neste caso, é a carga útil
Beacon da Cobalt Strike.
Quando o Beacon do Cobalt Strike “telefona para casa”, ele envia metadados sobre si mesmo para o Cobalt Strike.
Neste perfil, temos que definir como esses metadados são codificados e enviados com nossa solicitação HTTP
GET.
A palavra-chave metadata seguida por um grupo de instruções especifica como transformar e incorporar metadados
em nossa solicitação HTTP GET. O grupo de instruções, seguindo a palavra-chave de metadados, é chamado de
transformação de dados.
A primeira instrução em nossa transformação de dados afirma que codificaremos nossos metadados em base64 [1].
A segunda instrução, prepend, pega nossos metadados codificados e anexa a string user= a ele [2].
Agora nossos metadados transformados são “user=" . base64(metadados). A terceira declaração afirma que
armazenaremos nossos metadados transformados em um cabeçalho HTTP do cliente chamado Cookie [3]. É isso.
Tanto o Beacon quanto seu servidor consomem perfis. Aqui, lemos o perfil da perspectiva do cliente Beacon. O
servidor Beacon irá pegar esta mesma informação e interpretá-la
67
Machine Translated by Google
www.cobaltstrike.com
para trás. Digamos que nosso servidor web Cobalt Strike receba uma solicitação GET para o URI /foobar.
Agora, ele quer extrair metadados da transação.
A instrução de cabeçalho informará ao nosso servidor onde recuperar nossos metadados transformados de [1].
O servidor HTTP se encarrega de analisar os cabeçalhos do cliente HTTP para nós. Em seguida, precisamos lidar com a
instrução prepend. Para recuperar os dados transformados, interpretamos o prefixo como remover os primeiros X caracteres
[2], onde X é o comprimento da string original que anexamos. Agora, tudo isso
esquerda é interpretar a última instrução, base64. Usamos uma função de codificação base64 para transformar os metadados
antes. Agora, usamos uma decodificação base64 para recuperar os metadados [3].
Teremos os metadados originais assim que o interpretador de perfis terminar de executar cada uma dessas instruções
inversas.
mascarar Máscara XOR com chave aleatória Máscara XOR com a mesma chave aleatória
netbios Codificação NetBIOS 'a' Decodificação NetBIOS 'a'
netbiosu Codificação NetBIOS 'A' Decodificação NetBIOS 'A'
Uma transformação de dados é uma combinação de qualquer número dessas instruções, em qualquer ordem. Por exemplo,
você pode optar por codificar em netbios os dados a serem transmitidos, acrescentar algumas informações e, em seguida,
codificar em base64 todo o pacote.
Uma transformação de dados sempre termina com uma instrução de término. Você só pode usar uma instrução de término
em uma transformação. Essa instrução informa ao Beacon e seu servidor onde na transação devem ser armazenados os
dados transformados.
68
Machine Translated by Google
www.cobaltstrike.com
Declaração O que
header parâmetro Armazenar dados em um cabeçalho HTTP
A instrução print é a instrução de terminação esperada para os blocos http-get.server.output, http post.server.output e
http-stager.server.output. Você pode usar as instruções de terminação header, parameter, print e uri-append para os
outros blocos.
Se você usar um cabeçalho, parâmetro ou instrução de terminação uri-append em http-post.client.output, o Beacon dividirá
suas respostas em um tamanho razoável para caber nessa parte da transação.
Esses blocos e os dados que eles enviam são descritos em uma seção posterior.
Cordas
O Profile Language do Beacon permite que você use “strings” em vários lugares. Em geral, as strings são interpretadas
como estão. No entanto, existem alguns valores especiais que você pode usar em uma string:
Devolução de carro
“\t” Caractere de tabulação
Cabeçalhos e Parâmetros
As transformações de dados são uma parte importante do processo de customização do indicador. Eles permitem que você
personalize os dados que o Beacon deve enviar ou receber com cada transação. Você também pode adicionar indicadores
estranhos a cada transação.
Em uma solicitação HTTP GET ou POST, esses indicadores estranhos vêm na forma de cabeçalhos ou parâmetros. Use a
instrução de parâmetro dentro do bloco do cliente para adicionar um parâmetro arbitrário a uma transação HTTP GET ou
POST.
69
Machine Translated by Google
www.cobaltstrike.com
Este código forçará o Beacon a adicionar ?bar=blah ao URI /foobar quando fizer uma solicitação.
http-get {
cliente {
parâmetro "bar" "blah";
Use a instrução de cabeçalho dentro dos blocos de cliente ou servidor para adicionar um cabeçalho HTTP arbitrário à
solicitação do cliente ou à resposta do servidor. Essa declaração de cabeçalho adiciona um indicador para deixar as equipes
de monitoramento de segurança de rede à vontade.
http-get {
servidor {
header "X-Not-Malware" "Prometo!";
O Profile Interpreter interpretará suas instruções de cabeçalho e parâmetro em ordem. Dito isto, a biblioteca
WinINet (cliente) e o servidor web Cobalt Strike têm a palavra final sobre onde na transação esses indicadores
aparecerão.
Opções
Você pode configurar os padrões do Beacon através do arquivo de perfil. Existem dois tipos de opções: opções
globais e locais. As opções globais alteram uma configuração global de Beacon. As opções locais são específicas
da transação. Você deve definir as opções locais no contexto correto. Use a instrução set para definir
uma opção.
70
Machine Translated by Google
www.cobaltstrike.com
Com a opção uri, você pode especificar vários URIs como uma string separada por espaço. O servidor web do Cobalt Strike
vinculará todos esses URIs e atribuirá um desses URIs a cada host Beacon quando o estágio Beacon for construído.
Mesmo que a opção useragent exista; você pode usar a instrução de cabeçalho para substituir esta opção.
71
Machine Translated by Google
www.cobaltstrike.com
http-estágio {
set uri_x86 "/get32.gif";
set uri_x64 "/get64.gif";
A opção uri_x86 define o URI para baixar o estágio de carga útil x86. A opção uri_x64 define o URI para baixar
o estágio de carga útil x64.
cliente {
parâmetro "id" "1234";
cabeçalho "Cookie" "SomeValue";
}
servidor {
cabeçalho "Tipo de conteúdo" "imagem/gif";
saída {
prefixe "GIF89a";
imprimir;
}
}
}
Uma transação começa quando um Beacon faz uma solicitação HTTP GET para o servidor web da Cobalt Strike.
Neste momento, o Beacon deve enviar metadados que contenham informações sobre o sistema
comprometido.
Dica: os metadados da sessão são um bloco de dados criptografado. Sem codificação, não é adequado para
transporte em um cabeçalho ou parâmetro de URI. Sempre aplique uma base 64, uma URL de base 64 ou uma
declaração de bios de rede para codificar seus metadados.
O servidor web do Cobalt Strike responde a este HTTP GET com tarefas que o Beacon deve executar.
Essas tarefas são, inicialmente, enviadas como um blob binário criptografado. Você pode transformar essas
informações com a palavra-chave de saída no contexto do servidor http-get.
72
Machine Translated by Google
www.cobaltstrike.com
À medida que o Beacon executa suas tarefas, ele acumula saída. Após a conclusão de todas as tarefas, o Beacon verifica se há
saída para enviar. Se não houver saída, o Beacon vai dormir. Se houver saída, o Beacon inicia uma transação HTTP POST.
A solicitação HTTP POST deve conter um ID de sessão em um parâmetro ou cabeçalho de URI. O Cobalt Strike usa essas
informações para associar a saída à sessão correta. O conteúdo postado é, inicialmente, um blob binário criptografado. Você
pode transformar essas informações com a palavra-chave de saída no contexto do cliente de http-post.
O servidor web do Cobalt Strike pode responder a um HTTP POST com o que quiser. O Beacon não consome nem usa essas
informações. Você pode especificar a saída de HTTP POST com o bloco de saída no contexto do servidor de http-post.
73
Machine Translated by Google
www.cobaltstrike.com
http-config{
defina os cabeçalhos "Data, Servidor, Comprimento do Conteúdo, Keep-Alive,
Conexão, Tipo de Conteúdo";
cabeçalho "Servidor" "Apache";
cabeçalho "Keep-Alive" "timeout=5, max=100";
cabeçalho "Conexão" "Keep-Alive";
A palavra-chave header adiciona um valor de cabeçalho a cada uma das respostas HTTP do Cobalt Strike. Se
o valor do cabeçalho já estiver definido em uma resposta, esse valor será ignorado.
A opção set headers especifica a ordem em que esses cabeçalhos HTTP são entregues em uma resposta HTTP.
Quaisquer cabeçalhos que não estejam nesta lista são adicionados ao final.
A opção set trust_x_forwarded_for decide se Cobalt Strike usa o cabeçalho HTTP X-Forwarded-For para
determinar o endereço remoto de uma solicitação. Use esta opção se o seu servidor Cobalt Strike estiver atrás de um
redirecionador HTTP.
https-certificado {
set CN "bobsmalware.com";
conjunto O "Bob's Malware";
}
74
Machine Translated by Google
www.cobaltstrike.com
https-certificado {
defina keystore "domain.store";
defina a senha "minhasenha";
}
Aqui estão as etapas para criar um certificado SSL válido para uso com o Beacon da Cobalt Strike:
1. Use o programa keytool para criar um arquivo Java Keystore. Este programa perguntará "Qual é o seu nome
e sobrenome?" Certifique-se de responder com o nome de domínio totalmente qualificado para o seu servidor
Beacon. Além disso, certifique-se de anotar a senha do keystore. Você precisará disso mais tarde.
2. Use keytool para gerar uma solicitação de assinatura de certificado (CSR). Você enviará este arquivo ao seu
fornecedor de certificado SSL. Eles irão verificar se você é quem você é e emitir um certificado. Alguns
fornecedores são mais fáceis e mais baratos de lidar do que outros.
3. Importe a Raiz e quaisquer Certificados Intermediários fornecidos pelo seu fornecedor de SSL.
E é isso. Agora você tem um arquivo Java Keystore que está pronto para usar com o Beacon do Cobalt
Strike.
75
Machine Translated by Google
www.cobaltstrike.com
Os arquivos de perfil C2 maleáveis, por padrão, contêm um perfil. É possível empacotar variações do perfil
atual especificando blocos de variantes para certificado http-get, http-post, http-stager e https.
Um bloco variante é especificado como [nome do bloco] “nome da variante” { … }. Aqui está um bloco http-
get variante chamado “My Variant”:
Um bloco variante cria uma cópia do perfil atual com os blocos variantes especificados substituindo os
blocos padrão no próprio perfil. Cada nome de variante exclusivo cria um novo perfil de variante.
Você pode preencher um perfil com quantos nomes de variantes desejar.
As variantes são selecionáveis ao configurar um listener HTTP ou HTTPS Beacon. As variantes permitem
que cada listener HTTP ou HTTPS Beacon vinculado a um único servidor de equipe tenha IOCs de rede
diferentes uns dos outros.
sinal de código {
defina keystore "keystore.jks";
definir senha "senha";
definir alias "servidor";
}
76
Machine Translated by Google
www.cobaltstrike.com
1. Cada instância do Cobalt Strike usa um perfil por vez. Se você alterar um perfil ou carregar um novo perfil, os
Beacons implantados anteriormente não poderão se comunicar com você.
2. Esteja sempre ciente do estado de seus dados e do que um protocolo permitirá ao desenvolver uma transformação
de dados. Por exemplo, se você codifica metadados em base64 e os armazena em um parâmetro URI—
não vai funcionar. Por quê? Alguns caracteres base64 (+, = e /) têm significado especial em uma URL. A ferramenta
c2lint e o compilador de perfil não detectarão esses tipos de problemas.
3. Sempre teste seus perfis, mesmo após pequenas alterações. Se o Beacon não conseguir se comunicar com você,
provavelmente é um problema com seu perfil. Edite-o e tente novamente.
4. Confie na ferramenta c2lint. Esta ferramenta vai além do compilador de perfis. As verificações são fundamentadas
em como essa tecnologia é implementada. Se uma verificação do c2lint falhar, significa que há um problema real com
seu perfil.
77
Machine Translated by Google
www.cobaltstrike.com
etapa {
definir userwx "falso";
set compile_time "14 de julho de 2009 8:14:00";
definir image_size_x86 "512000";
definir image_size_x64 "512000";
definir ofuscar "verdadeiro";
transform-x86 {
prefixe "\x90\x90";
strrep "ReflectiveLoader" "DoLegitStuff";
}
transform-x64 {
# transforma o estágio x64 rDLL
}
O comando prepend insere uma string antes da DLL reflexiva do Beacon. O comando append adiciona
uma string após a DLL Beacon Reflective. Certifique-se de que os dados anexados sejam um código válido
para a arquitetura do palco (x86, x64). O programa c2lint não tem uma verificação para isso. O estreptococo
O comando substitui uma string dentro da DLL reflexiva do Beacon.
O bloco stage aceita comandos que adicionam strings à seção .rdata da DLL Beacon. O comando
string adiciona uma string terminada em zero. O comando stringw adiciona uma string ampla
(codificado em UTF-16LE). O comando data adiciona sua string como está.
78
Machine Translated by Google
www.cobaltstrike.com
O bloco stage aceita várias opções que controlam o conteúdo da DLL do Beacon e fornecem dicas para alterar o
comportamento do Reflective Loader do Beacon:
Clonagem de cabeçalhos PE
O pacote Linux do Cobalt Strike inclui uma ferramenta, peclone, para extrair cabeçalhos de uma DLL e apresentá-
los como um bloco de estágio pronto para uso:
./peclone [/path/to/sample.dll]
Se strrep não for suficiente, defina sleep_mask como true. Isso direciona o Beacon para ofuscar-se na memória antes de
dormir. Depois de dormir, o Beacon se desobstruirá para solicitar e processar tarefas. Os beacons SMB e TCP se ofuscam
enquanto aguardam uma nova conexão ou aguardam dados de sua sessão pai.
Decida o quanto você quer se parecer com uma DLL na memória. Se você quiser permitir uma detecção fácil, defina
stomppe como false. Se você quiser ofuscar levemente sua DLL Beacon na memória, defina
79
Machine Translated by Google
www.cobaltstrike.com
stomppe para verdade. Se você quiser enfrentar o desafio, defina ofuscação como verdadeira. Essa
opção levará muitas etapas para ofuscar seu estágio Beacon e o estado final da DLL na memória.
Defina userwx como false para pedir ao carregador do Beacon para evitar permissões RWX. Segmentos de
memória com essas permissões atrairão atenção extra de analistas e produtos de segurança.
Por padrão, o carregador do Beacon aloca memória com VirtualAlloc. O módulo de pisotear é uma
alternativa para isso. Defina module_x86 como uma DLL que seja cerca de duas vezes maior que a própria
carga útil do Beacon. O carregador x86 do Beacon carregará a DLL especificada, encontrará sua localização
na memória e a substituirá. Esta é uma maneira de situar o Beacon na memória que o Windows associa a
um arquivo no disco. É importante que a DLL escolhida não seja necessária para os aplicativos nos quais
você pretende residir. A opção module_x64 é a mesma história, mas afeta o x64 Beacon.
Se você está preocupado com o estágio Beacon que inicializa a DLL Beacon na memória, defina cleanup
para verdade. Esta opção liberará a memória associada ao estágio Beacon quando não for mais
necessária.
processo-injetar {
# define como a memória é alocada em um processo remoto
defina o alocador "VirtualAllocEx";
transform-x86 {
prefixe "\x90\x90";
}
transform-x64 {
# transforma o conteúdo injetado x64
}
80
Machine Translated by Google
www.cobaltstrike.com
O bloco de injeção de processo aceita várias opções que controlam o processo de injeção de processo em
Baliza:
min_alloc 4096 false Quantidade mínima de memória para solicitar conteúdo injetado
startrwx Use RWX como permissões iniciais para conteúdo injetado. Alternativa é RW.
userwx falso Use RWX como permissões finais para conteúdo injetado.
Alternativa é RX.
Os blocos transform-x86 e transform-x64 bloqueiam o conteúdo injetado pelo Beacon. Esses blocos suportam
dois comandos: prepend e append. O comando prepend insere uma string antes do conteúdo injetado. O
comando append adiciona uma string após o conteúdo injetado. Certifique-se de que os dados anexados sejam
um código válido para a arquitetura do conteúdo injetado (x86, x64). O programa c2lint não tem uma verificação
para isso.
O bloco execute controla os métodos que o Beacon usará quando precisar injetar código em um processo.
Beacon examina cada opção no bloco de execução, determina se a opção é utilizável para o contexto atual, tenta o
método quando é utilizável e passa para a próxima opção se a execução do código não ocorreu. As opções de
execução incluem:
As opções CreateThread e CreateRemoteThread possuem variantes que geram um thread suspenso com o
endereço de outra função, atualizam o thread suspenso para executar o injetado
código e retomar esse segmento. Use a [função] “module!function+0x##” para especificar o endereço inicial a ser
falsificado. Para processos remotos, ntdll e kernel32 são os únicos módulos recomendados para extrair. A parte
opcional 0x## é um deslocamento adicionado ao endereço inicial. Essas variantes funcionam apenas x86 -> x86 e
x64 -> x64.
81
Machine Translated by Google
www.cobaltstrike.com
As opções de execução que você escolher devem cobrir uma variedade de casos de canto. Esses casos de canto incluem
autoinjeção, injeção em processos temporários suspensos, injeção de processo remoto entre sessões, injeção x86 -> x64,
injeção x64 -> x86 e injeção com ou sem passar um argumento. A ferramenta c2lint irá avisá-lo sobre contextos que seu bloco
de execução não cobre.
pós-ex {
# controlar o processo temporário que geramos para
set spawnto_x86 "%windir%\\syswow64\\rundll32.exe";
set spawnto_x64 "%windir%\\sysnative\\rundll32.exe";
As opções spawnto_x86 e spawnto_x64 controlam o processo temporário padrão que o Beacon irá gerar para seus recursos
de pós-exploração. Aqui estão algumas dicas para esses valores:
1. Sempre especifique o caminho completo para o programa que você deseja que o Beacon gere
4. Para um valor x86 spawnto, você deve especificar um programa x86. Para um valor x64 spawnto, você deve
especificar um programa x64.
5. Os caminhos que você especificar (menos o ajuste automático syswow64/sysnative) devem existir em uma
visualização x64 (nativa) e x86 (wow64) do sistema de arquivos.
A opção de ofuscação embaralha o conteúdo das DLLs pós-ex e instala o recurso pós-ex na memória de uma
maneira mais segura para OPSEC. É muito semelhante às opções ofuscate e userwx disponíveis para Beacon por meio do
bloco stage.
82
Machine Translated by Google
www.cobaltstrike.com
A opção smartinject direciona o Beacon para incorporar ponteiros de função chave, como GetProcAddress
e LoadLibrary, em suas DLLs pós-ex da mesma arquitetura. Isso permite que as DLLs pós-ex se iniciem
em um novo processo sem comportamento semelhante ao shellcode que é detectado e mitigado
observando os acessos de memória ao PEB e ao kernel32.dll.
83
Machine Translated by Google
www.cobaltstrike.com
13.2 Relatórios
O Cobalt Strike tem várias opções de relatório para ajudar a entender seus dados e transmitir uma história para seus
clientes. Você pode configurar o título, a descrição e os hosts exibidos na maioria dos relatórios.
Vá para o menu Relatórios e escolha um dos relatórios para gerar. Cobalt Strike exportará seu relatório como um
documento MS Word ou PDF.
84
Machine Translated by Google
www.cobaltstrike.com
Relatório de atividade
O relatório de atividades fornece uma linha do tempo das atividades da equipe vermelha. Cada uma de suas atividades pós-
exploração está documentada aqui.
Relatório de hosts
O relatório de hosts resume as informações coletadas pelo Cobalt Strike host por host.
Serviços, credenciais e sessões também estão listados aqui.
85
Machine Translated by Google
www.cobaltstrike.com
Indicadores de comprometimento
Este relatório se assemelha a um apêndice Indicadores de comprometimento de um relatório de inteligência de ameaças.
O conteúdo inclui uma análise gerada do seu perfil Malleable C2, qual domínio você usou e hashes MD5 para arquivos que
você carregou.
86
Machine Translated by Google
www.cobaltstrike.com
Relatório de sessões
Este relatório documenta os indicadores e a atividade sessão a sessão. Este relatório inclui: o caminho de comunicação
que cada sessão usou para chegar até você, hashes MD5 de arquivos colocados no disco durante essa sessão, indicadores
diversos (por exemplo, nomes de serviço) e uma linha do tempo da atividade pós-exploração. Este relatório é uma
ferramenta fantástica para ajudar uma equipe de defesa de rede a entender toda a atividade do vermelho e combinar seus
sensores com sua atividade.
Engenharia social
O relatório de engenharia social documenta cada rodada de e-mails de spear phishing, quem clicou e o que foi coletado
de cada usuário que clicou. Este relatório também mostra os aplicativos descobertos
pelo criador de perfil do sistema.
87
Machine Translated by Google
www.cobaltstrike.com
Sua imagem personalizada deve ter 1192x257px definida como 300dpi. A configuração de 300 dpi é necessária para
que o mecanismo de relatório renderize sua imagem no tamanho certo.
Você também pode definir uma cor de destaque. Essa cor de destaque é a cor da linha grossa abaixo de sua
imagem na primeira página do relatório. Os links dentro dos relatórios também usam a cor de destaque.
• https://www.cobaltstrike.com/aggressor-script
88
Machine Translated by Google
www.cobaltstrike.com
Ctrl+T em todos os tirar screenshot da guia atual (o resultado é enviado para o servidor da equipe)
Ctrl+Shift+T lugares gráfico tirar screenshot de Cobalt Strike (o resultado é enviado para o servidor da equipe)
Ctrl+W gráfico gráfico abrir a guia atual em sua própria janela
Ctrl+C gráfico gráfico organizar sessões em círculo
Ctrl+H tabelas de organizar sessões em uma hierarquia
Ctrl+Menos gráficos Reduzir o zoom
89