SOC Prime Bias: Critique

05 May 2026 14:05 UTC

« AccountDumpling » : Chasse à la vague de phishing envoyée par Google compromettant plus de 30 000 comptes Facebook

Author Photo
SOC Prime Team linkedin icon Suivre
« AccountDumpling » : Chasse à la vague de phishing envoyée par Google compromettant plus de 30 000 comptes Facebook
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Résumé

Une opération de phishing abuse Google AppSheet pour envoyer des e-mails à l’apparence légitime qui attirent les victimes vers des pages malveillantes hébergées sur Netlify et Vercel. Ces pages collectent les détails complets de récupération de comptes Facebook et les transfèrent à des bots Telegram en temps réel. La campagne a été liée à un individu basé au Vietnam et a déjà entraîné la compromission de plus de 30 000 comptes Facebook. Les comptes volés sont ensuite monétisés via une vitrine qui propose des services de récupération de comptes.

Investigation

Les chercheurs de Guardio ont retracé la chaîne de livraison jusqu’à AppSheet, identifié quatre clusters de phishing distincts et rassemblé des centaines d’URLs d’hébergement malveillantes. Ils ont également extrait des jetons de bots Telegram et des identifiants de chat, relié l’infrastructure à un PDF Canva contenant un nom vietnamien, et analysé la répartition géographique des victimes. Leur recherche a dévoilé un écosystème modulaire dans lequel un groupe développe les kits de phishing, un autre mène les campagnes, et un troisième tire profit de l’accès aux comptes volés.

Atténuation

Les défenseurs devraient bloquer les sous-domaines Netlify et Vercel malveillants connus, surveiller les e-mails générés par AppSheet qui contiennent des liens suspects d’appel à l’action, et détecter les connexions sortantes vers les points de terminaison de l’API des bots Telegram. Les organisations devraient également renforcer la validation autour des connexions et des flux de travail de récupération de Facebook, et exiger une ré-authentification pour les actions de récupération sensibles. Les utilisateurs doivent être rappelés que les e-mails envoyés via les services Google de confiance peuvent encore faire partie d’une tentative de phishing.

Réponse

Les équipes de sécurité devraient alerter sur les e-mails de noreply@appsheet.com qui incluent des liens vers des domaines Netlify, Vercel ou shorten.tv inconnus. Les recherches DNS pour ces domaines devraient être corrélées avec le trafic des bots Telegram pour identifier une possible exfiltration. Si des identifiants ont été volés, les utilisateurs concernés devraient être obligés de réinitialiser leurs mots de passe et tout compte Facebook compromis devrait être examiné immédiatement. Les indicateurs pertinents devraient également être partagés avec le SOC et les canaux de renseignement de menace externes.

"graph TB %% Class definitions classDef action fill:#99ccff %% Nodes action_phishing["<b>Action</b> – <b>T1566 Phishing</b><br/>Phishing via Google AppSheet pour tromper les utilisateurs en révélant des identifiants ou en cliquant sur des liens malveillants."] class action_phishing action action_cloud_abuse["<b>Action</b> – <b>T1496.004 Détournement de ressources : Détournement de service Cloud</b><br/>Abus d’un service de messagerie cloud pour envoyer des e-mails malveillants authentifiés.<br/><b>Technique supplémentaire</b> – <b>T1021.007 Services à distance : Services Cloud</b><br/>Utilisation de services cloud à distance légitimes pour réaliser des activités malveillantes."] class action_cloud_abuse action action_credential_harvest["<b>Action</b> – <b>T1606 Forger des preuves Web</b><br/>Création de pages de récolte d’identifiants hébergées sur Netlify/Vercel.<br/><b>Technique supplémentaire</b> – <b>T1212 Exploitation pour l’accès aux identifiants</b><br/>Exploitation de plateformes web pour capturer les identifiants utilisateurs."] class action_credential_harvest action action_gather_info["<b>Action</b> – <b>T1589 Collecte d’informations sur l’identité des victimes</b><br/>Collecte de données d’identité des victimes.<br/><b>Techniques supplémentaires</b> – <b>T1591.002 Collecte d’informations sur l’organe des victimes : Relations commerciales</b><br/>Collecte de détails sur les relations commerciales.<br/><b>Technique supplémentaire</b> – <b>T1591.004 Collecte d’informations sur l’organe des victimes : Identification des rôles</b><br/>Identification des rôles des victimes au sein de l’organisation."] class action_gather_info action action_exfil_telegram["<b>Action</b> – <b>T1041 Exfiltration via canal C2</b><br/>Exfiltration de données via le canal C2 de Telegram bots.<br/><b>Technique supplémentaire</b> – <b>T1552.001 Identifiants non sécurisés : Identifiants dans les fichiers</b><br/>Récolte des identifiants stockés dans des fichiers."] class action_exfil_telegram action action_facebook_access["<b>Action</b> – <b>T1078 Comptes Valides</b><br/>Utilisation de comptes valides volés pour accéder aux ressources professionnelles de Facebook."] class action_facebook_access action %% Connections action_phishing –>|conduit à| action_cloud_abuse action_cloud_abuse –>|conduit à| action_credential_harvest action_credential_harvest –>|conduit à| action_gather_info action_gather_info –>|conduit à| action_exfil_telegram action_exfil_telegram –>|conduit à| action_facebook_access "

