knowledgeC.db : emplacement et collecte des flux Biome
Où se trouvent knowledgeC.db et les flux Biome sous macOS, et comment les collecter avec Terminal, UAC, Velociraptor ou une image disque sans perdre le WAL.
En bref. Le knowledgeC.db utilisateur se trouve dans ~/Library/Application Support/Knowledge/, celui du système dans /private/var/db/CoreDuet/Knowledge/, et les flux Biome utilisateur dans ~/Library/Biome/streams/. Accordez l'« Accès complet au disque » à Terminal ou au collecteur, copiez chaque base avec son -wal et son -shm, copiez le dossier Biome entier, calculez l'empreinte de tout, et n'ouvrez jamais les originaux. UAC et Velociraptor peuvent aider mais ont chacun leurs lacunes ; pour les magasins système protégés par SIP, faites une image du disque ou du volume Data plutôt que de désactiver SIP.
Pour savoir ce que contiennent ces magasins, commencez par le guide d'analyse forensique de knowledgeC.db. Des fiches de référence rapide pour les deux artefacts figurent dans les aide-mémoire de forensique macOS : knowledgeC.db et Biome SEGB.
Ce qu'il faut collecter
| Magasin | Chemin | Protection |
|---|---|---|
| knowledgeC, système | /private/var/db/CoreDuet/Knowledge/knowledgeC.db + -wal, -shm | Root, restreint par SIP |
| knowledgeC, utilisateur | ~/Library/Application Support/Knowledge/knowledgeC.db + -wal, -shm | TCC : Accès complet au disque |
| Biome, flux utilisateur | ~/Library/Biome/streams/restricted/<Stream>/local/ et ~/Library/Biome/streams/public/<Stream>/local/ | TCC : Accès complet au disque |
| Biome, synchronisé depuis d'autres appareils | …/<Stream>/remote/<device UUID>/ | Idem |
| Biome, fichiers expirés | …/<Stream>/local/tombstone/ | Idem |
| Biome, flux système | /private/var/db/biome/streams/ | Propriété de _biome, restreint par SIP |
Sous iOS, le magasin Biome utilisateur est /private/var/mobile/Library/Biome/ ; cet article traite de macOS.
La ligne -wal n'est pas facultative. knowledgeC fonctionne en mode WAL, et les événements récents ne sont souvent validés que dans le WAL ; pourquoi, et comment l'exploiter, est expliqué dans knowledgeC.db-wal : retrouver les événements récents. Pour Biome, collectez remote/ et tombstone/ même si vous ne comptez pas les utiliser : les enregistrements distants doivent être identifiés pour pouvoir être exclus, et les fichiers tombstone contiennent des données expirées que les parseurs ignorent souvent.
Accès : TCC, Accès complet au disque et SIP
Deux protections s'appliquent, et elles sont différentes.
- TCC protège les copies utilisateur. Un processus auquel l'Accès complet au disque n'a pas été accordé se voit refuser l'accès à ces dossiers, même s'il s'exécute en root. Accordez-le à Terminal (Réglages Système, Confidentialité et sécurité, Accès complet au disque) ou à votre collecteur, puis redémarrez l'app.
- SIP protège les magasins système. UAC indique qu'il ne collecte
/private/var/db/CoreDuet/Knowledge/knowledgeC.dbet/private/var/db/biomeà chaud que lorsque SIP est désactivé. Désactiver SIP implique un redémarrage en mode de récupération et une modification du système examiné, ce qui est difficile à justifier. Préférez une image complète du disque ou du volume Data, et extrayez-en les chemins.
Option 1 : une copie à chaud avec Terminal
Avec l'Accès complet au disque accordé à Terminal et un dossier de destination déjà créé sur votre support de collecte :
cp -p ~/Library/Application\ Support/Knowledge/knowledgeC.db* <dest>/
ditto ~/Library/Biome <dest>/Biome_user
shasum -a 256 <dest>/knowledgeC.db*
Le * récupère knowledgeC.db, knowledgeC.db-wal et knowledgeC.db-shm en une seule fois ; -p conserve les dates de modification et les permissions. ditto copie l'arborescence Biome avec sa structure de dossiers, indispensable pour distinguer local, remote et tombstone. Calculez l'empreinte de chaque fichier copié, pas seulement de la base, et consignez la commande, l'heure et le compte utilisé. Répétez l'opération pour chaque utilisateur concerné.
La copie est faite alors que CoreDuet peut encore écrire. C'est acceptable pour un triage : copiez les trois fichiers knowledgeC en une seule commande, afin que le fichier principal et son WAL soient aussi proches que possible dans le temps.
Option 2 : UAC
UAC dispose d'un fichier d'artefact pour chaque magasin :
sudo ./uac -a ./artifacts/files/system/knowledgec.yaml -a ./artifacts/files/system/biome.yaml /tmp
Les profils ir_triage et full incluent les deux via files/system/*. Connaissez leurs lacunes avant de vous y fier :
| Artefact UAC | Collecte | Manque |
|---|---|---|
knowledgec.yaml | knowledgeC.db pour les deux chemins | Les fichiers -wal et -shm ; la copie système, sauf si SIP est désactivé |
biome.yaml | ~/Library/Biome/streams/restricted/*/local pour chaque utilisateur ; /private/var/db/biome uniquement avec SIP désactivé | Les dossiers public/, remote/ et tombstone/ |
Après une exécution d'UAC, ajoutez donc manuellement les fichiers WAL et les dossiers Biome manquants (option 1), et accordez aussi l'Accès complet au disque au processus UAC.
Option 3 : Velociraptor
Velociraptor ne propose aucune cible de triage macOS intégrée pour knowledgeC ou Biome. Utilisez la recherche de fichiers générique avec l'envoi des fichiers activé :
velociraptor artifacts collect MacOS.Search.FileFinder --args 'SearchFilesGlob=/Users/*/Library/Application Support/Knowledge/knowledgeC.db*' --args Upload_File=Y --output knowledgec.zip
velociraptor artifacts collect MacOS.Search.FileFinder --args 'SearchFilesGlob=/Users/*/Library/Biome/streams/**' --args Upload_File=Y --output biome.zip
Le glob qui se termine par knowledgeC.db* embarque les fichiers WAL et SHM. Le client Velociraptor a lui aussi besoin de l'Accès complet au disque ; sur un parc géré, déployez-le avec un profil MDM de préférences de confidentialité (PPPC) avant d'en avoir besoin. L'artefact Exchange MacOS.Applications.KnowledgeC analyse les lignes sur place, ce qui est utile pour une recherche à l'échelle des postes mais ne remplace pas la collecte des fichiers. Consultez la documentation de Velociraptor pour lancer des collectes depuis le serveur.
Option 4 : une image du disque ou du volume Data
Une image est le moyen le plus propre d'obtenir les magasins système sans toucher à SIP, et elle préserve tout ce dont vous pourriez avoir besoin plus tard. Depuis l'image montée, ou avec un outil comme mac_apt qui exporte des fichiers à partir d'une image, extrayez :
/private/var/db/CoreDuet/Knowledge/(le dossier entier, pour que les fichiers WAL suivent) ;/private/var/db/biome/;- pour chaque utilisateur,
Library/Application Support/Knowledge/etLibrary/Biome/.
Montez l'image en lecture seule et extrayez les fichiers dans votre dossier d'affaire avant toute analyse.
Les outils qui ne les collectent pas
Aftermath (Jamf) ne collecte ni knowledgeC ni Biome. Si c'était votre outil de première intervention, retournez chercher ces fichiers avec l'une des options ci-dessus.
Vérifier la collecte
Avant de quitter les lieux, vérifiez que chaque copie de knowledgeC a son -wal à côté d'elle, et que la copie Biome contient un dossier streams avec des sous-dossiers de flux. Une analyse rapide de la copie Biome avec mac_apt en mode artefact seul confirme que les fichiers sont lisibles :
python3 mac_apt_artifact_only.py -i case/Biome_user/streams -o out -c BIOME
Ou déposez le dossier d'affaire entier dans KnowledgeC Parser : il associe chaque base à son WAL, avertit lorsqu'une base en mode WAL arrive sans lui, et affiche l'enregistrement le plus ancien et le plus récent de chaque flux.
Pièges courants
| Problème | Cause | Solution |
|---|---|---|
| Accès refusé lors de la copie | Terminal ou le collecteur n'a pas l'Accès complet au disque | L'accorder, redémarrer l'app |
| Aucun événement récent | -wal non collecté (comportement par défaut d'UAC) | Copier knowledgeC.db* |
| Base modifiée après la collecte | Original ouvert sur place, WAL intégré par un checkpoint | Ne jamais ouvrir les originaux ; travailler sur des copies |
| Enregistrements attribués au Mac alors qu'ils venaient d'un téléphone | remote/ aplati ou ignoré | Conserver la structure des dossiers |
| Magasins système absents | SIP activé pendant une collecte à chaud | Extraire à partir d'une image du disque ou du volume Data |
| Données anciennes absentes | tombstone/ non collecté | Copier le dossier Biome entier |
Intégrité
Calculez l'empreinte des fichiers tels que collectés, consignez les outils et les commandes, et travaillez sur des copies. N'ouvrez jamais le knowledgeC.db original avec sqlite3 ou un navigateur SQLite graphique : ouvrir une base en mode WAL peut déclencher un checkpoint, qui écrit les pages du WAL dans le fichier principal et peut réinitialiser le WAL que vous vouliez examiner. La même prudence s'applique à vos propres copies : conservez un jeu intact dont l'empreinte a été calculée, et analysez une deuxième copie.
Étape suivante
Chargez la collecte dans KnowledgeC Parser, ou lisez son guide de collecte qui reprend les mêmes étapes en version courte.
Questions fréquentes
Où est stocké knowledgeC.db sous macOS ?
La copie système est /private/var/db/CoreDuet/Knowledge/knowledgeC.db et la copie propre à chaque utilisateur est ~/Library/Application Support/Knowledge/knowledgeC.db. Les deux sont en mode WAL : collectez knowledgeC.db-wal et knowledgeC.db-shm avec chaque base.
Faut-il désactiver SIP pour collecter knowledgeC et Biome ?
Pas pour les copies utilisateur : l'Accès complet au disque accordé à Terminal ou au collecteur suffit. Le knowledgeC.db système et /private/var/db/biome ne sont collectés à chaud qu'avec SIP désactivé, d'après UAC. Préférez une image complète du disque ou du volume Data, et extrayez-les de celle-ci plutôt que de désactiver SIP.
UAC collecte-t-il le fichier WAL de knowledgeC ?
Non. L'artefact knowledgec d'UAC ne collecte que knowledgeC.db, sans les fichiers -wal et -shm, et son artefact biome ne prend que restricted/*/local. Copiez séparément les fichiers WAL et les autres dossiers Biome.
Quels dossiers Biome faut-il collecter ?
Le dossier ~/Library/Biome complet de chaque utilisateur si vous le pouvez. Au minimum, prenez streams/restricted et streams/public, y compris les sous-dossiers local, remote/<device UUID> et local/tombstone de chaque flux, ainsi que /private/var/db/biome/streams pour le magasin système.