O Svchost é essencial na implementação dos chamados processos de serviços partilhados, onde vários serviços podem partilhar um processo para reduzir o consumo de recursos. Agrupar vários serviços em um único processo conserva os recursos computacionais, e esta consideração foi de particular preocupação para os projetistas do NT porque a criação de processos do Windows leva mais tempo e consome mais memória do que em outros sistemas operacionais, por exemplo, na família Unix. 1
Isso significa brevemente isso; Nos sistemas operacionais Windows, svchost.exe gerencia os serviços e os serviços estão sendo executados em svchost.exe como threads. Phant0m tem como alvo o serviço Log de Eventos e encontrando o processo responsável pelo serviço Log de Eventos, ele detecta e elimina os threads responsáveis pelo serviço Log de Eventos. Assim, embora o serviço Log de eventos pareça estar em execução no sistema (porque o Phant0m não eliminou o processo), ele na verdade não é executado (porque o Phant0m eliminou threads) e o sistema não coleta logs.
Phant0m usa duas opções diferentes para detectar o ID do processo do serviço Log de eventos. A primeira é detectar via SCM (Service Control Manager) e a segunda é detectar via WMI (Windows Management Instrumentation). Com qual método você deseja que o Phant0m detecte o ID do processo do serviço Log de eventos, altere as seguintes linhas no arquivo main.cpp.
Por exemplo, se quiser que o ID do processo seja detectado via SCM, você deve editá-lo da seguinte maneira. (Não defina todos os valores ao mesmo tempo, defina apenas a técnica desejada.)
// PID detection techniques configuration section.
# define PID_FROM_SCM 1 // If you set it to 1, the PID of the Event Log service is obtained from the Service Manager.
# define PID_FROM_WMI 0 // If you set it to 1, the PID of the Event Log service is obtained from the WMI.Por exemplo, se você deseja que os threads sejam eliminados usando a Técnica-1, você deve editá-los da seguinte maneira. (Não defina todos os valores ao mesmo tempo, defina apenas a técnica desejada.)
// TID detection and kill techniques configuration section.
# define KILL_WITH_T1 1 // If you set it to 1, Technique-1 will be use. For more information; https://github.com/hlldz/Phant0m
# define KILL_WITH_T2 0 // If you set it to 1, Technique-2 will be use. For more information; https://github.com/hlldz/Phant0m Phant0m usa duas opções diferentes para detectar e eliminar os threads do serviço Log de Eventos.
Quando cada serviço é registrado em uma máquina que executa o Windows Vista ou posterior, o Service Control Manager (SCM) atribui uma tag numérica exclusiva ao serviço (em ordem crescente). Então, no momento da criação do serviço, a tag é atribuída ao TEB da thread de serviço principal. Essa tag será então propagada para cada thread criado pelo thread de serviço principal. Por exemplo, se o thread de serviço Foo criar um thread de trabalho RPC (nota: os threads de trabalho RPC não usam o mecanismo de pool de threads mais sobre isso posteriormente), esse thread terá a etiqueta de serviço do serviço Foo. 2
Portanto, nesta técnica o Phant0m detectará threads do serviço Log de Eventos com a API NtQueryInformationThread para obter o endereço TEB do thread e ler o SubProcessTag do TEB. Em seguida, ele elimina os threads relacionados ao serviço Log de Eventos. Os códigos para esta técnica estão no arquivo the technique_1.h .
Nesta técnica, o Phant0m detecta os nomes das DLLs associadas aos threads. O serviço de log de eventos do Windows usa wevtsvc.dll . O caminho completo é %WinDir%System32wevtsvc.dll . Se o thread estiver usando essa DLL, é o thread do serviço de log de eventos do Windows e então Phant0m mata o thread. Os códigos para esta técnica estão no arquivo the technique_2.h .
Você pode usar o Phant0m como um EXE independente e como uma DLL reflexiva. Abra o projeto no Microsoft Visual Studio, faça as configurações (selecione as técnicas de detecção e eliminação) e compile. Você também pode usar a versão Reflective DLL com Cobalt Strike, para isso existe um arquivo Aggressor Script (phant0m.cna) no repositório.
O método Fork and Inject foi usado com bdllspawn no tipo de execução do Aggressor Script (phant0m.cna) para Cobalt Strike. Se quiser injetar Phant0m em seu processo existente e executá-lo, você pode revisar este projeto (https://github.com/rxwx/cs-rdll-ipc-example) e pode fazer isso facilmente. Você também pode converter o código em DLL e depois em Shellcode com Donut.
NOTA: O projeto suporta apenas arquitetura x64.