Forensic : retracer l’activité utilisateur via les notifications Windows – Le cas du Sherlocks Jingle Bell
Sommaire
I. Présentation
On se retrouve dans cet article pour une nouvelle solution de l’un des challenges d’investigation numérique/forensic nommés Sherlocks et mis à disposition par la plateforme Hack The Box. Dans cet article, nous allons détailler la démarche qui permet de résoudre le Sherlocks Jingle Bell, de difficulté “débutant”.
Notre objectif est ici de retracer les activités d’un utilisateur interne malveillant par l’intermédiaire du système de notifications Windows.
Lien du challenge : Hack The Box – Sherlocks – Jingle Bell
Cette solution est publiée en accord avec les règles d’HackThebox et ne sera diffusée que lorsque le Sherlocks en question sera indiqué comme “Retired”.
| Technologies abordées | Windows, Notifications |
| Outils utilisés | sqlite3, grep |
Retrouvez tous nos articles Hack The Box via ce lien :
II. Découverte de l’archive et du contexte
Dans le cadre de l’investigation, un contexte et une archive sont mis à disposition :

Nous sommes donc face à une archive contenant certains fichiers provenant du poste d’un utilisateur interne que l’on suspecte de malveillance. Plus précisément, il est soupçonné d’avoir fait fuiter des informations sensibles par l’intermédiaire d’une application non identifiée. Nous devons donc récupérer le maximum d’informations afin de savoir quelles informations ont été divulguées et par quel moyen.
Si l’on s’intéresse à l’archive mise à disposition, voici son contenu :

Nous obtenons trois fichiers situés dans le répertoire “C/Users/Appdata/Local/Microsoft/Windows/Notifications/“. Il s’agit, d’après leur extension, de fichiers de base de données (“.db“). Cela peut être confirmé grâce à la commande “file” :
J’ignore ce que sont les “Ahead log” dans le contexte SQLite, mais le fichier principal semble être le fichier “wpndatabase.db” (1 Mo). Avant de m’intéresser à son contenu, j’effectue quelques recherches rapides afin de savoir à quoi l’on a affaire lorsque l’on parle du dossier “C/Users/Appdata/Local/Microsoft/Windows/Notifications/” et du fichier “wpndatabase.db“.
Je tombe notamment sur l’article suivant : inc0x0.com/2018/10/windows-10-notification-database/
Notifications are a feature added in Windows 8 and 10, displaying text and images either in the start menu tiles or on the right side of the screen. These notifications can hold interesting data such as popup messages or text snippets from applications.
Source : inc0x0.com
À première vue, il s’agit donc du système de notification Windows qui fait apparaitre des images en bas à droite de l’écran (vous savez, quand vous êtes en réunion Visio avec partage d’écran et qu’un pop-up montrant un aperçu du dernier e-mail reçu apparait).

Il semble donc que cette fonctionnalité stocke des données dans le fichier identifié. Pour l’instant, il est difficile de voir à quoi cela peut nous servir. Il serait logique de penser concernant cette fonctionnalité qu’une fois l’évènement affiché, il serait simplement supprimé.
III. Analyse de la base de données SQLite3
A. Découverte rapide de la base wpndatabase.db
Intéressons-nous à présent au principal fichier que nous avons à disposition, la base de données SQLite3 “wpndatabase.db“. J’utilise l’outil en ligne de commande “sqlite3” :
Ce fichier contient une seule base de données, elle-même contenant 9 tables. Pour me faire une première idée du volume de chaque table et des données à disposition, je compte le nombre d’entrées pour chacune :
Je m’intéresse à présent aux colonnes de chaque table afin de débuter par celle qui me semble les plus intéressantes :
La table “Notification” semble être la table principale.
B. Retracer l’historique d’activité via les Notifications Windows
- Enoncé : Task 1 – Which software/application did Torrin use to leak Forela’s secrets?
Maintenant que nous avons ciblé une table en particulier, il est temps d’aller plus loin (et d’être prêt à faire marche arrière si rien d’intéressant n’apparait). En listant le contenu de chaque entrée de la table “Notification“, je commence à voir apparaitre des données XML assez volumineuses dans la colonne “Payload_Preview” :

