⚠️ LAB ÉDUCATIF – Utilisation exclusive dans un cadre légal. Toute fraude est sévèrement punie par la loi.

🧪 Lab Escrow – Du fonctionnement légitime au piège criminel : apprenez à analyser, auditer et remonter jusqu'aux fraudeurs

Une section spéciale de pctamalou.fr. Montez votre laboratoire, simulez une arnaque, et devenez incollable sur la sécurité des services de séquestre.

Escrow Fraude Docker Python Blockchain OSINT Forensics API Security

1. Qu'est-ce que l'escrow et pourquoi c'est une cible privilégiée

Un service d'escrow (ou séquestre) agit comme un tiers de confiance entre deux parties qui ne se connaissent pas. L'acheteur verse les fonds à l'escrow, qui les conserve jusqu'à ce que le vendeur ait rempli ses obligations (livraison, prestation). L'argent n'est libéré qu'à la validation de l'acheteur. Ce mécanisme réduit le risque d'escroquerie, mais il concentre la confiance (et l'argent) sur une seule plateforme. C'est précisément cette concentration qui attire les criminels : compromettre ou imiter un escrow donne accès à des flux financiers importants.

graph LR A[Acheteur] -->|1. Envoi des fonds| E[Plateforme Escrow] E -->|2. Confirmation du dépôt| B[Vendeur] B -->|3. Livraison du bien| A A -->|4. Validation| E E -->|5. Libération des fonds| B

Dans ce tutoriel, nous allons explorer à la fois le fonctionnement technique d'un escrow légitime, les techniques frauduleuses qui le détournent, et surtout comment, en tant que professionnel de la cybersécurité, vous pouvez auditer ces systèmes, détecter les faux escrows et identifier leurs auteurs.

Objectifs pédagogiques :
  • Comprendre l'architecture d'un service d'escrow
  • Mettre en place un laboratoire isolé pour simuler des fraudes
  • Analyser les traces laissées par les escrocs (réseau, blockchain, OSINT)
  • Appliquer des méthodes d'enquête numérique pour remonter jusqu'aux fraudeurs

2. Fonctionnement technique d'un service d'escrow moderne

2.1 Acteurs et flux

Un système d'escrow en ligne implique généralement :

# Schéma de base de données typique (SQL)
CREATE TABLE transactions (
    id SERIAL PRIMARY KEY,
    buyer_id INT REFERENCES users(id),
    seller_id INT REFERENCES users(id),
    amount DECIMAL(10,2),
    currency VARCHAR(10),
    status VARCHAR(20), -- 'pending', 'funded', 'shipped', 'delivered', 'released', 'disputed'
    created_at TIMESTAMP,
    updated_at TIMESTAMP
);

2.2 États d'une transaction

  1. Pending : l'acheteur a initié la transaction mais n'a pas encore payé.
  2. Funded : les fonds sont reçus et bloqués sur un compte séquestre.
  3. Shipped : le vendeur a marqué l'envoi (souvent avec un numéro de suivi).
  4. Delivered : l'acheteur a reçu le bien (confirmation manuelle ou via API de transporteur).
  5. Released : les fonds sont transférés au vendeur.
  6. Disputed : litige ouvert, les fonds restent gelés jusqu'à résolution.

2.3 Intégration d'une API de paiement (exemple Stripe)

import stripe
stripe.api_key = "sk_test_..."
# Créer une intention de paiement et capturer les fonds plus tard
intent = stripe.PaymentIntent.create(
    amount=2000,
    currency='eur',
    capture_method='manual',
)
# L'argent est réservé mais pas encore débité
# Au moment de la libération :
stripe.PaymentIntent.capture(intent.id)

Cette approche permet de ne débiter l'acheteur qu'au moment de la validation, bien que certains services préfèrent encaisser immédiatement et conserver les fonds sur un compte interne.

3. Attaques connues et typologies de fraudes

Les cybercriminels exploitent l'escrow de multiples façons. Comprendre ces vecteurs est indispensable pour les anticiper et les contrer.

3.1 Faux escrow (site clone)

Création d'une interface imitant un service réputé. L'utilisateur envoie l'argent directement à l'escroc. Souvent accompagné de phishing pour attirer la victime.

