C 签名令牌的动态链接和安全性

C Dynamic linking and security of signed tokens

当涉及到动态链接时,我对我的应用程序的安全性和完整性有疑问。我想将一个应用程序连同 libcrypto.so 一起发送给我的客户,该应用程序对某些 JWT 令牌进行一些签名验证。现在理想情况下,我希望我的客户不要“破解”我的安全(我不想让他提供自己的令牌)。

假设我的动态库有这样一个方法:

myLib.so

void verifyToken( std::string token ) {
 if( externalLibVerifyToken( token ) ) {
   // verified
 } else {
   // not verified
 }
}

外部库(例如libcrypto.so):

bool externalLibVerifyToken( std::string token ) { /* verify it and return */ }

现在,我的应用程序附带 myLib.so 和 libcrypto.so 并使用动态 C 链接(std::string 仅用于示例目的)。

如果有人(例如目标受众)将 libcrypto.so 替换为另一个,暴露相同的符号,但绕过所有类型的验证,会发生什么情况?从技术上讲,他们可能会搞砸我的验证策略,对吗?

第二个问题:我能以某种方式减轻它吗? 我当然可以使用 libcrypto.a 并将其嵌入 mylib.so,但也许有更好的策略?

作为软件开发人员,您依赖于软件 运行.

计算机和操作系统的安全性

如果拥有管理员权限的用户想要破解您的软件,您通常无能为力。试想,不仅仅是更换动态库,他(用户)甚至可以修改软件,完全去掉if语句。

如果用户是您的敌人,只需 运行 服务器上的软件在您的安全和控制之下。