Como desabilito ou removo a conta raiz criada como efeito colateral desse bug de segurança do High Sierra?

40

Este artigo descreve um bug no qual a inserção de raiz quando solicitado para desbloquear permite que qualquer usuário desbloqueie as preferências do sistema. Ele adverte que:

Não é necessário fazer isso você mesmo para verificar. Fazer isso cria uma conta “raiz” da qual outras pessoas podem se beneficiar se você não a desabilitar.

O artigo não descreve o que fazer se um engenheiro ansioso reproduzir o problema e agora precisar remover ou desativar a conta raiz.

Como essa conta pode ser desativada ou removida com segurança?

Esta página da Apple descreve como desativar a conta, mas isso não protege contra a falha porque a falha pode apenas reativar a conta. Ele funcionará para restaurar o sistema ao seu estado normal com o root desativado quando o bug de segurança for corrigido.

Atualização 2017-11-29 16:43 UTC

Consulte Sobre o conteúdo de segurança da Atualização de segurança 2017-001 para atualizar o macOS High Sierra para evitar o desvio da autenticação do administrador sem fornecer a senha do administrador.

Freiheit
fonte
O título desta pergunta é um XY, conforme indicado atualmente, pois a remoção ou desativação da conta não é desejada.
Monty mais dura

Respostas:

40

Patch disponível, clique aqui ou apenas atualize na máquina

Curiosamente, não há patch para as versões beta e de desenvolvedor do OSX, tanto quanto eu sei. Atualizarei esta resposta assim que souber deles.

Faça o download do patch acima. Deixando o resto do post para a história :-)

O CVE é CVE-2017-13872 e o NIST atualizará a análise em um futuro próximo.

Resposta original, relevante sem patch

Primeiro, não desabilite a conta raiz pela GUI, ter uma conta raiz "desabilitada" é a causa do problema.

Você deve habilitar o usuário root e fornecer uma senha. Isso é importante , pois a vulnerabilidade também está disponível remotamente, via VNC e Apple Remote Desktop (para citar alguns) (outra fonte) .

Existem duas maneiras básicas de fazer isso; GUI e terminal.

Primeiro, GUI

Para habilitar a conta root, vá para "Directory Utility", ou seja, cmd + espaço e pesquisa. Pressione a trava para desbloquear o "modo de administrador" e ative a conta root em edit -> "Enable User Root".

Como habilitar root

Ele deve solicitar uma senha root, por enquanto, digite sua senha normal (para não esquecê-la). Se ele não solicitar uma senha, use Editar -> "Alterar senha raiz ..." acima.

terminal

Se você é mais uma pessoa terminal, use o abaixo:

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

Isso basta com um terminal, o problema com a interface gráfica é que precisamos habilitar a conta para definir uma senha, o que não precisamos com o terminal.

Notas

Mesmo se você tiver uma senha definida para a conta raiz do seu computador, ela ficará vulnerável se você desativar a conta raiz. A ação de desativar a conta raiz parece ser a culpada. Por isso, repito, o usuário root deve estar habilitado e ter uma senha se estiver usando a GUI, enquanto via terminal usando apenas 'passwd' está "ok" (embora esse estado seja inacessível apenas pela GUI). Parece que "Desativar usuário raiz" em "Utilitário de diretório" remove a senha da conta raiz, de certa forma fornecendo uma conta raiz sem senha, vulnerável.

Parece que tentar fazer login com "root" em uma janela de login do sistema habilita a conta root se ela estiver desabilitada anteriormente. Ou seja, com uma conta root desabilitada, você precisa inserir o root duas vezes nas janelas de login do sistema para obter acesso root e (de acordo com meu teste) na primeira tentativa, a conta root é ativada (sem senha, se não for definida como via passwd), e na segunda tentativa que você passa.

Parece que o problema está em aberto desde 13/11/2017 (13 de novembro), quando mencionado no fórum de suporte da Apple .

Por favor, prove que estou errado, eu realmente aprecio estar errado agora.

Atualização assustadora

Depois de ativar a conta raiz sem senha (ou seja, através do painel de preferências do sistema e clicar em "bloquear" e inserir "raiz" com a senha em branco uma, duas ou três vezes (o número de vezes depende do estado inicial)) é possível fazer logon no o computador na tela de login principal usando "root" e uma senha em branco (!). O SSH / Telnet parece não funcionar, mas o Apple Remote Desktop, o Screen Sharing e o VNC são vulneráveis.