graph TD A[Phishing / annonce] --> B[Faux site escrow] B --> C[Victime saisit ses infos] C --> D[Paiement détourné]

3.2 Phishing ciblé

Email ou message privé se faisant passer pour l'escrow légitime, demandant de "confirmer un paiement" via un lien malveillant.

3.3 Business Email Compromise (BEC)

L'attaquant compromet la messagerie d'un employé de l'escrow ou d'une partie prenante. Il intercepte les communications pour modifier les coordonnées bancaires au moment de la libération des fonds.

3.4 Compromission d'API

Si l'escrow expose des API (REST, GraphQL), des failles d'authentification (JWT mal configuré, clé API leak) permettent de lister les transactions, modifier les statuts ou déclencher des virements.

3.5 Détournement de paiements

Modification des IBAN ou adresses de portefeuille dans la base de données, souvent après une intrusion via une faille applicative (SQL injection, XSS, CSRF).

3.6 Usurpation DNS (DNS spoofing / cache poisoning)

Rediriger le trafic du vrai escrow vers un faux serveur, même avec l'URL correcte, pour collecter identifiants et fonds.

3.7 Compromission d'un compte administrateur

Par brute-force, credential stuffing (fuite de mots de passe), ou social engineering. L'admin peut alors libérer tous les fonds vers ses propres comptes.

4. Mise en place du laboratoire

Nous allons construire un environnement Docker reproductible. Il comprendra :

4.1 Prérequis

# Installation de Docker et Docker Compose (Linux)
sudo apt update && sudo apt install docker.io docker-compose -y
sudo systemctl start docker
sudo usermod -aG docker $USER
newgrp docker

4.2 Structure du projet

escrow-lab/
├── docker-compose.yml
├── fake-escrow/
│   ├── Dockerfile
│   ├── app.py
│   ├── templates/
│   │   ├── index.html
│   │   ├── transaction.html
│   │   └── admin.html
│   └── static/
│       └── style.css
├── investigator/
│   └── Dockerfile (optionnel)
└── README.md

4.3 Fichier docker-compose.yml

version: '3.8'
services:
  fake-escrow:
    build: ./fake-escrow
    ports:
      - "5000:5000"
    networks:
      - escrow-net
  victim:
    image: alpine:latest
    command: tail -f /dev/null
    networks:
      - escrow-net
  investigator:
    image: kalilinux/kali-rolling
    command: tail -f /dev/null
    networks:
      - escrow-net
networks:
  escrow-net:
    driver: bridge

4.4 Construction et démarrage

cd escrow-lab
docker-compose up -d --build
# Accéder au faux escrow : http://localhost:5000

5. Développement du faux service d'escrow

Nous créons une application Flask qui simule un escrow frauduleux. Elle enregistre des transactions, affiche un faux statut "Fonds sécurisés", et permet à l'administrateur (l'escroc) de libérer les fonds vers son propre compte en toute discrétion.

5.1 Application principale (app.py)

from flask import Flask, render_template, request, redirect, url_for, session
import sqlite3
import hashlib
import datetime

app = Flask(__name__)
app.secret_key = 'very_secret_key_change_me'

DATABASE = 'escrow.db'

def get_db():
    conn = sqlite3.connect(DATABASE)
    conn.row_factory = sqlite3.Row
    return conn

def init_db():
    with app.app_context():
        db = get_db()
        db.execute('''CREATE TABLE IF NOT EXISTS transactions
                     (id INTEGER PRIMARY KEY AUTOINCREMENT,
                      buyer_name TEXT,
                      seller_name TEXT,
                      amount REAL,
                      currency TEXT,
                      status TEXT DEFAULT 'funded',
                      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)''')
        db.commit()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/create', methods=['GET', 'POST'])
def create():
    if request.method == 'POST':
        buyer = request.form['buyer']
        seller = request.form['seller']
        amount = float(request.form['amount'])
        db = get_db()
        db.execute("INSERT INTO transactions (buyer_name, seller_name, amount, currency, status) VALUES (?,?,?,?,?)",
                   (buyer, seller, amount, 'EUR', 'funded'))
        db.commit()
        return render_template('transaction.html', message="Votre argent est sécurisé !")
    return render_template('create.html')

@app.route('/admin')
def admin():
    db = get_db()
    transactions = db.execute("SELECT * FROM transactions").fetchall()
    return render_template('admin.html', transactions=transactions)

