extraction données navigateur

Extraction données navigateur : Benchmark GitHub Actions

Comparatif / benchmark PerlAvancé

Extraction données navigateur : Benchmark GitHub Actions

L’extraction données navigateur devient un enjeu majeur pour l’audit de sécurité automatisé. Automatiser cette tâche via GitHub Actions permet de vérifier l’intégrité des secrets stockés localement.

Les runners Ubuntu de GitHub offrent un environnement standardisé pour l’exécution de scripts de décryptage. Les performances varient selon le langage utilisé pour manipuler les fichiers SQLite et les clés AES-GCM.

Ce comparatif vous permettra de choisir l’outil le plus efficace pour votre pipeline d’extraction données navigateur.

extraction données navigateur

🛠️ Prérequis

Pour tester ces approches, configurez un workflow GitHub Actions avec les éléments suivants :

  • Environnement Ubuntu 22.04 LTS ou plus récent.
  • Accès à un fichier Local State de Chromium (pour la clé de déchiffrement).
  • Installation de SQLite3 : sudo apt-get install sqlite3.
  • Perl 5.38 avec modules CPAN (Crypt::CBC, Crypt::PBKDF2).
  • Python 3.12 avec pycryptodome.

📚 Comprendre extraction données navigateur

Le processus d’extraction données navigateur repose sur le décryptage de la clé maîtresse. Chromium utilise AES-256-GCM pour protéger les données sensibles.

La clé est stockée dans le fichier Local State sous forme encodée. Le flux de travail suit ce schéma :

Local State (JSON) -> Base64 Decode -> AES-GCM Decrypt (via Master Key) -> Extraction SQLite (Cookies/Passwords)

Contrairement à l’approche Python qui importe de lourdes bibliothèques, Perl manipule les flux de données avec une empreinte mémoire réduite. Go offre une exécution quasi instantanée grâce à son binaire statique. Le défi majeur reste la gestion de l’initialisation du vecteur (IV) lors de l’extraction données navigateur.

🐪 Le code — extraction données navigateur

Perl
use strict;
use warnings;
use Crypt::CBC;
use MIME::Base64;
# Extraction de la clé via le fichier Local State
sub decrypt_master_key {
    my ($encrypted_key_b64) = @_;
    # Décodage de la chaîne Base64
    my $decoded_key = decode_base64($encrypted_key_b64);
    # On retire le préfixe 'v10' spécifique à Chromium
    my $raw_key = substr($decoded_key, 3);
    
    # Configuration du déchiffrement AES-GCM
    # Note: Crypt::CBC nécessite une configuration précise pour le mode GCM
    my $cipher = Crypt::CBC->new(
        -key    => $master_key_derived,
        -cipher => 'AES',
        -mode   => 'gcm'
    );
    return $cipher->decrypt($raw_key);
}

📖 Explication

Dans le snippet Perl, la fonction substr($decoded_key, 3) est cruciale. Elle permet de sauter les octets ‘v10’ qui ne font pas partie de la charge utile chiffrée. Si vous oubliez cette étape, le déchiffrement échouera systématiquement avec une erreur de padding. En Python, l’utilisation du slicing [3:15] extrait l’IV et le tag d’authentification. C’est une zone critique : une erreur d’indexation rend l’extraction données navigateur impossible. Le choix de Crypt::CBC en Perl est motivé par sa gestion native des algorithmes de bloc, bien que sa configuration en mode GCM soit plus verbeuse que l’API Python.

Documentation officielle Perl

🔄 Second exemple

Perl
import base64
from Crypto.Cipher import AES
# Extraction de la clé via le fichier Local State
def decrypt_key(encrypted_key_b64, master_key):
    # Décodage Base64 de la clé
    encrypted_key = base64.b64decode(encrypted_key_b64)
    # Suppression du préfixe 'v10' (3 premiers octets)
    iv_and_tag = encrypted_key[3:15]
    ciphertext = encrypted_key[15:]
    
    # Initialisation du déchriteur AES-GCM
    cipher = AES.new(master_key, AES.MODE_GCM, nonce=iv_and_tag[:12])
    # Déchiffrement effectif
    return cipher.decrypt(ciphertext)

▶️ Exemple d’utilisation

Exécution d’un script de test pour l’extraction données navigateur :