Portanto, para administradores de redes, pode ser interessante descartar pacotes temporariamente nas seguintes portas:

  • 5900-5905 (ish, ser ninja seguro) para obter as portas VNC mais comuns. O VNC inicia em 5900 por padrão e enumera para cima se você estiver usando vários monitores (embora incomum). O compartilhamento de tela e o Apple Remote Desktop também parecem usar essas portas ( lista de portas do software Apple )
  • 3283 e 5988 para Apple Remote Desktop ( lista de portas de software da Apple )

Leitura adicional:

Uma tentativa valente de referenciar outras fontes que lidam com o problema. Edite e atualize minha resposta se tiver mais.

Flindeberg
fonte
5
Ok, vejo por que a resposta automática está errada. Desabilitar o root não é bom até que essa falha seja corrigida, pois a própria falha apenas reativará a conta. Tenha alguns votos positivos para poder comentar!
Freiheit
11
Não sou do tipo mac, mas no mundo * nix, desabilitar a senha root não deve ser menos seguro do que ter uma senha segura. De fato, é muito comum desativar a senha e definir o shell como /dev/nullroot. Dessa maneira, o acesso à conta raiz ocorre por meio de susyscalls para usuários com essa permissão.
Crasic
11
@crasic AFAIK OSX faz algo estranho com suas janelas de login do sistema. Aparentemente, eles habilitam contas em geral ou têm raízes específicas se tentadas. E praticamente não há documentação disponível desse comportamento. Observe que os detalhes do BSD (ou seja, uso da linha de comando / bash) são sem problemas.
flindeberg
Então, com o comando Terminal, você pode definir a senha do root sem ativar o root? Essa parece ser a opção mais segura.
wisbucky
11
@jcm Nah, na verdade não é, é apenas uma palavra muito ruim depois de mover o texto um pouco. Vou tentar esclarecer um pouco, olha daqui a pouco?
flindeberg
10

Se você não pode instalar o patch oficial ou não quer confiar que ele funcionou, então

Você não deseja desativar o usuário root apenas no High Sierra.

Para proteger seu Mac, ative o root com uma senha longa e segura.

Não estamos mudando isso no trabalho até que a próxima versão completa chegue ao macOS, que provavelmente seria 10.13.2


A menos que você tome uma atitude, o usuário root é desativado imediatamente e isso é ruim se o seu Mac não estiver corrigido corretamente.

Se desejar, opcionalmente, endureça o shell até que a Apple tenha um patch ou correção oficial.

Aqui está um ótimo script para definir uma senha raiz aleatória e alterar / definir o shell raiz para /usr/bin/falseque, mesmo que a senha seja adivinhada, o shell raiz não poderá efetuar login:

Basicamente, ele faz três coisas principais:

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

A criação do UserShell é se o shell não estiver definido, e o script completo verifica se há um shell existente e o -changeexecuta em vez de -createnele.

Como me protejo da vulnerabilidade raiz no macOS High Sierra?

bmike
fonte
11
Geralmente, é preferível não armazenar uma senha temporariamente como esta. A página de manual do dcsl sugere "não forneça a senha como parte do comando e você será solicitado com segurança"
Josh Caswell
11
@JoshCaswell concordado - tê-lo em um script é melhor, pois a variável não é exportada e gerada. A boa notícia é que a Apple tem um patch oficial que torna esse hack uma necessidade de vida curta - nós o executamos como um profilático para o dano muito maior de codificar a mesma senha em toda a frota ou não ter senha. Certamente foi um compromisso e não uma solução.
bmike
Por pura curiosidade, por que você tem um link para esta pergunta no final de sua resposta?
reirab
11
@reirab totalmente bagunçado. Consulte editar para corrigir o link apropriado. Obrigado!
bmike
0

Você precisa fazer login como usuário root e alterar a senha para algo forte. Se ele realmente criar uma nova conta (em vez de ativar a conta raiz já existente), você deverá excluir essa conta primeiro.

moneyt
fonte
Veja minha auto-resposta. Seu conselho para definir uma senha forte é razoável, mas desativar totalmente a conta parece ser uma proteção ainda mais rigorosa e restaura o OS X ao seu estado padrão. support.apple.com/en-us/HT204012 . A configuração de uma senha forte evitaria a exploração do bug descrito, mesmo que a conta raiz fosse reativada?
Freiheit 28/11
No High Sierra, 10.13.0 e 10,13.1, você absolutamente não deseja desativar a conta raiz. O problema é que se a raiz está desativado e você tentar usar qualquer janela Acesso ao logar como root, Janela de Login irá permitir que a conta root com uma senha em branco. Se o root já estiver ativado com uma senha forte, a Janela de Login não apagará a senha. A única mitigação é habilitar o root com uma senha forte .
Brian Reiter
0

