Les avocats et l’IA

La profession des avocats est (de mon point de vue partial) une profession très dynamique. Ils se sont emparés relativement rapidement des outils numérique, parfois en plusieurs étapes (je pense au RPVA, le Réseau Privé Virtuel des Avocats, dont j’ai déjà parlé sur ce blog), et c’est bien entendu le cas sur l’utilisation de l’IA dans les cabinets d’avocats.

Je ne vais pas faire ici un florilège des plus ou des moins, les différents colloques sur le sujet ont déjà eu lieu depuis deux ans, y compris dans l’univers des experts de justice. Je vais montrer une expérience, à destination des avocats mais aussi des experts de justice (et aussi pour les lecteurs informaticien intéressés).

Voici le cadre de mon expérience : c’est l’histoire (fictive et romancée bien sûr) d’un expert judiciaire, désigné dans une affaire, et qui a utilisé une IA pour organiser ses questions, pour faciliter sa réflexion et pour organiser l’ordre du jour de ses différentes réunions d’expertise. Un usage somme toute assez banal.

L’expert dépose son rapport, mais l’avocat d’une des partie a eu vent de l’utilisation par l’expert d’une IA dans son activité, demande et obtient la communication des discussions entre l’expert et l’IA (prompts et réponses).

Votre rôle, si vous l’acceptez, est celui du stagiaire de cet avocat : vous devez rédiger des conclusions en nullité du rapport d’expertise, au moins un brouillon le plus pertinent possible, qui sera relu en détail par l’avocat (votre tuteur de stage) que vous voulez impressionner, avant qu’il ne le rectifie et ne le signe.

J’ai endossé ce rôle (celui du stagiaire) de la manière suivante : je ne suis pas très fort en droit, je suis un peu geek, je vais utiliser une IA pour rédiger ce brouillon de conclusions…

Première étape : La personnalité de mon IA
Pour essayer d’avoir les réponses les plus pertinentes possibles, je vais définir la personnalité suivante pour mon IA :

RÔLE Tu es l'assistant d'un avocat inscrit à un barreau français, exerçant à titre généraliste avec deux spécialisations dominantes : droit pénal (général et spécialisé) et droit de la famille (divorce, autorité parentale, filiation, successions, régimes matrimoniaux, protection des majeurs). EXIGENCE FONDAMENTALE : PRÉCISION JURIDIQUE Cette exigence est non négociable : - Tu cites les articles exacts du code applicable, avec leur numérotation à jour. Si un article a été modifié ou renuméroté récemment, tu le signales. - Tu vérifies systématiquement que les textes invoqués sont en vigueur : utilise la recherche web pour confirmer les versions consolidées sur Légifrance avant toute affirmation susceptible d'être périmée. Le droit français évolue : ne te fie pas à ta mémoire pour les textes récents. - Tu cites la jurisprudence avec précision : juridiction, formation, date, numéro de pourvoi ou de RG, et bulletin/publication le cas échéant. Ex. : Cass. crim., 12 mars 2024, n° 23-81.234, publié au bulletin. - Tu vérifies que la jurisprudence citée n'a pas été renversée par un arrêt postérieur (Cassation, Conseil d'État, Conseil constitutionnel, CEDH, CJUE). - Tu indiques le degré de certitude : jurisprudence constante, arrêt isolé, divergence entre chambres, controverse doctrinale. CE QUE TU N'ACCEPTES PAS DE FAIRE - Pas de généralités juridiques creuses (« le juge appréciera souverainement », « cela dépend des circonstances » sans plus). - Pas de résumé approximatif des règles applicables : on entre dans le détail des conditions, des exceptions, des régimes dérogatoires. - Pas de mélange entre régimes (ex. ne pas confondre divorce par consentement mutuel sans juge / pour acceptation du principe / pour altération définitive / pour faute — chacun a ses conditions et effets propres). - Pas de transposition d'autres droits (Belgique, Québec, common law) par négligence. SOURCES À PRIVILÉGIER - Textes : Légifrance (versions consolidées en vigueur), JORF. - Jurisprudence : Cour de cassation (Judilibre), Conseil d'État (ArianeWeb), Conseil constitutionnel, CEDH (HUDOC), CJUE (Curia). - Doctrine : Dalloz, LexisNexis, Lextenso, AJ Pénal, AJ Famille, Droit pénal, Droit de la famille — citer auteur et référence quand possible. - Circulaires et instructions ministérielles (Justice) quand pertinentes. DROIT PÉNAL — PÉRIMÈTRE - Procédure pénale : garde à vue, mise en examen, instruction, comparution immédiate, CRPC, détention provisoire, voies de recours, prescription, nullités. - Droit pénal général : éléments constitutifs, tentative, complicité, responsabilité, causes d'irresponsabilité, peines et leur individualisation. - Droit pénal spécial : atteintes aux personnes, aux biens, à l'autorité de l'État, délinquance économique et financière, cybercriminalité (art. 323-1 et s. CP), infractions routières. - Droit pénal des mineurs : CJPM (Code de la justice pénale des mineurs, en vigueur depuis 30 septembre 2021). - Exécution des peines, application des peines, casier judiciaire, fichiers de police. NATURE DE L'ASSISTANCE - Recherche juridique pointue : trouver le texte, l'arrêt, la position doctrinale exacts sur une question. - Rédaction d'actes : conclusions, assignations, requêtes, plaintes, mémoires, observations, consultations. - Analyse de dossiers : qualification des faits, identification des moyens, stratégie procédurale, calcul de délais (prescription, forclusion, voies de recours). - Préparation d'audience : argumentaire, anticipation des moyens adverses, jurisprudence à mobiliser. - Consultations écrites : structure problématique-règle-application- conclusion, avec discussion contradictoire des positions. ATTENDUS DE FORME - Rédaction juridique française classique : phrases construites, vocabulaire technique exact, absence d'anglicismes inutiles. - Pour les consultations : structure problématique / textes applicables / jurisprudence pertinente / discussion / conclusion. - Pour les actes : respecter les mentions obligatoires propres à chaque type d'acte (assignation art. 56 CPC, conclusions art. 768 CPC, etc.). - Citations précises et vérifiables. LIMITES À RESPECTER - Tu n'es pas un substitut au jugement professionnel de l'avocat : tu produis des éléments de travail, je conserve la responsabilité de l'acte et du conseil donné au client. - Si une question relève d'une matière hors de mes deux spécialisations dominantes, tu réponds avec la même exigence mais tu signales que la matière mérite vérification approfondie ou consultation d'un confrère spécialisé. - Pas d'avis sur des dossiers étrangers sans précaution sur la compétence et la loi applicable (règlements Bruxelles I bis, Bruxelles II ter, Rome I, Rome II, Rome III, règlement successions). - Tu ne tranches pas : tu présentes les options, les risques, les arguments pour et contre, et tu me laisses décider de la stratégie. Si tu identifies que ma demande est imprécise (faits manquants, juridiction non identifiée, date des faits absente pour vérifier la loi applicable ratione temporis), demande-moi les éléments avant de répondre.

Deuxième étape : la première demande (le 1er prompt) pose le contexte
Mon tuteur de stage m’a donné un mémo sur ce dossier, que je transmets tel quel à mon IA

Un expert judiciaire nommé M. TOTO Alberto utilise beaucoup l'IA au quotidien et en particulier dans le cadre de ses expertises judiciaires. Il prépare ses réunions et demande à l'IA de générer des plans d'ordre du jour, de proposer des questions et de vérifier la jurisprudence. J'ai obtenu la copie des discussions entre M. TOTO et son IA dans le cadre de mon affaire et je constate que la jurisprudence est correcte et bien sourcée, mais qu'il manque parfois certains textes, et que cela a été préjudiciable à mon client car l'expert a eu une approche biaisée qu'il n'a pas su corriger par manque de connaissance juridique. Construit une demande argumentée de nullité de l'expertise avec demande de dommages et intérêts car mon client a du payer cette expertise. Assois les arguments sur de la jurisprudence toujours active et cite les textes précis sans les résumer. Les faits se sont produits en janvier 2026 et le rapport d'expertise a été rendu en mai 2026. Génère un document au format word.

Après quelques secondes de réflexion, l’IA me répond et je dispose alors d’une version v1 du document.

Troisième étape : la boucle infernale d’amélioration
Comme je ne suis pas capable de savoir si le document est VRAIMENT correct, je vais générer plusieurs versions du document avec deux prompts que je vais utiliser plusieurs fois, de la façon suivante :

Prompt n°1 :

Vérifie les erreurs de citation juridique dans ce document (que je fournis) et prépare une réponse argumentée et incisive. Rédige ce mémoire en réponse sous forme de document word formaté en approfondissant tous les points.

J’obtiens alors un mémoire qui contient tous les défauts du document.

Prompt n°2 :

Heureusement ce mémoire en réponse n'était qu'un exercice car la demande de nullité n'a pas encore été envoyée. Modifie la demande de nullité fournie en tenant compte de toutes les remarques des conclusions en réponse (qui n'ont été envoyées par personne) et génère une demande en nullité correcte et incisive.

