Ajouter un pivot e-mail forensique avec OCR, métadonnées et normalisation des données #107
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ajouter un pivot e-mail forensique avec OCR, métadonnées et normalisation des données
Contexte
Labfy Investigation permet déjà d’importer des preuves, de conserver leurs empreintes, d’analyser certains fichiers EML, d’exécuter un OCR sur des RIB et d’extraire des métadonnées avec ExifTool.
Ces fonctionnalités doivent maintenant être réunies dans un flux cohérent permettant d’exploiter une preuve
.emlet ses pièces jointes comme point de départ d’un pivot d’enquête.Un e-mail frauduleux peut contenir ou transporter :
Message-ID;Ces informations ne doivent pas être intégrées automatiquement comme des faits établis. Elles doivent être extraites, normalisées, présentées à l’utilisateur, corrigées si nécessaire, puis confirmées explicitement.
Problème
Les analyses existantes sont encore trop séparées :
Le projet doit éviter deux erreurs opposées :
Objectif
Créer une action complète de pivot e-mail permettant de :
.eml;Principes de données
Chaque donnée extraite doit pouvoir distinguer :
Une valeur brute ne doit jamais être modifiée.
Une correction utilisateur doit être conservée séparément de la valeur brute.
Un résultat OCR ne doit jamais être automatiquement considéré comme confirmé.
Analyse du message EML
L’analyse doit extraire et présenter au minimum :
From;Sender;Reply-To;Return-Path;To;Cc;Bcclorsqu’il est présent ;Subject;Date;Message-ID;In-Reply-To;References;MIME-Version;Content-Type;Authentication-Results;Received, dans leur ordre réel.Les dates doivent être conservées sous leur forme brute et normalisées en UTC lorsque leur analyse est possible.
Les adresses IP ou noms d’hôtes présents dans la chaîne SMTP doivent recevoir un rôle proposé parmi un vocabulaire contrôlé :
Une adresse IP observée dans un en-tête
Receivedne doit jamais être automatiquement présentée comme l’adresse IP personnelle du suspect.Extraction des pièces jointes
Chaque pièce jointe doit devenir un fichier dérivé de la preuve EML.
L’extraction doit :
../;Content-ID;Content-Disposition;Content-Transfer-Encoding;Aucune pièce jointe ne doit être exécutée ou ouverte automatiquement.
Aucune ressource distante contenue dans un e-mail HTML ne doit être chargée automatiquement.
Des limites doivent protéger l’application contre :
Métadonnées techniques
Les fichiers compatibles doivent être analysés avec l’intégration ExifTool existante.
Deux niveaux doivent être conservés :
Sortie brute
Métadonnées normalisées
Les métadonnées utiles doivent être représentées avec des codes métier stables, par exemple :
file.mime_typefile.size_bytesfile.detected_extensionimage.widthimage.heightimage.orientationimage.softwareimage.makeimage.modelimage.datetime_originalimage.gps_latitudeimage.gps_longitudedocument.authordocument.creatordocument.producerdocument.creation_timedocument.modification_timeLes noms originaux produits par ExifTool doivent rester accessibles.
Les coordonnées GPS doivent nécessiter une confirmation explicite avant intégration.
OCR des images et PDF
L’OCR doit réutiliser l’infrastructure existante.
Il doit :
Pour les PDF :
L’absence de Tesseract ne doit pas empêcher l’analyse EML et l’extraction des métadonnées.
Extraction des données bancaires
L’analyse doit détecter au minimum :
IBAN
L’IBAN doit être :
Les corrections telles que
Overs0ouIvers1ne doivent jamais être appliquées silencieusement.Pour un IBAN français valide, les composants RIB peuvent être dérivés, mais ils doivent être marqués comme :
et non comme observés dans le document.
BIC
Le BIC doit être :
Le BIC ne doit jamais être inventé depuis le nom supposé de la banque.
Titulaire et banque
Le titulaire et la banque restent des propositions textuelles.
Le système doit :
Un nom indiqué comme titulaire sur un RIB ne prouve pas que cette personne est l’auteur de l’escroquerie.
Valeurs libres et vocabulaires contrôlés
Les valeurs suivantes restent des champs textuels spécialisés :
En revanche, les champs fermés doivent utiliser un référentiel et une liste déroulante.
Statut de vérification
proposed— Proposéconfirmed— Confirmérejected— Rejetéconflicted— Contradictoireinvalid— InvalideProvenance
observed— Observé directementocr— Extrait par OCRheader— Extrait d’un en-têtemetadata— Extrait des métadonnéesderived— Dérivé localementmanual— Saisi manuellementRôle d’une adresse e-mail
fromsenderreply_toreturn_pathtoccbccmessage_id_domainotherRôle SMTP
declared_sourcesmtp_relaydestination_serverprivate_infrastructureunknownType de valeur
textidentifieremailibanbicip_addressdomainuriintegerdecimaldatedatetimebooleanjsonLes codes persistés doivent rester stables et indépendants des libellés français affichés.
Une API métier doit refuser les codes inconnus.
Un composant GTK4 réutilisable doit permettre de sélectionner ces valeurs sans saisie libre.
Interface de révision
Après l’analyse, une interface doit présenter :
Chaque proposition doit pouvoir être :
Avant validation, l’interface doit afficher un bilan :
La validation finale doit être transactionnelle.
Une erreur SQLite doit provoquer un rollback complet des écritures associées.
Entités et relations
Après confirmation, le pivot doit pouvoir créer ou réutiliser notamment :
Message-IDsi le modèle le justifie ;Les relations doivent utiliser le référentiel canonique des types de relations.
Exemples conceptuels :
La formulation doit décrire exactement ce qui est observé, sans produire d’attribution non démontrée.
Provenance et audit
Chaque traitement doit conserver :
Une sortie brute ne doit jamais être modifiée pour correspondre à une correction humaine.
Contraintes techniques
GSubprocessavec des arguments séparés ;Les dépendances nouvelles doivent être disponibles sous Arch Linux et Ubuntu et être documentées.
Critères d’acceptation
.emlpeut lancer un pivot complet.Receivedconserve son ordre.Tests attendus
Ajouter au minimum des tests pour :
Received;Hors périmètre
Définition de terminé
Le ticket est terminé lorsque :
make cleanréussit ;make -j8réussit ;make -j8 testoumake testréussit ;git diff --checkréussit ;Le pivot EML forensique est terminé.
Fonctionnalités livrées :
Migrations ajoutées :
Validation :
Limitation non bloquante :