3 增强镜像安全性
如果需要保护镜像,可以考虑使用一些步骤、工具和变量,以实现特定设备所需的 安全目标。不同场景对镜像安全性的要求并不完全相同。因此,本节提供一些增强 镜像安全性时可参考的指导和建议。
备注
每类设备的安全要求和风险都不同,因此本节无法成为保护自定义操作系统的 完整参考。强烈建议同时查阅其他有关嵌入式 Linux 系统加固和安全的资料。
3 一般注意事项
以下通用事项有助于创建更安全的镜像。要提高设备安全性,请考虑以下建议:
使用静态分析工具扫描添加到系统中的代码,例如应用程序代码,检查缓冲区 溢出及其他潜在安全问题。
特别注意基于 Web 的管理界面的安全性。
Web 界面通常需要执行管理操作,往往需要以较高权限运行。因此,一旦界面 安全性遭到破坏,后果可能很严重。应检查跨站脚本(XSS)、未经验证的输入 等常见 Web 漏洞。
与系统密码一样,不应让所有设备使用相同的 Web 界面默认访问凭据。 如果界面默认启用,这一点尤其重要,因为许多最终用户很可能不会修改凭据。
确保能够更新设备上的软件,以缓解未来发现的漏洞。设备具备网络连接能力时, 这一点尤其重要。
定期扫描并修复影响产品中所有软件组件的 CVE 安全问题,见 “检查漏洞”。
定期更新 BitBake 和使用的层,例如 OpenEmbedded-Core (OE-Core)、 meta-yocto 等,以便应用稳定分支和 LTS 分支提供的更新及安全修复。
生成最终镜像之前,确保删除或禁用调试功能。操作方法见 “OpenEmbedded 构建系统特有的注意事项” 一节。
确保没有不需要的网络服务处于监听状态。
从镜像中移除所有不需要的软件。
如果设备支持安全启动,应启用相应的硬件支持。
3 安全标志
Yocto Project 提供了一些安全标志,启用后可增强构建输出的安全性。这些标志
位于 OpenEmbedded-Core (OE-Core) 的
meta/conf/distro/include/security_flags.inc 文件中。
备注
不同配方默认启用或禁用的安全标志可能不同。
在 build/conf/local.conf 文件或自定义发行版的 configuration file 中添加以下行,为构建启用编译器和链接器安全标志:
require conf/distro/include/security_flags.inc
3 OpenEmbedded 构建系统特有的注意事项
可以采用以下针对 OpenEmbedded 构建系统的措施,提高镜像安全性:
开发期间,适当放宽构建的安全限制、允许空密码或 root 登录可能更方便。 通常可将 "allow-empty-password"、"allow-root-login" 和 "empty-root-password" 添加到构建的镜像功能中,常用做法是在发行版的 configuration file 中添加以下行:
EXTRA_IMAGE_FEATURES = "allow-empty-password empty-root-password allow-root-login"
也可以启用效果完全相同的配置片段 core/yocto/root-login-with-empty-password。
如果开发时采用上述任一方式,务必在生成最终生产镜像之前移除或停用这些设置。
可以为镜像设置 root 密码,也可以为额外添加的用户(例如管理员或服务用户) 设置密码。为多个镜像或用户设置密码时,不应重复使用相同密码。
推荐使用 extrausers 类设置密码。如何同时设置 root 密码和普通用户密码,见 “extrausers” 一节中的示例。
备注
添加额外用户账户或设置 root 密码时,应谨慎对待所有设备使用相同密码 的做法。如果这样做,一旦密码泄露,所有设备都可能遭到入侵。如果需要 这种访问能力又希望保证安全,可考虑为每台设备设置不同的随机密码。 通常在将镜像部署到设备后,单独执行这一步骤。
考虑启用 SMACK 或 SELinux 等强制访问控制(MAC)框架,并根据设备用途 适当调整配置。更多信息见 meta-selinux 层。
3 镜像加固工具
Yocto Project 提供了增强镜像安全性的工具。这些工具位于
Yocto Project 源码仓库 的 meta-security 层中。