
Aplicar patch em binários via MITM: BackdoorFactory + mitmProxy.
BLOG: http://secureallthethings.blogspot.com/2017/08/closing-door-end-of-backdoor-factory.html
Apenas para profissionais de segurança e pesquisadores.
###AGORA SÓ FUNCIONA COM v.0.17 >= MITMPROXY >= v.0.11
Docker:
# sudo echo 1 > /proc/sys/net/ipv4/ip_forward # linux
# sudo sysctl -w net.inet.ip.forwarding=1 # macOS
docker pull secretsquirrel/bdfproxy
docker run -it -p 8080:8080 secretsquirrel/bdfproxy bash
# ./bdf_proxy.py
Para instalar no Kali:
apt-get update
apt-get install bdfproxy
Black Hat USA 2015:
Vídeo: https://www.youtube.com/watch?v=OuyLzkG16Uk
Paper: https://www.blackhat.com/docs/us-15/materials/us-15-Pitts-Repurposing-OnionDuke-A-Single-Case-Study-Around-Reusing-Nation-State-Malware-wp.pdf
DerbyCon 2014:
Vídeo: http://www.youtube.com/watch?v=LjUN9MACaTs
A parte do BDFProxy começa por volta dos 18 minutos.
Contate o desenvolvedor em:
IRC:
irc.freenode.net #BDFactory
Twitter:
@midnite_runr
Este script utiliza duas bibliotecas para funcionamento: The Backdoor Factory (BDF) e o mitmProxy.
###Conceito: Aplicar patch em binários durante o download, estilo MITM.
###Por quê: Porque muitos sites de ferramentas de segurança ainda distribuem binários por meios não-SSL/TLS.
Aqui está uma lista resumida:
sysinternals.com
Microsoft - MS Security Essentials
Quase todas as empresas de antivírus
Malwarebytes
Sourceforge
gpg4win
Wireshark
etc...
Sim, alguns desses aplicativos são protegidos por mecanismos de autoverificação. Tenho trabalhado em uma forma de contornar automaticamente as verificações do NSIS como prova de conceito. No entanto, isso não resolve o problema inicial de inversão de bits durante o download e a execução de uma carga maliciosa. Além disso, o BDF por padrão removerá o ponteiro da tabela de certificados PE do Windows durante o download, eliminando assim a assinatura do binário.
##Dependências:
Pefile - mais recente
ConfigObj
mitmProxy - Build do Kali .10
BDF - mais atual
Capstone (parte do BDF)
##Ambiente Suportado: Testado em todas as versões do Kali Linux, seja um laptop físico robusto, um Raspberry Pi ou uma VM, todos podem executar o BDFProxy.
##Instalação: O BDF está em bdf/
Execute o seguinte para obter a versão mais recente:
./install.sh
OU:
git clone https://github.com/secretsquirrel/the-backdoor-factory bdf/
Se você obtiver um erro de certificado, execute o seguinte:
mitmproxy
E saia com [Ctr+C] após o mitmProxy carregar.
##Uso: Atualize tudo antes de cada uso:
./update.sh
LEIA A CONFIGURAÇÃO!!!
-->bdfproxy.cfg
Você precisará configurar as configurações de host e porta do C2 antes de executar o BDFProxy. NÃO sobreponha as configurações de PORTA do C2 entre diferentes payloads. Você estará enviando shells Linux para máquinas Windows e as coisas estarão causando segfaults por todo lado. Após a execução, um script de recurso do Metasploit será criado para ajudar a configurar suas comunicações C2. Verifique-o com cuidado. A propósito, tudo fora da seção [Overall] é atualizado em tempo real, então você não precisa matar o proxy para alterar configurações de acordo com seu ambiente.
Mas espere! Você precisará configurar sua máquina mitm para fazer mitm! Se você estiver usando um wifiPineapple, modifiquei um script lançado pela hack5 para ajudar na configuração. Execute ./wpBDF.sh e insira as configurações corretas para seu ambiente. Este script configura o iptables para encaminhar apenas tráfego http (não-ssl) através do proxy. Todo o outro tráfego é encaminhado normalmente.
Então:
./bdf_proxy.py
Aqui está um belo ascii art para possíveis configurações físicas do proxy:
Uso em LAN:
<Internet>----<mitmMachine>----<userLan>
Uso via WiFi:
<Internet>----<mitmMachine>----<wifiPineapple>))
##Testando:
Suponha que você queira usar seu navegador com Firefox e FoxyProxy para testar sua configuração.
Atualize sua configuração da seguinte forma:
transparentProxy = None
Configure o FoxyProxy para usar o BDFProxy como proxy.
A porta padrão na configuração é 8080.
##Registro de Logs:
Nós temos. A janela do proxy rapidamente se encherá com grandes quantidades de links de gato, dependendo do cliente que você está testando. Use tail -f proxy.log para ver o que está sendo corrigido e bloqueado pelas suas configurações de blacklist. No entanto, fique de olho na janela principal do proxy se você escolheu corrigir binários manualmente, as coisas acontecem rápido e nos bastidores há multi-threading de tráfego, mas as solicitações e respostas iniciais são travadas para sua apreciação.
##Cenários de Ataque (todos com permissão dos alvos): -Ponto de Acesso WiFi Maligno -Redirecionamento ARP -Instalação física em um closet de cabeamento -Instalação lógica no seu ISP favorito
##Relatório de Bugs
Bugs acontecem, mas se eu não conseguir entender seu problema, não posso ajudá-lo.
Envie problemas aqui: https://github.com/secretsquirrel/BDFProxy/issues
Inclua as seguintes informações da saída destes comandos (use pastebin para os comandos mais longos):
# bdfproxy only supports v11 -> v17
$ mitmproxy --version
$ uname -a
# Use pastebin perhaps
$ cat bdfproxy.cfg
$ ./bdf_proxy.py
###Registro de Alterações:
####07/04/2016
Suporte para o pré-processador do BDF e mitmProxy v17
####12/20/2015
Adicionadas opções de configuração no bdfproxy.cfg para suportar assinatura de código PE do BDF => CODE_SIGN Consulte o README do BDF para detalhes
####11/13/2015
Removidas as dependências do python-magic porque existem duas bibliotecas com esse nome. O que é confuso.
####10/19/2015
Adicionado suporte para o patching do diretório de importações do BDF em um code cave em vez de uma nova seção. Atualize IDA_IN_CAVE para True no arquivo bdfproxy.cfg para isso. EXPERIMENTAL...
####8/12/2015
Adicionado suporte para o método PE replace, substituindo o binário baixado por um fornecido pelo atacante. Para usar, altere PATCH_METHOD para replace e forneça um SUPPLIED_BINARY
####8/6/2015
Adicionado suporte ao onionduke. Para usar, altere PATCH_METHOD para onionduke e SUPPLIED_BINARY para o binário que você deseja vincular ao executável alvo.
Adicionado suporte para definir a verificação e o patching do requestedExecutionLevel no manifesto PE como highestAvailable para binários PE x86 e x86_64. Defina RUNAS_ADMIN como True.
Adicionado suporte para definir se deseja suportar máquinas legadas com XP através da flag XP_MODE como True. Isso pode ter evasão contra AVs, pois os emuladores deles podem falhar se essa configuração estiver definida como FALSE.