Raf*_*ima 8 encryption android google-play android-security
我收到了一封来自谷歌的非常令人不安的电子邮件:
我们对
app name
、 和进行了审核,package name
发现您的应用程序使用的软件包含用户安全漏洞。具有这些漏洞的应用程序可能会暴露用户信息或损坏用户的设备,并可能被视为违反我们的恶意行为政策。以下是在您最近提交的文件中检测到的问题和相应 APK 版本的列表。请尽快迁移您的应用以使用更新后的软件,并增加升级后的 APK 的版本号。
漏洞 APK 版本修复 TrustManager 的截止日期 您可以在这篇 Google 帮助中心文章中找到有关 TrustManager 的更多信息。
486 2020 年 9 月 14 日漏洞 APK 版本修复截止日期要确认您已正确升级,请将应用的更新版本提交到 Play 管理中心,并在五小时后回来查看。如果应用程序未正确更新,我们将显示警告消息。
虽然这些漏洞可能不会影响每个应用程序,但最好及时更新所有安全补丁。
如果您对该漏洞有技术问题,可以发布到 Stack Overflow 并使用标签“android-security”。有关解决此问题所需采取的步骤的说明,您可以联系我们的开发人员支持团队。
最好的事物,
Google Play 团队
应用程序版本 486 上添加的唯一新内容是我添加到某些数据中的 RSA 加密。
这种加密是通过以下方式进行的:我手动生成了一个 RSA 密钥对,将私钥存储在我的服务器中,并将公钥与 apk 一起部署。
对于应用程序中的某些请求,我使用公钥加密数据,然后URLConnection
在服务器端使用发布请求发送数据,然后对其进行解密和处理,然后将响应发送回用户UNENCRYPTED。
所以请考虑以下几点:
0- 应用程序中只有两个使用此技术
的请求 1- 进行此更新是为了确保到达服务器的所有请求都来自我的官方应用程序,因为上周我收到了 3 次 DoS 攻击
2- 这些请求已经存在很长时间了,并且始终使用标准的 android 系统HTTPSUrlConnection
而没有任何额外的加密......我现在所做的是添加一个额外的加密层(它怎么能让应用程序不那么安全?) 3- 传输的数据完全无害
我知道什么是 MITM 攻击并且我已经做了很长时间来逆向工程一些应用程序,我不能在不修改编译代码的情况下对我的应用程序进行这种类型的攻击
话虽如此,如何在不降级我花了一周时间实施的工作的情况下解决这个问题?
这是代码:
post.put("p", "test");
post.put("s", Encrypter.encrypt(userid + "|" + did));
final String data = SimpleJsonDeserializer.getDefaultJson().toJson(post);
FirebaseCrashlytics.getInstance().log(data);
conn = (HttpsURLConnection) new URL(App.CLOUD_FUNCTIONS_HOST + "warsaw?v=2").openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.addRequestProperty("accept", "application/json");
conn.addRequestProperty("content-type", "application/json; charset=utf-8");
conn.addRequestProperty("content-length", data.length() + "");
conn.getOutputStream().write(data.getBytes());
conn.getOutputStream().flush();
conn.getOutputStream().close();
Run Code Online (Sandbox Code Playgroud)
这是 Encrypter 类(这是新添加的486
)
public final class Encrypter {
private static Cipher cipher;
public static void initialize(@NonNull final Context c) {
if (cipher == null) {
try {
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decode("my public key base64 coded".getBytes(), Base64.DEFAULT));
KeyFactory kf = KeyFactory.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, kf.generatePublic(spec));
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeySpecException | InvalidKeyException e) {
App.shouldNeverHappen(e);
}
}
}
public static String encrypt(@NonNull final String s) throws IllegalBlockSizeException {
if (s.isEmpty() || s.length() > 240)
throw new IllegalBlockSizeException("Data must not be longer than 245 bytes");
try {
return new String(Base64.encode(cipher.doFinal(s.getBytes()), Base64.DEFAULT));
} catch (BadPaddingException e) {
App.shouldNeverHappen(e);
return "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用“注入”恶意密钥的唯一方法是修改编译后的代码(这是不可能阻止的),但即使这样做,攻击者也只能修改发送的请求中的后数据签名,这
对任何类型都是无用的网络钓鱼攻击
我 100% 确定这种警告是由一些自动代码检查标记的(谷歌在手动重新评估上花费了零工作),所以自从我遇到这个问题以来,我已经部署了我的应用程序的几个版本只是“屏蔽周围" 尝试在此自动代码检查中不被标记的代码......到目前为止还没有成功。
归档时间: |
|
查看次数: |
1974 次 |
最近记录: |