保护 SuperMicro IPMI BMC

cjs*_*cjs 17 security ipmi supermicro

最近买了一块SuperMicro X8DTU-F主板,内置BMC,基本运行IPMI系统。原来是一个运行在 ARM 处理器上的小型 Linux 系统。

不幸的是,它正在运行大量软件,其中大部分我不需要,而且我没有能力将其置于防火墙后面。但是,我确实想要 IPMI 功能。使用过其中之一的人是否对如何保护这件事有一些具体的建议?它从本质上是一个 ROM 文件系统启动,甚至似乎没有任何钩子可以关闭它运行的任何各种服务器......

我还对如何验证可用于通过所有各种服务访问系统的名称和密码列表感兴趣。默认是ADMIN/ ADMIN,但 /conf 或 /etc 中的文件都没有“ADMIN”,这让我很担心。有/conf/shadow/conf/webshadow文件,其中有神秘的“测试”ID,这也让我感到特别不舒服。

Dan*_*son 6

理想情况下,您的管理网络将是与其他网络不同的网络,或者至少是具有有限路由访问的不同 vlan。

不过,这些系统并没有真正运行那么多服务:

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)
Run Code Online (Sandbox Code Playgroud)

(以及 IPMI 本身的 UDP/623)

如果您想进行任何类型的远程管理,则需要其中大部分。如果您不想进行远程管理,那么您应该考虑完全不启用 IPMI 控制器,或者购买 X9DTU 板代替(-F 表示“内置 BMC”)

如果您想进行完整的远程管理,无法在不同的网络上运行您的 IPMI 控制器,并且仍想禁用某些访问,那么您始终可以让 IPMI 控制器执行 iptables 命令。您可以编写 ssh 登录脚本来执行命令,或者向 Supermicro 索要 BMC 的 devkit 并使用自定义 iptables 脚本构建新映像。

更新

我在这里再次查看了我们的系统,/conf 文件系统已挂载为 rw。没有一个 init 脚本直接在 /conf 中调用任何东西(我可以看到),但是有一个 crontab 文件。所以,我猜你可以复制一个 iptables 脚本,然后编辑 /conf/crontab 以在某个合适的时间间隔调用它。您希望它在 BMC init 上尽快运行,但您不一定希望它每分钟运行一次。或者也许你不在乎。


cjs*_*cjs 6

/conf/crontab正如 dlawson 指出的那样,使用对我来说听起来是个好主意。这允许我每分钟运行一次脚本,以确保除 http 和 ssh 之外的所有内容都关闭:

/etc/init.d/cdserver stop
/etc/init.d/fdserver stop
/etc/init.d/cim_sfcb stop
/etc/init.d/webgo stop
Run Code Online (Sandbox Code Playgroud)

这仍然给我留下了一个带有基于密码的访问控制的 Web 服务器(我看不出有办法让它验证客户端证书),谁知道远程漏洞是什么。当我不使用它时(大多数情况下)将其关闭似乎是一个合理的解决方案;添加一个 crontab 条目以每五或十分钟关闭它会发现有人在完成后忘记关闭它的情况。

ssh 守护进程是dropbear 的一个版本,似乎经过了相当大的修改。它从/conf/PMConfig.dat(Web 服务器也使用)读取用户名和明文密码,以 root 用户身份登录任何有效的名称和密码,并忽略该~/.ssh/authorized_keys文件。最后一个问题很烦人;它强制您允许密码登录并打开后门的可能性,这取决于它从何处获取名称和密码。

所以这就是你面临的困境:你真的相信这个修改过的 ssh 守护进程安装在一个系统上,这个系统显然是由不安全的开发人员设计的?考虑到我在他们的 shell 脚本中看到的碎屑的数量,一点也不多。有不寻常的命名约定(/etc/rc?.d/sshd 是 /etc/init.d/ssh 的符号链接)、大量似乎未使用的代码以及仅 ssh 启动脚本中的功能,例如该/conf/portcfg_ssh文件甚至restart命令被完全打破。(不要尝试使用这些;sshd 不会重新启动,除非您有现有登录名,否则您会被搞砸。我们重新启动了 BMC,最终不得不重新刷新它。)

我能想到的最好的选择是,如果有人要使用这个东西,那就是使用 cron 作业在备用端口上启动 ssh,所以至少它不太可能出现在端口扫描中。

最后一个组件是 IPMI 网络管理端口;我看不出如何关闭这些。