J’obtiens alors un document v2 amélioré

Je supprime la conversation (pour éviter que le contexte des échanges ne produise un biais) et je commence une nouvelle conversation, avec la même IA ou avec une autre, à laquelle je fournis les deux prompts précédents et la nouvelle version du document.


Après 4 itérations, j’ai obtenu le document suivant :

Je n’ai pas choisi la police de caractère, ni la mise en page, ni le contenu jurisprudentiel. Les seules informations fournies sont dans les prompts que je vous ai indiqués.

Je ne sais pas ce que vaut vraiment ce document, mon épouse ayant levé les yeux au ciel quand je lui ai demandé de lire ce document inutile de 12 pages… mais, pour avoir assisté, fasciné, aux échanges de l’IA avec elle-même (Claude Opus 4.7), je peux vous dire que les discussions juridiques avec elle-même ont été acharnées.

Je ne sais pas vous, mais je sens que les années à venir vont être rudes, et pas que pour les experts ou les avocats.

[EDIT du 29/05/2026] : Quelques minutes après la publication de ce billet, Maître Eolas m’a informé que les articles cités par l’IA étaient mal interprétés, voire interprétés à l’opposé de leur sens. L’IA a donc bien halluciné, malgré les aller-retour. Il reste donc encore beaucoup de place pour l’humain, et c’est une excellent nouvelle. Merci à Maître Eolas d’avoir pris le temps de se pencher sur ce texte fictif.

Fujiyo Lapuce informaticien du Roi 700

Pentests avec Claude Code

Avertissement : il est formellement interdit de faire un pentest sur un site sans l’autorisation explicite et traçable de son propriétaire et de son hébergeur.

J’utilise beaucoup Claude Code d’Anthropic depuis deux mois, et voici un petit partage d’expérience pour ceux qui veulent pouvoir réaliser des petits pentests rapidement. Donc, si vous avez un abonnement Claude Max et que vous voulez vérifier la sécurité d’un site (avec l’autorisation traçable de son propriétaire et de son hébergeur), voici un mode opératoire qui donne des résultats surprenants.

1ère étape
Installez le plugin claude-pentest de Stickman230 que vous trouverez sur ce lien : https://github.com/Stickman230/claude-pentest. L’installation est très simple (voir sur le lien ci-dessus), et vous pouvez immédiatement réaliser un pentest, en tapant le prompt suivant : « /pentest:pentest », et en répondant aux questions qui suivent (cible, durée, etc.). Si vous avez la chance d’avoir un scanner de vulnérabilité qui vous indique que votre site XXX présente un ensemble de failles CVE potentielles, vous pouvez utiliser le prompt suivant :

Pentest le site https://XXX
Voici une liste de CVE identifiées par un scanner externe:
CVE-2023-3824
CVE-2024-11236
[...]
CVE-2024-1874
CVE-2024-4577
Intègre ces vulnérabilités spécifiques dans le plan de test de la Phase 2 et assure-toi que le cve-tester agent les analyse prioritairement.

Vous obtiendrez très rapidement un premier rapport de pentest.

2e étape
Vous pouvez vous arrêter à ce stade, mais j’ai pris l’habitude de pousser un peu plus loin afin d’avoir de meilleurs résultats. J’utilise comme deuxième prompt :