A Apple acaba de lançar uma atualização para corrigir o problema.

Atualização de segurança 2017-001 https://support.apple.com/en-us/HT208315

Além disso, para impedir o acesso não autorizado aos computadores Mac, você deve ativar a conta de usuário root e definir uma senha especificamente para o usuário root.

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

Se sua conta de usuário root já estiver ativa, altere a senha apenas para garantir que a vulnerabilidade da senha em branco não esteja definida.

Melvin Jefferson
fonte
0

Não! Não remova a conta root!

Antes de tudo, rootestá presente em todas as versões do macOS, Mac OS X, Mac OS e até versões antigas do sistema operacional. O macOS não criou recentemente esta conta devido a uma vulnerabilidade. Apenas o expôs por acidente.

A remoção rootseria uma péssima idéia e deixe-me dizer o porquê.

Isso prejudicaria completamente o macOS, pois não haveria conta com privilégios suficientes para executar serviços críticos (como o WindowServer, que executa a GUI). Existem salvaguardas para impedir a remoção de usuários sem noção root, e você não deve tentar ignorá-los.

Vamos descobrir quem executa os primeiros processos no sistema, os processos mais importantes (usando o Activity Monitor):

kernel_task e launchd também pertencem a

Ei, é o nosso bairro amigável de rootnovo! O primeiro processo (com PID 0) é realmente controlado pelo kernel e provavelmente terá permissões completas, mas seu processo filho launchd(responsável por iniciar serviços como a janela de login e o próprio servidor de janelas) é iniciado com os privilégios de root. Se rootnão existisse, esse processo nunca teria iniciado ou não teria permissões.

Protegendo a conta raiz

Outras respostas forneceram um patch lançado pela Apple que deveria corrigir o problema. No entanto, se você não puder ou não quiser instalá-lo ...

Funciona porque o macOS re-hashes a senha digitada como uma "atualização" porque a conta desabilitada (raiz) foi incorretamente detectada como tendo um hash antigo. Ele ainda diz que está incorreto, mas da próxima vez, os hashes corresponderão (porque o macOS o alterou) e permitirá que você entre.

Para garantir root, você precisará usar o Utilitário de Diretório. Existem duas maneiras de acessá-lo:

  1. Use o Spotlight. Iniciando o Directory Utility usando o Spotlight
  2. Use o Finder. Abra o Finder, pressione Command + Shift + G (ou selecione, entre /System/Library/CoreServices/Applications/e pressione Go (ou pressione Enter) .Em seguida, abra o Directory Utility a partir daí.Selecionando Ir Selecionando para onde ir Abrindo o Utilitário de Diretório

Depois de abrir o Directory Utility, você terá que clique no cadeado para fazer alterações

Depois de fazer isso, selecione Change Root Passwordou Enable Root Userno menu Editar. Eu mostro Change Root Passwordque minha conta root já está ativada com uma senha forte.

Selecionando Alterar Senha Raiz

Escolha uma senha e agora a senha em branco não funcionará mais.

Escolhendo uma senha

Parabéns! Você não está mais vulnerável ao hack da raiz.

Dev
fonte
"Adivinhando por pura especulação, o sistema provavelmente reativa a conta root porque você digitou a senha correta (em branco neste caso)." - não exatamente. Há um caminho de migração para atualizar senhas usando um mecanismo de hash antigo, e ele não manipula !(que, como um tipo UNIX, você provavelmente reconhecerá) corretamente.
Charles Duffy
Consulte objetivo-see.com/blog/blog_0x24.html para uma análise de causa raiz.
Charles Duffy
Certo - então minha especulação não foi precisa. Portanto, ele re-hashes uma senha em branco como uma "atualização" porque a conta desabilitada foi detectada incorretamente como tendo um hash antigo? Estou correcto?
Dev
Em teoria, o que ele deve fazer nesse caminho de código é verificar se o antigo algoritmo de hash valida a senha inserida e, em seguida, atualizar com um novo hash (da senha inserida, que é conhecida por corresponder à antiga). Na prática, ele não verifica se há erros na função que deveria recuperar o hash antigo do campo "ShadowHash" (ou, em vez disso, verifica apenas o valor de retorno, mas não o valor passado por referência usado para retornar o resultado da comparação) e, em seguida, gera um novo hash a partir da senha (vazia ou não!).
Charles Duffy
... então, praticamente, sim, você está correto. :)
Charles Duffy