Flux d’attaque

Exécution de la simulation

Prérequis : Le contrôle préalable de la télémétrie et du référentiel doit avoir réussi.

Justification : Cette section détaille l’exécution précise de la technique adversaire (TTP) conçue pour déclencher la règle de détection. Les commandes et le récit DOIVENT directement refléter les TTPs identifiés et viser à générer la télémétrie exacte attendue par la logique de détection. Des exemples abstraits ou non pertinents entraîneront un mauvais diagnostic.

  • Narratif d’Attaque & Commandes :

    1. Reconnaissance : L’attaquant récolte une liste d’adresses e-mails des employés de Facebook à partir de sources publiques.

    2. Configuration de l’abus AppSheet : En utilisant un compte Google Workspace compromis, l’attaquant crée une application AppSheet qui envoie des notifications par e-mail. L’application est configurée pour utiliser le domaine de rebond AppSheet par défaut appsheet.bounces.google.com.

    3. Charge de Phishing : L’e-mail de notification contient un appât (« Votre mot de passe Facebook expire – réinitialisez-le maintenant ») avec un lien malveillant pointant vers une page de collecte d’identifiants.

    4. Lancement de la Campagne : L’attaquant déclenche le flux de travail AppSheet, faisant ainsi envoyer la plateforme l’e-mail conçu à la liste de cibles. Les métadonnées des e-mails résultants correspondent :

      • sender_email = noreply@appsheet.com
      • delivery_domain = appsheet.bounces.google.com
    5. Résultat : La règle SIEM évalue l’entrée de journal entrante, correspond à ces deux champs et génère une alerte.

  • Script de Test de Régression : Le script ci-dessous automatise les étapes 2 à 4 en utilisant l’API Google Apps Script pour émuler une notification de style AppSheet. Il nécessite un JSON de compte de service avec l’autorisation d’envoyer des e-mails via l’API Gmail.

    # python 3.x – envoyer un e-mail de type phishing conçu via l'API Gmail
    import base64, json, sys
    from email.mime.text import MIMEText
    from google.oauth2 import service_account
    from googleapiclient.discovery import build
    
    # ---- Configuration -------------------------------------------------
    SERVICE_ACCOUNT_FILE = "service-account.json"   # <-- remplacer par le chemin
    SCOPES = ["https://www.googleapis.com/auth/gmail.send"]
    SENDER = "noreply@appsheet.com"
    RECIPIENT = "victim@facebook.com"
    SUBJECT = "Important : Action requise sur le compte Facebook"
    BODY = """
    Cher utilisateur de Facebook,
    
    Nos enregistrements indiquent que votre mot de passe expirera dans 24 heures.
    Veuillez le réinitialiser immédiatement en cliquant sur le lien ci-dessous :
    
    https://malicious.example.com/steal?uid=12345
    
    Merci,
    Équipe de sécurité Facebook
    """
    # --------------------------------------------------------------------
    
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)
    
    try:
        service = build('gmail', 'v1', credentials=credentials)
        message = MIMEText(BODY, "plain")
        message["to"] = RECIPIENT
        message["from"] = SENDER
        message["subject"] = SUBJECT
        # Add custom header to mimic AppSheet bounce domain
        message["X-Delivery-Domain"] = "appsheet.bounces.google.com"
    
        raw = base64.urlsafe_b64encode(message.as_bytes()).decode()
        send_body = {"raw": raw}
        result = service.users().messages().send(userId="me", body=send_body).execute()
        print(f"Message sent, ID={result['id']}")
    except Exception as e:
        print(f"Error sending email: {e}", file=sys.stderr)
        sys.exit(1)
  • Commandes de Nettoyage : Supprimer le message de test du dossier de messages envoyés et révoquer le jeton du compte de service.

    # PowerShell – supprimer le message de test du dossier Envoyés de Gmail en utilisant l'API Gmail
    $serviceAccount = "service-account.json"
    $scopes = @("https://www.googleapis.com/auth/gmail.modify")
    $cred = (Get-Content $serviceAccount | ConvertFrom-Json) | `
            New-Object Google.Apis.Auth.OAuth2.ServiceAccountCredential `
                -ArgumentList ([Google.Apis.Auth.OAuth2.ServiceAccountCredential]::Initializer) `
                -Property @{Scopes = $scopes}
    $gmail = New-Object Google.Apis.Gmail.v1.GmailService -ArgumentList $cred
    
    # Récupérer l'identifiant du message (remplacer par l'identifiant réel du script d'envoi)
    $msgId = "INSERT_MESSAGE_ID_HERE"
    $gmail.Users.Messages.Delete("me", $msgId).Execute()
    Write-Host "E-mail de test supprimé."