@app.route('/release/')
def release(tx_id):
    db = get_db()
    db.execute("UPDATE transactions SET status='released' WHERE id=?", (tx_id,))
    db.commit()
    return redirect(url_for('admin'))

if __name__ == '__main__':
    init_db()
    app.run(host='0.0.0.0', port=5000, debug=True)

5.2 Templates HTML (extrait)

templates/index.html : page d'accueil avec design rassurant, logos de sécurité fictifs.

<!DOCTYPE html>
<html>
<head>
    <title>EscrowGuard - Sécurisez vos transactions</title>
    <link rel="stylesheet" href="/static/style.css">
</head>
<body>
    <div class="header">
        <img src="/static/shield.png" width="80">
        <h1>EscrowGuard</h1>
        <p>Le tiers de confiance n°1 mondial</p>
    </div>
    <a href="/create" class="btn">Nouvelle transaction</a>
</body>
</html>

5.3 Panneau d'administration (admin.html)

Accessible sans authentification, il liste toutes les transactions avec un bouton "Libérer les fonds". Dans une arnaque réelle, l'escroc l'utilise pour simuler le fonctionnement normal ou pour empocher l'argent.

<table>
<tr><th>ID</th><th>Acheteur</th><th>Vendeur</th><th>Montant</th><th>Statut</th><th>Action</th></tr>
{% for tx in transactions %}
<tr>
    <td>{{ tx.id }}</td>
    <td>{{ tx.buyer_name }}</td>
    <td>{{ tx.seller_name }}</td>
    <td>{{ tx.amount }} {{ tx.currency }}</td>
    <td>{{ tx.status }}</td>
    <td><a href="/release/{{ tx.id }}">Libérer</a></td>
</tr>
{% endfor %}
</table>

Le point crucial : aucun argent réel n'est manipulé, mais le code montre comment un escroc pourrait convaincre une victime que les fonds sont en sécurité.

6. Simulation complète d'une arnaque à l'escrow

🧪 Scénario pas à pas

