我可以毫无问题地调用其他应用程序的活动,包括发送一些数据和接收一些数据。但我正在发送和接收一些敏感信息,这些信息如果落入坏人之手,可能会被滥用。我的问题是,在应用程序之间旅行时,这些数据安全吗?
例如,我将这样的活动称为:
Intent intent = new Intent("com.my.package.MY_REQUEST_ACTION");
intent.setClassName("com.other.package", "com.other.package.UserActionActivity");
signerIntent.putExtra("INTENT_PASSWORD", "1234");
signerIntent.putExtra("INTENT_COMMAND", "COMMAND_DO_SOMETHING");
signerIntent.setType("text/plain");
startActivityForResult(intent, 0);并在UserActionActivity中返回一些内容:
Intent result = new Intent("com.other.package.INTENT_RESULT_DESCRIPTION");
result.putExtra("INTENT_RETURN_RESULT", "...");
result.putExtra("INTENT_RETURN_RESULT2", "...");
setResult(Activity.RESULT_OK, result);
finish();诸若此类。但是这些额外的字符串有多安全?我是否有必要担心其他应用程序(这两种应用除外)是否有意或通过某种“黑客”访问它们?我需要像公钥加密之类的东西吗?
在有根的系统上,情况是否不同(例如,一个拥有根权限的应用程序可以在不花费太多精力的情况下读取应用程序间的通信)?
发布于 2018-03-20 12:58:41
我是否有必要担心其他应用程序(这两种应用除外)是否有意或通过某种“黑客”访问它们?
让我们暂时假设没有一个应用程序被攻击者修改过。如果是这样的话,那么原则上,你已经建立的通信应该在非根设备上是私有的。在实践中,虽然我最近还没有发现活动Intent附加程序的bug。在IPC选项中,从安全的角度来看,活动可能是最糟糕的选择,因为它们会产生其他影响(例如,出现在概述/最近的任务屏幕中),增加了我们忽略某些错误的可能性。
但是,在您的代码中,双方都假定另一个应用程序没有被修改。特别是:
com.other.package没有被攻击者修改。有一些方法可以帮助防范这种情况(例如,自定义signature权限,在运行时检查签名)。
此外,请记住,攻击者可以毫不费力地找到"1234"。
关于建议加密的注释,考虑到您所描述的协议,加密似乎是一个不太可能的解决方案。如果您必须在IPC协议中提供一个秘密(INTENT_PASSWORD),那么两个应用程序都没有用于加密目的的共享秘密,我也不太确定您将使用什么公钥基础结构来提供公钥加密。
在有根的系统上,情况是否不同(例如,一个拥有根权限的应用程序可以在不花费太多精力的情况下读取应用程序间的通信)?
绝对一点儿没错。在一个有根的设备上,所有的赌注都取消了。不过,这与IPC并没有具体的联系。
发布于 2018-03-20 12:58:57
简短的回答:这是不安全的,但它需要一些努力的攻击者。
长话短说:中段攻击中的一名男子可以拦截转移:
在没有根的手机上:
如果您向intent.setClassName("com.other.package", "com.other.package.UserActionActivity");发送数据,那么有人可以卸载原始的"com.other.package“,并使用与接收未加密数据相同的活动安装自己的"com.other.package”。
例如,攻击者可以拆卸原始软件,添加代码(用于处理机密数据),并将代码重新组装到新的apk中(使用不同的证书)。
基于根设备:我不知道,但我假设“公开的框架”有可能拦截和重新定义android调用。
https://stackoverflow.com/questions/49384518
复制相似问题