Comment désactiver ou supprimer le compte root créé comme effet secondaire de ce bogue de sécurité High Sierra?

40

Cet article décrit un bogue dans lequel la saisie de la racine à l'invite d'un déverrouillage permet à tout utilisateur de déverrouiller les préférences système. Il avertit que:

Il n'est pas nécessaire de le faire vous-même pour le vérifier. Cela crée un compte «racine» que d'autres pourraient utiliser si vous ne le désactivez pas.

L'article ne décrit pas ce qu'il faut faire si un ingénieur trop impatient reproduisait le problème et devait maintenant supprimer ou désactiver le compte root.

Comment ce compte peut-il être désactivé ou supprimé en toute sécurité?

Cette page Apple décrit comment désactiver le compte, mais cela ne protège pas contre l'erreur, car elle peut simplement réactiver le compte. Cela fonctionnera pour restaurer le système à son état normal avec la racine désactivée une fois le bogue de sécurité corrigé.

Mise à jour le 2017-11-29 16h43 UTC

Reportez -vous à la section À propos des éléments de sécurité de la mise à jour de sécurité 2017-001 pour mettre à jour macOS High Sierra afin d'éviter tout contournement de l'authentification de l'administrateur sans fournir le mot de passe de l'administrateur.

Freiheit
la source
Le titre de cette question est un XY tel qu’il est indiqué actuellement, car il n’est pas souhaitable de supprimer ou de désactiver le compte.
Monty Harder

Réponses:

40

Patch disponible, cliquez ici ou mettez à jour votre ordinateur.

Il est intéressant de noter qu’il n’ya pas encore de correctif pour les versions bêta et pour développeurs d’OSX, pour autant que je sache. Je mettrai à jour cette réponse dès que j'aurai entendu parler d'eux.

Téléchargez le patch ci-dessus. Laissant le reste du post pour l'histoire :-)

CVE est la CVE-2017-13872 et le NIST mettra à jour l'analyse dans un proche avenir.

Réponse originale, pertinente sans pièce

Tout d'abord, ne désactivez pas le compte root via l'interface graphique, la cause du problème est d'avoir un compte root "désactivé".

Vous devez activer l'utilisateur root et lui donner un mot de passe. Ceci est important , car la vulnérabilité est également disponible à distance, via VNC et Apple Remote Desktop (pour n'en nommer que quelques-uns) (une autre source) .

Il y a deux manières fondamentales de le faire; Interface graphique et terminal.

Tout d'abord, l'interface graphique

Pour activer le compte root, allez dans "Utilitaire de répertoire", c.-à-d. Cmd + espace et recherchez. Appuyez sur le verrou pour déverrouiller le "mode admin", puis activez le compte root via edit -> "Enable Root User".

Comment activer root

Il devrait demander un mot de passe root, pour l'instant entrez votre mot de passe normal (pour ne pas l'oublier). S'il ne vous demande pas de mot de passe, utilisez Edit -> "Change Root Password ..." ci-dessus.

Terminal

Si vous êtes plus d'un terminal, utilisez les éléments ci-dessous:

sudo passwd -u root
## Enter passwords as needed.... 
## (if you are using the terminal you should know what you are doing...)

C’est suffisant avec un terminal, le problème avec l’interface graphique est qu’il faut permettre au compte de définir un mot de passe, ce que nous n’avons pas à faire avec le terminal.

Remarques

Même si vous avez défini un mot de passe pour le compte root de votre ordinateur, celui-ci deviendra vulnérable si vous désactivez le compte root. L'action de désactivation du compte root semble être le coupable. Je répète donc que l’utilisateur root doit être activé et avoir un mot de passe s’il utilise l’interface graphique, alors que le terminal utilise uniquement «passwd», ce qui est «ok» (bien que cet état ne soit pas accessible via l’interface graphique uniquement). Il semble que "Désactiver l'utilisateur racine" dans "Utilitaire de répertoire" supprime le mot de passe du compte racine, ce qui vous donne un compte racine sans mot de passe vulnérable.