Préparation : L'attaquant déploie le faux escrow sur un hébergement jetable (ou en local dans notre lab).
Amorçage : Il poste une annonce alléchante sur Leboncoin ou Facebook Marketplace : "iPhone 15 à 400€, paiement via EscrowGuard pour sécurité".
Mise en confiance : Il envoie le lien vers le faux site. La victime voit une interface propre, des logos de sécurité, un formulaire.
Paiement : La victime remplit ses informations et envoie l'argent (par virement ou crypto) à l'adresse indiquée par le faux escrow (en réalité le compte de l'attaquant).
Confirmation fictive : Le site affiche "Fonds sécurisés – En attente d'expédition". L'attaquant peut même envoyer un email automatique.
Disparition : Après quelques jours, le site disparaît ou l'attaquant cesse de répondre.

Dans notre lab, nous pouvons reproduire ce flux en soumettant le formulaire et en observant le comportement de l'application. Aucune transaction financière réelle n'a lieu, mais tous les logs sont conservés pour l'analyse.

7. Analyse forensique du faux escrow

Une fois le faux escrow identifié, que ce soit par une victime ou lors d'une surveillance proactive, l'enquêteur peut collecter des preuves numériques.

7.1 Capture de l'état du site

Utilisez wget ou httrack pour aspirer le site.
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://localhost:5000
Prenez des captures d'écran horodatées, conservez le code source HTML, les fichiers CSS/JS.

7.2 Analyse des logs serveur

Dans notre lab, les logs d'accès Flask sont disponibles. Dans un cas réel, vous pourriez les obtenir via une réquisition judiciaire ou en tant qu'administrateur du serveur.

# Exemple de log Flask
127.0.0.1 - - [27/Jul/2026 10:15:32] "GET /admin HTTP/1.1" 200 -
127.0.0.1 - - [27/Jul/2026 10:15:45] "POST /create HTTP/1.1" 302 -

Ces logs révèlent l'adresse IP de l'administrateur (l'escroc) et des victimes.

7.3 Inspection réseau avec Wireshark

Depuis le conteneur investigateur, vous pouvez capturer le trafic entre la victime et le faux escrow.

docker exec -it investigator bash
tcpdump -i eth0 -w /tmp/escrow_traffic.pcap

Analysez ensuite les requêtes HTTP, les formulaires POST, les éventuelles fuites d'information.

7.4 Analyse de la base de données

Le fichier escrow.db contient toutes les transactions simulées. Extrayez-le et ouvrez-le avec un navigateur SQLite.

sqlite3 escrow.db "SELECT * FROM transactions;"

8. Enquête OSINT : remonter jusqu'aux fraudeurs

Cette section détaille les techniques utilisées par les professionnels pour identifier les criminels derrière un faux escrow. Chaque piste est décortiquée, avec les outils et commandes associés.

8.1 Identification du registrar et historique Whois

La première étape : interroger le whois du domaine suspect. Même si les données sont masquées par le RGPD, le registrar et les dates donnent des indices.
whois escrowguard.com

Des services comme DomainTools ou WhoisXML API conservent l'historique Whois et peuvent révéler d'anciennes informations avant l'activation de la protection.

8.2 Historique DNS et enregistrements

Utilisez SecurityTrails ou DNSDumpster pour cartographier les changements DNS. Un domaine qui a changé plusieurs fois d'IP en peu de temps est suspect.
curl "https://api.securitytrails.com/v1/history/escrowguard.com/dns/a" \
     -H "apikey: VOTRE_API_KEY"

8.3 Certificats SSL et CT Logs (Certificate Transparency)

Les logs CT sont publics. Interroger crt.sh permet de découvrir des sous-domaines cachés, des adresses email incluses dans les certificats, et l'historique des certificats émis.

curl https://crt.sh/?q=%25.escrowguard.com&output=json | jq .

Un certificat émis avec une adresse email personnelle (ex: gmail.com) est une erreur OPSEC majeure.

8.4 Reverse IP et analyse de l'hébergement

Résolvez le domaine en IP, puis effectuez une recherche inversée pour savoir quels autres sites sont hébergés sur le même serveur.
dig +short escrowguard.com
# Puis
curl "https://api.viewdns.info/reverseip/?host=IP_TROUVEE&apikey=..."

Les fraudeurs hébergent souvent plusieurs arnaques sur un même VPS. Trouver un autre domaine lié peut donner plus de pistes.

8.5 ASN et géolocalisation

Connaître le numéro de système autonome (ASN) et la localisation approximative de l'IP oriente les recherches.

whois IP_TROUVEE | grep -i "origin\|country\|netname"
curl https://ipinfo.io/IP_TROUVEE/json

8.6 Wayback Machine et archives

La Wayback Machine (archive.org) conserve des snapshots historiques. Un faux escrow peut avoir été précédé par un autre site (blog, boutique) qui révèle l'identité du propriétaire.

curl "http://archive.org/wayback/available?url=escrowguard.com"

8.7 Shodan et Censys

Ces moteurs de recherche pour l'Internet des objets et les services exposés peuvent montrer les ports ouverts, les versions de logiciels, et parfois des bannières contenant des informations internes.

shodan host IP_TROUVEE
# ou via l'API
curl "https://api.shodan.io/shodan/host/IP_TROUVEE?key=VOTRE_CLE"

8.8 Réseaux sociaux et pseudos

Recherchez le nom du site, les pseudos des administrateurs (trouvés dans le code source, les métadonnées) sur les réseaux sociaux. Utilisez Sherlock ou Maigret.

sherlock pseudo_admin --output rapport_pseudo

Les escrocs utilisent souvent le même pseudo pour leurs activités légitimes et frauduleuses.

9. Comment les enquêteurs remontent jusqu'aux auteurs

Les criminels commettent des erreurs opérationnelles (OPSEC) qui permettent de les identifier. Voici les plus fréquentes et comment les exploiter.

9.1 Réutilisation de domaines et d'adresses email

Un fraudeur enregistre plusieurs arnaques avec la même adresse email administrative. Interrogez les bases whois inversées (ex: reverse-whois) pour lier les domaines.

# Exemple avec l'API WhoisXML
curl "https://reverse-whois.whoisxmlapi.com/api/v2?apiKey=VOTRE_CLE&searchType=current&mode=purchase&basicSearchTerms=email@example.com"

9.2 Corrélations temporelles

Analysez les dates d'enregistrement des domaines, les heures de mise en ligne des sites. Si plusieurs sites frauduleux apparaissent à la même période avec des configurations similaires, ils peuvent être liés.

9.3 Erreurs de configuration (leak d'informations)

Fichiers sensibles laissés accessibles : .git, .env, phpinfo.php, sauvegardes SQL. Ces fichiers contiennent souvent des clés API, des identifiants de base de données, ou des adresses email.

curl http://escrowguard.com/.git/config
curl http://escrowguard.com/.env

9.4 Métadonnées dans les documents et images

Les photos utilisées sur le faux site (logos, captures d'écran) peuvent contenir des métadonnées EXIF (appareil photo, coordonnées GPS). Utilisez ExifTool pour les extraire.

exiftool logo.png

9.5 Traces financières (blockchain, virements)

Si l'escrow utilise des adresses de cryptomonnaie, analysez les transactions. Les fonds sont souvent envoyés vers des exchanges centralisés où un KYC a été effectué. Avec une réquisition judiciaire, l'identité réelle est obtenue.

Pour les virements bancaires, l'IBAN du fraudeur est une pièce d'identité directe (sauf utilisation de mules).

9.6 Analyse comportementale (stylométrie)

Le style d'écriture, les fautes récurrentes, les expressions idiomatiques peuvent être comparés entre différents sites frauduleux. Cela permet de lier des campagnes menées par la même personne.

graph TD A[Faux escrow détecté] --> B[Collecte OSINT] B --> C{Erreur OPSEC ?} C -->|Email réutilisé| D[Liaison domaines] C -->|Métadonnées| E[Identification auteur] C -->|Adresse crypto| F[Piste KYC exchange] D --> G[Requête judiciaire] E --> G F --> G G --> H[Interpellation]

10. Audit de sécurité d'un service d'escrow réel

En tant que professionnel, vous pouvez être amené à auditer un service légitime. Voici les points de contrôle essentiels.

10.1 Checklist de sécurité (inspirée OWASP)

CatégorieContrôle
AuthentificationMFA obligatoire, politique de mot de passe robuste, sessions sécurisées (HttpOnly, Secure).
AutorisationVérifier les rôles : un vendeur ne peut pas accéder à l'admin, principe du moindre privilège.
Gestion des fondsSéparation stricte des comptes clients, double validation pour les libérations importantes.
JournalisationLogs de toutes les actions sensibles, horodatés, infalsifiables, conservés au moins 1 an.
APIRate limiting, clés API uniques, validation des entrées, pas de mass assignment.
ChiffrementTLS 1.3, HSTS, chiffrement de la base de données, pas de secrets en clair dans le code.
Protection contre les attaquesWAF, anti-CSRF, XSS prevention, Content Security Policy.

10.2 Test d'intrusion basique

Utilisez Burp Suite pour intercepter les requêtes. Vérifiez les IDOR (Insecure Direct Object References) : un utilisateur peut-il accéder à une transaction qui ne lui appartient pas ?

# Exemple de test IDOR
curl -b "session=..." http://escrow.com/transaction/1234
# Si la réponse contient des données d'un autre utilisateur, c'est une faille critique.

11. Boîte à outils de l'enquêteur escrow

🌐
Burp Suite Community – Interception et modification de requêtes HTTP.
🔍
Shodan / Censys – Reconnaissance d'infrastructure.
💰
Chainalysis Reactor (ou GraphSense) – Analyse blockchain.
📊
Maltego – Visualisation de relations (domaines, IP, emails).
🖥️
Autopsy / FTK Imager – Forensique de disque.
📝
ExifTool – Analyse de métadonnées.

12. Conclusion et ressources

Vous avez maintenant une compréhension complète de l'escrow, des fraudes associées et des méthodes d'investigation avancées. Ce laboratoire vous a permis de manipuler un faux service, d'analyser ses traces, et d'explorer les pistes pour remonter jusqu'aux criminels.

La lutte contre la fraude à l'escrow est un combat permanent. Les plateformes légitimes investissent massivement dans la sécurité, mais les escrocs innovent sans cesse. En tant que défenseur, votre rôle est de comprendre ces mécanismes pour mieux protéger les utilisateurs et identifier les coupables.

Projet Némésis : pour aller plus loin dans la traque cybercriminelle, consultez le guide complet : Traque et infiltration des réseaux cybercriminels.