VISTA BANKSécurité des systèmes de paiement
Lab 3 · Travaux pratiques
Détection de la fraude
Les deux premiers labs protégeaient la donnée. Celui-ci part du principe
que la protection a échoué — et cherche les traces.
Où nous en sommes
La troisième ligne de défense
Lab 1 — Constater
Le PAN et le CVV circulaient en clair. TLS chiffre le transit… mais pas l'application.
Lab 2 — Protéger
Chiffrement, signature, tokenisation. La donnée devient illisible et infalsifiable.
Lab 3 — Détecter
Et si tout cela avait été contourné ? Un identifiant volé, un complice interne, une faille inconnue.
La prévention finit toujours par céder quelque part.
Aucune banque ne se contente de verrous. Elle surveille aussi ce qui se passe
à l'intérieur — parce qu'une fraude réussie ne déclenche, par définition,
aucune alarme de sécurité. Elle ressemble à une opération normale.
Le jeu de données
10 000 transactions, 3 fraudes
lab3_fraude_vista.db
CREATE TABLE transactions (
id TXN0000000, TXN0000001…
compte_id VB00000042
numero_carte 4532015112830366
montant en GNF
type_operation ACHAT / RETRAIT / VIREMENT
terminal POS-KAL-0012, GAB-CKY-003…
marchand Supermarché Kaloum…
created_at 2026-03-15 02:17:59
);
Aucun raccourci
Les identifiants se suivent dans l'ordre chronologique. Les titulaires sont des clients ordinaires. Les dates des fraudes se mêlent à celles des 10 000 autres.
Rien ne les distingue
Aucune colonne, aucun indice de forme ne trahit une fraude. Le tri, le filtre, la lecture visuelle ne donnent rien.
Seule l'analyse fonctionne
Il faut formuler une hypothèse sur le comportement, la traduire en SQL, puis trier le vrai du faux.
Ce que vous cherchez
Trois façons de trahir
F1
Carding
Une série de micro-achats pour tester une carte volée. Si ça passe, le fraudeur enchaîne sur un gros montant.
F2
Opération nocturne
Un virement important au cœur de la nuit. Moins de surveillance, et le titulaire dort — il ne verra rien avant le matin.
F3
Compte dormant réveillé
Un compte inactif depuis des mois qui se vide d'un coup. Signature d'un vol d'identifiants ou d'un SIM swap.
Chacune laisse une trace différente. Aucune n'est visible à l'œil nu —
mais toutes rompent avec un comportement habituel. C'est cette rupture
que le SQL va mettre en évidence.
Mode opératoire
Trois gestes
1
Générer la base
python3 generate_db.py — crée ~10 000 transactions et affiche le chemin du fichier.
2
Ouvrir la base
sqlitebrowser <chemin> pour l'interface graphique, ou sqlite3 <chemin> en ligne de commande.
3
Compléter les requêtes
exercices.sql contient 5 requêtes à trous, avec les indices nécessaires.
Commencez par explorer, pas par chercher.
Avant de traquer la fraude, regardez à quoi ressemble le normal :
à quelles heures la banque travaille-t-elle ? Quels montants sont courants ? On ne repère une anomalie
que si l'on connaît la norme.
Exploration
À quoi ressemble le normal ?
Première requête à lancer : la répartition de l'activité dans la journée.
activité par heure
SELECT strftime('%H', created_at) AS heure, COUNT(*)
FROM transactions GROUP BY 1;
00h █ 38 12h ████████████████████ 767
01h █ 32 13h ███████████████████████ 889
02h █ 25 14h ███████████████████████ 889
03h ▏ 18 15h ████████████████████████ 912
04h █ 21 16h ██████████████████████ 855
05h ▏ 16 17h █████████████████ 671
06h ██ 60 18h ████████████ 471
07h █████ 186 19h ███████████ 439
08h ███████████████ 559 20h ████████ 302
Les heures 02h-05h totalisent 80 transactions sur 9 978,
soit 0,8 % du volume. Une grosse opération dans ce creux
est, par nature, exceptionnelle.
Ce graphique est la définition du normal. Tout le reste du lab consiste à
chercher ce qui s'en écarte.
Requête 1 · Carding
Trois cartes sortent. Une seule est volée.
Le signal : au moins 5 transactions de moins de 50 000 GNF sur la même carte, le même jour.
| Carte | Nb | Jour | Première | Dernière | Verdict |
| 4532015112830366 | 7 | 2026-03-15 | 02:17:59 | 02:27:38 | FRAUDE |
| 4165585239868000 | 6 | 2026-02-11 | 09:37:07 | 17:25:02 | légitime |
| 4793564651939828 | 6 | 2026-03-04 | 09:05:51 | 16:48:46 | légitime |
Ce n'est pas le nombre qui trahit — c'est la concentration.
7 opérations en 10 minutes, à 2 h du matin.
Les deux autres cartes s'étalent sur une journée de travail : ce sont des commerçants qui encaissent.
Même compte, comportement radicalement différent.
Requête 2 · Nocturne
Quatre virements de nuit. Deux sont normaux.
Le signal : plus de 1 000 000 GNF entre 02h et 05h.
| Transaction | Compte | Montant | Horodatage | Verdict |
| TXN0002712 | VB00000073 | 1 450 000 | 2026-01-22 04:50 | légitime |
| TXN0005999 | VB00000073 | 1 120 000 | 2026-02-17 05:23 | légitime |
| TXN0009617 | VB00423300 | 2 500 000 | 2026-03-18 03:15 | FRAUDE |
| TXN0009619 | VB00423300 | 1 800 000 | 2026-03-18 04:33 | FRAUDE |
L'heure ne suffit pas. Il faut l'historique.
VB00000073 est une entreprise qui règle ses fournisseurs en fin de nuit :
elle l'a toujours fait. VB00423300 n'avait jamais opéré la nuit
avant le 18 mars. Le critère décisif n'est pas l'heure — c'est la rupture avec l'habitude.
Requête 3 · Compte dormant
Huit comptes dormants. Un seul se réveille.
3a — comptes inactifs > 90 jours
VB00000044 dernière activité 2025-09-26
VB00789100 dernière activité 2025-11-01
VB00000014 dernière activité 2025-11-17
VB00000059 dernière activité 2025-11-17
VB00000023 dernière activité 2025-11-22
VB00000079 dernière activité 2025-11-23
VB00000125 dernière activité 2025-11-28
VB00000009 dernière activité 2025-11-29
8 comptes. Lequel est frauduleux ?
Aucun — être dormant n'est pas un délit.
3b — + opération postérieure, montant rond
AND t.created_at > c.derniere_activite
AND t.montant % 500000 = 0
TXN0008868 VB00789100
3 000 000 GNF
2026-03-12 14:22:05
après 132 jours de silence
Un seul résultat.
Les fraudeurs saisissent rarement
2 847 316 GNF — ils tapent des
montants ronds.
Un critère seul ne prouve rien. Deux critères croisés, si.
La dormance donne 8 candidats, le montant rond du bruit. C'est leur
intersection qui isole la fraude. C'est exactement le principe d'un moteur de scoring.
⚠️ Le moment clé du lab
Le faux positif coûte plus cher qu'on ne croit
Les trois requêtes ont renvoyé 15 candidats — 3 cartes, 4 transactions,
8 comptes. Derrière, 3 fraudes seulement :
11 candidats sur 15 sont des clients parfaitement honnêtes.
Bloquer à tort
Un commerçant voit sa carte suspendue un jour de marché. Un client appelle, s'énerve, et parle de changer de banque.
L'effet d'usure
Un analyste qui reçoit 100 alertes par jour dont 95 fausses finit par toutes les traiter à la légère. Y compris la vraie.
Le bon réflexe
Un signal déclenche une vérification, pas un blocage. On appelle le client avant de couper.
Savoir écarter un faux positif vaut autant que savoir trouver une fraude.
C'est pourquoi le livrable demande de justifier chaque candidat écarté,
pas seulement les fraudes trouvées.
La limite du scoring par règles
Un moteur ne détecte que ce qu'on y a mis
score de risque — 1re version
Signaux pondérés :
gros montant nocturne +5
montant rond +3
compte dormant +4
Résultat du classement :
VB00423300 détecté ✓
VB00789100 détecté ✓
VB00000042 INVISIBLE
Le carding passe au travers : aucun de
ses signaux ne portait sur les
micro-transactions en rafale.
Le pire n'est pas l'oubli
C'est le silence. Aucune alerte ne signale : « attention, je ne sais pas détecter ce type de fraude ». Le tableau de bord reste vert.
Le correctif immédiat
Ajouter un signal micro-transactions nocturnes +2. Les trois comptes remontent alors en tête.
La vraie réponse
Détecter l'écart au comportement habituel de chaque client, plutôt que d'énumérer à l'avance toutes les formes de fraude.
Passage à l'échelle
Ce que change la production
Dans le lab
10 000 lignes
requête lancée à la main
seuils fixes pour tous
analyse après coup
base figée
En production
des millions par jour
scoring en continu
seuils adaptés au profil client
décision avant l'autorisation
index, fenêtres glissantes
Le changement d'échelle n'est pas qu'une question de performance. Il impose de décider
pendant que la transaction attend — en quelques dizaines de millisecondes,
sans historique complet sous la main.
Synthèse
Quatre idées à emporter
1
On ne détecte une anomalie que si l'on connaît la norme
La première requête utile n'est pas celle qui cherche la fraude, c'est celle qui décrit le comportement habituel.
2
Un critère isolé produit du bruit ; deux critères croisés produisent un signal
Dormant, c'est banal. Nocturne, c'est banal. Dormant qui se réveille la nuit pour un montant rond, non.
3
Écarter un faux positif est un acte professionnel
La valeur d'un analyste ne tient pas au nombre d'alertes qu'il lève, mais à la justesse de celles qu'il transmet.
4
Toute règle a un angle mort, et il est silencieux
Un moteur de détection ne vous dit jamais ce qu'il ne sait pas voir. C'est au concepteur d'y penser.
Échangeons
Questions de débriefing
01Chez nous, qui regarde les transactions inhabituelles ? À quelle fréquence — en temps réel, chaque jour, chaque mois ?
02Si un compte dormant depuis six mois se vidait demain, combien de temps nous faudrait-il pour le remarquer ?
03Nos règles d'alerte actuelles : qui les a écrites, quand, et sur quelles fraudes ? Quels types ne couvrent-elles pas ?
04Combien de nos alertes se révèlent fausses ? Si personne ne le sait, c'est déjà une réponse.
Ces questions préparent le Lab 4 — Conformité PCI-DSS : ce que la norme
exige en matière de journalisation et de surveillance, précisément pour rendre cette détection possible.