3 votes

Isolation des processus dans Rust

Je veux mettre en place un serveur pour un protocole. Pour des raisons de sécurité, le parseur doit être isolé dans son propre thread du reste du programme et seul un canal bidirectionnel doit être ouvert pour la communication.

Le thread du parseur devrait perdre toute possibilité de modifier la mémoire de l'autre thread et perdre son pouvoir d'effectuer des syscalls (en utilisant seccomp).

Existe-t-il un moyen simple d'obtenir ce comportement pour le fil de l'analyseur en Rust ?

2voto

Chris Emerson Points 8179

Si vous êtes préoccupé par des problèmes qui vont au-delà de ce contre quoi la sécurité forte et le système de types de Rust peuvent vous protéger (par exemple, des bogues dans ces derniers, ou dans des bibliothèques tierces, etc.), alors vous voulez vraiment des processus séparés plutôt que de simples threads ; même si vous utilisez seccomp sur un thread non fiable, au niveau de l'OS/CPU, il a toujours un accès complet en écriture à la mémoire des autres threads dans le même processus.

D'une manière ou d'une autre, vous devrez écrire du code conçu pour fonctionner dans seccomp avec précaution (par exemple, allouer de la mémoire de tas supplémentaire pourrait ne pas fonctionner) - mais la bonne nouvelle est que Rust est un excellent langage pour avoir ce contrôle !

Il existe un outil assez utile discussion sur le seccomp en Rust qui contient quelques suggestions.

Le meilleur pari ressemble à geôle du projet Servo, qui est une sandbox de processus plus générale (incluant seccomp). Il existe également d'autres wrappers seccomp de niveau inférieur comme celui-ci .

Je n'ai encore rien essayé de tout cela, et j'aimerais donc connaître d'autres points de vue/expériences.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X