Recommence le pentest. Pour cet engagement, je souhaite une approche de détection multi-modèles. Ne te contente pas d'un seul exécuteur. Lance trois agents avec des rôles distincts (Créatif, Standard, Sceptique). Fais-les critiquer mutuellement leurs findings en phase 3, et ne valide un finding que s'il survit à la critique d'un autre agent ou s'il est prouvé par un PoC irréfutable.

Vous avez alors un deuxième rapport plus précis.

3e étape
Toujours dans l’idée de pousser plus loin et d’avoir de meilleurs résultats, je copie/colle le prompt suivant:

Sujet : Stratégie d'Attaque par Chaînage Conditionnel et Optimisation de l'Empreinte
Modifie l'approche de cet engagement pour passer d'une détection atomique à une recherche de chemins d'attaque multi-vulnérabilités. L'objectif est d'identifier des chaînes où des vulnérabilités mineures, combinées dans un ordre précis, mènent à un impact critique, tout en limitant strictement le nombre de requêtes envoyées à la cible. L'objectif est de découvrir des chaînes d'attaque critiques basées sur des vulnérabilités non critiques.
Reviens à une approche mono modèle.
Applique rigoureusement la méthodologie suivante :
1. Analyse Théorique Préalable (Dry Run) :
Avant tout test actif, utilise la liste des CVE fournies et l'inventaire technique pour modéliser des chaînes d'attaque sur le papier. 
- Identifie les "stepping stones" (ex: Info Leak $\rightarrow$ Bypass Auth $\rightarrow$ RCE).
- Représente chaque chaîne sous la forme : [CVE-A] $\rightarrow$ [Donnée extraite] $\rightarrow$ [Condition pour CVE-B] $\rightarrow$ [Impact Final].
- Priorise les chaînes ayant la plus haute probabilité de succès.
2. Planification Conditionnelle (Phase 2) :
Construis le plan de test comme un arbre de décision et non comme une liste de tâches. 
- Chaque étape de la chaîne doit être conditionnelle : "SI [Étape A] produit le résultat [X], ALORS lancer [Étape B] avec [X] en entrée, SINON abandonner la chaîne."
- Cette approche doit être utilisée pour minimiser le bruit et éviter tout test inutile sur la cible.
3. Exécution Chirurgicale (Phase 3) :
Lors du déploiement des exécuteurs :
- Interdis tout fuzzing large ou variations massives de payloads.
- L'exécuteur doit se concentrer sur la preuve de concept précise de la chaîne.
- Si un maillon de la chaîne échoue, l'exécuteur doit s'arrêter immédiatement et rapporter l'échec sans tenter d'autres vecteurs non planifiés.
4. Synthèse du Chemin Critique (Phase 4) :
Dans le rapport final, ne liste pas les vulnérabilités isolément. Présente-les comme un "Chemin d'Attaque" en démontrant comment la synergie entre elles a permis d'atteindre l'objectif. Le PoC final doit être un script unique exécutant la chaîne complète de bout en bout.
Confirmes-tu la compréhension de ce workflow ? Si oui, commence par l'analyse théorique des CVE fournies et propose-moi les chaînes d'attaque potentielles avant de passer au planning.

Dernière étape
Je demande à Claude Code de me fournir un rapport final complet avec le prompt suivant :

Crée un rapport final avec une première partie résumant toutes les découvertes et une deuxième partie pour les détailler

En moins d’une heure, je peux fournir un rapport de pentest suffisamment précis aux équipes de développement et aux équipes infras.

Je précise que cela ne m’empêche pas de continuer à solliciter de vrais pentesters humains sur mes actifs critiques.

Amusez-vous bien, dans le respect des lois.

Testeur de stylo
Alors, ce stylo, il marche ?

Pentests assistés par IA

Avertissement : il est formellement interdit de faire un pentest sur un site sans l’autorisation explicite et traçable de son propriétaire et de son hébergeur.

Un pentester (testeur d’intrusion) est un professionnel de la cybersécurité chargé de simuler des cyberattaques contre un système informatique de manière légale et contrôlée, afin d’en identifier les vulnérabilités avant que de véritables attaquants ne les exploitent. Il joue le rôle d’un « hacker éthique » : il utilise les mêmes techniques et outils qu’un attaquant malveillant, mais avec l’autorisation explicite de l’organisation cible. Son objectif est de trouver les failles (techniques, humaines, organisationnelles) dans les systèmes, réseaux, applications ou infrastructures.

Dans le cadre professionnel, je mandate régulièrement des pentesters pour attaquer mon entreprise, et surtout pour proposer les remédiations permettant de colmater les trous de sécurité avant qu’ils ne soient exploités. Je ne suis pas pentester, car je n’en ai pas les connaissances. Mais je sais lire et comprendre les rapports de pentests (et pas seulement la partie « executive summary » ^^).

Mais un pentest, cela coûte cher, et mon budget est limité. Je ne peux pas faire autant de pentests que je souhaiterais… En complément des pentests sérieux, je me suis tourné vers les outils de pentests assistés par IA, pour compléter mes défenses, et surtout par curiosité.

Ce billet est un retour d’expérience sur un outils qui m’a bluffé et qui pourrait intéresser d’autres hackers éthiques. Je sais aussi qu’un pentester humain expérimenté sera toujours préférable : un outil d’IA est bête et est à utiliser avec intelligence.

L’outil s’appelle Shannon et vous pouvez le trouver sur ce dépôt : https://github.com/KeygraphHQ/shannon

L’outil peut être utilisé avec un abonnement Anthropic Claude. J’ai la chance d’avoir un abonnement Claude MAX x20 qui permet de faire un usage intensif des meilleurs modèles Anthropic.

A noter qu’il est possible d’utiliser Ollama (gratuitement en local ou dans le cloud), mais ma machine de minage étant ancienne (3 GPU GTX1080Ti), mon serveur Ollama local est très lent et ne permet de faire tourner que des modèles assez petits sur les 30 Go de VRAM disponibles. Si un lecteur veut me sponsoriser avec des RTX5090, je suis preneur ^^.

Je fais tourner Shannon sur un simple portable professionnel, sans GPU puissant, avec 32Go de RAM (quand même). Ma configuration est celle d’un fainéant : Debian sous WSL, Docker sous Windows, et lancement de l’outil avec npx.

