Escrevemos o proxy reverso socks5 no PowerShell.

A história da pesquisa e desenvolvimento em 3 partes. Parte 1 - pesquisa.
Existem muitas faias - ainda mais benefícios.

Declaração do problema


Durante a realização de campanhas de protestos e RedTeam, nem sempre é possível usar os meios regulares dos clientes, como VPN, RDP, Citrix, etc. como uma correção para entrar na rede interna. Em algum lugar, uma VPN normal funciona de acordo com o MFA e um token de ferro é usado como segundo fator; em algum lugar é monitorado severamente e nossa entrada na VPN se torna imediatamente visível, como se costuma dizer - com todas as consequências, mas em algum lugar simplesmente não existe esse meio.

Nesses casos, constantemente é necessário fazer os chamados "túneis reversos" - conexões da rede interna a um recurso externo ou ao servidor que controlamos. Dentro desse túnel, já podemos trabalhar com os recursos internos dos clientes.

Existem várias variedades desses túneis reversos. O mais famoso deles, é claro, é o Meterpreter. Os túneis SSH com encaminhamento de porta reversa também estão em grande demanda entre as massas hackers. Existem muitas ferramentas de encapsulamento reverso e muitas delas são bem estudadas e descritas.

Naturalmente, por sua vez, os desenvolvedores de soluções de proteção não permanecem e detectam ativamente tais ações.

Por exemplo, as sessões de MSF são detectadas com êxito pelo IPS moderno da Cisco ou da Positive Tech, e o túnel SSH reverso pode ser detectado por quase qualquer firewall mais ou menos normal.

Portanto, para passar despercebido em uma boa campanha RedTeam, precisamos construir um túnel reverso com meios não padronizados e nos adaptar o mais próximo possível ao modo real da rede.

Vamos tentar encontrar ou inventar algo semelhante.

Antes de inventar algo, você precisa entender qual resultado queremos alcançar, quais funções nosso desenvolvimento deve executar. Quais serão os requisitos para o túnel para que possamos trabalhar no modo furtivo máximo?

É claro que, para cada caso, esses requisitos podem diferir bastante, mas da experiência podemos distinguir os principais:

  • trabalhar no sistema operacional Windows-7-10. Como a maioria das redes corporativas usa o Windows;
  • o cliente se conecta ao servidor via SSL para evitar escutas estúpidas usando ips;
  • ao conectar, o cliente deve suportar a operação através de um servidor proxy com autorização, conforme Muitas empresas acessam a Internet através de um proxy. De fato, a máquina cliente pode nem saber nada sobre ela, e o proxy é usado em um modo transparente. Mas devemos colocar essa funcionalidade;
  • a parte do cliente deve ser concisa e portátil;
    É claro que, para trabalhar dentro da rede do Cliente na máquina do cliente, você pode instalar o OpenVPN e criar um túnel completo para o seu servidor (já que os clientes openvpn podem trabalhar com proxies). Mas, em primeiro lugar, isso nem sempre funciona, já que talvez não sejamos administradores locais e, em segundo lugar, fará tanto barulho que um SIEM ou HIPS decente imediatamente nos "baterá". Idealmente, nosso cliente deve ser o chamado comando embutido, por exemplo, muitos shells bash são implementados e executados na linha de comando, por exemplo, ao executar comandos a partir de uma macro de palavras.
  • nosso túnel deve ser multithread e suportar muitas conexões ao mesmo tempo;
  • A conexão cliente-servidor deve ter algum tipo de autorização para que o túnel seja estabelecido apenas para nosso cliente, e não para todos que acessam nosso servidor no endereço e porta especificados. Idealmente, para "usuários de terceiros", uma página de destino com selos ou tópicos profissionais relacionados ao domínio de origem deve ser aberta.
    Por exemplo, se o Cliente for uma organização médica, deverá abrir o administrador de segurança da informação que decidiu verificar o recurso usado pelo funcionário da clínica, uma página com produtos farmacêuticos, uma wiki com uma descrição do diagnóstico ou um blog do Dr. Komarovsky, etc.

Análise de ferramentas existentes


Antes de inventar sua bicicleta, você precisa analisar as bicicletas existentes e entender se realmente precisamos dela e, provavelmente, não apenas pensamos na necessidade de uma bicicleta tão funcional.

Pesquisando na Internet (parece que estamos bem com o google), além de pesquisar no github as palavras-chave “meias reversas”, não deu muitos resultados. Basicamente, tudo se resume à construção de túneis ssh com encaminhamento de porta reversa e tudo relacionado a ele. Além dos túneis SSH, várias soluções podem ser distinguidas:

github.com/klsecservices/rpivot
Uma implementação de longa data do túnel reverso dos caras da Kaspersky Lab. Pelo nome, fica claro para que serve esse script. Implementado no Python 2.7, o túnel é executado no modo de texto não criptografado (como está na moda dizer agora - olá para ILV)

github.com/tonyseek/rsocks
Outra implementação python também está em texto não criptografado, mas há mais opções. Ele é escrito como um módulo e existe uma API para integrar a solução em seus projetos.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
O primeiro link é a versão inicial da implementação do Sox reverso no Golang (não suportado pelo desenvolvedor).

O segundo link já é nossa revisão com fichas adicionais, também no golang. Em nossa versão, implementamos SSL, trabalhamos através de um proxy com autorização NTLM, autorização de cliente, uma página de destino com uma senha incorreta (ou melhor, um redirecionamento para uma página de destino), modo multiencadeado (ou seja, várias pessoas podem trabalhar com o túnel ao mesmo tempo) , um sistema de ping do cliente, esteja ativo ou não.

