app的安全测试,app安全性测试工具

  app的安全测试,app安全性测试工具

  

前言:

  随着互联网的发展和app应用的普及,最近了解到手机APP相关的安全测试。从入侵或攻击的角度来看,安全隐患在于http包捕获和逆向工程。

  目前大部分app还是使用http或者https,需要防止http抓包泄露用户信息和系统漏洞。通过包捕获gldjb查看陌生用户的信息时,有些手机号、qq等信息页面是不应该显示的,但是这些信息不显示并不代表服务器没有下发,很多都是客户端限制的。通过抓包,可以完整的查看陌生用户的app。比如有很多发帖、推送消息的应用,如果没有验证消息的有效性,在抓包后消息被篡改,服务器就完全没有响应,这就留下了很大的隐患。逆向工程对于android来说很好理解。反编译、修改或插入自己的代码,达到相应的目的。

安全性测试策略

  1.用户隐私

  检查用户密码是否保存在本地,是否加密。

  检查是否有敏感隐私信息,如聊天记录、关系链、银行账户等。都被加密了。

  检查系统文件和配置文件hldfg是否保存在外部设备上。

  需要存储在外部设备中的部分信息,需要在每次使用前判断这些信息是否被篡改过。

  注意:可以检查应用程序的SharedPreferences文件和数据库文件中的数据是否为本地存储数据(root后在应用程序安装目录中,或者检查是否有敏感数据写入外部存储)。

  2.文件权限

  查看App所在的目录,其权限必须是不允许其他群成员读写。

  3.网络传输

  检查敏感信息在网络传输时是否加密,重要数据应该是TLS或SSL。

  备注:默认情况下,http请求是hldfg的。如果安全验证和加密机制较差,很容易被网络嗅探扫描猜测和模拟,也有可能被注入。

  例如,允许注入攻击者使用虚假的HTML表单来欺骗用户输入他们的用户名和密码,然后将他们的凭据发送到恶意网站。

  4.运行时解释保护

  对于内嵌解释器的软件,检查是否存在XSS和SQL注入漏洞。

  使用webiew的App检查是否存在网址欺骗漏洞。

  5.Android组件权限保护

  禁止App内部组件被任何第三方程序调用。

  如果您需要用于外部呼叫的组件,请检查呼叫者是否进行了签名限制。

  升级

  检查升级包的完整性和合法性是否得到验证,避免升级包被劫持。

  7.应用您自己的安全性

  反转应用程序,查看反编译后的代码是否暴露了任何敏感信息。反编译后,修改代码,插入被劫持的代码,重新打包。如果这种漏洞存在,将会对用户和开发者造成极大的威胁。

  备注:要求对应用进行加密,防止静态破解和源代码窃取,然后嵌入恶意病毒、广告等行为,再用工具进行打包签名,形成二次打包的应用。

  8.界面拦截

  通过adb shell命令或第三方软件获取root权限,拦截用户在手机界面填写的隐私信息,然后进行恶意行为。

  

安全性测试方法

  转载西弗里布的文章如下

  移动应用程序大多通过web api服务与服务器进行交互,该服务将移动安全与web安全联系在一起。手机app以web service的方式与服务器交互,服务器也是一个展示信息的网站。常见的web漏洞也存在于此,如SQL注入、文件上传、中间件/服务器漏洞等。但有些app不是直接嵌入app,而是使用api接口返回josn数据,导致扫描器爬虫无法抓取链接。下图是百科抓到的糗事列表。

  于是我试着去找app服务器的漏洞。目前,我想到两种方法:

  1.反编译应用程序

  2.http[s]代理数据包捕获

  那就应该有人提问。这两种方法得到的链接比较分散,不容易发现漏洞。我在这里使用它们的方式是直接将捕获的所有链接提交给多引擎web漏洞扫描器,它可以批量扫描SQL注入等。其实除了这些漏洞,还有很多信息可以利用。

  首先,反编译应用程序

  有两种反编译方法,dex2jar和apktool。这两种工具的反编译效果是不同的。dex2jar反编译java源代码,apktool反编译java汇编代码。

  1.dex2jar反编译

  工具:dex2jar jdgui

  方法:

  A.将apk修改为zip扩展名

  b .提取classes.dex文件

  C.用dex2jar反编译(dex2jar.bat classes.dex)

  最后,反编译的源代码如下。虽然有些类被配置proguard.cfg搞混了,但还是可以用的。

  2.APKTool的反编译

  工具:apktool

  这个工具相对简单。可以直接反编译apk文件(apktool d apkfile)。反编译的东西是小反汇编代码,res资源文件,资产配置文件和lib库文件。我们可以直接搜索smali文件和资源文件来查找链接等。

  用app找到网站的真实IP

  除了app server的漏洞,还有一个更好玩的使用方法。通过收集app中的子域ip,可以找到目标网站的真实IP。根据经验,大部分app界面都没有使用cdn等服务。

  糗事百科真实IP

二、http[s]代理抓包

  该方法在移动设备上设置代理,app通过手动操作与服务器交互。

  步骤:

  A.打开包捕获机器上的代理,就可以使用burp进行测试了。如果需要自动提交扫描任务,可以自己编写代理程序,为移动设备设置代理服务器。

  B.在移动设备上操作app,代理端抓取如下。

总结:

  整个想法已经非常清楚了,所以我们实际上需要做的是自动化这个过程。反编译之后,就有问题了。网址不一定完整,很多网址都是拼接在一起的。我试着写了一个分析引擎,自动反编译,然后通过对源代码的分析,拼接完整的api url,然后扫描漏洞。

  下图是一个穹顶,后面会用python写,放到服务器上。

案例分享

  1.任何用户都可以登录。

  某app某测试,RP较好,发现任意用户登录漏洞。在本地配置文件中,有登录用户的账号和密码,APP设计比较奇妙。它只验证用户的登录邮箱,不验证密码,使得任何用户都可以通过修改本地配置文件进行登录,登录后可以查看别人的订单等数据。安卓虚拟机安装的app都在/data /data目录下。大致的目录结构如下:

  app目录的结构也差不多,包括缓存文件、数据库目录、本地文件、配置文件等。更重要的目录是数据库和shared_prefs。分别保存数据库文件和配置文件。

  言归正传,我查看了安装app的shared_prefs目录,发现其中一个文件有以下内容:

  可以看到用户的登录邮箱和密码,将邮箱修改为已有的用户邮箱,随意输入密码。然后在adb shell之后,使用linux命令删除android虚拟机上已有的配置文件,然后使用adb push将修改后的文件发送到android虚拟机,再打开app发现其他用户已经成功登录。

app的安全测试,app安全性测试工具