Protegendo um BMC SuperMicro IPMI

17

Recentemente, adquiri uma placa-mãe SuperMicro X8DTU-F, que possui um BMC integrado, que basicamente executa o sistema IPMI. Acontece que é um pequeno sistema Linux rodando em um processador ARM.

Infelizmente, ele está executando uma grande quantidade de softwares, muitos dos quais não preciso, e não tenho a capacidade de colocá-lo atrás de um firewall. No entanto, eu quero a funcionalidade IPMI. Alguém que usou um desses tem algumas sugestões específicas sobre como proteger a coisa? Ele inicializa a partir do que é essencialmente um sistema de arquivos ROM, e nem parece haver ganchos para desligar qualquer um dos vários servidores que ele roda.

Também estaria interessado em saber como verificar a lista de nomes e senhas que podem ser usados ​​para acessar o sistema através de todos os vários serviços. O padrão é ADMIN/ ADMIN, mas nenhum dos arquivos em / conf ou / etc tem 'ADMIN' neles, o que me preocupa bastante. Existem /conf/shadowe /conf/webshadowarquivos, com identificações misteriosas de 'teste', o que também não me faz sentir particularmente confortável.

Curt J. Sampson
fonte
Ainda não encontrei uma correlação entre o conteúdo de shadow, webshadow e o que são realmente usuários válidos. Novos usuários adicionados por meio do gerenciamento do BMC não aparecem nesses arquivos. Além disso, os usuários "anônimo", "test1", "test2" possuem um shell que não existe no sistema de arquivos.
2111 Daniel Lawson
2
Consulte também o guia de Dan Farmer em IPMI Security Best Practices . Ele lançou um artigo recente detalhando alguns problemas significativos de segurança com o IPMI intitulado ipmi: trem de carga para o inferno .
Stefan Lasiewski
11
Obrigado por esse ótimo link. O breve resumo dos problemas de segurança está em fish2.com/ipmi/itrain-gz.html e o resumo muito breve é ​​"você está completamente ferrado". Suspiro.
Curt J. Sampson

Respostas:

6

Usar /conf/crontab, como dlawson apontou, parece uma excelente ideia para mim. Isso me permite executar um script uma vez por minuto que garante que tudo, exceto http e ssh, seja desligado:

/etc/init.d/cdserver stop
/etc/init.d/fdserver stop
/etc/init.d/cim_sfcb stop
/etc/init.d/webgo stop

Isso ainda me deixa com um servidor Web com controle de acesso baseado em senha (não vejo como validar certificados de cliente) e quem sabe quais vulnerabilidades remotas. Desligá-lo quando não o estou usando (que é na maioria das vezes) parece uma solução razoável; adicionar uma entrada de crontab para desligá-la a cada cinco ou dez minutos pegaria os casos em que alguém se esquece de desligá-la quando terminar.

O daemon ssh é uma versão do dropbear que parece ser bastante modificada. Ele lê nomes de usuário e senhas de texto sem formatação /conf/PMConfig.dat(que também são usados ​​pelo servidor da Web), registra qualquer nome e senha válidos como usuário root e ignora o ~/.ssh/authorized_keysarquivo. Este último problema é irritante; obriga a permitir logins de senhas e abre a possibilidade de backdoors, dependendo de onde todos os nomes e senhas são obtidos.

Esse é o dilema que você enfrenta: quanto você realmente confia nesse daemon ssh modificado instalado em um sistema que foi obviamente projetado por desenvolvedores ingênuos em segurança? Não muito, dado o número de fragmentos quebrados que já vi em seus scripts de shell. Existem convenções de nomenclatura incomuns (/etc/rc?.d/sshd é um link simbólico para /etc/init.d/ssh), grande quantidade de código que parece não ser usado e recursos apenas no script de inicialização ssh, como o /conf/portcfg_ssharquivo e até o restartcomando estão totalmente quebrados. (Não tente usá-los; o sshd não será reiniciado e você será ferrado a menos que tenha um login existente. Reiniciámos o BMC e acabamos tendo que atualizá-lo.)

A melhor opção que eu posso pensar, se alguém vai usar a coisa, é iniciar o ssh em uma porta alternativa usando um trabalho cron, portanto, pelo menos, é menos provável que apareça em um portscan.

O componente final são as portas de gerenciamento de rede IPMI; Não consigo ver como desativar isso.

Curt J. Sampson
fonte
A maioria das suas preocupações em relação às modificações provavelmente não é um problema. O Dropbear usa pam, que usa libpamipmi para autenticação - não vi nenhuma evidência de que ele realmente leia senhas em texto não criptografado diretamente. O Libpamipmi fará uma chamada de ipmi para a pilha de ipmi, e isso pode estar lendo senhas de texto não criptografado, mas o que quero dizer é que não parece que o daemon dropbear foi ferrado. No entanto, eu estaria interessado em ouvir qualquer prova definitiva que você tenha do contrário.
22909 Daniel Lawson
Bem, sabemos que foi quebrado porque não há como: a) usar chaves, em vez de senhas, eb) desativar a autenticação de senha.
Curt J. Sampson
6

Idealmente, sua rede de gerenciamento seria uma rede diferente da sua outra rede ou, pelo menos, uma vlan diferente com acesso roteado limitado.

Esses sistemas não estão realmente executando tantos serviços:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
555/tcp  open  dsf
5120/tcp open  unknown
5900/tcp open  vnc
5988/tcp open  unknown
MAC Address: 00:30:48:D9:3A:71 (Supermicro Computer)

