09 - Fabrication de savons a Paper Street 1/2
Blackclowns magazine Issue 1 Article 9
Swearengen <swearengen@kernsh.org>
Les savons, c'est bon. «a fait 3000 ans qu'on s'en sert, et c'est toujours aussi bien. Bref les intros ça me fait chier, surtout la :)
Je vous livre ici 2 tools, en vrac, pas de grands discours, sans doc, sans commentaire, ça vous fera les pieds tiens, mais ça peut vous être utile un de ces jours, sur un serveur owned par des marocains, ou encore pour récupérer un binaire en mémoire avec ruby.
Ankou
Dans les traditions bretonnes, l'Ankou est la personnification de la mort, plus exactement de son serviteur.
Détecter les rootkits ne résultent pas d'une solution unique, plusieurs doivent être mises en concurrence pour pouvoir obtenir un résultat concluant a la presen ce ou non d'un rootkit. …vitons la méthode de récupération idiotes de traces en userland laisse par tel ou tel rootkit public, comme le fait si bien chkrootkit ou rkunter. Des solutions comme le chucksum du kernel en mémoire est intéressante mais pas suffisante, surtout en cas de faux positifs. Elle doit et devra toujours être combinée a d'autres techniques. Un de ces techniques est la détection par le temps.
Le but même d'un rootkit est de pouvoir cache certaines parties du systèmes. Jusqu'à présent, celui ci a besoin de placer des hooks a certains points (les appels systèmes, certaines fonctions intéressantes du kernel, idt, page fault handler, tlb, etc ...). Par ce fait même, le temps de traitement X d'un tache Y s'allonge d'une valeur Z.
Ex Schéma :
avant :
[[[ SYSCALL X ]]]
après :
[[[ SYSCALL X [[[ HOOK ]]] ]]]
ou
[[[ SYSCALL X ]]]
[[[ FONCTION INTERNE [[[ HOOK ]]]
etc...
Il suffit donc de mesurer le temps de réponse de certains appels système sur un système saint, et de le comparer lors de la phase d'analyse. Cette idée n'est pas vraiment nouvelle, un poc avait été publie au sstic en 2004, voir http://actes.sstic.org/SSTIC04/Fingerprinting_integrite_par_timing/ Lis bien ce papier, il te dira tout ce qu'il faut savoir la dessus.
Ce qui est plus intéressant c'est d'avoir un tool pour le faire. Allez va t'en donc uudecode ce qui vient la (note pour ceux qui liront le code, que c'est assez simple de rajouter des nouveaux tests, surtout bien utiliser les fonctions de la libc et non directement un appel au syscall, sinon vous pourriez ne pas voir un détournement de celle ci ) :
begin-base64 644 ankou.tar
YW5rb3UvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
...
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
====
Utilisation :
Génération FP : ./ankou -r FILE
Vérification FP : ./ankou -c FILE