# Lancement du script de test
perl decrypt_browser_data.pl --path ./chrome_profile --output results.json

# Résultat attendu
[
  {"domain": "google.com", "name": "SID", "value": "[DECRYPTED]"},
  {"domain": "github.com", "name": "session", "value": "[DECRYPTED]"}
]

🚀 Cas d’usage avancés

1. Audit de conformité : Vérifier que les mots de passe ne sont pas stockés en clair dans des fichiers de configuration tiers via un script Perl utilisant DBD::SQLite.
2. Analyse de malware : Automatiser l’extraction des cookies de session pour identifier des fuites de jetons dans des environientes de test.
3. Monitoring de sécurité : Intégrer un step GitHub Actions qui compare les empreintes de clés entre deux déploiements.

🐛 Erreurs courantes

⚠️ Mauvais décodage Base64

Oublier de décoder la chaîne avant de traiter les octets bruts.

✗ Mauvais

$data = $b64_string;
✓ Correct

$data = decode_base64($b64_string);

⚠️ Indexation incorrecte du préfixe

Ne pas supprimer le préfixe ‘v10’ de la clé chiffrée.

✗ Mauvais

my $raw = $decoded_key;
✓ Correct

my $raw = substr($decoded_key, 3);

⚠️ Gestion de l'IV manquante

Ne pas extraire correctement l’IV du flux AES-GCM.

✗ Mauvais

cipher.decrypt(data)
✓ Correct

cipher = AES.new(key, AES.MODE_GCM, nonce=iv_extracted)

⚠️ Verrou SQLite

Tenter d’accéder à la base de données alors que le navigateur est ouvert.

✗ Mauvais

open(DB, "< profile.db")
✓ Correct

use DBI; my $dbh = DBI->connect("dbi:SQLite:dbname=profile.db", "", "", {ReadOnly => 1});

✅ Bonnes pratiques

Pour réussir votre extraction données navigateur, suivez ces règles :

  • Utilisez toujours le mode ReadOnly pour les connexions SQLite afin d’éviter les corruptions de profil.
  • Stockez vos clés de déchiffrement dans les GitHub Secrets et ne les logguez jamais.
  • Privilégiez les langages compilés (Go) si votre pipeline GitHub Actions est sensible au coût de l’exécution.
  • Implémentez une vérification de l’intégrité du tag GCM pour prévenir les injections de données.
  • Utilisez des librairies robustes comme DBD::SQLite plutôt que de parser manuellement le format binaire.
Points clés

  • L'extraction nécessite le décodage du préfixe 'v10'.
  • AES-GCM est l'algorithme standard pour les profils récents.
  • Go offre la meilleure performance brute en CI.
  • Python est le plus simple pour le prototypage rapide.
  • Perl est imbattable pour le traitement de flux complexes.
  • L'utilisation de SQLite en mode lecture seule est obligatoire.
  • La gestion de l'IV est la source principale d'erreurs.
  • L'automatisation via GitHub Actions réduit les erreurs humaines.

❓ Questions fréquentes

Peut-on extraire les données sur Windows via GitHub Actions ?

Oui, mais la méthode de récupération de la clé maîtresse diffère car elle dépend de DPAPI. L’extraction nécessite alors un agent Windows spécifique.

Pourquoi le script échoue-t-il parfois sur les cookies ?

Le fichier SQLite est souvent verrouillé par un processus chrome actif. Assurez-vous que le profil est fermé avant l’exécution.

Est-ce légal d'utiliser ce script ?

Cela dépend de votre usage. Ce script est destiné à l’audit de sécurité de vos propres environnements et de vos tests automatisés.

Quelle version de Python est recommandée ?

Python 3.12 est recommandé pour bénéficier des dernières optimisations de la bibliothèque standard sur le typage.

📚 Sur le même blog

🔗 Le même sujet sur nos autres blogs

📝 Conclusion

Le choix de l’outil pour l’extraction données navigateur dépend de votre infrastructure. Go est idéal pour les pipelines critiques nécessitant une vitesse maximale. Perl reste l’arme de choix pour les ingénieurs système manipulant des flux de données hétérogènes. Pour aller plus loin dans l’automatisation, explorez les modules de parsing de fichiers binaires en Perl. documentation Perl officielle. Surveillez toujours l’utilisation des ressources CPU sur vos runners pour éviter les timeouts de workflow.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *