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
语句。
如果用户是您的敌人,只需 运行 服务器上的软件在您的安全和控制之下。
当涉及到动态链接时,我对我的应用程序的安全性和完整性有疑问。我想将一个应用程序连同 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
语句。
如果用户是您的敌人,只需 运行 服务器上的软件在您的安全和控制之下。