Aller au contenu
Categoria: OPSEC10 min de lecture

DFIR sous Linux: Triage Vivant avec UAC et Velociraptor

Por Lucas Andrade ·

Comment l equipe Basilisk effectue un triage vivant sur des hotes Linux compromis avec UAC et Velociraptor sans detruire la preuve volatile.

DFIR sous Linux: Triage Vivant avec UAC et Velociraptor
Dans cet article

Trois heures du matin, un Debian 12 expose un cron suspect qui reecrit /etc/ld.so.preload toutes les 90 secondes. Le mauvais reflexe est d eteindre la machine; le bon est d ouvrir le runbook de triage et de capturer l etat vivant avant que l attaquant ne remarque la lumiere allumee. Chez Basilisk ce scenario revient chaque mois dans les labos de simulation, et la regle est simple: ordre de volatilite d abord, hypotheses ensuite. Memoire, connexions, processus, descripteurs de fichiers ouverts et modules du noyau sont prioritaires, car un reboot ou un kill -9 mal place detruit 80% de ce qui compte.

L ordre de volatilite comme premiere loi#

L ordre de volatilite (RFC 3227) classe les preuves selon leur vitesse d evaporation: registres CPU et cache disparaissent en nanosecondes, la RAM a la coupure, les connexions reseau en secondes, les processus vivants jusqu au prochain reboot, le disque le plus lent. La consequence pratique: vous collectez du volatil au persistant, jamais l inverse. Un reboot pour stopper le cron efface justement les pages memoire qui contiennent le payload decompresse et l adresse C2.

Concretement: d abord ss -tunap pour les sockets actifs, ps auxww et /proc/[pid]/exe pour les processus vivants (meme les binaires supprimes se reconstruisent depuis /proc), lsof -n pour les descripteurs ouverts, cat /proc/modules pour les modules noyau charges. Chaque sortie est ecrite avec timestamp UTC et hostname vers une destination en lecture seule, jamais sur le disque de la victime. Ce n est qu une fois l etat volatil securise que vous pensez a l isolation.

UAC pour le triage one-shot#

Notre boite a outils par defaut commence avec UAC (Unix-like Artifacts Collector) de Tulpa Security et Velociraptor de Rapid7. UAC est parfait pour un triage one-shot offline: vous deposez un tar.gz de ~6Mo, executez ./uac -p ir_triage /mnt/preuve, et en 8 a 15 minutes vous avez hashes, dump de /proc, journald, bash_history de tous les utilisateurs, listing cron et configuration SSH compresses.

UAC est volontairement leger en dependances: pur shell, tourne sur un hote ou vous n avez pas le droit d installer quoi que ce soit, et respecte l ordre de volatilite dans son profil integre. La note operationnelle cle: lancez UAC depuis un medium monte en lecture seule et ecrivez la sortie vers une cible chiffree separee, pour ne pas alterer un seul atime sur la victime. Si vous n avez pas encore monte le lab de base, revoyez Pentest Web depuis Zero: Construire un Lab Sur avec DVWA, Juice Shop et Burp Suite avant de simuler des incidents reels.

Acquisition memoire avec AVML#

L acquisition memoire reste le point le plus fragile sous Linux. Sur noyau 6.x, AVML de Microsoft Research est l option la plus fiable quand LiME echoue a compiler contre des en-tetes manquants. Commande reelle: avml --compress /preuve/memdump.lime. Reservez au moins le double de la RAM sur disque et n ecrivez jamais sur le disque de la victime; montez un NFS read-write sur /mnt/triage ou un USB chiffre LUKS.

La raison d AVML plutot que LiME est pratique: LiME est un module noyau compile contre les en-tetes exacts du noyau qui manquent souvent sur la victime, alors qu AVML est un binaire userspace lie statiquement qui lit via /proc/kcore ou /dev/crash. Apres capture, l analyse part vers Volatility 3 avec profil auto-detecte, et c est la que le pipeline rejoint Memory Forensics avec Volatility 3 : Analyser des Dumps en Lab Reproductible. Sans dump memoire, tout rootkit LD_PRELOAD reste une legende urbaine dans le rapport.

