Aller au contenu

Persistance

Tâches BITS (base qmgr)

Fiche tâches BITS : qmgr0.dat/qmgr1.dat ou qmgr.db (ESE), événements Bits-Client 3, 4, 59, 60, persistance SetNotifyCmdLine et BitsParser.

Emplacement
C:\ProgramData\Microsoft\Network\Downloader\qmgr.db
Prouve
Une tâche BITS a transféré un fichier depuis ou vers une URL, et peut lancer une commande à la fin
Horodatages
Création/modification des tâches en FILETIME, UTC dans qmgr.db ; événements EVTX Bits-Client en UTC ; horodatages NTFS du fichier cible
Rétention
Tâches supprimées à la fin ou à l'annulation (récupérables jusqu'à écrasement) ; inactives abandonnées après 90 jours ; journal Bits-Client tournant par taille
Accès
Administrateur ; qmgr.db verrouillé à chaud : collecter par copie brute (KAPE) ou depuis un cliché instantané
Type
Base de données
Windows
Vista / 78 / 8.11011
Cible KAPE
BITSEventLogs
Velociraptor
Windows.Triage.Targets:BITSEventLogs

Présentation

Le service de transfert intelligent en arrière-plan (BITS) télécharge et envoie des fichiers en arrière-plan pour Windows Update, Defender et de nombreuses applications. Les attaquants l'utilisent via bitsadmin.exe ou le module PowerShell BitsTransfer : les transferts s'exécutent dans un processus de service svchost.exe, reprennent après un redémarrage et passent par le proxy du système, ce qui fait de BITS un LOLBin de téléchargement bien pratique.

BITS prend aussi en charge une ligne de commande de notification : un programme lancé lorsqu'une tâche se termine ou passe en erreur. Associée à un téléchargement conçu pour échouer, elle offre une persistance qui n'existe que dans la base des tâches BITS, pas dans le registre.

L'état des tâches est conservé dans la base du gestionnaire de files d'attente (qmgr), et l'activité cliente est journalisée dans le canal Bits-Client Operational.

Emplacement

Version de WindowsBase des tâchesRemarques
Vista / 7 / 8 / 8.1C:\ProgramData\Microsoft\Network\Downloader\qmgr0.dat et qmgr1.datFormat binaire propriétaire ; deux copies, la seconde peut contenir des enregistrements plus anciens ou uniques
10 / 11C:\ProgramData\Microsoft\Network\Downloader\qmgr.dbBase ESE avec edb.log et d'anciens journaux de transactions edb*.log dans le même dossier
Toutes (Vista et suivants)Journal Microsoft-Windows-Bits-Client/OperationalMicrosoft-Windows-Bits-Client%4Operational.evtx

Le dossier correspond à %ALLUSERSPROFILE%\Microsoft\Network\Downloader. À partir de Windows 10, le service BITS ouvre la base sans partage : une copie de fichier classique échoue tant que le service tourne.

Ce que l'artefact prouve

  • Un transfert a été configuré : nom de la tâche, URL source, fichier de destination local, octets transférés, propriétaire (SID) et état.
  • Une commande y a été associée : programme et arguments de notification que BITS lance à la fin ou en cas d'erreur.
  • URL et processus client dans le journal : l'événement 3 nomme la tâche et son propriétaire, les événements 59/60 donnent l'URL.
  • Elle ne prouve pas que le fichier téléchargé a été exécuté ; suivez le chemin de destination dans le Prefetch, Amcache ou les événements de processus. Les tâches terminées ou annulées sont retirées de la base active.

Champs clés

Champ (sortie de BitsParser)Signification
JobName, JobDesc, JobIdNom, description et GUID choisis par le créateur (les attaquants imitent souvent « System update »)
JobTypeTéléchargement, envoi ou envoi avec réponse
JobStateEn file, en transfert, suspendu, en erreur, transféré…
OwnerSID, OwnerCompte qui a créé la tâche
CommandExecuted, CommandArgumentsLigne de commande de notification définie par /SetNotifyCmdLine
SourceURL, DestFile, TmpFileURL distante, chemin local final et fichier temporaire BIT*.tmp
DownloadByteSize, TransferByteSizeTaille attendue et taille transférée
CreationTime, ModifiedTimeDates de la tâche lorsqu'elles figurent dans l'enregistrement
CarvedEnregistrement récupéré dans l'espace libre ou les journaux de transactions