Il semble que tenter de se connecter avec "root" dans une fenêtre de connexion des systèmes active le compte root s'il est désactivé auparavant. C'est-à-dire qu'avec un compte root désactivé, vous devez entrer root deux fois dans une fenêtre de connexion au système pour obtenir un accès root, et (selon mes tests) au premier essai, le compte root est activé (sans mot de passe s'il n'est pas défini via passwd), et à la deuxième tentative, vous passez.

Il semble que le problème soit au grand jour depuis le 13 novembre 2017 au moins, lorsqu'il est mentionné dans le forum d'assistance Apple .

Prouvez-moi s'il vous plaît que je me trompe, j'apprécierais vraiment de me tromper maintenant.

Mise à jour effrayante

Après avoir activé le compte root sans mot de passe (c.-à-d. Via le panneau de préférences système, en cliquant sur un "verrou" et en entrant "root" avec un mot de passe vide une, deux ou trois fois (le nombre de fois dépend de l'état initial), il est possible de se connecter à l'ordinateur à partir de l'écran de connexion principal à l'aide de "root" et d'un mot de passe vide (!). SSH / Telnet ne semble pas fonctionner, mais Apple Remote Desktop, le partage d'écran et VNC sont vulnérables.

Donc, pour les administrateurs de réseaux, il pourrait être intéressant de déposer temporairement des paquets sur les ports suivants:

  • 5900-5905 (ish, pour être sûr de ninja) pour obtenir les ports VNC les plus courants. VNC commence par défaut à 5900 et est énuméré plus haut si vous utilisez plusieurs écrans (peu commun cependant). Le partage d'écran et Apple Remote Desktop semblent également utiliser ces ports ( liste des ports logiciels Apple )
  • 3283 et 5988 pour Apple Remote Desktop ( liste des ports logiciels Apple )

Lecture complémentaire:

Une vaillante tentative de référence à d'autres sources traitant de la question. Modifiez et mettez à jour ma réponse si vous en avez plus.

Flindeberg
la source
5
Ok, je vois pourquoi la réponse est fausse. Désactiver root ne sert à rien tant que cette erreur n'est pas corrigée, car elle ne fera que réactiver le compte. Avoir quelques votes positifs afin que vous puissiez commenter!
Freiheit
1
Je ne suis pas un gars mac, mais dans le monde * nix, la désactivation du mot de passe root ne devrait pas être moins sécurisée que celle d'un mot de passe sécurisé. En fait, il est très courant de désactiver le mot de passe et de définir le shell sur /dev/nullpour root. De cette manière, l'accès au compte root se fait par le biais d' suappels système pour les utilisateurs disposant de cette autorisation.
Crasic
1
@crasic AFAIK OSX fait quelque chose de bizarre avec leurs fenêtres de connexion système. Ils permettent apparemment d'activer les comptes en général ou de root en particulier s'ils sont essayés. Et il n'y a pratiquement aucune documentation disponible sur ce comportement. Notez que les spécificités de BSD (utilisation de ligne de commande / bash) ne posent aucun problème.
Flindeberg
Donc, avec la commande Terminal, vous pouvez définir le mot de passe root sans l'activer. Cela semble l'option la plus sûre.
Wisbucky
1
@jcm Nah, ce n'est vraiment pas très mal formulé après avoir déplacé un peu le texte. Je vais essayer de clarifier un peu, avoir regarder dans un min?
Flindeberg
10

Si vous ne pouvez pas installer le correctif officiel ou si vous ne voulez pas croire que cela a fonctionné, alors

Vous ne voulez pas désactiver l'utilisateur root sur High Sierra uniquement.

Pour sécuriser votre Mac, activez root avec un long mot de passe sécurisé.

Nous ne modifions pas cela au travail avant la sortie de la prochaine version complète de macOS, qui serait probablement la 10.13.2.


À moins que vous ne preniez des mesures, l'utilisateur root est désactivé par défaut, ce qui est grave si votre Mac n'est pas corrigé correctement.

Si vous le souhaitez, éventuellement, durcissez le shell jusqu'à ce que Apple dispose d'un correctif ou d'un correctif officiel.

Voici un excellent script pour définir un mot de passe root aléatoire et modifier / configurer le shell racine /usr/bin/falseafin que même si le mot de passe soit deviné, le shell root ne puisse pas se connecter:

Il fait essentiellement trois choses clés:

rootpassword=$(openssl rand -base64 32)
/usr/bin/dscl . -passwd /Users/root "$rootpassword"
/usr/bin/dscl . -create /Users/root UserShell /usr/bin/false

Si le shell n'est pas défini, le script UserShell crée, et le script complet recherche un shell existant et le vérifie au -changelieu de le remplacer -create.

Comment me protéger de la vulnérabilité des racines dans macOS High Sierra?

bmike
la source
1
Il est généralement préférable de ne pas stocker un mot de passe, même temporairement, comme ceci. La page de manuel dcsl suggère que "ne fournissez pas le mot de passe dans le cadre de la commande et vous serez invité de manière sécurisée"
Josh Caswell
1
Convenu @JoshCaswell - il est préférable de l’avoir dans un script car la variable n’est pas exportée et est générée. La bonne nouvelle est qu'Apple a un correctif officiel qui fait de ce piratage une nécessité de courte durée - nous l'avons utilisé comme une prévention pour éviter le plus grand préjudice de coder en dur le même mot de passe dans la flotte ou de ne pas en avoir du tout. C’était sûrement un compromis et non une solution.
bmike
Par pure curiosité, pourquoi avez-vous un lien vers cette question à la fin de votre réponse?
Reirab
1
@reirab totalement foiré. Voir modifier pour corriger le lien approprié. Merci!
bmike
0

Vous devez vous connecter en tant qu'utilisateur root et changer le mot de passe pour quelque chose de fort. S'il crée réellement un nouveau compte (par opposition à l'activation du compte root existant), vous devez d'abord supprimer ce compte.

argent
la source
Voir ma réponse personnelle. Votre conseil de définir un mot de passe fort est raisonnable, mais désactiver complètement le compte semble une protection encore plus rigoureuse et restaure OS X à son état par défaut. support.apple.com/fr-fr/HT204012 . La définition d'un mot de passe fort empêcherait-elle d'exploiter le bogue décrit même si le compte root est réactivé?
Freiheit
Sur High Sierra, 10.13.0 et 10,13.1, vous ne voulez absolument pas désactiver le compte root. Le problème est que si la racine est désactivé et que vous tentez d'utiliser une fenêtre de connexion pour se connecter en tant que root, fenêtre de connexion sera permet le compte root avec un mot de passe vide. Si root est déjà activé avec un mot de passe fort, la fenêtre de connexion n'efface pas le mot de passe. La seule solution consiste à activer root avec un mot de passe fort .
Brian Reiter
0

Apple vient de publier une mise à jour pour résoudre le problème.

Mise à jour de sécurité 2017-001 https://support.apple.com/fr-fr/HT208315

De même, pour empêcher tout accès non autorisé à vos ordinateurs Mac, vous devez activer le compte d'utilisateur root et définir un mot de passe spécifique à l'utilisateur root.

https://support.apple.com/en-ph/HT204012

Si votre compte d'utilisateur root est déjà actif, veillez à modifier le mot de passe uniquement pour vous assurer que la vulnérabilité du mot de passe vide n'est pas définie.

Melvin Jefferson
la source
0

Non! Ne supprimez pas le compte root!

Tout d'abord, roota été présent dans toutes les versions de macOS, Mac OS X, Mac OS et même les anciennes versions du système d'exploitation. macOS n'a pas récemment créé ce compte en raison d'une vulnérabilité. Cela l'a simplement exposé par accident.

Enlever rootserait une très mauvaise idée, et laissez-moi vous dire pourquoi.

Cela invaliderait complètement MacOS, car il n'y aurait pas de compte avec suffisamment de privilèges pour exécuter des services critiques (tels que WindowServer, qui exécute l'interface graphique). Des protections sont en place pour empêcher les utilisateurs désemparés de se retirer rootet vous ne devez pas tenter de les contourner.

Découvrons qui exécute les tout premiers processus dans le système, les processus les plus importants (à l'aide du moniteur d'activité):

kernel_task et launchd sont aussi la propriété de

Hey, c'est encore notre quartier amical root! Le premier processus (avec le PID 0) est en réalité contrôlé par le noyau et disposera de toute façon de toutes les autorisations, mais son processus enfant launchd(responsable du démarrage de services tels que la fenêtre de connexion et le serveur de fenêtre lui-même) est lancé avec les privilèges de root. S'il rootn'existait pas, ce processus n'aurait jamais démarré ou n'aurait aucune autorisation.

Sécuriser le compte root

D'autres réponses ont fourni un correctif publié par Apple qui devrait résoudre le problème. Cependant, si vous ne pouvez ou ne souhaitez pas l'installer ...

Cela fonctionne parce que macOS re-hache le mot de passe entré en tant que "mise à niveau" car le compte désactivé (root) a été détecté à tort comme ayant un ancien hachage. Il indiquera toujours que c'est incorrect, mais la prochaine fois, les hachages seront identiques (car macOS l'a modifié) et il vous laissera entrer.

Pour sécuriser root, vous devrez utiliser Directory Utility. Il y a deux façons d'y accéder:

  1. Utilisez Spotlight. Démarrer Directory Utility avec Spotlight
  2. Utilisez le Finder. Ouvrez le Finder, appuyez sur Commande + Maj + G (ou sélectionnez, entrez /System/Library/CoreServices/Applications/et appuyez sur Go (ou appuyez sur Entrée). Ouvrez ensuite Directory Utility à partir de là.Sélection Go Choisir où aller Utilitaire d'annuaire d'ouverture

Une fois que vous avez ouvert Directory Utility, vous devrez cliquez sur le verrou pour apporter des modifications

Ensuite, sélectionnez Change Root Passwordou Enable Root Userdans le menu Edition. Je montre Change Root Passworddepuis mon compte root est déjà activé avec un mot de passe fort.

Sélection du changement du mot de passe racine

Choisissez un mot de passe, et maintenant le mot de passe vide ne fonctionnera plus.

Choisir un mot de passe

Toutes nos félicitations! Vous n'êtes plus vulnérable au piratage racine.

Dev
la source
"Supposons par pure spéculation, le système réactive probablement le compte root car vous avez entré le mot de passe correct (vide dans ce cas)." - pas tout à fait correct. Il existe un chemin de migration permettant de mettre à jour les mots de passe en utilisant un ancien mécanisme de hachage, et celui-ci ne gère pas !correctement (ce qui, en tant que type UNIX, sera probablement reconnu).
Charles Duffy
Voir objective-see.com/blog/blog_0x24.html pour une analyse des causes fondamentales.
Charles Duffy
Oui, donc mes hypothèses n'étaient pas exactes. Donc, il re-hache un mot de passe vide en tant que "mise à niveau" parce que le compte désactivé a été détecté à tort comme ayant un ancien hachage? Ai-je raison?
Dev
En théorie, ce chemin de code est censé vérifier que l'ancien algorithme de hachage valide le mot de passe entré, puis se mettre à jour avec un nouveau hachage (du mot de passe entré, connu pour correspondre à l'ancien). En pratique, il ne vérifie pas les erreurs de la fonction censée récupérer l'ancien hachage du champ "ShadowHash" (ou plutôt, il ne vérifie que la valeur renvoyée, mais pas la valeur passée par référence utilisée pour renvoyer le résultat de la comparaison), puis génère un nouveau hachage à partir du mot de passe (vide ou non!).
Charles Duffy
... donc, à peu près, oui, vous avez raison. :)
Charles Duffy