Como um invasor pode abusar do TeamViewer, rodando-o de forma oculta e arbitrária

Vinícius K-Max
4 min readJun 1, 2018

--

Durante um pentest em um ambiente Windows, após o acesso inicial, provavelmente o invasor desejará ganhar acesso gráfico ao sistema. Geralmente a primeira escolha é o acesso por RDP (Remote Desktop), recurso nativo do Windows e que mesmo desativado, pode ser facilmente ativado e ter sua porta desbloqueada por um atacante com acesso administrativo.

Acontece que não raramente o acesso ao RDP está bloqueado por um firewall no nível de rede, e não apenas pelo firewall do Windows. Nesses casos, uma alternativa usando o Metasploit é invocar o comando run vnc dentro de uma sessão do meterpreter. Entretanto, ao usar esse comando é comum enfrentarmos certas dificuldades, pois ele cria binários nativamente gerados pelo Metasploit que costumam ser detectados por muitos AVs. Uma solução pode ser executar o payload do run vnc diretamente na memória com opção –i isomada a opção -t, que "tunnela" a tráfego do VNC através da conexão já existente do meterpreter. Acontece que esse tunnelamento pode tornar o VNC lento o bastante pra seu uso ser impraticável em algumas situações.

Mas há alternativas.

TeamViewer sorrateiro

O TeamViewer é aparentemente a ferramenta mais popular do mundo para suporte e acesso remoto, notória por permitir acesso a diversos OSs em apenas alguns segundos, informando ID e senha. Sua versão mais leve é a TeamViewer QS (QuickSupport), entregue como um único executável que oferece basicamente a funções mais populares, como cópia de arquivos e acesso gráfico ao sistema.

Nesse post, nosso objetivo é executar essa versão do TV de forma sorrateira, ou seja, oculta do desktop alvo. Em seguida, vamos extrair da memória do TeamViewer o ID e Senha necessários para que possamos nos conectar.

Para esse ataque, precisamos de uma cópia do TeamViewerQS. Por ser muito mais leve que as versões mais atuais, eu recomendo o uso da versão 7 — antiga mas que funciona normalmente todas as versões recentes do Windows. Precisamos também do executável nircmdc.exe e compilar uma cópia do TeamViewer-dumper (aqui tratado como TeamViewerDumpQS), além de uma sessão do meterpreter ativa na máquina alvo.

Download

TeamViewerQS — https://www.teamviewer.com/pt/download/old-versions.aspx - version7

nircmdc — http://www.nirsoft.net/utils/nircmd.html

TeamViewer-dumper — https://github.com/kkar/TeamViewer-dumper-in-CPP

Os executáveis nircmdc.exe e TeamViewerDumpQS.exe devem estar presentes no sistema do atacante no diretório local do Metasploit, e felizmente nunca tocarão o disco do sistema alvo pois serão executados diretamente na memória, dificultando a detecção por parte da maioria dos antivirus.

Let’s do this

Uma vez dentro da sessão do meterpreter, é fundamental estarmos no contexto de um usuário logado no desktop, para que o TeamViewer possa funcionar corretamente. Podemos nos certificar disso roubando o token do usuário alvo através do comando steal_token ou migrando para um processo em seu contexto através de migrate.

Em seguida, copiamos o TeamViewerQS.exe para a máquina remota através do comando upload e executamos com execute somado a opção –t, que instrui o meterpreter a rodar o binário sob os tokens do usuário atual.

Atenção, nesse momento o TeamViewer ficará visível ao usuário durante alguns segundos. Portanto é importante executá-lo apenas no instante onde o usuário não está utilizando o sistema e rapidamente invocar o comando abaixo para ocultar a janela do TeamViewer.

O comando acima dispara o nircmd.exe dentro do cmd.exe por meio do ataque conhecido Process Hollowing, que permite substituir a memória de um executável legítimo e já presente no sistema alvo por outro arbitrário. Desta forma, o cmd será o único binário que aparecerá como um novo processo no sistema alvo. A opção –H executa o cmd oculto do desktop e a –m determina que o binário nircmdc.exe, informado via –f, seja executado diretamente na memória do processo cmd.exe. Por fim, a opção –a permite passar argumentos de linha de comando. No caso, passamos win hide class #32770, comando que deve ocultar a janela do TeamViewerQS.

Em seguida, executamos da mesma forma o binário TeamViewerDumpQS.exe para extrair via Window Messages o ID e a senha gerados no momento da execução do TeamViewer. Note que adicionamos –i e –c para interagir com o processo e receber de volta os almejados ID e PASS.

Missão cumprida. Com as credenciais em mãos, basta conectar no sistema alvo. Após a conexão, podemos ainda executar o comando abaixo para ocultar a pequena janela do TeamViewer que informa e controla uma conexão em andamento.

Conclusão

Nesse post vimos como executar de forma arbitrária e invisível ao usuário o TeamViewer, um programa legítimo, digitalmente assinado, e portanto amigável a 100% dos antivirus, além de geralmente ser liberado em firewalls no nível da aplicação e da rede, garantindo o acesso ao desktop a um invasor remoto.

Me siga aqui ou no twitter em @viniciuskmax para ser avisado dos próximos posts.

Bom hacking e até a próxima.

--

--

Vinícius K-Max

Desde 1999 consagrando o tempo e o estudo necessário para obter o domínio da arte do Pentesting. Analista de cibersegurança e pentester na MIDRI.com.br