我正在开发一个必须部署在客户端私有云上的软件。客户端具有根访问权和硬件访问权。我不想让客户逆向设计我们的软件。
我们可以在这里控制两件事:
Docker部署能阻止客户端反向工程我们的代码吗?我们计划打开一个端口,并使用SSL来保护传入和传出数据。
发布于 2015-03-05 17:09:13
如果用户有根,或者他能够使用他的自定义内核(甚至内核模块),他可以做任何事情-转储内存,停止进程,附加调试器-开始反向工程。如果用户能够访问硬件,他也可以获得根或自定义内核。保护软件不受用户影响的唯一方法是使用好的DRM,例如使用TPM (可信平台模块)或ARM TrustZone。SecureBoot不会完全保护您的软件(在x86上,它通常会被关闭)。其他的变体是使用抗篡改硬件(http://www.emc.com/emc-plus/rsa-labs/standards-initiatives/what-is-tamper-resistant-hardware.htm),比如在银行(module)中存储主加密密钥(用于处理密码),但这种硬件的成本非常高。
众所周知,Docker并没有保护代码不受用户:https://stackoverflow.com/a/26108342/196561 -
主机上的根用户(停靠守护进程运行的地方)可以完全访问主机上运行的所有进程。这意味着控制主机的人总是可以访问应用程序的RAM和文件系统。这使得无法隐藏用于解密文件系统或保护RAM不受调试的密钥。
任何能够部署docker容器的用户(来自docker组的用户)都可以完全访问容器fs,具有对容器进程的根访问权,并且可以调试它们并转储它们的内存。https://www.andreas-jung.com/contents/on-docker-security-docker-group-considered-harmful
应该只允许受信任的用户控制您的Docker守护进程
http://docs.docker.com/articles/security/#docker-daemon-attack-surface
Docker允许您在Docker主机和来宾容器之间共享一个目录;它允许您这样做,而不限制容器的访问权限。
因此,Docker不为您的代码提供来自用户的额外保护;我们可以像其他打包系统一样考虑它,比如rpm和deb。Rpm和deb允许您将代码打包到单个文件和列表依赖项中,以及docker将代码和依赖项打包到单个文件中。
我们的解决方案托管在客户端的云服务器上,因此他们可以访问根和硬件。但是,我们在这里有两个优点: 1)我们可以访问一个安全端口,我们可以使用该端口发送令牌来解密代码,并审计可疑的活动;2)我们可以进行手动安装(安装时可以使用令牌中的密钥)。
如果代码运行在您拥有的硬件上,则只能保护它(关闭所有NSA/IntelME/IPMI/UEFI后门以拥有硬件)。如果用户在他的硬件上运行您的代码,那么他将拥有所有的二进制文件,并且能够将内存转储(在接收到您的令牌之后)。
他的硬件上的虚拟化不会为您的代码提供任何额外的保护。
“安全端口”是指SSL/TLS/SSH吗?只有当数据在网络上发送时,它才是安全的;两个端点都将以简单、未加密的形式保存数据。
离开用户的数据中心后,手动安装将无助于保护代码。
我认为您可以购买一些常见的软件保护解决方案,如flexlm,可能需要一些硬件令牌来运行该软件。但任何防护措施都可能被破坏,早期(更便宜)将更容易破解,而现代(更昂贵)保护则更难破解。
您还可以在自己的服务器上运行部分软件;这部分不会被破解。
或者在必要的时候使用防篡改硬件。
如果用户的服务器中没有这样的硬件,则不能使用抗篡改硬件。而且很贵。
https://stackoverflow.com/questions/28868196
复制相似问题