Aller au contenu

ptrace

ptrace : appel système qui permet à un processus d'en observer et d'en contrôler un autre (lire et écrire sa mémoire, ses registres, intercepter ses appels système) ; c'est la base de strace et de gdb.

C'est un pouvoir considérable : qui peut s'attacher à un processus peut lire les secrets qu'il a en mémoire et y injecter du code. Le module Yama le restreint par kernel.yama.ptrace_scope : à 0, tout processus peut s'attacher à ceux du même utilisateur ; à 1 (réglage d'Ubuntu, fichier 10-ptrace.conf), seulement à ses descendants ; à 2, seuls les détenteurs de la capability CAP_SYS_PTRACE, donc l'administrateur par sudo ; à 3, plus personne, et la valeur ne peut plus être changée avant le redémarrage. À 2, un worker Gunicorn compromis ne peut plus lire la mémoire du processus maître. Docker retire CAP_SYS_PTRACE aux conteneurs ; l'ajouter (--cap-add SYS_PTRACE) à un conteneur de débogage lui donne accès à la mémoire de sa cible.

Piège : ptrace_scope = 3 posé en prévention rend strace, gdb ou py-spy inutilisables même en root, et l'on ne s'en aperçoit qu'en plein incident.

Dans les cours

Voir aussi