J'entends souvent des gens citer sudo
comme l'un des principaux obstacles aux logiciels malveillants infectant un ordinateur Linux.
L'argument le plus répandu semble aller dans le sens de: les privilèges root sont requis pour modifier la configuration du système, et un mot de passe est requis pour obtenir les privilèges root, de sorte que les logiciels malveillants ne peuvent pas modifier la configuration du système sans demander un mot de passe.
Mais il me semble que par défaut sur la plupart des systèmes, une fois que le logiciel malveillant a infecté un compte administrateur, l'escalade de privilèges est triviale - le logiciel malveillant n'a qu'à attendre que l'utilisateur s'exécute sudo
.
Quelles méthodes existent pour que les logiciels malveillants obtiennent les privilèges root lorsque l'utilisateur s'exécute sudo
, et comment pouvons-nous nous protéger contre eux?
Modifier: je suis particulièrement intéressé par la protection contre un compte administrateur compromis; c'est-à-dire un compte disposant de tous les privilèges root avec sudo
(par exemple le compte de l'utilisateur sur un système de bureau typique).
startx
fonctionne très bien en tant qu'utilisateur normal. En fait, j'exécute X en tant qu'utilisateur normal en ce moment.Réponses:
Une fois qu'un logiciel malveillant a accédé au compte d'un utilisateur, il peut:
1. Créez un alias bash (dans le shell actuel et dans
~/.bashrc
) à une commande qui simule l'[sudo] password for $USER:
invite et vole le mot de passe de l'utilisateur.2. De même, il peut placer un exécutable nommé
sudo
dans~/.bin
et modifier laPATH
variable pour obtenir le même effet:PATH="$HOME/.bin:$PATH"
3. Saisissez les pressions sur le serveur X, recherchez le mot
sudo
, puis essayez le texte entre les deux Entertouches suivantes comme mot de passe.4. Une chose similaire peut être faite dans n'importe quel environnement (la console, Wayland , X) en utilisant par exemple
$LD_PRELOAD
.5. Si un logiciel malveillant infecte un shell qui utilise
sudo
etsudo
met en cache les informations d'identification, le logiciel malveillant peut continuellement vérifier s'il est possiblesudo
sans mot de passe:La prévention:
1 & 2. Utilisez
\/bin/sudo
. Le\
ne tient pas compte des alias et/bin/…
ignores$PATH
. Vous pouvez également ajouter un alias tel que:,ssudo="\/bin/sudo"
et toujours utiliser à lassudo
place desudo
. Il semble peu probable qu'un virus soit suffisamment intelligent pour remapper cet alias.3. Évitez de taper votre mot de passe lorsque vous utilisez X11. Utilisez plutôt une console virtuelle ou Weston .
5. Mettre
timestamp_timeout=0
en/etc/sudoers
.La seule façon d'éliminer complètement le risque de
sudo
reniflement du mot de passe semble être de l'éviter complètement. Au lieu de cela, connectez-vous en tant que root à une console virtuelle.Selon Alexander Peslyak : "la seule utilisation sûre de su [et sudo] est de passer d'un compte plus privilégié à un compte moins privilégié ..."
Soit dit en passant, sudo a quelques contre-mesures:
sudo
lit à latty
place destdin
, doncalias sudo='tee -a /tmp/sudo-password | sudo'
interromptsudo
(mais capture le mot de passe).la source
sudo
configuré, mais de toute façon, le malware a maintenant le mot de passe requissudo
, donc si l'utilisateur a un accès root, il en va de même pour le malware.Il n'y a pas de réelle protection.
L'accès protégé par mot de passe à sudo remonte à une époque antérieure aux environnements de shell complexes avec des commandes exécutées par des shims. Une fois le mot de passe soumis, il existe une fenêtre d'opportunité dans laquelle un shim peut exécuter des commandes via sudo, sans aucune notification et avec un contrôle complet du système.
Si j'avais l'intention d'accéder, je créerais un shim utile pour bash et zsh et fish, etc. Je surveillerais les commandes exécutées. Peu de temps après qu'un sudo soit revenu avec un état de zéro, je commencerais à émettre "sudo chmod + s / bin / sh" ou d'autres méchancetés.
Au moment où sudo a reçu un mot de passe satisfaisant et que vous avez des shells qui exécutent des commandes pour obtenir une invite, vous êtes potentiellement en difficulté. Il n'y a pas d'autre protection que l'optimisme.
D'autres réponses se sont concentrées sur la protection du mot de passe. En tant qu'agresseur, je ne m'en inquiéterais pas. Je me concentrerais sur la durée après que le mot de passe a été donné, quand un mot de passe n'est pas nécessaire. C'est le moment le plus risqué, lorsque l'attaquant doit faire le moins pour compromettre complètement le système.
Protéger contre cela? Vous devez protéger vos fichiers RC. Inspectez les cales ou autres commandes utilisées dans les invites de ligne de commande. Recherchez les co-processus connectés au shell et les outils utilisés pour maintenir l'environnement du shell. Les principales défenses seraient les outils d'intrusion de l'hôte, mais c'est après coup. Empêcher les attaques? N'utiliser que des shells simples sans configuration automatisée complexe et invites actives - c'est l'environnement pour lequel sudo a été développé.
J'avais l'habitude de jouer à des jeux avec d'autres développeurs (années 80) où nous essayions d'écrire des choses qui obtiendraient le terminal que l'autre développeur utilisait, pour insérer des commandes - c'est essentiellement le même problème. Et nous avons facilité l'intégration d'outils qui permettraient l'insertion de commandes sans trace visible. :)
la source
Je ne suis pas sûr des méthodes permettant aux utilisateurs non autorisés d'obtenir des privilèges root, mais je sais quelque chose que vous pouvez faire pour rendre
sudo
un peu moins dangereux , si vous voulez dire cela.sudo
vous permet de configurer des autorisations granulaires, afin de définir des groupes d'utilisateurs avec des privilèges spécifiques et des commandes spécifiques que certains utilisateurs peuvent exécuter.SUDO - CONTRÔLE GRANULAIRE
Renforcez vos
sudo
politiques autant que vous ne faites pas confiance à vos utilisateurs :)la source
sudo
. Plus précisément, je pense aux systèmes de bureau normaux.Si vous êtes intéressé par un système qui, selon vous, pourrait être compromis, exécutez "Rootkit" et utilisez "Tripwire" pour vérifier l'intégrité du système de fichiers.
Je vous conseillerais également de durcir les privilèges sudo, comme si vous n'aviez pas besoin que tous les utilisateurs aient accès à toutes les commandes root plutôt que de donner accès à des commandes spécifiques via SUDO.
la source
Jetez d'abord un coup d'oeil au
/etc/sudoers
dossier.La syntaxe sera
user MACHINE=COMMANDS
formatée.Par exemple, l'utilisateur root aura
root ALL=(ALL) ALL
Cela signifie que l'utilisateur root peut exécuter n'importe quelle commande (toutes) n'importe où.Si votre entrée a également,
ALL=(ALL)
vous êtes presque égal à un utilisateur root. Si ce n'est pas le cas et que vous ne disposez que de certains privilèges limités, l'attaquant / programme malveillant ne peut faire autant que votre privilège sudo.Conseils qui peuvent vous aider:
/etc/sudoers
dossier.visudo
commande pour éditer et modifier les privilèges de votre fichier sudoers.Référence: page de manuel Linux de sudoers et sudo man sudoers
la source