为了应用程序内部的安全性,我使用下面的方法来生成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时,除了上述保护应用程序安全的方法之外,有没有其他有效的方法来生成密钥散列。
我们可以创建APK密钥吗,这个SHA256密钥在构建APK之后可以进行反向工程吗?请提前在this.Thanks上帮我。
发布于 2020-05-07 14:49:20
插装框架
为了应用程序内部的安全性,我使用下面的方法来生成
。
无论您对哪种类型的代码进行了多少混淆,攻击者只需在运行时使用开源工具框架(如Frida )连接到您的移动应用程序即可
将您自己的脚本注入黑盒进程。钩子任何函数,监视加密API或跟踪私有应用程序代码,不需要源代码。编辑,点击保存,并立即看到结果。所有这些都无需编译步骤或程序重启。
所以攻击者发现了你正在调用的函数,然后挂上它来监听返回结果,并将其提取到命令和控制服务器,或者只是将其修改为他喜欢的任何值。
逆向工程
我们可以创建SHA256密钥吗,这个SHA256密钥可以在构建APK后进行逆向工程吗?
是的,您可以这样做,我首选的工具是MobSF - Mobile Security Framework
移动安全框架是一个自动化的,一体化的移动应用程序(安卓/iOS/Windows)笔测试框架,能够执行静态分析,动态分析,恶意软件分析和web API测试。
您可以阅读文章How to Extract an API Key from a Mobile App with Static binary Analysis来了解我是如何使用MobSF来提取API的,但是过程将类似于查找和提取任何其他类型的密钥。
您可以通过使用JNI/NDK将秘密隐藏在本机C代码中,从而使静态分析很难找到它
使用Android Studio2.2和更高版本,您可以使用
将C和C++代码编译到本地库中,并使用集成开发环境的集成构建系统Gradle将其打包到您的APK中。然后,您的Java代码可以通过Java native Interface (JNI)框架调用本机库中的函数。
有关示例实现,请参阅Currency Converter Demo的this folder,这是文章Steal that API Key with a Man in the Middle Attack的配套移动应用程序
为了帮助演示如何窃取应用程序接口密钥,我在Github中构建并发布了适用于安卓系统的货币转换器演示应用程序,它使用了我们在早期的安卓隐藏秘密应用程序中使用的相同的JNI/NDK技术来隐藏应用程序接口密钥。
因此,在本文中,您将学习如何设置和运行MitM攻击来拦截您控制的移动设备中的https流量,以便窃取API键。最后,您将在较高的级别上了解如何减轻MitM攻击。
本文向您展示了如何使用代理来进行中间人攻击,这是另一种广泛用于从移动应用程序中提取秘密的技术。当我无法通过静态分析找到秘密时,我发现它非常有用。
在本文中,我使用了一个非常流行的开源工具mitmproxy
是为渗透测试人员和软件开发人员提供的一种交互式的、支持TLS的拦截HTTP代理。
将API锁定到移动应用程序
在调用
时,有没有其他有效的方法来生成密钥散列,以保护应用程序的安全。
我认为你正在寻找的是锁定你的应用程序接口服务器,只接受来自你的移动应用程序的请求,如果是这样的话,请阅读我给问题如何保护移动应用程序的API REST?中关于保护应用程序接口服务器的部分和一个可能的更好的解决方案。
基本上,在这个回复中,您可以学习几种技术来保护您的API服务器,并尝试以高度的信心将其锁定到您的移动应用程序。
你想走更远的路吗?
在回答任何安全问题时,我都觉得有必要参考OWASP基金会的优秀工作。
适用于移动应用
OWASP Mobile Security Project - Top 10 risks
是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或利用的可能性。
OWASP - Mobile Security Testing Guide
移动安全测试指南是一本全面的移动应用安全开发、测试和逆向工程手册。
对于APIS
OWASP API安全项目旨在通过强调不安全API中的潜在风险,并说明如何减轻这些风险,为软件开发人员和安全评估人员提供价值。为了促进这一目标,OWASP API Security Project将创建并维护前10个API安全风险文档,以及在创建或评估API时的最佳实践的文档门户。
发布于 2020-09-24 06:11:13
首先,请参考Google HERE和OWASP Mobile top 10 guide的最佳实践指南。
但是,从个人经验来看,以上内容只会帮助您解决基本和常见的安全问题。作为高技能开发团队的一员,由于手头的开发任务,我们仍然跟不上现代网络攻击的进步和发展。Proguard也只在基础级别上工作,更高级的攻击确实设法绕过了。
最终为我们工作的是与一个安全解决方案的合作。我们选择了AppSealing。还有其他可用的解决方案。我记得Arxan,Appdome,Protectmyapp,Promon。我相信还有更多。这些解决方案还将处理最新的攻击,同时您可以专注于开发工作。集成也非常简单。AppSealing要求您上传您的apk,然后下载受保护的文件进行分发。
如果你有一个处理个人和财务信息的应用程序,你绝对应该考虑这些,而不是试图在内部管理安全。
https://stackoverflow.com/questions/61650869
复制