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 层中。