GNU/Linux >> Tutoriels Linux >  >> Linux

Désactivation des vsyscalls sous Linux

Essayez echo 0 > /proc/sys/kernel/vsyscall64

Si vous essayez de ptrace sur les appels gettimeofday et qu'ils ne s'affichent pas, quelle source d'heure le système utilise-t-il (pmtimer, acpi, tsc, hpet, etc.). Je me demande si vous me feriez plaisir en essayant de forcer votre minuterie sur quelque chose de plus ancien comme pmtimer. Il est possible que l'une des nombreuses optimisations spécifiques au temporisateur gtod empêche vos appels ptrace d'être évités, même avec vsyscall défini sur zéro.


Existe-t-il un moyen de désactiver l'utilisation de vsyscalls/vDSO pour un seul processus ou, si ce n'est pas possible, pour l'ensemble du système d'exploitation ?

Il s'avère qu'il y a EST un moyen de désactiver efficacement la liaison vDSO pour un seul processus sans le désactiver à l'échelle du système en utilisant ptrace !

Tout ce que vous avez à faire est d'arrêter le processus tracé avant qu'il ne revienne de execve et supprimer le AT_SYSINFO_EHDR entrée du vecteur auxiliaire (qui vient directement après les variables d'environnement le long de la région de mémoire pointée dans rsp ). PTRACE_EVENT_EXEC est un bon endroit pour le faire.

AT_SYSINFO_EHDR est ce que le noyau utilise pour indiquer à l'éditeur de liens système où vDSO est mappé dans l'espace d'adressage du processus. Si cette entrée n'est pas présente, ld semble agir comme si le système n'avait pas mappé de vDSO.

Notez que cela ne démappe pas d'une manière ou d'une autre le vDSO de la mémoire de vos processus, il l'ignore simplement lors de la liaison d'autres bibliothèques partagées. Un programme malveillant pourra toujours interagir avec lui si son auteur le voulait vraiment.

Je sais que cette réponse est un peu tardive, mais j'espère que cette information épargnera des maux de tête à une pauvre âme


Pour les nouveaux systèmes echo 0 > /proc/sys/kernel/vsyscall64 pourrait ne pas fonctionner. Dans Ubuntu 16.04, vDSO peut être désactivé à l'échelle du système en ajoutant le paramètre de noyau vdso=0 en /etc/default/grub sous le paramètre :GRUB_CMDLINE_LINUX_DEFAULT .

IMPORTANT :Paramètre GRUB_CMDLINE_LINUX_DEFAULT peut être écrasé par d'autres fichiers de configuration dans /etc/default/grub.d/... , vérifiez donc quand ajouter votre configuration personnalisée.


Linux
  1. Comment changer le nom d'hôte sous Linux

  2. Exemples de commande "shutdown" sous Linux

  3. Exemples de commandes resize2fs sous Linux

  4. Exemples de commandes localectl sous Linux

  5. historique de disponibilité de linux

Linux est-il un système d'exploitation ou un noyau ?

Sécuriser un système Linux hérité

Introduction aux cgroups d'un administrateur système Linux

Documenter la disponibilité du système sous Linux

Optimiseur et surveillance du système Stacer Linux

Comment répertorier les services sous Linux