(e UDP / 623 para o próprio IPMI)

A maioria delas é necessária se você deseja fazer qualquer tipo de gerenciamento remoto. Se você não deseja fazer o gerenciamento remoto, considere não ativar o controlador IPMI ou comprar uma placa X9DTU (o -F indica "BMC interno")

Se você deseja fazer um gerenciamento remoto completo, não pode executar seus controladores IPMI em uma rede diferente e ainda deseja desativar algum acesso, sempre é possível obter o controlador IPMI para executar comandos iptables. Você pode criar um script de login ssh para executar os comandos ou solicitar à Supermicro o devkit para o BMC e criar uma nova imagem com um script personalizado do iptables.

ATUALIZAR

Dei outra olhada em nossos sistemas aqui e o sistema de arquivos / conf está montado em rw. Nenhum dos scripts init chamou nada diretamente em / conf (que eu pude ver), mas existe um arquivo crontab. Então, acho que você pode copiar um script iptables e editar / conf / crontab para chamá-lo em um intervalo adequado. Você deseja que ele seja executado o mais rápido possível no BMC init, mas não é necessário que ele seja executado a cada minuto. Ou talvez você não se importe.

Daniel Lawson
fonte
Eu adoraria ter uma rede separada para gerenciamento, mas infelizmente isso está entrando no data center de outra pessoa, e não posso ter isso. Quanto à gestão, tudo o que realmente quero é https e ssh.
Curt J. Sampson
Você nunca, nunca, quer KVM sobre lan?
911 Daniel Lawson
Você pode ter uma unidade de firewall separada na frente do seu host no controlador de domínio. Isso resolveria um pouco o problema. Você pediu ao suporte da Supermicro para obter ajuda nisso? Eu encontrei-los a ser bastante responsivo
Daniel Lawson
Não. Não preciso do KVM pela LAN, pois o BIOS, o Grub e o kernel Linux suportam um console serial.
Curt J. Sampson
4

Uma coisa a considerar ao proteger um IPMI Supermicro é o servidor ssh. As versões mais antigas do código IP8 X8SIL-F aceitavam conexões ssh, independentemente da senha fornecida. O software então verificava a senha e rejeitava ou aceitava a conexão, mas havia uma breve janela para criar a porta ssh para a frente. As pessoas estavam recebendo reclamações de spam / abuso por seus IPMI IPs por causa disso . Para a placa-mãe X8SIL-F, a versão do firmware 2.60 IPMI corrigiu o problema (pode ter sido corrigido anteriormente, a entrada do changelog do 2.54 parece ser a mesma).

Um segundo problema é um usuário anônimo com uma senha padrão. O usuário anônimo parece estar corrigido na versão de firmware 2.22.

ddrown
fonte
2

Há um pequeno truque para ativar o HTTPS na interface da Web do IPMI.

Se o seu firmware IPMI suportar isso (meu firmware 2.04 para X8DTH-iF suporta), você poderá, inicialmente, habilitar o acesso HTTPS, indo em Configuração -> SSL, carregando dois arquivos PEM (certificado e chave privada) e, em segundo, manualmente reinicie o seu módulo IPMI.

Finalmente, você pode acessar a interface da Web da IPMI em https: // bmc-ip-or-hostname / . Não posso dizer que o HTTPS funcione mais lentamente que o HTTP.

AntonioK
fonte
0

Algum de vocês tentou proteger a coisa com o iptables? Parece que o iptables está instalado e eu quero criar um conjunto de regras que negue que tudo aceite alguns IPs confiáveis ​​para torná-lo um pouco mais seguro ... Mas, como eu li acima, nenhum script está sendo lido em / config. O crontab é a única opção? E se você estragasse o iptables?


fonte
11
Como eu disse anteriormente, é muito melhor proteger seu controlador IPMI externamente: seja em uma rede física ou vlan completamente separada, seja em um firewall de borda. Esse modelo específico de controlador IPMI / BMC executa o linux, que solicita a noção de que você pode protegê-lo com o iptables. A realidade é, no entanto, que a grande maioria do BMC / IPMI / o que quer que você os chame não tem muito ou nada no caminho do firewall e, portanto, não deve confiar nele. Evite aborrecimentos e trate sua rede IPMI como privada, protegida e não roteada.
219 Daniel Lawson
11
Eu discordo que é "melhor" proteger seu controlador IPMI externamente; firewalls e similares são mais propensos a falhas de segurança do que um host devidamente protegido em primeiro lugar. No entanto, se você tem a capacidade de usar uma rede separada, isso é bom, e no caso de dispositivos IPMI como este, parece quase essencial.
Curt J. Sampson
0

Como você visualizou o sistema de arquivos? Se eu telnetar para a porta 22, posso ver o dropbear em execução, mas se eu tentar fazer o SSH com vários nomes de usuário, não solicitará uma senha. Adicionei um novo usuário com privilégios de administrador, mas o SSH também não responderá por esse usuário. Estou usando uma placa-mãe Supermicro X7SPA-HF que possui um chip Winbond Hermon IPMI 2.0, revisão de firmware 01.29, tempo de construção 31/12/2009.


fonte
2
Eu fiz o ssh -v, para ver o que estava acontecendo, vi que estava tentando a autenticação de chave pública. Eu consegui desabilitar isso.
Agora estou no Shell de Gerenciamento de Sistema ATEN SMASH-CLP, versão 1.00