如何使我的android应用程序更安全?

vmjh9lq9  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(382)

我有一个移动应用程序,用户也在我的应用程序上作弊。在应用程序中,我使用asynctask和jsonobject提供了指向php代码的链接。到目前为止,一切顺利。但问题是,当他们在应用程序中收到奖励时,奖励的价值是5,而一些用户通过将其设为5000来作弊。
我在php代码中做了类似于accept if 5的操作,但它似乎不是解决方案。
长话短说,
用户使用作弊程序或任何其他方式修改字符串。
我不知道他们是怎么做到的。
我的php代码的链接写在应用程序中。我曾经

if (!empty($_SERVER['HTTPS'])) {
require_once('Mobile_Detect.php');
$detect = new Mobile_Detect;
if( $detect->isAndroidOS() ){

$agent = $_SERVER['HTTP_USER_AGENT'];
$agent=strtolower($agent);
if (strpos($agent, 'android') !== false) {
$os = 'Android';

$secret = ((!empty($_POST['secret']))?$_POST['secret']:"");

if ($secret == "JLSDANS394234LN34LSJDFNL2"){

  //CRUD ON HERE

}}}

我的php代码中的代码,这样他们就不会向这些链接发送虚假的post方法。
我用firebase firestore创建了一些密钥。我在php代码中定义了这些键。我将firestore中的密钥分配给一个字符串。我不知道是否会有问题。
用户无法再将5更改为5000,因为从firestore使用密钥发送。
但仍然有一些用户可以作弊。我如何解决这个问题,或者保留api链接,或者更安全地更新mysql表?

pu3pd22g

pu3pd22g1#

你的移动应用程序问题

我有一个移动应用程序,用户也在我的应用程序上作弊。在应用程序中,我使用asynctask和jsonobject提供了指向php代码的链接。到目前为止,一切顺利。
移动应用程序在客户端设备上运行,因此它在不受信任的环境中运行。它的所有代码都必须被认为是公开的,包括api端点的秘密和URL,并且知道如何调用和攻击api端点并不难。
让我们看看为什么。。。

为什么它是公开的和不可信的?

因为开源工具的存在使得静态地对应用程序二进制进行反向工程变得非常简单,以便能够分析代码并了解其工作原理,提取机密、api URL,甚至修改其代码以重新打包移动应用程序并在设备上重新安装。
例如,我写了一篇文章,展示了反向工程一个移动应用程序二进制代码是多么容易,标题是如何通过静态二进制分析从移动应用程序中提取api密钥:
可用于反向工程的开源工具的范围是巨大的,在本文中我们确实无法触及这个主题的表面,但我们将重点介绍如何使用移动安全框架(mobsf)来演示如何反向工程我们移动应用程序的apk。mobsf是一个开源工具的集合,它们在一个吸引人的 Jmeter 板中展示了它们的结果,但是mobsf内部和其他地方使用的相同工具可以单独使用以实现相同的结果。
在本文中,我们将使用AndroidHide secrets research存储库,它是一个虚拟移动应用程序,使用几种不同的技术隐藏api密钥。

了解如何调用和攻击api端点

这一点并不难实现,因为几个开源工具可以帮助我们执行中间人(MITM)攻击的任务,在这里我们拦截移动应用程序和API服务器之间的所有通信,即使使用HTTPS。这将允许我们随意检查/修改请求和响应,甚至可以重播来自mitm工具的请求。
针对mitm攻击的常见防御措施是在移动应用程序中实现证书固定,您可以在文章《使用证书固定保护https》中看到这一点:
为了演示如何使用证书固定来保护移动应用程序和api服务器之间的https流量,我们将使用我在上一篇文章中使用的相同货币转换器演示移动应用程序。
在本文中,我们将了解什么是证书固定,何时使用它,如何在android应用程序中实现它,以及它如何防止mitm攻击。
不幸的是,一旦用户/攻击者控制了他的设备,他就可以使用其他开源工具绕过证书固定,并能够执行mitm攻击,就像我在文章中展示的如何在android应用程序上使用frida绕过证书固定,向您展示了如何做到这一点:
今天,我将展示如何使用frida instrumentation框架在运行时钩住移动应用程序并插入代码,以便在移动应用程序已实现证书固定的情况下执行成功的mitm攻击。
绕过证书固定并不太难,只是有点费劲,并且允许攻击者详细了解移动应用程序如何与其api通信,然后使用相同的知识来自动化攻击或围绕其构建其他服务。
使用此方法,用户/攻击者可以在运行时使用mitm工具或frida脚本轻松修改奖励值。

火基是不够的

我用firebase firestore创建了一些密钥。我在php代码中定义了这些键。我将firestore中的密钥分配给一个字符串。我不知道是否会有问题。
通过使用frida,攻击者可以在运行时将其挂接到移动应用程序中,提取其从firebase返回的秘密,然后在重新打包的应用程序、web应用程序甚至简单的curl请求中重新使用。
例如,尽管本文展示了一个如何使用frida在运行时在ios上的函数中挂钩的示例,但android的过程是等效的:
现在我们有足够的信息自己获取数据:

const firebase = require("firebase");
const util = require('util')

var firebaseConfig = {
   apiKey: "<redacted>",
   authDomain: "<redacted>",
   databaseURL: "<redacted>",
   projectId: "<redacted>",
   storageBucket: "<redacted>",
   messagingSenderId: "<redacted>",
   appId: "<redacted>",
};

firebase.initializeApp(firebaseConfig);
var database = firebase.firestore();

["<redacted>", "<redacted>"].forEach(collection => {
   database.collection(collection).get().then(function(querySnapshot) {
       console.log(`Data for ${collection}:`);
       querySnapshot.forEach((doc) => {
           var data   ​= doc.data();
           console.log(util.inspect(data, false, null, true));
       });
   }).catch(function (error) {
       console.log("Error getting document:", error);
   });
});

从firebase中提取秘密并不难,一旦攻击者掌握了秘密,他就可以从任何他想要的地方重用它,因为代码中的用户代理保护很容易绕过:

agent = $_SERVER['HTTP_USER_AGENT'];

攻击者只需将正确的头添加到api请求中。

奖励篡改

但问题是,当他们在应用程序中收到奖励时,奖励的价值是5,而一些用户通过将其设为5000来作弊。
如果您已经阅读了以上所有内容,您现在知道了几种篡改奖励计划的方法:
对移动应用程序二进制文件进行反向工程,更改代码并重新打包移动应用程序。
执行mitm攻击以了解api的工作原理,然后在移动应用程序外部自动执行请求。
在运行时将其挂接到代码中,并对其进行修改以更改奖励金额或从firebase中提取秘密,以便在移动应用程序外部自动执行api请求。
如果我是攻击者,我会使用frida从firebase中提取机密,然后修改移动应用程序代码以删除firebase呼叫,并将其替换为harcoded机密。之后,我会重新打包移动应用程序并重新安装。

可能的解决办法

但仍然有一些用户可以作弊。我如何解决这个问题,或者保留api链接,或者更安全地更新mysql表?
为了确保你的用户不会欺骗你,你需要尽可能多的防御措施。您需要以这样一种方式保护您的api,即它能够知道发出请求的是您的移动应用程序的真实和未修改版本,而不是curl请求、重新打包的移动应用程序、mitm工具或任何其他未经授权的方式。移动应用程序本身也需要使用加固和防护措施。
为了更好地理解如何应对所有这些防御措施,我建议您阅读我对如何为移动应用程序保护api rest?的问题给出的答案,特别是强化和屏蔽移动应用程序、保护api服务器和可能更好的解决方案的部分。

你想多跑一英里吗?

在回答任何安全问题时,我总是喜欢引用OWASP基金会的优秀作品。

用于API

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

用于移动应用程序

owasp移动安全项目-十大风险
owasp移动安全项目是一个集中的资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。
owasp-移动安全测试指南:
《移动安全测试指南》(mstg)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册。

相关问题