问题描述:
在对某些智能硬件设备进行测试时,发现有些设备直接提供了Linux shell,并且登录账号默认是root权限!在登录到设备后,在bin目录下可以看到很多命令行程序,这些程序大部门用户用不到,更多的是作为开发的时候使用,主要包含以下几类:
1、 危险命令:设备reboot,busybox power off等。
2、 调试命令:show***(显示设备操作码、服务器授权码等)、用于调试网络数据传输的的net*****和debug***等等。
3、 各种Linux下的常用命令,比如:ftpput,ftpget等。
经过我们统计,目前很多散布在互联网上的智能硬件设备都存在弱口令问题,还有一些是存在远程命令执行的,一旦攻击者登录到设备,这些shell命令的存在显然为攻击者读取敏感信息和进行破坏提供了更多的便利,甚至是威胁到了服务器端的安全。因此,在产品设计初期,就要考虑到如何防范和规避风险。
解决方案:
1、 初期应根据业务需求评估,是否有必要保留登录shell的问题,常见提供shell命令的服务有Telnet、SSH、FTP协议以及硬件串口等,还有一些公司使用了私有协议来实现。如果没有这种需求,则应直接关闭掉。
2、 如果要保留shell,那么不要直接提供用户底层的Linux shell,而是应该在此基础上再封装一层shell,用户只能在这层受限制的shell上执行指定的命令。
3、 Release版本的shell要求尽量只保留基础命令,对于必须存在的高危命令,建议进行二次认证,即重新输入一次口令甚至可要求登录口令和二次验证口令不能相同,这样,即便被攻击者恶意登录,有能降低危害。
4、 对于初始口令,第一次登录时,可以要求强制修改口令或者每次登录皆提示,直至用户修改为止。
5、 根据业务需求在定制shell上区分不同的用户权限角色,对不同角色可执行的命令进行严格区分。
注:由于安全性和产品体验是一个矛盾体,我们不能要求以上必须强制实施,但尽量能做到用户可配置关闭,并且默认配置。