ai-secret-scout 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.fr.md +514 -0
- package/README.md +519 -0
- package/ai_secret_scout.py +2376 -0
- package/bin/aiscout.js +31 -0
- package/package.json +40 -0
package/README.fr.md
ADDED
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
<pre>
|
|
3
|
+
█████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
|
|
4
|
+
██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
|
|
5
|
+
███████║██║ ███████╗██║ ██║ ██║██║ ██║ ██║
|
|
6
|
+
██╔══██║██║ ╚════██║██║ ██║ ██║██║ ██║ ██║
|
|
7
|
+
██║ ██║██║ ███████║╚██████╗╚██████╔╝╚██████╔╝ ██║
|
|
8
|
+
╚═╝ ╚═╝╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝
|
|
9
|
+
◈ A I S E C R E T S C O U T ◈
|
|
10
|
+
</pre>
|
|
11
|
+
|
|
12
|
+
<h2>AI Secret Scout (<code>aiscout</code>) — v2.3.0</h2>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<!-- Ligne 1 : badges techno & plateforme -->
|
|
16
|
+
<img src="https://img.shields.io/badge/Python-3.10%2B-3776AB?logo=python&logoColor=white" alt="Python 3.10+">
|
|
17
|
+
<img src="https://img.shields.io/badge/Interface-TUI%20Plein%20%C3%89cran-06B6D4?logo=gnometerminal&logoColor=white" alt="TUI Plein Écran">
|
|
18
|
+
<img src="https://img.shields.io/badge/D%C3%A9pendances-Zero%20External-22c55e?logo=python&logoColor=white" alt="Zéro Dépendance">
|
|
19
|
+
<img src="https://img.shields.io/badge/Watchdog-Temps%20R%C3%A9el%20%26%20Desktop%20Alerts-F59E0B?logo=airplayaudio&logoColor=white" alt="Watchdog Temps Réel">
|
|
20
|
+
<img src="https://img.shields.io/badge/Safe%20Restore-Gestionnaire%20Backups-7C3AED?logo=securityscorecard&logoColor=white" alt="Safe Restore">
|
|
21
|
+
<img src="https://img.shields.io/badge/Plateforme-Linux%20%7C%20WSL%20(uniquement)-E95420?logo=linux&logoColor=white" alt="Linux | WSL (uniquement)">
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<!-- Ligne 2 : thématique & écosystèmes IA audités -->
|
|
26
|
+
<img src="https://img.shields.io/badge/Claude%20Code-Audit%C3%A9-D97706?logo=anthropic&logoColor=white" alt="Claude Code">
|
|
27
|
+
<img src="https://img.shields.io/badge/Antigravity-Audit%C3%A9-4285F4?logo=google&logoColor=white" alt="Antigravity">
|
|
28
|
+
<img src="https://img.shields.io/badge/OpenAI%20Codex-Audit%C3%A9-10A37F?logo=openai&logoColor=white" alt="Codex">
|
|
29
|
+
<img src="https://img.shields.io/badge/GitHub%20Copilot-Audit%C3%A9-000000?logo=githubcopilot&logoColor=white" alt="GitHub Copilot">
|
|
30
|
+
<img src="https://img.shields.io/badge/Cursor%20%26%20Aider-Audit%C3%A9-8B5CF6" alt="Cursor & Aider">
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<p align="center">
|
|
34
|
+
<i>Audit, surveillance temps réel (Watchdog), alertes bureau, détection heuristique et caviardage sécurisé de fuites de secrets dans les historiques d'IA.</i>
|
|
35
|
+
</p>
|
|
36
|
+
|
|
37
|
+
<p align="center">
|
|
38
|
+
<b><a href="./README.md">🇬🇧 English documentation</a></b> | <b>🇫🇷 Documentation en français</b>
|
|
39
|
+
</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 📑 Sommaire
|
|
45
|
+
1. [Pourquoi ce projet ?](#-pourquoi-ce-projet-)
|
|
46
|
+
2. [Nouveautés majeures de la v2.3.0](#-nouveautés-majeures-de-la-v230)
|
|
47
|
+
3. [Lancement rapide](#-lancement-rapide)
|
|
48
|
+
4. [Interface TUI & Navigation](#-interface-tui--navigation)
|
|
49
|
+
5. [Surveillance Temps Réel (Watchdog) & Notifications Bureau](#-surveillance-temps-réel-watchdog--notifications-bureau)
|
|
50
|
+
6. [Gestionnaire de Sauvegardes & Restauration (`Safe Restore`)](#-gestionnaire-de-sauvegardes--restauration-safe-restore)
|
|
51
|
+
7. [Écosystèmes d'IA Audités](#-écosystèmes-dia-audités)
|
|
52
|
+
8. [Moteur de Détection & Signatures (18 intégrées + Custom)](#-moteur-de-détection--signatures-18-intégrées--custom)
|
|
53
|
+
9. [Fichier de Règles Personnalisées (`rules.json`)](#-fichier-de-règles-personnalisées-rulesjson)
|
|
54
|
+
10. [Algorithmes Anti-Faux-Positifs](#-algorithmes-anti-faux-positifs)
|
|
55
|
+
11. [Assainissement & Caviardage Sécurisé (`Safe Redact`)](#-assainissement--caviardage-sécurisé-safe-redact)
|
|
56
|
+
12. [Raccourcis Clavier & Contrôles](#-raccourcis-clavier--contrôles)
|
|
57
|
+
13. [Mode Scripting / CLI & Automatisation](#-mode-scripting--cli--automatisation)
|
|
58
|
+
14. [Architecture Technique](#-architecture-technique)
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 🔍 Pourquoi ce projet ?
|
|
63
|
+
|
|
64
|
+
Lors de l'utilisation d'assistants de codage autonomes (**Claude Code**, **Google Antigravity / Gemini CLI**, **OpenAI Codex**, **GitHub Copilot CLI**, **Cursor**), les modèles enregistrent des transcriptions complètes de chaque échange dans votre espace personnel (`~/.claude`, `~/.gemini`, etc.).
|
|
65
|
+
|
|
66
|
+
### Le problème
|
|
67
|
+
1. **Fuites passives de secrets** : Lorsqu'un agent exécute une commande terminal (ex. `infisical secrets`, `ssh`, `curl`, ou un script `.env`), la sortie brute de la commande est enregistrée en clair dans les logs locaux.
|
|
68
|
+
2. **Fuites actives dans les prompts** : Lorsqu'un utilisateur colle une clé d'API, un token GitHub ou un mot de passe directement dans la boîte de dialogue, cette valeur est conservée indéfiniment sur le disque.
|
|
69
|
+
3. **Absence de protection native** : Même si certains assistants avertissent l'utilisateur de la fuite, ils ne suppriment **jamais** la valeur enregistrée sur le disque.
|
|
70
|
+
4. **Persistance invisible** : Les secrets restent vulnérables aux malwares locaux, aux sauvegardes cloud accidentelles ou aux partages de dépôts.
|
|
71
|
+
|
|
72
|
+
**AI Secret Scout (`aiscout`)** comble cette faille critique : il surveille et audite l'ensemble des historiques d'IA sur votre machine, attribue chaque secret à son **projet d'origine**, identifie son **contexte d'usage**, et permet de le **caviarder chirurgicalement** avec sauvegarde de secours et restauration instantanée.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🌟 Nouveautés majeures de la v2.3.0
|
|
77
|
+
|
|
78
|
+
* **📡 Surveillance continue en temps réel (Mode Watchdog)** :
|
|
79
|
+
* Détecte instantanément l'écriture ou la modification d'un fichier de session IA sans solliciter le CPU.
|
|
80
|
+
* Envoi immédiat d'une **notification de bureau native** (`notify-send`) sous Linux (KDE Plasma Wayland / GNOME).
|
|
81
|
+
* Voyant de pulsation visuelle en direct `🟢 [VEILLE ACTIVE]` et journal des événements défilant en temps réel.
|
|
82
|
+
* Accessible via le menu TUI `[8]` ou en ligne de commande directe : `aiscout --watch`.
|
|
83
|
+
|
|
84
|
+
* **↩️ Gestionnaire de sauvegardes & Restauration (`Safe Restore`)** :
|
|
85
|
+
* Tableau TUI interactif dédié à la gestion des sauvegardes (`.bak`) créées lors des opérations de caviardage.
|
|
86
|
+
* Restauration unitaire chirurgicale (`[R]`), restauration complète de tous les originaux (`[A]`), ou purge définitive (`[P]`).
|
|
87
|
+
* Commandes CLI dédiées : `aiscout --restore` et `aiscout --clean-backups`.
|
|
88
|
+
|
|
89
|
+
* **🔍 Recherche interactive (`/`) & Tri dynamique (`S`/`D`/`O`) dans le tableau TUI** :
|
|
90
|
+
* Touche `/` : Champ de recherche textuel instantané (filtre en direct par catégorie, outil, projet, chemin ou valeur).
|
|
91
|
+
* Touches de tri dynamique :
|
|
92
|
+
* `S` : Tri par sévérité décroissante (`🔴 CRITIQUE` > `🟡 ÉLEVÉ` > `🔵 MOYEN`).
|
|
93
|
+
* `D` : Tri par date / fraîcheur de session (les plus récents en premier).
|
|
94
|
+
* `O` : Tri alphabétique par outil d'IA.
|
|
95
|
+
* Réinitialisation rapide via `Backspace` ou `Échap`.
|
|
96
|
+
|
|
97
|
+
* **⚙️ Moteur de règles personnalisées & 4 nouvelles signatures** :
|
|
98
|
+
* Chargement automatique de règles définies par l'utilisateur dans `~/.config/aiscout/rules.json`.
|
|
99
|
+
* 4 nouvelles signatures intégrées majeures :
|
|
100
|
+
* **GitLab Personal Access Token** (`glpat-[0-9a-zA-Z_\-]{20,}`)
|
|
101
|
+
* **HuggingFace Access Token** (`hf_[a-zA-Z0-9]{34,}`)
|
|
102
|
+
* **Resend API Key** (`re_[a-zA-Z0-9_\-]{24,}`)
|
|
103
|
+
* **Supabase / JWT Secret** (`eyJ...`)
|
|
104
|
+
* Commande d'inspection CLI : `aiscout --list-rules` listant les 18 règles intégrées et les règles custom.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 🚀 Lancement rapide
|
|
109
|
+
|
|
110
|
+
`aiscout` peut être exécuté directement ou installé sur votre machine :
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# ⚡ Exécution instantanée sans installation préalable
|
|
114
|
+
npx ai-secret-scout
|
|
115
|
+
# ou avec bun
|
|
116
|
+
bunx ai-secret-scout
|
|
117
|
+
|
|
118
|
+
# 📦 Installation globale permanente (recommandée)
|
|
119
|
+
npm install -g ai-secret-scout
|
|
120
|
+
# ou avec bun
|
|
121
|
+
bun add -g ai-secret-scout
|
|
122
|
+
|
|
123
|
+
# Une fois installé, les commandes aiscout et ai-secret-scout sont disponibles partout :
|
|
124
|
+
aiscout
|
|
125
|
+
|
|
126
|
+
# Surveillance temps réel (Watchdog) avec alertes bureau
|
|
127
|
+
aiscout --watch
|
|
128
|
+
|
|
129
|
+
# Restauration instantanée de tous les fichiers originaux depuis leurs sauvegardes .bak
|
|
130
|
+
aiscout --restore
|
|
131
|
+
|
|
132
|
+
# Nettoyage définitif de tous les fichiers .bak
|
|
133
|
+
aiscout --clean-backups
|
|
134
|
+
|
|
135
|
+
# Liste exhaustive de toutes les règles actives (intégrées + personnalisées)
|
|
136
|
+
aiscout --list-rules
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
L'application bascule automatiquement votre terminal dans un écran alternatif (`\033[?1049h`). À la fermeture (`Q`), votre terminal d'origine est intégralement restauré sans résidu d'affichage.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 🎨 Interface TUI & Navigation
|
|
144
|
+
|
|
145
|
+
Le moteur TUI autonome d'`aiscout` (pure bibliothèque standard Python) s'adapte dynamiquement aux dimensions de votre terminal sans jamais tronquer le menu ni provoquer de défilement parasite.
|
|
146
|
+
|
|
147
|
+
### 1. Tableau de bord & Menu d'accueil interactif (Hub central)
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
|
|
151
|
+
|
|
152
|
+
█████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
|
|
153
|
+
██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
|
|
154
|
+
███████║██║ ███████╗██║ ██║ ██║██║ ██║ ██║
|
|
155
|
+
██╔══██║██║ ╚════██║██║ ██║ ██║██║ ██║ ██║
|
|
156
|
+
██║ ██║██║ ███████║╚██████╗╚██████╔╝╚██████╔╝ ██║
|
|
157
|
+
╚═╝ ╚═╝╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝
|
|
158
|
+
|
|
159
|
+
◈ A U D I T D E S S E C R E T S E N C L A I R D A N S L E S I A ◈
|
|
160
|
+
Claude Code • Antigravity / Gemini • Codex • GitHub Copilot • Cursor
|
|
161
|
+
|
|
162
|
+
[ 🔴 19 CRITIQUES │ 🟡 1 ÉLEVÉ │ 🔵 1 MOYEN ] ◈ TOTAL : 21 SECRETS EXPOSÉS
|
|
163
|
+
|
|
164
|
+
║ ▶ [1] 🔍 AUDIT COMPLET DES SESSIONS IA ║
|
|
165
|
+
│ [2] 📋 EXPLORATEUR DE SECRETS (TABLEAU TUI) │
|
|
166
|
+
│ [3] 👁️ MODE RÉVÉLATION (VALEURS EN CLAIR) │
|
|
167
|
+
│ [4] 🏷️ FILTRER PAR OUTIL IA OU PROJET │
|
|
168
|
+
│ [5] 💾 EXPORTER LE DOSSIER D'AUDIT │
|
|
169
|
+
│ [6] 🛡️ ASSAINISSEMENT & CAVIARDAGE SÉCURISÉ │
|
|
170
|
+
│ [7] ↩️ GESTIONNAIRE DES BACKUPS (.BAK) │
|
|
171
|
+
│ [8] 📡 SURVEILLANCE TEMPS RÉEL (WATCHDOG) │
|
|
172
|
+
│ [9] 🚪 QUITTER L'APPLICATION │
|
|
173
|
+
|
|
174
|
+
╭─ ACTION SÉLECTIONNÉE ───────────────────────────────────────────────────────╮
|
|
175
|
+
│ 💡 Naviguer au clavier dans la liste des secrets détectés et inspecter │
|
|
176
|
+
╰─────────────────────────────────────────────────────────────────────────────╯
|
|
177
|
+
|
|
178
|
+
[↑/↓] Naviguer │ [Entrée] Valider │ [1-9] Accès direct │ [Q] Quitter
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 2. Explorateur de secrets (Tableau interactif, Tri dynamique & Recherche)
|
|
182
|
+
|
|
183
|
+
La vue tableau permet de parcourir l'intégralité des fuites identifiées avec pagination fluide, tri multi-critères et recherche plein texte instantanée :
|
|
184
|
+
|
|
185
|
+
```text
|
|
186
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
|
|
187
|
+
|
|
188
|
+
📋 EXPLORATEUR DE SECRETS (1/21) — Mode : MASQUÉ 🛡️ │ Tri : Sévérité (🔴 > 🟡 > 🔵)
|
|
189
|
+
|
|
190
|
+
# │ SÉVÉRITÉ │ CATÉGORIE │ OUTIL IA │ PROJET │ VALEUR DU SECRET
|
|
191
|
+
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
192
|
+
1 │ 🔴 CRITIQUE │ Clé Privée (SSH / RSA / ECC) │ Claude Code │ ~ │ ----****************...
|
|
193
|
+
2 │ 🔴 CRITIQUE │ Clé Privée (SSH / RSA / ECC) │ Claude Code │ ~ │ ----****************...
|
|
194
|
+
3 │ 🔴 CRITIQUE │ GitHub Token (PAT / Fine-Gr) │ Claude Code │ ~/Documents/Dev/RIL... │ ghp_****************...
|
|
195
|
+
4 │ 🔴 CRITIQUE │ Infisical / Coolify Token │ Claude Code │ ~/Documents/Dev/RIL... │ st.4****************...
|
|
196
|
+
5 │ 🟡 ÉLEVÉ │ Discord Bot Token │ Claude Code │ ~/Documents/Dev/RIL... │ MTE2****************...
|
|
197
|
+
6 │ 🔵 MOYEN │ Mot de passe passé en comman │ Claude Code │ ~/Documents/Dev/RIL... │ pass****************...
|
|
198
|
+
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
199
|
+
|
|
200
|
+
[↑/↓] Naviguer │ [Entrée] Fiche │ [/] Chercher │ [S/D/O] Trier │ [R] Mode │ [C] Caviarder │ [Q] Retour
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
#### Recherche interactive plein texte (`/`)
|
|
204
|
+
En appuyant sur `/`, une boîte de saisie inline s'ouvre sur la barre inférieure. Le tableau se met à jour en temps réel (filtre instantané sur la catégorie, l'outil, le projet, le fichier ou la valeur du secret) :
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
|
|
208
|
+
|
|
209
|
+
📋 EXPLORATEUR DE SECRETS (1/3) — Mode : MASQUÉ 🛡️ │ Tri : Sévérité (🔴 > 🟡 > 🔵)
|
|
210
|
+
🔍 Recherche active : "github" (3 secrets trouvés) │ [Backspace/Esc] Effacer
|
|
211
|
+
|
|
212
|
+
# │ SÉVÉRITÉ │ CATÉGORIE │ OUTIL IA │ PROJET │ VALEUR DU SECRET
|
|
213
|
+
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
214
|
+
1 │ 🔴 CRITIQUE │ GitHub Token (PAT / Fine-Gr) │ Claude Code │ ~/Documents/Dev/RIL... │ ghp_****************...
|
|
215
|
+
2 │ 🔴 CRITIQUE │ GitHub Token (PAT / Fine-Gr) │ Claude Code │ ~/Documents/Dev/RIL... │ ghp_****************...
|
|
216
|
+
3 │ 🔴 CRITIQUE │ GitHub Token (PAT / Fine-Gr) │ Antigravity (Gemi) │ Session Antigravity │ ghp_****************...
|
|
217
|
+
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
218
|
+
|
|
219
|
+
[↑/↓] Naviguer │ [Entrée] Fiche │ [/] Chercher │ [S/D/O] Trier │ [R] Mode │ [C] Caviarder │ [Q] Retour
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### 3. Fiche détaillée d'audit (Modal Card)
|
|
223
|
+
|
|
224
|
+
En pressant `Entrée` sur une ligne du tableau, une fiche d'audit chirurgicale s'affiche avec le contexte exact d'usage et l'extrait de log :
|
|
225
|
+
|
|
226
|
+
```text
|
|
227
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
|
|
228
|
+
|
|
229
|
+
╭──────────────────────────────────────────────────────────────────────────────────╮
|
|
230
|
+
│ FICHE D'AUDIT DU SECRET DÉTECTÉ │
|
|
231
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
232
|
+
│ Catégorie : Clé Privée (SSH / RSA / ECC) │
|
|
233
|
+
│ Sévérité : CRITIQUE │
|
|
234
|
+
│ Outil IA : Claude Code │
|
|
235
|
+
│ Projet d'origine: ~ │
|
|
236
|
+
│ Date session : 2026-08-20 14:06 │
|
|
237
|
+
│ Emplacement : 20b45f26-98f1-4273-a834-32243f11d067.jsonl:23 │
|
|
238
|
+
│ Contexte : Sortie d'outil exécuté (commande bash, .env ou infisical) │
|
|
239
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
240
|
+
│ VALEUR EN CLAIR: -----BEGIN OPENSSH PRIVATE KEY----- │
|
|
241
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
242
|
+
│ Extrait Log : │ SECRET NAME │ SECRET VALUE │
|
|
243
|
+
├──────────────────────────────────────────────────────────────────────────────────┤
|
|
244
|
+
│ Action conseillée: 1. Procéder à la rotation de la clé/identifiant. │
|
|
245
|
+
│ 2. Caviarder ce fichier avec [C] pour effacer la trace. │
|
|
246
|
+
╰──────────────────────────────────────────────────────────────────────────────────╯
|
|
247
|
+
|
|
248
|
+
[C] Caviarder ce secret │ [Esc] ou [Q] Retour à la liste
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### 4. Animation de chargement en temps réel (Spinner & Jauge dynamique)
|
|
252
|
+
|
|
253
|
+
Lors de l'audit initial, du caviardage ou de l'exportation des dossiers d'audit, une animation à 100ms affiche l'étape en cours et la progression :
|
|
254
|
+
|
|
255
|
+
```text
|
|
256
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:30
|
|
257
|
+
|
|
258
|
+
█████╗ ██╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗████████╗
|
|
259
|
+
██╔══██╗██║ ██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝
|
|
260
|
+
███████║██║ ███████╗██║ ██║ ██║██║ ██║ ██║
|
|
261
|
+
██╔══██║██║ ╚════██║██║ ██║ ██║██║ ██║ ██║
|
|
262
|
+
██║ ██║██║ ███████║╚██████╗╚██████╔╝╚██████╔╝ ██║
|
|
263
|
+
╚═╝ ╚═╝╚═╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝
|
|
264
|
+
|
|
265
|
+
⚡ AUDIT DE SÉCURITÉ EN COURS D'EXÉCUTION...
|
|
266
|
+
|
|
267
|
+
╭──────────────────────────────────────────────────────────────────╮
|
|
268
|
+
│ ⠹ [▰▰▰▰▰▰▰▰▰▰▰▰▰▰▰▱▱▱▱▱▱▱▱▱▱▱] 58% │
|
|
269
|
+
│ Analyse : Infisical / Coolify Token │
|
|
270
|
+
╰──────────────────────────────────────────────────────────────────╯
|
|
271
|
+
|
|
272
|
+
Veuillez patienter pendant l'analyse...
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 🌟 Points forts du moteur TUI (v2.3.0)
|
|
276
|
+
* **Gestion infaillible des flèches** : Décodage non bloquant avec lookahead 100ms absorbant toutes les séquences d'échappement ANSI (`\x1b[A`, `\x1b[B`, `\x1bOA`, `\x1bOB`, consoles Linux et modificateurs Shift/Ctrl).
|
|
277
|
+
* **Layout auto-adaptatif (zéro coupure)** :
|
|
278
|
+
* Barre supérieure clouée à la **ligne 1**.
|
|
279
|
+
* Barre inférieure clouée à la **dernière ligne du terminal**.
|
|
280
|
+
* Hauteur ≥ 42 : Grandes cartes épaisses avec double bordure (`╔══════╗`).
|
|
281
|
+
* Hauteur 27–41 : Boutons barres compacts en surbrillance avec boîte de description contextuelle.
|
|
282
|
+
* Hauteur < 27 : En-tête ultra-compact assurant que 100% des 9 actions restent immédiatement accessibles.
|
|
283
|
+
* **Précision typographique Unicode** : Prise en charge des largeurs de caractères variables (`unicodedata.east_asian_width`) pour garantir l'alignement strict des bordures verticales avec les emojis.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 📡 Surveillance Temps Réel (Watchdog) & Notifications Bureau
|
|
288
|
+
|
|
289
|
+
Le mode **Watchdog** transforme `aiscout` en un gardien silencieux en arrière-plan :
|
|
290
|
+
|
|
291
|
+
```text
|
|
292
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:21
|
|
293
|
+
|
|
294
|
+
📡 SURVEILLANCE EN TEMPS RÉEL (WATCHDOG) │ 🟢 [VEILLE ACTIVE]
|
|
295
|
+
Détecte les sessions IA en écriture et notifie instantanément sur le bureau KDE Plasma
|
|
296
|
+
|
|
297
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
298
|
+
│ Fichiers écoutés : 5498 │ Scans live : 14 │ Alertes déclenchées : 0 │
|
|
299
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
300
|
+
|
|
301
|
+
╭─ 📜 JOURNAL DES ÉVÉNEMENTS RÉCENTS (14 logs) ────────────────────────────────╮
|
|
302
|
+
│ [22:20:10] 🚀 Surveillance démarrée — 5498 fichiers d'historique IA sous éc │
|
|
303
|
+
│ [22:20:45] ℹ️ Modification vérifiée saine : history.jsonl │
|
|
304
|
+
│ [22:21:02] ⚠️ ALERTE : GitHub Token (CRITIQUE) dans Claude Code (~/ProjetX) │
|
|
305
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
306
|
+
|
|
307
|
+
[Q] ou [Esc] Quitter la surveillance et revenir au menu principal
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Mécanismes clés
|
|
311
|
+
1. **Écoute non-intrusive** : Scrute les horodatages `mtime` des répertoires d'IA sans lire le disque inutilement.
|
|
312
|
+
2. **Scan chirurgical** : Dès qu'une modification ou un nouveau fichier est détecté, seul ce fichier est analysé à chaud avec `scan_single_file()`.
|
|
313
|
+
3. **Alertes de bureau natives** : Déclenchement via `notify-send` avec niveau d'urgence `critical` sous KDE Plasma Wayland et GNOME.
|
|
314
|
+
4. **Signal d'alerte sonore** : Bip terminal (`\a`) lors de chaque détection de secret critique.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## ↩️ Gestionnaire de Sauvegardes & Restauration (`Safe Restore`)
|
|
319
|
+
|
|
320
|
+
Le menu `[7]` offre un contrôle absolu sur les fichiers de sauvegarde générés lors des opérations de caviardage :
|
|
321
|
+
|
|
322
|
+
```text
|
|
323
|
+
◈ AISCOUT v2.3.0 │ Utilisateur : dev_redious │ Machine : nobara-pc 12/09/2026 22:22
|
|
324
|
+
|
|
325
|
+
↩️ GESTIONNAIRE DES SAUVEGARDES & RESTAURATION (.BAK)
|
|
326
|
+
Restaurer les fichiers originaux avant caviardage ou purger les sauvegardes.
|
|
327
|
+
|
|
328
|
+
# │ FICHIER SOURCE │ OUTIL IA │ TAILLE │ DATE SAUVEGARDE
|
|
329
|
+
──────────────────────────────────────────────────────────────────────────────────────────
|
|
330
|
+
1 │ 20b45f26-98f1-4273-a834...jsonl │ Claude Code │ 412.3 Ko │ 12/09/2026 22:15
|
|
331
|
+
2 │ history.jsonl │ Antigravity (Gemini) │ 84.1 Ko │ 12/09/2026 21:50
|
|
332
|
+
──────────────────────────────────────────────────────────────────────────────────────────
|
|
333
|
+
|
|
334
|
+
[↑/↓] Naviguer │ [R] Restaurer sélection │ [A] Tout restaurer │ [P] Purger (.bak) │ [Esc] Retour
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
* **`[R]` Restaurer le fichier sélectionné** : Remplace le fichier courant par sa version originale et supprime le `.bak`.
|
|
338
|
+
* **`[A]` Tout restaurer** : Restaure l'ensemble des sauvegardes en une seule commande après confirmation.
|
|
339
|
+
* **`[P]` Purger définitivement** : Supprime tous les `.bak` pour finaliser définitivement l'assainissement et libérer l'espace disque.
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 📁 Écosystèmes d'IA Audités
|
|
344
|
+
|
|
345
|
+
`aiscout` recherche automatiquement les historiques dans toute session utilisateur :
|
|
346
|
+
|
|
347
|
+
| Assistant IA | Chemins analysés | Types de fichiers |
|
|
348
|
+
| :--- | :--- | :--- |
|
|
349
|
+
| **Claude Code** | `~/.claude/projects/`, `~/.claude/history.jsonl`, `~/.claude/handoff/` | `JSONL`, `JSON` |
|
|
350
|
+
| **Google Antigravity / Gemini CLI** | `~/.gemini/antigravity-cli/brain/`, `~/.gemini/antigravity-cli/history.jsonl`, `conversations/` | `JSONL`, `JSON` |
|
|
351
|
+
| **OpenAI Codex CLI** | `~/.codex/sessions/`, `~/.codex/history.jsonl` | `JSONL`, `JSON` |
|
|
352
|
+
| **GitHub Copilot CLI** | `~/.copilot/session-state/` | `JSON`, `LOG` |
|
|
353
|
+
| **Cursor & Aider** | `~/.cursor/projects/`, `~/.cursor/plans/`, `.aider.chat.history.md` | `JSON`, `MD` |
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 🛡️ Moteur de Détection & Signatures (18 intégrées + Custom)
|
|
358
|
+
|
|
359
|
+
| Catégorie | Sévérité | Exemple de pattern détecté |
|
|
360
|
+
| :--- | :---: | :--- |
|
|
361
|
+
| **GitHub Token (PAT / Fine-Grained)** | 🔴 **CRITIQUE** | `ghp_[A-Za-z0-9]{36}`, `github_pat_[A-Za-z0-9_]{82}` |
|
|
362
|
+
| **GitLab Personal Access Token** *(Nouveau)* | 🔴 **CRITIQUE** | `glpat-[0-9a-zA-Z_\-]{20,}` |
|
|
363
|
+
| **HuggingFace Token** *(Nouveau)* | 🔴 **CRITIQUE** | `hf_[a-zA-Z0-9]{34,}` |
|
|
364
|
+
| **Clé Privée (SSH / RSA / ECC / PEM)** | 🔴 **CRITIQUE** | `-----BEGIN (?:OPENSSH\|RSA\|EC) PRIVATE KEY-----` |
|
|
365
|
+
| **Stripe Secret Key** | 🔴 **CRITIQUE** | `sk_live_[0-9a-zA-Z]{24,}`, `rk_live_[0-9a-zA-Z]{24,}` |
|
|
366
|
+
| **Base de données (URI avec MDP)** | 🔴 **CRITIQUE** | `postgres://user:password@host`, `mysql://...`, `mongodb://...` |
|
|
367
|
+
| **Infisical / Coolify Token** | 🔴 **CRITIQUE** | `st.[a-f0-9]{24}.[a-f0-9]{64}`, `inf_sec_...`, `inf_tok_...` |
|
|
368
|
+
| **Resend API Key** *(Nouveau)* | 🟡 **ÉLEVÉ** | `re_[a-zA-Z0-9_\-]{24,}` |
|
|
369
|
+
| **Supabase / JWT Secret** *(Nouveau)* | 🟡 **ÉLEVÉ** | `eyJ[a-zA-Z0-9_-]{10,}\.eyJ...` |
|
|
370
|
+
| **Anthropic API Key** | 🟡 **ÉLEVÉ** | `sk-ant-api03-[A-Za-z0-9_-]{30,}` |
|
|
371
|
+
| **OpenAI API Key** | 🟡 **ÉLEVÉ** | `sk-proj-[A-Za-z0-9_-]{32,}` |
|
|
372
|
+
| **AWS Access Key** | 🟡 **ÉLEVÉ** | `AKIA[0-9A-Z]{16}`, `ASIA[0-9A-Z]{16}` |
|
|
373
|
+
| **Discord Bot Token** | 🟡 **ÉLEVÉ** | `[MN][A-Za-z\d]{23,25}\.[a-zA-Z0-9_-]{6}\.[a-zA-Z0-9_-]{27,39}` |
|
|
374
|
+
| **Slack Token** | 🟡 **ÉLEVÉ** | `xox[baprs]-[0-9a-zA-Z]{10,48}` |
|
|
375
|
+
| **Tailscale Auth Key** | 🟡 **ÉLEVÉ** | `tskey-auth-[a-zA-Z0-9_-]{20,}` |
|
|
376
|
+
| **Variable d'environnement sensible** | 🟡 **ÉLEVÉ** | `PGPASSWORD=...`, `MYSQL_PWD=...`, `API_KEY=...` |
|
|
377
|
+
| **Mot de passe dans le Prompt** | 🟡 **ÉLEVÉ** | `"mon mot de passe est ..."`, `"mdp: ..."` |
|
|
378
|
+
| **Mot de passe passé en commande CLI**| 🔵 **MOYEN** | `sshpass -p ...`, `mysql -p...`, `--password ...` |
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## ⚙️ Fichier de Règles Personnalisées (`rules.json`)
|
|
383
|
+
|
|
384
|
+
`aiscout` permet d'ajouter vos propres signatures propres à votre entreprise ou projets dans :
|
|
385
|
+
`~/.config/aiscout/rules.json`
|
|
386
|
+
|
|
387
|
+
```json
|
|
388
|
+
{
|
|
389
|
+
"_comment": "Ajoutez vos règles personnalisées ici. Format: Nom: {regex, severity, description}",
|
|
390
|
+
"Jeton Interne Entreprise": {
|
|
391
|
+
"regex": "\\bcorp_sec_[a-zA-Z0-9]{24,}\\b",
|
|
392
|
+
"severity": "CRITIQUE",
|
|
393
|
+
"description": "Jeton secret d'accès à l'API interne d'entreprise."
|
|
394
|
+
},
|
|
395
|
+
"Clé API Partenaire": {
|
|
396
|
+
"regex": "\\bpartner_live_[a-z0-9]{32}\\b",
|
|
397
|
+
"severity": "ÉLEVÉ",
|
|
398
|
+
"description": "Clé d'authentification API partenaire B2B."
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Toutes les règles définies dans ce fichier sont automatiquement identifiées avec le suffixe `[CUSTOM]` et intégrées à l'audit complet, au watchdog et au tableau TUI.
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## 🧠 Algorithmes Anti-Faux-Positifs
|
|
408
|
+
|
|
409
|
+
Pour éliminer le bruit et les faux positifs fréquents, `aiscout` applique 5 filtres rigoureux :
|
|
410
|
+
|
|
411
|
+
1. **Calcul d'entropie de Shannon ($H$)** :
|
|
412
|
+
$$H(X) = -\sum_{i=1}^n P(x_i) \log_2 P(x_i)$$
|
|
413
|
+
Les chaînes avec une entropie insuffisante (< 3.2 bits/symbole) sont éliminées.
|
|
414
|
+
2. **Diversité des classes de caractères** :
|
|
415
|
+
Les secrets doivent réunir au moins 3 types distincts (minuscules, majuscules, chiffres, symboles).
|
|
416
|
+
3. **Liste noire contextuelle de Placeholders** :
|
|
417
|
+
Exclusion stricte des exemples de documentation : `your_token`, `dummy`, `example`, `change_me`, `sk-ant-xxx`, etc.
|
|
418
|
+
4. **Validation de bloc pour clés privées** :
|
|
419
|
+
Les mentions textuelles isolées sont ignorées ; seules les clés comportant un en-tête, un corps cryptographique et un pied (`-----END ...`) sont retenues.
|
|
420
|
+
5. **Bouclier miroir anti-auto-détection** :
|
|
421
|
+
L'outil ignore ses propres expressions régulières, ses scripts et les mentions `[REDACTED_BY_AISCOUT]`.
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## 🛡️ Assainissement & Caviardage Sécurisé (`Safe Redact`)
|
|
426
|
+
|
|
427
|
+
* **Caviardage ciblé (`[C]`)** : Remplacement unitaire du secret par `[REDACTED_BY_AISCOUT]`.
|
|
428
|
+
* **Caviardage global (`[6]`)** : Assainissement en un clic de l'ensemble des sessions compromises.
|
|
429
|
+
* **Garantie `.bak`** : Création automatique d'une copie conforme avant modification du fichier original.
|
|
430
|
+
* **Intégration Safe Restore** : Toute modification peut être annulée instantanément depuis le menu `[7]`.
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## 🕹️ Raccourcis Clavier & Contrôles
|
|
435
|
+
|
|
436
|
+
### Menu Principal
|
|
437
|
+
| Touche | Action |
|
|
438
|
+
| :--- | :--- |
|
|
439
|
+
| `↑` / `↓` ou `k` / `j` ou `z` / `s` | Déplacer le curseur de sélection |
|
|
440
|
+
| `Entrée` / `Espace` / `→` | Valider et exécuter l'action sélectionnée |
|
|
441
|
+
| `1` à `9` | Accès direct au menu par son numéro |
|
|
442
|
+
| `Q` ou `Ctrl+C` | Quitter proprement l'application |
|
|
443
|
+
|
|
444
|
+
### Explorateur de Secrets (Tableau TUI)
|
|
445
|
+
| Touche | Action |
|
|
446
|
+
| :--- | :--- |
|
|
447
|
+
| `↑` / `↓` ou `k` / `j` | Naviguer ligne par ligne |
|
|
448
|
+
| `PageUp` / `PageDown` | Faire défiler par page entière |
|
|
449
|
+
| `Entrée` | Ouvrir la **fiche détaillée** du secret survolé |
|
|
450
|
+
| `/` | **Recherche interactive** par mot-clé (catégorie, outil, projet, valeur) |
|
|
451
|
+
| `S` | **Trier par sévérité** (`🔴 CRITIQUE` > `🟡 ÉLEVÉ` > `🔵 MOYEN`) |
|
|
452
|
+
| `D` | **Trier par date** de session (plus récents en premier) |
|
|
453
|
+
| `O` | **Trier par outil IA** (ordre alphabétique) |
|
|
454
|
+
| `Backspace` / `Échap` | Réinitialiser la recherche active |
|
|
455
|
+
| `R` | Basculer entre le mode **Masqué** (`ghp_****...`) et **En Clair** |
|
|
456
|
+
| `C` | Caviarder chirurgicalement le secret sélectionné |
|
|
457
|
+
| `Q` ou `Échap` | Retourner au menu principal |
|
|
458
|
+
|
|
459
|
+
### Surveillance Temps Réel (Watchdog) & Backups
|
|
460
|
+
| Touche | Action |
|
|
461
|
+
| :--- | :--- |
|
|
462
|
+
| `R` *(Backups)* | Restaurer la sauvegarde `.bak` sélectionnée |
|
|
463
|
+
| `A` *(Backups)* | Restaurer l'intégralité des sauvegardes |
|
|
464
|
+
| `P` *(Backups)* | Purger définitivement tous les fichiers `.bak` |
|
|
465
|
+
| `Q` ou `Échap` | Quitter l'écran et revenir au menu principal |
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## ⚙️ Mode Scripting / CLI & Automatisation
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
# Scan en ligne de commande standard
|
|
473
|
+
aiscout --scan
|
|
474
|
+
|
|
475
|
+
# Lancement direct du Watchdog avec alertes de bureau
|
|
476
|
+
aiscout --watch
|
|
477
|
+
|
|
478
|
+
# Restauration globale des fichiers originaux
|
|
479
|
+
aiscout --restore
|
|
480
|
+
|
|
481
|
+
# Nettoyage définitif des sauvegardes .bak
|
|
482
|
+
aiscout --clean-backups
|
|
483
|
+
|
|
484
|
+
# Liste des 18 règles actives + personnalisées
|
|
485
|
+
aiscout --list-rules
|
|
486
|
+
|
|
487
|
+
# Affichage des valeurs en clair
|
|
488
|
+
aiscout --reveal
|
|
489
|
+
|
|
490
|
+
# Sortie au format JSON pour pipelines automatisés (jq)
|
|
491
|
+
aiscout --json | jq '.[] | select(.severity == "CRITIQUE")'
|
|
492
|
+
|
|
493
|
+
# Exportation automatique d'un rapport complet en Markdown ou JSON
|
|
494
|
+
aiscout --export ~/Documents/audit_secrets.md
|
|
495
|
+
aiscout --export ~/Documents/audit_secrets.json
|
|
496
|
+
|
|
497
|
+
# Audit d'un répertoire utilisateur spécifique
|
|
498
|
+
aiscout --home-dir /home/autre_utilisateur
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## 🏗️ Architecture Technique
|
|
504
|
+
|
|
505
|
+
* **Langage** : Python 3.10+ standard pur (`os`, `sys`, `re`, `json`, `termios`, `tty`, `select`, `unicodedata`, `shutil`, `argparse`, `subprocess`).
|
|
506
|
+
* **Zéro Dépendance Externe** : Aucun package tiers `pip`. Conçu pour la bibliothèque standard Python 3.
|
|
507
|
+
* **Systèmes Supportés** : **Linux** (natif Wayland / X11) et **WSL / WSL2** sous Windows uniquement pour le moment (macOS et Windows natif non supportés).
|
|
508
|
+
* **Notification System** : Détection automatique de `notify-send` pour alertes desktop natives Wayland / X11.
|
|
509
|
+
* **Emplacement du code** : `/home/dev_redious/Documents/Dev/tools/ai-secret-scout/ai_secret_scout.py`
|
|
510
|
+
* **Configuration** : `~/.config/aiscout/rules.json`
|
|
511
|
+
* **Liens symboliques exécutables** :
|
|
512
|
+
- `~/.local/bin/aiscout`
|
|
513
|
+
- `~/.local/bin/ai-secret-scout`
|
|
514
|
+
* **Confidentialité absolue** : 100% local, aucun flux réseau sortant, zéro télémétrie.
|