Nous voyons notamment certaines entrées qui font apparaitre “slack://“, un plateforme de communication connue. L’outil en ligne de commande sqlite3 devient un peu limité pour afficher de gros blocs de texte, comme c’est le cas ici, je décide d’exporter les données qui m’intéressent dans un fichier CSV :
Je peux alors utiliser des outils classiques de manipulation et de découpage de texte sur ces données :
Nous venons donc a priori d’identifier le canal de communication : Slack.
Dans les faits et d’après ce que je comprends du système de Notification Windows. Un pop-up devait apparaitre à chaque fois que l’utilisateur recevait un message de la part de son interlocuteur (comme lors de la réception d’un nouvel e-mail). Cela faisait apparaitre tout ou partie du texte reçu. Ces données se sont alors retrouvées en “cache” dans le système de notifications Windows.
- Enoncé – Task 2 : What’s the name of the rival company to which Torrin leaked the data?
Par la même occasion, nous pouvons remarquer dans les données obtenues précédemment la présence d’un titre : “PrimeTech Innovations”. Cela semble être l’entreprise rivale à laquelle l’employé a envoyé des informations (probablement le titre du Slack).
- Enoncé – Task 3 : What is the username of the person from the competitor organization whom Torrin shared information with?
SI l’on regarde un peu plus loin dans chaque message, on peut voir directement le contenu du message reçu ! J’utilise pour cela à nouveau le délimiteur “>” pour avancer parmi les longs blocs de données (À noter que ce n’est pas la meilleure façon de parser du XML) :
Voici le résultat obtenu :

Le nom utilisateur de l’interlocuteur est donc “Cyberjunkie-PrimeTechDev“.
- Enoncé – Task 4 : What’s the channel name in which they conversed with each other?
Le nom du canal Slack utilisé apparait également dans les données de la notification : “forela-secrets-leaks“.
- Enoncé – Task 5 : What was the password for the archive server?
Cette information peut être retrouvée au sein de la conversation récupérée :
- Enoncé – Task 6 : What was the URL provided to Torrin to upload stolen data to?
Également, cette information peut être récupérée au sein de la conversation : on y voit un lien Google Drive apparaitre.
- Enoncé – Taks 7 : When was the above link shared with Torrin?
À l’intérieur de l’enregistrement en base de données sqlite3, chaque entrée possède un horodatage qui représente sa date de réception :
Cependant, ce n’est visiblement pas ici qu’il faut regarder. Le message lui-même possède un timestamp, qui lui semble être celui de la création du message sur le Slack, ce qui semble plus précis :

Ici, le format du timestamp ne me disait rien du tout, j’ai décidé d’utiliser les outils modernes pour résoudre cette partie, plutôt que de passer par une recherche Google “à l’ancienne” :

Le message a donc été reçu à “2023-04-20 10:34:49“. Il s’agit en fait un timestamp standard, mais qui inclut les nanosecondes.
Dans le cadre d’une investigation réelle, soyez très vigilant à la manipulation des données. L’utilisation de ChatGPT, de la version en ligne de CyberChef ou même d’un traducteur peut ne pas convenir en fonction des données traitées (présence du nom d’un utilisateur, d’un client ou autre donnée confidentielle). Ici, un simple timestamp ne pose a priori pas de problème de confidentialité.
- Enoncé – Taks 8 : For how much money did Torrin leak Forela’s secrets?
La dernière étape consiste à retrouver le montant du paiement reçu par le salarié ayant fait fuiter une information. J’effectue pour cela un filtre avec les principaux signes monétaires au sein de mon export CSV :
L’utilisateur a donc reçu 10 000 livres sterling en échange de données confidentielles de son entreprise.
V. Conclusion
Cette investigation était très intéressante à réaliser ! Une fois que le format des données et leur provenance sont comprises, elle ne présente pas de difficulté technique particulière. En revanche, j’ignorais jusqu’à présent qu’il était possible de retrouver autant d’informations à partir du système de notification Windows, de quoi réfléchir au paramétrage de cette dernière !