Horodatages

HorodatagePositionné quandFormatPièges
Création / modification de la tâcheTâche créée ou modifiéeFILETIME dans l'enregistrement, UTC (BitsParser affiche de l'ISO 8601)Tous les enregistrements ne portent pas les deux dates, surtout ceux récupérés par carving
Événement 3BITS a créé une nouvelle tâcheEVTX, UTCContient le nom de la tâche, son propriétaire et, selon les versions, le processus client
Événements 59 / 60Début / arrêt du transfertEVTX, UTCContiennent l'URL ; le 60 porte aussi le code d'état
Événement 4Tâche de transfert terminéeEVTX, UTCÀ associer aux 59/60 pour l'URL
Événements 61 / 64Erreur de transfert / impossible de lancer le programme de notificationEVTX, UTCLe 64 révèle la commande de notification même quand la tâche a disparu
Horodatages $SI du fichier de destinationFichier écrit par BITSNTFS, UTCÉcrit d'abord dans un fichier BIT*.tmp, renommé à la fin

Rétention et effacement

  • Les tâches sont supprimées de la base lorsqu'elles se terminent ou sont annulées, mais des enregistrements peuvent survivre dans les pages libres de la base et dans les journaux de transactions ESE jusqu'à leur écrasement.
  • Les tâches inactives sont abandonnées après un délai de 90 jours par défaut (stratégie JobInactivityTimeout), ce qui limite la durée de vie d'une persistance par « téléchargement en échec » si elle n'est pas renouvelée.
  • bitsadmin /reset /allusers ou Get-BitsTransfer -AllUsers | Remove-BitsTransfer efface les tâches ; le journal d'événements et le carving peuvent encore les révéler.
  • Le journal Bits-Client est très actif sur les machines sollicitées par Windows Update et tourne selon sa taille.

Collecte

  • Cible KAPE : BITS (tout le dossier Downloader, avec copie brute pour les fichiers verrouillés) et EventLogs pour le canal Bits-Client.
  • Velociraptor (Windows.Triage.Targets) : BITS, EventLogs. Aucun artefact d'analyse Velociraptor intégré ne cible la base qmgr : collectez les fichiers et analysez-les hors ligne.
  • Commandes natives : l'énumération en direct exige des droits d'administrateur ; la base elle-même doit provenir d'un cliché instantané ou d'un outil de copie brute.
bitsadmin /list /allusers /verbose
powershell -c "Get-BitsTransfer -AllUsers | Format-List *"
wevtutil epl Microsoft-Windows-Bits-Client/Operational E:\case\Bits-Client.evtx
vssadmin list shadows

Outils d'analyse

  • BitsParser (Mandiant, open source, Python 3) : analyse l'ancien format qmgr comme la base ESE de Windows 10 et suivants, sortie JSON ; --carvedb et --carveall récupèrent les enregistrements supprimés dans la base et les journaux de transactions.
  • EvtxECmd (Eric Zimmerman) : événements Bits-Client en CSV pour la chronologie.
  • Visionneuses ESE (par exemple esedbexport de libesedb, open source) : elles ouvrent qmgr.db, mais le détail des tâches et fichiers est stocké dans des blobs binaires ; BitsParser reste le choix pratique.

Conseils d'investigation

  • Cherchez les tâches dotées d'une commande de notification (CommandExecuted) qui n'est pas un programme de mise à jour connu, et les tâches appartenant à des comptes utilisateurs qui rapatrient des exécutables ou des scripts.
  • Extrayez toutes les URL des événements 59 et 60 ; domaines inhabituels, adresses IP brutes et hôtes non Microsoft ressortent nettement face au trafic Windows Update.
  • Une tâche en erreur avec une commande de notification et une URL injoignable correspond au schéma classique de persistance BITS.
  • Examinez le fichier de destination dans la $MFT et le journal USN : BITS écrit d'abord un fichier temporaire BIT*.tmp, puis le renomme avec le nom de destination.
  • bitsadmin.exe dans le Prefetch ou des journaux PowerShell montrant Start-BitsTransfer confirment qui a piloté le transfert.
  • Rapprochez URL et horaires des tâches des journaux de proxy, DNS ou pare-feu pour confirmer que le transfert est sorti de la machine et en estimer le volume.

Artefacts liés

Termes du glossaire

Tous les artefacts sur une page : aide-mémoire