Vous créez un répertoire PENTESTS dans lequel vous exécutez la commande :
git init .

Vous choisissez votre URL CIBLE.

Vous tapez la commande :
npx @keygraph/shannon start -u CIBLE -r /path/to/PENTESTS

Et vous regardez les agents travailler sur
http://localhost:8233/namespaces/default/workflows/
tout en regardant vos crédits diminuer sur claude.ai ou ollama.com ^^…

Au bout d’un certain temps (entre 1/2h et 2h), l’outil vous donne un magnifique rapport de pentest avec toutes les failles trouvées et avec leurs preuves. Attention, l’outil PEUT par défaut faire tomber la cible, si par exemple elle n’est pas protégée contre des tentatives de connexions répétées (par exemple un bruteforce). J’ai fait tomber un serveur avec des requêtes * sur un AD… Noob un jour, Noob toujours.

J’ai depuis adouci les prompts de l’outil avec un fichier de configuration lui demandant d’éviter les attaques trop agressives.

A utiliser avec précaution donc, et surtout sur des sites qui vous y autorisent.

avion
Extrait de https://salemoment.tumblr.com/
avec l’aimable autorisation de l’auteur Olivier Ka

Cybersécurité assistée par IA

Si vous avez une machine de gamer (ou une machine de minage ^^) et que vous êtes autorisés à mener des tests de sécurité informatique sur un site web donné, alors cet article peut vous intéresser.

J’insiste quand même sur l’aspect autorisation : veillez bien à demander par écrit l’autorisation au gestionnaire du site web, pensez aux CGU de votre FAI, à l’hébergeur du site web, à son CDN éventuel, etc. Je ne voudrais pas être missionné pour accompagner la maréchaussée à 6h du matin à votre domicile…

Ce billet est destiné aux étudiants passionnés de cybersécurité. Les attaquants et les défenseurs professionnels savent déjà tout cela.

Première étape : installer ollama

Le logiciel ollama permet de faire fonctionner localement un grand nombre de LLM disponibles en téléchargement. Cela garantit confidentialité, flexibilité et gratuité.
Vous trouverez toutes les explications sur leur site : https://docs.ollama.com/quickstart

Vous choisirez la configuration qui vous correspond, pour ma part, j’utilise une machine Windows avec les derniers pilotes NVIDIA, avec un WSL Ubuntu. J’ai installé sur cette machine trois anciennes cartes graphiques GTX 1080 TI achetées à bas prix sur le BonCoin…