Analyse dans Volatility 3#

Le dump en main, vous construisez la hierarchie de processus dans Volatility 3 avec linux.pstree, listez les connexions reseau avec linux.sockstat et chassez les processus caches ou detaches de l arbre avec linux.psscan. La trouvaille classique sur un rootkit LD_PRELOAD est un ecart: ps sur le systeme vivant montre moins de processus que linux.psscan dans le dump, car le rootkit manipule la vue userspace mais pas les structures noyau.

Pour les noyaux modernes la table de symboles (ISF, Intermediate Symbol Format) est decisive; sans symboles correspondants Volatility renvoie des resultats incomplets. Generez le fichier ISF depuis le vmlinux avec symboles de debug de la version exacte du noyau de la victime. C est pourquoi il vaut la peine de maintenir a l avance un depot de symboles pour les versions de noyau de votre flotte, afin de ne pas perdre des heures a chercher les symboles en plein incident.

Chasser la persistance: jamais un seul endroit#

La persistance sous Linux vit rarement dans un seul endroit. Dans des cas recents de mineurs Kinsing nous avons trouve quatre vecteurs simultanes: une unite systemd dans /etc/systemd/system/.cache.service, une entree dans la crontab de root, une modification de /etc/rc.local et un wrapper SUID dans /usr/local/sbin/ssh. UAC attrape tout cela avec le profil ir_triage, mais lancer aussi find / -newermt '2026-06-01' -type f -mtime -8 2>/dev/null ferme les trous.

N oubliez pas les recoins discrets: ~/.bashrc et /etc/profile.d/, un authorized_keys avec une cle glissee, les regles udev, les modules PAM et les jobs cron-at. Un seul vecteur manque rend l hote a l attaquant en quelques heures. Pour correler avec les techniques Windows equivalentes, l equipe consulte Persistance Windows : 10 Techniques Documentees et leurs Contre-mesures, car les attaquants opportunistes reutilisent les memes patterns entre plateformes.

Velociraptor: d un hote a une flotte#

Velociraptor change la donne quand on passe d un hote a une flotte. On lance un serveur sur t3.medium, on genere les clients Linux avec velociraptor config client, on les distribue via Ansible, et en 20 minutes on a de la visibilite. Les hunts les plus utiles de notre playbook sont Linux.Network.NetstatEnriched pour les sessions actives, Linux.Sys.SUID pour les binaires suspects, et une regle Yara compilee avec des signatures Pupy, Sliver et Merlin.

La puissance de VQL est que vous formulez une hypothese en requete et la tirez de facon synchrone contre 120 hotes: montre-moi tout processus dont le binaire est dans /tmp ou /dev/shm et a une connexion sortante. Quand un IOC matche, on exporte un collection zip signe et on bascule vers l analyse statique en sandbox isolee, comme decrit dans Analyse de Malware en Lab Isole: Setup Securise avec FlareVM et REMnux. L astuce est de ne jamais sauter le hashing SHA-256 avant de deplacer un artefact.

Super-timeline avec plaso#

Une fois la preuve volatile securisee, une super-timeline transforme des artefacts eparpilles en un recit. Avec log2timeline.py (plaso) vous parsez les timestamps du systeme de fichiers, journald, bash_history, logs cron et acces du serveur web en une seule vue triee par temps, puis filtrez sur la fenetre d incident avec psort.py. D un coup d oeil vous voyez que le login SSH a 02:14 UTC a precede le curl du payload a 02:15 et l ecriture de l unite systemd a 02:16.

L erreur la plus courante est de melanger les fuseaux horaires: travaillez systematiquement en UTC et notez l offset de l hote, sinon vous construisez une chaine causale decalee de plusieurs heures. Surveillez le timestomping (mtime reinitialise via touch -t); le ctime, plus dur a falsifier pour un attaquant, revele l heure reelle de modification et demasque la manipulation.

Chaine de custody et hashing#