github.com/jun7th/tsocks
Implementação reversa do Sox de nossos "amigos chineses" em python. Lá, para os preguiçosos e os "imortais", jaz o binário pronto (exe), montado pelos chineses e pronto para uso. Aqui, apenas o deus chinês sabe que pode haver mais do que a principal funcionalidade deste binário, portanto, use-o por sua própria conta e risco.

github.com/securesocketfunneling/ssf
Um projeto C ++ bastante interessante para implementar meias reversas e muito mais. Além do túnel reverso, ele pode encaminhar portas, criar um shell de comando etc.

Msf meterpreter
Aqui, como se costuma dizer, sem comentários. Todos os hackers mais ou menos instruídos estão muito familiarizados com essa coisa e compreendem com que facilidade ela pode ser detectada por equipamentos de proteção.

Todas as ferramentas acima funcionam em uma tecnologia semelhante: em uma máquina dentro da rede, é lançado um módulo binário executável pré-preparado, que estabelece uma conexão com um servidor externo. O servidor inicia o servidor SOCKS4 / 5, que aceita conexões e as converte no cliente.

A desvantagem de todas as ferramentas acima é que o Python ou Golang é necessário na máquina cliente (você costumava ver o Python instalado em máquinas, por exemplo, diretores de empresas ou trabalhadores de escritório?) Ou precisa arrastar um binário pré-montado para essa máquina (na verdade, python e o script em uma garrafa) e execute este binário já lá. E o download do exe com o lançamento subsequente também é a assinatura de um antivírus ou HIPS local.

Em geral, a conclusão se sugere - precisamos de uma solução no PowerShell. Agora, os tomates voam até nós - dizem powershell - estão surrados, estão sendo monitorados, bloqueados etc. etc. De fato - não em todo lugar. Declaramos com responsabilidade. A propósito, existem várias maneiras de ignorar os bloqueios (aqui novamente a frase da moda sobre olá para ILV :)), começando com a renomeação estúpida de powershell.exe -> cmdd.exe e terminando com powerdll, etc.

Comece a inventar


É claro que primeiro procuraremos no Google e ... não encontraremos nada sobre esse tópico (se alguém tiver encontrado, gere links para comentários). Existe apenas uma implementação do Socks5 no PowerShell, mas esse é o Sox "direto" usual, que tem várias desvantagens (falaremos sobre isso mais tarde). É claro que você pode transformá-lo ao contrário com um movimento do pulso, mas será apenas um sox de rosca única, que não é exatamente o que precisamos para nós.

Então, não encontramos nada pronto, então ainda temos que inventar nossa bicicleta. Como base da nossa bicicleta, adotamos o desenvolvimento de meias reversas no golang e implementamos o cliente no PowerShell.

RSocksTun

Então, como o rsockstun funciona?

No coração do trabalho do RsocksTun (daqui em diante referido como rs) estão dois componentes de software - o servidor Yamux e o Socks5. O servidor Socks5 é um socks5 local regular, é executado no cliente. E a multiplexação de conexões com ele (lembra-se do multithreading?) É fornecida usando o yamux ( mais um multiplexador ). Esse esquema permite executar vários servidores de meias5 do cliente e distribuir conexões externas a eles, encaminhando-os através de uma única conexão TCP (quase como no medidor) do cliente para o servidor, realizando o modo multithread, sem o qual simplesmente não podemos trabalhar totalmente no ambiente interno. rede.

A essência do yamux é que ele introduz um nível de rede adicional de fluxos, realizando-o como um cabeçalho de 12 bytes para cada pacote. (Aqui, intencionalmente, usamos a palavra "fluxo", não um fluxo, para não confundir o leitor com o thread do programa "thread" - este conceito também usaremos neste artigo). Dentro do cabeçalho do yamux contém o número do fluxo, sinalizadores para definir / finalizar o fluxo, o número de bytes transferidos, o tamanho da janela de transferência.



Além de instalar / concluir o fluxo, o yamux implementa um mecanismo de manutenção de atividade que permite monitorar a integridade do canal de comunicação instalado. O mecanismo de mensagens de manutenção é configurado ao criar uma sessão do Yamux. Na verdade, nas configurações, existem apenas dois parâmetros: ativar / desativar e a frequência do envio de pacotes em segundos. O servidor yamux pode enviar mensagens keepalive, para que o cliente yamux possa. Após o recebimento de uma mensagem keepalive, a parte remota é obrigada a responder enviando exatamente o mesmo identificador de mensagem (na verdade, um número) que recebeu. Em geral, keepalive é o mesmo ping, apenas para o yamux.

Toda a técnica de operação do multiplexador é detalhada: tipos de pacotes, sinalizadores de instalação e finalização, mecanismo de transferência de dados descrito na especificação yamux.

Conclusão para a primeira parte


Assim, na primeira parte do artigo, nos familiarizamos com algumas ferramentas para organizar túneis reversos, analisamos suas vantagens e desvantagens, estudamos o mecanismo de operação do multiplexador Yamux e descrevemos os requisitos básicos para o módulo PowerShell recém-criado. Na próxima parte, desenvolveremos o próprio módulo, praticamente do zero. Para ser continuado. Não mude :)

Source: https://habr.com/ru/post/pt453870/


All Articles