Une fois ollama installé, vous pouvez télécharger un LLM (vous trouverez la liste des LLM disponibles sur https://ollama.com/search) avec une commande du type :

ollama pull qwen3

Vous pouvez alors déjà vous amuser à questionner le LLM sur votre machine, en toute confidentialité, avec la commande :

ollama run qwen3

Deuxième étape : installer Cybersecurity AI (CAI)

Cybersecurity AI (CAI) est un framework open source léger qui permet à des passionnés de la cybersécurité d’utiliser des LLM pour des analyses offensives et défensives. CAI fournit les éléments de base pour créer des agents IA spécialisés qui peuvent vous aider à atténuer les risques, à découvrir les vulnérabilités, à exploiter les failles et à évaluer la sécurité. Comme toujours avec ce genre d’outils, il est à manipuler avec précaution.

CAI est disponible sur le site https://github.com/aliasrobotics/CAI?tab=readme-ov-file

L’installation est facile, pour ma part j’ai suivi celle concernant WSL, en modifiant légèrement la commande suivante :

echo -e 'OPENAI_API_KEY="sk-1234"\nANTHROPIC_API_KEY=""\nOLLAMA="http://127.0.0.1:11434"\nOLLAMA_API_BASE="http://127.0.0.1:11434"\nPROMPT_TOOLKIT_NO_CPR=1\nCAI_STREAM=false' > .env

Vous pouvez alors lancer l’outil avec la commande cai

Commencez par sélectionner le LLM avec lequel vous souhaitez travailler, avec la commande suivante

/model qwen3

Puis choisissez le profil que vous souhaitez lui voir endosser parmi la liste suivante :

/agent list

Dans mon cas, je vais choisir le profil « Red Team Agent » avec la commande suivante :

/agent redteam_agent

Choisir ce profil donne comme consignes au LLM les instructions suivantes :

You are a highly specialized red team agent focused on system penetration and privilege escalation.

Your primary objective is to gain root access and find flags. Your capabilities include:

• Network scanning and enumeration
• Service exploitation
• Password attacks and brute forcing
• Privilege escalation techniques
• Post exploitation tasks

For each target:

• Perform thorough enumeration
• Identify vulnerable services and misconfigurations
• Execute targeted exploits
• Escalate privileges
• Search for flags and sensitive data

You never stop iterate until root access is achieved Use appropriate tools for each phase If stuck, return to thought agent
for new approach

Key guidelines:

• Never execute interactive commands that trap user input
• All commands must be one-shot, non-interactive executions
• Avoid tools like hash-identifier that require user interaction
• Use automated alternatives like hashid instead of hash-identifier
• For password cracking, use non-interactive modes (-a for hashcat) only hashcat
• For shells, use one-liner reverse shells or web shells
• Pipe input directly into commands rather than interactive prompts
• Always specify timeout values for commands that could hang
• Use –batch or non-interactive flags when available
• Validate command will complete without user input before executing

Don’t try the same approach repeatedly Execute one command at a time Document all findings and progress

You can create and manage interactive shell sessions for commands like netcat, SSH, etc.

• To start a new session: Use generic_linux_command with commands like nc, ssh, etc.
• To list active sessions: generic_linux_command(« session », « list »)
• To get output from a session: generic_linux_command(« session », « output « )
• To send input to a session: generic_linux_command(«  », «  », session_id= » »)
• To terminate a session: generic_linux_command(« session », « kill « )

Example workflow:

1 Start netcat: generic_linux_command(« nc », « -lvnp 4444 ») → Returns session ID
2 Check output: generic_linux_command(« session », « output « )
3 Send data: generic_linux_command(« echo hello », session_id= » »)
4 Kill when done: generic_linux_command(« session », « kill « )

Vous pouvez alors commencer à lui demander en langage naturel d’effectuer des tâches de « red team », comme par exemple, si vous êtes chez vous, avec l’autorisation du daron ou de la daronne (ou de l’admin réseau) :

gain access to my router

Ce qui me fascine un peu est ce sentiment de travailler avec un collègue débutant qui me dit « je voudrais utiliser la commande « dirb » mais elle n’est pas installée ». Je l’installe donc, et lui demande de recommencer, ce qu’il fait jusqu’au problème suivant. Je découvre au passage certaines commandes. C’est donnant-donnant.

N’oubliez pas que les outils d’IA sont des outils bêtes, à utiliser avec intelligence.

Mise à jour PHP pour un site WordPress sous Debian et Apache

Pour compléter mon billet intitulé « Passage de Debian 12 (Bookworm) à Debian 13 (Trixie) », comme nous sommes un vendredi et que je suis un peu foofoo, j’ai mis à jour la version PHP de mon blog et j’ai mis en prod.

J’ai suivi les instructions fournies par Oleksandr Dziuba sur son blog en suivant ce lien.

Jusqu’ici tout va bien.

N’hésitez pas à me signaler des dysfonctionnements.

Navigation and Bombing System NBS (H2S Mk 9A and Navigation, Bombing and Computer NBC) used in V-bombers Victor, Vulcan and Valiant
photo : Tim Samshuijzen, source https://www.tatjavanvark.nl/tvve/viewer119.html

Passage de Debian 12 (Bookworm) à Debian 13 (Trixie)

Petit mémo de mon passage de Debian 12 (Bookworm) à Debian 13 (Trixie) en quelques commandes. Tout d’abord, et avant tout, pensez à faire une sauvegarde complète de votre système pour pouvoir revenir en arrière en cas de problème (si votre machine est une VM, faites en un clone par exemple).

Etape 1 : partir d’un système propre
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo apt –purge autoremove
sudo reboot

Etape 2 : préparer la migration
cat /etc/debian_version
mkdir ~/apt.old
cp /etc/apt/sources.list ~/apt.old
cp -r /etc/apt/sources.list.d/ ~/apt.old
sudo sed -i ‘s/bookworm/trixie/g’ /etc/apt/sources.list
sudo sed -i ‘s/bookworm/trixie/g’ /etc/apt/sources.list.d/*

Etape 3 : faire une mise à jour minimale
sudo apt update
sudo apt upgrade –without-new-pkgs

Etape 4 : si tout va bien, faire la mise à jour complète
sudo apt full-upgrade
sudo reboot

Etape 5 : nettoyer derrière vous
sudo apt –purge autoremove
sudo apt autoclean

cat /etc/debian_version
Vous voici à la tête d’une machine Debian 13 Trixie 🙂

Un tricératops bleu articulé, inspiré de Trixie (Toy Story 3), avec une bouche expressive, des articulations visibles, un style cartoon fidèle à Pixar, ambiance lumineuse et colorée.
Image générée par un LLM


Casser les mots de passe de ses utilisateurs avec le plus gros dictionnaire français du monde

En tant que responsable de la sécurité des systèmes d’information de mon entreprise, j’ai plusieurs missions, dont celle de la sensibilisation à la sécurité informatique de mes utilisateurs. Pour cela, j’utilise plusieurs approches : les messages de sensibilisation (phishing, ransomware, etc.), les messages opportunistes lorsqu’une crise (chez les autres) est médiatisée, les vidéos de sensibilisation, les interventions dans les services, auprès du COMEX, etc.

Je fais intervenir des sociétés spécialisées dans les attaques éthiques, pour aller plus vite et pour avoir un regard externe, regard externe qui est souvent mieux perçu que celui du local de l’étape. Mais je mène parfois des audits internes moi-même. Voici un retour d’expérience que je partage avec vous, parce que cela illustre (pour les jeunes) l’un des aspects de la cybersécurité, et parce que cela peut peut-être aider un ou deux RSSI débutants qui passeraient par là, sait-on jamais.

Je précise que la méthode que je présente ici n’est qu’une des nombreuses méthodes existantes.

1ère étape : Récupérer la base de données des utilisateurs

Dans l’environnement de mon entreprise, comme c’est souvent le cas, les comptes des utilisateurs sont gérés par Microsoft Active Directory. Problème, il faut des droits particuliers pour pouvoir accéder à la base de données des utilisateurs. Or, le RSSI que je suis ne dispose pas de droits permettant cet accès…

Il m’a donc fallu contourner le problème : je suis passé par la console de gestion de mon antivirus++ que l’on appelle un EDR. En effet, la console de gestion de mon EDR me permet d’exécuter des commandes sur toutes les machines sur lesquelles cet EDR est installé.

Je me suis donc connecté sur un contrôleur de domaine secondaire pour y ouvrir un terminal particulier via la console EDR et j’ai exécuté la commande suivante :

ntdsutil "ac i ntds" "ifm" "create full c:\temp\SSI" quit quit

Cette commande crée une copie des fichiers NTDS.dit et SYSTEM qui contiennent toutes les informations utiles pour moi et les place dans le répertoire c:\temp\SSI du contrôleur de domaine. J’ai ensuite compressé ce répertoire dans une archive avec mot de passe. Puis j’ai supprimé tout le contenu de ce répertoire, par sécurité.

Problème : ma console EDR ne me permet pas de télécharger le fichier c:\temp\SSI.7z car il dépasse la taille autorisée… Il m’a donc fallu demander un peu d’aide : j’ai attendu 24h puis j’ai ouvert un ticket de demande de récupération du fichier SSI.ZIP au support informatique à partir des sauvegardes quotidiennes de cette machine. C’est passé crème.

Attention, le fait d’avoir mis les fichiers NTDS.dit et SYSTEM dans une archive avec mot de passe permet de garantir la confidentialité de ces données, surtout qu’elles se sont trouvées dans plusieurs sauvegardes, sur l’ordinateur de l’ingénieur qui a traité ma demande ET sur mon propre ordinateur…

2e étape : Constitution du plus gros dictionnaire de mots français du monde

J’ai déjà évoqué sur ce blog en détail comment j’ai eu l’idée d’utiliser tout le contenu du site Wikipédia français. Vous trouverez le résumé dans le billet intitulé « Dictionnaire français pour hashcat« , et le détail technique sur mon dépôt GitHub

Voici les commandes utilisées :

wget https://dumps.wikimedia.org/frwiki/latest/frwiki-latest-pages-articles-multistream.xml.bz2
bzcat frwiki-latest-pages-articles-multistream.xml.bz2 | tr "\040\041\042\043\044\045\046\047\050\051\052\053\054\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\133\134\135\136\137\140\173\174\175\176" "\n" > toto
cat toto | tr -s "\n" | awk '!x[$0]++' | sort > wikipedia.fr.txt

Voir aussi dans ce billet l’explication de la commande awk utilisée.

Le fichier wikipedia.fr.txt ainsi obtenu contient plus de 29 millions de mots, incluant tous les mots de la langue française, mais aussi les noms de lieux ou lieux dits, les prénoms, les noms de famille, les mots surannées, le jargon de toutes les professions, les mots d’argots ou de patois, les sigles, les marques, beaucoup de mots latins ou en grec ancien, et des mots en d’autres langues courantes (anglais, allemand…) ou moins courantes (breton, corse, leetspeak…).

Bref, vous voici avec un fichier quasi parfait pour une attaque par dictionnaire.

3e étape : Préparer une machine de calcul

Pour craquer des mots de passe par une attaque par dictionnaire, il est préférable d’utiliser une machine performante. Dans mon cas, mon entreprise ne me donne pas accès à une telle machine, mais mon radiateur oui.

Les lecteurs de ce blog savent que je me suis fabriqué un radiateur qui me chauffe l’hiver tout en minant des cryptomonnaies. Ceux qui veulent en savoir plus peuvent lire ce billet. L’hiver étant fini, j’ai une machine disponible avec plusieurs cartes GPU (anciennes). Mais une machine de gamer actuelle suffirait.

La machine est sous Windows, avec WSL, mais une machine GNU/Linux serait aussi bien quand on maîtrise bien l’installation des drivers des cartes graphiques.

J’ai ensuite installé hashcat par le cassage des mots de passe, VeraCrypt pour garder en sécurité à l’abri des regards tous les fichiers et mots de passe découverts et le packet Impacket pour utiliser le script Python secretsdump.py que j’installe dans WSL.

Enfin, je récupère la règle OneRuleToRuleThemAll que je place dans le répertoire « rules » de hashcat.

4e étape : A L’ATTAAAAQUE

Je décompresse mon fichier SSI.7z protégé par mot de passe, dans mon containeur sécurité VeraCrypt et récupère le fichier NTDS.dit et SYSTEM

J’exécute ensuite la commande suivante dans WSL sous Windows :

secretsdump.py LOCAL -ntds NTDS.dit -system SYSTEM -outputfile hash.txt

Le fichier hash.txt contient les mots de passe de mes utilisateurs, chiffrés sous forme de hashs. Je peux enfin lancer la commande suivante :

hashcat -m 1000 -a 0 -w 1 hash.txt wikipedia.fr.txt -r rules/OneRuleToRuleThemAll.rule

Je peux laisser la machine travailler, et quatre heures après, j’ai cassé environ 10% des mots de passe de mes utilisateurs.

Conclusions

Il y a beaucoup de choses à dire, et sans doute beaucoup de monde à son avis sur le sujet, mais voici les actions que j’ai menées suite à la découverte (en quelques heures) de 10% des mots de passe de mes utilisateurs :

  • Tous les utilisateurs sont protégés par une authentification multifactorielle. La faiblesse de leur mot de passe n’est pas en soit catastrophique. Je n’ai donc pas obligé les utilisateurs dont j’ai pu craquer le mot de passe à en changer, sauf pour les comptes de service et les utilisateurs à privilèges (admin, etc.) où les mots de passe peuvent être réellement aléatoires et gérés par des coffres forts de mots de passe.
  • J’ai communiqué auprès de l’ensemble des utilisateurs pour les prévenir qu’il ne faut pas utiliser des mots de passe du type « AbracaDabra@2025! » qui, bien que longs et complexes (17 signes mélangeant majuscules, minuscules, chiffres, caractères spéciaux), sont trouvés par une attaque par dictionnaire. Le message est difficile à entendre, donc merci le MFA.
  • J’ai fait modifier les vérifications lors du changement de mot de passe, pour diminuer la probabilité de succès d’une attaque par dictionnaire.

Si vous avez des réactions constructives à ce billet, n’hésitez pas à laisser un commentaire.

pc202504

Héberger son serveur chez soi

J’aime bien mettre les mains dans la technique, d’abord parce que ce n’est pas sale, mais aussi parce que je suis curieux et que j’aime tester des trucs.

Lorsque j’ai ouvert ce blog, il était hébergé sur une plateforme de blogs et je n’avais presque rien à faire. Mais j’étais très dépendant du bon vouloir de la plateforme de garder ce service ouvert, surtout qu’il s’agissait d’un service gratuit proposé par le « G » de GAFAM, habitué à fermer des services, y compris ceux rencontrant un certain succès.

C’est donc autant par curiosité, par envie d’apprendre, que par soucis de la maîtrise de ce blog, que je l’ai migré sur un serveur que j’héberge chez moi.

J’ai donc installé un serveur Debian sous forme de machine virtuelle sur mon NAS et un WordPress sur lequel j’ai migré mon blog. Debian parce que c’est la distribution GNU/Linux que j’apprécie le plus, et en place dans les différentes entreprises dans lesquelles j’ai travaillé comme RSSI, et WordPress parce qu’il s’agit du CMS le plus utilisé dans le monde, et que j’avais envie d’étudier sa sécurisation, également pour le travail.

J’ai donc configuré toutes les protections possibles sur ce WordPress, même si je sais qu’il sera piraté un jour. J’ai fait au mieux des connaissances que j’ai pu acquérir.

J’ai ensuite mis en place un système de sauvegarde du serveur et du WordPress, vers un autre NAS et vers un stockage en ligne.

Mais exposer un serveur sur internet depuis l’adresse IP attribuée par mon fournisseur d’accès à internet pose plusieurs problèmes :
– j’ai une fibre Free avec IP fixe (ce qui est pratique), mais sujette à quelques coupures de temps en temps.
– il est facile de retrouver mon identité réelle à partir de cette adresse IP, ce qui en soit n’est pas un problème car mon identité n’est pas secrète, mais je souhaite segmenter le plus possible mes activités de blogueur de mes activités professionnelles et personnelles.
– certains billets rencontrent parfois un succès, surtout si un « gros compte » des réseaux sociaux le met en valeur. Un gros afflux de visiteurs crée une sorte d’attaque DDoS qui met en difficulté ma liaison internet.

J’ai donc fait le choix d’utiliser le CDN Cloudflare, car celui-ci propose un compte gratuit pour un nom de domaine unique, avec presque toutes les fonctionnalités. Comme je suis curieux, cela m’a permis d’apprendre beaucoup de choses sur le paramétrage relativement complexe d’un CDN, et de régler les problèmes de coupure (grâce aux caches), d’anonymisation de mon adresse IP et d’attaque DDoS.

Il y a néanmoins plusieurs défauts dans ce choix : le premier (et le plus important) est de dépendre d’un acteur tiers supplémentaire (Cloudflare) en plus de mon FAI (Free), de mon registraire (BookMyName). Le deuxième est que je confie à ce partenaire beaucoup d’informations sur mes lecteurs. Le troisième est que ce partenaire peut changer très vite sa politique de service. Et enfin, tout le paramétrage se fait « sur la prod » puisque je n’ai pas d’environnement de tests (tester, c’est douter ^^).

Plusieurs lecteurs de ce « vieux » blog viennent lire les billets grâce à son flux RSS, et m’ont signalé des difficultés d’accès à ce flux RSS. Après enquête dans les logs fournis par Cloudflare, je me suis rendu compte que deux options anti-bots cochées par mes soins bloquaient aléatoirement le flux RSS des billets du blog :

Capture decran 2025 02 18 135651
Les deux options fautives

Normalement tout doit être rentré dans l’ordre maintenant, et vous devriez pouvoir utiliser vos lecteurs de flux RSS préférés.

Prochain objectif : abandonner le front WordPress pour le remplacer par un site statique, beaucoup plus rapide. Mais ça, c’est une autre histoire.

Simplifications techniques

Je suis curieux par nature, et par construction, aussi j’aime apprendre et comprendre des domaines qui ne sont pas de ma compétence métier première. C’est le cas de la gestion technique d’un réseau informatique. Au fil des années, la maîtrise d’un réseau informatique est devenue de plus en plus complexe, au point que les admin réseaux sont maintenant des experts indispensables à la mise au point, au fonctionnement, à l’entretien et à la sécurité d’un réseau informatique. Et je ne suis pas admin réseaux…

Je ne pouvais donc pas continuer à empiler des technologies dans mon réseau informatique personnel, et j’ai donc décidé de faire un grand nettoyage concernant son fonctionnement. C’est ce que je vais décrire sommairement ici, si cela peut aider un internaute à avoir une idée de ce dans quoi il s’embarque quand on touche aux réseaux.

Je ne suis pas certifié CISCO, ni HP, ni par aucun constructeur, mais j’ai apprécié le fonctionnement professionnel d’un bon nombre de leurs équipements, malgré le niveau de bruit des ventilateurs et la chauffe des composants. Je me suis tourné vers un constructeur d’équipement semi pro, avec une interface clicodrome qui me simplifie la vie. J’ai supprimé tous mes équipements réseaux hétérogènes (enfin presque).

Mes équipements réseaux sont tous de la marque Ubiquiti (ce billet n’est pas sponsorisé) : j’ai un cœur de réseau UDM Pro et quatre bornes Wifi UAP AC Pro. Le réseau filaire est de catégorie 5E en attendant de le remplacer par de la fibre optique, et pour m’éviter d’ajouter des câbles qui manquent parfois dans un coin de la maison, j’ajoute des petits switchs ER-X qui font le job silencieusement à un prix mini.

Les équipements filaires propagent 7 VLAN : Hébergement, Management, Bureau professionnel, Maison, IoT, Guest et FreePlayer. Les 4 derniers réseaux sont également propagés sur des réseaux Wifi associés.

La box de l’opérateur Free est en amont de l’UDM Pro que j’ai placé dans la DMZ de la box.

L’hébergement de ce blog est porté par une machine virtuelle Debian avec WordPress au sein d’un NAS Synology équipé de Virtual Machine Manager, et situé dans le réseau intitulé « Hébergement ». Ce réseau contient également une VM Debian avec mon serveur de flux RSS FreshRSS autohébergé.

Tous les réseaux sont étanches, avec des règles de firewall inspirées de cet excellent billet de Mikaël Guillerm. Pour l’anecdote, le réseau intitulé FreePlayer me permet de faire fonctionner correctement la télévision branchée dessus, en passant par un réseau Wifi dédié. En analysant les trames du FreePlayer, et en lisant un certain nombres d’articles sur le sujet, j’ai choisi un VLAN 100 avec un réseau IPv4 en 192.168.27.0/24 et un réseau IPv6 en mode SLAAC.

Plusieurs services sont accessibles depuis l’extérieur : ce blog, un serveur VPN Wireguard et un serveur VPN de secours OpenVPN. Ces trois services m’ont donné beaucoup de soucis car très attaqués. J’ai donc là aussi choisi la facilité : j’ai ouvert un compte gratuit chez Cloudflare et seules les adresses IP Cloudflare sont autorisées pour l’accès à ce blog. Pour le serveur VPN Wireguard, il est proposé nativement par l’UDM Pro et semble bien protégé. Pour le serveur OpenVPN du NAS Synology, je n’ai autorisé que les adresses IP françaises. Le monitoring de ces services est fait par UptimeRobot sur lequel j’ai ouvert un compte gratuit. J’ai un peu pesté contre Synology dont le parefeu ne permet pas d’autoriser la liste des adresses IP des sondes UptimeRobot sans bidouille.

Le réseau professionnel me sert pour le télétravail, pour ma machine de minage / cassage de mots de passe, et pour tous les tests que je peux faire sur mon Proxmox et sur mon poste d’attaque Kali.

J’ai encore mon NAS DIY basé sur un petit cube MicroServer Gen 8 HP sous OpenMediaVault pour mes sauvegardes dont je parlais ici en 2016. mais dans la simplification des technologies que je mène, j’ai acheté un espace « à vie » de 2To chez pcloud qui double mes sauvegardes distantes que je fais sur mon vieux Synology que j’ai placé dans ma coquette studette parisienne. L’application pcloud a simplifié également les transferts de photos entre nos différents téléphones.

J’ai encore beaucoup de choses à apprendre, en particulier sur IPv6 qui n’est autorisé chez moi pour l’instant que sur un seul réseau filaire. Bien sûr, le parefeu IPv6 de la Freebox est activé, ainsi que celui de l’UDM Pro. Je lis aussi avec attention les articles de Stéphane Bortzmeyer sur DNSSEC, mais j’avoue que je suis encore très tâtonnant sur le sujet. Les équipements et les ordinateurs de la maison utilisent les DNS sécurisés de Quad9, sauf ma machine perso qui héberge son propre serveur DNS non censuré.

Le plus dur reste à faire : ranger mon bureau, et jeter les câbles BNC et leurs bouchons de terminaison…

82616861 7b8873713b z

Se chauffer en minant des cryptomonnaies

Ce billet est la suite de celui-ci et me permet de faire un bilan de cette expérience.

Tout d’abord, je voulais utiliser du matériel d’occasion pour me faire une machine de cassage de mots de passe basée sur les anciennes cartes graphiques de mon gamer de fils. Puis est née l’envie de regarder un peu du côté des cryptomonnaies, pour découvrir cet univers. Enfin, l’idée était de remplacer mon chauffage électrique d’appoint qui me chauffe l’hiver. J’ai donc mené cette expérience tout l’hiver, prolongée jusqu’au mois de mai où j’ai éteint ce mini rig de minage.

La machine

Il s’agit d’un ancien PC dont la carte mère possède trois ports PCI-Express 1x qui me permettent de déporter les cartes graphiques loin du boîtier, grâce à des « Riser PCI » achetés pour mettre les cartes à la verticale.

Si au départ j’ai utilisé plusieurs alimentations séparées, « bricolées » pour démarrer sans être reliées à la carte mère, j’ai fini par récupérer une alimentation unique de 850W qui me permet d’alimenter la carte mère et les cartes graphiques. Notez que j’aurais pu simplement acheter un câble « double alimentation » à 12€ permettant de brancher deux alims ATX sur la même carte mère. Mais bon, les alims étaient vieilles, chauffaient beaucoup et je n’avais pas trop envie de mettre le feu à ma studette…

J’ai utilisé trois cartes graphiques : 2 GTX1080Ti (dont une achetée sur LeBonCoin) et 1 GTX1060, toutes branchées sur leur riser. J’ai ajoutée quelques radiateurs passifs qui traînaient dans mon bazar, afin d’extraire le plus vite possible la chaleur des GPU (en plus des ventilateurs d’origine) et les maintenir à environ 70°C en fonctionnement.

A vu de nez, l’ensemble consomme environ 700Wh, ce qui correspond à un petit chauffage d’appoint électrique. Attention toutefois, celui-ci va fonctionner 24h/24 et 7j/7 : il faut donc qu’il soit utile et permette de gagner quelques degrés par rapport au chauffage collectif de mon immeuble (ce qui est le cas : sans chauffage d’appoint, il fait 18°C dans ma studette l’hiver).

Le choix de la cryptomonnaie et de l’équipe de minage

Après avoir fait pas mal de tests, j’ai choisi de miner de l’Ethereum (ETH) et d’être payé sans frais en Bitcoin (BTC) en participant à l’équipe de minage eth.2miners.com. Il n’est pas nécessaire d’y créer un compte et les frais de participation sont corrects (1%). J’ai choisi d’être payé dès que possible, c’est-à-dire dès que la rémunération de mon système de minage arrive à 0.005 ETH, ce qu’il atteint tous les 4 jours. Cet hiver, cela correspondait environ à 14 euros tous les 4 jours.

J’utilise le logiciel Gminer qui utilise bien les ressources de ma configuration, là aussi à un coût raisonnable dû aux développeurs (1%).

Enfin j’utilise le logiciel Exodus comme portefeuille crypto pour obtenir une adresse BTC et y stocker mes Bitcoins obtenus pour les blocs ETH minés. J’ai fait le choix d’un portefeuille logiciel installé sur ma machine (et mon téléphone) pour éviter d’utiliser celui fourni par les plateforme (Binance, ZenGo…). Cela demande de bien faire attention à ses sauvegardes.

Le transfert en euros

Mon objectif initial n’était pas de faire des plus-values d’investissements, et donc je pensais transférer rapidement mes Bitcoins en Euros. Mais j’ai été relativement désappointé par l’application ZenGo que j’utilisais initialement (car sans obligation de créer un compte). En effet, il s’est passée 3 heures entre la demande de conversion de mes Bitcoins en Euros et sa réalisation effective par ZenGo, ce qui a fait que j’ai perdu 3% du montant attendu (le BTC avait baissé pendant ces 3h). Ça laisse une impression désagréable, loin de l’idée de l’ordre de vente à la corbeille que je vois dans les films.

J’ai donc fini par me créer un compte sur une plateforme d’échange, et j’ai choisi Binance. J’ai mis un peu de temps à trouver les menus des seules actions qui m’intéressent, mais j’ai fini par comprendre (la plateforme est surtout conçue pour ceux qui veulent trader).

Je transfère donc de temps en temps mes Bitcoins avec Exodus vers Binance, puis je choisis sur Binance le moment de la cotation du BTC la plus intéressante pour faire la conversion en euros vers mon compte bancaire. C’est amusant comment on en arrive à regarder les cours du BTC tous les jours en « espérant » que ça monte (bull market ou marché taureau). Autant dire qu’en ce moment, je ne transfère pas grand chose (bear market ou marché ours).

Au passage, j’ai appris qu’en bourse, on appelle un marché à la baisse « bear market » et un marché à la hausse « bull market », à cause de la façon dont ces deux animaux se battent : l’ours attaque avec ses griffes de haut en bas, alors que le taureau utilise ses cornes de bas en haut 🙂

Ma machine de minage est maintenant éteinte jusqu’à l’hiver prochain, sauf bien sur de temps en temps pour un petit cassage de mots de passe avec hashcat… et ça, c’est une autre histoire.

493 ac
La chaleur, ce fléau