Chaque artefact recoit un hash SHA-256 au moment de la collecte, et ce hash est recalcule et compare a la reception au poste d analyse. S ils ne correspondent pas, la preuve ne vaut rien pour tout usage formel. Nous documentons chaque decision dans une chain of custody avec timestamp UTC, hash et operateur, car meme en lab la discipline forme le muscle necessaire pour le cas reel.

Concretement cela signifie un journal append-only (idealement sur un systeme separe) qui enregistre chaque commande, chaque copie et chaque decision d isolation avec un timestamp. Celui qui apprend cette discipline seulement pendant un vrai incident perd la moitie de la nuit a reconstruire ce qu il a lui-meme fait. Automatisez le logging autant que possible pour qu il ne soit pas oublie sous pression.

Apres le triage: detection et hardening#

Le threat hunting post-triage ferme la boucle. Nous transformons les detections en regles Sigma poussees dans Elastic, convertissant l incident en capacite defensive permanente, flux detaille dans Threat Hunting avec Sigma et Elastic: De l'Indicateur a la Regle de Detection. Une seule trouvaille ld.so.preload devient une detection sur toute la flotte qui signale la prochaine tentative en secondes.

Pour les hotes qui survivent a l incident, nous appliquons le hardening selon Hardening de Serveur Linux: CIS Benchmark Applique Sans Casser la Prod et revoyons SSH selon Durcissement SSH 2026 : Algorithmes, Certificats et Bastion Hosts avant de les remettre en production simulee. Un hote restaure sans fermer le vecteur d acces initial est recompromis en quelques jours, presque toujours par la meme campagne automatisee qui a trouve le premier acces.

Checklist pour le triage vivant#

Avant de toucher a quoi que ce soit: (1) toolkit read-only monte, cible de sortie chiffree et separee; (2) etat volatil capture (sockets, processus, modules, /proc) avec timestamps UTC; (3) dump memoire via AVML avec au moins 2x la RAM d espace reserve; (4) UAC ir_triage plus un balayage manuel find des fichiers recents; (5) les quatre classes de persistance (systemd, cron, rc.local/profile, SUID/authorized_keys) verifiees; (6) chaque artefact hashe et inscrit dans le journal de custody; (7) isolation seulement apres collecte complete; (8) detection rejouee en regle Sigma.

FAQ#

Dois-je sortir la machine du reseau immediatement? Cela depend de ce que vous protegez. Avec exfiltration de donnees active, oui, mais idealement via une regle de firewall en amont plutot qu en debranchant le cable sur l hote, pour que l etat memoire et la connexion C2 survivent a la capture. Une deconnexion brutale peut declencher un chiffrement en cours ou un dead-man switch.

La forensique disque suffit-elle sans dump memoire? Non, pas contre le malware resident en memoire et les rootkits LD_PRELOAD. Beaucoup d outillage moderne touche a peine le disque. Sans dump memoire vous voyez la moitie de l histoire et ecrivez des suppositions dans le rapport.

UAC ou Velociraptor: lequel d abord? Pour un hote unique et isole, UAC est plus rapide a mettre en place et n a pas besoin de serveur. Des que vous avez plus qu une poignee d hotes ou des hunts repetees, Velociraptor gagne par l orchestration centrale et VQL. En pratique nous combinons les deux: Velociraptor pour le balayage de toute la flotte, UAC pour la collecte profonde sur les hotes marques compromis. Ce n est pas l un ou l autre, c est une sequence.

Conclusion pratique: preparez aujourd hui une cle USB LUKS avec UAC, AVML et un client Velociraptor preconfigure vers votre serveur de hunt. Testez sur une VM Debian propre, chronometrez, ajustez le profil et versionnez le tar.gz dans votre depot interne. Quand le pager sonne a 3h du matin vous ne voulez pas lire la documentation, vous voulez collecter la preuve. Le triage vivant n est pas un art, c est une checklist disciplinee executee sous pression.

Related posts

Nenhum comentário ainda

Seja o primeiro a comentar.

Deixe seu comentário

Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

Entrar com Canverly