• Using Memory Errors to Attack a Virtual Machine, de Sudhakar Govindavajhala et Andrew W. Appel (Princeton University)

    Excellente recherche en #sécurité sur une machine virtuelle #Java. Les auteurs sont partis du fait qu’il y a toujours des erreurs dans le matériel (un simple rayon cosmique passant à travers la machine suffit) et que ces erreurs permettent dans certains cas de court-circuiter des mécanismes de sécurité. Par exemple, en Java, un changement d’un bit peut suffire à changer le type d’un objet et donc à permettre des opérations qui seraient normalement interdites. Cela ouvre la voie à des attaques où l’attaquant écrit un programme erroné, le fait exécuter par la machine et, dans un cas de temps en temps, réussit grâce à une erreur matérielle. Il faut être patient mais la théorie et la pratique (cf. l’article) montrent que cela marche.

    Pour Java, il y a deux exploitations possibles, l’une sur une machine qu’on ne contrôle pas, par exemple un navigateur Web distant (on crée une applet, on encourage des tas de gens à l’exécuter et un certain pourcentage d’entre eux vont exécuter le code malveillant, par malchance) et l’autre sur une machine qu’on contrôle (par exemple une smartcard) ce qui est plus facile, il suffit de la chauffer pour augmenter le pourcentage d’erreurs, accélerant ainsi nettement l’attaque.

    http://www.cs.princeton.edu/~sudhakar/papers/memerr.pdf