explication du code "Red Pill" / instruction SIDT - C - Programmation
Marsh Posté le 08-07-2006 à 23:46:52
Bon, je vais essayer de répondre, mais je ne garantis rien, si quelqu'un de plus expérimenté veut confirmer/infirmer...
Code :
|
Conclusion: en fait, elle bidouille du code en C en pour appeller l'instruction en question en passant par son code hexa (elle concatène l'instruction avec son paramètre, et marque la fin avec '\xc3' dans rpill), sans passer par de l'assembleur : rpill représente l'instruction qui va être appellée, ensuite elle compare la valeur retournée par l'instrcution à une valeur limite pour vérifier si on tourne sur une VMM
Je ne sais pas pourquoi elle n'utilise pas de l'assembleur.
Marsh Posté le 08-07-2006 à 23:48:32
pour que ca reste portable.
Marsh Posté le 08-07-2006 à 23:53:05
0x90 a écrit : pour que ca reste portable. |
Ouais, j'y ai pensé, mais de toute façon ça ne tourne que sous Intel, et ça dépend de la VMM utilisée.
SInon, je tiens à préciser que cette Johanna a récemment trouvé un "proof of concept" permettant de faire des root-kits invisibles, dans certaines conditions:
http://linuxfr.org/2006/07/04/21062.html
Ses travaux n'ont pas encore été vérifiés.
Marsh Posté le 09-07-2006 à 10:16:17
> simple_stupid : merci pour tes explications, elles sont très claires.
Marsh Posté le 08-07-2006 à 23:04:32
Sur ce blog très intéressant (http://invisiblethings.org/papers/redpill.html) consacré aux roots-kits il y a un morceau de code dont je ne comprends pas le fonctionnement :
The heart of this code is actually the SIDT instruction (encoded as 0F010D[addr]), which stores the contents of the interrupt descriptor table register (IDTR) in the destination operand, which is actually a memory location. What is special and interesting about SIDT instruction is that, it can be executed in non privileged mode (ring3) but it returns the contents of the sensitive register, used internally by operating system.
L'idée est de déclencher une instruction SIDT mais je ne comprends pas comment cette fonction y parvient. Quelqu'un pourrait-il me décomposer le contenu de la fonction ? (ou au moins me donner un indice). Merci !
---------------
rule #1 : trust the python