Introdução
Em testes de penetração, após obter acesso inicial a um sistema alvo com uma ferramenta como o Metasploit, a conexão estabelecida (ou "sessão") geralmente reside dentro do processo que foi inicialmente explorado. Este pode ser um navegador web, um leitor de documentos ou outra aplicação do usuário. Esses processos podem ser instáveis ou podem ser fechados pelo usuário a qualquer momento, o que encerraria sua sessão.
A migração de processo é a técnica de mover sua sessão deste processo inicial, potencialmente instável, para um processo mais estável e de longa execução, como um processo do sistema central. Isso aumenta significativamente a estabilidade e a persistência do seu acesso. Também pode ajudar a evadir a detecção, pois seu código malicioso ficará oculto dentro de um processo legítimo e confiável.
Neste laboratório, você aprenderá o fluxo de trabalho fundamental da migração de um processo Meterpreter. Embora estejamos em um ambiente Linux, simularemos os passos que você tomaria em um sistema comprometido para entender essa técnica crucial de pós-exploração.
Obter uma lista de processos em execução com o comando ps
Nesta etapa, sua primeira tarefa após obter um shell é inspecionar o sistema. Você precisa ver quais processos estão em execução para identificar alvos potenciais para migração. Em uma sessão real do Meterpreter, você usaria o comando ps diretamente no prompt do Meterpreter.
Como estamos simulando isso em um terminal Linux padrão, usaremos o comando ps do Linux com as flags aux para obter uma lista detalhada de todos os processos em execução. Isso lhe dará uma saída semelhante ao que você veria em um cenário real.
Execute o seguinte comando em seu terminal para listar todos os processos em execução:
ps aux
Você verá uma longa lista de processos. Preste atenção a estas colunas:
USER: O usuário que possui o processo.PID: O ID do Processo (Process ID), um número único que identifica o processo.COMMAND: O comando que iniciou o processo.
Aqui está um exemplo truncado da saída:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 169444 13136 ? Ss 01:23 0:02 /sbin/init
labex 10121 0.1 0.2 886980 89284 ? Sl 01:25 0:05 /usr/lib/firefox/firefox
labex 10345 0.0 0.0 243356 25980 ? S 01:26 0:00 /usr/lib/xfce4/panel/wrapper-2.0
...
Esta lista fornece as informações necessárias para começar a procurar um processo adequado para migrar.
Identificar um processo estável para migrar, como explorer.exe
Nesta etapa, você analisará a lista de processos da etapa anterior para selecionar um alvo adequado para migração. Um bom processo alvo deve ser:
- Estável: Deve ser um processo que é executado durante toda a sessão do usuário ou o tempo de atividade do sistema.
- Privilégios Apropriados: Deve ser executado com os mesmos privilégios ou privilégios superiores aos da sua sessão atual.
- Arquitetura Correta: Deve corresponder à arquitetura (32 bits ou 64 bits) do seu payload Meterpreter.
Em um sistema Windows comprometido, um exemplo clássico de processo estável é o explorer.exe, que gerencia a interface gráfica (desktop, barra de tarefas, etc.) e está quase sempre em execução quando um usuário está logado. Outro alvo comum é o svchost.exe.
Em nosso ambiente de laboratório Linux, simularemos isso identificando um processo estável semelhante, pertencente ao usuário. Olhando a saída do ps aux, um processo como xfce4-panel (o painel do desktop XFCE) é um bom candidato.
Vamos usar o grep para filtrar a lista de processos e encontrar facilmente o processo xfce4-panel. Isso o ajudará a identificar seu ID de Processo (PID).
ps aux | grep xfce4-panel
Sua saída deve ser algo parecido com isto. A segunda coluna contém o PID.
labex 10345 0.0 0.0 243356 25980 ? S 01:26 0:00 /usr/lib/xfce4/panel/wrapper-2.0
labex 12345 0.0 0.0 12345 1234 pts/0 S+ 01:30 0:00 grep --color=auto xfce4-panel
Neste exemplo, o PID para xfce4-panel é 10345. Seu PID será diferente. Você agora identificou um alvo para migração.
Usar o comando migrate com o PID do processo alvo
Nesta etapa, você usará o comando principal do Meterpreter para migração de processos: migrate. A sintaxe do comando é direta: migrate <PID>. Você simplesmente fornece o PID do processo para o qual deseja migrar.
Como estamos em um ambiente simulado e não temos uma sessão ativa do Meterpreter, não podemos executar o comando migrate diretamente. Em vez disso, simularemos essa ação encontrando o PID do nosso processo alvo (xfce4-panel) e escrevendo o comando migrate correspondente em um arquivo de texto.
Primeiro, vamos obter o PID do processo xfce4-panel e armazená-lo em uma variável. O comando pgrep é perfeito para isso.
PID=$(pgrep xfce4-panel | head -n 1)
Este comando encontra o PID do xfce4-panel e o armazena na variável PID. Agora, simule o comando migrate ecoando-o em um arquivo chamado simulated_command.txt.
echo "migrate $PID" > simulated_command.txt
Vamos visualizar o arquivo para confirmar se nosso comando simulado está correto.
cat simulated_command.txt
A saída deve mostrar o comando migrate seguido pelo PID do processo xfce4-panel.
migrate 10345
Você agora simulou com sucesso a execução do comando migrate.
Verificar se a migração foi bem-sucedida
Nesta etapa, você aprenderá como confirmar que a migração de processo foi bem-sucedida. Após executar o comando migrate em uma sessão real do Meterpreter, você precisa verificar se sua sessão agora está sendo executada dentro do novo processo alvo.
O comando para isso é getpid. Antes da migração, getpid retorna o PID do processo original e vulnerável. Após uma migração bem-sucedida, getpid retornará o PID do novo processo estável para o qual você migrou.
Para simular essa verificação, primeiro exibiremos qual seria a saída do getpid. Podemos fazer isso imprimindo o PID do nosso processo alvo, xfce4-panel, que identificamos anteriormente.
Execute o seguinte comando para simular a verificação:
echo "Verification: If migration were real, 'getpid' would now return $(pgrep xfce4-panel | head -n 1)"
A saída será uma mensagem de confirmação mostrando o PID alvo:
Verification: If migration were real, 'getpid' would now return 10345
Ao comparar a saída do getpid antes e depois da migração, um penetration tester pode ter confiança de que sua sessão está agora mais estável e segura dentro do novo processo.
Discutir a importância da migração de processos
Nesta etapa final, resumiremos as razões críticas pelas quais a migração de processos é uma técnica fundamental na pós-exploração. Entender o "porquê" é tão importante quanto saber o "como".
Existem duas motivações principais para migrar o processo Meterpreter:
Estabilidade e Persistência: Esta é a razão mais comum. O exploit inicial geralmente tem como alvo uma aplicação de nível de usuário, como um navegador web ou um leitor de PDF. Se o usuário fechar essa aplicação, sua sessão Meterpreter será imediatamente encerrada. Ao migrar para um processo de sistema central e de longa execução (como
explorer.exeno Windows), sua sessão fica vinculada à sessão de login do usuário ou até mesmo ao tempo de atividade do sistema, tornando-a muito mais persistente e confiável.Discrição e Evasão: Um processo comprometido como
firefox.exefazendo conexões de rede incomuns pode ser um sinal de alerta para firewalls, sistemas de detecção de intrusão (IDS) e analistas de segurança. No entanto, espera-se que um processo comosvchost.exe(o processo Service Host no Windows) faça conexões de rede. Ao ocultar sua sessão dentro de tal processo, seu tráfego de rede tem menos probabilidade de ser examinado, permitindo que você opere com maior discrição.
Um benefício secundário pode, às vezes, ser a escalada de privilégios. Se você puder migrar de um processo em execução como um usuário padrão para um processo em execução com privilégios SYSTEM ou root, você efetivamente escalará suas próprias permissões na máquina alvo.
Dominar a migração de processos é um passo chave para ir além do simples acesso e manter um controle estável e de longo prazo sobre um sistema alvo.
Resumo
Neste laboratório, você percorreu os conceitos essenciais e o fluxo de trabalho da migração de processos do Meterpreter. Embora conduzido em um ambiente Linux simulado, você aprendeu os passos universais envolvidos nesta técnica crítica de pós-exploração.
Você aprendeu como:
- Listar processos em execução para pesquisar o sistema alvo usando o comando
ps. - Identificar as características de um processo estável adequado para migração.
- Simular o uso do comando Meterpreter
migrate <PID>para mover a sessão. - Entender como o comando
getpidé usado para verificar uma migração bem-sucedida.
Mais importante, você agora entende que a migração de processos é crucial para garantir a estabilidade e a discrição do seu acesso durante um teste de penetração, transformando um ponto de acesso frágil em uma presença persistente.


