如何保护Android应用程序



为了应用程序中的安全性,我使用以下方法生成Keyhash。

private String getKeyHash() {
PackageInfo info;
String keyHash = null;
try {
info = getPackageManager().getPackageInfo(BuildConfig.APPLICATION_ID, PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
//md = MessageDigest.getInstance(hashStretagy);
md = MessageDigest.getInstance("SHA");
//md = MessageDigest.getInstance(getK);
md.update(signature.toByteArray());
keyHash = new String(Base64.encode(md.digest(), Base64.NO_WRAP));
Log.v("KeyHash : " , keyHash);
}
} catch (PackageManager.NameNotFoundException e1) {
Log.v("name not found" , e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.v("no such an algorithm" , e.toString());
} catch (Exception e) {
Log.v("exception" , e.toString());
}
return keyHash;
}

除了上述在调用API时保护应用程序安全的方法之外,还有其他有效的方法来生成密钥哈希吗。

我们可以创建SHA256密钥吗?这个SHA256密钥可以在构建APK后进行逆向工程吗?请帮我一下。提前谢谢。

仪器框架

为了应用程序中的安全性,我使用以下方法生成Keyhash。

无论你对哪种类型的代码进行了多少模糊处理,攻击者只需要在运行时使用开源工具框架(如Frida:)钩住你的移动应用程序

将您自己的脚本注入黑盒进程。挂钩任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击保存,立即查看结果。所有这些都没有编译步骤或程序重新启动。

因此,攻击者发现您正在调用的函数,然后挂接它以侦听返回结果,并将其提取到命令和控制服务器,或者将其修改为任何他喜欢的值。

逆向工程师

我们可以创建SHA256密钥吗?这个SHA256密钥可以在构建APK后进行逆向工程吗?

是的,你可以,我喜欢的工具是MobSF-移动安全框架:

移动安全框架是一个自动化的、一体化的移动应用程序(Android/iOS/Windows)笔测框架,能够执行静态分析、动态分析、恶意软件分析和web API测试。

您可以阅读《如何使用静态二进制分析从移动应用程序中提取API密钥》一文,了解我是如何使用MobSF提取API密钥的,但程序与查找和提取任何其他类型的密钥类似。

您可以通过使用JNI/NDK:将秘密隐藏在本机C代码中,从而使静态分析难以找到秘密

使用Android Studio 2.2及更高版本,您可以使用NDK将C和C++代码编译到本地库中,并使用IDE的集成构建系统Gradle将其打包到APK中。然后,Java代码可以通过Java native Interface(JNI)框架调用本地库中的函数。

有关示例实现,请参阅货币转换器演示的此文件夹,这是文章"用中间人攻击窃取API密钥:"的配套移动应用程序

为了帮助演示如何窃取API密钥,我在Github中构建并发布了适用于Android的Currency Converter Demo应用程序,该应用程序使用了与我们在早期的Android Hide Secrets应用程序中使用的相同的JNI/NDK技术来隐藏API密钥。

因此,在本文中,您将学习如何设置和运行MitM攻击,以拦截您控制的移动设备中的https流量,从而窃取API密钥。最后,您将从高层次了解如何减轻MitM攻击。

本文展示了如何使用代理进行中间人攻击,这是另一种广泛用于从移动应用程序中提取秘密的技术。当我无法通过静态分析找到秘密时,我发现它非常有用。

在这篇文章中,我使用了一个非常流行的开源工具mitmproxy:

为渗透测试人员和软件开发人员提供的交互式TLS拦截HTTP代理。

将API锁定到移动应用程序

除了上述方法之外,还有其他有效的方法可以生成密钥哈希来保护调用API的应用程序。

我认为您正在寻找的是锁定API服务器,仅接受来自移动应用程序的请求,如果是这样,请阅读我对问题的答复如何确保移动应用程序使用API REST有关保护API服务器可能的更好解决方案的部分。

基本上,在这个回复中,你可以学习几种技术来保护你的API服务器,并尝试高度自信地将其锁定到你的移动应用程序中。

你想多走一步吗

在回答安全问题时,我觉得有必要参考OWASP基金会的优秀工作。

对于移动应用程序

OWASP移动安全项目-十大风险

OWASP移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。

OWASP-移动安全测试指南:

《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。

对于APIS

OWASP API安全前10名

OWASP API安全项目旨在通过强调不安全API中的潜在风险并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了实现这一目标,OWASP API安全项目将创建并维护API十大安全风险文档,以及创建或评估API时最佳实践的文档门户。

首先,请参阅Google HERE的最佳实践指南和OWASP Mobile top 10指南。

然而,从个人经验来看,以上内容只会帮助您处理基本和常见的安全问题。作为一个高技能开发团队的一员,由于手头的开发任务,我们仍然无法跟上现代网络攻击的发展和演变。Proguard也只在基本水平上发挥作用,而更高级的攻击确实成功绕过了。

最终对我们起作用的是与安全解决方案合作。我们选择了AppSealing。还有其他可用的解决方案。Arxan、Appdome、Protectmyapp、Promon是我记忆中的那些。我相信还有一些。这些解决方案还将处理最近的攻击,同时您可以集中精力进行开发。集成也非常简单。AppSealing要求你上传你的apk,然后下载受保护的文件进行分发。

如果你有一个处理个人和财务信息的应用程序,你绝对应该考虑这些,而不是试图在内部管理安全。

相关内容

  • 没有找到相关文章