我正在为一家初创公司工作,正在开发一款将配备所需硬件的产品。
硬件是一台运行 Ubuntu 20.04 的迷你电脑。该应用程序由 Docker 容器内的 Python 服务、数据库和一些深度学习模型组成 - 因此,迷你电脑本质上是用作服务器替代品。用户通过连接热点来访问该应用程序。在某些客户那里,硬件将被隔离。
我无法讲太多细节,但是这种配置在它们的特殊用例中是有意义的。
我现在的任务是确保硬件安全,以防止应用程序被篡改/修改。我做了一些研究(见下文),但不知道是否可以采取什么措施以令人满意的方式解决这个问题。
我的研究:
- 我发现的第一个想法是使用 LUKS 加密根分区,然后将密钥存储在 TPM 中 - 当前硬件不支持 TPM(希望这可以在未来的硬件购买中改变)
- 第二个想法是加密根分区并提供分区密钥。尽管现在需要两个部分,但我认为这不会使篡改变得更加困难。
- 除了操作系统的可能性之外,另一个想法是至少使用类似 pyarmor 的东西来混淆应用程序代码 - 但这又感觉像是一个非常低的门槛。
我已经尝试过寻找其他可能性 - 也许我的搜索查询很糟糕 - 但我找不到任何令人满意的方法来解决这个问题。我希望这里有人能给我指明正确的方向。
答案1
加密与保护不同。加密只能防止他人在数据被盗时访问您的数据。篡改是在正在运行的系统上进行的,此时系统已解锁。
为了确保 Ubuntu(/您的系统)的安全:
- 尽快更新您的系统并始终应用安全更新。加入安全邮件组,以便您立即获得有关漏洞的更新。我收到了有关 CVE 的报告,99% 都没什么意思,但有一次它确实很有趣(OpenSSL 漏洞)。
- 为管理员设置合适的密码,并强制其他用户使用合适的密码。并更改管理员密码。
- 不要安装第三方软件,除非你能接受其创建者/维护者。尽可能坚持基本原则。
- 删除所有不使用的软件。如果是服务器:没有桌面;使用命令行。
- 做好备份,制定应急计划并加以练习
混淆应用程序代码
这根本行不通。你应该考虑到任何不应该访问但可以访问你系统的人都足够聪明,能够看透这一点。
我们目前正在迁移的一件事是拆分服务器:我们的软件、数据库和 jasperserver 各自位于自己的实例上。最后两个没有连接到互联网,只能与拥有软件的服务器通信。
答案2
你似乎正在重新发明器具。
- 一个器具是捆绑的操作系统 + 软件包,有时也包含硬件。安装后,用户无需登录或访问操作系统;配置和活动仅发生在面向用户的软件界面、GUI 或 API 上。
- 示例https://ubuntu.com/appliance
在 Ubuntu 中,最容易创建的是使用 Ubuntu Core 并在其上添加您自己的自定义 Snap。Ubuntu Core 和 Snaps 专为此类用途而设计。
Ubuntu Server 不是为您描述的用例而设计的。